drivers/media/platform/allegro-dvt/nal-hevc.c

Source file repositories/reference/linux-study-clean/drivers/media/platform/allegro-dvt/nal-hevc.c

File Facts

System
Linux kernel
Corpus path
drivers/media/platform/allegro-dvt/nal-hevc.c
Extension
.c
Size
28549 bytes
Lines
885
Domain
Driver Families
Bucket
drivers/media
Inferred role
Driver Families: exported/initcall integration point
Status
integration implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

if (DIV_ROUND_UP(rbsp->pos, 8) > rbsp->size) {
			rbsp->error = -EINVAL;
			return;
		}

		p++;
		rbsp->pos += 8;
	}
}

static void nal_hevc_rbsp_profile_tier_level(struct rbsp *rbsp,
					     struct nal_hevc_profile_tier_level *ptl)
{
	unsigned int i;
	unsigned int max_num_sub_layers_minus_1 = 0;

	rbsp_bits(rbsp, 2, &ptl->general_profile_space);
	rbsp_bit(rbsp, &ptl->general_tier_flag);
	rbsp_bits(rbsp, 5, &ptl->general_profile_idc);
	for (i = 0; i < 32; i++)
		rbsp_bit(rbsp, &ptl->general_profile_compatibility_flag[i]);
	rbsp_bit(rbsp, &ptl->general_progressive_source_flag);
	rbsp_bit(rbsp, &ptl->general_interlaced_source_flag);
	rbsp_bit(rbsp, &ptl->general_non_packed_constraint_flag);
	rbsp_bit(rbsp, &ptl->general_frame_only_constraint_flag);
	if (ptl->general_profile_idc == 4 ||
	    ptl->general_profile_compatibility_flag[4] ||
	    ptl->general_profile_idc == 5 ||
	    ptl->general_profile_compatibility_flag[5] ||
	    ptl->general_profile_idc == 6 ||
	    ptl->general_profile_compatibility_flag[6] ||
	    ptl->general_profile_idc == 7 ||
	    ptl->general_profile_compatibility_flag[7] ||
	    ptl->general_profile_idc == 8 ||
	    ptl->general_profile_compatibility_flag[8] ||
	    ptl->general_profile_idc == 9 ||
	    ptl->general_profile_compatibility_flag[9] ||
	    ptl->general_profile_idc == 10 ||
	    ptl->general_profile_compatibility_flag[10]) {
		rbsp_bit(rbsp, &ptl->general_max_12bit_constraint_flag);
		rbsp_bit(rbsp, &ptl->general_max_10bit_constraint_flag);
		rbsp_bit(rbsp, &ptl->general_max_8bit_constraint_flag);
		rbsp_bit(rbsp, &ptl->general_max_422chroma_constraint_flag);
		rbsp_bit(rbsp, &ptl->general_max_420chroma_constraint_flag);
		rbsp_bit(rbsp, &ptl->general_max_monochrome_constraint_flag);
		rbsp_bit(rbsp, &ptl->general_intra_constraint_flag);
		rbsp_bit(rbsp, &ptl->general_one_picture_only_constraint_flag);
		rbsp_bit(rbsp, &ptl->general_lower_bit_rate_constraint_flag);
		if (ptl->general_profile_idc == 5 ||
		    ptl->general_profile_compatibility_flag[5] ||
		    ptl->general_profile_idc == 9 ||
		    ptl->general_profile_compatibility_flag[9] ||
		    ptl->general_profile_idc == 10 ||
		    ptl->general_profile_compatibility_flag[10]) {
			rbsp_bit(rbsp, &ptl->general_max_14bit_constraint_flag);
			rbsp_bits(rbsp, 32, &ptl->general_reserved_zero_33bits);
			rbsp_bits(rbsp, 33 - 32, &ptl->general_reserved_zero_33bits);
		} else {
			rbsp_bits(rbsp, 32, &ptl->general_reserved_zero_34bits);
			rbsp_bits(rbsp, 34 - 2, &ptl->general_reserved_zero_34bits);
		}
	} else if (ptl->general_profile_idc == 2 ||
		   ptl->general_profile_compatibility_flag[2]) {
		rbsp_bits(rbsp, 7, &ptl->general_reserved_zero_7bits);
		rbsp_bit(rbsp, &ptl->general_one_picture_only_constraint_flag);
		rbsp_bits(rbsp, 32, &ptl->general_reserved_zero_35bits);
		rbsp_bits(rbsp, 35 - 32, &ptl->general_reserved_zero_35bits);
	} else {
		rbsp_bits(rbsp, 32, &ptl->general_reserved_zero_43bits);
		rbsp_bits(rbsp, 43 - 32, &ptl->general_reserved_zero_43bits);
	}
	if ((ptl->general_profile_idc >= 1 && ptl->general_profile_idc <= 5) ||
	    ptl->general_profile_idc == 9 ||
	    ptl->general_profile_compatibility_flag[1] ||
	    ptl->general_profile_compatibility_flag[2] ||
	    ptl->general_profile_compatibility_flag[3] ||
	    ptl->general_profile_compatibility_flag[4] ||
	    ptl->general_profile_compatibility_flag[5] ||
	    ptl->general_profile_compatibility_flag[9])
		rbsp_bit(rbsp, &ptl->general_inbld_flag);
	else
		rbsp_bit(rbsp, &ptl->general_reserved_zero_bit);
	rbsp_bits(rbsp, 8, &ptl->general_level_idc);
	if (max_num_sub_layers_minus_1 > 0)
		rbsp_unsupported(rbsp);
}

static void nal_hevc_rbsp_vps(struct rbsp *rbsp, struct nal_hevc_vps *vps)
{
	unsigned int i, j;

Annotation

Implementation Notes