日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

利用ffmpeg來進行視頻解碼的完整示例代碼(H.26

系統 1933 0
  1. Decode()?
  2. {?
  3. FILE ?*?inpf;?
  4. ?
  5. int ?nWrite;?
  6. int ?i,p;?
  7. int ?nalLen;?
  8. unsigned? char *?Buf;?
  9. int ?got_picture,?consumed_bytes;?
  10. unsigned? char ?*DisplayBuf;?
  11. DisplayBuf=(unsigned? char ?*)malloc(60000);?
  12. ?
  13. char ?outfile[]?=? "test.pgm" ;?
  14. ?
  15. //1.打開輸入文件 ?
  16. inpf?=?fopen( "test.264" ,? "rb" );?
  17. ?
  18. //outf?=?fopen("out.yuv",?"wb"); ?
  19. ?
  20. if (!inpf)?
  21. {?
  22. goto ?Decodereturn;?
  23. }?
  24. ?
  25. nalLen?=?0;?
  26. Buf?=?(unsigned? char *)calloc?(?1000000,? sizeof ( char ));? //準備解碼文件緩沖 ?
  27. ?
  28. //2.注冊解碼器,并且找到H264解碼器 ?
  29. avcodec_init();?
  30. avcodec_register_all();?
  31. codec?=?avcodec_find_decoder(CODEC_ID_H264);?
  32. ?
  33. if ?(!codec)?{?
  34. return ?0;?
  35. }?
  36. //allocate?codec?context ?
  37. //分配解碼器內存 ?
  38. c?=?avcodec_alloc_context();?
  39. ?
  40. if (!c){?
  41. return ?0;?
  42. }?
  43. //open?codec ?
  44. //3.打開解碼器 ?
  45. if ?(avcodec_open(c,?codec)?<?0)?{?
  46. return ?0;?
  47. }?
  48. ?
  49. //allocate?frame?buffer ?
  50. //分配解碼器用的幀緩沖 ?
  51. picture?=?avcodec_alloc_frame();?
  52. if (!picture){?
  53. return ?0;?
  54. }?
  55. ?
  56. rgbdatanew?=?(unsigned? char ?*)malloc( sizeof (unsigned? char )*(3?*?width?*?height));?
  57. ?
  58. while (!feof(inpf))?
  59. {?
  60. ?
  61. //4.獲取下一個NAL的長度,并且將NAL放入Buf ?
  62. nalLen?=?getNextNal(inpf,?Buf);?
  63. ?
  64. //5.對改NAL解碼,解碼的YUV數據存在picture中 ?
  65. consumed_bytes=?avcodec_decode_video(c,?picture,?&got_picture,?Buf,?nalLen);?
  66. ?
  67. if (consumed_bytes?>?0)?
  68. {?
  69. ?
  70. //6.將picture中的YUV數據顯示或者保存到文件 ?
  71. p=0;?
  72. for (i=0;?i<c->height;?i++)?
  73. {?
  74. memcpy(DisplayBuf+p,picture->data[0]?+?i?*?picture->linesize[0],?c->width);?
  75. p+=c->width;?
  76. }?
  77. for (i=0;?i<c->height/2;?i++)?
  78. {?
  79. memcpy(DisplayBuf+p,picture->data[1]?+?i?*?picture->linesize[1],?c->width/2);?
  80. p+=c->width/2;?
  81. }?
  82. for (i=0;?i<c->height/2;?i++)?
  83. {?
  84. memcpy(DisplayBuf+p,picture->data[2]?+?i?*?picture->linesize[2],?c->width/2);?
  85. p+=c->width/2;?
  86. }?
  87. //顯示畫面 ?
  88. DisplayVideo(DisplayBuf);?
  89. }?
  90. }?
  91. ?
  92. //7.關閉輸入文件 ?
  93. if (inpf)?
  94. fclose(inpf);?
  95. ?
  96. Decodereturn:?
  97. ?
  98. //8.關閉解碼器,釋放解碼器內存 ?
  99. if (c)?{?
  100. avcodec_close(c);?
  101. av_free(c);?
  102. c?=?NULL;?
  103. }?
  104. //9.釋放解碼畫面內存 ?
  105. if (picture)?{?
  106. av_free(picture);?
  107. picture?=?NULL;?
  108. }?
  109. ?
  110. //10.釋放解碼文件緩沖 ?
  111. if (Buf)?
  112. {?
  113. free(Buf);?
  114. Buf?=?NULL;?
  115. }?
  116. ?
  117. free(DisplayBuf);?
  118. }?

利用ffmpeg來進行視頻解碼的完整示例代碼(H.264)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 文水县| 新野县| 临邑县| 常熟市| 甘孜| 太仆寺旗| 壶关县| 铜山县| 阜宁县| 崇州市| 辽中县| 永嘉县| 商洛市| 河北省| 安陆市| 黄大仙区| 闽清县| 印江| 瑞安市| 阳新县| 玛纳斯县| 河南省| 安多县| 台中县| 勃利县| 儋州市| 弥勒县| 望谟县| 宁南县| 沁阳市| 福安市| 花莲市| 咸阳市| 贡觉县| 宁国市| 盱眙县| 马关县| 东辽县| 涞源县| 平度市| 博客|