74 uint32_t schedulingDelayMs = 0)
219 "PacedVideoOutput: %s (fps=%.2f, clock=%s, scheduling delay=%u ms, "
220 "queue=%u bytes, stack=%u words, priority=%u)",
221 ok ?
"render task started" :
"render task failed to start",
223 p_clock !=
nullptr ?
"external audio" :
"wall",
234 "PacedVideoOutput: render task stopped (%u frames rendered - %u "
235 "I / %u P, %u P dropped / %u I dropped, input=%.2f fps, "
262 size_t write(
const uint8_t* data,
size_t len)
override {
263 if (len == 0)
return 0;
289 header.
size = (uint32_t)len;
291 header.
is_key = is_key ? 1 : 0;
292 size_t needed =
sizeof(header) + len;
305 bool falling_behind =
309 if (!is_key && (queue_full || falling_behind)) {
319 "PacedVideoOutput: dropping P frames starting at #%u - %s "
320 "(%d/%u bytes free, need %u, render %d ms behind)",
321 (
unsigned)this_frame,
322 queue_full ?
"render queue full" :
"catching up",
331 bool logged_wait =
false;
335 "PacedVideoOutput: write() blocked on frame #%u - render "
336 "queue full (%d/%u bytes free, need %u)",
338 (
unsigned)
queue.
size(), (
unsigned)needed);
347 "PacedVideoOutput: queued frame #%u (%s, %u bytes, target=%u ms, "
349 (
unsigned)this_frame, is_key ?
"I" :
"P", (unsigned)len,
438 return elapsed > 0 ? (1000.0f *
frame_count) / elapsed : 0.0f;
452 return elapsed > 0 ? (1000.0f * count) / elapsed : 0.0f;
585 bool found_key =
false;
603 uint8_t scratch[256];
605 while (remaining > 0) {
606 size_t chunk = remaining <
sizeof(scratch) ? remaining :
sizeof(scratch);
662 LOGI(
"PacedVideoOutput: playback anchored at %u ms (%s clock)",
669 while ((int32_t)(scheduled_ms -
clockMs()) > 0) {
676 int32_t lateness_ms = (int32_t)(
clockMs() - scheduled_ms);
690 bool lateness_resync =
698 if (lateness_resync || queue_resync || iframe_resync) {
701 uint32_t new_target_ms = target_ms;
704 "PacedVideoOutput: resyncing (%s) - %s instead of trying to "
708 : (queue_resync ?
"queue fill" :
"I-frame backlog"),
709 found_fresher_key ?
"jumping to the newest available keyframe"
710 :
"jumping the schedule forward");
711 if (found_fresher_key) {
718 target_ms = new_target_ms;
747 uint32_t processStart =
millis();
750 uint32_t processMs =
millis() - processStart;
772 "PacedVideoOutput: rendered %s frame - scheduled=%u actual=%u "
773 "(%d ms late), process=%u ms",
774 is_key ?
"I" :
"P", (unsigned)scheduled_ms, (
unsigned)
clockMs(),
775 (int)lateness_ms, (
unsigned)processMs);
778 "PacedVideoOutput: decoded %s frame, no picture emitted yet "
779 "(scheduled=%u actual=%u, %d ms late), process=%u ms",
780 is_key ?
"I" :
"P", (unsigned)scheduled_ms, (
unsigned)
clockMs(),
781 (int)lateness_ms, (
unsigned)processMs);
785 "PacedVideoOutput: %s frame took %u ms to render - longer than "
786 "the %.1f ms frame period, falling behind",
#define LOGW(...)
Definition AudioLoggerIDF.h:29
#define LOGI(...)
Definition AudioLoggerIDF.h:28
#define LOGD(...)
Definition AudioLoggerIDF.h:27