s3c6410 TVout 测试

发布者:GoldenDream最新更新时间:2024-11-05 来源: cnblogs关键字:s3c6410  测试  移植 手机看文章 扫描二维码
随时随地手机看文章

一.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) failedn');

  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  测试  移植 引用地址:s3c6410 TVout 测试

上一篇:Linux 下使用s3c6410的post处理器的进行硬件缩放
下一篇:Linux 驱动分析--s3c6410 的SDIO驱动分析

推荐阅读最新更新时间:2026-03-02 08:49

s3c6410移植sqlite3.7.8
1、下载源代码http://www.sqlite.org/download.html 2、tar -zxvf sqlite-amalgamation-3.6.23.1.tar.gz 3、进入sqlite-3.6.23.1 4、mkdir build 5、cd build 6、../configure --host=arm-linux --prefix=/usr/local/sqlite3 注意:使用arm-linux-gcc 3.4.5时出现如下错误 checking for C compiler default output file name... configure: error: C compiler cannot cre
[单片机]
S3C6410移植apache和php
需要准备的东西: Apache-1.3.39 for linux Php-4.4.8 for linux Ubuntu amd64位 PC机 6410开发板,我用的是友善之臂 交叉编译: 交叉编译呢,简单地说,就是在一个平台上生成另一个平台上的可执行代码,即使用pc上的arm linuxgcc编译器编译好代码,并安装,然后把整个安装包放到开发板的相应目录。 理论上只需在PC上编译安装arm版的apache和php即可,实际上由于在编译安装过程中需要用到某些文件,而这些文件在x86或amd64平台上无法运行的,所以在编译arm版的apache和php之前,需要先使用gcc编译x86版的apache和php。 Apache
[单片机]
S3C6410嵌入式应用平台构建(四)——linux-3.14.4移植到OK6410-(初步启动)
这次,还是把基本的基于我目前最新的Linux源码进行移植到OK6410吧,同时也写下我移植过程中遇到的问题及解决方法,不过有些方法是借鉴网上的,有些是自己加的,会有一些小bug。 一、基本工作 1. 源码下载 https://www.kernel.org/ ,最好是下载stable版本,否则会有小bug。(我现在调试的是stable版本, linux-3.14.4) 2. 拷到自己的文件夹下解压,我下的是.xz后缀的,这样文件比较小,只是解压时多一个步骤。 $ xz –d linux-3.14.4.tar.xz $ tar xvf linux-3.14.4.tar 3. 解压完后,进入解压后的目录 二、源码
[单片机]
<font color='red'>S3C6410</font>嵌入式应用平台构建(四)——linux-3.14.4<font color='red'>移植</font>到OK6410-(初步启动)
S3C6410嵌入式应用平台构建(五)——linux-3.14.4移植到OK6410-(Nand分区问题)
前一篇文章,我们的Linux能后启动了,只是在识别nand时候,没有获取到时钟源,导致后面的分区没哟进行。 我们从启动的log发现: s3c24xx-nand s3c6400-nand: failed to get clock s3c24xx-nand: probe of s3c6400-nand failed with error –2 于是追踪到代码: nandflash驱动中——s3c2410.c中 /* get the clock source and enable it */ info- clk = devm_clk_get(&pdev- dev, nand ); if (IS_ERR(
[单片机]
支持S3C6410处理器SD卡启动模式的U-Boot-2011.06移植修改方案
通用Bootloader(Universal Bootloader,U-Boot)是系统上电后执行的第一段代码,其作用主要包括初始化硬件环境以及加载执行操作系统内核。在进行系统安装时,U-Boot通常需要使用专用工具烧写到FLASH中,内核及文件系统则通过U-Boot命令进行烧写,该过程操作繁琐,并且容易出错,不适宜系统的大量安装。 S3C6410是三星公司生产的一款基于ARM11架构的通用嵌入式处理器,其启动方式除了传统的Flash启动模式外,还支持从SD 卡中启动系统。本文基于S3C6410处理器,分析了从SD卡启动系统的原理,并对U-Boot源码进行修改以支持该启动方式,在此基础上进一步扩展了U-Boot的功能,使其支持
[单片机]
支持<font color='red'>S3C6410</font>处理器SD卡启动模式的U-Boot-2011.06<font color='red'>移植</font>修改方案
基于S3C6410的ARM11学习(十八) 移植printf和scanf
在学c语言的时候,经典的hello world程序,是通过printf函数实现了。有了这个函数,就可以随意的向屏幕打印数据了。在嵌入式中,其实也是可以用printf函数的,不过需要稍微麻烦点的移植。毕竟,在嵌入式中,所有实现的都要自己来弄,不在向PC程序开发一样,很多库函数,操作系统已经搞好,就用就行了。 首先,是要去下载能实现printf的源代码。这里用的是国嵌提供的。有两个文件夹,一个include,里面一些头文件,另外一个lib,实现printf的需要的额外的程序。 中间的是inlcude中的头文件,下边是lib中的文件。 在lib中有一个Makefile。这个Makefile
[单片机]
基于<font color='red'>S3C6410</font>的ARM11学习(十八) <font color='red'>移植</font>printf和scanf
第五章 搭建S3C6410开发板的测试环境
在PC上可以开发Linux驱动,重新编译成ARM架构的Linux驱动模块,但最后还是要在开发板上进行测试。目前最流行的是基于三星S3C6410 ARM11架构的开发板,很多厂商在其基础上进行了扩展,开发了扩展板。 下面对S3C6410开发板进行简单的介绍:三星S3C6410是一款低功耗、高性价比的RISC精简指令集系统的处理器,基于ARM11内核,可用于移动电话和通用处理等领域。它为通信服务提供了优化的硬件性能,内置强大的硬件加速器,有运动视频处理、音频处理、2D加速、显示处理和缩放等,还集成了一个MFC多格式视频码,支持MPEG4 /H.263/H.264编解码和VC1解码,能提供实时的视频会议以及NRSC和PAL制式的TV
[单片机]
S3C6410开发板按键驱动代码分析及测试代码分析
在本文中,我们对S3C6410开发板按键驱动代码的实现过程进行分析,然后通过一个实例对按键功能进行测试。在本文的资源中包含了设备驱动的源码和测试的源码。 一、设备驱动源码分析 按键的设备驱动主要实现了模块的初始化、模块的卸载、设备打开、设备关闭、设备读取、设备阻塞功能。 1、模块初始化 模块的初始化的源码如下所示。 static int __init dev_init(void) { int ret; ret = misc_register(&misc); printk (DEVICE_NAME tinitializedn ); return ret; } 这段代码只实现了一个功能,就是使用mi
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved