static void init_freemap (void) { static uint8_t first_block[4096]; use_block (&first_block[0]); unsigned nth = 0; videoram_printf (" "); for (const struct e820_entry *mem = e820_start (); mem; mem = e820_next (mem)) { if (mem->type != E820_MEMORY) continue; uint8_t *start, *end; start = (void *) round_up_pow2 (MAX (mem->base_addr, (uintptr_t) &_kernel_memory_end), 12); end = (void *) round_down_pow2 (mem->base_addr + mem->length, 12); for (uint8_t *i = start; i < end; i += 4096) { if (++nth == 200*1024*1024 / 4096) { nth = 0; videoram_printf ("."); } return_frame (i); } } videoram_printf (" (%'zu MB) ", counter*4096/1024/1024); }
int ff_yadif_request_frame(AVFilterLink *link) { AVFilterContext *ctx = link->src; YADIFContext *yadif = ctx->priv; int ret; if (yadif->frame_pending) { return_frame(ctx, 1); return 0; } if (yadif->eof) return AVERROR_EOF; ret = ff_request_frame(ctx->inputs[0]); if (ret == AVERROR_EOF && yadif->cur) { AVFrame *next = av_frame_clone(yadif->next); if (!next) return AVERROR(ENOMEM); next->pts = yadif->next->pts * 2 - yadif->cur->pts; ff_yadif_filter_frame(ctx->inputs[0], next); yadif->eof = 1; } else if (ret < 0) { return ret; } return 0; }
bool frame_allocator_return (void *page) { ASSERT (((uintptr_t) page & 0x0FFF) == 0); ASSERT (page != NULL); return return_frame (page); }
int ff_yadif_filter_frame(AVFilterLink *link, AVFrame *frame) { AVFilterContext *ctx = link->dst; YADIFContext *yadif = ctx->priv; av_assert0(frame); if (yadif->frame_pending) return_frame(ctx, 1); if (yadif->prev) av_frame_free(&yadif->prev); yadif->prev = yadif->cur; yadif->cur = yadif->next; yadif->next = frame; if (!yadif->cur && !(yadif->cur = av_frame_clone(yadif->next))) return AVERROR(ENOMEM); if (checkstride(yadif, yadif->next, yadif->cur)) { av_log(ctx, AV_LOG_VERBOSE, "Reallocating frame due to differing stride\n"); fixstride(link, yadif->next); } if (checkstride(yadif, yadif->next, yadif->cur)) fixstride(link, yadif->cur); if (yadif->prev && checkstride(yadif, yadif->next, yadif->prev)) fixstride(link, yadif->prev); if (checkstride(yadif, yadif->next, yadif->cur) || (yadif->prev && checkstride(yadif, yadif->next, yadif->prev))) { av_log(ctx, AV_LOG_ERROR, "Failed to reallocate frame\n"); return -1; } if (!yadif->prev) return 0; if ((yadif->deint && !yadif->cur->interlaced_frame) || ctx->is_disabled || (yadif->deint && !yadif->prev->interlaced_frame && yadif->prev->repeat_pict) || (yadif->deint && !yadif->next->interlaced_frame && yadif->next->repeat_pict) ) { yadif->out = av_frame_clone(yadif->cur); if (!yadif->out) return AVERROR(ENOMEM); av_frame_free(&yadif->prev); if (yadif->out->pts != AV_NOPTS_VALUE) yadif->out->pts *= 2; return ff_filter_frame(ctx->outputs[0], yadif->out); } yadif->out = ff_get_video_buffer(ctx->outputs[0], link->w, link->h); if (!yadif->out) return AVERROR(ENOMEM); av_frame_copy_props(yadif->out, yadif->cur); yadif->out->interlaced_frame = 0; if (yadif->out->pts != AV_NOPTS_VALUE) yadif->out->pts *= 2; return return_frame(ctx, 0); }