On Thu, Oct 25, 2012 at 2:02 PM, Michael Bradshaw < [email protected]> wrote: > I've also included
Sorry, I meant to say that should you be interested, the source video file can be found at: https://docs.google.com/uc?export=download&id=0BxWx_dIBnyRoSnMyTFNGOHR1c2c The source I'm using, should you also be interested, is (remove the 'extern "C"' part to compile as C): #include <stdio.h> extern "C" { #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswresample/swresample.h> } int main(int argc, char** argv) { AVFrame* frame; AVFormatContext* formatContext; AVStream* videoStream; AVCodecContext* codecContext; AVPacket packet; int frameFinished; int result; av_register_all(); frame = avcodec_alloc_frame(); if (!frame) { printf("Error allocating the frame\n"); return 1; } formatContext = NULL; if (avformat_open_input(&formatContext, "C:/Users/mbradshaw/Desktop/b/c/SIMPSONS_D2-CallOfTheSimpsons.m4v", NULL, NULL) != 0) { av_free(frame); printf("Error opening the file\n"); return 1; } if (avformat_find_stream_info(formatContext, NULL) < 0) { av_free(frame); avformat_close_input(&formatContext); printf("Error finding the stream info\n"); return 1; } videoStream = NULL; for (unsigned int i = 0; i < formatContext->nb_streams; ++i) { if (formatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) { videoStream = formatContext->streams[i]; break; } } if (videoStream == NULL) { av_free(frame); avformat_close_input(&formatContext); printf("Could not find any video stream in the file\n"); return 1; } codecContext = videoStream->codec; codecContext->codec = avcodec_find_decoder(codecContext->codec_id); if (codecContext->codec == NULL) { av_free(frame); avformat_close_input(&formatContext); printf("Couldn't find a proper decoder\n"); return 1; } else if (avcodec_open2(codecContext, codecContext->codec, NULL) != 0) { av_free(frame); avformat_close_input(&formatContext); printf("Couldn't open the context with the decoder\n"); return 1; } av_init_packet(&packet); while (av_read_frame(formatContext, &packet) == 0) { if (packet.stream_index == videoStream->index) { printf("packet.dts = %d\n", packet.dts); frameFinished = 0; result = avcodec_decode_video2(codecContext, frame, &frameFinished, &packet); if (result >= 0 && frameFinished) { break; av_free_packet(&packet); } } av_free_packet(&packet); } avcodec_flush_buffers(codecContext); printf("seek result: %d\n", av_seek_frame(formatContext, 1, -2000000000, AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY)); while (av_read_frame(formatContext, &packet) == 0) { if (packet.stream_index == videoStream->index) { printf("packet.dts = %d\n", packet.dts); frameFinished = 0; result = avcodec_decode_video2(codecContext, frame, &frameFinished, &packet); if (result >= 0 && frameFinished) { break; av_free_packet(&packet); } } av_free_packet(&packet); } av_free(frame); avcodec_close(codecContext); avformat_close_input(&formatContext); return 0; }
_______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
