comeoversky

comeoversky

0个粉丝

1

问答

0

专栏

0

资料

comeoversky  发布于  2016-01-20 14:43:29
采纳率 0%
1个问答
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的系统。是不是我的内核有问题??
我来回答
回答3个
时间排序
认可量排序

kgui

0个粉丝

13

问答

0

专栏

4

资料

kgui 2016-01-20 15:51:20
认可0
yuv2rgb自己写个,没必要掉用cedarx,
顺便问下,调用cedarx有什么好处?

comeoversky

0个粉丝

1

问答

0

专栏

0

资料

comeoversky 2016-01-20 16:00:09
认可0
yuv2rgb效率即使用neon写,也达不到要求啊,太慢了。据传说1080P的yuv转换RGB是几毫秒级别的。但一直没运行成功所以具体效率不清楚!

hermann_jin

0个粉丝

0

问答

0

专栏

0

资料

hermann_jin 2016-03-18 09:55:37
认可0
全志支持JPEG解码显示
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区