Something went wrong. Try again.
🎥 Command line media player
Something went wrong. Try again.
C
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106/* * based on video_out_null.c from mpeg2dec * * Copyright (C) Aaron Holtzman - June 2000 * * This file is part of mpv. * * mpv is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * mpv is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with mpv. If not, see <http://www.gnu.org/licenses/>. */
#include <stdlib.h>#include "common/msg.h"#include "vo.h"#include "video/mp_image.h"#include "osdep/timer.h"#include "options/m_option.h"
struct priv { int64_t last_vsync;
double cfg_fps;};
static bool draw_frame(struct vo *vo, struct vo_frame *frame){ return VO_TRUE;}
static void flip_page(struct vo *vo){ struct priv *p = vo->priv; if (p->cfg_fps) { int64_t ft = 1e9 / p->cfg_fps; int64_t prev_vsync = mp_time_ns() / ft; int64_t target_time = (prev_vsync + 1) * ft; for (;;) { int64_t now = mp_time_ns(); if (now >= target_time) break; mp_sleep_ns(target_time - now); } }}
static int query_format(struct vo *vo, int format){ return 1;}
static int reconfig(struct vo *vo, struct mp_image_params *params){ return 0;}
static void uninit(struct vo *vo){}
static int preinit(struct vo *vo){ return 0;}
static int control(struct vo *vo, uint32_t request, void *data){ struct priv *p = vo->priv; switch (request) { case VOCTRL_GET_DISPLAY_FPS: if (!p->cfg_fps) break; *(double *)data = p->cfg_fps; return VO_TRUE; } return VO_NOTIMPL;}
#define OPT_BASE_STRUCT struct privconst struct vo_driver video_out_null = { .description = "Null video output", .name = "null", .preinit = preinit, .query_format = query_format, .reconfig = reconfig, .control = control, .draw_frame = draw_frame, .flip_page = flip_page, .uninit = uninit, .priv_size = sizeof(struct priv), .options = (const struct m_option[]) { {"fps", OPT_DOUBLE(cfg_fps), M_RANGE(0, 10000)}, {0}, }, .options_prefix = "vo-null",};