summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Ekström <jeebjp@gmail.com>2021-07-19 23:25:28 +0300
committerJan Ekström <jeebjp@gmail.com>2021-07-25 22:40:49 +0300
commit4c694093be68d401c60819e5171817c62afef8b2 (patch)
tree2967ad74a3bca7d6150b0c8c7214e7091d1af7b3
parenta1f7d25ceff2fd52c56148fe1b4fa21e6ef2acd6 (diff)
ffmpeg: fix order between field order autodetection and override
Having the override before autodetection meant that the overridden value got overwritten by the autodetected result each time, effectively disabling the ability to utilize the `-top` option for override purposes. Somehow I missed this in fbb44bc51a647862eb05ae3f9d7d49a0be9bed57 , even though the lines were within the context. Probably the code originally being after this logic had something to do with it, but previously it only touched the avformat context's codecpar, which did not affect the encoder codec context whatsoever. Fixes #9320 Fixes #9339
-rw-r--r--fftools/ffmpeg.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 40e8010096..b0ce7c7c32 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -3483,12 +3483,7 @@ static int init_output_stream_encode(OutputStream *ost, AVFrame *frame)
enc_ctx->bits_per_raw_sample = frame_bits_per_raw_sample;
}
- if (ost->top_field_first == 0) {
- enc_ctx->field_order = AV_FIELD_BB;
- } else if (ost->top_field_first == 1) {
- enc_ctx->field_order = AV_FIELD_TT;
- }
-
+ // Field order: autodetection
if (frame) {
if (enc_ctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) &&
ost->top_field_first >= 0)
@@ -3503,6 +3498,13 @@ static int init_output_stream_encode(OutputStream *ost, AVFrame *frame)
enc_ctx->field_order = AV_FIELD_PROGRESSIVE;
}
+ // Field order: override
+ if (ost->top_field_first == 0) {
+ enc_ctx->field_order = AV_FIELD_BB;
+ } else if (ost->top_field_first == 1) {
+ enc_ctx->field_order = AV_FIELD_TT;
+ }
+
if (ost->forced_keyframes) {
if (!strncmp(ost->forced_keyframes, "expr:", 5)) {
ret = av_expr_parse(&ost->forced_keyframes_pexpr, ost->forced_keyframes+5,