diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2022-05-06 14:49:16 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2022-05-10 07:27:26 +0200 |
commit | 5130bbb7efe1125c515eddedc0985fa9b6e5d731 (patch) | |
tree | f840a8201fba8cd9c5504ae754a71b94d99b6ba9 /libavformat/mxfenc.c | |
parent | 107bdd97a9f0acec2e5ea9c63af6ea999444a78a (diff) |
avformat/mux: Move ff_choose_chroma_location to mxfenc, its only user
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavformat/mxfenc.c')
-rw-r--r-- | libavformat/mxfenc.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index 2061b2eede..7041659143 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -2496,6 +2496,35 @@ static int mxf_init_timecode(AVFormatContext *s, AVStream *st, AVRational tbc) return av_timecode_init(&mxf->tc, av_inv_q(tbc), 0, 0, s); } +static enum AVChromaLocation choose_chroma_location(AVFormatContext *s, AVStream *st) +{ + AVCodecParameters *par = st->codecpar; + const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(par->format); + + if (par->chroma_location != AVCHROMA_LOC_UNSPECIFIED) + return par->chroma_location; + + if (pix_desc) { + if (pix_desc->log2_chroma_h == 0) { + return AVCHROMA_LOC_TOPLEFT; + } else if (pix_desc->log2_chroma_w == 1 && pix_desc->log2_chroma_h == 1) { + if (par->field_order == AV_FIELD_UNKNOWN || par->field_order == AV_FIELD_PROGRESSIVE) { + switch (par->codec_id) { + case AV_CODEC_ID_MJPEG: + case AV_CODEC_ID_MPEG1VIDEO: return AVCHROMA_LOC_CENTER; + } + } + if (par->field_order == AV_FIELD_UNKNOWN || par->field_order != AV_FIELD_PROGRESSIVE) { + switch (par->codec_id) { + case AV_CODEC_ID_MPEG2VIDEO: return AVCHROMA_LOC_LEFT; + } + } + } + } + + return AVCHROMA_LOC_UNSPECIFIED; +} + static int mxf_init(AVFormatContext *s) { MXFContext *mxf = s->priv_data; @@ -2544,7 +2573,7 @@ static int mxf_init(AVFormatContext *s) sc->h_chroma_sub_sample = 1 << pix_desc->log2_chroma_w; sc->v_chroma_sub_sample = 1 << pix_desc->log2_chroma_h; } - switch (ff_choose_chroma_location(s, st)) { + switch (choose_chroma_location(s, st)) { case AVCHROMA_LOC_TOPLEFT: sc->color_siting = 0; break; case AVCHROMA_LOC_LEFT: sc->color_siting = 6; break; case AVCHROMA_LOC_TOP: sc->color_siting = 1; break; |