summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Bœsch <u@pkh.me>2017-03-12 13:08:04 +0100
committerClément Bœsch <u@pkh.me>2017-03-12 13:08:04 +0100
commit993a9a3d72af4f4a07470570bc472a0d385ca78f (patch)
tree761e895d1d4cdb326bfc0b20a089a52847b04f94
parent807d5dcde9d83dca48f8dfc5c98bbc2be6fdc61c (diff)
parentb0f36a0043d76436cc7ab8ff92ab99c94595d3c0 (diff)
Merge commit 'b0f36a0043d76436cc7ab8ff92ab99c94595d3c0'
* commit 'b0f36a0043d76436cc7ab8ff92ab99c94595d3c0': avconv: stop using setpts for input framerate forced with -r Merged-by: Clément Bœsch <u@pkh.me>
-rwxr-xr-xconfigure2
-rw-r--r--ffmpeg.c3
-rw-r--r--ffmpeg.h5
-rw-r--r--ffmpeg_filter.c17
4 files changed, 9 insertions, 18 deletions
diff --git a/configure b/configure
index 6350942ef9..707b98011a 100755
--- a/configure
+++ b/configure
@@ -3192,7 +3192,7 @@ swscale_deps="avutil"
ffmpeg_deps="avcodec avfilter avformat swresample"
ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
null_filter
- setpts_filter trim_filter"
+ trim_filter"
ffplay_deps="avcodec avformat swscale swresample sdl2"
ffplay_libs='$sdl2_libs'
ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
diff --git a/ffmpeg.c b/ffmpeg.c
index 79c91ffc1e..f9fadbd9f2 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -2437,6 +2437,9 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output, int eo
best_effort_timestamp= av_frame_get_best_effort_timestamp(decoded_frame);
+ if (ist->framerate.num)
+ best_effort_timestamp = ist->cfr_next_pts++;
+
if (eof && best_effort_timestamp == AV_NOPTS_VALUE && ist->nb_dts_buffer > 0) {
best_effort_timestamp = ist->dts_buffer[0];
diff --git a/ffmpeg.h b/ffmpeg.h
index 06a1251124..c3ed6ced78 100644
--- a/ffmpeg.h
+++ b/ffmpeg.h
@@ -316,6 +316,11 @@ typedef struct InputStream {
int64_t min_pts; /* pts with the smallest value in a current stream */
int64_t max_pts; /* pts with the higher value in a current stream */
+
+ // when forcing constant input framerate through -r,
+ // this contains the pts that will be given to the next decoded frame
+ int64_t cfr_next_pts;
+
int64_t nb_samples; /* number of samples in the last decoded audio frame before looping */
double ts_scale;
diff --git a/ffmpeg_filter.c b/ffmpeg_filter.c
index 7f249c2960..6cf4204e2f 100644
--- a/ffmpeg_filter.c
+++ b/ffmpeg_filter.c
@@ -802,23 +802,6 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
return ret;
}
- if (ist->framerate.num) {
- AVFilterContext *setpts;
-
- snprintf(name, sizeof(name), "forcecfr_in_%d_%d",
- ist->file_index, ist->st->index);
- if ((ret = avfilter_graph_create_filter(&setpts,
- avfilter_get_by_name("setpts"),
- name, "N", NULL,
- fg->graph)) < 0)
- return ret;
-
- if ((ret = avfilter_link(last_filter, 0, setpts, 0)) < 0)
- return ret;
-
- last_filter = setpts;
- }
-
if (do_deinterlace) {
AVFilterContext *yadif;