From 2a87491fb07221886c8c570e6b0b48f56855a2c7 Mon Sep 17 00:00:00 2001 From: Henrik Lundin Date: Tue, 14 Dec 2010 14:05:06 +0100 Subject: [PATCH] Inform caller of decoder about updated references Inform the caller of the decoder if a decoded frame updated last, golden, or altref frames, required for realtime communication proposed in document VP8 RTP payload format. Added a new vpx_codec_control called VP8D_GET_LAST_REF_UPDATES, to be called after vpx_codec_decode. The control will indicate which of the reference frames that were updated by setting the 3 LSBs in the input int (pointer). Change-Id: Iac9db60dac414356c7ffa0b0fede88cb91e11bd7 --- vp8/vp8_dx_iface.c | 21 +++++++++++++++++++++ vpx/vp8dx.h | 24 ++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/vp8/vp8_dx_iface.c b/vp8/vp8_dx_iface.c index 9dd492217..cf32d1f38 100644 --- a/vp8/vp8_dx_iface.c +++ b/vp8/vp8_dx_iface.c @@ -688,6 +688,26 @@ static vpx_codec_err_t vp8_set_dbg_options(vpx_codec_alg_priv_t *ctx, #endif } +static vpx_codec_err_t vp8_get_last_ref_updates(vpx_codec_alg_priv_t *ctx, + int ctrl_id, + va_list args) +{ + int *update_info = va_arg(args, int *); + VP8D_COMP *pbi = (VP8D_COMP *)ctx->pbi; + + if (update_info) + { + *update_info = pbi->common.refresh_alt_ref_frame * (int) VP8_ALTR_FRAME + + pbi->common.refresh_golden_frame * (int) VP8_GOLD_FRAME + + pbi->common.refresh_last_frame * (int) VP8_LAST_FRAME; + + return VPX_CODEC_OK; + } + else + return VPX_CODEC_INVALID_PARAM; +} + + vpx_codec_ctrl_fn_map_t vp8_ctf_maps[] = { {VP8_SET_REFERENCE, vp8_set_reference}, @@ -697,6 +717,7 @@ vpx_codec_ctrl_fn_map_t vp8_ctf_maps[] = {VP8_SET_DBG_COLOR_MB_MODES, vp8_set_dbg_options}, {VP8_SET_DBG_COLOR_B_MODES, vp8_set_dbg_options}, {VP8_SET_DBG_DISPLAY_MV, vp8_set_dbg_options}, + {VP8D_GET_LAST_REF_UPDATES, vp8_get_last_ref_updates}, { -1, NULL}, }; diff --git a/vpx/vp8dx.h b/vpx/vp8dx.h index fccd407f3..9feab7cc2 100644 --- a/vpx/vp8dx.h +++ b/vpx/vp8dx.h @@ -36,6 +36,30 @@ extern vpx_codec_iface_t* vpx_codec_vp8_dx(void); #include "vp8.h" +/*!\brief VP8 decoder control functions + * + * The set of macros define the control functions of VP8 decoder interface + */ +enum vp8d_dec_control_id +{ + VP8_DECODER_CTRL_ID_START = 256, + VP8D_GET_LAST_REF_UPDATES, /**< control function to get info on which reference frames were updated + by the last decode */ + VP8_DECODER_CTRL_ID_MAX +} ; + + +/*!\brief VP8 encoder control function parameter type + * + * Defines the data types that VP8E control functions take. Note that + * additional common controls are defined in vp8.h + * + */ + + +VPX_CTRL_USE_TYPE(VP8D_GET_LAST_REF_UPDATES, int *) + + /*! @} - end defgroup vp8_decoder */ -- 2.40.0