v4l2_m2m_for...src_buf_safe(9)
πΈ v4l2_m2m_for...src_buf_safe β NAME π
okay so bestie, this is the Kernel API Manual page for v4l2_m2m_for_each_src_buf_safe β it's a macro that iterates over a list of source ready buffers safely, no cap. The way it does the whole "safe" thing is literally the entire point and we'll get to it, but first: the header up top got cut off at v4l2_m2m_for...src_buf_safe(9) (the man page name is basically wearing a crop top, it's fine, that's the vibe) π
β¨ SYNOPSIS β¨
v4l2_m2m_for_each_src_buf_safe (m2m_ctx , b , n );
three little args, one big slay π«Ά
π¦ ARGUMENTS π¦
m2m_ctxβ the m2m context assigned to the instance, given bystruct v4l2_m2m_ctx. this is the main character of the whole operation tbh πbβ the current buffer, of typestruct v4l2_m2m_buffer. it's literally the buffer you're looking at right now πnβ used as temporary storage. that's it. that's its whole job. it's the reliable bestie holding your bag π
π SEE ALSO π
okay this section is long and I'm obsessed, there's so much lore here. the kernel file lives at ./include/media/v4l2-mem2mem.h β go read it, fr fr:
struct v4l2_m2m_ops(9)struct v4l2_m2m_queue_ctx(9)struct v4l2_m2m_ctx(9)struct v4l2_m2m_buffer(9)v4l2_m2m_get_curr_priv(9)v4l2_m2m_get_vq(9)v4l2_m2m_try_schedule(9)v4l2_m2m_job_finish(9)v4l2_m2m_buf_done_and_job_finish(9)v4l2_m2m_clear_state(9)v4l2_m2m_mark_stopped(9)v4l2_m2m_dst_buf_is_last(9)v4l2_m2m_has_stopped(9)v4l2_m2m_is_last_draining_src_buf(9)v4l2_m2m_last_buffer_done(9)v4l2_m2m_suspend(9)v4l2_m2m_resume(9)v4l2_m2m_reqbufs(9)v4l2_m2m_querybuf(9)v4l2_m2m_qbuf(9)v4l2_m2m_dqbuf(9)v4l2_m2m_prepare_buf(9)v4l2_m2m_create_bufs(9)v4l2_m2m_expbuf(9)v4l2_m2m_streamon(9)v4l2_m2m_streamoff(9)v4l2_m2m_update_start_streaming_state(9)v4l2_m2m_update_stop_streaming_state(9)v4l2_m2m_encoder_cmd(9)v4l2_m2m_decoder_cmd(9)v4l2_m2m_poll(9)v4l2_m2m_mmap(9)v4l2_m2m_init(9)v4l2_m2m_release(9)v4l2_m2m_get(9)v4l2_m2m_put(9)v4l2_m2m_ctx_init(9)v4l2_m2m_ctx_release(9)v4l2_m2m_buf_queue(9)v4l2_m2m_num_src_bufs_ready(9)v4l2_m2m_num_dst_bufs_ready(9)v4l2_m2m_next_buf(9)v4l2_m2m_next_src_buf(9)v4l2_m2m_next_dst_buf(9)v4l2_m2m_last_buf(9)v4l2_m2m_last_src_buf(9)v4l2_m2m_last_dst_buf(9)v4l2_m2m_for_each_dst_buf(9)v4l2_m2m_for_each_src_buf(9)v4l2_m2m_for_each_dst_buf_safe(9)v4l2_m2m_get_src_vq(9)v4l2_m2m_get_dst_vq(9)v4l2_m2m_buf_remove(9)v4l2_m2m_src_buf_remove(9)v4l2_m2m_dst_buf_remove(9)v4l2_m2m_buf_remove_by_buf(9)v4l2_m2m_src_buf_remove_by_buf(9)v4l2_m2m_dst_buf_remove_by_buf(9)v4l2_m2m_buf_copy_metadata(9)
like... that's the whole friend group right there ππ₯
ngl this page is short but the company it keeps is stacked. if you're touching m2m buffers, every single one of those is gonna come up eventually. iykyk π
and that's the whole page, bestie π
this masterpiece lives in ./include/media and it's dated October 2026 β the Kernel API Manual said periodt, drop the mic, see you in the next one β¨ππ¦
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms