OSDN Git Service

vp3: use FF_BUFFER_TYPE_COPY
authorDavid Conrad <lessen42@gmail.com>
Tue, 9 Mar 2010 00:29:19 +0000 (00:29 +0000)
committerDavid Conrad <lessen42@gmail.com>
Tue, 9 Mar 2010 00:29:19 +0000 (00:29 +0000)
Originally committed as revision 22359 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/vp3.c

index 2963686..b874ee7 100644 (file)
@@ -1889,8 +1889,7 @@ static int vp3_decode_frame(AVCodecContext *avctx,
 
     /* release the last frame, if it is allocated and if it is not the
      * golden frame */
-    if ((s->last_frame.data[0]) &&
-        (s->last_frame.data[0] != s->golden_frame.data[0]))
+    if (s->last_frame.data[0] && s->last_frame.type != FF_BUFFER_TYPE_COPY)
         avctx->release_buffer(avctx, &s->last_frame);
 
     /* shuffle frames (last = current) */
@@ -1900,6 +1899,7 @@ static int vp3_decode_frame(AVCodecContext *avctx,
         if (s->golden_frame.data[0])
             avctx->release_buffer(avctx, &s->golden_frame);
         s->golden_frame = s->current_frame;
+        s->last_frame.type = FF_BUFFER_TYPE_COPY;
     }
 
     s->current_frame.data[0]= NULL; /* ensure that we catch any access to this released frame */
@@ -1941,9 +1941,9 @@ static av_cold int vp3_decode_end(AVCodecContext *avctx)
     free_vlc(&s->motion_vector_vlc);
 
     /* release all frames */
-    if (s->golden_frame.data[0] && s->golden_frame.data[0] != s->last_frame.data[0])
+    if (s->golden_frame.data[0])
         avctx->release_buffer(avctx, &s->golden_frame);
-    if (s->last_frame.data[0])
+    if (s->last_frame.data[0] && s->last_frame.type != FF_BUFFER_TYPE_COPY)
         avctx->release_buffer(avctx, &s->last_frame);
     /* no need to release the current_frame since it will always be pointing
      * to the same frame as either the golden or last frame */