On Sat, Dec 14, 2013 at 3:50 PM, Guillaume Martres <[email protected]> wrote:
> From: Gildas Cocherel <[email protected]>
>
> ---
> libavcodec/hevc.h | 25 +++++++++++---------
> libavcodec/hevc_ps.c | 65
> ++++++++++++++++++++++++++--------------------------
> 2 files changed, 46 insertions(+), 44 deletions(-)
>
> diff --git a/libavcodec/hevc.h b/libavcodec/hevc.h
> index bd6f50f..f2a8dfa 100644
> --- a/libavcodec/hevc.h
> +++ b/libavcodec/hevc.h
> @@ -328,21 +328,24 @@ typedef struct VUI {
> int log2_max_mv_length_vertical;
> } VUI;
>
> +typedef struct PTLCommon {
> + uint8_t profile_space;
> + uint8_t tier_flag;
> + uint8_t profile_idc;
> + uint8_t profile_compatibility_flag[32];
> + uint8_t level_idc;
> + uint8_t progressive_source_flag;
> + uint8_t interlaced_source_flag;
> + uint8_t non_packed_constraint_flag;
> + uint8_t frame_only_constraint_flag;
> +} PTLCommon;
> +
> typedef struct PTL {
> - int general_profile_space;
> - uint8_t general_tier_flag;
> - int general_profile_idc;
> - int general_profile_compatibility_flag[32];
> - int general_level_idc;
> + PTLCommon general_ptl;
> + PTLCommon sub_layer_ptl[MAX_SUB_LAYERS];
>
> uint8_t sub_layer_profile_present_flag[MAX_SUB_LAYERS];
> uint8_t sub_layer_level_present_flag[MAX_SUB_LAYERS];
> -
> - int sub_layer_profile_space[MAX_SUB_LAYERS];
> - uint8_t sub_layer_tier_flag[MAX_SUB_LAYERS];
> - int sub_layer_profile_idc[MAX_SUB_LAYERS];
> - uint8_t sub_layer_profile_compatibility_flags[MAX_SUB_LAYERS][32];
> - int sub_layer_level_idc[MAX_SUB_LAYERS];
> } PTL;
>
> typedef struct HEVCVPS {
> diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c
> index 5f33005..b940c9b 100644
> --- a/libavcodec/hevc_ps.c
> +++ b/libavcodec/hevc_ps.c
> @@ -192,51 +192,47 @@ int ff_hevc_decode_short_term_rps(HEVCContext *s,
> ShortTermRPS *rps,
> return 0;
> }
>
> -static void decode_profile_tier_level(HEVCLocalContext *lc, PTL *ptl,
> - int max_num_sub_layers)
> +
> +static void decode_profile_tier_level(HEVCContext *s, PTLCommon *ptl)
> {
> - int i, j;
> - GetBitContext *gb = &lc->gb;
> + int i;
> + GetBitContext *gb = &s->HEVClc.gb;
> +
> + ptl->profile_space = get_bits(gb, 2);
> + ptl->tier_flag = get_bits1(gb);
> + ptl->profile_idc = get_bits(gb, 5);
>
> - ptl->general_profile_space = get_bits(gb, 2);
> - ptl->general_tier_flag = get_bits1(gb);
> - ptl->general_profile_idc = get_bits(gb, 5);
> for (i = 0; i < 32; i++)
> - ptl->general_profile_compatibility_flag[i] = get_bits1(gb);
> - skip_bits1(gb); // general_progressive_source_flag
> - skip_bits1(gb); // general_interlaced_source_flag
> - skip_bits1(gb); // general_non_packed_constraint_flag
> - skip_bits1(gb); // general_frame_only_constraint_flag
> + ptl->profile_compatibility_flag[i] = get_bits1(gb);
> + ptl->progressive_source_flag = get_bits1(gb);
> + ptl->interlaced_source_flag = get_bits1(gb);
> + ptl->non_packed_constraint_flag = get_bits1(gb);
> + ptl->frame_only_constraint_flag = get_bits1(gb);
> +
> skip_bits(gb, 16); // XXX_reserved_zero_44bits[0..15]
> skip_bits(gb, 16); // XXX_reserved_zero_44bits[16..31]
> skip_bits(gb, 12); // XXX_reserved_zero_44bits[32..43]
> +}
> +
> +static void parse_ptl(HEVCContext *s, PTL *ptl, int max_num_sub_layers)
> +{
> + int i;
> + GetBitContext *gb = &s->HEVClc.gb;
> + decode_profile_tier_level(s, &ptl->general_ptl);
> + ptl->general_ptl.level_idc = get_bits(gb, 8);
>
> - ptl->general_level_idc = get_bits(gb, 8);
> for (i = 0; i < max_num_sub_layers - 1; i++) {
> ptl->sub_layer_profile_present_flag[i] = get_bits1(gb);
> ptl->sub_layer_level_present_flag[i] = get_bits1(gb);
> }
> if (max_num_sub_layers - 1 > 0)
> for (i = max_num_sub_layers - 1; i < 8; i++)
> - skip_bits(gb, 2); // reserved_zero_2bits[i]
> + skip_bits(gb, 2); // reserved_zero_2bits[i]
> for (i = 0; i < max_num_sub_layers - 1; i++) {
> - if (ptl->sub_layer_profile_present_flag[i]) {
> - ptl->sub_layer_profile_space[i] = get_bits(gb, 2);
> - ptl->sub_layer_tier_flag[i] = get_bits(gb, 1);
> - ptl->sub_layer_profile_idc[i] = get_bits(gb, 5);
> - for (j = 0; j < 32; j++)
> - ptl->sub_layer_profile_compatibility_flags[i][j] =
> get_bits1(gb);
> - skip_bits1(gb); // sub_layer_progressive_source_flag
> - skip_bits1(gb); // sub_layer_interlaced_source_flag
> - skip_bits1(gb); // sub_layer_non_packed_constraint_flag
> - skip_bits1(gb); // sub_layer_frame_only_constraint_flag
> -
> - skip_bits(gb, 16); // sub_layer_reserved_zero_44bits[0..15]
> - skip_bits(gb, 16); // sub_layer_reserved_zero_44bits[16..31]
> - skip_bits(gb, 12); // sub_layer_reserved_zero_44bits[32..43]
> - }
> + if (ptl->sub_layer_profile_present_flag[i])
> + decode_profile_tier_level(s, &ptl->sub_layer_ptl[i]);
> if (ptl->sub_layer_level_present_flag[i])
> - ptl->sub_layer_level_idc[i] = get_bits(gb, 8);
> + ptl->sub_layer_ptl[i].level_idc = get_bits(gb, 8);
> }
> }
>
> @@ -324,7 +320,7 @@ int ff_hevc_decode_nal_vps(HEVCContext *s)
> AVBufferRef *vps_buf = av_buffer_allocz(sizeof(*vps));
>
> if (!vps_buf)
> - return AVERROR(ENOMEM);
> + return AVERROR(ENOMEM);
> vps = (HEVCVPS*)vps_buf->data;
nit: space before *
>
> av_log(s->avctx, AV_LOG_DEBUG, "Decoding VPS\n");
> @@ -355,7 +351,8 @@ int ff_hevc_decode_nal_vps(HEVCContext *s)
> goto err;
> }
>
> - decode_profile_tier_level(&s->HEVClc, &vps->ptl,
> vps->vps_max_sub_layers);
> + parse_ptl(s, &vps->ptl, vps->vps_max_sub_layers);
> +
> vps->vps_sub_layer_ordering_info_present_flag = get_bits1(gb);
>
> i = vps->vps_sub_layer_ordering_info_present_flag ? 0 :
> vps->vps_max_sub_layers - 1;
> @@ -637,7 +634,9 @@ int ff_hevc_decode_nal_sps(HEVCContext *s)
> }
>
> skip_bits1(gb); // temporal_id_nesting_flag
> - decode_profile_tier_level(&s->HEVClc, &sps->ptl, sps->max_sub_layers);
> +
> + parse_ptl(s, &sps->ptl, sps->max_sub_layers);
> +
> sps_id = get_ue_golomb_long(gb);
> if (sps_id >= MAX_SPS_COUNT) {
> av_log(s->avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", sps_id);
This is ok, but it looks more like a "finish implementation" than
"refactor", maybe the commit title could reflect that.
Vittorio
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel