Quoting Hendrik Leppkes (2015-03-30 12:08:34) > On Sun, Mar 29, 2015 at 2:18 PM, Anton Khirnov <[email protected]> wrote: > > --- > > libavcodec/hevc.c | 83 > > ++++++++++++++++++++++++++++++------------------------- > > 1 file changed, 46 insertions(+), 37 deletions(-) > > > > diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c > > index c275e43..0256fe6 100644 > > --- a/libavcodec/hevc.c > > +++ b/libavcodec/hevc.c > > @@ -383,24 +383,63 @@ static int decode_lt_rps(HEVCContext *s, LongTermRPS > > *rps, GetBitContext *gb) > > return 0; > > } > > > > +static void export_stream_params(AVCodecContext *avctx, > > + const HEVCContext *s, const HEVCSPS *sps) > > +{ > > + const HEVCVPS *vps = (const HEVCVPS*)s->vps_list[sps->vps_id]->data; > > + unsigned int num = 0, den = 0; > > + > > + avctx->pix_fmt = sps->pix_fmt; > > + avctx->coded_width = sps->width; > > + avctx->coded_height = sps->height; > > + avctx->width = sps->output_width; > > + avctx->height = sps->output_height; > > + avctx->has_b_frames = sps->temporal_layer[sps->max_sub_layers - > > 1].num_reorder_pics; > > + > > + ff_set_sar(avctx, sps->vui.sar); > > + > > + if (sps->vui.video_signal_type_present_flag) > > + avctx->color_range = sps->vui.video_full_range_flag ? > > AVCOL_RANGE_JPEG > > + : > > AVCOL_RANGE_MPEG; > > + else > > + avctx->color_range = AVCOL_RANGE_MPEG; > > + > > + if (sps->vui.colour_description_present_flag) { > > + avctx->color_primaries = sps->vui.colour_primaries; > > + avctx->color_trc = sps->vui.transfer_characteristic; > > + avctx->colorspace = sps->vui.matrix_coeffs; > > + } else { > > + avctx->color_primaries = AVCOL_PRI_UNSPECIFIED; > > + avctx->color_trc = AVCOL_TRC_UNSPECIFIED; > > + avctx->colorspace = AVCOL_SPC_UNSPECIFIED; > > + } > > + > > + if (vps->vps_timing_info_present_flag) { > > + num = vps->vps_num_units_in_tick; > > + den = vps->vps_time_scale; > > + } else if (sps->vui.vui_timing_info_present_flag) { > > + num = sps->vui.vui_num_units_in_tick; > > + den = sps->vui.vui_time_scale; > > + } > > + > > + if (num != 0 && den != 0) > > + av_reduce(&avctx->framerate.den, &avctx->framerate.num, > > + num, den, 1 << 30); > > +} > > + > > static int set_sps(HEVCContext *s, const HEVCSPS *sps) > > { > > #define HWACCEL_MAX (CONFIG_HEVC_DXVA2_HWACCEL) > > enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmt = pix_fmts; > > int ret; > > - unsigned int num = 0, den = 0; > > + > > + export_stream_params(s->avctx, s, sps); > > > > pic_arrays_free(s); > > ret = pic_arrays_init(s, sps); > > if (ret < 0) > > goto fail; > > > > - s->avctx->coded_width = sps->width; > > - s->avctx->coded_height = sps->height; > > - s->avctx->width = sps->output_width; > > - s->avctx->height = sps->output_height; > > - s->avctx->has_b_frames = > > sps->temporal_layer[sps->max_sub_layers - 1].num_reorder_pics; > > - > > if (sps->pix_fmt == AV_PIX_FMT_YUV420P || sps->pix_fmt == > > AV_PIX_FMT_YUVJ420P) { > > #if CONFIG_HEVC_DXVA2_HWACCEL > > *fmt++ = AV_PIX_FMT_DXVA2_VLD; > > @@ -415,24 +454,6 @@ static int set_sps(HEVCContext *s, const HEVCSPS *sps) > > goto fail; > > s->avctx->pix_fmt = ret; > > > > - ff_set_sar(s->avctx, sps->vui.sar); > > - > > - if (sps->vui.video_signal_type_present_flag) > > - s->avctx->color_range = sps->vui.video_full_range_flag ? > > AVCOL_RANGE_JPEG > > - : > > AVCOL_RANGE_MPEG; > > - else > > - s->avctx->color_range = AVCOL_RANGE_MPEG; > > - > > - if (sps->vui.colour_description_present_flag) { > > - s->avctx->color_primaries = sps->vui.colour_primaries; > > - s->avctx->color_trc = sps->vui.transfer_characteristic; > > - s->avctx->colorspace = sps->vui.matrix_coeffs; > > - } else { > > - s->avctx->color_primaries = AVCOL_PRI_UNSPECIFIED; > > - s->avctx->color_trc = AVCOL_TRC_UNSPECIFIED; > > - s->avctx->colorspace = AVCOL_SPC_UNSPECIFIED; > > - } > > - > > ff_hevc_pred_init(&s->hpc, sps->bit_depth); > > ff_hevc_dsp_init (&s->hevcdsp, sps->bit_depth); > > ff_videodsp_init (&s->vdsp, sps->bit_depth); > > @@ -448,18 +469,6 @@ static int set_sps(HEVCContext *s, const HEVCSPS *sps) > > s->sps = sps; > > s->vps = (HEVCVPS*) s->vps_list[s->sps->vps_id]->data; > > > > - if (s->vps->vps_timing_info_present_flag) { > > - num = s->vps->vps_num_units_in_tick; > > - den = s->vps->vps_time_scale; > > - } else if (sps->vui.vui_timing_info_present_flag) { > > - num = sps->vui.vui_num_units_in_tick; > > - den = sps->vui.vui_time_scale; > > - } > > - > > - if (num != 0 && den != 0) > > - av_reduce(&s->avctx->framerate.den, &s->avctx->framerate.num, > > - num, den, 1 << 30); > > - > > return 0; > > > > fail: > > -- > > 2.0.0 > > > How about moving the set for profile/level into this function as well? > For some reason its being set in an entirely different place right > now, despite also coming from the SPS. > > This would also make it available after codec init then, considering > the follow up patches. >
Eh right, I wanted to do that but seems I forgot. -- Anton Khirnov _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
