利用ffmpeg来进行视频解码的完整示例代码(H.26
系统
2035 0
-
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"
;
-
-
-
inpf = fopen(
"test.264"
,
"rb"
);
-
-
-
-
if
(!inpf)
-
{
-
goto
Decodereturn;
-
}
-
-
nalLen = 0;
-
Buf = (unsigned
char
*)calloc ( 1000000,
sizeof
(
char
));
-
-
-
avcodec_init();
-
avcodec_register_all();
-
codec = avcodec_find_decoder(CODEC_ID_H264);
-
-
if
(!codec) {
-
return
0;
-
}
-
-
-
c = avcodec_alloc_context();
-
-
if
(!c){
-
return
0;
-
}
-
-
-
if
(avcodec_open(c, codec) < 0) {
-
return
0;
-
}
-
-
-
-
picture = avcodec_alloc_frame();
-
if
(!picture){
-
return
0;
-
}
-
-
rgbdatanew = (unsigned
char
*)malloc(
sizeof
(unsigned
char
)*(3 * width * height));
-
-
while
(!feof(inpf))
-
{
-
-
-
nalLen = getNextNal(inpf, Buf);
-
-
-
consumed_bytes= avcodec_decode_video(c, picture, &got_picture, Buf, nalLen);
-
-
if
(consumed_bytes > 0)
-
{
-
-
-
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);
-
}
-
}
-
-
-
if
(inpf)
-
fclose(inpf);
-
-
Decodereturn:
-
-
-
if
(c) {
-
avcodec_close(c);
-
av_free(c);
-
c = NULL;
-
}
-
-
if
(picture) {
-
av_free(picture);
-
picture = NULL;
-
}
-
-
-
if
(Buf)
-
{
-
free(Buf);
-
Buf = NULL;
-
}
-
-
free(DisplayBuf);
-
}
利用ffmpeg来进行视频解码的完整示例代码(H.264)
更多文章、技术交流、商务合作、联系博主
微信扫码或搜索:z360901061
微信扫一扫加我为好友
QQ号联系: 360901061
您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。
【本文对您有帮助就好】元