ffmpeg: re-enable use of buffersrc flags.
authorNicolas George <nicolas.george@normalesup.org>
Sun, 10 Mar 2013 13:07:29 +0000 (14:07 +0100)
committerNicolas George <nicolas.george@normalesup.org>
Sun, 10 Mar 2013 13:07:29 +0000 (14:07 +0100)
AV_BUFFERSRC_FLAG_PUSH is necessary to detect closed streams.

ffmpeg.c

index 6012a5c..7b6123a 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -220,7 +220,9 @@ static void sub2video_push_ref(InputStream *ist, int64_t pts)
     av_assert1(frame->data[0]);
     ist->sub2video.last_pts = frame->pts = pts;
     for (i = 0; i < ist->nb_filters; i++)
-        av_buffersrc_write_frame(ist->filters[i]->filter, frame);
+        av_buffersrc_add_frame_flags(ist->filters[i]->filter, frame,
+                                     AV_BUFFERSRC_FLAG_KEEP_REF |
+                                     AV_BUFFERSRC_FLAG_PUSH);
 }
 
 static void sub2video_update(InputStream *ist, AVSubtitle *sub)
@@ -1641,8 +1643,9 @@ static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output)
                                               (AVRational){1, ist->st->codec->sample_rate}, decoded_frame->nb_samples, &ist->filter_in_rescale_delta_last,
                                               (AVRational){1, ist->st->codec->sample_rate});
     for (i = 0; i < ist->nb_filters; i++)
-        av_buffersrc_write_frame(ist->filters[i]->filter, decoded_frame);
-        /* TODO re-add AV_BUFFERSRC_FLAG_PUSH */
+        av_buffersrc_add_frame_flags(ist->filters[i]->filter, decoded_frame,
+                                     AV_BUFFERSRC_FLAG_KEEP_REF |
+                                     AV_BUFFERSRC_FLAG_PUSH);
 
     decoded_frame->pts = AV_NOPTS_VALUE;
 
@@ -1751,8 +1754,9 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output)
                                  AV_BUFFERSRC_FLAG_NO_COPY |
                                  AV_BUFFERSRC_FLAG_PUSH);
         } else
-        if(av_buffersrc_write_frame(ist->filters[i]->filter, decoded_frame)<0) {
-            /* TODO add back AV_BUFFERSRC_FLAG_PUSH */
+        if(av_buffersrc_add_frame_flags(ist->filters[i]->filter, decoded_frame,
+                                        AV_BUFFERSRC_FLAG_KEEP_REF |
+                                        AV_BUFFERSRC_FLAG_PUSH)<0) {
             av_log(NULL, AV_LOG_FATAL, "Failed to inject frame into filter network\n");
             exit(1);
         }