diff mbox

[FFmpeg-devel] vf_fps: when reading EOF, using current_pts to duplicate the last frame if needed.

Message ID 20170912012508.139701-1-tfoucu@gmail.com
State Superseded
Headers show

Commit Message

Thierry Foucu Sept. 12, 2017, 1:25 a.m. UTC
Fix ticket #2674
Tested with examples from ticket 2674.
---

Update the Patch with the correct number of duplicate showing.
For exmaple, in case we up-sample one second video at 24fps by 2, we should be getting 24 duplicate frames.

ffmpeg -loglevel verbose -i 24fps.avi -vf fps=48 -f null -
ffmpeg version N-87234-g9a32769f5e Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
  configuration: 
  libavutil      55. 74.100 / 55. 74.100
  libavcodec     57.105.100 / 57.105.100
  libavformat    57. 81.100 / 57. 81.100
  libavdevice    57.  8.100 / 57.  8.100
  libavfilter     6.103.100 /  6.103.100
  libswscale      4.  7.103 /  4.  7.103
  libswresample   2.  8.100 /  2.  8.100
Input #0, avi, from '24fps.avi':
  Metadata:
    encoder         : Lavf57.81.100
  Duration: 00:00:01.00, start: 0.000000, bitrate: 368 kb/s
    Stream #0:0: Video: mpeg4 (Simple Profile), 1 reference frame (FMP4 / 0x34504D46), yuv420p(left), 320x240 [SAR 1:1 DAR 4:3], 24 fps, 24 tbr, 24 tbn, 24 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg4 (native) -> wrapped_avframe (native))
Press [q] to stop, [?] for help
[Parsed_fps_0 @ 0x25ea6a0] fps=48/1
[graph 0 input from stream 0:0 @ 0x275cc00] w:320 h:240 pixfmt:yuv420p tb:1/24 fr:24/1 sar:1/1 sws_param:flags=2
Output #0, null, to 'pipe:':
  Metadata:
    encoder         : Lavf57.81.100
    Stream #0:0: Video: wrapped_avframe, 1 reference frame, yuv420p(left), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 48 fps, 48 tbn, 48 tbc
    Metadata:
      encoder         : Lavc57.105.100 wrapped_avframe
No more output streams to write to, finishing.
frame=   48 fps=0.0 q=-0.0 Lsize=N/A time=00:00:01.00 bitrate=N/A speed=99.3x    
video:25kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Input file #0 (24fps.avi):
  Input stream #0:0 (video): 24 packets read (39693 bytes); 24 frames decoded; 
  Total: 24 packets (39693 bytes) demuxed
Output file #0 (pipe:):
  Output stream #0:0 (video): 48 frames encoded; 48 packets muxed (25344 bytes); 
  Total: 48 packets (25344 bytes) muxed
[Parsed_fps_0 @ 0x25ea6a0] 24 frames in, 48 frames out; 0 frames dropped, 24 frames duplicated.

 libavfilter/vf_fps.c        | 44 +++++++++++++++++++++++++++++++++++++++-----
 tests/ref/fate/filter-fps   |  6 ++++++
 tests/ref/fate/filter-fps-r |  4 ++++
 tests/ref/fate/m4v-cfr      |  1 -
 4 files changed, 49 insertions(+), 6 deletions(-)

Comments

Thomas Mundt Sept. 12, 2017, 8:35 a.m. UTC | #1
Hi Thierry,

2017-09-12 3:25 GMT+02:00 Thierry Foucu <tfoucu@gmail.com>:

