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:
+31
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user