1 /*
2 * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 /**
23 * @file
24 * H.264 / AVC / MPEG4 part10 codec.
25 * @author Michael Niedermayer <michaelni@gmx.at>
26 */
27
28 #ifndef AVCODEC_H264_H
29 #define AVCODEC_H264_H
30
41
42 #define MAX_SPS_COUNT 32
43 #define MAX_PPS_COUNT 256
44
45 #define MAX_MMCO_COUNT 66
46
47 #define MAX_DELAYED_PIC_COUNT 16
48
49 #define MAX_MBPAIR_SIZE (256*1024) // a tighter bound could be calculated if someone cares about a few bytes
50
51 /* Compiling in interlaced support reduces the speed
52 * of progressive decoding by about 2%. */
53 #define ALLOW_INTERLACE
54
56
57 /**
58 * The maximum number of slices supported by the decoder.
59 * must be a power of 2
60 */
62
63 #ifdef ALLOW_INTERLACE
64 #define MB_MBAFF(h) h->mb_mbaff
65 #define MB_FIELD(h) h->mb_field_decoding_flag
66 #define FRAME_MBAFF(h) h->mb_aff_frame
67 #define FIELD_PICTURE(h) (h->picture_structure != PICT_FRAME)
72 #else
73 #define MB_MBAFF(h) 0
74 #define MB_FIELD(h) 0
75 #define FRAME_MBAFF(h) 0
76 #define FIELD_PICTURE(h) 0
77 #undef IS_INTERLACED
78 #define IS_INTERLACED(mb_type) 0
79 #define LEFT_MBS 1
80 #define LTOP 0
81 #define LBOT 0
82 #define LEFT(i) 0
83 #endif
84 #define FIELD_OR_MBAFF_PICTURE(h) (FRAME_MBAFF(h) || FIELD_PICTURE(h))
85
86 #ifndef CABAC
87 #define CABAC(h) h->pps.cabac
88 #endif
89
90 #define CHROMA(h) (h->sps.chroma_format_idc)
91 #define CHROMA422(h) (h->sps.chroma_format_idc == 2)
92 #define CHROMA444(h) (h->sps.chroma_format_idc == 3)
93
94 #define EXTENDED_SAR 255
95
96 #define MB_TYPE_REF0 MB_TYPE_ACPRED // dirty but it fits in 16 bit
97 #define MB_TYPE_8x8DCT 0x01000000
98 #define IS_REF0(a) ((a) & MB_TYPE_REF0)
99 #define IS_8x8DCT(a) ((a) & MB_TYPE_8x8DCT)
100
101 #define QP_MAX_NUM (51 + 6*6) // The maximum supported qp
102
103 /* NAL unit types */
104 enum {
120 };
121
122 /**
123 * SEI message types
124 */
133
134 /**
135 * pic_struct in picture timing SEI message
136 */
148
149 /**
150 * frame_packing_arrangement types
151 */
161
162 /**
163 * Sequence parameter set
164 */
182 int mb_aff;
///< mb_adaptive_frame_field_flag
184 int crop;
///< frame_cropping_flag
185
186 /* those 4 are already in luma samples */
187 unsigned int crop_left;
///< frame_cropping_rect_left_offset
188 unsigned int crop_right;
///< frame_cropping_rect_right_offset
189 unsigned int crop_top;
///< frame_cropping_rect_top_offset
221 int new;
///< flag to keep track if the decoder context needs re-init due to changed SPS
223
224 /**
225 * Picture parameter set
226 */
229 int cabac;
///< entropy_coding_mode_flag
233 unsigned int ref_count[2];
///< num_ref_idx_l0/1_active_minus1 + 1
248
249 /**
250 * Frame Packing Arrangement Type
251 */
260
261 /**
262 * Memory management control operation opcode.
263 */
273
274 /**
275 * Memory management control operation.
276 */
280 int long_arg;
///< index, pic_num, or num long refs depending on opcode
282
283 /**
284 * H264Context
285 */
297
301
304
306
307 /* coded dimensions -- 16 * mb w/h */
311
317
321
324
325 // prediction stuff
328
333
338
341
350
351 /**
352 * non zero coeff count cache.
353 * is 64 if not available.
354 */
356
358
359 /**
360 * Motion vector cache.
361 */
364 #define LIST_NOT_USED -1 // FIXME rename?
365 #define PART_NOT_AVAILABLE -2
366
367 /**
368 * number of neighbors (top and/or left) that used 8x8 dct
369 */
371
372 /**
373 * block_offset[ 0..23] for frame macroblocks
374 * block_offset[24..47] for field macroblocks
375 */
377
378 uint32_t *
mb2b_xy;
// FIXME are these 4 a good idea?
381
382 ptrdiff_t
mb_linesize;
///< may be equal to s->linesize or s->linesize * 2, for mbaff
384
387
388 /**
389 * current pps
390 */
391 PPS pps;
// FIXME move to Picture perhaps? (->no) do we need that?
392
397
403
404 // interlacing specific flags
407 int mb_mbaff;
///< mb_aff_frame && mb_field_decoding_flag
410
412
413 // Weighted pred stuff
418 // The following 2 can be changed to int8_t but that causes 10cpu cycles speedloss
422
430
431 /**
432 * num_ref_idx_l0/1_active_minus1 + 1
433 */
434 unsigned int ref_count[2];
///< counts frames or fields, depending on current mb mode
438 * Reordered version of default_ref_list
439 * according to picture reordering in slice header */
440 int ref2frm[
MAX_SLICES][2][64];
///< reference to frame number lists, used in the loop filter, the first 2 are for -2,-1
441
442 // data partitioning
447
449 DECLARE_ALIGNED(16, int16_t,
mb)[16 * 48 * 2];
///< as a dct coeffecient is int32_t in high depth, we need to reserve twice the space.
451 int16_t
mb_padding[256 * 2];
///< as mb is addressed by scantable[i] and scantable is uint8_t we can either check that i is not too large or ensure that there is some unused stuff after mb
452
453 /**
454 * Cabac
455 */
458
459 /* 0x100 -> non null luma_dc, 0x80/0x40 -> non null chroma_dc (cb/cr), 0x?0 -> chroma_cbp(0, 1, 2), 0x0? luma_cbp */
464 /* chroma_pred_mode for i4x4 or i16x16, else 0 */
471
484
486
495
497
498 // deblock
502
503 // =============================================================
504 // Things below are not used in the MB or more inner code
505
510
511 /**
512 * Used to parse AVC variant of h264
513 */
514 int is_avc;
///< this flag is != 0 if codec is avc1
516 int got_first;
///< this flag is != 0 if we've parsed a frame
517
520
523
525
527
528 // POC stuff
534 int prev_poc_msb;
///< poc_msb of the last reference pic for POC type 0
535 int prev_poc_lsb;
///< poc_lsb of the last reference pic for POC type 0
539
540 /**
541 * frame_num for frames or 2 * frame_num + 1 for field pics.
542 */
544
545 /**
546 * max_frame_num or 2 * max_frame_num for field pics.
547 */
549
551
560
561 /**
562 * memory management control operations buffer.
563 */
567
570
572
573 /**
574 * @name Members for slice based multithreading
575 * @{
576 */
578
579 /**
580 * current slice number, used to initialize slice_num of each thread/context
581 */
583
584 /**
585 * Max number of threads / contexts.
586 * This is equal to AVCodecContext.thread_count unless
587 * multithreaded decoding is impossible, in which case it is
588 * reduced to 1.
589 */
591
593
594 /**
595 * 1 if the single thread fallback warning has already been
596 * displayed, 0 otherwise.
597 */
599
601
604 /** @} */
605
606 /**
607 * pic_struct in picture timing SEI message
608 */
610
611 /**
612 * Complement sei_pic_struct
613 * SEI_PIC_STRUCT_TOP_BOTTOM and SEI_PIC_STRUCT_BOTTOM_TOP indicate interlaced frames.
614 * However, soft telecined frames may have these values.
615 * This is used in an attempt to flag soft telecine progressive.
616 */
618
619 /**
620 * Bit set of clock types for fields/frames in picture timing SEI message.
621 * For each found ct_type, appropriate bit is set (e.g., bit 1 for
622 * interlaced).
623 */
625
626 /**
627 * dpb_output_delay in picture timing SEI message, see H.264 C.2.2
628 */
630
631 /**
632 * cpb_removal_delay in picture timing SEI message, see H.264 C.1.2
633 */
635
636 /**
637 * recovery_frame_cnt from SEI message
638 *
639 * Set to -1 if no recovery point SEI message found or to number of frames
640 * before playback synchronizes. Frames having recovery point are key
641 * frames.
642 */
644 /**
645 * recovery_frame is the frame_num at which the next frame should
646 * be fully constructed.
647 *
648 * Set to -1 when not expecting a recovery point.
649 */
651
652 /**
653 * Are the SEI recovery points looking valid.
654 */
656
658
661
662 // Timestamp stuff
665
668
670
671 int sync;
///< did we had a keyframe or recovery point
672
678
680
686
689
690 /**
691 * Decode SEI
692 */
694
695 /**
696 * Decode SPS
697 */
699
700 /**
701 * compute profile from sps
702 */
704
705 /**
706 * Decode PPS
707 */
709
710 /**
711 * Decode a network abstraction layer unit.
712 * @param consumed is the number of bytes used as input
713 * @param length is the length of the array
714 * @param dst_length is the number of decoded bytes FIXME here
715 * or a decode rbsp tailing?
716 * @return decoded bytes, might be src+1 if no escapes
717 */
719 int *dst_length,
int *consumed,
int length);
720
721 /**
722 * Free any data that may have been allocated in the H264 context
723 * like SPS, PPS etc.
724 */
726
727 /**
728 * Reconstruct bitstream slice_type.
729 */
731
732 /**
733 * Allocate tables.
734 * needs width/height
735 */
737
738 /**
739 * Fill the default_ref_list.
740 */
742
746
747 /**
748 * Execute the reference picture marking (memory management control operations).
749 */
751
753 int first_slice);
754
756
757 /**
758 * Check if the top & left blocks are available if needed & change the
759 * dc mode so it only uses the available blocks.
760 */
762
763 /**
764 * Check if the top & left blocks are available if needed & change the
765 * dc mode so it only uses the available blocks.
766 */
768
773
774 /**
775 * Decode a macroblock
776 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error
777 */
779
780 /**
781 * Decode a CABAC coded macroblock
782 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR on error
783 */
785
787
791
798
799 /**
800 * Reset SEI values at the beginning of the frame.
801 *
802 * @param h H.264 context.
803 */
805
806 /**
807 * Get stereo_mode string from the h264 frame_packing_arrangement
808 * @param h H.264 context.
809 */
811
812 /*
813 * o-o o-o
814 * / / /
815 * o-o o-o
816 * ,---'
817 * o-o o-o
818 * / / /
819 * o-o o-o
820 */
821
822 /* Scan8 organization:
823 * 0 1 2 3 4 5 6 7
824 * 0 DY y y y y y
825 * 1 y Y Y Y Y
826 * 2 y Y Y Y Y
827 * 3 y Y Y Y Y
828 * 4 y Y Y Y Y
829 * 5 DU u u u u u
830 * 6 u U U U U
831 * 7 u U U U U
832 * 8 u U U U U
833 * 9 u U U U U
834 * 10 DV v v v v v
835 * 11 v V V V V
836 * 12 v V V V V
837 * 13 v V V V V
838 * 14 v V V V V
839 * DY/DU/DV are for luma/chroma DC.
840 */
841
842 #define LUMA_DC_BLOCK_INDEX 48
843 #define CHROMA_DC_BLOCK_INDEX 49
844
845 // This table must be here because scan8[constant] must be known at compiletime
847 4 + 1 * 8, 5 + 1 * 8, 4 + 2 * 8, 5 + 2 * 8,
848 6 + 1 * 8, 7 + 1 * 8, 6 + 2 * 8, 7 + 2 * 8,
849 4 + 3 * 8, 5 + 3 * 8, 4 + 4 * 8, 5 + 4 * 8,
850 6 + 3 * 8, 7 + 3 * 8, 6 + 4 * 8, 7 + 4 * 8,
851 4 + 6 * 8, 5 + 6 * 8, 4 + 7 * 8, 5 + 7 * 8,
852 6 + 6 * 8, 7 + 6 * 8, 6 + 7 * 8, 7 + 7 * 8,
853 4 + 8 * 8, 5 + 8 * 8, 4 + 9 * 8, 5 + 9 * 8,
854 6 + 8 * 8, 7 + 8 * 8, 6 + 9 * 8, 7 + 9 * 8,
855 4 + 11 * 8, 5 + 11 * 8, 4 + 12 * 8, 5 + 12 * 8,
856 6 + 11 * 8, 7 + 11 * 8, 6 + 12 * 8, 7 + 12 * 8,
857 4 + 13 * 8, 5 + 13 * 8, 4 + 14 * 8, 5 + 14 * 8,
858 6 + 13 * 8, 7 + 13 * 8, 6 + 14 * 8, 7 + 14 * 8,
859 0 + 0 * 8, 0 + 5 * 8, 0 + 10 * 8
860 };
861
863 {
864 #if HAVE_BIGENDIAN
865 return (b & 0xFFFF) + (a << 16);
866 #else
867 return (a & 0xFFFF) + (b << 16);
868 #endif
869 }
870
872 {
873 #if HAVE_BIGENDIAN
874 return (b & 0xFF) + (a << 8);
875 #else
876 return (a & 0xFF) + (b << 8);
877 #endif
878 }
879
880 /**
881 * Get the chroma qp.
882 */
884 {
886 }
887
888 /**
889 * Get the predicted intra4x4 prediction mode.
890 */
892 {
893 const int index8 =
scan8[
n];
897
898 tprintf(h->
avctx,
"mode:%d %d min:%d\n", left, top, min);
899
900 if (min < 0)
902 else
904 }
905
907 {
910
912 i4x4[4] = i4x4_cache[7 + 8 * 3];
913 i4x4[5] = i4x4_cache[7 + 8 * 2];
914 i4x4[6] = i4x4_cache[7 + 8 * 1];
915 }
916
918 {
922
923 AV_COPY32(&nnz[ 0], &nnz_cache[4 + 8 * 1]);
924 AV_COPY32(&nnz[ 4], &nnz_cache[4 + 8 * 2]);
925 AV_COPY32(&nnz[ 8], &nnz_cache[4 + 8 * 3]);
926 AV_COPY32(&nnz[12], &nnz_cache[4 + 8 * 4]);
927 AV_COPY32(&nnz[16], &nnz_cache[4 + 8 * 6]);
928 AV_COPY32(&nnz[20], &nnz_cache[4 + 8 * 7]);
929 AV_COPY32(&nnz[32], &nnz_cache[4 + 8 * 11]);
930 AV_COPY32(&nnz[36], &nnz_cache[4 + 8 * 12]);
931
933 AV_COPY32(&nnz[24], &nnz_cache[4 + 8 * 8]);
934 AV_COPY32(&nnz[28], &nnz_cache[4 + 8 * 9]);
935 AV_COPY32(&nnz[40], &nnz_cache[4 + 8 * 13]);
936 AV_COPY32(&nnz[44], &nnz_cache[4 + 8 * 14]);
937 }
938 }
939
942 int b_xy, int b8_xy,
943 int mb_type, int list)
944 {
947 AV_COPY128(mv_dst + 0 * b_stride, mv_src + 8 * 0);
948 AV_COPY128(mv_dst + 1 * b_stride, mv_src + 8 * 1);
949 AV_COPY128(mv_dst + 2 * b_stride, mv_src + 8 * 2);
950 AV_COPY128(mv_dst + 3 * b_stride, mv_src + 8 * 3);
957 } else {
959 AV_COPY16(mvd_dst + 3 + 3, mvd_src + 3 + 8 * 0);
960 AV_COPY16(mvd_dst + 3 + 2, mvd_src + 3 + 8 * 1);
961 AV_COPY16(mvd_dst + 3 + 1, mvd_src + 3 + 8 * 2);
962 }
963 }
964
965 {
968 ref_index[0 + 0 * 2] = ref_cache[
scan8[0]];
969 ref_index[1 + 0 * 2] = ref_cache[scan8[4]];
970 ref_index[0 + 1 * 2] = ref_cache[scan8[8]];
971 ref_index[1 + 1 * 2] = ref_cache[scan8[12]];
972 }
973 }
974
976 {
979 const int b8_xy = 4 * h->
mb_xy;
980
983 } else {
986 }
989
996 }
997 }
998 }
999
1001 {
1005 0x0001000100010001ULL));
1006 else
1009 0x0001000100010001ULL));
1010 }
1011
1016
1017 #endif /* AVCODEC_H264_H */