26 #include "config_components.h" 
   61 static const uint8_t 
hevc_pel_weight[65] = { [2] = 0, [4] = 1, [6] = 2, [8] = 3, [12] = 4, [16] = 5, [24] = 6, [32] = 7, [48] = 8, [64] = 9 };
 
   92     for (
int i = 0; 
i < 3; 
i++) {
 
  104     int log2_min_cb_size = 
sps->log2_min_cb_size;
 
  107     int pic_size_in_ctb  = ((
width  >> log2_min_cb_size) + 1) *
 
  108                            ((
height >> log2_min_cb_size) + 1);
 
  109     int ctb_count        = 
sps->ctb_width * 
sps->ctb_height;
 
  110     int min_pu_size      = 
sps->min_pu_width * 
sps->min_pu_height;
 
  149     if (
sps->sao_enabled) {
 
  150         int c_count = (
sps->chroma_format_idc != 0) ? 3 : 1;
 
  152         for (
int c_idx = 0; c_idx < c_count; c_idx++) {
 
  153             int w = 
sps->width >> 
sps->hshift[c_idx];
 
  154             int h = 
sps->height >> 
sps->vshift[c_idx];
 
  179     int luma_log2_weight_denom;
 
  180     unsigned luma_weight_flags, chroma_weight_flags;
 
  183     if (luma_log2_weight_denom < 0 || luma_log2_weight_denom > 7) {
 
  184         av_log(logctx, 
AV_LOG_ERROR, 
"luma_log2_weight_denom %d is invalid\n", luma_log2_weight_denom);
 
  188     if (
sps->chroma_format_idc != 0) {
 
  190         if (chroma_log2_weight_denom < 0 || chroma_log2_weight_denom > 7) {
 
  191             av_log(logctx, 
AV_LOG_ERROR, 
"chroma_log2_weight_denom %"PRId64
" is invalid\n", chroma_log2_weight_denom);
 
  200         unsigned flag_bit = 1 << (sh->
nb_refs[
L0] - 1 - 
i);
 
  202         if (luma_weight_flags & flag_bit) {
 
  204             if ((int8_t)delta_luma_weight_l0 != delta_luma_weight_l0)
 
  212         if (chroma_weight_flags & flag_bit) {
 
  213             for (j = 0; j < 2; j++) {
 
  217                 if (   (int8_t)delta_chroma_weight_l0 != delta_chroma_weight_l0
 
  218                     || delta_chroma_offset_l0 < -(1<<17) || delta_chroma_offset_l0 > (1<<17)) {
 
  237             unsigned flag_bit = 1 << (sh->
nb_refs[
L1] - 1 - 
i);
 
  239             if (luma_weight_flags & flag_bit) {
 
  241                 if ((int8_t)delta_luma_weight_l1 != delta_luma_weight_l1)
 
  249             if (chroma_weight_flags & flag_bit) {
 
  250                 for (j = 0; j < 2; j++) {
 
  254                     if (   (int8_t)delta_chroma_weight_l1 != delta_chroma_weight_l1
 
  255                         || delta_chroma_offset_l1 < -(1<<17) || delta_chroma_offset_l1 > (1<<17)) {
 
  277     int max_poc_lsb    = 1 << 
sps->log2_max_poc_lsb;
 
  278     int prev_delta_msb = 0;
 
  279     unsigned int nb_sps = 0, nb_sh;
 
  283     if (!
sps->long_term_ref_pics_present)
 
  286     if (
sps->num_long_term_ref_pics_sps > 0)
 
  290     if (nb_sps > 
sps->num_long_term_ref_pics_sps)
 
  300             uint8_t lt_idx_sps = 0;
 
  302             if (
sps->num_long_term_ref_pics_sps > 1)
 
  305             rps->
poc[
i]  = 
sps->lt_ref_pic_poc_lsb_sps[lt_idx_sps];
 
  306             rps->
used[
i] = !!(
sps->used_by_curr_pic_lt & (1
U << lt_idx_sps));
 
  317             if (
i && 
i != nb_sps)
 
  318                 delta += prev_delta_msb;
 
  320             poc = rps->
poc[
i] + cur_poc - 
delta * max_poc_lsb - poc_lsb;
 
  324             prev_delta_msb = 
delta;
 
  336     unsigned int num = 0, den = 0;
 
  344     avctx->
profile             = 
sps->ptl.general_ptl.profile_idc;
 
  345     avctx->
level               = 
sps->ptl.general_ptl.level_idc;
 
  349     if (
sps->vui.common.video_signal_type_present_flag)
 
  355     if (
sps->vui.common.colour_description_present_flag) {
 
  357         avctx->
color_trc       = 
sps->vui.common.transfer_characteristics;
 
  366     if (
sps->chroma_format_idc == 1) {
 
  367         if (
sps->vui.common.chroma_loc_info_present_flag) {
 
  368             if (
sps->vui.common.chroma_sample_loc_type_top_field <= 5)
 
  374     if (
vps->vps_timing_info_present_flag) {
 
  375         num = 
vps->vps_num_units_in_tick;
 
  376         den = 
vps->vps_time_scale;
 
  377     } 
else if (
sps->vui.vui_timing_info_present_flag) {
 
  378         num = 
sps->vui.vui_num_units_in_tick;
 
  379         den = 
sps->vui.vui_time_scale;
 
  382     if (num > 0 && den > 0)
 
  391 #if FF_API_CODEC_PROPS 
  393     if (
s->sei.common.a53_caption.buf_ref)
 
  398     if (
s->sei.common.alternative_transfer.present &&
 
  401         avctx->
color_trc = 
s->sei.common.alternative_transfer.preferred_transfer_characteristics;
 
  404 #if FF_API_CODEC_PROPS 
  406     if ((
s->sei.common.film_grain_characteristics && 
s->sei.common.film_grain_characteristics->present) ||
 
  407         s->sei.common.aom_film_grain.enable)
 
  420     s->nb_view_ids_available = 0;
 
  422     s->nb_view_pos_available = 0;
 
  425     if (
vps->nb_layers < 2 && !
vps->view_id[0])
 
  428     s->view_ids_available = 
av_calloc(
vps->nb_layers, 
sizeof(*
s->view_ids_available));
 
  429     if (!
s->view_ids_available)
 
  433         s->view_pos_available = 
av_calloc(
vps->nb_layers, 
sizeof(*
s->view_pos_available));
 
  434         if (!
s->view_pos_available)
 
  438     for (
int i = 0; 
i < 
vps->nb_layers; 
i++) {
 
  439         s->view_ids_available[
i] = 
vps->view_id[
i];
 
  441         if (
s->view_pos_available) {
 
  448     s->nb_view_ids_available = 
vps->nb_layers;
 
  449     s->nb_view_pos_available = 
s->view_pos_available ? 
vps->nb_layers : 0;
 
  459     if (
vps->nb_layers != 2 || !
vps->layer_id_in_nuh[1])
 
  475     unsigned layers_active_output = 0, highest_layer;
 
  477     s->layers_active_output = 1;
 
  478     s->layers_active_decode = 1;
 
  486         s->layers_active_decode = (1 << 
vps->nb_layers) - 1;
 
  487         s->layers_active_output = 1;
 
  496     if (
s->nb_view_ids == 1 && 
s->view_ids[0] == -1) {
 
  497         layers_active_output = (1 << 
vps->nb_layers) - 1;
 
  499         for (
int i = 0; 
i < 
s->nb_view_ids; 
i++) {
 
  500             int view_id   = 
s->view_ids[
i];
 
  505                        "Invalid view ID requested: %d\n", view_id);
 
  509             for (
int j = 0; j < 
vps->nb_layers; j++) {
 
  510                 if (
vps->view_id[j] == view_id) {
 
  517                        "View ID %d not present in VPS\n", view_id);
 
  520             layers_active_output |= 1 << layer_idx;
 
  524     if (!layers_active_output) {
 
  529     highest_layer = 
ff_log2(layers_active_output);
 
  532                "Too many layers requested: %u\n", layers_active_output);
 
  540     s->layers_active_decode = (1 << (highest_layer + 1)) - 1;
 
  541     s->layers_active_output = layers_active_output;
 
  544            s->layers_active_decode, 
s->layers_active_output);
 
  579 #define HWACCEL_MAX (CONFIG_HEVC_DXVA2_HWACCEL + \ 
  580                      CONFIG_HEVC_D3D11VA_HWACCEL * 2 + \ 
  581                      CONFIG_HEVC_D3D12VA_HWACCEL + \ 
  582                      CONFIG_HEVC_NVDEC_HWACCEL + \ 
  583                      CONFIG_HEVC_VAAPI_HWACCEL + \ 
  584                      CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL + \ 
  585                      CONFIG_HEVC_VDPAU_HWACCEL + \ 
  586                      CONFIG_HEVC_VULKAN_HWACCEL) 
  594     switch (
sps->pix_fmt) {
 
  597 #if CONFIG_HEVC_DXVA2_HWACCEL 
  600 #if CONFIG_HEVC_D3D11VA_HWACCEL 
  604 #if CONFIG_HEVC_D3D12VA_HWACCEL 
  607 #if CONFIG_HEVC_VAAPI_HWACCEL 
  610 #if CONFIG_HEVC_VDPAU_HWACCEL 
  613 #if CONFIG_HEVC_NVDEC_HWACCEL 
  616 #if CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 
  619 #if CONFIG_HEVC_VULKAN_HWACCEL 
  624 #if CONFIG_HEVC_DXVA2_HWACCEL 
  627 #if CONFIG_HEVC_D3D11VA_HWACCEL 
  631 #if CONFIG_HEVC_D3D12VA_HWACCEL 
  634 #if CONFIG_HEVC_VAAPI_HWACCEL 
  637 #if CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 
  640 #if CONFIG_HEVC_VULKAN_HWACCEL 
  643 #if CONFIG_HEVC_VDPAU_HWACCEL 
  646 #if CONFIG_HEVC_NVDEC_HWACCEL 
  651 #if CONFIG_HEVC_VAAPI_HWACCEL 
  654 #if CONFIG_HEVC_VDPAU_HWACCEL 
  657 #if CONFIG_HEVC_NVDEC_HWACCEL 
  660 #if CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 
  663 #if CONFIG_HEVC_VULKAN_HWACCEL 
  669 #if CONFIG_HEVC_VAAPI_HWACCEL 
  672 #if CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 
  675 #if CONFIG_HEVC_VULKAN_HWACCEL 
  678 #if CONFIG_HEVC_NVDEC_HWACCEL 
  683 #if CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 
  689 #if CONFIG_HEVC_VAAPI_HWACCEL 
  692 #if CONFIG_HEVC_VDPAU_HWACCEL 
  695 #if CONFIG_HEVC_VULKAN_HWACCEL 
  698 #if CONFIG_HEVC_NVDEC_HWACCEL 
  703 #if CONFIG_HEVC_VAAPI_HWACCEL 
  706 #if CONFIG_HEVC_VULKAN_HWACCEL 
  709 #if CONFIG_HEVC_NVDEC_HWACCEL 
  717     *fmt++ = 
sps->pix_fmt;
 
  729     s->avctx->pix_fmt = 
ret;
 
  774     unsigned pps_id, layer_idx;
 
  795     pps = 
s->ps.pps_list[pps_id];
 
  798     layer_idx = 
vps->layer_idx[
s->nuh_layer_id];
 
  805         int slice_address_length;
 
  807         if (
pps->dependent_slice_segments_enabled_flag)
 
  819                    "Invalid slice segment address: %u.\n",
 
  832         for (
i = 0; 
i < 
pps->num_extra_slice_header_bits; 
i++)
 
  844             !
pps->pps_curr_pic_ref_enabled_flag &&
 
  845             s->nuh_layer_id == 0) {
 
  852         if (
pps->output_flag_present_flag)
 
  855         if (
sps->separate_colour_plane)
 
  859             (
s->nuh_layer_id > 0 &&
 
  860              !(
vps->poc_lsb_not_present & (1 << layer_idx)))) {
 
  867                        "Ignoring POC change between slices: %d -> %d\n", poc, sh->
poc);
 
  887                 int numbits, rps_idx;
 
  889                 if (!
sps->nb_st_rps) {
 
  895                 rps_idx = numbits > 0 ? 
get_bits(gb, numbits) : 0;
 
  909             if (
sps->temporal_mvp_enabled)
 
  924         if (
s->nuh_layer_id > 0) {
 
  925             int num_direct_ref_layers = 
vps->num_direct_ref_layers[layer_idx];
 
  927             if (
vps->default_ref_layers_active)
 
  929             else if (num_direct_ref_layers) {
 
  934                            "NumDirectRefLayers>1 not supported\n");
 
  940         if (
sps->sao_enabled) {
 
  942             if (
sps->chroma_format_idc) {
 
  979             if (
pps->lists_modification_present_flag && nb_refs > 1) {
 
  997             if (
pps->cabac_init_present_flag)
 
 1012                                "Invalid collocated_ref_idx: %d.\n",
 
 1029                        "Invalid number of merging MVP candidates: %d.\n",
 
 1035             if (
sps->motion_vector_resolution_control_idc == 2)
 
 1045         if (
pps->pic_slice_level_chroma_qp_offsets_present_flag) {
 
 1058         if (
pps->pps_slice_act_qp_offsets_present_flag) {
 
 1064         if (
pps->chroma_qp_offset_list_enabled_flag)
 
 1069         if (
pps->deblocking_filter_control_present_flag) {
 
 1070             int deblocking_filter_override_flag = 0;
 
 1072             if (
pps->deblocking_filter_override_enabled_flag)
 
 1073                 deblocking_filter_override_flag = 
get_bits1(gb);
 
 1075             if (deblocking_filter_override_flag) {
 
 1080                     if (beta_offset_div2 < -6 || beta_offset_div2 > 6 ||
 
 1081                         tc_offset_div2   < -6 || tc_offset_div2   > 6) {
 
 1083                             "Invalid deblock filter offsets: %d, %d\n",
 
 1084                             beta_offset_div2, tc_offset_div2);
 
 1101         if (
pps->seq_loop_filter_across_slices_enabled_flag &&
 
 1112     if (
pps->tiles_enabled_flag || 
pps->entropy_coding_sync_enabled_flag) {
 
 1115         if (num_entry_point_offsets > 
get_bits_left(gb) || num_entry_point_offsets > UINT16_MAX) {
 
 1116             av_log(
s->avctx, 
AV_LOG_ERROR, 
"num_entry_point_offsets %d is invalid\n", num_entry_point_offsets);
 
 1124             if (offset_len < 1 || offset_len > 32) {
 
 1148     if (
pps->slice_header_extension_present_flag) {
 
 1154         for (
i = 0; 
i < length; 
i++)
 
 1176                "The slice_qp %d is outside the valid range " 
 1179                -
sps->qp_bd_offset);
 
 1194 #define CTB(tab, x, y) ((tab)[(y) * sps->ctb_width + (x)]) 
 1196 #define SET_SAO(elem, value)                            \ 
 1198     if (!sao_merge_up_flag && !sao_merge_left_flag)     \ 
 1199         sao->elem = value;                              \ 
 1200     else if (sao_merge_left_flag)                       \ 
 1201         sao->elem = CTB(l->sao, rx-1, ry).elem;         \ 
 1202     else if (sao_merge_up_flag)                         \ 
 1203         sao->elem = CTB(l->sao, rx, ry-1).elem;         \ 
 1213     int sao_merge_left_flag = 0;
 
 1214     int sao_merge_up_flag   = 0;
 
 1218     if (
s->sh.slice_sample_adaptive_offset_flag[0] ||
 
 1219         s->sh.slice_sample_adaptive_offset_flag[1]) {
 
 1224         if (ry > 0 && !sao_merge_left_flag) {
 
 1230     for (c_idx = 0; c_idx < (
sps->chroma_format_idc ? 3 : 1); c_idx++) {
 
 1231         int log2_sao_offset_scale = c_idx == 0 ? 
pps->log2_sao_offset_scale_luma :
 
 1232                                                  pps->log2_sao_offset_scale_chroma;
 
 1234         if (!
s->sh.slice_sample_adaptive_offset_flag[c_idx]) {
 
 1249         for (
i = 0; 
i < 4; 
i++)
 
 1253             for (
i = 0; 
i < 4; 
i++) {
 
 1262         } 
else if (c_idx != 2) {
 
 1268         for (
i = 0; 
i < 4; 
i++) {
 
 1276             sao->
offset_val[c_idx][
i + 1] *= 1 << log2_sao_offset_scale;
 
 1288     if (log2_res_scale_abs_plus1 !=  0) {
 
 1291                                (1 - 2 * res_scale_sign_flag);
 
 1304                               int xBase, 
int yBase, 
int cb_xBase, 
int cb_yBase,
 
 1305                               int log2_cb_size, 
int log2_trafo_size,
 
 1306                               int blk_idx, 
int cbf_luma, 
int *cbf_cb, 
int *cbf_cr)
 
 1309     const int log2_trafo_size_c = log2_trafo_size - 
sps->hshift[1];
 
 1313         int trafo_size = 1 << log2_trafo_size;
 
 1316         s->hpc.intra_pred[log2_trafo_size - 2](lc, 
pps, x0, y0, 0);
 
 1319     if (cbf_luma || cbf_cb[0] || cbf_cr[0] ||
 
 1320         (
sps->chroma_format_idc == 2 && (cbf_cb[1] || cbf_cr[1]))) {
 
 1323         int cbf_chroma = cbf_cb[0] || cbf_cr[0] ||
 
 1324                          (
sps->chroma_format_idc == 2 &&
 
 1325                          (cbf_cb[1] || cbf_cr[1]));
 
 1337                        "The cu_qp_delta %d is outside the valid range " 
 1340                        -(26 + 
sps->qp_bd_offset / 2),
 
 1341                         (25 + 
sps->qp_bd_offset / 2));
 
 1348         if (
s->sh.cu_chroma_qp_offset_enabled_flag && cbf_chroma &&
 
 1351             if (cu_chroma_qp_offset_flag) {
 
 1352                 int cu_chroma_qp_offset_idx  = 0;
 
 1353                 if (
pps->chroma_qp_offset_list_len_minus1 > 0) {
 
 1356                         "cu_chroma_qp_offset_idx not yet tested.\n");
 
 1389         if (
sps->chroma_format_idc && (log2_trafo_size > 2 || 
sps->chroma_format_idc == 3)) {
 
 1390             int trafo_size_h = 1 << (log2_trafo_size_c + 
sps->hshift[1]);
 
 1391             int trafo_size_v = 1 << (log2_trafo_size_c + 
sps->vshift[1]);
 
 1392             lc->
tu.
cross_pf  = (
pps->cross_component_prediction_enabled_flag && cbf_luma &&
 
 1399             for (
i = 0; 
i < (
sps->chroma_format_idc == 2 ? 2 : 1); 
i++) {
 
 1402                                                     trafo_size_h, trafo_size_v, 
sps->log2_ctb_size);
 
 1403                     s->hpc.intra_pred[log2_trafo_size_c - 2](lc, 
pps, x0, y0 + (
i << log2_trafo_size_c), 1);
 
 1407                                                 log2_trafo_size_c, scan_idx_c, 1);
 
 1410                         ptrdiff_t 
stride = 
s->cur_frame->f->linesize[1];
 
 1411                         int hshift = 
sps->hshift[1];
 
 1412                         int vshift = 
sps->vshift[1];
 
 1415                         int size = 1 << log2_trafo_size_c;
 
 1417                         uint8_t *
dst = &
s->cur_frame->f->data[1][(y0 >> vshift) * 
stride +
 
 1418                                                               ((x0 >> hshift) << 
sps->pixel_shift)];
 
 1422                         s->hevcdsp.add_residual[log2_trafo_size_c-2](
dst, coeffs, 
stride);
 
 1429             for (
i = 0; 
i < (
sps->chroma_format_idc == 2 ? 2 : 1); 
i++) {
 
 1432                                                     trafo_size_h, trafo_size_v, 
sps->log2_ctb_size);
 
 1433                     s->hpc.intra_pred[log2_trafo_size_c - 2](lc, 
pps, x0, y0 + (
i << log2_trafo_size_c), 2);
 
 1437                                                 log2_trafo_size_c, scan_idx_c, 2);
 
 1440                         ptrdiff_t 
stride = 
s->cur_frame->f->linesize[2];
 
 1441                         int hshift = 
sps->hshift[2];
 
 1442                         int vshift = 
sps->vshift[2];
 
 1445                         int size = 1 << log2_trafo_size_c;
 
 1447                         uint8_t *
dst = &
s->cur_frame->f->data[2][(y0 >> vshift) * 
stride +
 
 1448                                                           ((x0 >> hshift) << 
sps->pixel_shift)];
 
 1452                         s->hevcdsp.add_residual[log2_trafo_size_c-2](
dst, coeffs, 
stride);
 
 1455         } 
else if (
sps->chroma_format_idc && blk_idx == 3) {
 
 1456             int trafo_size_h = 1 << (log2_trafo_size + 1);
 
 1457             int trafo_size_v = 1 << (log2_trafo_size + 
sps->vshift[1]);
 
 1458             for (
i = 0; 
i < (
sps->chroma_format_idc == 2 ? 2 : 1); 
i++) {
 
 1461                                                     trafo_size_h, trafo_size_v, 
sps->log2_ctb_size);
 
 1462                     s->hpc.intra_pred[log2_trafo_size - 2](lc, 
pps, xBase, yBase + (
i << log2_trafo_size), 1);
 
 1466                                                 log2_trafo_size, scan_idx_c, 1);
 
 1468             for (
i = 0; 
i < (
sps->chroma_format_idc == 2 ? 2 : 1); 
i++) {
 
 1471                                                 trafo_size_h, trafo_size_v, 
sps->log2_ctb_size);
 
 1472                     s->hpc.intra_pred[log2_trafo_size - 2](lc, 
pps, xBase, yBase + (
i << log2_trafo_size), 2);
 
 1476                                                 log2_trafo_size, scan_idx_c, 2);
 
 1480         if (log2_trafo_size > 2 || 
sps->chroma_format_idc == 3) {
 
 1481             int trafo_size_h = 1 << (log2_trafo_size_c + 
sps->hshift[1]);
 
 1482             int trafo_size_v = 1 << (log2_trafo_size_c + 
sps->vshift[1]);
 
 1484                                             sps->log2_ctb_size);
 
 1485             s->hpc.intra_pred[log2_trafo_size_c - 2](lc, 
pps, x0, y0, 1);
 
 1486             s->hpc.intra_pred[log2_trafo_size_c - 2](lc, 
pps, x0, y0, 2);
 
 1487             if (
sps->chroma_format_idc == 2) {
 
 1489                                                 trafo_size_h, trafo_size_v, 
sps->log2_ctb_size);
 
 1490                 s->hpc.intra_pred[log2_trafo_size_c - 2](lc, 
pps, x0, y0 + (1 << log2_trafo_size_c), 1);
 
 1491                 s->hpc.intra_pred[log2_trafo_size_c - 2](lc, 
pps, x0, y0 + (1 << log2_trafo_size_c), 2);
 
 1493         } 
else if (blk_idx == 3) {
 
 1494             int trafo_size_h = 1 << (log2_trafo_size + 1);
 
 1495             int trafo_size_v = 1 << (log2_trafo_size + 
sps->vshift[1]);
 
 1497                                             trafo_size_h, trafo_size_v, 
sps->log2_ctb_size);
 
 1498             s->hpc.intra_pred[log2_trafo_size - 2](lc, 
pps, xBase, yBase, 1);
 
 1499             s->hpc.intra_pred[log2_trafo_size - 2](lc, 
pps, xBase, yBase, 2);
 
 1500             if (
sps->chroma_format_idc == 2) {
 
 1502                                                 trafo_size_h, trafo_size_v, 
sps->log2_ctb_size);
 
 1503                 s->hpc.intra_pred[log2_trafo_size - 2](lc, 
pps, xBase, yBase + (1 << log2_trafo_size), 1);
 
 1504                 s->hpc.intra_pred[log2_trafo_size - 2](lc, 
pps, xBase, yBase + (1 << log2_trafo_size), 2);
 
 1513                                   int x0, 
int y0, 
int log2_cb_size)
 
 1515     int cb_size          = 1 << log2_cb_size;
 
 1516     int log2_min_pu_size = 
sps->log2_min_pu_size;
 
 1518     int min_pu_width     = 
sps->min_pu_width;
 
 1519     int x_end = 
FFMIN(x0 + cb_size, 
sps->width);
 
 1520     int y_end = 
FFMIN(y0 + cb_size, 
sps->height);
 
 1523     for (j = (y0 >> log2_min_pu_size); j < (y_end >> log2_min_pu_size); j++)
 
 1524         for (
i = (x0 >> log2_min_pu_size); 
i < (x_end >> log2_min_pu_size); 
i++)
 
 1525             is_pcm[
i + j * min_pu_width] = 2;
 
 1532                               int xBase, 
int yBase, 
int cb_xBase, 
int cb_yBase,
 
 1533                               int log2_cb_size, 
int log2_trafo_size,
 
 1534                               int trafo_depth, 
int blk_idx,
 
 1535                               const int *base_cbf_cb, 
const int *base_cbf_cr)
 
 1538     uint8_t split_transform_flag;
 
 1543     cbf_cb[0] = base_cbf_cb[0];
 
 1544     cbf_cb[1] = base_cbf_cb[1];
 
 1545     cbf_cr[0] = base_cbf_cr[0];
 
 1546     cbf_cr[1] = base_cbf_cr[1];
 
 1549         if (trafo_depth == 1) {
 
 1551             if (
sps->chroma_format_idc == 3) {
 
 1565     if (log2_trafo_size <= sps->log2_max_trafo_size &&
 
 1566         log2_trafo_size >  
sps->log2_min_tb_size    &&
 
 1567         trafo_depth     < lc->cu.max_trafo_depth       &&
 
 1571         int inter_split = 
sps->max_transform_hierarchy_depth_inter == 0 &&
 
 1576         split_transform_flag = log2_trafo_size > 
sps->log2_max_trafo_size ||
 
 1581     if (
sps->chroma_format_idc && (log2_trafo_size > 2 || 
sps->chroma_format_idc == 3)) {
 
 1582         if (trafo_depth == 0 || cbf_cb[0]) {
 
 1584             if (
sps->chroma_format_idc == 2 && (!split_transform_flag || log2_trafo_size == 3)) {
 
 1589         if (trafo_depth == 0 || cbf_cr[0]) {
 
 1591             if (
sps->chroma_format_idc == 2 && (!split_transform_flag || log2_trafo_size == 3)) {
 
 1597     if (split_transform_flag) {
 
 1598         const int trafo_size_split = 1 << (log2_trafo_size - 1);
 
 1599         const int x1 = x0 + trafo_size_split;
 
 1600         const int y1 = y0 + trafo_size_split;
 
 1602 #define SUBDIVIDE(x, y, idx)                                                    \ 
 1604     ret = hls_transform_tree(lc, l, pps, sps,                                   \ 
 1605                              x, y, x0, y0, cb_xBase, cb_yBase, log2_cb_size,    \ 
 1606                              log2_trafo_size - 1, trafo_depth + 1, idx,         \ 
 1619         int min_tu_size      = 1 << 
sps->log2_min_tb_size;
 
 1620         int log2_min_tu_size = 
sps->log2_min_tb_size;
 
 1621         int min_tu_width     = 
sps->min_tb_width;
 
 1625             cbf_cb[0] || cbf_cr[0] ||
 
 1626             (
sps->chroma_format_idc == 2 && (cbf_cb[1] || cbf_cr[1]))) {
 
 1631                                  x0, y0, xBase, yBase, cb_xBase, cb_yBase,
 
 1632                                  log2_cb_size, log2_trafo_size,
 
 1633                                  blk_idx, cbf_luma, cbf_cb, cbf_cr);
 
 1639             for (
i = 0; 
i < (1 << log2_trafo_size); 
i += min_tu_size)
 
 1640                 for (j = 0; j < (1 << log2_trafo_size); j += min_tu_size) {
 
 1641                     int x_tu = (x0 + j) >> log2_min_tu_size;
 
 1642                     int y_tu = (y0 + 
i) >> log2_min_tu_size;
 
 1643                     l->
cbf_luma[y_tu * min_tu_width + x_tu] = 1;
 
 1646         if (!
s->sh.disable_deblocking_filter_flag) {
 
 1648             if (
pps->transquant_bypass_enable_flag &&
 
 1657                           const HEVCPPS *
pps, 
int x0, 
int y0, 
int log2_cb_size)
 
 1662     int cb_size   = 1 << log2_cb_size;
 
 1663     ptrdiff_t stride0 = 
s->cur_frame->f->linesize[0];
 
 1664     ptrdiff_t stride1 = 
s->cur_frame->f->linesize[1];
 
 1665     ptrdiff_t stride2 = 
s->cur_frame->f->linesize[2];
 
 1666     uint8_t *dst0 = &
s->cur_frame->f->data[0][y0 * stride0 + (x0 << 
sps->pixel_shift)];
 
 1667     uint8_t *dst1 = &
s->cur_frame->f->data[1][(y0 >> 
sps->vshift[1]) * stride1 + ((x0 >> 
sps->hshift[1]) << 
sps->pixel_shift)];
 
 1668     uint8_t *dst2 = &
s->cur_frame->f->data[2][(y0 >> 
sps->vshift[2]) * stride2 + ((x0 >> 
sps->hshift[2]) << 
sps->pixel_shift)];
 
 1670     int length         = cb_size * cb_size * 
sps->pcm.bit_depth +
 
 1671                          (((cb_size >> 
sps->hshift[1]) * (cb_size >> 
sps->vshift[1])) +
 
 1672                           ((cb_size >> 
sps->hshift[2]) * (cb_size >> 
sps->vshift[2]))) *
 
 1673                           sps->pcm.bit_depth_chroma;
 
 1674     const uint8_t *pcm = 
skip_bytes(&lc->
cc, (length + 7) >> 3);
 
 1677     if (!
s->sh.disable_deblocking_filter_flag)
 
 1684     s->hevcdsp.put_pcm(dst0, stride0, cb_size, cb_size,     &gb, 
sps->pcm.bit_depth);
 
 1685     if (
sps->chroma_format_idc) {
 
 1686         s->hevcdsp.put_pcm(dst1, stride1,
 
 1687                            cb_size >> 
sps->hshift[1],
 
 1688                            cb_size >> 
sps->vshift[1],
 
 1689                            &gb, 
sps->pcm.bit_depth_chroma);
 
 1690         s->hevcdsp.put_pcm(dst2, stride2,
 
 1691                            cb_size >> 
sps->hshift[2],
 
 1692                            cb_size >> 
sps->vshift[2],
 
 1693                            &gb, 
sps->pcm.bit_depth_chroma);
 
 1717                         uint8_t *
dst, ptrdiff_t dststride,
 
 1719                         int block_w, 
int block_h, 
int luma_weight, 
int luma_offset)
 
 1722     const uint8_t *
src   = 
ref->data[0];
 
 1724     int pic_width        = 
sps->width;
 
 1725     int pic_height       = 
sps->height;
 
 1728     int weight_flag      = (
s->sh.slice_type == 
HEVC_SLICE_P && 
pps->weighted_pred_flag) ||
 
 1732     x_off += 
mv->x >> 2;
 
 1733     y_off += 
mv->y >> 2;
 
 1739         ref == 
s->cur_frame->f) {
 
 1749                                  pic_width, pic_height);
 
 1756                                                       block_h, 
mx, 
my, block_w);
 
 1759                                                         block_h, 
s->sh.luma_log2_weight_denom,
 
 1760                                                         luma_weight, luma_offset, 
mx, 
my, block_w);
 
 1781                        uint8_t *
dst, ptrdiff_t dststride,
 
 1782                         const AVFrame *ref0, 
const Mv *mv0, 
int x_off, 
int y_off,
 
 1783                         int block_w, 
int block_h, 
const AVFrame *ref1,
 
 1784                         const Mv *mv1, 
struct MvField *current_mv)
 
 1787     ptrdiff_t src0stride  = ref0->
linesize[0];
 
 1788     ptrdiff_t src1stride  = ref1->
linesize[0];
 
 1789     int pic_width        = 
sps->width;
 
 1790     int pic_height       = 
sps->height;
 
 1791     int mx0              = mv0->
x & 3;
 
 1792     int my0              = mv0->
y & 3;
 
 1793     int mx1              = mv1->
x & 3;
 
 1794     int my1              = mv1->
y & 3;
 
 1795     int weight_flag      = (
s->sh.slice_type == 
HEVC_SLICE_P && 
pps->weighted_pred_flag) ||
 
 1797     int x_off0           = x_off + (mv0->
x >> 2);
 
 1798     int y_off0           = y_off + (mv0->
y >> 2);
 
 1799     int x_off1           = x_off + (mv1->
x >> 2);
 
 1800     int y_off1           = y_off + (mv1->
y >> 2);
 
 1803     const uint8_t *
src0  = ref0->
data[0] + y_off0 * src0stride + (int)((
unsigned)x_off0 << 
sps->pixel_shift);
 
 1804     const uint8_t *
src1  = ref1->
data[0] + y_off1 * src1stride + (int)((
unsigned)x_off1 << 
sps->pixel_shift);
 
 1814                                  edge_emu_stride, src0stride,
 
 1818                                  pic_width, pic_height);
 
 1820         src0stride = edge_emu_stride;
 
 1831                                  edge_emu_stride, src1stride,
 
 1835                                  pic_width, pic_height);
 
 1837         src1stride = edge_emu_stride;
 
 1840     s->hevcdsp.put_hevc_qpel[idx][!!my0][!!mx0](lc->
tmp, 
src0, src0stride,
 
 1841                                                 block_h, mx0, my0, block_w);
 
 1843         s->hevcdsp.put_hevc_qpel_bi[idx][!!my1][!!mx1](
dst, dststride, 
src1, src1stride, lc->
tmp,
 
 1844                                                        block_h, mx1, my1, block_w);
 
 1846         s->hevcdsp.put_hevc_qpel_bi_w[idx][!!my1][!!mx1](
dst, dststride, 
src1, src1stride, lc->
tmp,
 
 1847                                                          block_h, 
s->sh.luma_log2_weight_denom,
 
 1848                                                          s->sh.luma_weight_l0[current_mv->
ref_idx[0]],
 
 1849                                                          s->sh.luma_weight_l1[current_mv->
ref_idx[1]],
 
 1850                                                          s->sh.luma_offset_l0[current_mv->
ref_idx[0]],
 
 1851                                                          s->sh.luma_offset_l1[current_mv->
ref_idx[1]],
 
 1876                           ptrdiff_t dststride, 
const uint8_t *
src0, ptrdiff_t 
srcstride, 
int reflist,
 
 1877                           int x_off, 
int y_off, 
int block_w, 
int block_h,
 
 1878                           const struct MvField *current_mv, 
int chroma_weight, 
int chroma_offset)
 
 1881     int pic_width        = 
sps->width >> 
sps->hshift[1];
 
 1882     int pic_height       = 
sps->height >> 
sps->vshift[1];
 
 1883     const Mv *
mv         = ¤t_mv->
mv[reflist];
 
 1884     int weight_flag      = (
s->sh.slice_type == 
HEVC_SLICE_P && 
pps->weighted_pred_flag) ||
 
 1887     int hshift           = 
sps->hshift[1];
 
 1888     int vshift           = 
sps->vshift[1];
 
 1891     intptr_t _mx         = 
mx << (1 - hshift);
 
 1892     intptr_t _my         = 
my << (1 - vshift);
 
 1893     int emu              = 
src0 == 
s->cur_frame->f->data[1] || 
src0 == 
s->cur_frame->f->data[2];
 
 1895     x_off += 
mv->x >> (2 + hshift);
 
 1896     y_off += 
mv->y >> (2 + vshift);
 
 1906                           (edge_emu_stride + (1 << 
sps->pixel_shift));
 
 1912                                  pic_width, pic_height);
 
 1919                                                   block_h, _mx, _my, block_w);
 
 1922                                                         block_h, 
s->sh.chroma_log2_weight_denom,
 
 1923                                                         chroma_weight, chroma_offset, _mx, _my, block_w);
 
 1945                          uint8_t *dst0, ptrdiff_t dststride,
 
 1947                          int x_off, 
int y_off, 
int block_w, 
int block_h, 
const MvField *current_mv, 
int cidx)
 
 1950     const uint8_t *
src1  = ref0->
data[cidx+1];
 
 1951     const uint8_t *
src2  = ref1->
data[cidx+1];
 
 1952     ptrdiff_t src1stride = ref0->
linesize[cidx+1];
 
 1953     ptrdiff_t src2stride = ref1->
linesize[cidx+1];
 
 1954     int weight_flag      = (
s->sh.slice_type == 
HEVC_SLICE_P && 
pps->weighted_pred_flag) ||
 
 1956     int pic_width        = 
sps->width >> 
sps->hshift[1];
 
 1957     int pic_height       = 
sps->height >> 
sps->vshift[1];
 
 1958     const Mv *
const mv0  = ¤t_mv->
mv[0];
 
 1959     const Mv *
const mv1  = ¤t_mv->
mv[1];
 
 1960     int hshift = 
sps->hshift[1];
 
 1961     int vshift = 
sps->vshift[1];
 
 1967     intptr_t _mx0 = mx0 << (1 - hshift);
 
 1968     intptr_t _my0 = my0 << (1 - vshift);
 
 1969     intptr_t _mx1 = mx1 << (1 - hshift);
 
 1970     intptr_t _my1 = my1 << (1 - vshift);
 
 1972     int x_off0 = x_off + (mv0->
x >> (2 + hshift));
 
 1973     int y_off0 = y_off + (mv0->
y >> (2 + vshift));
 
 1974     int x_off1 = x_off + (mv1->
x >> (2 + hshift));
 
 1975     int y_off1 = y_off + (mv1->
y >> (2 + vshift));
 
 1977     src1  += y_off0 * src1stride + (int)((
unsigned)x_off0 << 
sps->pixel_shift);
 
 1978     src2  += y_off1 * src2stride + (int)((
unsigned)x_off1 << 
sps->pixel_shift);
 
 1986                           (edge_emu_stride + (1 << 
sps->pixel_shift));
 
 1989                                  edge_emu_stride, src1stride,
 
 1993                                  pic_width, pic_height);
 
 1996         src1stride = edge_emu_stride;
 
 2005                           (edge_emu_stride + (1 << 
sps->pixel_shift));
 
 2008                                  edge_emu_stride, src2stride,
 
 2012                                  pic_width, pic_height);
 
 2015         src2stride = edge_emu_stride;
 
 2018     s->hevcdsp.put_hevc_epel[idx][!!my0][!!mx0](lc->
tmp, 
src1, src1stride,
 
 2019                                                 block_h, _mx0, _my0, block_w);
 
 2021         s->hevcdsp.put_hevc_epel_bi[idx][!!my1][!!mx1](dst0, 
s->cur_frame->f->linesize[cidx+1],
 
 2023                                                        block_h, _mx1, _my1, block_w);
 
 2025         s->hevcdsp.put_hevc_epel_bi_w[idx][!!my1][!!mx1](dst0, 
s->cur_frame->f->linesize[cidx+1],
 
 2028                                                          s->sh.chroma_log2_weight_denom,
 
 2029                                                          s->sh.chroma_weight_l0[current_mv->
ref_idx[0]][cidx],
 
 2030                                                          s->sh.chroma_weight_l1[current_mv->
ref_idx[1]][cidx],
 
 2031                                                          s->sh.chroma_offset_l0[current_mv->
ref_idx[0]][cidx],
 
 2032                                                          s->sh.chroma_offset_l1[current_mv->
ref_idx[1]][cidx],
 
 2033                                                          _mx1, _my1, block_w);
 
 2048                                   int x0, 
int y0, 
int nPbW,
 
 2049                                   int nPbH, 
int log2_cb_size, 
int part_idx,
 
 2061     if (inter_pred_idc != 
PRED_L1) {
 
 2062         if (
s->sh.nb_refs[
L0])
 
 2069                                  part_idx, merge_idx, 
mv, mvp_flag, 0);
 
 2074     if (inter_pred_idc != 
PRED_L0) {
 
 2075         if (
s->sh.nb_refs[
L1])
 
 2078         if (
s->sh.mvd_l1_zero_flag == 1 && inter_pred_idc == 
PRED_BI) {
 
 2087                                  part_idx, merge_idx, 
mv, mvp_flag, 1);
 
 2096                                 int x0, 
int y0, 
int nPbW, 
int nPbH,
 
 2097                                 int log2_cb_size, 
int partIdx, 
int idx)
 
 2099 #define POS(c_idx, x, y)                                                          \ 
 2100     s->cur_frame->f->data[c_idx] ?                                                \ 
 2101     &s->cur_frame->f->data[c_idx][((y) >> sps->vshift[c_idx]) * linesize[c_idx] + \ 
 2102                            (((x) >> sps->hshift[c_idx]) << sps->pixel_shift)] : NULL 
 2105     struct MvField current_mv = {{{ 0 }}};
 
 2107     int min_pu_width = 
sps->min_pu_width;
 
 2109     MvField *tab_mvf = 
s->cur_frame->tab_mvf;
 
 2110     const RefPicList *refPicList = 
s->cur_frame->refPicList;
 
 2112     const int *linesize = 
s->cur_frame->f->linesize;
 
 2113     uint8_t *dst0 = 
s->cur_frame->f->data[0] + y0 * linesize[0] + (x0 << 
sps->pixel_shift);
 
 2114     uint8_t *dst1 = 
POS(1, x0, y0);
 
 2115     uint8_t *dst2 = 
POS(2, x0, y0);
 
 2116     int log2_min_cb_size = 
sps->log2_min_cb_size;
 
 2117     int min_cb_width     = 
sps->min_cb_width;
 
 2118     int x_cb             = x0 >> log2_min_cb_size;
 
 2119     int y_cb             = y0 >> log2_min_cb_size;
 
 2129         if (
s->sh.max_num_merge_cand > 1)
 
 2135                                    partIdx, merge_idx, ¤t_mv);
 
 2138                               partIdx, merge_idx, ¤t_mv);
 
 2141     x_pu = x0 >> 
sps->log2_min_pu_size;
 
 2142     y_pu = y0 >> 
sps->log2_min_pu_size;
 
 2144     for (j = 0; j < nPbH >> 
sps->log2_min_pu_size; j++)
 
 2145         for (
i = 0; i < nPbW >> 
sps->log2_min_pu_size; 
i++)
 
 2146             tab_mvf[(y_pu + j) * min_pu_width + x_pu + 
i] = current_mv;
 
 2149         ref0 = refPicList[0].
ref[current_mv.
ref_idx[0]];
 
 2150         if (!ref0 || !ref0->
f)
 
 2155         ref1 = refPicList[1].
ref[current_mv.
ref_idx[1]];
 
 2156         if (!ref1 || !ref1->f)
 
 2162         int x0_c = x0 >> 
sps->hshift[1];
 
 2163         int y0_c = y0 >> 
sps->vshift[1];
 
 2164         int nPbW_c = nPbW >> 
sps->hshift[1];
 
 2165         int nPbH_c = nPbH >> 
sps->vshift[1];
 
 2168                     ¤t_mv.
mv[0], x0, y0, nPbW, nPbH,
 
 2169                     s->sh.luma_weight_l0[current_mv.
ref_idx[0]],
 
 2170                     s->sh.luma_offset_l0[current_mv.
ref_idx[0]]);
 
 2172         if (
sps->chroma_format_idc) {
 
 2174                           0, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv,
 
 2175                           s->sh.chroma_weight_l0[current_mv.
ref_idx[0]][0], 
s->sh.chroma_offset_l0[current_mv.
ref_idx[0]][0]);
 
 2177                           0, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv,
 
 2178                           s->sh.chroma_weight_l0[current_mv.
ref_idx[0]][1], 
s->sh.chroma_offset_l0[current_mv.
ref_idx[0]][1]);
 
 2181         int x0_c = x0 >> 
sps->hshift[1];
 
 2182         int y0_c = y0 >> 
sps->vshift[1];
 
 2183         int nPbW_c = nPbW >> 
sps->hshift[1];
 
 2184         int nPbH_c = nPbH >> 
sps->vshift[1];
 
 2187                     ¤t_mv.
mv[1], x0, y0, nPbW, nPbH,
 
 2188                     s->sh.luma_weight_l1[current_mv.
ref_idx[1]],
 
 2189                     s->sh.luma_offset_l1[current_mv.
ref_idx[1]]);
 
 2191         if (
sps->chroma_format_idc) {
 
 2193                           1, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv,
 
 2194                           s->sh.chroma_weight_l1[current_mv.
ref_idx[1]][0], 
s->sh.chroma_offset_l1[current_mv.
ref_idx[1]][0]);
 
 2197                           1, x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv,
 
 2198                           s->sh.chroma_weight_l1[current_mv.
ref_idx[1]][1], 
s->sh.chroma_offset_l1[current_mv.
ref_idx[1]][1]);
 
 2201         int x0_c = x0 >> 
sps->hshift[1];
 
 2202         int y0_c = y0 >> 
sps->vshift[1];
 
 2203         int nPbW_c = nPbW >> 
sps->hshift[1];
 
 2204         int nPbH_c = nPbH >> 
sps->vshift[1];
 
 2207                    ¤t_mv.
mv[0], x0, y0, nPbW, nPbH,
 
 2208                    ref1->f, ¤t_mv.
mv[1], ¤t_mv);
 
 2210         if (
sps->chroma_format_idc) {
 
 2212                          x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, 0);
 
 2215                          x0_c, y0_c, nPbW_c, nPbH_c, ¤t_mv, 1);
 
 2225                                 int x0, 
int y0, 
int pu_size,
 
 2226                                 int prev_intra_luma_pred_flag)
 
 2229     int x_pu             = x0 >> 
sps->log2_min_pu_size;
 
 2230     int y_pu             = y0 >> 
sps->log2_min_pu_size;
 
 2231     int min_pu_width     = 
sps->min_pu_width;
 
 2232     int size_in_pus      = pu_size >> 
sps->log2_min_pu_size;
 
 2241     int y_ctb = (y0 >> (
sps->log2_ctb_size)) << (
sps->log2_ctb_size);
 
 2243     MvField *tab_mvf = 
s->cur_frame->tab_mvf;
 
 2244     int intra_pred_mode;
 
 2249     if ((y0 - 1) < y_ctb)
 
 2252     if (cand_left == cand_up) {
 
 2253         if (cand_left < 2) {
 
 2258             candidate[0] = cand_left;
 
 2259             candidate[1] = 2 + ((cand_left - 2 - 1 + 32) & 31);
 
 2260             candidate[2] = 2 + ((cand_left - 2 + 1) & 31);
 
 2263         candidate[0] = cand_left;
 
 2264         candidate[1] = cand_up;
 
 2274     if (prev_intra_luma_pred_flag) {
 
 2275         intra_pred_mode = candidate[lc->
pu.
mpm_idx];
 
 2277         if (candidate[0] > candidate[1])
 
 2278             FFSWAP(uint8_t, candidate[0], candidate[1]);
 
 2279         if (candidate[0] > candidate[2])
 
 2280             FFSWAP(uint8_t, candidate[0], candidate[2]);
 
 2281         if (candidate[1] > candidate[2])
 
 2282             FFSWAP(uint8_t, candidate[1], candidate[2]);
 
 2285         for (
i = 0; 
i < 3; 
i++)
 
 2286             if (intra_pred_mode >= candidate[
i])
 
 2293     for (
i = 0; 
i < size_in_pus; 
i++) {
 
 2294         memset(&l->
tab_ipm[(y_pu + 
i) * min_pu_width + x_pu],
 
 2295                intra_pred_mode, size_in_pus);
 
 2297         for (j = 0; j < size_in_pus; j++) {
 
 2302     return intra_pred_mode;
 
 2307                                           int log2_cb_size, 
int ct_depth)
 
 2309     int length = (1 << log2_cb_size) >> 
sps->log2_min_cb_size;
 
 2310     int x_cb   = x0 >> 
sps->log2_min_cb_size;
 
 2311     int y_cb   = y0 >> 
sps->log2_min_cb_size;
 
 2314     for (y = 0; y < length; y++)
 
 2315         memset(&tab_ct_depth[(y_cb + y) * 
sps->min_cb_width + x_cb],
 
 2320      0,  1,  2,  2,  2,  2,  3,  5,  7,  8, 10, 12, 13, 15, 17, 18, 19, 20,
 
 2321     21, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 28, 29, 29, 30, 31};
 
 2328     static const uint8_t intra_chroma_table[4] = { 0, 26, 10, 1 };
 
 2329     uint8_t prev_intra_luma_pred_flag[4];
 
 2331     int pb_size = (1 << log2_cb_size) >> 
split;
 
 2332     int side    = 
split + 1;
 
 2336     for (
i = 0; 
i < side; 
i++)
 
 2337         for (j = 0; j < side; j++)
 
 2340     for (
i = 0; 
i < side; 
i++) {
 
 2341         for (j = 0; j < side; j++) {
 
 2342             if (prev_intra_luma_pred_flag[2 * 
i + j])
 
 2349                                      x0 + pb_size * j, y0 + pb_size * 
i, pb_size,
 
 2350                                      prev_intra_luma_pred_flag[2 * 
i + j]);
 
 2354     if (
sps->chroma_format_idc == 3) {
 
 2355         for (
i = 0; 
i < side; 
i++) {
 
 2356             for (j = 0; j < side; j++) {
 
 2358                 if (chroma_mode != 4) {
 
 2368     } 
else if (
sps->chroma_format_idc == 2) {
 
 2371         if (chroma_mode != 4) {
 
 2375                 mode_idx = intra_chroma_table[chroma_mode];
 
 2380     } 
else if (
sps->chroma_format_idc != 0) {
 
 2382         if (chroma_mode != 4) {
 
 2400     int pb_size          = 1 << log2_cb_size;
 
 2401     int size_in_pus      = pb_size >> 
sps->log2_min_pu_size;
 
 2402     int min_pu_width     = 
sps->min_pu_width;
 
 2403     MvField *tab_mvf     = 
s->cur_frame->tab_mvf;
 
 2404     int x_pu             = x0 >> 
sps->log2_min_pu_size;
 
 2405     int y_pu             = y0 >> 
sps->log2_min_pu_size;
 
 2408     if (size_in_pus == 0)
 
 2410     for (j = 0; j < size_in_pus; j++)
 
 2411         memset(&l->
tab_ipm[(y_pu + j) * min_pu_width + x_pu], 
INTRA_DC, size_in_pus);
 
 2413         for (j = 0; j < size_in_pus; j++)
 
 2414             for (k = 0; k < size_in_pus; k++)
 
 2421                            int x0, 
int y0, 
int log2_cb_size)
 
 2423     int cb_size          = 1 << log2_cb_size;
 
 2424     int log2_min_cb_size = 
sps->log2_min_cb_size;
 
 2425     int length           = cb_size >> log2_min_cb_size;
 
 2426     int min_cb_width     = 
sps->min_cb_width;
 
 2427     int x_cb             = x0 >> log2_min_cb_size;
 
 2428     int y_cb             = y0 >> log2_min_cb_size;
 
 2429     int idx              = log2_cb_size - 2;
 
 2430     int qp_block_mask    = (1 << (
sps->log2_ctb_size - 
pps->diff_cu_qp_delta_depth)) - 1;
 
 2440     for (x = 0; x < 4; x++)
 
 2442     if (
pps->transquant_bypass_enable_flag) {
 
 2453                                                      x0b, y0b, x_cb, y_cb,
 
 2456         x = y_cb * min_cb_width + x_cb;
 
 2457         for (y = 0; y < length; y++) {
 
 2458             memset(&l->
skip_flag[x], skip_flag, length);
 
 2463         x = y_cb * min_cb_width + x_cb;
 
 2464         for (y = 0; y < length; y++) {
 
 2472                             x0, y0, cb_size, cb_size, log2_cb_size, 0, idx);
 
 2475         if (!
s->sh.disable_deblocking_filter_flag)
 
 2483             log2_cb_size == 
sps->log2_min_cb_size) {
 
 2491                 log2_cb_size >= 
sps->pcm.log2_min_pcm_cb_size &&
 
 2492                 log2_cb_size <= sps->pcm.log2_max_pcm_cb_size) {
 
 2498                 if (
sps->pcm_loop_filter_disabled)
 
 2511                                     x0, y0, cb_size, cb_size, log2_cb_size, 0, idx);
 
 2515                                     x0, y0,               cb_size, cb_size / 2, log2_cb_size, 0, idx);
 
 2517                                     x0, y0 + cb_size / 2, cb_size, cb_size / 2, log2_cb_size, 1, idx);
 
 2521                                     x0,               y0, cb_size / 2, cb_size, log2_cb_size, 0, idx - 1);
 
 2523                                     x0 + cb_size / 2, y0, cb_size / 2, cb_size, log2_cb_size, 1, idx - 1);
 
 2527                                     x0, y0,               cb_size, cb_size     / 4, log2_cb_size, 0, idx);
 
 2529                                     x0, y0 + cb_size / 4, cb_size, cb_size * 3 / 4, log2_cb_size, 1, idx);
 
 2533                                     x0, y0,                   cb_size, cb_size * 3 / 4, log2_cb_size, 0, idx);
 
 2535                                     x0, y0 + cb_size * 3 / 4, cb_size, cb_size     / 4, log2_cb_size, 1, idx);
 
 2539                                     x0,               y0, cb_size     / 4, cb_size, log2_cb_size, 0, idx - 2);
 
 2541                                     x0 + cb_size / 4, y0, cb_size * 3 / 4, cb_size, log2_cb_size, 1, idx - 2);
 
 2545                                     x0,                   y0, cb_size * 3 / 4, cb_size, log2_cb_size, 0, idx - 2);
 
 2547                                     x0 + cb_size * 3 / 4, y0, cb_size     / 4, cb_size, log2_cb_size, 1, idx - 2);
 
 2551                                     x0,               y0,               cb_size / 2, cb_size / 2, log2_cb_size, 0, idx - 1);
 
 2553                                     x0 + cb_size / 2, y0,               cb_size / 2, cb_size / 2, log2_cb_size, 1, idx - 1);
 
 2555                                     x0,               y0 + cb_size / 2, cb_size / 2, cb_size / 2, log2_cb_size, 2, idx - 1);
 
 2557                                     x0 + cb_size / 2, y0 + cb_size / 2, cb_size / 2, cb_size / 2, log2_cb_size, 3, idx - 1);
 
 2563             int rqt_root_cbf = 1;
 
 2570                 const static int cbf[2] = { 0 };
 
 2573                                          sps->max_transform_hierarchy_depth_inter;
 
 2574                 ret = 
hls_transform_tree(lc, l, 
pps, 
sps, x0, y0, x0, y0, x0, y0,
 
 2576                                          log2_cb_size, 0, 0, cbf, cbf);
 
 2580                 if (!
s->sh.disable_deblocking_filter_flag)
 
 2589     x = y_cb * min_cb_width + x_cb;
 
 2590     for (y = 0; y < length; y++) {
 
 2595     if(((x0 + (1<<log2_cb_size)) & qp_block_mask) == 0 &&
 
 2596        ((y0 + (1<<log2_cb_size)) & qp_block_mask) == 0) {
 
 2609                                int log2_cb_size, 
int cb_depth)
 
 2612     const int cb_size    = 1 << log2_cb_size;
 
 2617     if (x0 + cb_size <= sps->
width  &&
 
 2618         y0 + cb_size <= sps->
height &&
 
 2619         log2_cb_size > 
sps->log2_min_cb_size) {
 
 2621                                                          sps, cb_depth, x0, y0);
 
 2623         split_cu = (log2_cb_size > 
sps->log2_min_cb_size);
 
 2625     if (
pps->cu_qp_delta_enabled_flag &&
 
 2626         log2_cb_size >= 
sps->log2_ctb_size - 
pps->diff_cu_qp_delta_depth) {
 
 2631     if (
s->sh.cu_chroma_qp_offset_enabled_flag &&
 
 2632         log2_cb_size >= 
sps->log2_ctb_size - 
pps->diff_cu_chroma_qp_offset_depth) {
 
 2637         int qp_block_mask = (1 << (
sps->log2_ctb_size - 
pps->diff_cu_qp_delta_depth)) - 1;
 
 2638         const int cb_size_split = cb_size >> 1;
 
 2639         const int x1 = x0 + cb_size_split;
 
 2640         const int y1 = y0 + cb_size_split;
 
 2645                                         x0, y0, log2_cb_size - 1, cb_depth + 1);
 
 2649         if (more_data && x1 < sps->
width) {
 
 2651                                             x1, y0, log2_cb_size - 1, cb_depth + 1);
 
 2655         if (more_data && y1 < sps->
height) {
 
 2657                                             x0, y1, log2_cb_size - 1, cb_depth + 1);
 
 2661         if (more_data && x1 < sps->
width &&
 
 2664                                             x1, y1, log2_cb_size - 1, cb_depth + 1);
 
 2669         if(((x0 + (1<<log2_cb_size)) & qp_block_mask) == 0 &&
 
 2670             ((y0 + (1<<log2_cb_size)) & qp_block_mask) == 0)
 
 2674             return ((x1 + cb_size_split) < 
sps->width ||
 
 2675                     (y1 + cb_size_split) < 
sps->height);
 
 2682         if ((!((x0 + cb_size) %
 
 2683                (1 << (
sps->log2_ctb_size))) ||
 
 2684              (x0 + cb_size >= 
sps->width)) &&
 
 2686                (1 << (
sps->log2_ctb_size))) ||
 
 2687              (y0 + cb_size >= 
sps->height))) {
 
 2689             return !end_of_slice_flag;
 
 2701                                  int x_ctb, 
int y_ctb, 
int ctb_addr_ts)
 
 2704     int ctb_size          = 1 << 
sps->log2_ctb_size;
 
 2705     int ctb_addr_rs       = 
pps->ctb_addr_ts_to_rs[ctb_addr_ts];
 
 2706     int ctb_addr_in_slice = ctb_addr_rs - 
s->sh.slice_addr;
 
 2710     if (
pps->entropy_coding_sync_enabled_flag) {
 
 2711         if (x_ctb == 0 && (y_ctb & (ctb_size - 1)) == 0)
 
 2714     } 
else if (
pps->tiles_enabled_flag) {
 
 2715         if (ctb_addr_ts && 
pps->tile_id[ctb_addr_ts] != 
pps->tile_id[ctb_addr_ts - 1]) {
 
 2716             int idxX = 
pps->col_idxX[x_ctb >> 
sps->log2_ctb_size];
 
 2727     if (
pps->tiles_enabled_flag) {
 
 2728         if (x_ctb > 0 && 
pps->tile_id[ctb_addr_ts] != 
pps->tile_id[
pps->ctb_addr_rs_to_ts[ctb_addr_rs - 1]])
 
 2732         if (y_ctb > 0 && 
pps->tile_id[ctb_addr_ts] != 
pps->tile_id[
pps->ctb_addr_rs_to_ts[ctb_addr_rs - 
sps->ctb_width]])
 
 2737         if (ctb_addr_in_slice <= 0)
 
 2739         if (ctb_addr_in_slice < sps->ctb_width)
 
 2745     lc->
ctb_up_right_flag = ((y_ctb > 0)  && (ctb_addr_in_slice+1 >= 
sps->ctb_width) && (
pps->tile_id[ctb_addr_ts] == 
pps->tile_id[
pps->ctb_addr_rs_to_ts[ctb_addr_rs+1 - 
sps->ctb_width]]));
 
 2746     lc->
ctb_up_left_flag = ((x_ctb > 0) && (y_ctb > 0)  && (ctb_addr_in_slice-1 >= 
sps->ctb_width) && (
pps->tile_id[ctb_addr_ts] == 
pps->tile_id[
pps->ctb_addr_rs_to_ts[ctb_addr_rs-1 - 
sps->ctb_width]]));
 
 2755     const uint8_t *slice_data = gb->
buffer + 
s->sh.data_offset;
 
 2757     int ctb_size    = 1 << 
sps->log2_ctb_size;
 
 2761     int ctb_addr_ts = 
pps->ctb_addr_rs_to_ts[
s->sh.slice_ctb_addr_rs];
 
 2764     while (more_data && ctb_addr_ts < sps->ctb_size) {
 
 2765         int ctb_addr_rs = 
pps->ctb_addr_ts_to_rs[ctb_addr_ts];
 
 2767         x_ctb = (ctb_addr_rs % ((
sps->width + ctb_size - 1) >> 
sps->log2_ctb_size)) << 
sps->log2_ctb_size;
 
 2768         y_ctb = (ctb_addr_rs / ((
sps->width + ctb_size - 1) >> 
sps->log2_ctb_size)) << 
sps->log2_ctb_size;
 
 2778                       x_ctb >> 
sps->log2_ctb_size, y_ctb >> 
sps->log2_ctb_size);
 
 2785         if (more_data < 0) {
 
 2796     if (x_ctb + ctb_size >= 
sps->width &&
 
 2797         y_ctb + ctb_size >= 
sps->height)
 
 2804                                 int job, 
int thread)
 
 2811     int ctb_size    = 1 << 
sps->log2_ctb_size;
 
 2814     int ctb_addr_rs = 
s->sh.slice_ctb_addr_rs + ctb_row * ((
sps->width + ctb_size - 1) >> 
sps->log2_ctb_size);
 
 2815     int ctb_addr_ts = 
pps->ctb_addr_rs_to_ts[ctb_addr_rs];
 
 2817     const uint8_t *
data      = 
s->data + 
s->sh.offset[ctb_row];
 
 2818     const size_t   data_size = 
s->sh.size[ctb_row];
 
 2827     while(more_data && ctb_addr_ts < sps->ctb_size) {
 
 2828         int x_ctb = (ctb_addr_rs % 
sps->ctb_width) << 
sps->log2_ctb_size;
 
 2829         int y_ctb = (ctb_addr_rs / 
sps->ctb_width) << 
sps->log2_ctb_size;
 
 2849                       x_ctb >> 
sps->log2_ctb_size, y_ctb >> 
sps->log2_ctb_size);
 
 2857         if (more_data < 0) {
 
 2868         if (!more_data && (x_ctb+ctb_size) < 
sps->width && ctb_row != 
s->sh.num_entry_point_offsets) {
 
 2875         if ((x_ctb+ctb_size) >= 
sps->width && (y_ctb+ctb_size) >= 
sps->height ) {
 
 2880         ctb_addr_rs = 
pps->ctb_addr_ts_to_rs[ctb_addr_ts];
 
 2883         if(x_ctb >= 
sps->width) {
 
 2900     if (
s->nb_wpp_progress < count) {
 
 2902                                      sizeof(*
s->wpp_progress));
 
 2906         s->wpp_progress = 
tmp;
 
 2907         memset(
s->wpp_progress + 
s->nb_wpp_progress, 0,
 
 2908                (count - 
s->nb_wpp_progress) * 
sizeof(*
s->wpp_progress));
 
 2910         for (
int i = 
s->nb_wpp_progress; 
i < count; 
i++) {
 
 2914             s->nb_wpp_progress = 
i + 1;
 
 2918     for (
int i = 0; 
i < count; 
i++)
 
 2929     int length          = nal->
size;
 
 2932     int64_t startheader, cmpt = 0;
 
 2935     if (
s->sh.slice_ctb_addr_rs + 
s->sh.num_entry_point_offsets * 
sps->ctb_width >= 
sps->ctb_width * 
sps->ctb_height) {
 
 2937             s->sh.slice_ctb_addr_rs, 
s->sh.num_entry_point_offsets,
 
 2938             sps->ctb_width, 
sps->ctb_height
 
 2943     if (
s->avctx->thread_count > 
s->nb_local_ctx) {
 
 2949         memcpy(
tmp, 
s->local_ctx, 
sizeof(*
s->local_ctx) * 
s->nb_local_ctx);
 
 2953         for (
unsigned i = 
s->nb_local_ctx; i < s->avctx->thread_count; 
i++) {
 
 2954             tmp = &
s->local_ctx[
i];
 
 2956             memset(
tmp, 0, 
sizeof(*
tmp));
 
 2958             tmp->logctx             = 
s->avctx;
 
 2960             tmp->common_cabac_state = &
s->cabac;
 
 2963         s->nb_local_ctx = 
s->avctx->thread_count;
 
 2968     for (j = 0, cmpt = 0, startheader = 
offset + 
s->sh.entry_point_offset[0]; j < nal->skipped_bytes; j++) {
 
 2975     for (
i = 1; 
i < 
s->sh.num_entry_point_offsets; 
i++) {
 
 2976         offset += (
s->sh.entry_point_offset[
i - 1] - cmpt);
 
 2977         for (j = 0, cmpt = 0, startheader = 
offset 
 2978              + 
s->sh.entry_point_offset[
i]; j < nal->skipped_bytes; j++) {
 
 2984         s->sh.size[
i]   = 
s->sh.entry_point_offset[
i] - cmpt;
 
 2989     offset += 
s->sh.entry_point_offset[
s->sh.num_entry_point_offsets - 1] - cmpt;
 
 2994     s->sh.size  [
s->sh.num_entry_point_offsets] = length - 
offset;
 
 2995     s->sh.offset[
s->sh.num_entry_point_offsets] = 
offset;
 
 2997     s->sh.offset[0] = 
s->sh.data_offset;
 
 2998     s->sh.size[0]   = 
s->sh.offset[1] - 
s->sh.offset[0];
 
 3002     for (
i = 1; 
i < 
s->nb_local_ctx; 
i++) {
 
 3003         s->local_ctx[
i].first_qp_group = 1;
 
 3004         s->local_ctx[
i].qp_y = 
s->local_ctx[0].qp_y;
 
 3016     if (
pps->entropy_coding_sync_enabled_flag)
 
 3019     for (
i = 0; 
i <= 
s->sh.num_entry_point_offsets; 
i++)
 
 3032     if (!
s->sh.first_slice_in_pic_flag)
 
 3033         s->slice_idx += !
s->sh.dependent_slice_segment_flag;
 
 3035     if (!
s->sh.dependent_slice_segment_flag && 
s->sh.slice_type != 
HEVC_SLICE_I) {
 
 3039                    "Error constructing the reference lists for the current slice.\n");
 
 3044     s->slice_initialized = 1;
 
 3046     if (
s->avctx->hwaccel)
 
 3051                "SCC profile is not yet implemented in hevc native decoder.\n");
 
 3055     if (
s->sh.dependent_slice_segment_flag) {
 
 3056         int ctb_addr_ts = 
pps->ctb_addr_rs_to_ts[
s->sh.slice_ctb_addr_rs];
 
 3057         int prev_rs = 
pps->ctb_addr_ts_to_rs[ctb_addr_ts - 1];
 
 3064     s->local_ctx[0].first_qp_group = !
s->sh.dependent_slice_segment_flag;
 
 3066     if (!
pps->cu_qp_delta_enabled_flag)
 
 3067         s->local_ctx[0].qp_y = 
s->sh.slice_qp;
 
 3069     s->local_ctx[0].tu.cu_qp_offset_cb = 0;
 
 3070     s->local_ctx[0].tu.cu_qp_offset_cr = 0;
 
 3073         s->sh.num_entry_point_offsets > 0                &&
 
 3074         pps->num_tile_rows == 1 && 
pps->num_tile_columns == 1)
 
 3089     if (
IS_IRAP(
s) && 
s->no_rasl_output_flag) {
 
 3090         if (
s->sei.common.mastering_display.present > 0)
 
 3091             s->sei.common.mastering_display.present--;
 
 3093         if (
s->sei.common.content_light.present > 0)
 
 3094             s->sei.common.content_light.present--;
 
 3099                                 sps->bit_depth, 
sps->bit_depth_chroma,
 
 3100                                 s->cur_frame->poc );
 
 3104     if (
s->sei.timecode.present) {
 
 3109                                      sizeof(uint32_t) * 4, &tcside);
 
 3114             tc_sd = (uint32_t*)tcside->
data;
 
 3115             tc_sd[0] = 
s->sei.timecode.num_clock_ts;
 
 3117             for (
int i = 0; 
i < tc_sd[0]; 
i++) {
 
 3118                 int drop = 
s->sei.timecode.cnt_dropped_flag[
i];
 
 3119                 int   hh = 
s->sei.timecode.hours_value[
i];
 
 3120                 int   mm = 
s->sei.timecode.minutes_value[
i];
 
 3121                 int   ss = 
s->sei.timecode.seconds_value[
i];
 
 3122                 int   ff = 
s->sei.timecode.n_frames[
i];
 
 3130         s->sei.timecode.num_clock_ts = 0;
 
 3133     if (
s->sei.common.dynamic_hdr_plus.info) {
 
 3154     if (
s->sei.common.dynamic_hdr_vivid.info) {
 
 3157                                     &
s->sei.common.dynamic_hdr_vivid.info,
 
 3169     for (
int i = nal_idx; 
i < 
s->pkt.nb_nals; 
i++) {
 
 3175             !(
s->layers_active_decode & (1 << 
s->vps->layer_idx[layer_id])))
 
 3178         switch (nal->
type) {
 
 3211     const HEVCPPS *
const pps = 
s->ps.pps_list[
s->sh.pps_id];
 
 3213     int pic_size_in_ctb  = ((
sps->width  >> 
sps->log2_min_cb_size) + 1) *
 
 3214                            ((
sps->height >> 
sps->log2_min_cb_size) + 1);
 
 3215     int new_sequence = (l == &
s->layers[0]) &&
 
 3217     int prev_layers_active_decode = 
s->layers_active_decode;
 
 3218     int prev_layers_active_output = 
s->layers_active_output;
 
 3221     if (
sps->vps != 
s->vps && l != &
s->layers[0]) {
 
 3229         const HEVCSPS *sps_base = 
s->layers[0].sps;
 
 3232         if (l != &
s->layers[0]) {
 
 3235                        "Access unit starts with a non-base layer frame\n");
 
 3244                 !
sps->vui.common.video_signal_type_present_flag)
 
 3257                        "Base/non-base layer SPS have unsupported parameter combination\n");
 
 3268         if (l == &
s->layers[0]) {
 
 3284     memset(l->
is_pcm,        0, (
sps->min_pu_width + 1) * (
sps->min_pu_height + 1));
 
 3291     s->first_nal_type    = 
s->nal_unit_type;
 
 3301         s->sei.recovery_point.has_recovery_poc) {
 
 3303             s->recovery_poc = 
s->poc + 
s->sei.recovery_point.recovery_poc_cnt;
 
 3304         else if (
s->poc >= 
s->recovery_poc)
 
 3309     if (
s->temporal_id == 0 &&
 
 3317         s->poc_tid0 = 
s->poc;
 
 3319     if (
pps->tiles_enabled_flag)
 
 3320         s->local_ctx[0].end_of_tiles_x = 
pps->column_width[0] << 
sps->log2_ctb_size;
 
 3324                                     0, 0, 
s->sh.no_output_of_prior_pics_flag);
 
 3348     s->cur_frame->needs_fg = ((
s->sei.common.film_grain_characteristics &&
 
 3349                                s->sei.common.film_grain_characteristics->present) ||
 
 3350                               s->sei.common.aom_film_grain.enable) &&
 
 3358     if (
s->cur_frame->needs_fg &&
 
 3359         (
s->sei.common.film_grain_characteristics && 
s->sei.common.film_grain_characteristics->present &&
 
 3361                                               s->cur_frame->f->format) ||
 
 3364                     "Unsupported film grain parameters. Ignoring film grain.\n");
 
 3365         s->cur_frame->needs_fg = 0;
 
 3368     if (
s->cur_frame->needs_fg) {
 
 3369         s->cur_frame->frame_grain->format = 
s->cur_frame->f->format;
 
 3370         s->cur_frame->frame_grain->width  = 
s->cur_frame->f->width;
 
 3371         s->cur_frame->frame_grain->height = 
s->cur_frame->f->height;
 
 3380     s->cur_frame->f->pict_type = 3 - 
s->sh.slice_type;
 
 3383                                 sps->temporal_layer[
sps->max_sub_layers - 1].num_reorder_pics,
 
 3384                                 sps->temporal_layer[
sps->max_sub_layers - 1].max_dec_pic_buffering, 0);
 
 3388     if (
s->avctx->hwaccel) {
 
 3400     if (l == &
s->layers[0])
 
 3403     if (nal_idx >= 
s->finish_setup_nal_idx)
 
 3412     s->cur_frame = 
s->collocated_ref = 
NULL;
 
 3413     s->slice_initialized = 0;
 
 3420     char msg_buf[4 * (50 + 2 * 2 * 16 )];
 
 3428     pixel_shift = 
desc->comp[0].depth > 8;
 
 3433     if (pixel_shift && !
s->checksum_buf) {
 
 3436                               frame->linesize[2]));
 
 3437         if (!
s->checksum_buf)
 
 3444         int width  = 
s->avctx->coded_width;
 
 3445         int height = 
s->avctx->coded_height;
 
 3451         for (j = 0; j < 
h; j++) {
 
 3455                 s->bdsp.bswap16_buf((uint16_t *) 
s->checksum_buf,
 
 3456                                     (
const uint16_t *) 
src, 
w);
 
 3457                 src = 
s->checksum_buf;
 
 3464 #define MD5_PRI "%016" PRIx64 "%016" PRIx64 
 3465 #define MD5_PRI_ARG(buf) AV_RB64(buf), AV_RB64((const uint8_t*)(buf) + 8) 
 3467         if (!memcmp(
md5, 
s->sei.picture_hash.md5[
i], 16)) {
 
 3469                         "plane %d - correct " MD5_PRI "; ",
 
 3473                        "mismatching checksum of plane %d - " MD5_PRI " != " MD5_PRI "; ",
 
 3480            "Verifying checksum for frame with POC %d: %s\n",
 
 3492     if (
out->needs_fg) {
 
 3495         switch (fgp->
type) {
 
 3509     if (
s->avctx->hwaccel) {
 
 3513                    "hardware accelerator failed to decode picture\n");
 
 3518             s->sei.picture_hash.is_md5) {
 
 3524     s->sei.picture_hash.is_md5 = 0;
 
 3527            l - 
s->layers, 
s->poc);
 
 3534     const int layer_idx = 
s->vps ? 
s->vps->layer_idx[
s->nuh_layer_id] : 0;
 
 3541     if (layer_idx < 0 ||
 
 3542         (
s->nuh_layer_id > 0 && !(
s->layers_active_decode & (1 << layer_idx))))
 
 3548         s->slice_initialized = 0;
 
 3556          s->no_rasl_output_flag)) {
 
 3561     if (
s->cur_layer != layer_idx &&
 
 3562         s->layers[
s->cur_layer].cur_frame &&
 
 3566     s->cur_layer = layer_idx;
 
 3567     l = &
s->layers[
s->cur_layer];
 
 3569     if (
s->sh.first_slice_in_pic_flag) {
 
 3571             av_log(
s->avctx, 
AV_LOG_ERROR, 
"Two slices reporting being the first in the same frame.\n");
 
 3583     if (
s->nal_unit_type != 
s->first_nal_type) {
 
 3585                "Non-matching NAL types of the VCL NALUs: %d %d\n",
 
 3586                s->first_nal_type, 
s->nal_unit_type);
 
 3603     s->nal_unit_type = nal->
type;
 
 3619     switch (
s->nal_unit_type) {
 
 3670                "Skipping NAL unit %d\n", 
s->nal_unit_type);
 
 3678                "Skipping invalid undecodable NALU: %d\n", 
s->nal_unit_type);
 
 3687     s->sei.recovery_point.has_recovery_poc = 0;
 
 3693     int eos_at_start = 1;
 
 3696     s->cur_frame = 
s->collocated_ref = 
NULL;
 
 3697     s->last_eos = 
s->eos;
 
 3699     s->slice_initialized = 0;
 
 3711                                 s->nal_length_size, 
s->avctx->codec_id, 
flags);
 
 3714                "Error splitting the input into NAL units.\n");
 
 3718     for (
i = 0; 
i < 
s->pkt.nb_nals; 
i++) {
 
 3741         s->pkt.nals[
s->pkt.nb_nals - 1].size > 2 && !
s->pkt.nals[
s->pkt.nb_nals - 1].nuh_layer_id
 
 3742         && !
s->pkt.nals[
s->pkt.nb_nals - 1].temporal_id) {
 
 3743         H2645NAL *nal = &
s->pkt.nals[
s->pkt.nb_nals - 1];
 
 3746             av_log(
s->avctx, 
AV_LOG_WARNING, 
"Multiple Dolby Vision RPUs found in one AU. Skipping previous.\n");
 
 3757                                 s->avctx->err_recognition);
 
 3766     for (
i = 0; 
i < 
s->pkt.nb_nals; 
i++) {
 
 3776                    "Error parsing NAL unit #%d.\n", 
i);
 
 3803                                    &
s->nal_length_size, 
s->avctx->err_recognition,
 
 3804                                    s->apply_defdispwin, 
s->avctx);
 
 3810         if (
first && 
s->ps.sps_list[
i]) {
 
 3849                                     s->layers_active_output, 0, 0, 0);
 
 3856     s->pkt_dts = avpkt->
dts;
 
 3859     if (sd && sd_size > 0) {
 
 3866     if (sd && sd_size >= 
sizeof(
s->dovi_ctx.cfg)) {
 
 3867         int old = 
s->dovi_ctx.cfg.dv_profile;
 
 3871                    "New DOVI configuration record from input packet (profile %d -> %u).\n",
 
 3872                    old, 
s->dovi_ctx.cfg.dv_profile);
 
 3896     if (
src->needs_fg) {
 
 3909     dst->nb_rpl_elems = 
src->nb_rpl_elems;
 
 3912     dst->ctb_count  = 
src->ctb_count;
 
 3915     dst->base_layer_frame = 
src->base_layer_frame;
 
 3918                           src->hwaccel_picture_private);
 
 3952     for (
int i = 0; 
i < 
s->nb_wpp_progress; 
i++)
 
 3978     s->nb_local_ctx = 1;
 
 3980     s->local_ctx[0].parent = 
s;
 
 3981     s->local_ctx[0].logctx = avctx;
 
 3982     s->local_ctx[0].common_cabac_state = &
s->cabac;
 
 3985     if (!
s->output_fifo)
 
 4003     s->dovi_ctx.logctx = avctx;
 
 4062         memcmp(
s->view_ids, s0->
view_ids, 
sizeof(*
s->view_ids) * 
s->nb_view_ids)) {
 
 4109     if (
sei->tdrdi.present) {
 
 4123         tdrdi->prec_ref_display_width = 
sei->tdrdi.prec_ref_display_width;
 
 4124         tdrdi->ref_viewing_distance_flag = 
sei->tdrdi.ref_viewing_distance_flag;
 
 4125         tdrdi->prec_ref_viewing_dist = 
sei->tdrdi.prec_ref_viewing_dist;
 
 4126         tdrdi->num_ref_displays = 
sei->tdrdi.num_ref_displays;
 
 4127         for (
int i = 0; 
i < 
sei->tdrdi.num_ref_displays; 
i++) {
 
 4163     s->sei.picture_timing.picture_struct = 0;
 
 4183         if (sd && sd->
size >= 
sizeof(
s->dovi_ctx.cfg))
 
 4203 #define OFFSET(x) offsetof(HEVCContext, x) 
 4204 #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM) 
 4207     { 
"apply_defdispwin", 
"Apply default display window from VUI", 
OFFSET(apply_defdispwin),
 
 4209     { 
"strict-displaywin", 
"strictly apply default display window size", 
OFFSET(apply_defdispwin),
 
 4211     { 
"view_ids", 
"Array of view IDs that should be decoded and output; a single -1 to decode all views",
 
 4213         .min = -1, .max = INT_MAX, .flags = 
PAR },
 
 4214     { 
"view_ids_available", 
"Array of available view IDs is exported here",
 
 4217     { 
"view_pos_available", 
"Array of view positions for view_ids_available is exported here, as AVStereo3DView",
 
 4253 #if CONFIG_HEVC_DXVA2_HWACCEL 
 4256 #if CONFIG_HEVC_D3D11VA_HWACCEL 
 4259 #if CONFIG_HEVC_D3D11VA2_HWACCEL 
 4262 #if CONFIG_HEVC_D3D12VA_HWACCEL 
 4265 #if CONFIG_HEVC_NVDEC_HWACCEL 
 4268 #if CONFIG_HEVC_VAAPI_HWACCEL 
 4271 #if CONFIG_HEVC_VDPAU_HWACCEL 
 4274 #if CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 
 4277 #if CONFIG_HEVC_VULKAN_HWACCEL