> Fix ticket #2674
> Tested with examples from ticket 2674.
> ---
>
> Update the Patch with the correct number of duplicate showing.
> For exmaple, in case we up-sample one second video at 24fps by 2, we
> should be getting 24 duplicate frames.
>
> ffmpeg -loglevel verbose -i 24fps.avi -vf fps=48 -f null -
> ffmpeg version N-87234-g9a32769f5e Copyright (c) 2000-2017 the FFmpeg
> developers
>   built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
>   configuration:
>   libavutil      55. 74.100 / 55. 74.100
>   libavcodec     57.105.100 / 57.105.100
>   libavformat    57. 81.100 / 57. 81.100
>   libavdevice    57.  8.100 / 57.  8.100
>   libavfilter     6.103.100 /  6.103.100
>   libswscale      4.  7.103 /  4.  7.103
>   libswresample   2.  8.100 /  2.  8.100
> Input #0, avi, from '24fps.avi':
>   Metadata:
>     encoder         : Lavf57.81.100
>   Duration: 00:00:01.00, start: 0.000000, bitrate: 368 kb/s
>     Stream #0:0: Video: mpeg4 (Simple Profile), 1 reference frame (FMP4 /
> 0x34504D46), yuv420p(left), 320x240 [SAR 1:1 DAR 4:3], 24 fps, 24 tbr, 24
> tbn, 24 tbc
> Stream mapping:
>   Stream #0:0 -> #0:0 (mpeg4 (native) -> wrapped_avframe (native))
> Press [q] to stop, [?] for help
> [Parsed_fps_0 @ 0x25ea6a0] fps=48/1
> [graph 0 input from stream 0:0 @ 0x275cc00] w:320 h:240 pixfmt:yuv420p
> tb:1/24 fr:24/1 sar:1/1 sws_param:flags=2
> Output #0, null, to 'pipe:':
>   Metadata:
>     encoder         : Lavf57.81.100
>     Stream #0:0: Video: wrapped_avframe, 1 reference frame, yuv420p(left),
> 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 48 fps, 48 tbn, 48 tbc
>     Metadata:
>       encoder         : Lavc57.105.100 wrapped_avframe
> No more output streams to write to, finishing.
> frame=   48 fps=0.0 q=-0.0 Lsize=N/A time=00:00:01.00 bitrate=N/A
> speed=99.3x
> video:25kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
> muxing overhead: unknown
> Input file #0 (24fps.avi):
>   Input stream #0:0 (video): 24 packets read (39693 bytes); 24 frames
> decoded;
>   Total: 24 packets (39693 bytes) demuxed
> Output file #0 (pipe:):
>   Output stream #0:0 (video): 48 frames encoded; 48 packets muxed (25344
> bytes);
>   Total: 48 packets (25344 bytes) muxed
> [Parsed_fps_0 @ 0x25ea6a0] 24 frames in, 48 frames out; 0 frames dropped,
> 24 frames duplicated.
>
>  libavfilter/vf_fps.c        | 44 ++++++++++++++++++++++++++++++
> +++++++++-----
>  tests/ref/fate/filter-fps   |  6 ++++++
>  tests/ref/fate/filter-fps-r |  4 ++++
>  tests/ref/fate/m4v-cfr      |  1 -
>  4 files changed, 49 insertions(+), 6 deletions(-)
>
> diff --git a/libavfilter/vf_fps.c b/libavfilter/vf_fps.c
> index 20ccd797d1..09fc66a73c 100644
> --- a/libavfilter/vf_fps.c
> +++ b/libavfilter/vf_fps.c
> @@ -34,6 +34,8 @@
>  #include "libavutil/opt.h"
>  #include "libavutil/parseutils.h"
>
> +#define FF_INTERNAL_FIELDS 1
> +#include "framequeue.h"
>  #include "avfilter.h"
>  #include "internal.h"
>  #include "video.h"
> @@ -137,13 +139,45 @@ static int request_frame(AVFilterLink *outlink)
>              AVFrame *buf;
>
>              av_fifo_generic_read(s->fifo, &buf, sizeof(buf), NULL);
> -            buf->pts = av_rescale_q(s->first_pts,
> ctx->inputs[0]->time_base,
> -                                    outlink->time_base) + s->frames_out;
> +            if (av_fifo_size(s->fifo)) {
> +                buf->pts = av_rescale_q(s->first_pts,
> ctx->inputs[0]->time_base,
> +                                        outlink->time_base) +
> s->frames_out;
>
> -            if ((ret = ff_filter_frame(outlink, buf)) < 0)
> -                return ret;
> +                if ((ret = ff_filter_frame(outlink, buf)) < 0)
> +                    return ret;
>
> -            s->frames_out++;
> +                s->frames_out++;
> +            } else {
> +                /* This is the last frame, we may have to duplicate it to
> match
> +                 * the last frame duration */
> +                int j;
> +                int delta = av_rescale_q_rnd(ctx->inputs[0]->current_pts
> - s->first_pts,
> +                                             ctx->inputs[0]->time_base,
> +                                             outlink->time_base,
> s->rounding) - s->frames_out ;
> +                /* if the delta is equal to 1, it means we just need to
> output
> +                 * the last frame. Greater than 1 means we will need
> duplicate
> +                 * delta-1 frames */
> +                if (delta > 0 ) {
> +                    for (j = 0; j < delta; j++) {
> +                        AVFrame *dup = av_frame_clone(buf);
> +
> +                        av_log(ctx, AV_LOG_DEBUG, "Duplicating frame.\n");
> +                        dup->pts = av_rescale_q(s->first_pts,
> ctx->inputs[0]->time_base,
> +                                                outlink->time_base) +
> s->frames_out;
> +
> +                        if ((ret = ff_filter_frame(outlink, dup)) < 0)
> +                            return ret;
> +
> +                        s->frames_out++;
> +                        if (j > 0) s->dup++;
> +                    }
> +                } else {
> +                    /* for delta less or equal to 0, we should drop the
> frame,
> +                     * otherwise, we will have one or more extra frames */
> +                    av_frame_free(&buf);
> +                    s->drop++;
> +                }
> +            }
>          }
>          return 0;
>      }
> diff --git a/tests/ref/fate/filter-fps b/tests/ref/fate/filter-fps
> index 55712cfb1c..242fb04e85 100644
> --- a/tests/ref/fate/filter-fps
> +++ b/tests/ref/fate/filter-fps
> @@ -85,3 +85,9 @@
>  0,         79,         79,        1,    30576, 0xa2fcd06f
>  0,         80,         80,        1,    30576, 0xa2fcd06f
>  0,         81,         81,        1,    30576, 0xd4150aad
> +0,         82,         82,        1,    30576, 0xd4150aad
> +0,         83,         83,        1,    30576, 0xd4150aad
> +0,         84,         84,        1,    30576, 0xd4150aad
> +0,         85,         85,        1,    30576, 0xd4150aad
> +0,         86,         86,        1,    30576, 0xd4150aad
> +0,         87,         87,        1,    30576, 0xd4150aad
> diff --git a/tests/ref/fate/filter-fps-r b/tests/ref/fate/filter-fps-r
> index 826b1ed6c6..c1bc7d1547 100644
> --- a/tests/ref/fate/filter-fps-r
> +++ b/tests/ref/fate/filter-fps-r
> @@ -72,3 +72,7 @@
>  0,         79,         79,        1,    30576, 0xa2fcd06f
>  0,         80,         80,        1,    30576, 0xa2fcd06f
>  0,         82,         82,        1,    30576, 0xd4150aad
> +0,         83,         83,        1,    30576, 0xd4150aad
> +0,         84,         84,        1,    30576, 0xd4150aad
> +0,         85,         85,        1,    30576, 0xd4150aad
> +0,         86,         86,        1,    30576, 0xd4150aad
> diff --git a/tests/ref/fate/m4v-cfr b/tests/ref/fate/m4v-cfr
> index 4eee84d01b..e2d02032fe 100644
> --- a/tests/ref/fate/m4v-cfr
> +++ b/tests/ref/fate/m4v-cfr
> @@ -44,4 +44,3 @@
>  0,         38,         38,        1,   115200, 0xf30825d5
>  0,         39,         39,        1,   115200, 0xe3c944a1
>  0,         40,         40,        1,   115200, 0x8fec4420
> -0,         41,         41,        1,   115200, 0x9381fdab
> --
> 2.14.1.581.gf28d330327-goog
>
Patch LGTM, thanks.
Thierry Foucu Sept. 12, 2017, 9:36 p.m. UTC | #2
On Tue, Sep 12, 2017 at 1:35 AM, Thomas Mundt <tmundt75@gmail.com> wrote:

