| @@ -45,6 +45,8 @@ | |||||
| // #undef NDEBUG | // #undef NDEBUG | ||||
| #include <assert.h> | #include <assert.h> | ||||
| const uint16_t ff_h264_mb_sizes[4] = { 256, 384, 512, 768 }; | |||||
| static const uint8_t rem6[QP_MAX_NUM + 1] = { | static const uint8_t rem6[QP_MAX_NUM + 1] = { | ||||
| 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, | 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, | ||||
| 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, | 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, | ||||
| @@ -2138,12 +2140,11 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple, | |||||
| if (!simple && IS_INTRA_PCM(mb_type)) { | if (!simple && IS_INTRA_PCM(mb_type)) { | ||||
| if (pixel_shift) { | if (pixel_shift) { | ||||
| static const uint16_t mb_sizes[4] = { 256, 384, 512, 768 }; | |||||
| const int bit_depth = h->sps.bit_depth_luma; | const int bit_depth = h->sps.bit_depth_luma; | ||||
| int j; | int j; | ||||
| GetBitContext gb; | GetBitContext gb; | ||||
| init_get_bits(&gb, (uint8_t *)h->mb, | init_get_bits(&gb, (uint8_t *)h->mb, | ||||
| mb_sizes[h->sps.chroma_format_idc] * bit_depth); | |||||
| ff_h264_mb_sizes[h->sps.chroma_format_idc] * bit_depth); | |||||
| for (i = 0; i < 16; i++) { | for (i = 0; i < 16; i++) { | ||||
| uint16_t *tmp_y = (uint16_t *)(dest_y + i * linesize); | uint16_t *tmp_y = (uint16_t *)(dest_y + i * linesize); | ||||
| @@ -584,6 +584,7 @@ typedef struct H264Context{ | |||||
| extern const uint8_t ff_h264_chroma_qp[3][QP_MAX_NUM+1]; ///< One chroma qp table for each supported bit depth (8, 9, 10). | extern const uint8_t ff_h264_chroma_qp[3][QP_MAX_NUM+1]; ///< One chroma qp table for each supported bit depth (8, 9, 10). | ||||
| extern const uint16_t ff_h264_mb_sizes[4]; | |||||
| /** | /** | ||||
| * Decode SEI | * Decode SEI | ||||
| @@ -1983,8 +1983,8 @@ decode_intra_mb: | |||||
| h->slice_table[ mb_xy ]= h->slice_num; | h->slice_table[ mb_xy ]= h->slice_num; | ||||
| if(IS_INTRA_PCM(mb_type)) { | if(IS_INTRA_PCM(mb_type)) { | ||||
| static const uint16_t mb_sizes[4] = {256,384,512,768}; | |||||
| const int mb_size = mb_sizes[h->sps.chroma_format_idc]*h->sps.bit_depth_luma >> 3; | |||||
| const int mb_size = ff_h264_mb_sizes[h->sps.chroma_format_idc] * | |||||
| h->sps.bit_depth_luma >> 3; | |||||
| const uint8_t *ptr; | const uint8_t *ptr; | ||||
| // We assume these blocks are very rare so we do not optimize it. | // We assume these blocks are very rare so we do not optimize it. | ||||
| @@ -764,8 +764,8 @@ decode_intra_mb: | |||||
| if(IS_INTRA_PCM(mb_type)){ | if(IS_INTRA_PCM(mb_type)){ | ||||
| unsigned int x; | unsigned int x; | ||||
| static const uint16_t mb_sizes[4] = {256,384,512,768}; | |||||
| const int mb_size = mb_sizes[h->sps.chroma_format_idc]*h->sps.bit_depth_luma >> 3; | |||||
| const int mb_size = ff_h264_mb_sizes[h->sps.chroma_format_idc] * | |||||
| h->sps.bit_depth_luma >> 3; | |||||
| // We assume these blocks are very rare so we do not optimize it. | // We assume these blocks are very rare so we do not optimize it. | ||||
| align_get_bits(&s->gb); | align_get_bits(&s->gb); | ||||