S3C6410的tv out输出lcd的内容

2023-10-18 09:58
文章标签 输出 内容 lcd tv s3c6410

本文主要是介绍S3C6410的tv out输出lcd的内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.chinaunix.net/uid-20587912-id-2940408.html
s3c6410 TVout 测试 

一.tvout_app的移植

为了测试S3C6410的电视输出,我拿了官方的tvout_app中的测试,这个做的相当初糙,好象是很老的版本,在更改了Makefile后编译,最后发现有函数未定义
/home/huisen/project/tvout/tvout_app/tv_test.c:450: undefined reference to `s3c_get_media_memory'

查看源码是这个原因造成的
ctrl.value = POST_BUFF_BASE_ADDR;
而这个宏是如下定义
#define POST_BUFF_BASE_ADDR (UINT32)s3c_get_media_memory(S3C_MDEV_TV)

这个应用程序直接调用驱动里的函数,这在LINUX是不可以的。我估计三星也没把这TVOUT当回事,直接就发布了,编译通不过也不管。虽然在培训上s3c6410用的很多,但是很多细节上来看,在花了很长时间做s3c2440后,三星匆忙推出s3c6410,然后大队人马就去搞s5p系列了。留一下一堆问题。

一种最简单方法是扩展s3c-tvenc的驱动,增加一个VIDIOC_G_CTRL的ioctl指令,让其在驱动中调用s3c_get_media_memory.

在s3c-tvenc.c 增加如下代码:
新增函数: s3c_tvenc_get_v4l2_control()
在s3c_tvenc_do_ioctl()增加命令支持
  1. static int s3c_tvenc_get_v4l2_control(struct v4l2_control *ctrl)
  2. {
  3.   switch(ctrl->id) {
  4.       case V4L2_CID_MPEG_STREAM_PID_VIDEO:
  5.          ctrl->value = tv_param.sp.SrcFrmSt;
  6.          return 0;
  7.       default:
  8.         return -EINVAL;
  9.     }
  10.     return 0;
  11.   
  12. }

  13. static int s3c_tvenc_do_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,void *arg)
  14. {
  15.  // ...
  16.  /* add by Andrew Huang */
  17.     case VIDIOC_G_CTRL:
  18.         {
  19.             struct v4l2_control *ctrl = arg;
  20.             //printk("P: VIDIOC_S_CTRL \n");
  21.             ret = s3c_tvenc_get_v4l2_control(ctrl);
  22.             return ret;
  23.         }
  24.     // ...    
  25. }
修改tv_test.c 代码,增加对上述ioctl命令的调用
修改 450行,增加如下代码

  1. //add by Andrew Huang 
  2. #if 1
  3.        ret = ioctl(tvout_fp, VIDIOC_G_CTRL, &ctrl);
  4.         if(ret < 0) {
  5.             printf("V4L2 APPL : ioctl(VIDIOC_G_CTRL) failed\n");
  6.             goto err;
  7.         }        
  8. #else 
  9.         //ctrl.value = POST_BUFF_BASE_ADDR;        // 编译通不过
  10. #endif

去掉一些编译警告后,可以测试了。
  1. [root@huisen tvout_app]# make clean
  2. rm -f tv_test ./tv_test.o ./FrameExtractor.o ./SsbSipH264Decode.o ./H264Frames.o ./SsbSipMfcDecode.o ./SsbSipLogMsg.o
  3. [root@huisen tvout_app]# make
  4. arm-linux-gcc -Wall -O0 -lpthread -I/home/huisen/rom/mini6410/linux-2.6.28.6/include -I. -g -c -o tv_test.o tv_test.c
  5. arm-linux-gcc -Wall -O0 -lpthread -I/home/huisen/rom/mini6410/linux-2.6.28.6/include -I. -g -c -o FrameExtractor.o FrameExtractor.c
  6. arm-linux-gcc -Wall -O0 -lpthread -I/home/huisen/rom/mini6410/linux-2.6.28.6/include -I. -g -c -o SsbSipH264Decode.o SsbSipH264Decode.c
  7. arm-linux-gcc -Wall -O0 -lpthread -I/home/huisen/rom/mini6410/linux-2.6.28.6/include -I. -g -c -o H264Frames.o H264Frames.c
  8. arm-linux-gcc -Wall -O0 -lpthread -I/home/huisen/rom/mini6410/linux-2.6.28.6/include -I. -g -c -o SsbSipMfcDecode.o SsbSipMfcDecode.c
  9. arm-linux-gcc -Wall -O0 -lpthread -I/home/huisen/rom/mini6410/linux-2.6.28.6/include -I. -g -c -o SsbSipLogMsg.o SsbSipLogMsg.c
  10. arm-linux-gcc -Wall -O0 -lpthread -I/home/huisen/rom/mini6410/linux-2.6.28.6/include -I. -g -o tv_test ./tv_test.o ./FrameExtractor.o ./SsbSipH264Decode.o ./H264Frames.o ./SsbSipMfcDecode.o ./SsbSipLogMsg.o -lpthread

  二.测试电视电视输出
你可以直接使用一个电视机,当然有时比较麻烦,有时不好找,或者用电视机盒转到VGA的显示器上.
我使用专业一点的AV/TV 8"的监视器,这是我用用来做高清摄像头,DVR开发的,这时可以用来测试一下S3C6410的TV输出,将其输入信号变成AV信号
测试1:将LCD的显示结果发送到TV上
 ./tv_test 0  
运行时能看电视屏幕显示LCD的效果,操作LCD,TV同步更新.注意这里设备结点是(/dev/video14)


三.测试H.264输出
第一次测试,H.264失败
  1. [root@hxy tvout_app]# ./tv_test 1 slamtv60.264
  2. This mode works with MFC decoder
  3. SsbSipH264DecodeExe:1
  4. H.264 Decoder Configuration Failed.
首先在Linux 2.6.28.6中有两个MFC驱动,查看.config使用的是 CONFIG_VIDEO_MFC10,即MFC 1.0的驱动

后试着换了一下三星自带两个测试视频.可以正常的电视上播放
  1. [root@FriendlyARM tvout_app]# ./tv_test 1 wanted.264
  2. This mode works with MFC decoder
  3. width=640 height=480.
  4. Device file open
  5. V4L2 APPL : Name of the interface is S3C TV-OUT driveTVENCODER
  6. V4L2 APPL : [1]: IN channel name Memory input (MSDMA)
  7. V4L2 APPL : DMA INPUT
  8. V4L2 APPL : [0]: OUT channel name TV-OUT
  9. V4L2 APPL : TV OUT

动画能正常播放,但是电影有点小卡.

这篇关于S3C6410的tv out输出lcd的内容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/231816

相关文章

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

Java如何将文件内容转换为MD5哈希值

《Java如何将文件内容转换为MD5哈希值》:本文主要介绍Java如何将文件内容转换为MD5哈希值的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java文件内容转换为MD5哈希值一个完整的Java示例代码代码解释注意事项总结Java文件内容转换为MD5

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

全解析CSS Grid 的 auto-fill 和 auto-fit 内容自适应

《全解析CSSGrid的auto-fill和auto-fit内容自适应》:本文主要介绍了全解析CSSGrid的auto-fill和auto-fit内容自适应的相关资料,详细内容请阅读本文,希望能对你有所帮助... css  Grid 的 auto-fill 和 auto-fit/* 父元素 */.gri

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解