Android Opencore OpenMAX学习(2)数据格式及OMX输入缓冲细节
2010-11-24 16:13
501 查看
数据格式及OMX输入缓冲细节 1.1 帧起始代码 一般不用,H.264可能使用。 1.2 OMX缓冲区 三个值得信赖的关键参数 nFilledLen 缓冲区长度 nTimestamp 缓冲区时间戳 OMX_BUFFERLAG_ENDOFFRAME 缓冲区结束标志位 1.3多帧合并输入缓冲 一些音频信息,单帧过小(eg ARM),将其合并作为一个缓冲区处理。 nFilledLen为所有帧总长度,nTimestamp指向缓冲区第一帧时间。 1.4部分帧 视频解码单帧过大情况下,可能将单帧拆分后传递给缓冲区。 部分帧情况下,只有最后一帧的缓冲区才拥有OMX_BUFFERLAG_ENDOFFRAME。 部分帧缓冲区不会包含两帧信息。 流媒体可能包含多帧。 部分帧的nTimestamp应当相同。 总结:OMX输出缓冲区可能包含 ——完整多帧 ——完整单帧 ——部分帧 1.5 错误的数据封装 多帧的部分帧封装 eg wrong(Frame1+Frame2 part) 1.6 Codec配置数据 Codec配置缓冲区使用OMX_BUFFERLAG_ENDOFFRAME 和OMX_BUFFERFLAG_CODECCONFIG标志位。 H.264的SPS和PPS使用独立的OMX输入缓冲区。 2 H264/AVC 解码器格式 Codec配置头部: SPS和PPS NAL单元位于起始的OMX输入缓冲区。 SPS和PPS NALs使用独立的OMX输入缓冲区,并使用OMX_BUFFERLAG_ENDOFFRAME 和OMX_BUFFERFLAG_CODECCONFIG标记。 2.1 AVC NAL模式与AVC Frame模式 通过设置iOMXComponentUsesFullAVCFrame标志位,可以决定AVC数据使用哪种模式解码。 默认使用NAL模式,此种模式下OpenCORE框架同时提供完整单帧和部分帧输入缓冲区。 在Frame模式下,OpenCORE框架积累NALs并提供完整单帧给输入缓冲区。 OMX_OTHER_EXTRADATA结构体用来区分NAL边界。 如果iOMXComponentUsesFullAVCFrame和iOMXComponentUsesNALStratCodes都被置为OMX_TRUE, NAL边界可被start codes区分,此时OMX_OTHER_EXTRADATA无用。 数据结构——NAL模式: 输入缓冲区包含一个或多个NAL,但只包含同一帧的NAL,一帧最后一个NAL才含有OMX_BUFFERLAG_ENDOFFRAME标志位。 数据结构——Frame模式: 每个输入缓冲区包含完整帧。 如果使用NAL start codes,可通过读取NAL start codes区分NAL边界。 否则使用OMX_OTHER_EXTRADATA结构体区分NAL边界。 在Frame模式中,每个缓冲区都含有OMX_BUFFERLAG_ENDOFFRAME标志位。 在Frame模式中,每个缓冲区都含有位于OMX_BUFFERLAGHEADERTYPE结构体nFlags区域的OMX_BUFFERLAG_EXTRADATA标志位。 缓冲区最后包含AVC frame,追加以下数据: OMX_OTHER_EXTRADATATYPE extra; OMX_OTHER_EXTRADATATYPE terminator; extra.eType = OMX_ExtraDataNALSizeArray; extra.nSize = 20+4*(number of NALs in the frame); // 20 is the size of OMX_OTHER_EXTRADATATYPE structure + 4 bytes per NAL size extra.nDataSize = 4 * (number of NALs in the frame) extra.data[4*i] = size of the i-th NAL (data is declared as byte array – so offset is 4*i, since 4 bytes is assigned to signal the size of each NAL unit) terminator.eType = OMX_ExtraDataNone; terminator.nSize = 20; terminator.nDataSize = 0; #define OMX_ExtraDataNALSizeArray 0x7F123321 通过获取OMX_OTHER_EXTRADATA结构体信息,可以得知每一帧包含NAL单元的数目并确定NAL边界。 一个例子:AVC Frame模式,包含2个NAL,包含extra数据结构 总结: 1)每个缓冲区都含有位于OMX_BUFFERLAGHEADERTYPE结构体nFlags区域的OMX_BUFFERLAG_EXTRADATA标志位 2)每个NAL的长度应当使用独立的4byte无符号整型数表示(eg OMX_U32) 3)所有NAL的长度被编码成OMX_U32的数组存放在buffer最后。 4)包含完整帧的缓冲区必须含有位于OMX_BUFFERLAGHEADERTYPE结构体nFlags区域的OMX_BUFFERLAG_ENDOFFRAME标志位。 5)一个独立的缓冲区不包含多帧数据。 3 YUV和RGB数据格式 OMX编码组件中,生肉提供YUV或者RGB格式,OpenCORE框架将提供一帧完成的YUR或RGB数据给OMX组件。 转自:http://hi.baidu.com/aokikyon/blog/item/02b23208f7326c3be92488d0.html |
相关文章推荐
- Android Opencore OpenMAX学习(2)数据格式及OMX输入缓冲细节
- Android Opencore OpenMAX学习(2)数据格式及OMX输入缓冲细节
- Android Opencore OpenMAX学习(2)数据格式及OMX输入缓冲细节
- Android学习系列(20)--App数据格式之解析Json
- Android Opencore OpenMAX学习
- JSON学习(案列):Android中解析JSON格式数据常见方法合集
- Android Opencore OpenMAX学习
- Android学习系列(20)--App数据格式之解析Json
- android 学习笔记 解析json格式的数据 JSONObject 和GSON解析json格式数据
- android学习二十三(解析json格式数据)
- 黑马程序员之WinForm编程基础学习笔记:用户在文本框1,2中输入两个数,点击按钮,在文本框3中显示从文本框1中的数字到文本框2中的数字之间的累加和。如果1或者2为错误的数据格式,则弹出对话框提示错
- Android学习---使用JSONObject 解析JSON格式数据
- Android学习第七天————将数据保存为JSON格式,通过JSONObject和JSONReader来解析JSON数据
- Android学习-JSON数据格式
- Android Opencore OpenMAX学习(3)OpenMax 调用顺序
- Android Opencore OpenMAX学习(3)OpenMax 调用顺序
- android学习二十三(解析json格式数据)
- android学习---使用GSON解析JSON格式数据
- Android学习系列(20)--App数据格式之解析Json
- Android Opencore OpenMAX学习(1)