Revision d268bed2 libavcodec/h264_ps.c

View differences:

libavcodec/h264_ps.c
57 57
 {2, 1},
58 58
};
59 59

  
60
const uint8_t ff_h264_chroma_qp[52]={
61
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,
62
   12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,
63
   28,29,29,30,31,32,32,33,34,34,35,35,36,36,37,37,
64
   37,38,38,38,39,39,39,39
60
#define QP(qP,depth) ( (qP)+6*((depth)-8) )
61

  
62
#define CHROMA_QP_TABLE_END(d) \
63
     QP(0,d),  QP(1,d),  QP(2,d),  QP(3,d),  QP(4,d),  QP(5,d),\
64
     QP(6,d),  QP(7,d),  QP(8,d),  QP(9,d), QP(10,d), QP(11,d),\
65
    QP(12,d), QP(13,d), QP(14,d), QP(15,d), QP(16,d), QP(17,d),\
66
    QP(18,d), QP(19,d), QP(20,d), QP(21,d), QP(22,d), QP(23,d),\
67
    QP(24,d), QP(25,d), QP(26,d), QP(27,d), QP(28,d), QP(29,d),\
68
    QP(29,d), QP(30,d), QP(31,d), QP(32,d), QP(32,d), QP(33,d),\
69
    QP(34,d), QP(34,d), QP(35,d), QP(35,d), QP(36,d), QP(36,d),\
70
    QP(37,d), QP(37,d), QP(37,d), QP(38,d), QP(38,d), QP(38,d),\
71
    QP(39,d), QP(39,d), QP(39,d), QP(39,d)
72

  
73
const uint8_t ff_h264_chroma_qp[3][QP_MAX_MAX+1] = {
74
    {
75
        CHROMA_QP_TABLE_END(8)
76
    },
77
    {
78
        0, 1, 2, 3, 4, 5,
79
        CHROMA_QP_TABLE_END(9)
80
    },
81
    {
82
        0, 1, 2, 3,  4,  5,
83
        6, 7, 8, 9, 10, 11,
84
        CHROMA_QP_TABLE_END(10)
85
    },
65 86
};
66 87

  
67 88
static const uint8_t default_scaling4[2][16]={
......
419 440
}
420 441

  
421 442
static void
422
build_qp_table(PPS *pps, int t, int index)
443
build_qp_table(PPS *pps, int t, int index, const int depth)
423 444
{
424 445
    int i;
425
    for(i = 0; i < 52; i++)
426
        pps->chroma_qp_table[t][i] = ff_h264_chroma_qp[av_clip(i + index, 0, 51)];
446
    const int max_qp = 51 + 6*(depth-8);
447
    for(i = 0; i < max_qp+1; i++)
448
        pps->chroma_qp_table[t][i] = ff_h264_chroma_qp[depth-8][av_clip(i + index, 0, max_qp)];
427 449
}
428 450

  
429 451
int ff_h264_decode_picture_parameter_set(H264Context *h, int bit_length){
430 452
    MpegEncContext * const s = &h->s;
431 453
    unsigned int pps_id= get_ue_golomb(&s->gb);
432 454
    PPS *pps;
455
    const int qp_bd_offset = 6*(h->sps.bit_depth_luma-8);
433 456

  
434 457
    if(pps_id >= MAX_PPS_COUNT) {
435 458
        av_log(h->s.avctx, AV_LOG_ERROR, "pps_id (%d) out of range\n", pps_id);
......
494 517

  
495 518
    pps->weighted_pred= get_bits1(&s->gb);
496 519
    pps->weighted_bipred_idc= get_bits(&s->gb, 2);
497
    pps->init_qp= get_se_golomb(&s->gb) + 26;
498
    pps->init_qs= get_se_golomb(&s->gb) + 26;
520
    pps->init_qp= get_se_golomb(&s->gb) + 26 + qp_bd_offset;
521
    pps->init_qs= get_se_golomb(&s->gb) + 26 + qp_bd_offset;
499 522
    pps->chroma_qp_index_offset[0]= get_se_golomb(&s->gb);
500 523
    pps->deblocking_filter_parameters_present= get_bits1(&s->gb);
501 524
    pps->constrained_intra_pred= get_bits1(&s->gb);
......
514 537
        pps->chroma_qp_index_offset[1]= pps->chroma_qp_index_offset[0];
515 538
    }
516 539

  
517
    build_qp_table(pps, 0, pps->chroma_qp_index_offset[0]);
518
    build_qp_table(pps, 1, pps->chroma_qp_index_offset[1]);
540
    build_qp_table(pps, 0, pps->chroma_qp_index_offset[0], h->sps.bit_depth_luma);
541
    build_qp_table(pps, 1, pps->chroma_qp_index_offset[1], h->sps.bit_depth_luma);
519 542
    if(pps->chroma_qp_index_offset[0] != pps->chroma_qp_index_offset[1])
520 543
        pps->chroma_qp_diff= 1;
521 544

  

Also available in: Unified diff