void ffmmGG()
{
AVFormatContext *pFormatCtx = NULL;
int i, videoStream;
AVCodecContext *pCodecCtx;
AVCodec *pCodec;
AVFrame *pFrame;
AVFrame *pFrameRGB;
AVPacket packet;
int frameFinished;
int numBytes;
uint8_t *buffer;
av_register_all();
if( avformat_open_input(&pFormatCtx, "01.rmvb", NULL, NULL) != 0 )
return -1;
if( avformat_find_stream_info(pFormatCtx, NULL ) < 0 )
return -1;
av_dump_format(pFormatCtx, -1, "01.rmvb", 0);
videoStream = -1;
for( i = 0; i < pFormatCtx->nb_streams; i++ )
{
if( pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
videoStream = i;
break;
}
}
if( videoStream == -1 )
return -1;
pCodecCtx = pFormatCtx->streams[videoStream]->codec;
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
if( pCodec == NULL )
return -1;
if( avcodec_open2(pCodecCtx, pCodec, NULL) < 0 )
return -1;
pFrame = avcodec_alloc_frame();
if( pFrame == NULL )
return -1;
pFrameRGB = avcodec_alloc_frame();
if( pFrameRGB == NULL )
return -1;
numBytes = avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,
pCodecCtx->height);
buffer = (uint8_t*)av_malloc(numBytes);
avpicture_fill( (AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,
pCodecCtx->width, pCodecCtx->height);
i = 0;
while( av_read_frame(pFormatCtx, &packet) >= 0 )
{
if( packet.stream_index == videoStream )
{
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
if( frameFinished )
{
struct SwsContext *img_convert_ctx = NULL;
img_convert_ctx =
sws_getCachedContext(img_convert_ctx, pCodecCtx->width,
pCodecCtx->height, pCodecCtx->pix_fmt,
pCodecCtx->width, pCodecCtx->height,
PIX_FMT_RGB24, SWS_BICUBIC,
NULL, NULL, NULL);
if( !img_convert_ctx )
{
fprintf(stderr, "Cannot initialize sws conversion context\n");
exit(1);
}
sws_scale(img_convert_ctx, (const uint8_t* const*)pFrame->data,
pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data,
pFrameRGB->linesize);
if( i++ < 100 ) SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, i);
else break;
}
}
av_free_packet(&packet);
}
av_free(buffer);
av_free(pFrameRGB);
av_free(pFrame);
avcodec_close(pCodecCtx);
avformat_close_input(&pFormatCtx);
}
dm9pZCBmZm1tR0coKQp7CiAgICAKICAgIEFWRm9ybWF0Q29udGV4dCAqcEZvcm1hdEN0eCA9IE5VTEw7CglpbnQgICAgICAgICAgICAgaSwgdmlkZW9TdHJlYW07CglBVkNvZGVjQ29udGV4dCAgKnBDb2RlY0N0eDsKCUFWQ29kZWMgICAgICAgICAqcENvZGVjOwoJQVZGcmFtZSAgICAgICAgICpwRnJhbWU7CglBVkZyYW1lICAgICAgICAgKnBGcmFtZVJHQjsKCUFWUGFja2V0ICAgICAgICBwYWNrZXQ7CglpbnQgICAgICAgICAgICAgZnJhbWVGaW5pc2hlZDsKCWludCAgICAgICAgICAgICBudW1CeXRlczsKCXVpbnQ4X3QgICAgICAgICAqYnVmZmVyOwoKCWF2X3JlZ2lzdGVyX2FsbCgpOwoJaWYoIGF2Zm9ybWF0X29wZW5faW5wdXQoJnBGb3JtYXRDdHgsICIwMS5ybXZiIiwgTlVMTCwgTlVMTCkgIT0gMCApCgkJcmV0dXJuIC0xOwoKCWlmKCBhdmZvcm1hdF9maW5kX3N0cmVhbV9pbmZvKHBGb3JtYXRDdHgsIE5VTEwgKSA8IDAgKQoJCXJldHVybiAtMTsKCglhdl9kdW1wX2Zvcm1hdChwRm9ybWF0Q3R4LCAtMSwgIjAxLnJtdmIiLCAwKTsKCgl2aWRlb1N0cmVhbSA9IC0xOwoJZm9yKCBpID0gMDsgaSA8IHBGb3JtYXRDdHgtPm5iX3N0cmVhbXM7IGkrKyApCgl7CgkJaWYoIHBGb3JtYXRDdHgtPnN0cmVhbXNbaV0tPmNvZGVjLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9WSURFTykgewoJCQl2aWRlb1N0cmVhbSA9IGk7CgkJCWJyZWFrOwoJCX0KCX0KCWlmKCB2aWRlb1N0cmVhbSA9PSAtMSApCgkJcmV0dXJuIC0xOwoKCXBDb2RlY0N0eCA9IHBGb3JtYXRDdHgtPnN0cmVhbXNbdmlkZW9TdHJlYW1dLT5jb2RlYzsKCglwQ29kZWMgPSBhdmNvZGVjX2ZpbmRfZGVjb2RlcihwQ29kZWNDdHgtPmNvZGVjX2lkKTsKCWlmKCBwQ29kZWMgPT0gTlVMTCApCgkJcmV0dXJuIC0xOwoKCWlmKCBhdmNvZGVjX29wZW4yKHBDb2RlY0N0eCwgcENvZGVjLCBOVUxMKSA8IDAgKQoJCXJldHVybiAtMTsKCglwRnJhbWUgPSBhdmNvZGVjX2FsbG9jX2ZyYW1lKCk7CglpZiggcEZyYW1lID09IE5VTEwgKQoJCXJldHVybiAtMTsKCglwRnJhbWVSR0IgPSBhdmNvZGVjX2FsbG9jX2ZyYW1lKCk7CglpZiggcEZyYW1lUkdCID09IE5VTEwgKQoJCXJldHVybiAtMTsKCgludW1CeXRlcyA9IGF2cGljdHVyZV9nZXRfc2l6ZShQSVhfRk1UX1JHQjI0LCBwQ29kZWNDdHgtPndpZHRoLAoJCXBDb2RlY0N0eC0+aGVpZ2h0KTsKCglidWZmZXIgPSAodWludDhfdCopYXZfbWFsbG9jKG51bUJ5dGVzKTsKCglhdnBpY3R1cmVfZmlsbCggKEFWUGljdHVyZSAqKXBGcmFtZVJHQiwgYnVmZmVyLCBQSVhfRk1UX1JHQjI0LAoJCXBDb2RlY0N0eC0+d2lkdGgsIHBDb2RlY0N0eC0+aGVpZ2h0KTsKCglpID0gMDsKCXdoaWxlKCBhdl9yZWFkX2ZyYW1lKHBGb3JtYXRDdHgsICZwYWNrZXQpID49IDAgKSAKCXsKCQlpZiggcGFja2V0LnN0cmVhbV9pbmRleCA9PSB2aWRlb1N0cmVhbSApIAoJCXsKCQkJYXZjb2RlY19kZWNvZGVfdmlkZW8yKHBDb2RlY0N0eCwgcEZyYW1lLCAmZnJhbWVGaW5pc2hlZCwgJnBhY2tldCk7CgkJCWlmKCBmcmFtZUZpbmlzaGVkICkgCgkJCXsKCQkJCXN0cnVjdCBTd3NDb250ZXh0ICppbWdfY29udmVydF9jdHggPSBOVUxMOwoJCQkJaW1nX2NvbnZlcnRfY3R4ID0gCgkJCQkJc3dzX2dldENhY2hlZENvbnRleHQoaW1nX2NvbnZlcnRfY3R4LCBwQ29kZWNDdHgtPndpZHRoLAoJCQkJCXBDb2RlY0N0eC0+aGVpZ2h0LCBwQ29kZWNDdHgtPnBpeF9mbXQsCgkJCQkJcENvZGVjQ3R4LT53aWR0aCwgcENvZGVjQ3R4LT5oZWlnaHQsCgkJCQkJUElYX0ZNVF9SR0IyNCwgU1dTX0JJQ1VCSUMsCgkJCQkJTlVMTCwgTlVMTCwgTlVMTCk7CgkJCQlpZiggIWltZ19jb252ZXJ0X2N0eCApIAoJCQkJewoJCQkJCWZwcmludGYoc3RkZXJyLCAiQ2Fubm90IGluaXRpYWxpemUgc3dzIGNvbnZlcnNpb24gY29udGV4dFxuIik7CgkJCQkJZXhpdCgxKTsKCQkJCX0KCQkJCXN3c19zY2FsZShpbWdfY29udmVydF9jdHgsIChjb25zdCB1aW50OF90KiBjb25zdCopcEZyYW1lLT5kYXRhLAoJCQkJCXBGcmFtZS0+bGluZXNpemUsIDAsIHBDb2RlY0N0eC0+aGVpZ2h0LCBwRnJhbWVSR0ItPmRhdGEsCgkJCQkJcEZyYW1lUkdCLT5saW5lc2l6ZSk7CgkJCQlpZiggaSsrIDwgMTAwICkJU2F2ZUZyYW1lKHBGcmFtZVJHQiwgcENvZGVjQ3R4LT53aWR0aCwgcENvZGVjQ3R4LT5oZWlnaHQsIGkpOwoJCQkJZWxzZSBicmVhazsKCQkJfQoJCX0KCQlhdl9mcmVlX3BhY2tldCgmcGFja2V0KTsKCX0KCWF2X2ZyZWUoYnVmZmVyKTsKCWF2X2ZyZWUocEZyYW1lUkdCKTsKCWF2X2ZyZWUocEZyYW1lKTsKCWF2Y29kZWNfY2xvc2UocENvZGVjQ3R4KTsKCWF2Zm9ybWF0X2Nsb3NlX2lucHV0KCZwRm9ybWF0Q3R4KTsKfQ==