| Index: media/ffmpeg/ffmpeg_common.cc
|
| diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc
|
| index 7af9635b6bcfd4c3e22aa69a87ade04de6745fb1..c86acb5654ada247d6069092e6d71866b665fe2b 100644
|
| --- a/media/ffmpeg/ffmpeg_common.cc
|
| +++ b/media/ffmpeg/ffmpeg_common.cc
|
| @@ -206,4 +206,28 @@ int GetSurfaceWidth(AVStream* stream) {
|
| return width & ~1;
|
| }
|
|
|
| +void DestroyAVFormatContext(AVFormatContext* format_context) {
|
| + DCHECK(format_context);
|
| +
|
| + // Iterate each stream and destroy each one of them.
|
| + int streams = format_context->nb_streams;
|
| + for (int i = 0; i < streams; ++i) {
|
| + AVStream* stream = format_context->streams[i];
|
| +
|
| + // The conditions for calling avcodec_close():
|
| + // 1. AVStream is alive.
|
| + // 2. AVCodecContext in AVStream is alive.
|
| + // 3. AVCodec in AVCodecContext is alive.
|
| + // Notice that closing a codec context without prior avcodec_open() will
|
| + // result in a crash in FFmpeg.
|
| + if (stream && stream->codec && stream->codec->codec) {
|
| + stream->discard = AVDISCARD_ALL;
|
| + avcodec_close(stream->codec);
|
| + }
|
| + }
|
| +
|
| + // Then finally cleanup the format context.
|
| + av_close_input_file(format_context);
|
| +}
|
| +
|
| } // namespace media
|
|
|