4355
- 收藏
- 点赞
- 分享
- 举报
A20 JPEG解码后,YUV转RGB的问题
大家好,现在我正在做一个测试,就是使用https://github.com/jemk/cedrus/tree/master/jpeg-test,提供的方法做JPEG解码,但发现解码后出来的图片格式是YUV的,因此需要转为RGB格式,所以借助了/dev/cedarx申请物理空间的方法,使用jpeg解码后来的luma和chroma两个数据。通过如下代码实现yuv2rgb转码:
int disp_convertMB2ARGB(__u32 physY, __u32 physC, __disp_pixel_fmt_t srcfmt, __u32 width, __u32 height, __u32 physOut){
unsigned long arg[4] = {0, 0, 0, 0};
__disp_scaler_para_t scaler_para;
arg[1] = ioctl(fd, DISP_CMD_SCALER_REQUEST, (unsigned long) arg);
if(arg[1] == (unsigned long)-1) return 0;
memset(&scaler_para, 0, sizeof(__disp_scaler_para_t));
scaler_para.input_fb.addr[0] = physY + DRAM_OFFSET;
scaler_para.input_fb.addr[1] = physC + DRAM_OFFSET;
scaler_para.input_fb.size.width = width;
scaler_para.input_fb.size.height = height;
scaler_para.input_fb.format = srcfmt;
scaler_para.input_fb.seq = DISP_SEQ_UVUV;
scaler_para.input_fb.mode = DISP_MOD_MB_UV_COMBINED;
scaler_para.input_fb.br_swap = 0;
scaler_para.input_fb.cs_mode = DISP_BT601;
scaler_para.source_regn.x = 0;
scaler_para.source_regn.y = 0;
scaler_para.source_regn.width = width;
scaler_para.source_regn.height = height;
scaler_para.output_fb.addr[0] = physOut + DRAM_OFFSET;
scaler_para.output_fb.size.width = width;
scaler_para.output_fb.size.height = height;
scaler_para.output_fb.format = DISP_FORMAT_ARGB888;
scaler_para.output_fb.seq = DISP_SEQ_ARGB;
scaler_para.output_fb.mode = DISP_MOD_INTERLEAVED;
scaler_para.output_fb.br_swap = 0;
scaler_para.output_fb.cs_mode = DISP_BT709;
arg[2] = (unsigned long) &scaler_para;
ioctl(fd, DISP_CMD_SCALER_EXECUTE, (unsigned long) arg);
ioctl(fd, DISP_CMD_SCALER_RELEASE, (unsigned long) arg);
return 1;
}
结果发现ioctl(fd, DISP_CMD_SCALER_EXECUTE, (unsigned long) arg)这句返回-1, 错误errorno值为1. 但是DISP_CMD_SCALER_REQUEST和DISP_CMD_SCALER_RELEASE正确。我使用的内核是linux-kernel3.4.79,debian的系统。是不是我的内核有问题??
int disp_convertMB2ARGB(__u32 physY, __u32 physC, __disp_pixel_fmt_t srcfmt, __u32 width, __u32 height, __u32 physOut){
unsigned long arg[4] = {0, 0, 0, 0};
__disp_scaler_para_t scaler_para;
arg[1] = ioctl(fd, DISP_CMD_SCALER_REQUEST, (unsigned long) arg);
if(arg[1] == (unsigned long)-1) return 0;
memset(&scaler_para, 0, sizeof(__disp_scaler_para_t));
scaler_para.input_fb.addr[0] = physY + DRAM_OFFSET;
scaler_para.input_fb.addr[1] = physC + DRAM_OFFSET;
scaler_para.input_fb.size.width = width;
scaler_para.input_fb.size.height = height;
scaler_para.input_fb.format = srcfmt;
scaler_para.input_fb.seq = DISP_SEQ_UVUV;
scaler_para.input_fb.mode = DISP_MOD_MB_UV_COMBINED;
scaler_para.input_fb.br_swap = 0;
scaler_para.input_fb.cs_mode = DISP_BT601;
scaler_para.source_regn.x = 0;
scaler_para.source_regn.y = 0;
scaler_para.source_regn.width = width;
scaler_para.source_regn.height = height;
scaler_para.output_fb.addr[0] = physOut + DRAM_OFFSET;
scaler_para.output_fb.size.width = width;
scaler_para.output_fb.size.height = height;
scaler_para.output_fb.format = DISP_FORMAT_ARGB888;
scaler_para.output_fb.seq = DISP_SEQ_ARGB;
scaler_para.output_fb.mode = DISP_MOD_INTERLEAVED;
scaler_para.output_fb.br_swap = 0;
scaler_para.output_fb.cs_mode = DISP_BT709;
arg[2] = (unsigned long) &scaler_para;
ioctl(fd, DISP_CMD_SCALER_EXECUTE, (unsigned long) arg);
ioctl(fd, DISP_CMD_SCALER_RELEASE, (unsigned long) arg);
return 1;
}
结果发现ioctl(fd, DISP_CMD_SCALER_EXECUTE, (unsigned long) arg)这句返回-1, 错误errorno值为1. 但是DISP_CMD_SCALER_REQUEST和DISP_CMD_SCALER_RELEASE正确。我使用的内核是linux-kernel3.4.79,debian的系统。是不是我的内核有问题??
我来回答
回答3个
时间排序
认可量排序
认可0
认可0
认可0
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
102015-12-14 11:35:36
-
2014-04-17 09:29:27
-
2015-10-12 23:39:58
-
2013-05-18 19:45:00
-
2021-06-20 21:46:35
-
2021-06-20 21:45:10
-
2020-07-22 22:53:14
-
2015-05-16 14:44:08
-
2017-06-09 18:23:00
-
372016-07-23 17:43:41
-
02016-05-26 22:00:19
-
2016-07-06 19:42:02
-
2016-06-21 09:43:06
-
2016-11-01 16:06:14
-
2019-02-12 10:21:35
-
2018-12-06 18:05:40
-
2016-10-29 17:33:09
-
2017-03-21 14:19:10
-
2021-01-14 11:46:44
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认