Chinaunix
标题:
264解码中遇到的getNextNal问题
[打印本页]
作者:
丫叩酱
时间:
2013-05-23 15:23
标题:
264解码中遇到的getNextNal问题
刚刚接触到FFmpeg,测试第一个例子264解码,如下。
Q1:在第4步中:4.获取下一个NAL的长度,并且将NAL放入Buf,getNextNal函数的原型在哪里可以找到,包含该函数的头文件在哪里,需要用到库文件,若需要,需要哪个库文件?
搜索了好久,都没找到关于getNextNal的信息。
运行到此处,程序报告错误信息:
test.c:76: warning: implicit declaration of function ‘getNextNal’
test.c:76: undefined reference to `getNextNal'
还请大家多多帮忙。
Decode()
{
FILE *inpf;
int nWrite;
int i, p;
int nalLen;
unsigned char *Buf;
int got_picture, consumed_bytes;
unsigned char *DisplayBuf;
DisplayBuf = (unsigned char *)malloc(60000);
char outfile[] = "test.pgm";
//1.打开输入文件
inpf = fopen("test.264", "rb");
//outf = fopen("out.yuv", "wb");
if(!inpf)
{
goto Decodereturn;
}
nalLen = 0;
//准备解码文件缓冲
Buf = (unsigned char *)calloc(100000, sizeof(char));
//2.注册解码器,并且找到H264解码器
avcodec_init();
avcodec_register_all();
codec = avcodec_find_decoder(CODEC_ID_H264);
if(!codec)
{
return 0;
}
//open codec
//3.打开解码器
if(avcodec_open(c, codec) < 0)
{
return 0;
}
//allocate codec context
//分配解码器内存
picture = avcodec_alloc_frame();
if(!picture)
{
return 0;
}
rgbdatanew = (unsigned char *)malloc(sizeof(unsigned char) * (3 * width * height));
while(!feof(inpf))
{
//4.获取下一个NAL的长度,并且将NAL放入Buf
nalLen = getNextNal(inpf, Buf);
//5.对改NAL解码,解码的YUV数据存在picture中
consumed_bytes = avcode_decode_video(c, picture, &got_picture, Buf, nalLen);
if(consumed_bytes > 0)
{
//6.将picture中的YUV数据显示或者保存到文件
p = 0;
for(i = 0; i < c->height; i++)
{
memcpy(DisplayBuf + p, picture->data[0] + i * picture->linesize[0], c->width);
p += c->width;
}
for(i = 0; i < (c->height / 2); i++)
{
memcpy(DisplayBuf + p, picture->data[1] + i * picture->linesize[1], c->width / 2)
p += c->width / 2;
}
for(i = 0; i < (c->height / 2); i++)
{
memcpy(DisplayBuf + p, picture->data[2] + i * picture->linesize[2], c->width / 2)
p += c->width / 2;
}
//显示画面
DisplayVideo(DisplayBuf);
}
}
//7.关闭输入文件
if(inpf)
{
fclose(inpf);
}
Decodereturn:
//8.关闭解码器,释放解码器内存
if(c)
{
avcodec_close(c);
av_free(c);
c = NULL;
}
//9.释放解码器画面内存
if(picture)
{
av_free(picture);
picture = NULL;
}
//10.释放解码文件缓冲
if(Buf)
{
free(Buf);
Buf = NULL;
}
free(DisplayBuf);
}
复制代码
作者:
丫叩酱
时间:
2013-05-23 16:58
太悲催了,网上百度出来的实例,竟然不是完整的,我还以为是引用库中的函数,谁知道是自定义函数,既然是给新手提供的,那就提供全点信息嘛。
不然像我似的,还在查找getNextNal函数的原型呐,
回复
1#
丫叩酱
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2