drivers/media/test-drivers/visl/visl-dec.c
Source file repositories/reference/linux-study-clean/drivers/media/test-drivers/visl/visl-dec.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/test-drivers/visl/visl-dec.c- Extension
.c- Size
- 20743 bytes
- Lines
- 656
- Domain
- Driver Families
- Bucket
- drivers/media
- Inferred role
- Driver Families: implementation source
- Status
- source 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
visl.hvisl-debugfs.hvisl-dec.hvisl-trace-fwht.hvisl-trace-mpeg2.hvisl-trace-vp8.hvisl-trace-vp9.hvisl-trace-h264.hvisl-trace-hevc.hvisl-trace-av1.hlinux/delay.hlinux/workqueue.hmedia/v4l2-mem2mem.hmedia/tpg/v4l2-tpg.h
Detected Declarations
function visl_print_ts_idxfunction visl_get_ref_framesfunction visl_fill_bytesusedfunction visl_tpg_fill_sequencefunction visl_tpg_fill_codec_specificfunction visl_tpg_fillfunction visl_trace_ctrlsfunction visl_device_run
Annotated Snippet
if (tpg_verbose && vb2_buf) {
len = scnprintf(buf, buflen, entry, i,
run->h264.dpram->dpb[i].reference_ts,
vb2_buf->index);
} else {
len = scnprintf(buf, buflen, entry_stable, i,
run->h264.dpram->dpb[i].reference_ts);
}
buf += len;
buflen -= len;
}
break;
}
case VISL_CODEC_HEVC: {
char entry[] = "dpb[%d]:%u, vb2_index: %d\n";
char entry_stable[] = "dpb[%d]:%u\n";
struct vb2_buffer *vb2_buf;
for (i = 0; i < ARRAY_SIZE(run->hevc.dpram->dpb); i++) {
vb2_buf = vb2_find_buffer(cap_q, run->hevc.dpram->dpb[i].timestamp);
if (tpg_verbose && vb2_buf) {
len = scnprintf(buf, buflen, entry, i,
run->hevc.dpram->dpb[i].timestamp,
vb2_buf->index);
} else {
len = scnprintf(buf, buflen, entry_stable, i,
run->hevc.dpram->dpb[i].timestamp);
}
buf += len;
buflen -= len;
}
break;
}
case VISL_CODEC_AV1: {
int idx_last = run->av1.frame->ref_frame_idx[LAST_BUF_IDX];
int idx_last2 = run->av1.frame->ref_frame_idx[LAST2_BUF_IDX];
int idx_last3 = run->av1.frame->ref_frame_idx[LAST3_BUF_IDX];
int idx_golden = run->av1.frame->ref_frame_idx[GOLDEN_BUF_IDX];
int idx_bwd = run->av1.frame->ref_frame_idx[BWD_BUF_IDX];
int idx_alt2 = run->av1.frame->ref_frame_idx[ALT2_BUF_IDX];
int idx_alt = run->av1.frame->ref_frame_idx[ALT_BUF_IDX];
const u64 *reference_frame_ts = run->av1.frame->reference_frame_ts;
struct vb2_buffer *ref_last =
vb2_find_buffer(cap_q, reference_frame_ts[idx_last]);
struct vb2_buffer *ref_last2 =
vb2_find_buffer(cap_q, reference_frame_ts[idx_last2]);
struct vb2_buffer *ref_last3 =
vb2_find_buffer(cap_q, reference_frame_ts[idx_last3]);
struct vb2_buffer *ref_golden =
vb2_find_buffer(cap_q, reference_frame_ts[idx_golden]);
struct vb2_buffer *ref_bwd =
vb2_find_buffer(cap_q, reference_frame_ts[idx_bwd]);
struct vb2_buffer *ref_alt2 =
vb2_find_buffer(cap_q, reference_frame_ts[idx_alt2]);
struct vb2_buffer *ref_alt =
vb2_find_buffer(cap_q, reference_frame_ts[idx_alt]);
visl_print_ts_idx(&buf, &buflen, "ref_last_ts",
reference_frame_ts[idx_last], ref_last);
visl_print_ts_idx(&buf, &buflen, "ref_last2_ts",
reference_frame_ts[idx_last2], ref_last2);
visl_print_ts_idx(&buf, &buflen, "ref_last3_ts",
reference_frame_ts[idx_last3], ref_last3);
visl_print_ts_idx(&buf, &buflen, "ref_golden_ts",
reference_frame_ts[idx_golden], ref_golden);
visl_print_ts_idx(&buf, &buflen, "ref_bwd_ts",
reference_frame_ts[idx_bwd], ref_bwd);
visl_print_ts_idx(&buf, &buflen, "ref_alt2_ts",
reference_frame_ts[idx_alt2], ref_alt2);
visl_print_ts_idx(&buf, &buflen, "ref_alt_ts",
reference_frame_ts[idx_alt], ref_alt);
break;
}
}
}
static char *visl_get_vb2_state(enum vb2_buffer_state state)
{
switch (state) {
case VB2_BUF_STATE_DEQUEUED:
return "Dequeued";
case VB2_BUF_STATE_IN_REQUEST:
Annotation
- Immediate include surface: `visl.h`, `visl-debugfs.h`, `visl-dec.h`, `visl-trace-fwht.h`, `visl-trace-mpeg2.h`, `visl-trace-vp8.h`, `visl-trace-vp9.h`, `visl-trace-h264.h`.
- Detected declarations: `function visl_print_ts_idx`, `function visl_get_ref_frames`, `function visl_fill_bytesused`, `function visl_tpg_fill_sequence`, `function visl_tpg_fill_codec_specific`, `function visl_tpg_fill`, `function visl_trace_ctrls`, `function visl_device_run`.
- Atlas domain: Driver Families / drivers/media.
- Implementation status: source 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.