drivers/media/platform/allegro-dvt/nal-h264.c
Source file repositories/reference/linux-study-clean/drivers/media/platform/allegro-dvt/nal-h264.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/platform/allegro-dvt/nal-h264.c- Extension
.c- Size
- 17005 bytes
- Lines
- 606
- 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.
- 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.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/kernel.hlinux/types.hlinux/string.hlinux/v4l2-controls.hlinux/device.hlinux/export.hlinux/log2.hnal-h264.hnal-rbsp.h
Detected Declarations
enum nal_unit_typefunction nal_h264_write_start_code_prefixfunction nal_h264_read_start_code_prefixfunction nal_h264_write_filler_datafunction nal_h264_read_filler_datafunction nal_h264_rbsp_hrd_parametersfunction nal_h264_rbsp_vui_parametersfunction nal_h264_rbsp_spsfunction nal_h264_rbsp_ppsfunction nal_h264_write_spsfunction nal_h264_read_spsfunction nal_h264_write_ppsfunction nal_h264_read_ppsfunction nal_h264_write_fillerfunction nal_h264_read_fillerexport nal_h264_write_spsexport nal_h264_read_spsexport nal_h264_write_ppsexport nal_h264_read_ppsexport nal_h264_write_fillerexport nal_h264_read_filler
Annotated Snippet
if (DIV_ROUND_UP(rbsp->pos, 8) > rbsp->size) {
rbsp->error = -EINVAL;
return;
}
p++;
rbsp->pos += 8;
}
}
static void nal_h264_rbsp_hrd_parameters(struct rbsp *rbsp,
struct nal_h264_hrd_parameters *hrd)
{
unsigned int i;
if (!hrd) {
rbsp->error = -EINVAL;
return;
}
rbsp_uev(rbsp, &hrd->cpb_cnt_minus1);
rbsp_bits(rbsp, 4, &hrd->bit_rate_scale);
rbsp_bits(rbsp, 4, &hrd->cpb_size_scale);
for (i = 0; i <= hrd->cpb_cnt_minus1; i++) {
rbsp_uev(rbsp, &hrd->bit_rate_value_minus1[i]);
rbsp_uev(rbsp, &hrd->cpb_size_value_minus1[i]);
rbsp_bit(rbsp, &hrd->cbr_flag[i]);
}
rbsp_bits(rbsp, 5, &hrd->initial_cpb_removal_delay_length_minus1);
rbsp_bits(rbsp, 5, &hrd->cpb_removal_delay_length_minus1);
rbsp_bits(rbsp, 5, &hrd->dpb_output_delay_length_minus1);
rbsp_bits(rbsp, 5, &hrd->time_offset_length);
}
static void nal_h264_rbsp_vui_parameters(struct rbsp *rbsp,
struct nal_h264_vui_parameters *vui)
{
if (!vui) {
rbsp->error = -EINVAL;
return;
}
rbsp_bit(rbsp, &vui->aspect_ratio_info_present_flag);
if (vui->aspect_ratio_info_present_flag) {
rbsp_bits(rbsp, 8, &vui->aspect_ratio_idc);
if (vui->aspect_ratio_idc == 255) {
rbsp_bits(rbsp, 16, &vui->sar_width);
rbsp_bits(rbsp, 16, &vui->sar_height);
}
}
rbsp_bit(rbsp, &vui->overscan_info_present_flag);
if (vui->overscan_info_present_flag)
rbsp_bit(rbsp, &vui->overscan_appropriate_flag);
rbsp_bit(rbsp, &vui->video_signal_type_present_flag);
if (vui->video_signal_type_present_flag) {
rbsp_bits(rbsp, 3, &vui->video_format);
rbsp_bit(rbsp, &vui->video_full_range_flag);
rbsp_bit(rbsp, &vui->colour_description_present_flag);
if (vui->colour_description_present_flag) {
rbsp_bits(rbsp, 8, &vui->colour_primaries);
rbsp_bits(rbsp, 8, &vui->transfer_characteristics);
rbsp_bits(rbsp, 8, &vui->matrix_coefficients);
}
}
rbsp_bit(rbsp, &vui->chroma_loc_info_present_flag);
if (vui->chroma_loc_info_present_flag) {
rbsp_uev(rbsp, &vui->chroma_sample_loc_type_top_field);
rbsp_uev(rbsp, &vui->chroma_sample_loc_type_bottom_field);
}
rbsp_bit(rbsp, &vui->timing_info_present_flag);
if (vui->timing_info_present_flag) {
rbsp_bits(rbsp, 32, &vui->num_units_in_tick);
rbsp_bits(rbsp, 32, &vui->time_scale);
rbsp_bit(rbsp, &vui->fixed_frame_rate_flag);
}
rbsp_bit(rbsp, &vui->nal_hrd_parameters_present_flag);
if (vui->nal_hrd_parameters_present_flag)
nal_h264_rbsp_hrd_parameters(rbsp, &vui->nal_hrd_parameters);
rbsp_bit(rbsp, &vui->vcl_hrd_parameters_present_flag);
if (vui->vcl_hrd_parameters_present_flag)
nal_h264_rbsp_hrd_parameters(rbsp, &vui->vcl_hrd_parameters);
Annotation
- Immediate include surface: `linux/kernel.h`, `linux/types.h`, `linux/string.h`, `linux/v4l2-controls.h`, `linux/device.h`, `linux/export.h`, `linux/log2.h`, `nal-h264.h`.
- Detected declarations: `enum nal_unit_type`, `function nal_h264_write_start_code_prefix`, `function nal_h264_read_start_code_prefix`, `function nal_h264_write_filler_data`, `function nal_h264_read_filler_data`, `function nal_h264_rbsp_hrd_parameters`, `function nal_h264_rbsp_vui_parameters`, `function nal_h264_rbsp_sps`, `function nal_h264_rbsp_pps`, `function nal_h264_write_sps`.
- Atlas domain: Driver Families / drivers/media.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.