31 const int *ref_count,
int slice_type_nos,
33 int picture_structure,
void *logctx)
36 int luma_def, chroma_def;
48 if (
sps->chroma_format_idc) {
57 for (list = 0; list < 2; list++) {
60 for (
i = 0;
i < ref_count[list];
i++) {
61 int luma_weight_flag, chroma_weight_flag;
64 if (luma_weight_flag) {
69 goto out_range_weight;
80 if (
sps->chroma_format_idc) {
82 if (chroma_weight_flag) {
84 for (j = 0; j < 2; j++) {
91 goto out_range_weight;
101 for (j = 0; j < 2; j++) {
112 if (
sps->chroma_format_idc) {
113 for (j = 0; j < 2; j++) {
135 int top_samples_available,
int left_samples_available)
137 static const int8_t top[12] = {
140 static const int8_t
left[12] = {
145 if (!(top_samples_available & 0x8000)) {
146 for (
i = 0;
i < 4;
i++) {
147 int status = top[pred_mode_cache[
scan8[0] +
i]];
150 "top block unavailable for requested intra mode %d\n",
154 pred_mode_cache[
scan8[0] +
i] = status;
159 if ((left_samples_available & 0x8888) != 0x8888) {
160 static const int mask[4] = { 0x8000, 0x2000, 0x80, 0x20 };
161 for (
i = 0;
i < 4;
i++)
162 if (!(left_samples_available &
mask[
i])) {
163 int status =
left[pred_mode_cache[
scan8[0] + 8 *
i]];
166 "left block unavailable for requested intra4x4 mode %d\n",
170 pred_mode_cache[
scan8[0] + 8 *
i] = status;
183 int left_samples_available,
184 int mode,
int is_chroma)
191 "out of range intra chroma pred mode\n");
195 if (!(top_samples_available & 0x8000)) {
199 "top block unavailable for requested intra mode\n");
204 if ((left_samples_available & 0x8080) != 0x8080) {
208 "left block unavailable for requested intra mode\n");
211 if (is_chroma && (left_samples_available & 0x8080)) {
214 (!(left_samples_available & 0x8000)) +
224 int slice_type_nos,
int picture_structure,
void *logctx)
227 int num_ref_idx_active_override_flag;
230 ref_count[0] =
pps->ref_count[0];
231 ref_count[1] =
pps->ref_count[1];
237 num_ref_idx_active_override_flag =
get_bits1(gb);
239 if (num_ref_idx_active_override_flag) {
253 if (ref_count[0] - 1 >
max[0] || (list_count == 2 && (ref_count[1] - 1 >
max[1]))) {
255 ref_count[0] - 1,
max[0], ref_count[1] - 1,
max[1]);
256 ref_count[0] = ref_count[1] = 0;
259 }
else if (ref_count[1] - 1 >
max[1]) {
261 ref_count[1] - 1,
max[1]);
267 ref_count[0] = ref_count[1] = 0;
270 *plist_count = list_count;
282 int picture_structure,
int nal_ref_idc)
284 const int max_frame_num = 1 <<
sps->log2_max_frame_num;
291 if (
sps->poc_type == 0) {
292 const int max_poc_lsb = 1 <<
sps->log2_max_poc_lsb;
308 }
else if (
sps->poc_type == 1) {
310 int64_t expected_delta_per_poc_cycle, expectedpoc;
313 if (
sps->poc_cycle_length != 0)
318 if (nal_ref_idc == 0 && abs_frame_num > 0)
321 expected_delta_per_poc_cycle = 0;
322 for (
i = 0;
i <
sps->poc_cycle_length;
i++)
324 expected_delta_per_poc_cycle +=
sps->offset_for_ref_frame[
i];
326 if (abs_frame_num > 0) {
327 int poc_cycle_cnt = (abs_frame_num - 1) /
sps->poc_cycle_length;
328 int frame_num_in_poc_cycle = (abs_frame_num - 1) %
sps->poc_cycle_length;
330 expectedpoc = poc_cycle_cnt * expected_delta_per_poc_cycle;
331 for (
i = 0;
i <= frame_num_in_poc_cycle;
i++)
332 expectedpoc = expectedpoc +
sps->offset_for_ref_frame[
i];
336 if (nal_ref_idc == 0)
337 expectedpoc = expectedpoc +
sps->offset_for_non_ref_pic;
339 field_poc[0] = expectedpoc + pc->
delta_poc[0];
340 field_poc[1] = field_poc[0] +
sps->offset_for_top_to_bottom_field;
354 if ( field_poc[0] != (
int)field_poc[0]
355 || field_poc[1] != (
int)field_poc[1])
359 pic_field_poc[0] = field_poc[0];
361 pic_field_poc[1] = field_poc[1];
362 *pic_poc =
FFMIN(pic_field_poc[0], pic_field_poc[1]);
368 int is_avc,
void *logctx)
380 for (
i = 0;
i <
pkt.nb_nals;
i++) {
389 "SPS decoding failure, trying again with the complete NAL\n");
422 int err_recognition,
void *logctx)
430 uint8_t *escaped_buf;
431 int escaped_buf_size;
434 "SPS decoding failure, trying again after escaping the NAL\n");
448 bytestream2_peek_be24(&gbc) <= 3) {
449 bytestream2_put_be24(&pbc, 3);
452 bytestream2_put_byte(&pbc, bytestream2_get_byte(&gbc));
456 AV_WB16(escaped_buf, escaped_buf_size - 2);
467 int *is_avc,
int *nal_length_size,
468 int err_recognition,
void *logctx)
477 const uint8_t *p =
data;
487 cnt = *(p + 5) & 0x1f;
489 for (
i = 0;
i < cnt;
i++) {
496 "Decoding sps %d from avcC failed\n",
i);
503 for (
i = 0;
i < cnt;
i++) {
510 "Decoding pps %d from avcC failed\n",
i);
516 *nal_length_size = (
data[4] & 0x03) + 1;
537 switch (
sps->profile_idc) {
static int BS_FUNC left(const BSCTX *bc)
Return the number of the bits left in a buffer.
static av_always_inline int bytestream2_tell_p(const PutByteContext *p)
static av_always_inline void bytestream2_init_writer(PutByteContext *p, uint8_t *buf, int buf_size)
static av_always_inline int bytestream2_get_bytes_left(const GetByteContext *g)
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
#define flags(name, subs,...)
#define i(width, name, range_min, range_max)
static int FUNC sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
static int FUNC nal(CodedBitstreamContext *ctx, RWContext *rw, LCEVCRawNAL *current, int nal_unit_type)
#define AV_PROFILE_H264_CONSTRAINED
#define AV_PROFILE_H264_HIGH_444_PREDICTIVE
#define AV_EF_EXPLODE
abort decoding on minor error detection
#define AV_PROFILE_H264_INTRA
#define AV_PROFILE_H264_HIGH_10
#define AV_PROFILE_H264_HIGH_422
#define AV_PROFILE_H264_BASELINE
bitstream reader API header.
static unsigned int get_bits1(GetBitContext *s)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
static int get_ue_golomb(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to 8190.
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_VERBOSE
Detailed information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
@ AV_PICTURE_TYPE_I
Intra.
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
@ H2645_FLAG_SMALL_PADDING
H.264 common definitions.
int ff_h264_get_profile(const SPS *sps)
Compute profile from profile_idc and constraint_set?_flags.
int ff_h264_parse_ref_count(int *plist_count, int ref_count[2], GetBitContext *gb, const PPS *pps, int slice_type_nos, int picture_structure, void *logctx)
int ff_h264_init_poc(int pic_field_poc[2], int *pic_poc, const SPS *sps, H264POCContext *pc, int picture_structure, int nal_ref_idc)
static int decode_extradata_ps(const uint8_t *data, int size, H264ParamSets *ps, int is_avc, void *logctx)
static int decode_extradata_ps_mp4(const uint8_t *buf, int buf_size, H264ParamSets *ps, int err_recognition, void *logctx)
int ff_h264_pred_weight_table(GetBitContext *gb, const SPS *sps, const int *ref_count, int slice_type_nos, H264PredWeightTable *pwt, int picture_structure, void *logctx)
int ff_h264_check_intra4x4_pred_mode(int8_t *pred_mode_cache, void *logctx, int top_samples_available, int left_samples_available)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
int ff_h264_decode_extradata(const uint8_t *data, int size, H264ParamSets *ps, int *is_avc, int *nal_length_size, int err_recognition, void *logctx)
int ff_h264_check_intra_pred_mode(void *logctx, int top_samples_available, int left_samples_available, int mode, int is_chroma)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
H.264 decoder/parser shared code.
static const uint8_t scan8[16 *3+3]
int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avctx, H264ParamSets *ps, int bit_length)
Decode PPS.
int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx, H264ParamSets *ps, int ignore_truncation)
Decode SPS.
H.264 parameter set handling.
H.264 / AVC / MPEG-4 prediction functions.
#define ALZHEIMER_DC_L0T_PRED8x8
void ff_h2645_packet_uninit(H2645Packet *pkt)
Free all the allocated memory in the packet.
int ff_h2645_packet_split(H2645Packet *pkt, const uint8_t *buf, int length, void *logctx, int nal_length_size, enum AVCodecID codec_id, int flags)
Split an input packet into NAL units.
static const uint16_t mask[17]
Memory handling functions.
#define PICT_BOTTOM_FIELD
int frame_num_offset
for POC type 2
int prev_frame_num_offset
for POC type 2
int prev_frame_num
frame_num of the last pic for POC type 1/2
int prev_poc_msb
poc_msb of the last reference pic for POC type 0
int prev_poc_lsb
poc_lsb of the last reference pic for POC type 0
int chroma_log2_weight_denom
int luma_log2_weight_denom
int luma_weight[48][2][2]
int chroma_weight_flag[2]
7.4.3.2 chroma_weight_lX_flag
int luma_weight_flag[2]
7.4.3.2 luma_weight_lX_flag
int chroma_weight[48][2][2][2]
#define avpriv_request_sample(...)