CubieBoard博客-HomeCubieTech公司网站

cubie.cc CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
楼主: blessed

H264高清硬编解教程《附相应的库》

[复制链接]

7

主题

1

好友

2404

积分

金牌会员

Rank: 6Rank: 6

贡献
458
金钱
949
威望
458
买家信用
卖家信用
积分
2404
发表于 2013-7-27 08:58:43 |显示全部楼层
ashwing 发表于 2013-7-27 07:23
终于运行起来 但是屏是花的

摄像头是支持MJPEG的

YUV420sp的输入是可以的,具体的你可以先查看camera支持什么格式的输出,然后修改V4L2那个部分的像素格式设置。
回复

使用道具 举报

5

主题

0

好友

2326

积分

金牌会员

Rank: 6Rank: 6

贡献
437
金钱
949
威望
437
买家信用
卖家信用
积分
2326
发表于 2013-7-27 19:35:18 |显示全部楼层
blessed 发表于 2013-7-27 08:58
YUV420sp的输入是可以的,具体的你可以先查看camera支持什么格式的输出,然后修改V4L2那个部分的像素格式 ...

我用enm 查了  摄像头只支持MJPEG

不知道该怎么修改  对这些格式一无所知。。。。
回复

使用道具 举报

5

主题

0

好友

2326

积分

金牌会员

Rank: 6Rank: 6

贡献
437
金钱
949
威望
437
买家信用
卖家信用
积分
2326
发表于 2013-7-27 19:35:44 |显示全部楼层
blessed 发表于 2013-7-27 08:58
YUV420sp的输入是可以的,具体的你可以先查看camera支持什么格式的输出,然后修改V4L2那个部分的像素格式 ...

我用enm 查了  摄像头只支持MJPEG

不知道该怎么修改  对这些格式一无所知。。。。
回复

使用道具 举报

7

主题

1

好友

2404

积分

金牌会员

Rank: 6Rank: 6

贡献
458
金钱
949
威望
458
买家信用
卖家信用
积分
2404
发表于 2013-7-29 11:55:58 |显示全部楼层
ashwing 发表于 2013-7-27 19:35
我用enm 查了  摄像头只支持MJPEG

不知道该怎么修改  对这些格式一无所知。。。。 ...

网上有很多可以查看camera支持像素格式的代码,你随便找找,现在的camera很少只支持一种像素格式的
回复

使用道具 举报

5

主题

0

好友

2326

积分

金牌会员

Rank: 6Rank: 6

贡献
437
金钱
949
威望
437
买家信用
卖家信用
积分
2326
发表于 2013-7-29 17:35:27 |显示全部楼层
我直接在你代码里 加了个 ENM SMT的函数查的  

然后又用MOTION测试了  确实只有MJPEG工作、。。、

08年的老摄像头了
回复

使用道具 举报

5

主题

0

好友

2326

积分

金牌会员

Rank: 6Rank: 6

贡献
437
金钱
949
威望
437
买家信用
卖家信用
积分
2326
发表于 2013-7-29 17:37:39 |显示全部楼层
VENC_DEVICE * CedarvEncInit(__u32 width, __u32 height, __u32 avg_bit_rate, __s32 (*GetFrmBufCB)(__s32 uParam1,  void *pFrmBufInfo))
请教下这个函数 是怎么调用的

最后个回调 总是出错
g_pCedarV = CedarvEncInit(mVideoWidth,mVideoHeight,1024*1024,GetFrmBufCB);
编译可以通过 运行出现
E/osal_linux329) flush cache fail,range error

谢谢指教
回复

使用道具 举报

5

主题

0

好友

2326

积分

金牌会员

Rank: 6Rank: 6

贡献
437
金钱
949
威望
437
买家信用
卖家信用
积分
2326
发表于 2013-7-29 17:44:17 |显示全部楼层
void queryvideo()
{
        int ret = -1;
        struct v4l2_fmtdesc fmt;
        memset(&fmt, 0, sizeof(fmt));
        fmt.index = 0;
        fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        while ((ret = ioctl(fd, VIDIOC_ENUM_FMT, &fmt)) == 0)
        {
                fmt.index++;
                printf("{ pixelformat = ''%c%c%c%c'', description = ''%s'' }\n",
                  fmt.pixelformat & 0xFF, (fmt.pixelformat >> 8) & 0xFF, (fmt.pixelformat >> 16) & 0xFF,
                  (fmt.pixelformat >> 24) & 0xFF, fmt.description);
        }
        printf("OVER");
}
用这个查询的
回复

使用道具 举报

7

主题

1

好友

2404

积分

金牌会员

Rank: 6Rank: 6

贡献
458
金钱
949
威望
458
买家信用
卖家信用
积分
2404
发表于 2013-7-30 10:52:05 |显示全部楼层
ashwing 发表于 2013-7-29 17:37
VENC_DEVICE * CedarvEncInit(__u32 width, __u32 height, __u32 avg_bit_rate, __s32 (*GetFrmBufCB)(__s3 ...

你肯定是参数没有设置对,把第三个参数设置为原先的3*512*1024试试。
你这个出错是直接退出程序吗?如果不是的话,只要参数设置没有问题,应该可以的
另外,这个出错的信息应该来自库里面的函数。
回复

使用道具 举报

5

主题

0

好友

2326

积分

金牌会员

Rank: 6Rank: 6

贡献
437
金钱
949
威望
437
买家信用
卖家信用
积分
2326
发表于 2013-7-30 11:51:58 |显示全部楼层
恩  我现在能跑起来  只是屏幕分4等分  只显示2格 花屏而已

其中一段循环的 输出

GetPreviewFrame failed
v4l2 should not release the same buffer twice continuous: index : 0
VIDIOC_QBUF failed, id: 0
get para success
set video layer param
success set para
get para success
set video layer param
success set para
layer0 open hdl:101,ret:0 w:320 h:240
layer0 open hdl:102,ret:0 w:320 h:240
layer0 open hdl:0,ret:-1 w:320 h:240
Open video display layer failed!


回复

使用道具 举报

5

主题

0

好友

2326

积分

金牌会员

Rank: 6Rank: 6

贡献
437
金钱
949
威望
437
买家信用
卖家信用
积分
2326
发表于 2013-7-30 11:52:14 |显示全部楼层
不管怎么样  谢谢你耐心的指导
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|邮件群发|cubie.cc---深刻的嵌入式技术和应用讨论中文社区 ( 粤ICP备13051116号-1  

GMT+8, 2020-2-17 10:23 , Processed in 0.022680 second(s), 8 queries , Apc On.

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc. | Style by Coxxs

回顶部