HI, On Mon, Jan 13, 2020 at 4:44 PM James Zern <jzern-at-google....@ffmpeg.org> wrote:
> Hi, > > On Fri, Jan 10, 2020 at 9:59 AM Wonkap Jang > <wonkap-at-google....@ffmpeg.org> wrote: > > > > This commit reuses the configuration options for VP8 that enables > > temporal scalability for VP9. It also adds a way to enable three > > preset temporal structures (refer to the documentation for more > > detail) that can be used in offline encoding. > > --- > > doc/encoders.texi | 18 ++- > > libavcodec/libvpxenc.c | 251 +++++++++++++++++++++++++++++++++++++---- > > 2 files changed, 243 insertions(+), 26 deletions(-) > > > > [...] > > #endif > > @@ -223,8 +231,16 @@ static av_cold void dump_enc_cfg(AVCodecContext > *avctx, > > " %*s%u\n", width, "ts_number_layers:", > cfg->ts_number_layers); > > av_log(avctx, level, > > "\n %*s", width, "ts_target_bitrate:"); > > This should move to the vp8 branch and a new heading added for vp9's > layer_target_bitrate. > > > [...] > > -static int vp8_ts_param_parse(struct vpx_codec_enc_cfg *enccfg, char > *key, char *value) > > +static void set_temporal_layer_pattern(int layering_mode, > > + vpx_codec_enc_cfg_t *cfg, > > + int *layer_flags, > > + int *flag_periodicity) > > +{ > > + switch (layering_mode) { > > + case 2: { > > + /** > > + * 2-layers, 2-frame period. > > + */ > > + int ids[2] = { 0, 1 }; > > these can be static const. > [WJ] OK. > > > + cfg->ts_periodicity = 2; > > + *flag_periodicity = 2; > > + cfg->ts_number_layers = 2; > > + cfg->ts_rate_decimator[0] = 2; > > + cfg->ts_rate_decimator[1] = 1; > > + memcpy(cfg->ts_layer_id, ids, sizeof(ids)); > > + > > + layer_flags[0] = > > + VP8_EFLAG_NO_REF_GF | VP8_EFLAG_NO_REF_ARF | > > + VP8_EFLAG_NO_UPD_GF | VP8_EFLAG_NO_UPD_ARF; > > + > > this line can be removed. > [WJ] OK. > > > + layer_flags[1] = > > + VP8_EFLAG_NO_UPD_ARF | VP8_EFLAG_NO_UPD_GF | > > + VP8_EFLAG_NO_UPD_LAST | > > + VP8_EFLAG_NO_REF_ARF | VP8_EFLAG_NO_REF_GF; > > + break; > > + } > > + case 3: { > > + /** > > + * 3-layers structure with one reference frame. > > + * This works same as temporal_layering_mode 3. > > + * > > + * 3-layers, 4-frame period. > > + */ > > + int ids[4] = { 0, 2, 1, 2 }; > > + cfg->ts_periodicity = 4; > > + *flag_periodicity = 4; > > + cfg->ts_number_layers = 3; > > + cfg->ts_rate_decimator[0] = 4; > > + cfg->ts_rate_decimator[1] = 2; > > + cfg->ts_rate_decimator[2] = 1; > > + memcpy(cfg->ts_layer_id, ids, sizeof(ids)); > > + > > + /** > > + * 0=L, 1=GF, 2=ARF, > > what about [3]? > [WJ] decimator is for indicating the framerate decimation per temporal layer. There are three temporal layers in this case, no need for [3]. > > > + * Intra-layer prediction disabled. > > + */ > > + layer_flags[0] = > > + VP8_EFLAG_NO_REF_GF | VP8_EFLAG_NO_REF_ARF | > > + VP8_EFLAG_NO_UPD_GF | VP8_EFLAG_NO_UPD_ARF; > > + layer_flags[2] = > > can you reorder this to be in the natural 0...3 order? > [WJ] this is in the order of temporal layer id, just like it is written in vpx_temporal_svc_encoder in libvpx/examples, but I'll make the change as suggested. > > > [...] > > + /** > > + * 0=L, 1=GF, 2=ARF, Intra-layer prediction disabled. > > + */ > > + layer_flags[0] = > > + VP8_EFLAG_NO_REF_GF | VP8_EFLAG_NO_REF_ARF | > > + VP8_EFLAG_NO_UPD_GF | VP8_EFLAG_NO_UPD_ARF; > > + layer_flags[2] = > > same comment here about order. > > > [...] > > + > > +#if (VPX_ENCODER_ABI_VERSION >= 12) && CONFIG_LIBVPX_VP9_ENCODER > > + enccfg->temporal_layering_mode = 1; // only bypass mode is being > supported for now. > > ...mode is supported... > [WJ] gotit. > > > + enccfg->ss_number_layers = 1; // making sure the spatial > scalability is off. Will support this in future. > > this can be TODO: add spatial scalability support. [WJ] gotit. > > > +#endif > > + if (ts_layering_mode) { > > + // make sure the ts_layering_mode comes at the end of the > ts_parameter string to ensure that > > + // correct configuration is done. > > + ctx->ts_layer_flags = av_malloc(sizeof(int) * > VPX_TS_MAX_PERIODICITY); > > prefer sizeof(var). > [WJ] OK. > > > [...] > > > > - if(!avctx->bit_rate) > > - if(avctx->rc_max_rate || avctx->rc_buffer_size || > avctx->rc_initial_buffer_occupancy) { > > + if (!avctx->bit_rate) > > + if (avctx->rc_max_rate || avctx->rc_buffer_size || > avctx->rc_initial_buffer_occupancy) { > > this is unrelated to the change, please remove it. > [WJ] ok. > > > [...] > > +#if VPX_ENCODER_ABI_VERSION >= 12 > > + codecctl_int(avctx, VP9E_SET_SVC, 1); > > + codecctl_intp(avctx, VP9E_SET_SVC_PARAMETERS, (int *) > &svc_params); > > drop the space after the cast. > [WJ] Ok. > > > [...] > > +#if CONFIG_LIBVPX_VP9_ENCODER && VPX_ENCODER_ABI_VERSION >= 12 > > + else if (avctx->codec_id == AV_CODEC_ID_VP9) { > > + codecctl_intp(avctx, VP9E_SET_SVC_LAYER_ID, (int *) > &layer_id); > > drop the space after the cast. > [WJ] ok. > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". My comments are in-line. Wonkap _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".