51 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,
52 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
53 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
57 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3,
58 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
59 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
77 static const int8_t top[12] = {
80 static const int8_t left[12] = {
86 for (i = 0; i < 4; i++) {
90 "top block unavailable for requested intra4x4 mode %d at %d %d\n",
100 static const int mask[4] = { 0x8000, 0x2000, 0x80, 0x20 };
101 for (i = 0; i < 4; i++)
106 "left block unavailable for requested intra4x4 mode %d at %d %d\n",
130 "out of range intra chroma pred mode at %d %d\n",
139 "top block unavailable for requested intra mode at %d %d\n",
155 "left block unavailable for requested intra mode at %d %d\n",
165 int *dst_length,
int *consumed,
int length)
178 #define STARTCODE_TEST \
179 if (i + 2 < length && src[i + 1] == 0 && src[i + 2] <= 3) { \
180 if (src[i + 2] != 3) { \
186 #if HAVE_FAST_UNALIGNED
187 #define FIND_FIRST_ZERO \
188 if (i > 0 && !src[i]) \
193 for (i = 0; i + 1 < length; i += 9) {
195 (
AV_RN64A(src + i) - 0x0100010001000101ULL)) &
196 0x8000800080008080ULL))
203 for (i = 0; i + 1 < length; i += 5) {
205 (
AV_RN32A(src + i) - 0x01000101U)) &
214 for (i = 0; i + 1 < length; i += 2) {
217 if (i > 0 && src[i - 1] == 0)
223 if (i >= length - 1) {
224 *dst_length = length;
225 *consumed = length + 1;
240 while (si + 2 < length) {
242 if (src[si + 2] > 3) {
243 dst[di++] = src[si++];
244 dst[di++] = src[si++];
245 }
else if (src[si] == 0 && src[si + 1] == 0) {
246 if (src[si + 2] == 3) {
255 dst[di++] = src[si++];
258 dst[di++] = src[si++];
281 for (r = 1; r < 9; r++) {
290 int height,
int y_offset,
int list)
293 int filter_height_up = (raw_my & 3) ? 2 : 0;
294 int filter_height_down = (raw_my & 3) ? 3 : 0;
295 int full_my = (raw_my >> 2) + y_offset;
296 int top = full_my - filter_height_up;
297 int bottom = full_my + filter_height_down +
height;
299 return FFMAX(abs(top), bottom);
303 int height,
int y_offset,
int list0,
304 int list1,
int *nrefs)
321 if (refs[0][ref_n] < 0)
323 refs[0][ref_n] =
FFMAX(refs[0][ref_n], my);
334 if (refs[1][ref_n] < 0)
336 refs[1][ref_n] =
FFMAX(refs[1][ref_n], my);
349 const int mb_xy = h->
mb_xy;
352 int nrefs[2] = { 0 };
355 memset(refs, -1,
sizeof(refs));
375 for (i = 0; i < 4; i++) {
378 int y_offset = (i & 2) << 2;
382 IS_DIR(sub_mb_type, 0, 0),
383 IS_DIR(sub_mb_type, 0, 1),
387 IS_DIR(sub_mb_type, 0, 0),
388 IS_DIR(sub_mb_type, 0, 1),
391 IS_DIR(sub_mb_type, 0, 0),
392 IS_DIR(sub_mb_type, 0, 1),
396 IS_DIR(sub_mb_type, 0, 0),
397 IS_DIR(sub_mb_type, 0, 1),
400 IS_DIR(sub_mb_type, 0, 0),
401 IS_DIR(sub_mb_type, 0, 1),
406 for (j = 0; j < 4; j++) {
407 int sub_y_offset = y_offset + 2 * (j & 2);
409 IS_DIR(sub_mb_type, 0, 0),
410 IS_DIR(sub_mb_type, 0, 1),
417 for (list = h->
list_count - 1; list >= 0; list--)
418 for (ref = 0; ref < 48 && nrefs[list]; ref++) {
419 int row = refs[list][ref];
424 int pic_height = 16 * s->
mb_height >> ref_field_picture;
431 FFMIN((row >> 1) - !(row & 1),
435 FFMIN((row >> 1), pic_height - 1),
439 FFMIN(row * 2 + ref_field,
444 FFMIN(row, pic_height - 1),
448 FFMIN(row, pic_height - 1),
460 int src_x_offset,
int src_y_offset,
463 int pixel_shift,
int chroma_idc)
466 const int mx = h->
mv_cache[list][
scan8[n]][0] + src_x_offset * 8;
468 const int luma_xy = (mx & 3) + ((my & 3) << 2);
469 int offset = ((mx >> 2) << pixel_shift) + (my >> 2) * h->
mb_linesize;
475 const int full_mx = mx >> 2;
476 const int full_my = my >> 2;
477 const int pic_width = 16 * s->
mb_width;
486 if (full_mx < 0 - extra_width ||
487 full_my < 0 - extra_height ||
488 full_mx + 16 > pic_width + extra_width ||
489 full_my + 16 > pic_height + extra_height) {
493 16 + 5, 16 + 5 , full_mx - 2,
494 full_my - 2, pic_width, pic_height);
506 if (chroma_idc == 3 ) {
507 src_cb = pic->
f.
data[1] + offset;
513 full_mx - 2, full_my - 2,
514 pic_width, pic_height);
521 src_cr = pic->
f.
data[2] + offset;
527 full_mx - 2, full_my - 2,
528 pic_width, pic_height);
537 ysh = 3 - (chroma_idc == 2 );
541 emu |= (my >> 3) < 0 || (my >> 3) + 8 >= (pic_height >> 1);
544 src_cb = pic->
f.
data[1] + ((mx >> 3) << pixel_shift) +
546 src_cr = pic->
f.
data[2] + ((mx >> 3) << pixel_shift) +
551 9, 8 * chroma_idc + 1, (mx >> 3), (my >> ysh),
552 pic_width >> 1, pic_height >> (chroma_idc == 1 ));
556 height >> (chroma_idc == 1 ),
557 mx & 7, (my << (chroma_idc == 2 )) & 7);
561 9, 8 * chroma_idc + 1, (mx >> 3), (my >> ysh),
562 pic_width >> 1, pic_height >> (chroma_idc == 1 ));
565 chroma_op(dest_cr, src_cr, h->
mb_uvlinesize, height >> (chroma_idc == 1 ),
566 mx & 7, (my << (chroma_idc == 2 )) & 7);
573 int x_offset,
int y_offset,
578 int list0,
int list1,
579 int pixel_shift,
int chroma_idc)
585 dest_y += (2 * x_offset << pixel_shift) + 2 * y_offset * h->
mb_linesize;
586 if (chroma_idc == 3 ) {
587 dest_cb += (2 * x_offset << pixel_shift) + 2 * y_offset * h->
mb_linesize;
588 dest_cr += (2 * x_offset << pixel_shift) + 2 * y_offset * h->
mb_linesize;
589 }
else if (chroma_idc == 2 ) {
590 dest_cb += (x_offset << pixel_shift) + 2 * y_offset * h->
mb_uvlinesize;
591 dest_cr += (x_offset << pixel_shift) + 2 * y_offset * h->
mb_uvlinesize;
593 dest_cb += (x_offset << pixel_shift) + y_offset * h->
mb_uvlinesize;
594 dest_cr += (x_offset << pixel_shift) + y_offset * h->
mb_uvlinesize;
596 x_offset += 8 * s->
mb_x;
602 dest_y, dest_cb, dest_cr, x_offset, y_offset,
603 qpix_op, chroma_op, pixel_shift, chroma_idc);
606 chroma_op = chroma_avg;
612 dest_y, dest_cb, dest_cr, x_offset, y_offset,
613 qpix_op, chroma_op, pixel_shift, chroma_idc);
621 int x_offset,
int y_offset,
628 int list0,
int list1,
629 int pixel_shift,
int chroma_idc)
634 dest_y += (2 * x_offset << pixel_shift) + 2 * y_offset * h->
mb_linesize;
635 if (chroma_idc == 3 ) {
637 chroma_weight_avg = luma_weight_avg;
638 chroma_weight_op = luma_weight_op;
639 dest_cb += (2 * x_offset << pixel_shift) + 2 * y_offset * h->
mb_linesize;
640 dest_cr += (2 * x_offset << pixel_shift) + 2 * y_offset * h->
mb_linesize;
641 }
else if (chroma_idc == 2 ) {
643 dest_cb += (x_offset << pixel_shift) + 2 * y_offset * h->
mb_uvlinesize;
644 dest_cr += (x_offset << pixel_shift) + 2 * y_offset * h->
mb_uvlinesize;
646 chroma_height = height >> 1;
647 dest_cb += (x_offset << pixel_shift) + y_offset * h->
mb_uvlinesize;
648 dest_cr += (x_offset << pixel_shift) + y_offset * h->
mb_uvlinesize;
650 x_offset += 8 * s->
mb_x;
653 if (list0 && list1) {
663 dest_y, dest_cb, dest_cr,
664 x_offset, y_offset, qpix_put, chroma_put,
665 pixel_shift, chroma_idc);
667 tmp_y, tmp_cb, tmp_cr,
668 x_offset, y_offset, qpix_put, chroma_put,
669 pixel_shift, chroma_idc);
673 int weight1 = 64 - weight0;
675 height, 5, weight0, weight1, 0);
677 chroma_height, 5, weight0, weight1, 0);
679 chroma_height, 5, weight0, weight1, 0);
681 luma_weight_avg(dest_y, tmp_y, h->
mb_linesize, height,
687 chroma_weight_avg(dest_cb, tmp_cb, h->
mb_uvlinesize, chroma_height,
693 chroma_weight_avg(dest_cr, tmp_cr, h->
mb_uvlinesize, chroma_height,
701 int list = list1 ? 1 : 0;
704 mc_dir_part(h, ref, n, square, height, delta, list,
705 dest_y, dest_cb, dest_cr, x_offset, y_offset,
706 qpix_put, chroma_put, pixel_shift, chroma_idc);
726 int pixel_shift,
int chroma_idc)
736 int off = (mx << pixel_shift) +
740 if (chroma_idc == 3 ) {
744 off = ((mx >> 1) << pixel_shift) +
794 for (i = 0; i < 6; i++) {
796 for (j = 0; j < i; j++)
805 for (q = 0; q < max_qp + 1; q++) {
808 for (x = 0; x < 64; x++)
820 for (i = 0; i < 6; i++) {
822 for (j = 0; j < i; j++)
831 for (q = 0; q < max_qp + 1; q++) {
832 int shift =
div6[q] + 2;
834 for (x = 0; x < 16; x++)
849 for (i = 0; i < 6; i++)
850 for (x = 0; x < 16; x++)
853 for (i = 0; i < 6; i++)
854 for (x = 0; x < 64; x++)
867 row_mb_num * 8 *
sizeof(
uint8_t), fail)
869 big_mb_num * 48 *
sizeof(
uint8_t), fail)
873 big_mb_num *
sizeof(uint16_t), fail)
875 big_mb_num *
sizeof(
uint8_t), fail)
877 16 * row_mb_num *
sizeof(
uint8_t), fail);
879 16 * row_mb_num *
sizeof(
uint8_t), fail);
881 4 * big_mb_num *
sizeof(
uint8_t), fail);
883 big_mb_num *
sizeof(
uint8_t), fail)
890 big_mb_num *
sizeof(uint32_t), fail);
892 big_mb_num *
sizeof(uint32_t), fail);
896 const int b_xy = 4 * x + 4 * y * h->
b_stride;
959 int parse_extradata);
1001 cnt = *(p + 5) & 0x1f;
1003 for (i = 0; i < cnt; i++) {
1009 "Decoding sps %d from avcC failed\n", i);
1016 for (i = 0; i < cnt; i++) {
1022 "Decoding pps %d from avcC failed\n", i);
1090 #define IN_RANGE(a, b, size) (((a) >= (b)) && ((a) < ((b) + (size))))
1098 for (i = 0; i < count; i++) {
1099 assert((
IN_RANGE(from[i], old_base,
sizeof(*old_base)) ||
1111 for (i = 0; i < count; i++) {
1112 if (to[i] && !from[i])
1114 else if (from[i] && !to[i])
1118 memcpy(to[i], from[i], size);
1136 #define copy_fields(to, from, start_field, end_field) \
1137 memcpy(&to->start_field, &from->start_field, \
1138 (char *)&to->end_field - (char *)&to->start_field)
1152 if (dst == src || !
s1->context_initialized)
1199 memcpy(&h->
s + 1, &h1->s + 1,
1209 for (i = 0; i < 2; i++) {
1239 copy_fields(h, h1, dequant4_buffer, dequant4_coeff);
1241 for (i = 0; i < 6; i++)
1243 (h1->dequant4_coeff[i] - h1->dequant4_buffer[0]);
1245 for (i = 0; i < 6; i++)
1247 (h1->dequant8_coeff[i] - h1->dequant8_buffer[0]);
1301 for (i = 0; i < 16; i++) {
1305 for (i = 0; i < 16; i++) {
1358 int i, pics, out_of_order, out_idx;
1359 int invalid = 0, cnt = 0;
1484 invalid += out->
poc == INT_MIN;
1487 cnt + invalid == MAX_DELAYED_PIC_COUNT && cnt > 0) {
1496 invalid = MAX_DELAYED_PIC_COUNT;
1500 for (i = 1; i < MAX_DELAYED_PIC_COUNT &&
1519 if (invalid + cnt < MAX_DELAYED_PIC_COUNT) {
1540 sizeof(*h->
last_pocs) * (MAX_DELAYED_PIC_COUNT - 1));
1569 int linesize,
int uvlinesize,
1580 src_cb -= uvlinesize;
1581 src_cr -= uvlinesize;
1587 AV_COPY128(top_border, src_y + 15 * linesize);
1589 AV_COPY128(top_border + 16, src_y + 15 * linesize + 16);
1593 AV_COPY128(top_border + 32, src_cb + 15 * uvlinesize);
1594 AV_COPY128(top_border + 48, src_cb + 15 * uvlinesize + 16);
1595 AV_COPY128(top_border + 64, src_cr + 15 * uvlinesize);
1596 AV_COPY128(top_border + 80, src_cr + 15 * uvlinesize + 16);
1598 AV_COPY128(top_border + 16, src_cb + 15 * uvlinesize);
1599 AV_COPY128(top_border + 32, src_cr + 15 * uvlinesize);
1601 }
else if (chroma422) {
1603 AV_COPY128(top_border + 32, src_cb + 15 * uvlinesize);
1604 AV_COPY128(top_border + 48, src_cr + 15 * uvlinesize);
1606 AV_COPY64(top_border + 16, src_cb + 15 * uvlinesize);
1607 AV_COPY64(top_border + 24, src_cr + 15 * uvlinesize);
1611 AV_COPY128(top_border + 32, src_cb + 7 * uvlinesize);
1612 AV_COPY128(top_border + 48, src_cr + 7 * uvlinesize);
1614 AV_COPY64(top_border + 16, src_cb + 7 * uvlinesize);
1615 AV_COPY64(top_border + 24, src_cr + 7 * uvlinesize);
1629 AV_COPY128(top_border, src_y + 16 * linesize);
1631 AV_COPY128(top_border + 16, src_y + 16 * linesize + 16);
1636 AV_COPY128(top_border + 32, src_cb + 16 * linesize);
1637 AV_COPY128(top_border + 48, src_cb + 16 * linesize + 16);
1638 AV_COPY128(top_border + 64, src_cr + 16 * linesize);
1639 AV_COPY128(top_border + 80, src_cr + 16 * linesize + 16);
1641 AV_COPY128(top_border + 16, src_cb + 16 * linesize);
1642 AV_COPY128(top_border + 32, src_cr + 16 * linesize);
1644 }
else if (chroma422) {
1646 AV_COPY128(top_border + 32, src_cb + 16 * uvlinesize);
1647 AV_COPY128(top_border + 48, src_cr + 16 * uvlinesize);
1649 AV_COPY64(top_border + 16, src_cb + 16 * uvlinesize);
1650 AV_COPY64(top_border + 24, src_cr + 16 * uvlinesize);
1654 AV_COPY128(top_border + 32, src_cb + 8 * uvlinesize);
1655 AV_COPY128(top_border + 48, src_cr + 8 * uvlinesize);
1657 AV_COPY64(top_border + 16, src_cb + 8 * uvlinesize);
1658 AV_COPY64(top_border + 24, src_cr + 8 * uvlinesize);
1666 int linesize,
int uvlinesize,
1667 int xchg,
int chroma444,
1668 int simple,
int pixel_shift)
1671 int deblock_topleft;
1690 deblock_topleft = (s->
mb_x > 0);
1694 src_y -= linesize + 1 + pixel_shift;
1695 src_cb -= uvlinesize + 1 + pixel_shift;
1696 src_cr -= uvlinesize + 1 + pixel_shift;
1701 #define XCHG(a, b, xchg) \
1702 if (pixel_shift) { \
1704 AV_SWAP64(b + 0, a + 0); \
1705 AV_SWAP64(b + 8, a + 8); \
1715 if (deblock_topleft) {
1716 XCHG(top_border_m1 + (8 << pixel_shift),
1717 src_y - (7 << pixel_shift), 1);
1719 XCHG(top_border + (0 << pixel_shift), src_y + (1 << pixel_shift), xchg);
1720 XCHG(top_border + (8 << pixel_shift), src_y + (9 << pixel_shift), 1);
1723 src_y + (17 << pixel_shift), 1);
1728 if (deblock_topleft) {
1729 XCHG(top_border_m1 + (24 << pixel_shift), src_cb - (7 << pixel_shift), 1);
1730 XCHG(top_border_m1 + (40 << pixel_shift), src_cr - (7 << pixel_shift), 1);
1732 XCHG(top_border + (16 << pixel_shift), src_cb + (1 << pixel_shift), xchg);
1733 XCHG(top_border + (24 << pixel_shift), src_cb + (9 << pixel_shift), 1);
1734 XCHG(top_border + (32 << pixel_shift), src_cr + (1 << pixel_shift), xchg);
1735 XCHG(top_border + (40 << pixel_shift), src_cr + (9 << pixel_shift), 1);
1737 XCHG(h->
top_borders[top_idx][s->
mb_x + 1] + (16 << pixel_shift), src_cb + (17 << pixel_shift), 1);
1738 XCHG(h->
top_borders[top_idx][s->
mb_x + 1] + (32 << pixel_shift), src_cr + (17 << pixel_shift), 1);
1742 if (deblock_topleft) {
1743 XCHG(top_border_m1 + (16 << pixel_shift), src_cb - (7 << pixel_shift), 1);
1744 XCHG(top_border_m1 + (24 << pixel_shift), src_cr - (7 << pixel_shift), 1);
1746 XCHG(top_border + (16 << pixel_shift), src_cb + 1 + pixel_shift, 1);
1747 XCHG(top_border + (24 << pixel_shift), src_cr + 1 + pixel_shift, 1);
1756 if (high_bit_depth) {
1763 int index,
int value)
1765 if (high_bit_depth) {
1772 int mb_type,
int is_h264,
1774 int transform_bypass,
1785 block_offset += 16 * p;
1789 if (transform_bypass) {
1796 for (i = 0; i < 16; i += 4) {
1797 uint8_t *
const ptr = dest_y + block_offset[i];
1800 h->
hpc.
pred8x8l_add[dir](ptr, h->
mb + (i * 16 + p * 256 << pixel_shift), linesize);
1806 if (nnz == 1 &&
dctcoef_get(h->
mb, pixel_shift, i * 16 + p * 256))
1807 idct_dc_add(ptr, h->
mb + (i * 16 + p * 256 << pixel_shift), linesize);
1809 idct_add(ptr, h->
mb + (i * 16 + p * 256 << pixel_shift), linesize);
1814 if (transform_bypass) {
1821 for (i = 0; i < 16; i++) {
1822 uint8_t *
const ptr = dest_y + block_offset[i];
1826 h->
hpc.
pred4x4_add[dir](ptr, h->
mb + (i * 16 + p * 256 << pixel_shift), linesize);
1833 assert(s->
mb_y || linesize <= block_offset[i]);
1834 if (!topright_avail) {
1836 tr_high = ((uint16_t *)ptr)[3 - linesize / 2] * 0x0001000100010001ULL;
1837 topright = (
uint8_t *)&tr_high;
1839 tr = ptr[3 - linesize] * 0x01010101u;
1843 topright = ptr + (4 << pixel_shift) - linesize;
1847 h->
hpc.
pred4x4[dir](ptr, topright, linesize);
1851 if (nnz == 1 &&
dctcoef_get(h->
mb, pixel_shift, i * 16 + p * 256))
1852 idct_dc_add(ptr, h->
mb + (i * 16 + p * 256 << pixel_shift), linesize);
1854 idct_add(ptr, h->
mb + (i * 16 + p * 256 << pixel_shift), linesize);
1866 if (!transform_bypass)
1871 static const uint8_t dc_mapping[16] = {
1872 0 * 16, 1 * 16, 4 * 16, 5 * 16,
1873 2 * 16, 3 * 16, 6 * 16, 7 * 16,
1874 8 * 16, 9 * 16, 12 * 16, 13 * 16,
1875 10 * 16, 11 * 16, 14 * 16, 15 * 16 };
1876 for (i = 0; i < 16; i++)
1878 pixel_shift, dc_mapping[i],
1890 int is_h264,
int simple,
1891 int transform_bypass,
1900 block_offset += 16 * p;
1904 if (transform_bypass) {
1909 h->
mb + (p * 256 << pixel_shift),
1912 for (i = 0; i < 16; i++)
1916 h->
mb + (i * 16 + p * 256 << pixel_shift),
1921 h->
mb + (p * 256 << pixel_shift),
1925 }
else if (h->
cbp & 15) {
1926 if (transform_bypass) {
1927 const int di =
IS_8x8DCT(mb_type) ? 4 : 1;
1930 for (i = 0; i < 16; i += di)
1933 h->
mb + (i * 16 + p * 256 << pixel_shift),
1938 h->
mb + (p * 256 << pixel_shift),
1943 h->
mb + (p * 256 << pixel_shift),
1949 for (i = 0; i < 16; i++)
1952 uint8_t *
const ptr = dest_y + block_offset[i];
1975 const int mb_xy = h->
mb_xy;
1981 hl_decode_mb_444_complex(h);
1983 hl_decode_mb_444_simple_8(h);
1984 }
else if (is_complex) {
1985 hl_decode_mb_complex(h);
1987 hl_decode_mb_simple_16(h);
1989 hl_decode_mb_simple_8(h);
1996 int luma_def, chroma_def;
2006 for (list = 0; list < 2; list++) {
2009 for (i = 0; i < h->
ref_count[list]; i++) {
2010 int luma_weight_flag, chroma_weight_flag;
2013 if (luma_weight_flag) {
2028 if (chroma_weight_flag) {
2030 for (j = 0; j < 2; j++) {
2041 for (j = 0; j < 2; j++) {
2063 int ref0, ref1, i, cur_poc, ref_start, ref_count0, ref_count1;
2065 for (i = 0; i < 2; i++) {
2097 for (ref0 = ref_start; ref0 < ref_count0; ref0++) {
2099 for (ref1 = ref_start; ref1 < ref_count1; ref1++) {
2103 int td = av_clip(poc1 - poc0, -128, 127);
2105 int tb = av_clip(cur_poc - poc0, -128, 127);
2106 int tx = (16384 + (
FFABS(td) >> 1)) / td;
2107 int dist_scale_factor = (tb * tx + 32) >> 8;
2108 if (dist_scale_factor >= -64 && dist_scale_factor <= 128)
2109 w = 64 - dist_scale_factor;
2194 int abs_frame_num, expected_delta_per_poc_cycle, expectedpoc;
2205 expected_delta_per_poc_cycle = 0;
2210 if (abs_frame_num > 0) {
2214 expectedpoc = poc_cycle_cnt * expected_delta_per_poc_cycle;
2215 for (i = 0; i <= frame_num_in_poc_cycle; i++)
2223 field_poc[0] = expectedpoc + h->
delta_poc[0];
2253 for (i = 0; i < 16; i++) {
2254 #define T(x) (x >> 2) | ((x << 2) & 0xF)
2259 for (i = 0; i < 64; i++) {
2260 #define T(x) (x >> 3) | ((x & 7) << 3)
2313 "hardware accelerator failed to decode picture\n");
2359 "Failed to allocate scratch buffers\n");
2416 "Reenabling low delay requires a codec flush.\n");
2426 "Different bit depth between chroma and luma", 1);
2436 "VDPAU decoding does not support video colorspace.\n");
2548 "Could not allocate memory for h264\n");
2595 unsigned int first_mb_in_slice;
2596 unsigned int pps_id;
2597 int num_ref_idx_active_override_flag, max_refs, ret;
2598 unsigned int slice_type, tmp, i, j;
2599 int default_ref_list_done = 0;
2600 int last_pic_structure, last_pic_droppable;
2601 int needs_reinit = 0;
2615 if (first_mb_in_slice == 0) {
2632 if (slice_type > 9) {
2634 "slice type too large (%d) at %d %d\n",
2638 if (slice_type > 4) {
2647 default_ref_list_done = 1;
2662 "non-existing PPS %u referenced\n",
2670 "non-existing SPS %u referenced\n",
2755 "h264_slice_header_init() failed\n");
2763 "Cannot (re-)initialize context during parallel decoding.\n");
2773 "h264_slice_header_init() failed\n");
2806 "Changing field mode (%d -> %d) between slices is not allowed\n",
2813 "unset current_picture_ptr on %d. slice\n",
2824 if (unwrap_prev_frame_num > h->
frame_num)
2825 unwrap_prev_frame_num -= max_frame_num;
2829 if (unwrap_prev_frame_num < 0)
2830 unwrap_prev_frame_num += max_frame_num;
2856 if (!last_pic_droppable && last_pic_structure !=
PICT_FRAME) {
2866 if (!last_pic_droppable && last_pic_structure !=
PICT_FRAME) {
2877 "Invalid field mode combination %d/%d\n",
2882 }
else if (last_pic_droppable != s->
droppable) {
2884 "Cannot combine reference and non-reference fields in the same frame\n");
2984 first_mb_in_slice >= s->
mb_num) {
3031 num_ref_idx_active_override_flag =
get_bits1(&s->
gb);
3033 if (num_ref_idx_active_override_flag) {
3062 if (!default_ref_list_done)
3091 for (i = 0; i < 2; i++) {
3154 "deblocking_filter_idc %u out of range\n", tmp);
3167 "deblocking filter parameters %d %d out of range\n",
3192 "Cannot parallelize deblocking type 1, decoding such frames in sequential order\n");
3197 "Deblocking switched inside frame.\n");
3213 "Too many slices, increase MAX_SLICES and recompile\n");
3216 for (j = 0; j < 2; j++) {
3219 for (i = 0; i < 16; i++) {
3239 for (i = 0; i < 16; i++)
3240 ref2frm[i + 2] = 4 * id_list[i] +
3243 ref2frm[18 + 1] = -1;
3244 for (i = 16; i < 48; i++)
3245 ref2frm[i + 4] = 4 * id_list[(i - 16) >> 1] +
3258 "slice:%d %s mb:%d %c%s%s pps:%u frame:%d poc:%d/%d ref:%d/%d qp:%d loop:%d:%d:%d weight:%d%s %s\n",
3300 int mb_type,
int top_xy,
3303 int left_type[LEFT_MBS],
3304 int mb_xy,
int list)
3311 const int b_xy = h->
mb2b_xy[top_xy] + 3 * b_stride;
3312 const int b8_xy = 4 * top_xy + 2;
3315 ref_cache[0 - 1 * 8] =
3317 ref_cache[2 - 1 * 8] =
3327 const int b8_xy = 4 * left_xy[
LTOP] + 1;
3335 ref_cache[-1 + 16] =
3344 ref_cache[-1 + 16] =
3362 uint32_t ref01 = (
pack16to32(ref2frm[list][ref[0]], ref2frm[list][ref[1]]) & 0x00FF00FF) * 0x0101;
3363 uint32_t ref23 = (
pack16to32(ref2frm[list][ref[2]], ref2frm[list][ref[3]]) & 0x00FF00FF) * 0x0101;
3364 AV_WN32A(&ref_cache[0 * 8], ref01);
3365 AV_WN32A(&ref_cache[1 * 8], ref01);
3366 AV_WN32A(&ref_cache[2 * 8], ref23);
3367 AV_WN32A(&ref_cache[3 * 8], ref23);
3372 AV_COPY128(mv_dst + 8 * 0, mv_src + 0 * b_stride);
3373 AV_COPY128(mv_dst + 8 * 1, mv_src + 1 * b_stride);
3374 AV_COPY128(mv_dst + 8 * 2, mv_src + 2 * b_stride);
3375 AV_COPY128(mv_dst + 8 * 3, mv_src + 3 * b_stride);
3386 const int mb_xy = h->
mb_xy;
3397 left_xy[
LBOT] = left_xy[
LTOP] = mb_xy - 1;
3402 if (left_mb_field_flag != curr_mb_field_flag)
3405 if (curr_mb_field_flag)
3408 if (left_mb_field_flag != curr_mb_field_flag)
3422 if (qp <= qp_thresh &&
3423 (left_xy[
LTOP] < 0 ||
3429 if ((left_xy[
LTOP] < 0 ||
3444 left_type[
LTOP] = left_type[
LBOT] = 0;
3449 left_type[
LTOP] = left_type[
LBOT] = 0;
3459 top_type, left_type, mb_xy, 0);
3462 top_type, left_type, mb_xy, 1);
3466 AV_COPY32(&nnz_cache[4 + 8 * 1], &nnz[0]);
3467 AV_COPY32(&nnz_cache[4 + 8 * 2], &nnz[4]);
3468 AV_COPY32(&nnz_cache[4 + 8 * 3], &nnz[8]);
3469 AV_COPY32(&nnz_cache[4 + 8 * 4], &nnz[12]);
3474 AV_COPY32(&nnz_cache[4 + 8 * 0], &nnz[3 * 4]);
3477 if (left_type[
LTOP]) {
3479 nnz_cache[3 + 8 * 1] = nnz[3 + 0 * 4];
3480 nnz_cache[3 + 8 * 2] = nnz[3 + 1 * 4];
3481 nnz_cache[3 + 8 * 3] = nnz[3 + 2 * 4];
3482 nnz_cache[3 + 8 * 4] = nnz[3 + 3 * 4];
3489 nnz_cache[4 + 8 * 0] =
3490 nnz_cache[5 + 8 * 0] = (h->
cbp_table[top_xy] & 0x4000) >> 12;
3491 nnz_cache[6 + 8 * 0] =
3492 nnz_cache[7 + 8 * 0] = (h->
cbp_table[top_xy] & 0x8000) >> 12;
3495 nnz_cache[3 + 8 * 1] =
3496 nnz_cache[3 + 8 * 2] = (h->
cbp_table[left_xy[
LTOP]] & 0x2000) >> 12;
3499 nnz_cache[3 + 8 * 3] =
3500 nnz_cache[3 + 8 * 4] = (h->
cbp_table[left_xy[
LBOT]] & 0x8000) >> 12;
3504 nnz_cache[
scan8[0]] =
3505 nnz_cache[scan8[1]] =
3506 nnz_cache[scan8[2]] =
3507 nnz_cache[scan8[3]] = (h->
cbp & 0x1000) >> 12;
3509 nnz_cache[scan8[0 + 4]] =
3510 nnz_cache[scan8[1 + 4]] =
3511 nnz_cache[scan8[2 + 4]] =
3512 nnz_cache[scan8[3 + 4]] = (h->
cbp & 0x2000) >> 12;
3514 nnz_cache[scan8[0 + 8]] =
3515 nnz_cache[scan8[1 + 8]] =
3516 nnz_cache[scan8[2 + 8]] =
3517 nnz_cache[scan8[3 + 8]] = (h->
cbp & 0x4000) >> 12;
3519 nnz_cache[scan8[0 + 12]] =
3520 nnz_cache[scan8[1 + 12]] =
3521 nnz_cache[scan8[2 + 12]] =
3522 nnz_cache[scan8[3 + 12]] = (h->
cbp & 0x8000) >> 12;
3532 uint8_t *dest_y, *dest_cb, *dest_cr;
3533 int linesize, uvlinesize, mb_x, mb_y;
3540 for (mb_x = start_x; mb_x < end_x; mb_x++)
3541 for (mb_y = end_mb_y -
FRAME_MBAFF; mb_y <= end_mb_y; mb_y++) {
3555 ((mb_x << pixel_shift) + mb_y * s->
linesize) * 16;
3557 (mb_x << pixel_shift) * (8 <<
CHROMA444) +
3560 (mb_x << pixel_shift) * (8 <<
CHROMA444) +
3585 linesize, uvlinesize);
3588 dest_cr, linesize, uvlinesize);
3622 if ((top + height) >= pic_height)
3623 height += deblock_border;
3624 top -= deblock_border;
3630 height =
FFMIN(height, pic_height - top);
3631 if (top < h->emu_edge_height) {
3651 int lf_x_start = s->
mb_x;
3696 if (s->
mb_x >= lf_x_start)
3702 "error while decoding MB %d %d, bytestream (%td)\n",
3712 s->
mb_x = lf_x_start = 0;
3727 if (s->
mb_x > lf_x_start)
3751 "error while decoding MB %d %d\n", s->
mb_x, s->
mb_y);
3759 s->
mb_x = lf_x_start = 0;
3794 if (s->
mb_x > lf_x_start)
3825 if (context_count == 1) {
3828 for (i = 1; i < context_count; i++) {
3835 NULL, context_count,
sizeof(
void *));
3843 for (i = 1; i < context_count; i++)
3851 int parse_extradata)
3860 int nals_needed = 0;
3871 for (; pass <= 1; pass++) {
3874 next_avc = h->
is_avc ? 0 : buf_size;
3884 if (buf_index >= next_avc) {
3889 nalsize = (nalsize << 8) | buf[buf_index++];
3890 if (nalsize <= 0 || nalsize > buf_size - buf_index) {
3892 "AVC: nal size %d\n", nalsize);
3895 next_avc = buf_index + nalsize;
3898 for (; buf_index + 3 < next_avc; buf_index++)
3900 if (buf[buf_index] == 0 &&
3901 buf[buf_index + 1] == 0 &&
3902 buf[buf_index + 2] == 1)
3905 if (buf_index + 3 >= buf_size) {
3906 buf_index = buf_size;
3911 if (buf_index >= next_avc)
3918 &consumed, next_avc - buf_index);
3919 if (ptr ==
NULL || dst_length < 0) {
3923 i = buf_index + consumed;
3925 buf[i] == 0x00 && buf[i + 1] == 0x00 &&
3926 buf[i + 2] == 0x01 && buf[i + 3] == 0xE0)
3930 while (ptr[dst_length - 1] == 0 && dst_length > 0)
3932 bit_length = !dst_length ? 0
3938 "NAL %d at %d/%d length %d\n",
3941 if (h->
is_avc && (nalsize != consumed) && nalsize)
3943 "AVC: Consumed only %d bytes instead of %d\n",
3946 buf_index += consumed;
3957 nals_needed = nal_index;
3964 nals_needed = nal_index;
3990 "Invalid mix of idr and non-idr slices\n");
4030 &buf[buf_index - consumed],
4035 static const uint8_t start_code[] = {
4038 sizeof(start_code));
4083 h->
is_avc && (nalsize != consumed) && nalsize) {
4085 "SPS decoding failure, trying again with the complete NAL\n");
4121 else if (err == 1) {
4154 if (pos + 10 > buf_size)
4164 int buf_size = avpkt->
size;
4175 if (buf_size == 0) {
4238 assert(pict->
data[0] || !*got_frame);
4306 #if CONFIG_H264_VDPAU_DECODER
4307 AVCodec ff_h264_vdpau_decoder = {
4308 .
name =
"h264_vdpau",
4315 .capabilities = CODEC_CAP_DR1 | CODEC_CAP_DELAY | CODEC_CAP_HWACCEL_VDPAU,
4317 .long_name =
NULL_IF_CONFIG_SMALL(
"H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration)"),