diff options
author | Anton Khirnov <anton@khirnov.net> | 2017-07-29 22:03:55 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2020-03-20 09:16:05 +0100 |
commit | 6eae7e564482c70c785ceb33c8ad476c49f24e53 (patch) | |
tree | d395a7978e1d73895f88f2dc1e54f873af0bc0c1 | |
parent | bdd31feec934bad07f5035250f9cb1ec5b571062 (diff) | |
download | ffmpeg-6eae7e564482c70c785ceb33c8ad476c49f24e53.tar.gz |
h264dec: do not export the chroma sample location immediately on parsing the SPS
This SPS is not necessarily the one that will be used. Export the chroma
location along with all the other SPS properties.
-rw-r--r-- | libavcodec/h264_ps.c | 5 | ||||
-rw-r--r-- | libavcodec/h264_ps.h | 2 | ||||
-rw-r--r-- | libavcodec/h264_slice.c | 1 | ||||
-rw-r--r-- | libavcodec/h264dec.c | 2 |
4 files changed, 6 insertions, 4 deletions
diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c index 708594954c..96edb3a327 100644 --- a/libavcodec/h264_ps.c +++ b/libavcodec/h264_ps.c @@ -181,9 +181,10 @@ static inline int decode_vui_parameters(GetBitContext *gb, AVCodecContext *avctx /* chroma_location_info_present_flag */ if (get_bits1(gb)) { /* chroma_sample_location_type_top_field */ - avctx->chroma_sample_location = get_ue_golomb(gb) + 1; + sps->chroma_location = get_ue_golomb(gb) + 1; get_ue_golomb(gb); /* chroma_sample_location_type_bottom_field */ - } + } else + sps->chroma_location = AVCHROMA_LOC_LEFT; if (show_bits1(gb) && get_bits_left(gb) < 10) { av_log(avctx, AV_LOG_WARNING, "Truncated VUI (%d)\n", get_bits_left(gb)); diff --git a/libavcodec/h264_ps.h b/libavcodec/h264_ps.h index 2cc1cd6254..d6798ca0ef 100644 --- a/libavcodec/h264_ps.h +++ b/libavcodec/h264_ps.h @@ -77,6 +77,8 @@ typedef struct SPS { enum AVColorPrimaries color_primaries; enum AVColorTransferCharacteristic color_trc; enum AVColorSpace colorspace; + enum AVChromaLocation chroma_location; + int timing_info_present_flag; uint32_t num_units_in_tick; uint32_t time_scale; diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index 34f659b299..af30f6267b 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -1086,6 +1086,7 @@ static int h264_init_ps(H264Context *h, const H264SliceContext *sl, int first_sl h->avctx->color_trc = h->sei.alternative_transfer.preferred_transfer_characteristics; } } + h->avctx->chroma_sample_location = sps->chroma_location; if (!h->context_initialized || must_reinit || needs_reinit) { int flush_changes = h->context_initialized; diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c index 8a2a8a7b41..fec1adfeed 100644 --- a/libavcodec/h264dec.c +++ b/libavcodec/h264dec.c @@ -325,8 +325,6 @@ static int h264_init_context(AVCodecContext *avctx, H264Context *h) ff_h264_sei_uninit(&h->sei); - avctx->chroma_sample_location = AVCHROMA_LOC_LEFT; - h->nb_slice_ctx = (avctx->active_thread_type & FF_THREAD_SLICE) ? avctx->thread_count : 1; h->slice_ctx = av_mallocz_array(h->nb_slice_ctx, sizeof(*h->slice_ctx)); if (!h->slice_ctx) { |