Browse Source

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.
tags/n4.3
Anton Khirnov 7 years ago
parent
commit
6eae7e5644
4 changed files with 6 additions and 4 deletions
  1. +3
    -2
      libavcodec/h264_ps.c
  2. +2
    -0
      libavcodec/h264_ps.h
  3. +1
    -0
      libavcodec/h264_slice.c
  4. +0
    -2
      libavcodec/h264dec.c

+ 3
- 2
libavcodec/h264_ps.c View File

@@ -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));


+ 2
- 0
libavcodec/h264_ps.h View File

@@ -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;


+ 1
- 0
libavcodec/h264_slice.c View File

@@ -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;


+ 0
- 2
libavcodec/h264dec.c View File

@@ -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) {


Loading…
Cancel
Save