diff mbox

[FFmpeg-devel] ffmpeg: switch to avformat_seek_file for stream_loop

Message ID 2ca297b9-fdba-3c01-7567-61486f5f4924@gyani.pro
State Accepted
Commit fa697aa92f5dfebda11d53db971ec4ac6c517008
Headers show

Commit Message

Gyan Doshi Aug. 31, 2019, 2:58 p.m. UTC
A user observed that stream_loop didn't work with very short FLV files. 
seek_to_start in ffmpeg.c calls av_seek_frame with no flags; FLV seek 
only works with RTMP protocol so lavf falls back on seek_frame_generic 
which searches forward, skipping a GOP. With files with two index 
entries in stream, the file doesn't loop at all.

I switched to avformat_seek_file which will set the BACKWARDS flag when 
seeking to start of file. stream_loop works and no frames are dropped.

FATE passes.

Gyan
From 4af64f612c65378f0a220284ca99ad033ece8cd3 Mon Sep 17 00:00:00 2001
From: Gyan Doshi <ffmpeg@gyani.pro>
Date: Sat, 31 Aug 2019 19:45:58 +0530
Subject: [PATCH] ffmpeg: switch to avformat_seek_file for stream_loop

Fixes stream_loop with very short files where seeking is generic index
search
---
 fftools/ffmpeg.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Michael Niedermayer Sept. 2, 2019, 3:54 p.m. UTC | #1
On Sat, Aug 31, 2019 at 08:28:51PM +0530, Gyan wrote:
> A user observed that stream_loop didn't work with very short FLV files.
> seek_to_start in ffmpeg.c calls av_seek_frame with no flags; FLV seek only
> works with RTMP protocol so lavf falls back on seek_frame_generic which
> searches forward, skipping a GOP. With files with two index entries in
> stream, the file doesn't loop at all.
> 
> I switched to avformat_seek_file which will set the BACKWARDS flag when
> seeking to start of file. stream_loop works and no frames are dropped.
> 
> FATE passes.
> 
> Gyan

>  ffmpeg.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> c79dc6d27a9c8c1bd0cffa2d251b2aa7caf23bf3  0001-ffmpeg-switch-to-avformat_seek_file-for-stream_loop.patch
> From 4af64f612c65378f0a220284ca99ad033ece8cd3 Mon Sep 17 00:00:00 2001
> From: Gyan Doshi <ffmpeg@gyani.pro>
> Date: Sat, 31 Aug 2019 19:45:58 +0530
> Subject: [PATCH] ffmpeg: switch to avformat_seek_file for stream_loop
> 
> Fixes stream_loop with very short files where seeking is generic index
> search
> ---
>  fftools/ffmpeg.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

probably ok

it also might make sense to add the testcase to fate as you mentioned "short"

thx

[...]
diff mbox

Patch

diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 01f04103cf..b6ecb89893 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -4195,7 +4195,7 @@  static int seek_to_start(InputFile *ifile, AVFormatContext *is)
     int i, ret, has_audio = 0;
     int64_t duration = 0;
 
-    ret = av_seek_frame(is, -1, is->start_time, 0);
+    ret = avformat_seek_file(is, -1, INT64_MIN, is->start_time, is->start_time, 0);
     if (ret < 0)
         return ret;