On Sun, 19 Nov 2017, John Stebbins wrote:

---
fftools/ffplay.c | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index 10a917194d..97555d5047 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -257,6 +257,7 @@ typedef struct VideoState {
    struct SwrContext *swr_ctx;
    int frame_drops_early;
    int frame_drops_late;
+    int drop_disposable;

    enum ShowMode {
        SHOW_MODE_NONE = -1, SHOW_MODE_VIDEO = 0, SHOW_MODE_WAVES, 
SHOW_MODE_RDFT, SHOW_MODE_NB
@@ -1619,9 +1620,11 @@ retry:
                duration = vp_duration(is, vp, nextvp);
                if(!is->step && (framedrop>0 || (framedrop && get_master_sync_type(is) != 
AV_SYNC_VIDEO_MASTER)) && time > is->frame_timer + duration){
                    is->frame_drops_late++;
+                    is->drop_disposable = 1;
                    frame_queue_next(&is->pictq);
                    goto retry;
                }
+                is->drop_disposable = 0;
            }

            if (is->subtitle_st) {
@@ -2900,6 +2903,7 @@ static int read_thread(void *arg)
        infinite_buffer = 1;

    for (;;) {
+        AVStream * st;
        if (is->abort_request)
            break;
        if (is->paused != is->last_paused) {
@@ -3008,6 +3012,12 @@ static int read_thread(void *arg)
        } else {
            is->eof = 0;
        }
+        st = ic->streams[pkt->stream_index];
+        if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
+            is->drop_disposable && pkt->flags & AV_PKT_FLAG_DISPOSABLE) {
+            av_packet_unref(pkt);
+            continue;
+        }
        /* check if packet is in play range specified by user, then queue, 
otherwise discard */
        stream_start_time = ic->streams[pkt->stream_index]->start_time;
        pkt_ts = pkt->pts == AV_NOPTS_VALUE ? pkt->dts : pkt->pts;

I am not a fan of enabling this by default. Unknown number of packets accumulate in the packet queue, unknown number of packets are processed by the decoder, so we might drop packets referring to frames 1 second from now... If you really want to dynamically drop packets, then at least drop them right before feeding them to the decoder to get rid of the packet queue latency.

Regards,
Marton
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to