免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2284 | 回复: 1
打印 上一主题 下一主题

[Linux] 264解码中遇到的getNextNal问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-23 15:23 |只看该作者 |倒序浏览
刚刚接触到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'

还请大家多多帮忙。
  1. Decode()
  2. {
  3.         FILE *inpf;

  4.         int nWrite;
  5.         int i, p;
  6.         int nalLen;
  7.         unsigned char *Buf;
  8.         int got_picture, consumed_bytes;
  9.         unsigned char *DisplayBuf;

  10.         DisplayBuf = (unsigned char *)malloc(60000);

  11.         char outfile[] = "test.pgm";

  12.         //1.打开输入文件
  13.         inpf = fopen("test.264", "rb");

  14.         //outf = fopen("out.yuv", "wb");

  15.         if(!inpf)
  16.         {
  17.                         goto Decodereturn;
  18.         }

  19.         nalLen = 0;
  20.         //准备解码文件缓冲
  21.         Buf = (unsigned char *)calloc(100000, sizeof(char));

  22.         //2.注册解码器,并且找到H264解码器
  23.         avcodec_init();
  24.         avcodec_register_all();
  25.         codec = avcodec_find_decoder(CODEC_ID_H264);

  26.         if(!codec)
  27.         {
  28.                 return 0;
  29.         }

  30.         //open codec
  31.         //3.打开解码器
  32.         if(avcodec_open(c, codec) < 0)
  33.         {
  34.                 return 0;
  35.         }

  36.         //allocate codec context
  37.         //分配解码器内存
  38.         picture = avcodec_alloc_frame();
  39.         if(!picture)
  40.         {
  41.                 return 0;
  42.         }

  43.         rgbdatanew = (unsigned char *)malloc(sizeof(unsigned char) * (3 * width * height));

  44.         while(!feof(inpf))
  45.         {
  46.                 //4.获取下一个NAL的长度,并且将NAL放入Buf
  47.                 nalLen = getNextNal(inpf, Buf);

  48.                 //5.对改NAL解码,解码的YUV数据存在picture中
  49.                 consumed_bytes = avcode_decode_video(c, picture, &got_picture, Buf, nalLen);
  50.                 if(consumed_bytes > 0)
  51.                 {
  52.                         //6.将picture中的YUV数据显示或者保存到文件
  53.                         p = 0;
  54.                        
  55.                         for(i = 0; i < c->height; i++)
  56.                         {
  57.                                 memcpy(DisplayBuf + p, picture->data[0] + i * picture->linesize[0], c->width);
  58.                                 p += c->width;
  59.                         }

  60.                         for(i = 0; i < (c->height / 2); i++)
  61.                         {
  62.                                 memcpy(DisplayBuf + p, picture->data[1] + i * picture->linesize[1], c->width / 2)
  63.                                 p += c->width / 2;
  64.                         }

  65.                         for(i = 0; i < (c->height / 2); i++)
  66.                         {
  67.                                 memcpy(DisplayBuf + p, picture->data[2] + i * picture->linesize[2], c->width / 2)
  68.                                 p += c->width / 2;
  69.                         }

  70.                         //显示画面
  71.                         DisplayVideo(DisplayBuf);
  72.                 }
  73.         }

  74.         //7.关闭输入文件
  75.         if(inpf)
  76.         {
  77.                 fclose(inpf);
  78.         }

  79. Decodereturn:

  80.         //8.关闭解码器,释放解码器内存
  81.         if(c)
  82.         {
  83.                 avcodec_close(c);
  84.                 av_free(c);
  85.                 c = NULL;
  86.         }

  87.         //9.释放解码器画面内存
  88.         if(picture)
  89.         {
  90.                 av_free(picture);
  91.                 picture = NULL;
  92.         }

  93.         //10.释放解码文件缓冲
  94.         if(Buf)
  95.         {
  96.                 free(Buf);
  97.                 Buf = NULL;
  98.         }

  99.         free(DisplayBuf);

  100. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-05-23 16:58 |只看该作者
太悲催了,网上百度出来的实例,竟然不是完整的,我还以为是引用库中的函数,谁知道是自定义函数,既然是给新手提供的,那就提供全点信息嘛。

不然像我似的,还在查找getNextNal函数的原型呐,

回复 1# 丫叩酱


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP