iter4 DEBUG: pre-S_EXT_CTRLS DPB census + per-entry dump

Inline log of DECODE_PARAMS.flags, sps.max_num_ref_frames, dpb counts
(valid/active/long-term/internally-used), and per-entry frame_num /
pic_num / fields / reference_ts immediately before each S_EXT_CTRLS
submission.

Used in iter4 Phase 4 to identify (a) the dpb->fields=0 bug and
(b) the stale-entry growth bug. Stays in for iter4 Phase 4 continuation
(at least one more bug still produces EINVAL after frame ~20). Remove
at iter5 DEBUG sweep alongside iter1 ENTER/CAPTURE-dump and iter3 Y2.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-05 13:44:56 +00:00
parent 74d8dd134a
commit 4892656b3f
+31
View File
@@ -993,6 +993,37 @@ int h264_set_controls(struct request_data *driver_data,
unsigned int num_controls = 0;
const bool slice_based = false; /* TODO: probe via context->decode_mode */
/* DEBUG iter4: dump DPB census + DECODE_PARAMS.flags before submission. */
{
unsigned int dpb_valid = 0, dpb_used = 0, dpb_active = 0, dpb_lt = 0;
for (int i = 0; i < H264_DPB_SIZE; i++) {
struct v4l2_h264_dpb_entry *e = &decode.dpb[i];
if (e->flags & V4L2_H264_DPB_ENTRY_FLAG_VALID) dpb_valid++;
if (e->flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE) dpb_active++;
if (e->flags & V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM) dpb_lt++;
}
for (int i = 0; i < H264_DPB_SIZE; i++)
if (context->dpb.entries[i].used) dpb_used++;
request_log("iter4 dbg: pre-S_EXT_CTRLS: decode.flags=0x%02x decode.frame_num=%u decode.nal_ref_idc=%u "
"decode.TopFOC=%d sps.max_refs=%u "
"dpb_valid=%u/active=%u/long=%u (ours_used=%u) sps.profile=%u sps.poc_type=%u "
"ref_l0_minus1=%u ref_l1_minus1=%u\n",
decode.flags, decode.frame_num, decode.nal_ref_idc,
decode.top_field_order_cnt, sps.max_num_ref_frames,
dpb_valid, dpb_active, dpb_lt, dpb_used,
sps.profile_idc, sps.pic_order_cnt_type,
pps.num_ref_idx_l0_default_active_minus1,
pps.num_ref_idx_l1_default_active_minus1);
for (int i = 0; i < H264_DPB_SIZE; i++) {
struct v4l2_h264_dpb_entry *e = &decode.dpb[i];
if (!(e->flags & V4L2_H264_DPB_ENTRY_FLAG_VALID))
continue;
request_log(" dpb[%d]: ts=%llu frame_num=%u pic_num=%u fields=0x%x flags=0x%x TopFOC=%d\n",
i, (unsigned long long)e->reference_ts, e->frame_num, e->pic_num,
e->fields, e->flags, e->top_field_order_cnt);
}
}
controls[num_controls].id = V4L2_CID_STATELESS_H264_SPS;
controls[num_controls].p_h264_sps = &sps;
controls[num_controls].size = sizeof(sps);