evidence · 3.7 KiB

mvx-patched-trace-audit.md

Committed at docs/evidence/network-video/mvx-patched-trace-audit.md. This is what grounds the requirements that cite it.

Open raw source

MVX empty-capture candidate trace audit

This audit covers the physical board traces in mvx-patched-traces.tar.gz, SHA-256 7c8c6558a8bce911d9660d2afea92b64ce416d80f6340ea305ca7b1ce9558775 (243864 bytes). The archive contains three capped runs, one uncapped EOF run, and the coordinator’s exit-status record. It is evidence for the local FFmpeg candidate only; it does not enable the patch in the image or make it an mpv default.

Provenance

The logs identify FFmpeg 9.0.1 using h264_v4l2m2m on MVX /dev/video0, with H.264 input /run/bbb-360p-sample.mp4 (640x360, 30 fps), a null output, and FFmpeg decoder/filter/encoder timestamp logging. MVX_IOCTL_TRACE records the V4L2 queue boundary. The candidate is the local source patch nix/patches/ffmpeg-v4l2-requeue-empty-capture.patch: it requeues only zero-payload, non-draining, non-LAST capture dequeues. The exact shell invocation is not preserved separately; the raw FFmpeg configuration and observed arguments are retained in each archive member, so this record does not reconstruct omitted arguments.

Completion and empty-capture result

mvx-candidate-result.txt records exit status zero for all four runs. Each capped run muxed 300 frames over 10.00 seconds, with elapsed times 1.48, 1.45, and 1.47 seconds. The uncapped run muxed and decoded 480 frames over 16.00 seconds in 2.10 seconds, reported zero decode errors, and reached decoder and filter EOF.

Every trace has exactly 20 intact initial CAPTURE_MPLANE DQBUF lines with bytesused=0, timestamp zero and flags 0x00004001. Each has one intact decoder, filter, and encoder PTS-zero line, consistent with the empty buffers being requeued instead of becoming twenty zero-PTS frames. This is not a per-buffer event-ID proof because FFmpeg and tracer writes share stderr. In the EOF run the final nonempty capture dequeue has bytesused=230400 and flags 0x10104001; normal EOF completed. Thus the trace is consistent with the candidate retaining the nonempty and end-of-stream path.

Remaining timestamp defect

The candidate does not repair the capture timestamp association. Each capped run has an intact duplicate capture dequeue timestamp 7.933333; decoder, filter, and encoder each show PTS 238 twice and no PTS 239. The EOF run repeats that defect and adds three intact capture dequeues with timestamp 12.033333. Its decoder/filter/encoder records show PTS 361 three times and omit 362 and 363. The upstream demuxer records the input PTS 239, so this is not evidence of a missing input packet. It locates the remaining failure at or below the MVX capture boundary, then shows FFmpeg preserving it.

The capped filter and encoder logs each contain 300 frame records but only 299 unique PTS values because of the 238/239 duplicate/gap. The EOF filter and encoder logs each contain 480 records but only 477 unique values (duplicate 238, triple 361, missing 239/362/363). Decoder literal-line counts differ from the stream summaries because the capped decode thread runs beyond the output frame limit and concurrent stderr lines interleave; they do not prove a frame loss. Similarly, only intact trace-prefix records can be counted exactly. The archive is retained so later work can parse or instrument a serialized boundary without treating these logging artifacts as a packet-to-frame proof.

Decision

The narrow requeue behavior and successful EOF repeat support using this patch only as a local diagnostic override for the next mpv native-PTS trial. Do not enable it globally or claim timestamp correctness. A follow-up must preserve the trace and investigate the duplicated MVX capture timestamps before making playback timing policy depend on this candidate.