> Hi Thierry,
>
> 2017-09-12 3:25 GMT+02:00 Thierry Foucu <tfoucu@gmail.com>:
>
>> Fix ticket #2674
>> Tested with examples from ticket 2674.
>> ---
>>
>> Update the Patch with the correct number of duplicate showing.
>> For exmaple, in case we up-sample one second video at 24fps by 2, we
>> should be getting 24 duplicate frames.
>>
>> ffmpeg -loglevel verbose -i 24fps.avi -vf fps=48 -f null -
>> ffmpeg version N-87234-g9a32769f5e Copyright (c) 2000-2017 the FFmpeg
>> developers
>>   built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
>>   configuration:
>>   libavutil      55. 74.100 / 55. 74.100
>>   libavcodec     57.105.100 / 57.105.100
>>   libavformat    57. 81.100 / 57. 81.100
>>   libavdevice    57.  8.100 / 57.  8.100
>>   libavfilter     6.103.100 /  6.103.100
>>   libswscale      4.  7.103 /  4.  7.103
>>   libswresample   2.  8.100 /  2.  8.100
>> Input #0, avi, from '24fps.avi':
>>   Metadata:
>>     encoder         : Lavf57.81.100
>>   Duration: 00:00:01.00, start: 0.000000, bitrate: 368 kb/s
>>     Stream #0:0: Video: mpeg4 (Simple Profile), 1 reference frame (FMP4 /
>> 0x34504D46), yuv420p(left), 320x240 [SAR 1:1 DAR 4:3], 24 fps, 24 tbr, 24
>> tbn, 24 tbc
>> Stream mapping:
>>   Stream #0:0 -> #0:0 (mpeg4 (native) -> wrapped_avframe (native))
>> Press [q] to stop, [?] for help
>> [Parsed_fps_0 @ 0x25ea6a0] fps=48/1
>> [graph 0 input from stream 0:0 @ 0x275cc00] w:320 h:240 pixfmt:yuv420p
>> tb:1/24 fr:24/1 sar:1/1 sws_param:flags=2
>> Output #0, null, to 'pipe:':
>>   Metadata:
>>     encoder         : Lavf57.81.100
>>     Stream #0:0: Video: wrapped_avframe, 1 reference frame,
>> yuv420p(left), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 48 fps, 48 tbn,
>> 48 tbc
>>     Metadata:
>>       encoder         : Lavc57.105.100 wrapped_avframe
>> No more output streams to write to, finishing.
>> frame=   48 fps=0.0 q=-0.0 Lsize=N/A time=00:00:01.00 bitrate=N/A
>> speed=99.3x
>> video:25kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
>> muxing overhead: unknown
>> Input file #0 (24fps.avi):
>>   Input stream #0:0 (video): 24 packets read (39693 bytes); 24 frames
>> decoded;
>>   Total: 24 packets (39693 bytes) demuxed
>> Output file #0 (pipe:):
>>   Output stream #0:0 (video): 48 frames encoded; 48 packets muxed (25344
>> bytes);
>>   Total: 48 packets (25344 bytes) muxed
>> [Parsed_fps_0 @ 0x25ea6a0] 24 frames in, 48 frames out; 0 frames dropped,
>> 24 frames duplicated.
>>
>>  libavfilter/vf_fps.c        | 44 ++++++++++++++++++++++++++++++
>> +++++++++-----
>>  tests/ref/fate/filter-fps   |  6 ++++++
>>  tests/ref/fate/filter-fps-r |  4 ++++
>>  tests/ref/fate/m4v-cfr      |  1 -
>>  4 files changed, 49 insertions(+), 6 deletions(-)
>>
>> diff --git a/libavfilter/vf_fps.c b/libavfilter/vf_fps.c
>> index 20ccd797d1..09fc66a73c 100644
>> --- a/libavfilter/vf_fps.c
>> +++ b/libavfilter/vf_fps.c
>> @@ -34,6 +34,8 @@
>>  #include "libavutil/opt.h"
>>  #include "libavutil/parseutils.h"
>>
>> +#define FF_INTERNAL_FIELDS 1
>> +#include "framequeue.h"
>>  #include "avfilter.h"
>>  #include "internal.h"
>>  #include "video.h"
>> @@ -137,13 +139,45 @@ static int request_frame(AVFilterLink *outlink)
>>              AVFrame *buf;
>>
>>              av_fifo_generic_read(s->fifo, &buf, sizeof(buf), NULL);
>> -            buf->pts = av_rescale_q(s->first_pts,
>> ctx->inputs[0]->time_base,
>> -                                    outlink->time_base) + s->frames_out;
>> +            if (av_fifo_size(s->fifo)) {
>> +                buf->pts = av_rescale_q(s->first_pts,
>> ctx->inputs[0]->time_base,
>> +                                        outlink->time_base) +
>> s->frames_out;
>>
>> -            if ((ret = ff_filter_frame(outlink, buf)) < 0)
>> -                return ret;
>> +                if ((ret = ff_filter_frame(outlink, buf)) < 0)
>> +                    return ret;
>>
>> -            s->frames_out++;
>> +                s->frames_out++;
>> +            } else {
>> +                /* This is the last frame, we may have to duplicate it
>> to match
>> +                 * the last frame duration */
>> +                int j;
>> +                int delta = av_rescale_q_rnd(ctx->inputs[0]->current_pts
>> - s->first_pts,
>> +                                             ctx->inputs[0]->time_base,
>> +                                             outlink->time_base,
>> s->rounding) - s->frames_out ;
>> +                /* if the delta is equal to 1, it means we just need to
>> output
>> +                 * the last frame. Greater than 1 means we will need
>> duplicate
>> +                 * delta-1 frames */
>> +                if (delta > 0 ) {
>> +                    for (j = 0; j < delta; j++) {
>> +                        AVFrame *dup = av_frame_clone(buf);
>> +
>> +                        av_log(ctx, AV_LOG_DEBUG, "Duplicating
>> frame.\n");
>> +                        dup->pts = av_rescale_q(s->first_pts,
>> ctx->inputs[0]->time_base,
>> +                                                outlink->time_base) +
>> s->frames_out;
>> +
>> +                        if ((ret = ff_filter_frame(outlink, dup)) < 0)
>> +                            return ret;
>> +
>> +                        s->frames_out++;
>> +                        if (j > 0) s->dup++;
>> +                    }
>> +                } else {
>> +                    /* for delta less or equal to 0, we should drop the
>> frame,
>> +                     * otherwise, we will have one or more extra frames
>> */
>> +                    av_frame_free(&buf);
>> +                    s->drop++;
>> +                }
>> +            }
>>          }
>>          return 0;
>>      }
>> diff --git a/tests/ref/fate/filter-fps b/tests/ref/fate/filter-fps
>> index 55712cfb1c..242fb04e85 100644
>> --- a/tests/ref/fate/filter-fps
>> +++ b/tests/ref/fate/filter-fps
>> @@ -85,3 +85,9 @@
>>  0,         79,         79,        1,    30576, 0xa2fcd06f
>>  0,         80,         80,        1,    30576, 0xa2fcd06f
>>  0,         81,         81,        1,    30576, 0xd4150aad
>> +0,         82,         82,        1,    30576, 0xd4150aad
>> +0,         83,         83,        1,    30576, 0xd4150aad
>> +0,         84,         84,        1,    30576, 0xd4150aad
>> +0,         85,         85,        1,    30576, 0xd4150aad
>> +0,         86,         86,        1,    30576, 0xd4150aad
>> +0,         87,         87,        1,    30576, 0xd4150aad
>> diff --git a/tests/ref/fate/filter-fps-r b/tests/ref/fate/filter-fps-r
>> index 826b1ed6c6..c1bc7d1547 100644
>> --- a/tests/ref/fate/filter-fps-r
>> +++ b/tests/ref/fate/filter-fps-r
>> @@ -72,3 +72,7 @@
>>  0,         79,         79,        1,    30576, 0xa2fcd06f
>>  0,         80,         80,        1,    30576, 0xa2fcd06f
>>  0,         82,         82,        1,    30576, 0xd4150aad
>> +0,         83,         83,        1,    30576, 0xd4150aad
>> +0,         84,         84,        1,    30576, 0xd4150aad
>> +0,         85,         85,        1,    30576, 0xd4150aad
>> +0,         86,         86,        1,    30576, 0xd4150aad
>> diff --git a/tests/ref/fate/m4v-cfr b/tests/ref/fate/m4v-cfr
>> index 4eee84d01b..e2d02032fe 100644
>> --- a/tests/ref/fate/m4v-cfr
>> +++ b/tests/ref/fate/m4v-cfr
>> @@ -44,4 +44,3 @@
>>  0,         38,         38,        1,   115200, 0xf30825d5
>>  0,         39,         39,        1,   115200, 0xe3c944a1
>>  0,         40,         40,        1,   115200, 0x8fec4420
>> -0,         41,         41,        1,   115200, 0x9381fdab
>> --
>> 2.14.1.581.gf28d330327-goog
>>
> Patch LGTM, thanks.
>


