seed-dvs6467 encodedecode实例 采集的图像质量很差,只有隔行显示,而且每帧图像不断的往下移动?
2013-12-31 16:25
344 查看
问题:采集的图像质量很差,只有隔行显示,而且每帧图像不断的往下移动?
初步判断是奇偶场图像没有合成成一个完整的帧图像。本人尝试设置成奇偶场的格式(fmt.fmt.pix.field = V4L2_FIELD_INTERLACED),但是mv_pro_4.0.1内核不支持。
1:开发环境
2:移植步骤
3:采集显示的图片
4:超级终端打印信息
1、开发环境
开发板:seed-dvs6467 v1.0
开发环境:ubuntu12.04
TI 软件包:dvsdk_1_40_02_33
内核版本:mv_pro_4.0.1(seed公司修改了相关的驱动)
运行实例: encodedecode
移植ti dvsdk_demos_for_evm6467 目录下的encodedecode 到seed-dvs6467 v1.0
2、移植步骤:
2.1、在内核mv_pro_4.0.1\montavista\pro\devkit\lsp\ti-davinci\linux-2.6.10_mvl401_LSP_01_30_00_082\drivers\media\video\davinci目录下,davincihd_capture.c文件中修改void vpif_get_std_info函数,然后重新编译内核(make uImage)。
2.2、把\dvsdk_demos_for_evm6467\dm6467\encodedecode 目录下capture.c 文件的VideoStd_720P_50替换成VideoStd_D1_PAL 格式
2.3、把dmai_1_10_00_06\packages\ti\sdo\dmai\linux 目录下capture.c
首先添加头文件#include <media/davinci/tvp5158.h>
然后修改Capture_detectVideoStd;
3:采集显示的图片
问题:采集的图像质量很差,只有隔行显示,而且每帧图像不断的往下移动?
初步判断是奇偶场图像没有合成成一个完整的帧图像。
4:超级终端打印信息
超级终端打印信息:
root@192.168.1.98:/opt/dvsdk/dvsdk# ./loadmodules.sh
ioremap_nocache(0x87800000, 69206016)=0xc8180000
allocated heap buffer 0xc8180000 of size 0x821000
cmem initialized 5 pools between 0x87800000 and 0x8ba00000
dsplinkk: no version for "struct_module" found: kernel tainted.
dsplinkk: module license 'DSP/BIOS(TM) LINK' taints kernel.
DSPLINK Module (1.50) created on Date: Jul 11 2011 Time: 16:52:18
root@192.168.1.98:/opt/dvsdk/dvsdk# ./encodedecode -r 680x576 -t 300
zhang: argsp->videoStd=5
Encodedecode demo started.
Patch is already running.
i2c_adapter i2c-0: Invalid id...
VPIF KERNEL: std_info->name TVP5158_NTSC_13
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name TVP5158_NTSC_13
, 712x2100
VPIF KERNEL: std_info->name PAL
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name PAL, 720x576
VPIF KERNEL: std_info->name PAL
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name PAL, 720x576
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name PAL, 720x576
_Attrs *attrs).
fmt.type: 2
pix.pixelformat: Y8C8
pix.height: 576
pix.width: 720
pix.field: 0
VPIF KERNEL: std_info->name PAL
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name PAL, 720x576
zhang in kernel : tvp5158_i2c_write_reg
VPIF KERNEL: std_info->name TVP5158_PAL_13
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name TVP5158_PAL_13,
712x2500
driver: vpif capture
card: DM646x EVM
bus_info: Platform
version: 1
capabilities: c000051
fmt.type: 1
pix.pixelformat: Y8C8
pix.height: 576
pix.width: 720
pix.field: 0
zhang: common->fmt.fmt.pix.sizeimage=3827200
zhang: in davincihd_capture.c
hpitch,=720,vpitch=2657, sizeimage=3827200
zhang:common->ytop_off=0,common->ytop_off=0,common->cbtm_off =1914320,common->ct
op_off=1913600
Encode Decode demo ARM Load: 40% DSP Load: 10% Display Type: D1 PAL Video Codec:
H.264 BP Video fps: 0 fps Video bit rate: 5133 kbps Video resolution: 672x576 T
ime: 00:00:01
初步判断是奇偶场图像没有合成成一个完整的帧图像。本人尝试设置成奇偶场的格式(fmt.fmt.pix.field = V4L2_FIELD_INTERLACED),但是mv_pro_4.0.1内核不支持。
1:开发环境
2:移植步骤
3:采集显示的图片
4:超级终端打印信息
1、开发环境
开发板:seed-dvs6467 v1.0
开发环境:ubuntu12.04
TI 软件包:dvsdk_1_40_02_33
内核版本:mv_pro_4.0.1(seed公司修改了相关的驱动)
运行实例: encodedecode
移植ti dvsdk_demos_for_evm6467 目录下的encodedecode 到seed-dvs6467 v1.0
2、移植步骤:
2.1、在内核mv_pro_4.0.1\montavista\pro\devkit\lsp\ti-davinci\linux-2.6.10_mvl401_LSP_01_30_00_082\drivers\media\video\davinci目录下,davincihd_capture.c文件中修改void vpif_get_std_info函数,然后重新编译内核(make uImage)。
static void vpif_get_std_info(struct channel_obj *ch) { // struct decoder_device *dec = ch->decoder[ch->current_decoder]; struct video_obj *vid_ch = &(ch->video); // struct v4l2_standard standard; // int index = 0, ret; int ret; vid_ch->std_info.channel_id = ch->channel_id; /* Get standard name from the decoder by enumerating standards */ if(vid_ch->std==TVP5158_STD_PAL_13) { strncpy(vid_ch->std_info.name, "TVP5158_PAL_13", sizeof(vid_ch->std_info.name)); strncpy(ch->vpifparams.video_params.name, "TVP5158_PAL_13", sizeof(vid_ch->std_info.name)); } else { strncpy(vid_ch->std_info.name, "TVP5158_NTSC_13", sizeof(vid_ch->std_info.name)); strncpy(ch->vpifparams.video_params.name, "TVP5158_NTSC_13", sizeof(vid_ch->std_info.name)); } /* Get standard information from VPIF layer */ /*changed the height from 2500 to 576 ,width from 712 to 720 by zhangzhonghua */ ret = vpif_get_mode_info(&vid_ch->std_info); ch->common[VPIF_VIDEO_INDEX].fmt.fmt.pix.width = ch->common[VPIF_VIDEO_INDEX].width = 720; if(vid_ch->std==TVP5158_STD_PAL_13) { ch->common[VPIF_VIDEO_INDEX].fmt.fmt.pix.height = ch->common[VPIF_VIDEO_INDEX].height = 576; } else { ch->common[VPIF_VIDEO_INDEX].fmt.fmt.pix.height = ch->common[VPIF_VIDEO_INDEX].height = 2100; } ch->common[VPIF_VIDEO_INDEX].fmt.fmt.pix.bytesperline =720; ch->vpifparams.video_params.hpitch = 720; ch->vpifparams.video_params.storage_mode =1; }
2.2、把\dvsdk_demos_for_evm6467\dm6467\encodedecode 目录下capture.c 文件的VideoStd_720P_50替换成VideoStd_D1_PAL 格式
2.3、把dmai_1_10_00_06\packages\ti\sdo\dmai\linux 目录下capture.c
首先添加头文件#include <media/davinci/tvp5158.h>
然后修改Capture_detectVideoStd;
/****************************************************************************** * Capture_detectVideoStd ******************************************************************************/ Int Capture_detectVideoStd(Capture_Handle hCapture, VideoStd_Type *videoStdPtr, Capture_Attrs *attrs) { Int failCount = 0; Int firstInput; Int queryInput; struct v4l2_input v4l2Input; v4l2_std_id std; Int input; Int fd; Int ret; assert(videoStdPtr); assert(attrs); /* * Initialize variables outside of variable declarations to suppress * "unused variable" warnings for platforms that don't use them. */ Dmai_clear(v4l2Input); queryInput = 0; firstInput = -1; if (hCapture) { fd = hCapture->fd; } else { fd = open(attrs->captureDevice, O_RDWR, 0); if (fd == -1) { Dmai_err2("Cannot open %s (%s)\n", attrs->captureDevice, strerror(errno)); return Dmai_EFAIL; } } #ifdef Dmai_Device_dm6467 /*changed by zhangzhonghua in 2013-12-27*/ //把下面的注释掉,直接调用ioctl(fd, VIDIOC_S_STD, &std)设置 /* do { if (ioctl(fd, VIDIOC_G_INPUT, &input) == -1) { Dmai_err0("Failed GET_INPUT. No inputs connected?\n"); return Dmai_EFAIL; } if (firstInput < 0) { firstInput = input; } else if (firstInput == input) { //We have cycled through all inputs with no match Dmai_err1("%s input not found\n", captureInputString[attrs->videoInput]); return Dmai_EFAIL; } v4l2Input.index = input; if (ioctl(fd, VIDIOC_ENUMINPUT, &v4l2Input) == -1) { Dmai_err1("%s input not found\n", captureInputString[attrs->videoInput]); return Dmai_EFAIL; } } while (strcmp(v4l2Input.name, captureInputString[attrs->videoInput]) != 0); // It might take a few tries to detect the signal std = -1; do { ret = ioctl(fd, VIDIOC_QUERYSTD, &std); if (ret == -1 && errno == EAGAIN) { usleep(1); failCount++; } } while (ret == -1 && errno == EAGAIN && failCount < NUM_IOCTL_RETRIES); if (ret == -1) { Dmai_err1("VIDIOC_QUERYSTD failed on %s. Video input connected?\n", attrs->captureDevice); return Dmai_EFAIL; } */ std=TVP5158_STD_PAL_13; ret = ioctl(fd, VIDIOC_S_STD, &std); if (ret < 0) { printf("cannot set std\n"); return -1; } /***********************************************************************************************/ #else /* Select the video input */ switch (attrs->videoInput) { case Capture_Input_SVIDEO: input = TVP5146_AMUX_SVIDEO; break; case Capture_Input_COMPOSITE: input = TVP5146_AMUX_COMPOSITE; break; default: Dmai_err2("Unsupported video input (%d) on %s\n", attrs->videoInput, attrs->captureDevice); return Dmai_EFAIL; } if (ioctl(fd, VIDIOC_S_INPUT, &input) == -1) { Dmai_err1("Failed to set video input to %d\n", input); return Dmai_EFAIL; } if (ioctl(fd, VIDIOC_G_INPUT, &queryInput) == -1) { Dmai_err0("Failed to retrieve video input setting\n"); return Dmai_EFAIL; } if (input != queryInput) { Dmai_dbg2("Attempted to set video input to %d, but it still has a" "setting of %d\n", input, queryInput); return Dmai_EFAIL; } /* Auto detect PAL or NTSC using the capture driver as sanity check */ std = VPFE_STD_AUTO; if(ioctl(fd, VIDIOC_S_STD, &std) == -1) { Dmai_err2("VIDIOC_S_STD (auto) failed on %s (%s)\n", attrs->captureDevice, strerror(errno)); return Dmai_EFAIL; } Dmai_dbg0("Checking video standard\n"); /* It might take a few tries to detect the signal */ do { ret = ioctl(fd, VIDIOC_QUERYSTD, &std); if (ret == -1 && errno == EAGAIN) { usleep(1); failCount++; } } while (ret == -1 && errno == EAGAIN && failCount < NUM_IOCTL_RETRIES); if (ret == -1) { Dmai_err1("VIDIOC_QUERYSTD failed on %s. Video input connected?\n", attrs->captureDevice); return Dmai_EFAIL; } if(ioctl(fd, VIDIOC_S_STD, &std) == -1) { Dmai_err2("VIDIOC_S_STD failed on %s (%s)\n", attrs->captureDevice, strerror(errno)); return Dmai_EFAIL; } #endif /* Dmai_Device_Dm6467 */ if (!hCapture) { close(fd); } /*changed by zhangzhonghua in 2013-12-27*/ printf("zhang: std=0x%x\n",std); /* if (std & V4L2_STD_NTSC) { *videoStdPtr = VideoStd_D1_NTSC; } else if (std & V4L2_STD_PAL) { *videoStdPtr = VideoStd_D1_PAL; } else if (std & V4L2_STD_525P_60) { *videoStdPtr = VideoStd_480P; } else if (std & V4L2_STD_625P_50) { *videoStdPtr = VideoStd_576P; } else if (std == V4L2_STD_720P_60) { *videoStdPtr = VideoStd_720P_60; } else if (std == V4L2_STD_720P_50) { *videoStdPtr = VideoStd_720P_50; } else if (std == V4L2_STD_1080I_60) { *videoStdPtr = VideoStd_1080I_30; } else if (std == V4L2_STD_1080I_50) { *videoStdPtr = VideoStd_1080I_25; } else if (std == V4L2_STD_1080P_30) { *videoStdPtr = VideoStd_1080P_30; } else if (std == V4L2_STD_1080P_25) { *videoStdPtr = VideoStd_1080P_25; } else if (std == V4L2_STD_1080P_24) { *videoStdPtr = VideoStd_1080P_24; } else { Dmai_err1("Unknown video standard on capture device %s\n", attrs->captureDevice); return Dmai_EFAIL; } */ *videoStdPtr = VideoStd_D1_PAL; /*******************************************************************/ Dmai_dbg1("Capture input set to %s\n", captureInputString[attrs->videoInput]); return Dmai_EOK; }
3:采集显示的图片
问题:采集的图像质量很差,只有隔行显示,而且每帧图像不断的往下移动?
初步判断是奇偶场图像没有合成成一个完整的帧图像。
4:超级终端打印信息
超级终端打印信息:
root@192.168.1.98:/opt/dvsdk/dvsdk# ./loadmodules.sh
ioremap_nocache(0x87800000, 69206016)=0xc8180000
allocated heap buffer 0xc8180000 of size 0x821000
cmem initialized 5 pools between 0x87800000 and 0x8ba00000
dsplinkk: no version for "struct_module" found: kernel tainted.
dsplinkk: module license 'DSP/BIOS(TM) LINK' taints kernel.
DSPLINK Module (1.50) created on Date: Jul 11 2011 Time: 16:52:18
root@192.168.1.98:/opt/dvsdk/dvsdk# ./encodedecode -r 680x576 -t 300
zhang: argsp->videoStd=5
Encodedecode demo started.
Patch is already running.
i2c_adapter i2c-0: Invalid id...
VPIF KERNEL: std_info->name TVP5158_NTSC_13
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name TVP5158_NTSC_13
, 712x2100
VPIF KERNEL: std_info->name PAL
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name PAL, 720x576
VPIF KERNEL: std_info->name PAL
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name PAL, 720x576
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name PAL, 720x576
_Attrs *attrs).
fmt.type: 2
pix.pixelformat: Y8C8
pix.height: 576
pix.width: 720
pix.field: 0
VPIF KERNEL: std_info->name PAL
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name PAL, 720x576
zhang in kernel : tvp5158_i2c_write_reg
VPIF KERNEL: std_info->name TVP5158_PAL_13
VPIF KERNEL: zhang > vpif_config_params[channel_id][index].name TVP5158_PAL_13,
712x2500
driver: vpif capture
card: DM646x EVM
bus_info: Platform
version: 1
capabilities: c000051
fmt.type: 1
pix.pixelformat: Y8C8
pix.height: 576
pix.width: 720
pix.field: 0
zhang: common->fmt.fmt.pix.sizeimage=3827200
zhang: in davincihd_capture.c
hpitch,=720,vpitch=2657, sizeimage=3827200
zhang:common->ytop_off=0,common->ytop_off=0,common->cbtm_off =1914320,common->ct
op_off=1913600
Encode Decode demo ARM Load: 40% DSP Load: 10% Display Type: D1 PAL Video Codec:
H.264 BP Video fps: 0 fps Video bit rate: 5133 kbps Video resolution: 672x576 T
ime: 00:00:01
相关文章推荐
- oracle 自动建表
- Redis介绍以及安装(Linux)
- delphi中in的使用
- ios官方文档( dom数据解析用到方法)
- Json解析工具Jackson(使用注解) .
- Kernel中rfcomm层的初始化
- PHP基础语法
- 华为终端内部总结:盈利超额 将发放特别奖金
- logrotate简单实现各种日志自动轮转
- 红黑树(Red Black Tree)
- Oracle comment on的用法
- 前端网页性能最佳实践
- Activity com.hotel.ui.LoginActivity has leaked window com.android.internal.policy.impl.PhoneWindow
- SCVMM2012R2系统要求:虚拟主机
- js判断字符长度以及中英文数字等
- java参数传递中的对象传递
- 你知道怎么实现MBR和GPT之间的转换么?
- 堆栈窗口 QStackedWidget 测试
- 今天正式来到CSDN了!
- VC6中全局变量问题和错误:already defined in StdAfx.obj