【发布时间】:2013-12-19 01:51:35
【问题描述】:
我正在经历FFMPEG多媒体框架中H.263视频解码器解析器的工作。
我所知道的:
每个视频解码器都需要一个解析器从给定的输入流中获取帧,一旦获得与帧相关的数据,就会将其发送到解码器进行解码处理。
每个编解码器的解析器都需要定义一个AVCodecParser 类型的结构。这个结构有一个函数指针:
.parser_parse -> 指向处理解析功能的函数
.parser_close -> 指向一个执行缓冲区释放的函数。
以视频解码器H.264为例,其解析器功能如下图:
static int h263_parse(AVCodecParserContext *s,
AVCodecContext *avctx,
const uint8_t **poutbuf, int *poutbuf_size,
const uint8_t *buf, int buf_size)
{
ParseContext *pc = s->priv_data;
int next;
if (s->flags & PARSER_FLAG_COMPLETE_FRAMES) {
next = buf_size;
} else {
next= ff_h263_find_frame_end(pc, buf, buf_size);
if (ff_combine_frame(pc, next, &buf, &buf_size) < 0) {
*poutbuf = NULL;
*poutbuf_size = 0;
return buf_size;
}
}
*poutbuf = buf;
*poutbuf_size = buf_size;
return next;
}
谁能解释一下,上面函数的参数。
据我说:
poutbuf -> 是指向解析后的帧数据的指针。
poutbuf_size -> 包含数据的大小。
我的上述假设是否正确?哪个参数保存输入缓冲区数据?上面的解析函数返回什么?任何引用该帖子的人也将简要解释上述代码。任何与此相关的信息都会非常有帮助。
【问题讨论】:
标签: c parsing video ffmpeg codec