ffplay: use refcounted frames for audio
authorMarton Balint <cus@passwd.hu>
Wed, 13 Mar 2013 00:26:21 +0000 (01:26 +0100)
committerMarton Balint <cus@passwd.hu>
Sun, 17 Mar 2013 02:31:37 +0000 (03:31 +0100)
Signed-off-by: Marton Balint <cus@passwd.hu>
ffplay.c

index 34ebe47..8adac1c 100644 (file)
--- a/ffplay.c
+++ b/ffplay.c
@@ -2063,8 +2063,10 @@ static int audio_decode_frame(VideoState *is)
             if (!is->frame) {
                 if (!(is->frame = avcodec_alloc_frame()))
                     return AVERROR(ENOMEM);
-            } else
+            } else {
+                av_frame_unref(is->frame);
                 avcodec_get_frame_defaults(is->frame);
+            }
 
             if (is->audioq.serial != is->audio_pkt_temp_serial)
                 break;
@@ -2349,7 +2351,7 @@ static int stream_component_open(VideoState *is, int stream_index)
     opts = filter_codec_opts(codec_opts, avctx->codec_id, ic, ic->streams[stream_index], codec);
     if (!av_dict_get(opts, "threads", NULL, 0))
         av_dict_set(&opts, "threads", "auto", 0);
-    if (avctx->codec_type == AVMEDIA_TYPE_VIDEO)
+    if (avctx->codec_type == AVMEDIA_TYPE_VIDEO || avctx->codec_type == AVMEDIA_TYPE_AUDIO)
         av_dict_set(&opts, "refcounted_frames", "1", 0);
     if (avcodec_open2(avctx, codec, &opts) < 0)
         return -1;
@@ -2426,7 +2428,7 @@ static void stream_component_close(VideoState *is, int stream_index)
         av_freep(&is->audio_buf1);
         is->audio_buf1_size = 0;
         is->audio_buf = NULL;
-        avcodec_free_frame(&is->frame);
+        av_frame_free(&is->frame);
 
         if (is->rdft) {
             av_rdft_end(is->rdft);