Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * HEVC Parameter Set decoding
  3.  *
  4.  * Copyright (C) 2012 - 2103 Guillaume Martres
  5.  * Copyright (C) 2012 - 2103 Mickael Raulet
  6.  * Copyright (C) 2012 - 2013 Gildas Cocherel
  7.  * Copyright (C) 2013 Vittorio Giovara
  8.  *
  9.  * This file is part of FFmpeg.
  10.  *
  11.  * FFmpeg is free software; you can redistribute it and/or
  12.  * modify it under the terms of the GNU Lesser General Public
  13.  * License as published by the Free Software Foundation; either
  14.  * version 2.1 of the License, or (at your option) any later version.
  15.  *
  16.  * FFmpeg is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  19.  * Lesser General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU Lesser General Public
  22.  * License along with FFmpeg; if not, write to the Free Software
  23.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  24.  */
  25.  
  26. #include "libavutil/imgutils.h"
  27. #include "golomb.h"
  28. #include "hevc.h"
  29.  
  30. static const uint8_t default_scaling_list_intra[] = {
  31.     16, 16, 16, 16, 17, 18, 21, 24,
  32.     16, 16, 16, 16, 17, 19, 22, 25,
  33.     16, 16, 17, 18, 20, 22, 25, 29,
  34.     16, 16, 18, 21, 24, 27, 31, 36,
  35.     17, 17, 20, 24, 30, 35, 41, 47,
  36.     18, 19, 22, 27, 35, 44, 54, 65,
  37.     21, 22, 25, 31, 41, 54, 70, 88,
  38.     24, 25, 29, 36, 47, 65, 88, 115
  39. };
  40.  
  41. static const uint8_t default_scaling_list_inter[] = {
  42.     16, 16, 16, 16, 17, 18, 20, 24,
  43.     16, 16, 16, 17, 18, 20, 24, 25,
  44.     16, 16, 17, 18, 20, 24, 25, 28,
  45.     16, 17, 18, 20, 24, 25, 28, 33,
  46.     17, 18, 20, 24, 25, 28, 33, 41,
  47.     18, 20, 24, 25, 28, 33, 41, 54,
  48.     20, 24, 25, 28, 33, 41, 54, 71,
  49.     24, 25, 28, 33, 41, 54, 71, 91
  50. };
  51.  
  52. static const AVRational vui_sar[] = {
  53.     {  0,   1 },
  54.     {  1,   1 },
  55.     { 12,  11 },
  56.     { 10,  11 },
  57.     { 16,  11 },
  58.     { 40,  33 },
  59.     { 24,  11 },
  60.     { 20,  11 },
  61.     { 32,  11 },
  62.     { 80,  33 },
  63.     { 18,  11 },
  64.     { 15,  11 },
  65.     { 64,  33 },
  66.     { 160, 99 },
  67.     {  4,   3 },
  68.     {  3,   2 },
  69.     {  2,   1 },
  70. };
  71.  
  72. static void remove_pps(HEVCParamSets *s, int id)
  73. {
  74.     if (s->pps_list[id] && s->pps == (const HEVCPPS*)s->pps_list[id]->data)
  75.         s->pps = NULL;
  76.     av_buffer_unref(&s->pps_list[id]);
  77. }
  78.  
  79. static void remove_sps(HEVCParamSets *s, int id)
  80. {
  81.     int i;
  82.     if (s->sps_list[id]) {
  83.         if (s->sps == (const HEVCSPS*)s->sps_list[id]->data)
  84.             s->sps = NULL;
  85.  
  86.         /* drop all PPS that depend on this SPS */
  87.         for (i = 0; i < FF_ARRAY_ELEMS(s->pps_list); i++)
  88.             if (s->pps_list[i] && ((HEVCPPS*)s->pps_list[i]->data)->sps_id == id)
  89.                 remove_pps(s, i);
  90.  
  91.         av_assert0(!(s->sps_list[id] && s->sps == (HEVCSPS*)s->sps_list[id]->data));
  92.     }
  93.     av_buffer_unref(&s->sps_list[id]);
  94. }
  95.  
  96. static void remove_vps(HEVCParamSets *s, int id)
  97. {
  98.     int i;
  99.     if (s->vps_list[id]) {
  100.         if (s->vps == (const HEVCVPS*)s->vps_list[id]->data)
  101.             s->vps = NULL;
  102.  
  103.         for (i = 0; i < FF_ARRAY_ELEMS(s->sps_list); i++)
  104.             if (s->sps_list[i] && ((HEVCSPS*)s->sps_list[i]->data)->vps_id == id)
  105.                 remove_sps(s, i);
  106.     }
  107.     av_buffer_unref(&s->vps_list[id]);
  108. }
  109.  
  110. int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx,
  111.                                   ShortTermRPS *rps, const HEVCSPS *sps, int is_slice_header)
  112. {
  113.     uint8_t rps_predict = 0;
  114.     int delta_poc;
  115.     int k0 = 0;
  116.     int k1 = 0;
  117.     int k  = 0;
  118.     int i;
  119.  
  120.     if (rps != sps->st_rps && sps->nb_st_rps)
  121.         rps_predict = get_bits1(gb);
  122.  
  123.     if (rps_predict) {
  124.         const ShortTermRPS *rps_ridx;
  125.         int delta_rps;
  126.         unsigned abs_delta_rps;
  127.         uint8_t use_delta_flag = 0;
  128.         uint8_t delta_rps_sign;
  129.  
  130.         if (is_slice_header) {
  131.             unsigned int delta_idx = get_ue_golomb_long(gb) + 1;
  132.             if (delta_idx > sps->nb_st_rps) {
  133.                 av_log(avctx, AV_LOG_ERROR,
  134.                        "Invalid value of delta_idx in slice header RPS: %d > %d.\n",
  135.                        delta_idx, sps->nb_st_rps);
  136.                 return AVERROR_INVALIDDATA;
  137.             }
  138.             rps_ridx = &sps->st_rps[sps->nb_st_rps - delta_idx];
  139.             rps->rps_idx_num_delta_pocs = rps_ridx->num_delta_pocs;
  140.         } else
  141.             rps_ridx = &sps->st_rps[rps - sps->st_rps - 1];
  142.  
  143.         delta_rps_sign = get_bits1(gb);
  144.         abs_delta_rps  = get_ue_golomb_long(gb) + 1;
  145.         if (abs_delta_rps < 1 || abs_delta_rps > 32768) {
  146.             av_log(avctx, AV_LOG_ERROR,
  147.                    "Invalid value of abs_delta_rps: %d\n",
  148.                    abs_delta_rps);
  149.             return AVERROR_INVALIDDATA;
  150.         }
  151.         delta_rps      = (1 - (delta_rps_sign << 1)) * abs_delta_rps;
  152.         for (i = 0; i <= rps_ridx->num_delta_pocs; i++) {
  153.             int used = rps->used[k] = get_bits1(gb);
  154.  
  155.             if (!used)
  156.                 use_delta_flag = get_bits1(gb);
  157.  
  158.             if (used || use_delta_flag) {
  159.                 if (i < rps_ridx->num_delta_pocs)
  160.                     delta_poc = delta_rps + rps_ridx->delta_poc[i];
  161.                 else
  162.                     delta_poc = delta_rps;
  163.                 rps->delta_poc[k] = delta_poc;
  164.                 if (delta_poc < 0)
  165.                     k0++;
  166.                 else
  167.                     k1++;
  168.                 k++;
  169.             }
  170.         }
  171.  
  172.         rps->num_delta_pocs    = k;
  173.         rps->num_negative_pics = k0;
  174.         // sort in increasing order (smallest first)
  175.         if (rps->num_delta_pocs != 0) {
  176.             int used, tmp;
  177.             for (i = 1; i < rps->num_delta_pocs; i++) {
  178.                 delta_poc = rps->delta_poc[i];
  179.                 used      = rps->used[i];
  180.                 for (k = i - 1; k >= 0; k--) {
  181.                     tmp = rps->delta_poc[k];
  182.                     if (delta_poc < tmp) {
  183.                         rps->delta_poc[k + 1] = tmp;
  184.                         rps->used[k + 1]      = rps->used[k];
  185.                         rps->delta_poc[k]     = delta_poc;
  186.                         rps->used[k]          = used;
  187.                     }
  188.                 }
  189.             }
  190.         }
  191.         if ((rps->num_negative_pics >> 1) != 0) {
  192.             int used;
  193.             k = rps->num_negative_pics - 1;
  194.             // flip the negative values to largest first
  195.             for (i = 0; i < rps->num_negative_pics >> 1; i++) {
  196.                 delta_poc         = rps->delta_poc[i];
  197.                 used              = rps->used[i];
  198.                 rps->delta_poc[i] = rps->delta_poc[k];
  199.                 rps->used[i]      = rps->used[k];
  200.                 rps->delta_poc[k] = delta_poc;
  201.                 rps->used[k]      = used;
  202.                 k--;
  203.             }
  204.         }
  205.     } else {
  206.         unsigned int prev, nb_positive_pics;
  207.         rps->num_negative_pics = get_ue_golomb_long(gb);
  208.         nb_positive_pics       = get_ue_golomb_long(gb);
  209.  
  210.         if (rps->num_negative_pics >= MAX_REFS ||
  211.             nb_positive_pics >= MAX_REFS) {
  212.             av_log(avctx, AV_LOG_ERROR, "Too many refs in a short term RPS.\n");
  213.             return AVERROR_INVALIDDATA;
  214.         }
  215.  
  216.         rps->num_delta_pocs = rps->num_negative_pics + nb_positive_pics;
  217.         if (rps->num_delta_pocs) {
  218.             prev = 0;
  219.             for (i = 0; i < rps->num_negative_pics; i++) {
  220.                 delta_poc = get_ue_golomb_long(gb) + 1;
  221.                 prev -= delta_poc;
  222.                 rps->delta_poc[i] = prev;
  223.                 rps->used[i]      = get_bits1(gb);
  224.             }
  225.             prev = 0;
  226.             for (i = 0; i < nb_positive_pics; i++) {
  227.                 delta_poc = get_ue_golomb_long(gb) + 1;
  228.                 prev += delta_poc;
  229.                 rps->delta_poc[rps->num_negative_pics + i] = prev;
  230.                 rps->used[rps->num_negative_pics + i]      = get_bits1(gb);
  231.             }
  232.         }
  233.     }
  234.     return 0;
  235. }
  236.  
  237.  
  238. static int decode_profile_tier_level(GetBitContext *gb, AVCodecContext *avctx,
  239.                                       PTLCommon *ptl)
  240. {
  241.     int i;
  242.  
  243.     if (get_bits_left(gb) < 2+1+5 + 32 + 4 + 16 + 16 + 12)
  244.         return -1;
  245.  
  246.     ptl->profile_space = get_bits(gb, 2);
  247.     ptl->tier_flag     = get_bits1(gb);
  248.     ptl->profile_idc   = get_bits(gb, 5);
  249.     if (ptl->profile_idc == FF_PROFILE_HEVC_MAIN)
  250.         av_log(avctx, AV_LOG_DEBUG, "Main profile bitstream\n");
  251.     else if (ptl->profile_idc == FF_PROFILE_HEVC_MAIN_10)
  252.         av_log(avctx, AV_LOG_DEBUG, "Main 10 profile bitstream\n");
  253.     else if (ptl->profile_idc == FF_PROFILE_HEVC_MAIN_STILL_PICTURE)
  254.         av_log(avctx, AV_LOG_DEBUG, "Main Still Picture profile bitstream\n");
  255.     else if (ptl->profile_idc == FF_PROFILE_HEVC_REXT)
  256.         av_log(avctx, AV_LOG_DEBUG, "Range Extension profile bitstream\n");
  257.     else
  258.         av_log(avctx, AV_LOG_WARNING, "Unknown HEVC profile: %d\n", ptl->profile_idc);
  259.  
  260.     for (i = 0; i < 32; i++)
  261.         ptl->profile_compatibility_flag[i] = get_bits1(gb);
  262.     ptl->progressive_source_flag    = get_bits1(gb);
  263.     ptl->interlaced_source_flag     = get_bits1(gb);
  264.     ptl->non_packed_constraint_flag = get_bits1(gb);
  265.     ptl->frame_only_constraint_flag = get_bits1(gb);
  266.  
  267.     skip_bits(gb, 16); // XXX_reserved_zero_44bits[0..15]
  268.     skip_bits(gb, 16); // XXX_reserved_zero_44bits[16..31]
  269.     skip_bits(gb, 12); // XXX_reserved_zero_44bits[32..43]
  270.  
  271.     return 0;
  272. }
  273.  
  274. static int parse_ptl(GetBitContext *gb, AVCodecContext *avctx,
  275.                       PTL *ptl, int max_num_sub_layers)
  276. {
  277.     int i;
  278.     if (decode_profile_tier_level(gb, avctx, &ptl->general_ptl) < 0 ||
  279.         get_bits_left(gb) < 8 + 8*2) {
  280.         av_log(avctx, AV_LOG_ERROR, "PTL information too short\n");
  281.         return -1;
  282.     }
  283.  
  284.     ptl->general_ptl.level_idc = get_bits(gb, 8);
  285.  
  286.     for (i = 0; i < max_num_sub_layers - 1; i++) {
  287.         ptl->sub_layer_profile_present_flag[i] = get_bits1(gb);
  288.         ptl->sub_layer_level_present_flag[i]   = get_bits1(gb);
  289.     }
  290.  
  291.     if (max_num_sub_layers - 1> 0)
  292.         for (i = max_num_sub_layers - 1; i < 8; i++)
  293.             skip_bits(gb, 2); // reserved_zero_2bits[i]
  294.     for (i = 0; i < max_num_sub_layers - 1; i++) {
  295.         if (ptl->sub_layer_profile_present_flag[i] &&
  296.             decode_profile_tier_level(gb, avctx, &ptl->sub_layer_ptl[i]) < 0) {
  297.             av_log(avctx, AV_LOG_ERROR,
  298.                    "PTL information for sublayer %i too short\n", i);
  299.             return -1;
  300.         }
  301.         if (ptl->sub_layer_level_present_flag[i]) {
  302.             if (get_bits_left(gb) < 8) {
  303.                 av_log(avctx, AV_LOG_ERROR,
  304.                        "Not enough data for sublayer %i level_idc\n", i);
  305.                 return -1;
  306.             } else
  307.                 ptl->sub_layer_ptl[i].level_idc = get_bits(gb, 8);
  308.         }
  309.     }
  310.  
  311.     return 0;
  312. }
  313.  
  314. static void decode_sublayer_hrd(GetBitContext *gb, unsigned int nb_cpb,
  315.                                 int subpic_params_present)
  316. {
  317.     int i;
  318.  
  319.     for (i = 0; i < nb_cpb; i++) {
  320.         get_ue_golomb_long(gb); // bit_rate_value_minus1
  321.         get_ue_golomb_long(gb); // cpb_size_value_minus1
  322.  
  323.         if (subpic_params_present) {
  324.             get_ue_golomb_long(gb); // cpb_size_du_value_minus1
  325.             get_ue_golomb_long(gb); // bit_rate_du_value_minus1
  326.         }
  327.         skip_bits1(gb); // cbr_flag
  328.     }
  329. }
  330.  
  331. static int decode_hrd(GetBitContext *gb, int common_inf_present,
  332.                        int max_sublayers)
  333. {
  334.     int nal_params_present = 0, vcl_params_present = 0;
  335.     int subpic_params_present = 0;
  336.     int i;
  337.  
  338.     if (common_inf_present) {
  339.         nal_params_present = get_bits1(gb);
  340.         vcl_params_present = get_bits1(gb);
  341.  
  342.         if (nal_params_present || vcl_params_present) {
  343.             subpic_params_present = get_bits1(gb);
  344.  
  345.             if (subpic_params_present) {
  346.                 skip_bits(gb, 8); // tick_divisor_minus2
  347.                 skip_bits(gb, 5); // du_cpb_removal_delay_increment_length_minus1
  348.                 skip_bits(gb, 1); // sub_pic_cpb_params_in_pic_timing_sei_flag
  349.                 skip_bits(gb, 5); // dpb_output_delay_du_length_minus1
  350.             }
  351.  
  352.             skip_bits(gb, 4); // bit_rate_scale
  353.             skip_bits(gb, 4); // cpb_size_scale
  354.  
  355.             if (subpic_params_present)
  356.                 skip_bits(gb, 4);  // cpb_size_du_scale
  357.  
  358.             skip_bits(gb, 5); // initial_cpb_removal_delay_length_minus1
  359.             skip_bits(gb, 5); // au_cpb_removal_delay_length_minus1
  360.             skip_bits(gb, 5); // dpb_output_delay_length_minus1
  361.         }
  362.     }
  363.  
  364.     for (i = 0; i < max_sublayers; i++) {
  365.         int low_delay = 0;
  366.         unsigned int nb_cpb = 1;
  367.         int fixed_rate = get_bits1(gb);
  368.  
  369.         if (!fixed_rate)
  370.             fixed_rate = get_bits1(gb);
  371.  
  372.         if (fixed_rate)
  373.             get_ue_golomb_long(gb);  // elemental_duration_in_tc_minus1
  374.         else
  375.             low_delay = get_bits1(gb);
  376.  
  377.         if (!low_delay) {
  378.             nb_cpb = get_ue_golomb_long(gb) + 1;
  379.             if (nb_cpb < 1 || nb_cpb > 32) {
  380.                 av_log(NULL, AV_LOG_ERROR, "nb_cpb %d invalid\n", nb_cpb);
  381.                 return AVERROR_INVALIDDATA;
  382.             }
  383.         }
  384.  
  385.         if (nal_params_present)
  386.             decode_sublayer_hrd(gb, nb_cpb, subpic_params_present);
  387.         if (vcl_params_present)
  388.             decode_sublayer_hrd(gb, nb_cpb, subpic_params_present);
  389.     }
  390.     return 0;
  391. }
  392.  
  393. int ff_hevc_decode_nal_vps(GetBitContext *gb, AVCodecContext *avctx,
  394.                            HEVCParamSets *ps)
  395. {
  396.     int i,j;
  397.     int vps_id = 0;
  398.     HEVCVPS *vps;
  399.     AVBufferRef *vps_buf = av_buffer_allocz(sizeof(*vps));
  400.  
  401.     if (!vps_buf)
  402.         return AVERROR(ENOMEM);
  403.     vps = (HEVCVPS*)vps_buf->data;
  404.  
  405.     av_log(avctx, AV_LOG_DEBUG, "Decoding VPS\n");
  406.  
  407.     vps_id = get_bits(gb, 4);
  408.     if (vps_id >= MAX_VPS_COUNT) {
  409.         av_log(avctx, AV_LOG_ERROR, "VPS id out of range: %d\n", vps_id);
  410.         goto err;
  411.     }
  412.  
  413.     if (get_bits(gb, 2) != 3) { // vps_reserved_three_2bits
  414.         av_log(avctx, AV_LOG_ERROR, "vps_reserved_three_2bits is not three\n");
  415.         goto err;
  416.     }
  417.  
  418.     vps->vps_max_layers               = get_bits(gb, 6) + 1;
  419.     vps->vps_max_sub_layers           = get_bits(gb, 3) + 1;
  420.     vps->vps_temporal_id_nesting_flag = get_bits1(gb);
  421.  
  422.     if (get_bits(gb, 16) != 0xffff) { // vps_reserved_ffff_16bits
  423.         av_log(avctx, AV_LOG_ERROR, "vps_reserved_ffff_16bits is not 0xffff\n");
  424.         goto err;
  425.     }
  426.  
  427.     if (vps->vps_max_sub_layers > MAX_SUB_LAYERS) {
  428.         av_log(avctx, AV_LOG_ERROR, "vps_max_sub_layers out of range: %d\n",
  429.                vps->vps_max_sub_layers);
  430.         goto err;
  431.     }
  432.  
  433.     if (parse_ptl(gb, avctx, &vps->ptl, vps->vps_max_sub_layers) < 0)
  434.         goto err;
  435.  
  436.     vps->vps_sub_layer_ordering_info_present_flag = get_bits1(gb);
  437.  
  438.     i = vps->vps_sub_layer_ordering_info_present_flag ? 0 : vps->vps_max_sub_layers - 1;
  439.     for (; i < vps->vps_max_sub_layers; i++) {
  440.         vps->vps_max_dec_pic_buffering[i] = get_ue_golomb_long(gb) + 1;
  441.         vps->vps_num_reorder_pics[i]      = get_ue_golomb_long(gb);
  442.         vps->vps_max_latency_increase[i]  = get_ue_golomb_long(gb) - 1;
  443.  
  444.         if (vps->vps_max_dec_pic_buffering[i] > MAX_DPB_SIZE || !vps->vps_max_dec_pic_buffering[i]) {
  445.             av_log(avctx, AV_LOG_ERROR, "vps_max_dec_pic_buffering_minus1 out of range: %d\n",
  446.                    vps->vps_max_dec_pic_buffering[i] - 1);
  447.             goto err;
  448.         }
  449.         if (vps->vps_num_reorder_pics[i] > vps->vps_max_dec_pic_buffering[i] - 1) {
  450.             av_log(avctx, AV_LOG_WARNING, "vps_max_num_reorder_pics out of range: %d\n",
  451.                    vps->vps_num_reorder_pics[i]);
  452.             if (avctx->err_recognition & AV_EF_EXPLODE)
  453.                 goto err;
  454.         }
  455.     }
  456.  
  457.     vps->vps_max_layer_id   = get_bits(gb, 6);
  458.     vps->vps_num_layer_sets = get_ue_golomb_long(gb) + 1;
  459.     if (vps->vps_num_layer_sets < 1 || vps->vps_num_layer_sets > 1024 ||
  460.         (vps->vps_num_layer_sets - 1LL) * (vps->vps_max_layer_id + 1LL) > get_bits_left(gb)) {
  461.         av_log(avctx, AV_LOG_ERROR, "too many layer_id_included_flags\n");
  462.         goto err;
  463.     }
  464.  
  465.     for (i = 1; i < vps->vps_num_layer_sets; i++)
  466.         for (j = 0; j <= vps->vps_max_layer_id; j++)
  467.             skip_bits(gb, 1);  // layer_id_included_flag[i][j]
  468.  
  469.     vps->vps_timing_info_present_flag = get_bits1(gb);
  470.     if (vps->vps_timing_info_present_flag) {
  471.         vps->vps_num_units_in_tick               = get_bits_long(gb, 32);
  472.         vps->vps_time_scale                      = get_bits_long(gb, 32);
  473.         vps->vps_poc_proportional_to_timing_flag = get_bits1(gb);
  474.         if (vps->vps_poc_proportional_to_timing_flag)
  475.             vps->vps_num_ticks_poc_diff_one = get_ue_golomb_long(gb) + 1;
  476.         vps->vps_num_hrd_parameters = get_ue_golomb_long(gb);
  477.         if (vps->vps_num_hrd_parameters > (unsigned)vps->vps_num_layer_sets) {
  478.             av_log(avctx, AV_LOG_ERROR,
  479.                    "vps_num_hrd_parameters %d is invalid\n", vps->vps_num_hrd_parameters);
  480.             goto err;
  481.         }
  482.         for (i = 0; i < vps->vps_num_hrd_parameters; i++) {
  483.             int common_inf_present = 1;
  484.  
  485.             get_ue_golomb_long(gb); // hrd_layer_set_idx
  486.             if (i)
  487.                 common_inf_present = get_bits1(gb);
  488.             decode_hrd(gb, common_inf_present, vps->vps_max_sub_layers);
  489.         }
  490.     }
  491.     get_bits1(gb); /* vps_extension_flag */
  492.  
  493.     if (get_bits_left(gb) < 0) {
  494.         av_log(avctx, AV_LOG_ERROR,
  495.                "Overread VPS by %d bits\n", -get_bits_left(gb));
  496.         if (ps->vps_list[vps_id])
  497.             goto err;
  498.     }
  499.  
  500.     if (ps->vps_list[vps_id] &&
  501.         !memcmp(ps->vps_list[vps_id]->data, vps_buf->data, vps_buf->size)) {
  502.         av_buffer_unref(&vps_buf);
  503.     } else {
  504.         remove_vps(ps, vps_id);
  505.         ps->vps_list[vps_id] = vps_buf;
  506.     }
  507.  
  508.     return 0;
  509.  
  510. err:
  511.     av_buffer_unref(&vps_buf);
  512.     return AVERROR_INVALIDDATA;
  513. }
  514.  
  515. static void decode_vui(GetBitContext *gb, AVCodecContext *avctx,
  516.                        int apply_defdispwin, HEVCSPS *sps)
  517. {
  518.     VUI *vui          = &sps->vui;
  519.     GetBitContext backup;
  520.     int sar_present, alt = 0;
  521.  
  522.     av_log(avctx, AV_LOG_DEBUG, "Decoding VUI\n");
  523.  
  524.     sar_present = get_bits1(gb);
  525.     if (sar_present) {
  526.         uint8_t sar_idx = get_bits(gb, 8);
  527.         if (sar_idx < FF_ARRAY_ELEMS(vui_sar))
  528.             vui->sar = vui_sar[sar_idx];
  529.         else if (sar_idx == 255) {
  530.             vui->sar.num = get_bits(gb, 16);
  531.             vui->sar.den = get_bits(gb, 16);
  532.         } else
  533.             av_log(avctx, AV_LOG_WARNING,
  534.                    "Unknown SAR index: %u.\n", sar_idx);
  535.     }
  536.  
  537.     vui->overscan_info_present_flag = get_bits1(gb);
  538.     if (vui->overscan_info_present_flag)
  539.         vui->overscan_appropriate_flag = get_bits1(gb);
  540.  
  541.     vui->video_signal_type_present_flag = get_bits1(gb);
  542.     if (vui->video_signal_type_present_flag) {
  543.         vui->video_format                    = get_bits(gb, 3);
  544.         vui->video_full_range_flag           = get_bits1(gb);
  545.         vui->colour_description_present_flag = get_bits1(gb);
  546.         if (vui->video_full_range_flag && sps->pix_fmt == AV_PIX_FMT_YUV420P)
  547.             sps->pix_fmt = AV_PIX_FMT_YUVJ420P;
  548.         if (vui->colour_description_present_flag) {
  549.             vui->colour_primaries        = get_bits(gb, 8);
  550.             vui->transfer_characteristic = get_bits(gb, 8);
  551.             vui->matrix_coeffs           = get_bits(gb, 8);
  552.  
  553.             // Set invalid values to "unspecified"
  554.             if (vui->colour_primaries >= AVCOL_PRI_NB)
  555.                 vui->colour_primaries = AVCOL_PRI_UNSPECIFIED;
  556.             if (vui->transfer_characteristic >= AVCOL_TRC_NB)
  557.                 vui->transfer_characteristic = AVCOL_TRC_UNSPECIFIED;
  558.             if (vui->matrix_coeffs >= AVCOL_SPC_NB)
  559.                 vui->matrix_coeffs = AVCOL_SPC_UNSPECIFIED;
  560.         }
  561.     }
  562.  
  563.     vui->chroma_loc_info_present_flag = get_bits1(gb);
  564.     if (vui->chroma_loc_info_present_flag) {
  565.         vui->chroma_sample_loc_type_top_field    = get_ue_golomb_long(gb);
  566.         vui->chroma_sample_loc_type_bottom_field = get_ue_golomb_long(gb);
  567.     }
  568.  
  569.     vui->neutra_chroma_indication_flag = get_bits1(gb);
  570.     vui->field_seq_flag                = get_bits1(gb);
  571.     vui->frame_field_info_present_flag = get_bits1(gb);
  572.  
  573.     if (get_bits_left(gb) >= 68 && show_bits_long(gb, 21) == 0x100000) {
  574.         vui->default_display_window_flag = 0;
  575.         av_log(avctx, AV_LOG_WARNING, "Invalid default display window\n");
  576.     } else
  577.         vui->default_display_window_flag = get_bits1(gb);
  578.     // Backup context in case an alternate header is detected
  579.     memcpy(&backup, gb, sizeof(backup));
  580.  
  581.     if (vui->default_display_window_flag) {
  582.         //TODO: * 2 is only valid for 420
  583.         vui->def_disp_win.left_offset   = get_ue_golomb_long(gb) * 2;
  584.         vui->def_disp_win.right_offset  = get_ue_golomb_long(gb) * 2;
  585.         vui->def_disp_win.top_offset    = get_ue_golomb_long(gb) * 2;
  586.         vui->def_disp_win.bottom_offset = get_ue_golomb_long(gb) * 2;
  587.  
  588.         if (apply_defdispwin &&
  589.             avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP) {
  590.             av_log(avctx, AV_LOG_DEBUG,
  591.                    "discarding vui default display window, "
  592.                    "original values are l:%u r:%u t:%u b:%u\n",
  593.                    vui->def_disp_win.left_offset,
  594.                    vui->def_disp_win.right_offset,
  595.                    vui->def_disp_win.top_offset,
  596.                    vui->def_disp_win.bottom_offset);
  597.  
  598.             vui->def_disp_win.left_offset   =
  599.             vui->def_disp_win.right_offset  =
  600.             vui->def_disp_win.top_offset    =
  601.             vui->def_disp_win.bottom_offset = 0;
  602.         }
  603.     }
  604.  
  605.     vui->vui_timing_info_present_flag = get_bits1(gb);
  606.  
  607.     if (vui->vui_timing_info_present_flag) {
  608.         if( get_bits_left(gb) < 66) {
  609.             // The alternate syntax seem to have timing info located
  610.             // at where def_disp_win is normally located
  611.             av_log(avctx, AV_LOG_WARNING,
  612.                    "Strange VUI timing information, retrying...\n");
  613.             vui->default_display_window_flag = 0;
  614.             memset(&vui->def_disp_win, 0, sizeof(vui->def_disp_win));
  615.             memcpy(gb, &backup, sizeof(backup));
  616.             alt = 1;
  617.         }
  618.         vui->vui_num_units_in_tick               = get_bits_long(gb, 32);
  619.         vui->vui_time_scale                      = get_bits_long(gb, 32);
  620.         if (alt) {
  621.             av_log(avctx, AV_LOG_INFO, "Retry got %i/%i fps\n",
  622.                    vui->vui_time_scale, vui->vui_num_units_in_tick);
  623.         }
  624.         vui->vui_poc_proportional_to_timing_flag = get_bits1(gb);
  625.         if (vui->vui_poc_proportional_to_timing_flag)
  626.             vui->vui_num_ticks_poc_diff_one_minus1 = get_ue_golomb_long(gb);
  627.         vui->vui_hrd_parameters_present_flag = get_bits1(gb);
  628.         if (vui->vui_hrd_parameters_present_flag)
  629.             decode_hrd(gb, 1, sps->max_sub_layers);
  630.     }
  631.  
  632.     vui->bitstream_restriction_flag = get_bits1(gb);
  633.     if (vui->bitstream_restriction_flag) {
  634.         vui->tiles_fixed_structure_flag              = get_bits1(gb);
  635.         vui->motion_vectors_over_pic_boundaries_flag = get_bits1(gb);
  636.         vui->restricted_ref_pic_lists_flag           = get_bits1(gb);
  637.         vui->min_spatial_segmentation_idc            = get_ue_golomb_long(gb);
  638.         vui->max_bytes_per_pic_denom                 = get_ue_golomb_long(gb);
  639.         vui->max_bits_per_min_cu_denom               = get_ue_golomb_long(gb);
  640.         vui->log2_max_mv_length_horizontal           = get_ue_golomb_long(gb);
  641.         vui->log2_max_mv_length_vertical             = get_ue_golomb_long(gb);
  642.     }
  643. }
  644.  
  645. static void set_default_scaling_list_data(ScalingList *sl)
  646. {
  647.     int matrixId;
  648.  
  649.     for (matrixId = 0; matrixId < 6; matrixId++) {
  650.         // 4x4 default is 16
  651.         memset(sl->sl[0][matrixId], 16, 16);
  652.         sl->sl_dc[0][matrixId] = 16; // default for 16x16
  653.         sl->sl_dc[1][matrixId] = 16; // default for 32x32
  654.     }
  655.     memcpy(sl->sl[1][0], default_scaling_list_intra, 64);
  656.     memcpy(sl->sl[1][1], default_scaling_list_intra, 64);
  657.     memcpy(sl->sl[1][2], default_scaling_list_intra, 64);
  658.     memcpy(sl->sl[1][3], default_scaling_list_inter, 64);
  659.     memcpy(sl->sl[1][4], default_scaling_list_inter, 64);
  660.     memcpy(sl->sl[1][5], default_scaling_list_inter, 64);
  661.     memcpy(sl->sl[2][0], default_scaling_list_intra, 64);
  662.     memcpy(sl->sl[2][1], default_scaling_list_intra, 64);
  663.     memcpy(sl->sl[2][2], default_scaling_list_intra, 64);
  664.     memcpy(sl->sl[2][3], default_scaling_list_inter, 64);
  665.     memcpy(sl->sl[2][4], default_scaling_list_inter, 64);
  666.     memcpy(sl->sl[2][5], default_scaling_list_inter, 64);
  667.     memcpy(sl->sl[3][0], default_scaling_list_intra, 64);
  668.     memcpy(sl->sl[3][1], default_scaling_list_intra, 64);
  669.     memcpy(sl->sl[3][2], default_scaling_list_intra, 64);
  670.     memcpy(sl->sl[3][3], default_scaling_list_inter, 64);
  671.     memcpy(sl->sl[3][4], default_scaling_list_inter, 64);
  672.     memcpy(sl->sl[3][5], default_scaling_list_inter, 64);
  673. }
  674.  
  675. static int scaling_list_data(GetBitContext *gb, AVCodecContext *avctx, ScalingList *sl, HEVCSPS *sps)
  676. {
  677.     uint8_t scaling_list_pred_mode_flag;
  678.     int32_t scaling_list_dc_coef[2][6];
  679.     int size_id, matrix_id, pos;
  680.     int i;
  681.  
  682.     for (size_id = 0; size_id < 4; size_id++)
  683.         for (matrix_id = 0; matrix_id < 6; matrix_id += ((size_id == 3) ? 3 : 1)) {
  684.             scaling_list_pred_mode_flag = get_bits1(gb);
  685.             if (!scaling_list_pred_mode_flag) {
  686.                 unsigned int delta = get_ue_golomb_long(gb);
  687.                 /* Only need to handle non-zero delta. Zero means default,
  688.                  * which should already be in the arrays. */
  689.                 if (delta) {
  690.                     // Copy from previous array.
  691.                     if (matrix_id < delta) {
  692.                         av_log(avctx, AV_LOG_ERROR,
  693.                                "Invalid delta in scaling list data: %d.\n", delta);
  694.                         return AVERROR_INVALIDDATA;
  695.                     }
  696.  
  697.                     memcpy(sl->sl[size_id][matrix_id],
  698.                            sl->sl[size_id][matrix_id - delta],
  699.                            size_id > 0 ? 64 : 16);
  700.                     if (size_id > 1)
  701.                         sl->sl_dc[size_id - 2][matrix_id] = sl->sl_dc[size_id - 2][matrix_id - delta];
  702.                 }
  703.             } else {
  704.                 int next_coef, coef_num;
  705.                 int32_t scaling_list_delta_coef;
  706.  
  707.                 next_coef = 8;
  708.                 coef_num  = FFMIN(64, 1 << (4 + (size_id << 1)));
  709.                 if (size_id > 1) {
  710.                     scaling_list_dc_coef[size_id - 2][matrix_id] = get_se_golomb(gb) + 8;
  711.                     next_coef = scaling_list_dc_coef[size_id - 2][matrix_id];
  712.                     sl->sl_dc[size_id - 2][matrix_id] = next_coef;
  713.                 }
  714.                 for (i = 0; i < coef_num; i++) {
  715.                     if (size_id == 0)
  716.                         pos = 4 * ff_hevc_diag_scan4x4_y[i] +
  717.                                   ff_hevc_diag_scan4x4_x[i];
  718.                     else
  719.                         pos = 8 * ff_hevc_diag_scan8x8_y[i] +
  720.                                   ff_hevc_diag_scan8x8_x[i];
  721.  
  722.                     scaling_list_delta_coef = get_se_golomb(gb);
  723.                     next_coef = (next_coef + scaling_list_delta_coef + 256) % 256;
  724.                     sl->sl[size_id][matrix_id][pos] = next_coef;
  725.                 }
  726.             }
  727.         }
  728.  
  729.     if (sps->chroma_format_idc == 3) {
  730.         for (i = 0; i < 64; i++) {
  731.             sl->sl[3][1][i] = sl->sl[2][1][i];
  732.             sl->sl[3][2][i] = sl->sl[2][2][i];
  733.             sl->sl[3][4][i] = sl->sl[2][4][i];
  734.             sl->sl[3][5][i] = sl->sl[2][5][i];
  735.         }
  736.         sl->sl_dc[1][1] = sl->sl_dc[0][1];
  737.         sl->sl_dc[1][2] = sl->sl_dc[0][2];
  738.         sl->sl_dc[1][4] = sl->sl_dc[0][4];
  739.         sl->sl_dc[1][5] = sl->sl_dc[0][5];
  740.     }
  741.  
  742.  
  743.     return 0;
  744. }
  745.  
  746. static int map_pixel_format(AVCodecContext *avctx, HEVCSPS *sps)
  747. {
  748.     const AVPixFmtDescriptor *desc;
  749.     switch (sps->bit_depth) {
  750.     case 8:
  751.         if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY8;
  752.         if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P;
  753.         if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P;
  754.         if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P;
  755.        break;
  756.     case 9:
  757.         if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY16;
  758.         if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P9;
  759.         if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P9;
  760.         if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P9;
  761.         break;
  762.     case 10:
  763.         if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY16;
  764.         if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P10;
  765.         if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P10;
  766.         if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P10;
  767.         break;
  768.     case 12:
  769.         if (sps->chroma_format_idc == 0) sps->pix_fmt = AV_PIX_FMT_GRAY16;
  770.         if (sps->chroma_format_idc == 1) sps->pix_fmt = AV_PIX_FMT_YUV420P12;
  771.         if (sps->chroma_format_idc == 2) sps->pix_fmt = AV_PIX_FMT_YUV422P12;
  772.         if (sps->chroma_format_idc == 3) sps->pix_fmt = AV_PIX_FMT_YUV444P12;
  773.         break;
  774.     default:
  775.         av_log(avctx, AV_LOG_ERROR,
  776.                "4:2:0, 4:2:2, 4:4:4 supports are currently specified for 8, 10 and 12 bits.\n");
  777.         av_log(avctx, AV_LOG_ERROR,
  778.                "chroma_format_idc is %d, depth is %d",
  779.                sps->chroma_format_idc, sps->bit_depth);
  780.         return AVERROR_INVALIDDATA;
  781.     }
  782.  
  783.     desc = av_pix_fmt_desc_get(sps->pix_fmt);
  784.     if (!desc)
  785.         return AVERROR(EINVAL);
  786.  
  787.     sps->hshift[0] = sps->vshift[0] = 0;
  788.     sps->hshift[2] = sps->hshift[1] = desc->log2_chroma_w;
  789.     sps->vshift[2] = sps->vshift[1] = desc->log2_chroma_h;
  790.  
  791.     sps->pixel_shift = sps->bit_depth > 8;
  792.  
  793.     return 0;
  794. }
  795.  
  796. int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id,
  797.                       int apply_defdispwin, AVBufferRef **vps_list, AVCodecContext *avctx)
  798. {
  799.     int ret = 0;
  800.     int log2_diff_max_min_transform_block_size;
  801.     int bit_depth_chroma, start, vui_present, sublayer_ordering_info;
  802.     int i;
  803.  
  804.     // Coded parameters
  805.  
  806.     sps->vps_id = get_bits(gb, 4);
  807.     if (sps->vps_id >= MAX_VPS_COUNT) {
  808.         av_log(avctx, AV_LOG_ERROR, "VPS id out of range: %d\n", sps->vps_id);
  809.         return AVERROR_INVALIDDATA;
  810.     }
  811.  
  812.     if (vps_list && !vps_list[sps->vps_id]) {
  813.         av_log(avctx, AV_LOG_ERROR, "VPS %d does not exist\n",
  814.                sps->vps_id);
  815.         return AVERROR_INVALIDDATA;
  816.     }
  817.  
  818.     sps->max_sub_layers = get_bits(gb, 3) + 1;
  819.     if (sps->max_sub_layers > MAX_SUB_LAYERS) {
  820.         av_log(avctx, AV_LOG_ERROR, "sps_max_sub_layers out of range: %d\n",
  821.                sps->max_sub_layers);
  822.         return AVERROR_INVALIDDATA;
  823.     }
  824.  
  825.     skip_bits1(gb); // temporal_id_nesting_flag
  826.  
  827.     if ((ret = parse_ptl(gb, avctx, &sps->ptl, sps->max_sub_layers)) < 0)
  828.         return ret;
  829.  
  830.     *sps_id = get_ue_golomb_long(gb);
  831.     if (*sps_id >= MAX_SPS_COUNT) {
  832.         av_log(avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", *sps_id);
  833.         return AVERROR_INVALIDDATA;
  834.     }
  835.  
  836.     sps->chroma_format_idc = get_ue_golomb_long(gb);
  837.     if (sps->chroma_format_idc > 3U) {
  838.         av_log(avctx, AV_LOG_ERROR, "chroma_format_idc %d is invalid\n", sps->chroma_format_idc);
  839.         return AVERROR_INVALIDDATA;
  840.     }
  841.  
  842.     if (sps->chroma_format_idc == 3)
  843.         sps->separate_colour_plane_flag = get_bits1(gb);
  844.  
  845.     if (sps->separate_colour_plane_flag)
  846.         sps->chroma_format_idc = 0;
  847.  
  848.     sps->width  = get_ue_golomb_long(gb);
  849.     sps->height = get_ue_golomb_long(gb);
  850.     if ((ret = av_image_check_size(sps->width,
  851.                                    sps->height, 0, avctx)) < 0)
  852.         return ret;
  853.  
  854.     if (get_bits1(gb)) { // pic_conformance_flag
  855.         //TODO: * 2 is only valid for 420
  856.         sps->pic_conf_win.left_offset   = get_ue_golomb_long(gb) * 2;
  857.         sps->pic_conf_win.right_offset  = get_ue_golomb_long(gb) * 2;
  858.         sps->pic_conf_win.top_offset    = get_ue_golomb_long(gb) * 2;
  859.         sps->pic_conf_win.bottom_offset = get_ue_golomb_long(gb) * 2;
  860.  
  861.         if (avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP) {
  862.             av_log(avctx, AV_LOG_DEBUG,
  863.                    "discarding sps conformance window, "
  864.                    "original values are l:%u r:%u t:%u b:%u\n",
  865.                    sps->pic_conf_win.left_offset,
  866.                    sps->pic_conf_win.right_offset,
  867.                    sps->pic_conf_win.top_offset,
  868.                    sps->pic_conf_win.bottom_offset);
  869.  
  870.             sps->pic_conf_win.left_offset   =
  871.             sps->pic_conf_win.right_offset  =
  872.             sps->pic_conf_win.top_offset    =
  873.             sps->pic_conf_win.bottom_offset = 0;
  874.         }
  875.         sps->output_window = sps->pic_conf_win;
  876.     }
  877.  
  878.     sps->bit_depth   = get_ue_golomb_long(gb) + 8;
  879.     bit_depth_chroma = get_ue_golomb_long(gb) + 8;
  880.     if (sps->chroma_format_idc && bit_depth_chroma != sps->bit_depth) {
  881.         av_log(avctx, AV_LOG_ERROR,
  882.                "Luma bit depth (%d) is different from chroma bit depth (%d), "
  883.                "this is unsupported.\n",
  884.                sps->bit_depth, bit_depth_chroma);
  885.         return AVERROR_INVALIDDATA;
  886.     }
  887.  
  888.     ret = map_pixel_format(avctx, sps);
  889.     if (ret < 0)
  890.         return ret;
  891.  
  892.     sps->log2_max_poc_lsb = get_ue_golomb_long(gb) + 4;
  893.     if (sps->log2_max_poc_lsb > 16) {
  894.         av_log(avctx, AV_LOG_ERROR, "log2_max_pic_order_cnt_lsb_minus4 out range: %d\n",
  895.                sps->log2_max_poc_lsb - 4);
  896.         return AVERROR_INVALIDDATA;
  897.     }
  898.  
  899.     sublayer_ordering_info = get_bits1(gb);
  900.     start = sublayer_ordering_info ? 0 : sps->max_sub_layers - 1;
  901.     for (i = start; i < sps->max_sub_layers; i++) {
  902.         sps->temporal_layer[i].max_dec_pic_buffering = get_ue_golomb_long(gb) + 1;
  903.         sps->temporal_layer[i].num_reorder_pics      = get_ue_golomb_long(gb);
  904.         sps->temporal_layer[i].max_latency_increase  = get_ue_golomb_long(gb) - 1;
  905.         if (sps->temporal_layer[i].max_dec_pic_buffering > MAX_DPB_SIZE) {
  906.             av_log(avctx, AV_LOG_ERROR, "sps_max_dec_pic_buffering_minus1 out of range: %d\n",
  907.                    sps->temporal_layer[i].max_dec_pic_buffering - 1);
  908.             return AVERROR_INVALIDDATA;
  909.         }
  910.         if (sps->temporal_layer[i].num_reorder_pics > sps->temporal_layer[i].max_dec_pic_buffering - 1) {
  911.             av_log(avctx, AV_LOG_WARNING, "sps_max_num_reorder_pics out of range: %d\n",
  912.                    sps->temporal_layer[i].num_reorder_pics);
  913.             if (avctx->err_recognition & AV_EF_EXPLODE ||
  914.                 sps->temporal_layer[i].num_reorder_pics > MAX_DPB_SIZE - 1) {
  915.                 return AVERROR_INVALIDDATA;
  916.             }
  917.             sps->temporal_layer[i].max_dec_pic_buffering = sps->temporal_layer[i].num_reorder_pics + 1;
  918.         }
  919.     }
  920.  
  921.     if (!sublayer_ordering_info) {
  922.         for (i = 0; i < start; i++) {
  923.             sps->temporal_layer[i].max_dec_pic_buffering = sps->temporal_layer[start].max_dec_pic_buffering;
  924.             sps->temporal_layer[i].num_reorder_pics      = sps->temporal_layer[start].num_reorder_pics;
  925.             sps->temporal_layer[i].max_latency_increase  = sps->temporal_layer[start].max_latency_increase;
  926.         }
  927.     }
  928.  
  929.     sps->log2_min_cb_size                    = get_ue_golomb_long(gb) + 3;
  930.     sps->log2_diff_max_min_coding_block_size = get_ue_golomb_long(gb);
  931.     sps->log2_min_tb_size                    = get_ue_golomb_long(gb) + 2;
  932.     log2_diff_max_min_transform_block_size   = get_ue_golomb_long(gb);
  933.     sps->log2_max_trafo_size                 = log2_diff_max_min_transform_block_size +
  934.                                                sps->log2_min_tb_size;
  935.  
  936.     if (sps->log2_min_cb_size < 3 || sps->log2_min_cb_size > 30) {
  937.         av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_min_cb_size", sps->log2_min_cb_size);
  938.         return AVERROR_INVALIDDATA;
  939.     }
  940.  
  941.     if (sps->log2_diff_max_min_coding_block_size > 30) {
  942.         av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_diff_max_min_coding_block_size", sps->log2_diff_max_min_coding_block_size);
  943.         return AVERROR_INVALIDDATA;
  944.     }
  945.  
  946.     if (sps->log2_min_tb_size >= sps->log2_min_cb_size || sps->log2_min_tb_size < 2) {
  947.         av_log(avctx, AV_LOG_ERROR, "Invalid value for log2_min_tb_size");
  948.         return AVERROR_INVALIDDATA;
  949.     }
  950.  
  951.     if (log2_diff_max_min_transform_block_size < 0 || log2_diff_max_min_transform_block_size > 30) {
  952.         av_log(avctx, AV_LOG_ERROR, "Invalid value %d for log2_diff_max_min_transform_block_size", log2_diff_max_min_transform_block_size);
  953.         return AVERROR_INVALIDDATA;
  954.     }
  955.  
  956.     sps->max_transform_hierarchy_depth_inter = get_ue_golomb_long(gb);
  957.     sps->max_transform_hierarchy_depth_intra = get_ue_golomb_long(gb);
  958.  
  959.     sps->scaling_list_enable_flag = get_bits1(gb);
  960.     if (sps->scaling_list_enable_flag) {
  961.         set_default_scaling_list_data(&sps->scaling_list);
  962.  
  963.         if (get_bits1(gb)) {
  964.             ret = scaling_list_data(gb, avctx, &sps->scaling_list, sps);
  965.             if (ret < 0)
  966.                 return ret;
  967.         }
  968.     }
  969.  
  970.     sps->amp_enabled_flag = get_bits1(gb);
  971.     sps->sao_enabled      = get_bits1(gb);
  972.  
  973.     sps->pcm_enabled_flag = get_bits1(gb);
  974.     if (sps->pcm_enabled_flag) {
  975.         sps->pcm.bit_depth   = get_bits(gb, 4) + 1;
  976.         sps->pcm.bit_depth_chroma = get_bits(gb, 4) + 1;
  977.         sps->pcm.log2_min_pcm_cb_size = get_ue_golomb_long(gb) + 3;
  978.         sps->pcm.log2_max_pcm_cb_size = sps->pcm.log2_min_pcm_cb_size +
  979.                                         get_ue_golomb_long(gb);
  980.         if (sps->pcm.bit_depth > sps->bit_depth) {
  981.             av_log(avctx, AV_LOG_ERROR,
  982.                    "PCM bit depth (%d) is greater than normal bit depth (%d)\n",
  983.                    sps->pcm.bit_depth, sps->bit_depth);
  984.             return AVERROR_INVALIDDATA;
  985.         }
  986.  
  987.         sps->pcm.loop_filter_disable_flag = get_bits1(gb);
  988.     }
  989.  
  990.     sps->nb_st_rps = get_ue_golomb_long(gb);
  991.     if (sps->nb_st_rps > MAX_SHORT_TERM_RPS_COUNT) {
  992.         av_log(avctx, AV_LOG_ERROR, "Too many short term RPS: %d.\n",
  993.                sps->nb_st_rps);
  994.         return AVERROR_INVALIDDATA;
  995.     }
  996.     for (i = 0; i < sps->nb_st_rps; i++) {
  997.         if ((ret = ff_hevc_decode_short_term_rps(gb, avctx, &sps->st_rps[i],
  998.                                                  sps, 0)) < 0)
  999.             return ret;
  1000.     }
  1001.  
  1002.     sps->long_term_ref_pics_present_flag = get_bits1(gb);
  1003.     if (sps->long_term_ref_pics_present_flag) {
  1004.         sps->num_long_term_ref_pics_sps = get_ue_golomb_long(gb);
  1005.         if (sps->num_long_term_ref_pics_sps > 31U) {
  1006.             av_log(avctx, AV_LOG_ERROR, "num_long_term_ref_pics_sps %d is out of range.\n",
  1007.                    sps->num_long_term_ref_pics_sps);
  1008.             return AVERROR_INVALIDDATA;
  1009.         }
  1010.         for (i = 0; i < sps->num_long_term_ref_pics_sps; i++) {
  1011.             sps->lt_ref_pic_poc_lsb_sps[i]       = get_bits(gb, sps->log2_max_poc_lsb);
  1012.             sps->used_by_curr_pic_lt_sps_flag[i] = get_bits1(gb);
  1013.         }
  1014.     }
  1015.  
  1016.     sps->sps_temporal_mvp_enabled_flag          = get_bits1(gb);
  1017.     sps->sps_strong_intra_smoothing_enable_flag = get_bits1(gb);
  1018.     sps->vui.sar = (AVRational){0, 1};
  1019.     vui_present = get_bits1(gb);
  1020.     if (vui_present)
  1021.         decode_vui(gb, avctx, apply_defdispwin, sps);
  1022.  
  1023.     if (get_bits1(gb)) { // sps_extension_flag
  1024.         int sps_extension_flag[1];
  1025.         for (i = 0; i < 1; i++)
  1026.             sps_extension_flag[i] = get_bits1(gb);
  1027.         skip_bits(gb, 7); //sps_extension_7bits = get_bits(gb, 7);
  1028.         if (sps_extension_flag[0]) {
  1029.             int extended_precision_processing_flag;
  1030.             int high_precision_offsets_enabled_flag;
  1031.             int cabac_bypass_alignment_enabled_flag;
  1032.  
  1033.             sps->transform_skip_rotation_enabled_flag = get_bits1(gb);
  1034.             sps->transform_skip_context_enabled_flag  = get_bits1(gb);
  1035.             sps->implicit_rdpcm_enabled_flag = get_bits1(gb);
  1036.  
  1037.             sps->explicit_rdpcm_enabled_flag = get_bits1(gb);
  1038.  
  1039.             extended_precision_processing_flag = get_bits1(gb);
  1040.             if (extended_precision_processing_flag)
  1041.                 av_log(avctx, AV_LOG_WARNING,
  1042.                    "extended_precision_processing_flag not yet implemented\n");
  1043.  
  1044.             sps->intra_smoothing_disabled_flag       = get_bits1(gb);
  1045.             high_precision_offsets_enabled_flag  = get_bits1(gb);
  1046.             if (high_precision_offsets_enabled_flag)
  1047.                 av_log(avctx, AV_LOG_WARNING,
  1048.                    "high_precision_offsets_enabled_flag not yet implemented\n");
  1049.  
  1050.             sps->persistent_rice_adaptation_enabled_flag = get_bits1(gb);
  1051.  
  1052.             cabac_bypass_alignment_enabled_flag  = get_bits1(gb);
  1053.             if (cabac_bypass_alignment_enabled_flag)
  1054.                 av_log(avctx, AV_LOG_WARNING,
  1055.                    "cabac_bypass_alignment_enabled_flag not yet implemented\n");
  1056.         }
  1057.     }
  1058.     if (apply_defdispwin) {
  1059.         sps->output_window.left_offset   += sps->vui.def_disp_win.left_offset;
  1060.         sps->output_window.right_offset  += sps->vui.def_disp_win.right_offset;
  1061.         sps->output_window.top_offset    += sps->vui.def_disp_win.top_offset;
  1062.         sps->output_window.bottom_offset += sps->vui.def_disp_win.bottom_offset;
  1063.     }
  1064.     if (sps->output_window.left_offset & (0x1F >> (sps->pixel_shift)) &&
  1065.         !(avctx->flags & AV_CODEC_FLAG_UNALIGNED)) {
  1066.         sps->output_window.left_offset &= ~(0x1F >> (sps->pixel_shift));
  1067.         av_log(avctx, AV_LOG_WARNING, "Reducing left output window to %d "
  1068.                "chroma samples to preserve alignment.\n",
  1069.                sps->output_window.left_offset);
  1070.     }
  1071.     sps->output_width  = sps->width -
  1072.                          (sps->output_window.left_offset + sps->output_window.right_offset);
  1073.     sps->output_height = sps->height -
  1074.                          (sps->output_window.top_offset + sps->output_window.bottom_offset);
  1075.     if (sps->width  <= sps->output_window.left_offset + (int64_t)sps->output_window.right_offset  ||
  1076.         sps->height <= sps->output_window.top_offset  + (int64_t)sps->output_window.bottom_offset) {
  1077.         av_log(avctx, AV_LOG_WARNING, "Invalid visible frame dimensions: %dx%d.\n",
  1078.                sps->output_width, sps->output_height);
  1079.         if (avctx->err_recognition & AV_EF_EXPLODE) {
  1080.             return AVERROR_INVALIDDATA;
  1081.         }
  1082.         av_log(avctx, AV_LOG_WARNING,
  1083.                "Displaying the whole video surface.\n");
  1084.         memset(&sps->pic_conf_win, 0, sizeof(sps->pic_conf_win));
  1085.         memset(&sps->output_window, 0, sizeof(sps->output_window));
  1086.         sps->output_width               = sps->width;
  1087.         sps->output_height              = sps->height;
  1088.     }
  1089.  
  1090.     // Inferred parameters
  1091.     sps->log2_ctb_size = sps->log2_min_cb_size +
  1092.                          sps->log2_diff_max_min_coding_block_size;
  1093.     sps->log2_min_pu_size = sps->log2_min_cb_size - 1;
  1094.  
  1095.     if (sps->log2_ctb_size > MAX_LOG2_CTB_SIZE) {
  1096.         av_log(avctx, AV_LOG_ERROR, "CTB size out of range: 2^%d\n", sps->log2_ctb_size);
  1097.         return AVERROR_INVALIDDATA;
  1098.     }
  1099.     if (sps->log2_ctb_size < 4) {
  1100.         av_log(avctx,
  1101.                AV_LOG_ERROR,
  1102.                "log2_ctb_size %d differs from the bounds of any known profile\n",
  1103.                sps->log2_ctb_size);
  1104.         avpriv_request_sample(avctx, "log2_ctb_size %d", sps->log2_ctb_size);
  1105.         return AVERROR_INVALIDDATA;
  1106.     }
  1107.  
  1108.     sps->ctb_width  = (sps->width  + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
  1109.     sps->ctb_height = (sps->height + (1 << sps->log2_ctb_size) - 1) >> sps->log2_ctb_size;
  1110.     sps->ctb_size   = sps->ctb_width * sps->ctb_height;
  1111.  
  1112.     sps->min_cb_width  = sps->width  >> sps->log2_min_cb_size;
  1113.     sps->min_cb_height = sps->height >> sps->log2_min_cb_size;
  1114.     sps->min_tb_width  = sps->width  >> sps->log2_min_tb_size;
  1115.     sps->min_tb_height = sps->height >> sps->log2_min_tb_size;
  1116.     sps->min_pu_width  = sps->width  >> sps->log2_min_pu_size;
  1117.     sps->min_pu_height = sps->height >> sps->log2_min_pu_size;
  1118.     sps->tb_mask       = (1 << (sps->log2_ctb_size - sps->log2_min_tb_size)) - 1;
  1119.  
  1120.     sps->qp_bd_offset = 6 * (sps->bit_depth - 8);
  1121.  
  1122.     if (av_mod_uintp2(sps->width, sps->log2_min_cb_size) ||
  1123.         av_mod_uintp2(sps->height, sps->log2_min_cb_size)) {
  1124.         av_log(avctx, AV_LOG_ERROR, "Invalid coded frame dimensions.\n");
  1125.         return AVERROR_INVALIDDATA;
  1126.     }
  1127.  
  1128.     if (sps->max_transform_hierarchy_depth_inter > sps->log2_ctb_size - sps->log2_min_tb_size) {
  1129.         av_log(avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_inter out of range: %d\n",
  1130.                sps->max_transform_hierarchy_depth_inter);
  1131.         return AVERROR_INVALIDDATA;
  1132.     }
  1133.     if (sps->max_transform_hierarchy_depth_intra > sps->log2_ctb_size - sps->log2_min_tb_size) {
  1134.         av_log(avctx, AV_LOG_ERROR, "max_transform_hierarchy_depth_intra out of range: %d\n",
  1135.                sps->max_transform_hierarchy_depth_intra);
  1136.         return AVERROR_INVALIDDATA;
  1137.     }
  1138.     if (sps->log2_max_trafo_size > FFMIN(sps->log2_ctb_size, 5)) {
  1139.         av_log(avctx, AV_LOG_ERROR,
  1140.                "max transform block size out of range: %d\n",
  1141.                sps->log2_max_trafo_size);
  1142.         return AVERROR_INVALIDDATA;
  1143.     }
  1144.  
  1145.     if (get_bits_left(gb) < 0) {
  1146.         av_log(avctx, AV_LOG_ERROR,
  1147.                "Overread SPS by %d bits\n", -get_bits_left(gb));
  1148.         return AVERROR_INVALIDDATA;
  1149.     }
  1150.  
  1151.     return 0;
  1152. }
  1153.  
  1154. int ff_hevc_decode_nal_sps(GetBitContext *gb, AVCodecContext *avctx,
  1155.                            HEVCParamSets *ps, int apply_defdispwin)
  1156. {
  1157.     HEVCSPS *sps;
  1158.     AVBufferRef *sps_buf = av_buffer_allocz(sizeof(*sps));
  1159.     unsigned int sps_id;
  1160.     int ret;
  1161.  
  1162.     if (!sps_buf)
  1163.         return AVERROR(ENOMEM);
  1164.     sps = (HEVCSPS*)sps_buf->data;
  1165.  
  1166.     av_log(avctx, AV_LOG_DEBUG, "Decoding SPS\n");
  1167.  
  1168.     ret = ff_hevc_parse_sps(sps, gb, &sps_id,
  1169.                             apply_defdispwin,
  1170.                             ps->vps_list, avctx);
  1171.     if (ret < 0) {
  1172.         av_buffer_unref(&sps_buf);
  1173.         return ret;
  1174.     }
  1175.  
  1176.     if (avctx->debug & FF_DEBUG_BITSTREAM) {
  1177.         av_log(avctx, AV_LOG_DEBUG,
  1178.                "Parsed SPS: id %d; coded wxh: %dx%d; "
  1179.                "cropped wxh: %dx%d; pix_fmt: %s.\n",
  1180.                sps_id, sps->width, sps->height,
  1181.                sps->output_width, sps->output_height,
  1182.                av_get_pix_fmt_name(sps->pix_fmt));
  1183.     }
  1184.  
  1185.     /* check if this is a repeat of an already parsed SPS, then keep the
  1186.      * original one.
  1187.      * otherwise drop all PPSes that depend on it */
  1188.     if (ps->sps_list[sps_id] &&
  1189.         !memcmp(ps->sps_list[sps_id]->data, sps_buf->data, sps_buf->size)) {
  1190.         av_buffer_unref(&sps_buf);
  1191.     } else {
  1192.         remove_sps(ps, sps_id);
  1193.         ps->sps_list[sps_id] = sps_buf;
  1194.     }
  1195.  
  1196.     return 0;
  1197. }
  1198.  
  1199. static void hevc_pps_free(void *opaque, uint8_t *data)
  1200. {
  1201.     HEVCPPS *pps = (HEVCPPS*)data;
  1202.  
  1203.     av_freep(&pps->column_width);
  1204.     av_freep(&pps->row_height);
  1205.     av_freep(&pps->col_bd);
  1206.     av_freep(&pps->row_bd);
  1207.     av_freep(&pps->col_idxX);
  1208.     av_freep(&pps->ctb_addr_rs_to_ts);
  1209.     av_freep(&pps->ctb_addr_ts_to_rs);
  1210.     av_freep(&pps->tile_pos_rs);
  1211.     av_freep(&pps->tile_id);
  1212.     av_freep(&pps->min_tb_addr_zs_tab);
  1213.  
  1214.     av_freep(&pps);
  1215. }
  1216.  
  1217. static int pps_range_extensions(GetBitContext *gb, AVCodecContext *avctx,
  1218.                                 HEVCPPS *pps, HEVCSPS *sps) {
  1219.     int i;
  1220.  
  1221.     if (pps->transform_skip_enabled_flag) {
  1222.         pps->log2_max_transform_skip_block_size = get_ue_golomb_long(gb) + 2;
  1223.     }
  1224.     pps->cross_component_prediction_enabled_flag = get_bits1(gb);
  1225.     pps->chroma_qp_offset_list_enabled_flag = get_bits1(gb);
  1226.     if (pps->chroma_qp_offset_list_enabled_flag) {
  1227.         pps->diff_cu_chroma_qp_offset_depth = get_ue_golomb_long(gb);
  1228.         pps->chroma_qp_offset_list_len_minus1 = get_ue_golomb_long(gb);
  1229.         if (pps->chroma_qp_offset_list_len_minus1 && pps->chroma_qp_offset_list_len_minus1 >= 5) {
  1230.             av_log(avctx, AV_LOG_ERROR,
  1231.                    "chroma_qp_offset_list_len_minus1 shall be in the range [0, 5].\n");
  1232.             return AVERROR_INVALIDDATA;
  1233.         }
  1234.         for (i = 0; i <= pps->chroma_qp_offset_list_len_minus1; i++) {
  1235.             pps->cb_qp_offset_list[i] = get_se_golomb_long(gb);
  1236.             if (pps->cb_qp_offset_list[i]) {
  1237.                 av_log(avctx, AV_LOG_WARNING,
  1238.                        "cb_qp_offset_list not tested yet.\n");
  1239.             }
  1240.             pps->cr_qp_offset_list[i] = get_se_golomb_long(gb);
  1241.             if (pps->cr_qp_offset_list[i]) {
  1242.                 av_log(avctx, AV_LOG_WARNING,
  1243.                        "cb_qp_offset_list not tested yet.\n");
  1244.             }
  1245.         }
  1246.     }
  1247.     pps->log2_sao_offset_scale_luma = get_ue_golomb_long(gb);
  1248.     pps->log2_sao_offset_scale_chroma = get_ue_golomb_long(gb);
  1249.  
  1250.     return(0);
  1251. }
  1252.  
  1253. static inline int setup_pps(AVCodecContext *avctx, GetBitContext *gb,
  1254.                             HEVCPPS *pps, HEVCSPS *sps)
  1255. {
  1256.     int log2_diff;
  1257.     int pic_area_in_ctbs;
  1258.     int i, j, x, y, ctb_addr_rs, tile_id;
  1259.  
  1260.     // Inferred parameters
  1261.     pps->col_bd   = av_malloc_array(pps->num_tile_columns + 1, sizeof(*pps->col_bd));
  1262.     pps->row_bd   = av_malloc_array(pps->num_tile_rows + 1,    sizeof(*pps->row_bd));
  1263.     pps->col_idxX = av_malloc_array(sps->ctb_width,    sizeof(*pps->col_idxX));
  1264.     if (!pps->col_bd || !pps->row_bd || !pps->col_idxX)
  1265.         return AVERROR(ENOMEM);
  1266.  
  1267.     if (pps->uniform_spacing_flag) {
  1268.         if (!pps->column_width) {
  1269.             pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
  1270.             pps->row_height   = av_malloc_array(pps->num_tile_rows,    sizeof(*pps->row_height));
  1271.         }
  1272.         if (!pps->column_width || !pps->row_height)
  1273.             return AVERROR(ENOMEM);
  1274.  
  1275.         for (i = 0; i < pps->num_tile_columns; i++) {
  1276.             pps->column_width[i] = ((i + 1) * sps->ctb_width) / pps->num_tile_columns -
  1277.                                    (i * sps->ctb_width) / pps->num_tile_columns;
  1278.         }
  1279.  
  1280.         for (i = 0; i < pps->num_tile_rows; i++) {
  1281.             pps->row_height[i] = ((i + 1) * sps->ctb_height) / pps->num_tile_rows -
  1282.                                  (i * sps->ctb_height) / pps->num_tile_rows;
  1283.         }
  1284.     }
  1285.  
  1286.     pps->col_bd[0] = 0;
  1287.     for (i = 0; i < pps->num_tile_columns; i++)
  1288.         pps->col_bd[i + 1] = pps->col_bd[i] + pps->column_width[i];
  1289.  
  1290.     pps->row_bd[0] = 0;
  1291.     for (i = 0; i < pps->num_tile_rows; i++)
  1292.         pps->row_bd[i + 1] = pps->row_bd[i] + pps->row_height[i];
  1293.  
  1294.     for (i = 0, j = 0; i < sps->ctb_width; i++) {
  1295.         if (i > pps->col_bd[j])
  1296.             j++;
  1297.         pps->col_idxX[i] = j;
  1298.     }
  1299.  
  1300.     /**
  1301.      * 6.5
  1302.      */
  1303.     pic_area_in_ctbs     = sps->ctb_width    * sps->ctb_height;
  1304.  
  1305.     pps->ctb_addr_rs_to_ts = av_malloc_array(pic_area_in_ctbs,    sizeof(*pps->ctb_addr_rs_to_ts));
  1306.     pps->ctb_addr_ts_to_rs = av_malloc_array(pic_area_in_ctbs,    sizeof(*pps->ctb_addr_ts_to_rs));
  1307.     pps->tile_id           = av_malloc_array(pic_area_in_ctbs,    sizeof(*pps->tile_id));
  1308.     pps->min_tb_addr_zs_tab = av_malloc_array((sps->tb_mask+2) * (sps->tb_mask+2), sizeof(*pps->min_tb_addr_zs_tab));
  1309.     if (!pps->ctb_addr_rs_to_ts || !pps->ctb_addr_ts_to_rs ||
  1310.         !pps->tile_id || !pps->min_tb_addr_zs_tab) {
  1311.         return AVERROR(ENOMEM);
  1312.     }
  1313.  
  1314.     for (ctb_addr_rs = 0; ctb_addr_rs < pic_area_in_ctbs; ctb_addr_rs++) {
  1315.         int tb_x   = ctb_addr_rs % sps->ctb_width;
  1316.         int tb_y   = ctb_addr_rs / sps->ctb_width;
  1317.         int tile_x = 0;
  1318.         int tile_y = 0;
  1319.         int val    = 0;
  1320.  
  1321.         for (i = 0; i < pps->num_tile_columns; i++) {
  1322.             if (tb_x < pps->col_bd[i + 1]) {
  1323.                 tile_x = i;
  1324.                 break;
  1325.             }
  1326.         }
  1327.  
  1328.         for (i = 0; i < pps->num_tile_rows; i++) {
  1329.             if (tb_y < pps->row_bd[i + 1]) {
  1330.                 tile_y = i;
  1331.                 break;
  1332.             }
  1333.         }
  1334.  
  1335.         for (i = 0; i < tile_x; i++)
  1336.             val += pps->row_height[tile_y] * pps->column_width[i];
  1337.         for (i = 0; i < tile_y; i++)
  1338.             val += sps->ctb_width * pps->row_height[i];
  1339.  
  1340.         val += (tb_y - pps->row_bd[tile_y]) * pps->column_width[tile_x] +
  1341.                tb_x - pps->col_bd[tile_x];
  1342.  
  1343.         pps->ctb_addr_rs_to_ts[ctb_addr_rs] = val;
  1344.         pps->ctb_addr_ts_to_rs[val]         = ctb_addr_rs;
  1345.     }
  1346.  
  1347.     for (j = 0, tile_id = 0; j < pps->num_tile_rows; j++)
  1348.         for (i = 0; i < pps->num_tile_columns; i++, tile_id++)
  1349.             for (y = pps->row_bd[j]; y < pps->row_bd[j + 1]; y++)
  1350.                 for (x = pps->col_bd[i]; x < pps->col_bd[i + 1]; x++)
  1351.                     pps->tile_id[pps->ctb_addr_rs_to_ts[y * sps->ctb_width + x]] = tile_id;
  1352.  
  1353.     pps->tile_pos_rs = av_malloc_array(tile_id, sizeof(*pps->tile_pos_rs));
  1354.     if (!pps->tile_pos_rs)
  1355.         return AVERROR(ENOMEM);
  1356.  
  1357.     for (j = 0; j < pps->num_tile_rows; j++)
  1358.         for (i = 0; i < pps->num_tile_columns; i++)
  1359.             pps->tile_pos_rs[j * pps->num_tile_columns + i] =
  1360.                 pps->row_bd[j] * sps->ctb_width + pps->col_bd[i];
  1361.  
  1362.     log2_diff = sps->log2_ctb_size - sps->log2_min_tb_size;
  1363.     pps->min_tb_addr_zs = &pps->min_tb_addr_zs_tab[1*(sps->tb_mask+2)+1];
  1364.     for (y = 0; y < sps->tb_mask+2; y++) {
  1365.         pps->min_tb_addr_zs_tab[y*(sps->tb_mask+2)] = -1;
  1366.         pps->min_tb_addr_zs_tab[y]    = -1;
  1367.     }
  1368.     for (y = 0; y < sps->tb_mask+1; y++) {
  1369.         for (x = 0; x < sps->tb_mask+1; x++) {
  1370.             int tb_x = x >> log2_diff;
  1371.             int tb_y = y >> log2_diff;
  1372.             int rs   = sps->ctb_width * tb_y + tb_x;
  1373.             int val  = pps->ctb_addr_rs_to_ts[rs] << (log2_diff * 2);
  1374.             for (i = 0; i < log2_diff; i++) {
  1375.                 int m = 1 << i;
  1376.                 val += (m & x ? m * m : 0) + (m & y ? 2 * m * m : 0);
  1377.             }
  1378.             pps->min_tb_addr_zs[y * (sps->tb_mask+2) + x] = val;
  1379.         }
  1380.     }
  1381.  
  1382.     return 0;
  1383. }
  1384.  
  1385. int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx,
  1386.                            HEVCParamSets *ps)
  1387. {
  1388.     HEVCSPS      *sps = NULL;
  1389.     int i, ret = 0;
  1390.     unsigned int pps_id = 0;
  1391.  
  1392.     AVBufferRef *pps_buf;
  1393.     HEVCPPS *pps = av_mallocz(sizeof(*pps));
  1394.  
  1395.     if (!pps)
  1396.         return AVERROR(ENOMEM);
  1397.  
  1398.     pps_buf = av_buffer_create((uint8_t *)pps, sizeof(*pps),
  1399.                                hevc_pps_free, NULL, 0);
  1400.     if (!pps_buf) {
  1401.         av_freep(&pps);
  1402.         return AVERROR(ENOMEM);
  1403.     }
  1404.  
  1405.     av_log(avctx, AV_LOG_DEBUG, "Decoding PPS\n");
  1406.  
  1407.     // Default values
  1408.     pps->loop_filter_across_tiles_enabled_flag = 1;
  1409.     pps->num_tile_columns                      = 1;
  1410.     pps->num_tile_rows                         = 1;
  1411.     pps->uniform_spacing_flag                  = 1;
  1412.     pps->disable_dbf                           = 0;
  1413.     pps->beta_offset                           = 0;
  1414.     pps->tc_offset                             = 0;
  1415.     pps->log2_max_transform_skip_block_size    = 2;
  1416.  
  1417.     // Coded parameters
  1418.     pps_id = get_ue_golomb_long(gb);
  1419.     if (pps_id >= MAX_PPS_COUNT) {
  1420.         av_log(avctx, AV_LOG_ERROR, "PPS id out of range: %d\n", pps_id);
  1421.         ret = AVERROR_INVALIDDATA;
  1422.         goto err;
  1423.     }
  1424.     pps->sps_id = get_ue_golomb_long(gb);
  1425.     if (pps->sps_id >= MAX_SPS_COUNT) {
  1426.         av_log(avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", pps->sps_id);
  1427.         ret = AVERROR_INVALIDDATA;
  1428.         goto err;
  1429.     }
  1430.     if (!ps->sps_list[pps->sps_id]) {
  1431.         av_log(avctx, AV_LOG_ERROR, "SPS %u does not exist.\n", pps->sps_id);
  1432.         ret = AVERROR_INVALIDDATA;
  1433.         goto err;
  1434.     }
  1435.     sps = (HEVCSPS *)ps->sps_list[pps->sps_id]->data;
  1436.  
  1437.     pps->dependent_slice_segments_enabled_flag = get_bits1(gb);
  1438.     pps->output_flag_present_flag              = get_bits1(gb);
  1439.     pps->num_extra_slice_header_bits           = get_bits(gb, 3);
  1440.  
  1441.     pps->sign_data_hiding_flag = get_bits1(gb);
  1442.  
  1443.     pps->cabac_init_present_flag = get_bits1(gb);
  1444.  
  1445.     pps->num_ref_idx_l0_default_active = get_ue_golomb_long(gb) + 1;
  1446.     pps->num_ref_idx_l1_default_active = get_ue_golomb_long(gb) + 1;
  1447.  
  1448.     pps->pic_init_qp_minus26 = get_se_golomb(gb);
  1449.  
  1450.     pps->constrained_intra_pred_flag = get_bits1(gb);
  1451.     pps->transform_skip_enabled_flag = get_bits1(gb);
  1452.  
  1453.     pps->cu_qp_delta_enabled_flag = get_bits1(gb);
  1454.     pps->diff_cu_qp_delta_depth   = 0;
  1455.     if (pps->cu_qp_delta_enabled_flag)
  1456.         pps->diff_cu_qp_delta_depth = get_ue_golomb_long(gb);
  1457.  
  1458.     if (pps->diff_cu_qp_delta_depth < 0 ||
  1459.         pps->diff_cu_qp_delta_depth > sps->log2_diff_max_min_coding_block_size) {
  1460.         av_log(avctx, AV_LOG_ERROR, "diff_cu_qp_delta_depth %d is invalid\n",
  1461.                pps->diff_cu_qp_delta_depth);
  1462.         ret = AVERROR_INVALIDDATA;
  1463.         goto err;
  1464.     }
  1465.  
  1466.     pps->cb_qp_offset = get_se_golomb(gb);
  1467.     if (pps->cb_qp_offset < -12 || pps->cb_qp_offset > 12) {
  1468.         av_log(avctx, AV_LOG_ERROR, "pps_cb_qp_offset out of range: %d\n",
  1469.                pps->cb_qp_offset);
  1470.         ret = AVERROR_INVALIDDATA;
  1471.         goto err;
  1472.     }
  1473.     pps->cr_qp_offset = get_se_golomb(gb);
  1474.     if (pps->cr_qp_offset < -12 || pps->cr_qp_offset > 12) {
  1475.         av_log(avctx, AV_LOG_ERROR, "pps_cr_qp_offset out of range: %d\n",
  1476.                pps->cr_qp_offset);
  1477.         ret = AVERROR_INVALIDDATA;
  1478.         goto err;
  1479.     }
  1480.     pps->pic_slice_level_chroma_qp_offsets_present_flag = get_bits1(gb);
  1481.  
  1482.     pps->weighted_pred_flag   = get_bits1(gb);
  1483.     pps->weighted_bipred_flag = get_bits1(gb);
  1484.  
  1485.     pps->transquant_bypass_enable_flag    = get_bits1(gb);
  1486.     pps->tiles_enabled_flag               = get_bits1(gb);
  1487.     pps->entropy_coding_sync_enabled_flag = get_bits1(gb);
  1488.  
  1489.     if (pps->tiles_enabled_flag) {
  1490.         pps->num_tile_columns = get_ue_golomb_long(gb) + 1;
  1491.         pps->num_tile_rows    = get_ue_golomb_long(gb) + 1;
  1492.         if (pps->num_tile_columns <= 0 ||
  1493.             pps->num_tile_columns >= sps->width) {
  1494.             av_log(avctx, AV_LOG_ERROR, "num_tile_columns_minus1 out of range: %d\n",
  1495.                    pps->num_tile_columns - 1);
  1496.             ret = AVERROR_INVALIDDATA;
  1497.             goto err;
  1498.         }
  1499.         if (pps->num_tile_rows <= 0 ||
  1500.             pps->num_tile_rows >= sps->height) {
  1501.             av_log(avctx, AV_LOG_ERROR, "num_tile_rows_minus1 out of range: %d\n",
  1502.                    pps->num_tile_rows - 1);
  1503.             ret = AVERROR_INVALIDDATA;
  1504.             goto err;
  1505.         }
  1506.  
  1507.         pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
  1508.         pps->row_height   = av_malloc_array(pps->num_tile_rows,    sizeof(*pps->row_height));
  1509.         if (!pps->column_width || !pps->row_height) {
  1510.             ret = AVERROR(ENOMEM);
  1511.             goto err;
  1512.         }
  1513.  
  1514.         pps->uniform_spacing_flag = get_bits1(gb);
  1515.         if (!pps->uniform_spacing_flag) {
  1516.             uint64_t sum = 0;
  1517.             for (i = 0; i < pps->num_tile_columns - 1; i++) {
  1518.                 pps->column_width[i] = get_ue_golomb_long(gb) + 1;
  1519.                 sum                 += pps->column_width[i];
  1520.             }
  1521.             if (sum >= sps->ctb_width) {
  1522.                 av_log(avctx, AV_LOG_ERROR, "Invalid tile widths.\n");
  1523.                 ret = AVERROR_INVALIDDATA;
  1524.                 goto err;
  1525.             }
  1526.             pps->column_width[pps->num_tile_columns - 1] = sps->ctb_width - sum;
  1527.  
  1528.             sum = 0;
  1529.             for (i = 0; i < pps->num_tile_rows - 1; i++) {
  1530.                 pps->row_height[i] = get_ue_golomb_long(gb) + 1;
  1531.                 sum               += pps->row_height[i];
  1532.             }
  1533.             if (sum >= sps->ctb_height) {
  1534.                 av_log(avctx, AV_LOG_ERROR, "Invalid tile heights.\n");
  1535.                 ret = AVERROR_INVALIDDATA;
  1536.                 goto err;
  1537.             }
  1538.             pps->row_height[pps->num_tile_rows - 1] = sps->ctb_height - sum;
  1539.         }
  1540.         pps->loop_filter_across_tiles_enabled_flag = get_bits1(gb);
  1541.     }
  1542.  
  1543.     pps->seq_loop_filter_across_slices_enabled_flag = get_bits1(gb);
  1544.  
  1545.     pps->deblocking_filter_control_present_flag = get_bits1(gb);
  1546.     if (pps->deblocking_filter_control_present_flag) {
  1547.         pps->deblocking_filter_override_enabled_flag = get_bits1(gb);
  1548.         pps->disable_dbf                             = get_bits1(gb);
  1549.         if (!pps->disable_dbf) {
  1550.             pps->beta_offset = get_se_golomb(gb) * 2;
  1551.             pps->tc_offset = get_se_golomb(gb) * 2;
  1552.             if (pps->beta_offset/2 < -6 || pps->beta_offset/2 > 6) {
  1553.                 av_log(avctx, AV_LOG_ERROR, "pps_beta_offset_div2 out of range: %d\n",
  1554.                        pps->beta_offset/2);
  1555.                 ret = AVERROR_INVALIDDATA;
  1556.                 goto err;
  1557.             }
  1558.             if (pps->tc_offset/2 < -6 || pps->tc_offset/2 > 6) {
  1559.                 av_log(avctx, AV_LOG_ERROR, "pps_tc_offset_div2 out of range: %d\n",
  1560.                        pps->tc_offset/2);
  1561.                 ret = AVERROR_INVALIDDATA;
  1562.                 goto err;
  1563.             }
  1564.         }
  1565.     }
  1566.  
  1567.     pps->scaling_list_data_present_flag = get_bits1(gb);
  1568.     if (pps->scaling_list_data_present_flag) {
  1569.         set_default_scaling_list_data(&pps->scaling_list);
  1570.         ret = scaling_list_data(gb, avctx, &pps->scaling_list, sps);
  1571.         if (ret < 0)
  1572.             goto err;
  1573.     }
  1574.     pps->lists_modification_present_flag = get_bits1(gb);
  1575.     pps->log2_parallel_merge_level       = get_ue_golomb_long(gb) + 2;
  1576.     if (pps->log2_parallel_merge_level > sps->log2_ctb_size) {
  1577.         av_log(avctx, AV_LOG_ERROR, "log2_parallel_merge_level_minus2 out of range: %d\n",
  1578.                pps->log2_parallel_merge_level - 2);
  1579.         ret = AVERROR_INVALIDDATA;
  1580.         goto err;
  1581.     }
  1582.  
  1583.     pps->slice_header_extension_present_flag = get_bits1(gb);
  1584.  
  1585.     if (get_bits1(gb)) { // pps_extension_present_flag
  1586.         int pps_range_extensions_flag = get_bits1(gb);
  1587.         /* int pps_extension_7bits = */ get_bits(gb, 7);
  1588.         if (sps->ptl.general_ptl.profile_idc == FF_PROFILE_HEVC_REXT && pps_range_extensions_flag) {
  1589.             if ((ret = pps_range_extensions(gb, avctx, pps, sps)) < 0)
  1590.                 goto err;
  1591.         }
  1592.     }
  1593.  
  1594.     ret = setup_pps(avctx, gb, pps, sps);
  1595.     if (ret < 0)
  1596.         goto err;
  1597.  
  1598.     if (get_bits_left(gb) < 0) {
  1599.         av_log(avctx, AV_LOG_ERROR,
  1600.                "Overread PPS by %d bits\n", -get_bits_left(gb));
  1601.         goto err;
  1602.     }
  1603.  
  1604.     remove_pps(ps, pps_id);
  1605.     ps->pps_list[pps_id] = pps_buf;
  1606.  
  1607.     return 0;
  1608.  
  1609. err:
  1610.     av_buffer_unref(&pps_buf);
  1611.     return ret;
  1612. }
  1613.