Thanks Thomas.
Can someone help me to push it?
Or do I need to do more work on it?

Cheers
diff mbox

Patch

diff --git a/libavfilter/vf_fps.c b/libavfilter/vf_fps.c
index 20ccd797d1..09fc66a73c 100644
--- a/libavfilter/vf_fps.c
+++ b/libavfilter/vf_fps.c
@@ -34,6 +34,8 @@ 
 #include "libavutil/opt.h"
 #include "libavutil/parseutils.h"
 
+#define FF_INTERNAL_FIELDS 1
+#include "framequeue.h"
 #include "avfilter.h"
 #include "internal.h"
 #include "video.h"
@@ -137,13 +139,45 @@  static int request_frame(AVFilterLink *outlink)
             AVFrame *buf;
 
             av_fifo_generic_read(s->fifo, &buf, sizeof(buf), NULL);
-            buf->pts = av_rescale_q(s->first_pts, ctx->inputs[0]->time_base,
-                                    outlink->time_base) + s->frames_out;
+            if (av_fifo_size(s->fifo)) {
+                buf->pts = av_rescale_q(s->first_pts, ctx->inputs[0]->time_base,
+                                        outlink->time_base) + s->frames_out;
 
-            if ((ret = ff_filter_frame(outlink, buf)) < 0)
-                return ret;
+                if ((ret = ff_filter_frame(outlink, buf)) < 0)
+                    return ret;
 
-            s->frames_out++;
+                s->frames_out++;
+            } else {
+                /* This is the last frame, we may have to duplicate it to match
+                 * the last frame duration */
+                int j;
+                int delta = av_rescale_q_rnd(ctx->inputs[0]->current_pts - s->first_pts,
+                                             ctx->inputs[0]->time_base,
+                                             outlink->time_base, s->rounding) - s->frames_out ;
+                /* if the delta is equal to 1, it means we just need to output
+                 * the last frame. Greater than 1 means we will need duplicate
+                 * delta-1 frames */
+                if (delta > 0 ) {
+                    for (j = 0; j < delta; j++) {
+                        AVFrame *dup = av_frame_clone(buf);
+
+                        av_log(ctx, AV_LOG_DEBUG, "Duplicating frame.\n");
+                        dup->pts = av_rescale_q(s->first_pts, ctx->inputs[0]->time_base,
+                                                outlink->time_base) + s->frames_out;
+
+                        if ((ret = ff_filter_frame(outlink, dup)) < 0)
+                            return ret;
+
+                        s->frames_out++;
+                        if (j > 0) s->dup++;
+                    }
+                } else {
+                    /* for delta less or equal to 0, we should drop the frame,
+                     * otherwise, we will have one or more extra frames */
+                    av_frame_free(&buf);
+                    s->drop++;
+                }
+            }
         }
         return 0;
     }
diff --git a/tests/ref/fate/filter-fps b/tests/ref/fate/filter-fps
index 55712cfb1c..242fb04e85 100644
--- a/tests/ref/fate/filter-fps
+++ b/tests/ref/fate/filter-fps
@@ -85,3 +85,9 @@ 
 0,         79,         79,        1,    30576, 0xa2fcd06f
 0,         80,         80,        1,    30576, 0xa2fcd06f
 0,         81,         81,        1,    30576, 0xd4150aad
+0,         82,         82,        1,    30576, 0xd4150aad
+0,         83,         83,        1,    30576, 0xd4150aad
+0,         84,         84,        1,    30576, 0xd4150aad
+0,         85,         85,        1,    30576, 0xd4150aad
+0,         86,         86,        1,    30576, 0xd4150aad
+0,         87,         87,        1,    30576, 0xd4150aad
diff --git a/tests/ref/fate/filter-fps-r b/tests/ref/fate/filter-fps-r
index 826b1ed6c6..c1bc7d1547 100644
--- a/tests/ref/fate/filter-fps-r
+++ b/tests/ref/fate/filter-fps-r
@@ -72,3 +72,7 @@ 
 0,         79,         79,        1,    30576, 0xa2fcd06f
 0,         80,         80,        1,    30576, 0xa2fcd06f
 0,         82,         82,        1,    30576, 0xd4150aad
+0,         83,         83,        1,    30576, 0xd4150aad
+0,         84,         84,        1,    30576, 0xd4150aad
+0,         85,         85,        1,    30576, 0xd4150aad
+0,         86,         86,        1,    30576, 0xd4150aad
diff --git a/tests/ref/fate/m4v-cfr b/tests/ref/fate/m4v-cfr
index 4eee84d01b..e2d02032fe 100644
--- a/tests/ref/fate/m4v-cfr
+++ b/tests/ref/fate/m4v-cfr
@@ -44,4 +44,3 @@ 
 0,         38,         38,        1,   115200, 0xf30825d5
 0,         39,         39,        1,   115200, 0xe3c944a1
 0,         40,         40,        1,   115200, 0x8fec4420
-0,         41,         41,        1,   115200, 0x9381fdab