---
 libavcodec/options.c |    2 +-
 libavcodec/utils.c   |    6 ++++++
 libavformat/utils.c  |    5 ++---
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/libavcodec/options.c b/libavcodec/options.c
index c416b4a..52fc664 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -485,7 +485,7 @@ AVCodecContext *avcodec_alloc_context3(AVCodec *codec){
 
 int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
 {
-    if (dest->codec) { // check that the dest context is uninitialized
+    if (avcodec_is_open(dest)) { // check that the dest context is 
uninitialized
         av_log(dest, AV_LOG_ERROR,
                "Tried to copy AVCodecContext %p into already-initialized %p\n",
                src, dest);
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index c3e898b..8978ed8 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -627,6 +627,9 @@ int attribute_align_arg avcodec_open2(AVCodecContext 
*avctx, AVCodec *codec, AVD
     int ret = 0;
     AVDictionary *tmp = NULL;
 
+    if (avcodec_is_open(avctx))
+        return 0;
+
     if (avctx->extradata_size < 0 || avctx->extradata_size >= 
FF_MAX_EXTRADATA_SIZE)
         return AVERROR(EINVAL);
 
@@ -1251,6 +1254,9 @@ void avsubtitle_free(AVSubtitle *sub)
 
 av_cold int avcodec_close(AVCodecContext *avctx)
 {
+    if (!avcodec_is_open(avctx))
+        return 0;
+
     /* If there is a user-supplied mutex locking routine, call it. */
     if (ff_lockmgr_cb) {
         if ((*ff_lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN))
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 4145097..017d1e0 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2006,7 +2006,7 @@ static int try_decode_frame(AVStream *st, AVPacket 
*avpkt, AVDictionary **option
     AVFrame picture;
     AVPacket pkt = *avpkt;
 
-    if(!st->codec->codec){
+    if (!avcodec_is_open(st->codec)) {
         AVDictionary *thread_opt = NULL;
 
         codec = avcodec_find_decoder(st->codec->codec_id);
@@ -2354,8 +2354,7 @@ int avformat_find_stream_info(AVFormatContext *ic, 
AVDictionary **options)
     // close codecs which were opened in try_decode_frame()
     for(i=0;i<ic->nb_streams;i++) {
         st = ic->streams[i];
-        if(st->codec->codec)
-            avcodec_close(st->codec);
+        avcodec_close(st->codec);
     }
     for(i=0;i<ic->nb_streams;i++) {
         st = ic->streams[i];
-- 
1.7.7.3

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to