2008-05-14 17:22:53 +00:00
|
|
|
/*
|
|
|
|
* based on video_out_null.c from mpeg2dec
|
2001-02-24 20:28:24 +00:00
|
|
|
*
|
2008-05-14 17:22:53 +00:00
|
|
|
* Copyright (C) Aaron Holtzman - June 2000
|
2001-02-24 20:28:24 +00:00
|
|
|
*
|
2015-04-13 07:36:54 +00:00
|
|
|
* This file is part of mpv.
|
2008-05-14 17:22:53 +00:00
|
|
|
*
|
2015-04-13 07:36:54 +00:00
|
|
|
* mpv is free software; you can redistribute it and/or modify
|
2008-05-14 17:22:53 +00:00
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
2015-04-13 07:36:54 +00:00
|
|
|
* mpv is distributed in the hope that it will be useful,
|
2008-05-14 17:22:53 +00:00
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
2015-04-13 07:36:54 +00:00
|
|
|
* with mpv. If not, see <http://www.gnu.org/licenses/>.
|
2001-02-24 20:28:24 +00:00
|
|
|
*/
|
|
|
|
|
2002-04-13 19:14:34 +00:00
|
|
|
#include <stdlib.h>
|
2013-12-17 01:39:45 +00:00
|
|
|
#include "common/msg.h"
|
2012-11-09 00:06:43 +00:00
|
|
|
#include "vo.h"
|
|
|
|
#include "video/mp_image.h"
|
2015-05-24 13:48:48 +00:00
|
|
|
#include "osdep/timer.h"
|
|
|
|
#include "options/m_option.h"
|
|
|
|
|
|
|
|
struct priv {
|
|
|
|
int64_t last_vsync;
|
|
|
|
|
|
|
|
double cfg_fps;
|
|
|
|
};
|
2001-02-24 20:28:24 +00:00
|
|
|
|
2012-11-04 14:56:04 +00:00
|
|
|
static void draw_image(struct vo *vo, mp_image_t *mpi)
|
|
|
|
{
|
2014-06-17 21:05:50 +00:00
|
|
|
talloc_free(mpi);
|
2012-11-04 14:56:04 +00:00
|
|
|
}
|
|
|
|
|
2012-08-06 22:24:53 +00:00
|
|
|
static void flip_page(struct vo *vo)
|
2001-02-24 20:28:24 +00:00
|
|
|
{
|
2015-05-24 13:48:48 +00:00
|
|
|
struct priv *p = vo->priv;
|
|
|
|
if (p->cfg_fps) {
|
|
|
|
int64_t ft = 1e6 / p->cfg_fps;
|
|
|
|
int64_t prev_vsync = mp_time_us() / ft;
|
|
|
|
int64_t target_time = (prev_vsync + 1) * ft;
|
|
|
|
for (;;) {
|
|
|
|
int64_t now = mp_time_us();
|
|
|
|
if (now >= target_time)
|
|
|
|
break;
|
|
|
|
mp_sleep_us(target_time - now);
|
|
|
|
}
|
|
|
|
}
|
2001-02-24 20:28:24 +00:00
|
|
|
}
|
|
|
|
|
2015-01-21 21:08:24 +00:00
|
|
|
static int query_format(struct vo *vo, int format)
|
2001-02-24 20:28:24 +00:00
|
|
|
{
|
2015-01-21 21:08:24 +00:00
|
|
|
return 1;
|
2001-02-24 20:28:24 +00:00
|
|
|
}
|
|
|
|
|
2015-10-03 16:20:16 +00:00
|
|
|
static int reconfig(struct vo *vo, struct mp_image_params *params)
|
2001-02-24 20:28:24 +00:00
|
|
|
{
|
2012-08-06 22:24:53 +00:00
|
|
|
return 0;
|
2001-02-24 20:28:24 +00:00
|
|
|
}
|
|
|
|
|
2012-08-06 22:24:53 +00:00
|
|
|
static void uninit(struct vo *vo)
|
2001-02-24 20:28:24 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2013-07-22 20:52:42 +00:00
|
|
|
static int preinit(struct vo *vo)
|
2002-01-26 16:01:26 +00:00
|
|
|
{
|
2002-02-17 08:24:43 +00:00
|
|
|
return 0;
|
2002-01-26 16:01:26 +00:00
|
|
|
}
|
2001-03-03 21:46:39 +00:00
|
|
|
|
2012-08-06 22:24:53 +00:00
|
|
|
static int control(struct vo *vo, uint32_t request, void *data)
|
2002-01-26 16:01:26 +00:00
|
|
|
{
|
2015-05-24 13:48:48 +00:00
|
|
|
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;
|
|
|
|
}
|
2012-08-06 22:24:53 +00:00
|
|
|
return VO_NOTIMPL;
|
2002-01-26 16:01:26 +00:00
|
|
|
}
|
2012-08-06 22:24:53 +00:00
|
|
|
|
2015-05-24 13:48:48 +00:00
|
|
|
#define OPT_BASE_STRUCT struct priv
|
2012-08-06 22:24:53 +00:00
|
|
|
const struct vo_driver video_out_null = {
|
2013-10-23 17:06:14 +00:00
|
|
|
.description = "Null video output",
|
|
|
|
.name = "null",
|
2012-08-06 22:24:53 +00:00
|
|
|
.preinit = preinit,
|
2012-11-04 15:24:18 +00:00
|
|
|
.query_format = query_format,
|
2014-01-24 20:22:25 +00:00
|
|
|
.reconfig = reconfig,
|
2012-08-06 22:24:53 +00:00
|
|
|
.control = control,
|
2012-11-04 14:56:04 +00:00
|
|
|
.draw_image = draw_image,
|
2012-08-06 22:24:53 +00:00
|
|
|
.flip_page = flip_page,
|
|
|
|
.uninit = uninit,
|
2015-05-24 13:48:48 +00:00
|
|
|
.priv_size = sizeof(struct priv),
|
|
|
|
.options = (const struct m_option[]) {
|
|
|
|
OPT_DOUBLE("fps", cfg_fps, M_OPT_RANGE, .min = 0, .max = 10000),
|
|
|
|
{0},
|
|
|
|
},
|
2012-08-06 22:24:53 +00:00
|
|
|
};
|