drivers/media/test-drivers/vidtv/vidtv_mux.c
Source file repositories/reference/linux-study-clean/drivers/media/test-drivers/vidtv/vidtv_mux.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/test-drivers/vidtv/vidtv_mux.c- Extension
.c- Size
- 13772 bytes
- Lines
- 558
- 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.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/delay.hlinux/dev_printk.hlinux/jiffies.hlinux/kernel.hlinux/math64.hlinux/ratelimit.hlinux/slab.hlinux/types.hlinux/vmalloc.hvidtv_channel.hvidtv_common.hvidtv_encoder.hvidtv_mux.hvidtv_pes.hvidtv_psi.hvidtv_ts.h
Detected Declarations
function Copyrightfunction vidtv_mux_pid_ctx_destroyfunction hash_for_each_safefunction vidtv_mux_pid_ctx_initfunction vidtv_mux_update_clkfunction vidtv_mux_push_sifunction vidtv_mux_push_pcrfunction vidtv_mux_should_push_pcrfunction vidtv_mux_should_push_sifunction vidtv_mux_packetize_access_unitsfunction vidtv_mux_poll_encodersfunction vidtv_mux_pad_with_nullsfunction vidtv_mux_clearfunction vidtv_mux_tickfunction vidtv_mux_start_threadfunction vidtv_mux_stop_threadfunction vidtv_mux_destroy
Annotated Snippet
if (pmt_pid > TS_LAST_VALID_PID) {
dev_warn_ratelimited(m->dev,
"PID: %d not found\n", pmt_pid);
continue;
}
pmt_ctx = vidtv_mux_get_pid_ctx(m, pmt_pid);
if (!pmt_ctx)
continue;
pmt_args.offset = m->mux_buf_offset;
pmt_args.pmt = m->si.pmt_secs[i];
pmt_args.pid = pmt_pid;
pmt_args.continuity_counter = &pmt_ctx->cc;
/* write each section into buffer */
m->mux_buf_offset += vidtv_psi_pmt_write_into(&pmt_args);
}
sdt_args.offset = m->mux_buf_offset;
sdt_args.continuity_counter = &sdt_ctx->cc;
m->mux_buf_offset += vidtv_psi_sdt_write_into(&sdt_args);
nit_args.offset = m->mux_buf_offset;
nit_args.continuity_counter = &nit_ctx->cc;
m->mux_buf_offset += vidtv_psi_nit_write_into(&nit_args);
eit_args.offset = m->mux_buf_offset;
eit_args.continuity_counter = &eit_ctx->cc;
m->mux_buf_offset += vidtv_psi_eit_write_into(&eit_args);
nbytes = m->mux_buf_offset - initial_offset;
m->num_streamed_si++;
return nbytes;
}
static u32 vidtv_mux_push_pcr(struct vidtv_mux *m)
{
struct pcr_write_args args = {};
struct vidtv_mux_pid_ctx *ctx;
u32 nbytes = 0;
ctx = vidtv_mux_get_pid_ctx(m, m->pcr_pid);
args.dest_buf = m->mux_buf;
args.pid = m->pcr_pid;
args.buf_sz = m->mux_buf_sz;
args.continuity_counter = &ctx->cc;
/* the 27Mhz clock will feed both parts of the PCR bitfield */
args.pcr = m->timing.clk;
nbytes += vidtv_ts_pcr_write_into(&args);
m->mux_buf_offset += nbytes;
m->num_streamed_pcr++;
return nbytes;
}
static bool vidtv_mux_should_push_pcr(struct vidtv_mux *m)
{
u64 next_pcr_at;
if (m->num_streamed_pcr == 0)
return true;
next_pcr_at = m->timing.start_jiffies +
usecs_to_jiffies(m->num_streamed_pcr *
m->timing.pcr_period_usecs);
return time_after64(m->timing.current_jiffies, next_pcr_at);
}
static bool vidtv_mux_should_push_si(struct vidtv_mux *m)
{
u64 next_si_at;
if (m->num_streamed_si == 0)
return true;
next_si_at = m->timing.start_jiffies +
usecs_to_jiffies(m->num_streamed_si *
m->timing.si_period_usecs);
return time_after64(m->timing.current_jiffies, next_si_at);
Annotation
- Immediate include surface: `linux/delay.h`, `linux/dev_printk.h`, `linux/jiffies.h`, `linux/kernel.h`, `linux/math64.h`, `linux/ratelimit.h`, `linux/slab.h`, `linux/types.h`.
- Detected declarations: `function Copyright`, `function vidtv_mux_pid_ctx_destroy`, `function hash_for_each_safe`, `function vidtv_mux_pid_ctx_init`, `function vidtv_mux_update_clk`, `function vidtv_mux_push_si`, `function vidtv_mux_push_pcr`, `function vidtv_mux_should_push_pcr`, `function vidtv_mux_should_push_si`, `function vidtv_mux_packetize_access_units`.
- 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.