mirror of
https://github.com/mpv-player/mpv
synced 2024-11-11 00:15:33 +01:00
Add force-pbo suboption for faster OpenGL output.
Based on a patch by Sven Gothel sgothel-jausoftcom. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26713 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
00b1ac02e2
commit
f30961d414
@ -16,6 +16,7 @@
|
|||||||
#ifdef HAVE_NEW_GUI
|
#ifdef HAVE_NEW_GUI
|
||||||
#include "gui/interface.h"
|
#include "gui/interface.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "fastmemcpy.h"
|
||||||
#include "libass/ass.h"
|
#include "libass/ass.h"
|
||||||
#include "libass/ass_mp.h"
|
#include "libass/ass_mp.h"
|
||||||
|
|
||||||
@ -81,6 +82,7 @@ static uint32_t image_height;
|
|||||||
static uint32_t image_format;
|
static uint32_t image_format;
|
||||||
static int many_fmts;
|
static int many_fmts;
|
||||||
static int ati_hack;
|
static int ati_hack;
|
||||||
|
static int force_pbo;
|
||||||
static int use_glFinish;
|
static int use_glFinish;
|
||||||
static int swap_interval;
|
static int swap_interval;
|
||||||
static GLenum gl_target;
|
static GLenum gl_target;
|
||||||
@ -707,10 +709,24 @@ static uint32_t get_image(mp_image_t *mpi) {
|
|||||||
|
|
||||||
static uint32_t draw_image(mp_image_t *mpi) {
|
static uint32_t draw_image(mp_image_t *mpi) {
|
||||||
int slice = slice_height;
|
int slice = slice_height;
|
||||||
int stride[3] = {mpi->stride[0], mpi->stride[1], mpi->stride[2]};
|
int stride[3];
|
||||||
unsigned char *planes[3] = {mpi->planes[0], mpi->planes[1], mpi->planes[2]};
|
unsigned char *planes[3];
|
||||||
|
mp_image_t mpi2 = *mpi;
|
||||||
if (mpi->flags & MP_IMGFLAG_DRAW_CALLBACK)
|
if (mpi->flags & MP_IMGFLAG_DRAW_CALLBACK)
|
||||||
return VO_TRUE;
|
return VO_TRUE;
|
||||||
|
mpi2.flags = 0; mpi2.type = MP_IMGTYPE_TEMP;
|
||||||
|
mpi2.width = mpi2.w; mpi2.height = mpi2.h;
|
||||||
|
if (force_pbo && !(mpi->flags & MP_IMGFLAG_DIRECT) && !gl_bufferptr && get_image(&mpi2) == VO_TRUE) {
|
||||||
|
int bpp = mpi->imgfmt == IMGFMT_YV12 ? 1 : mpi->bpp;
|
||||||
|
memcpy_pic(mpi2.planes[0], mpi->planes[0], mpi->w * bpp, mpi->h, mpi2.stride[0], mpi->stride[0]);
|
||||||
|
if (mpi->imgfmt == IMGFMT_YV12) {
|
||||||
|
memcpy_pic(mpi2.planes[1], mpi->planes[1], mpi->w >> 1, mpi->h >> 1, mpi2.stride[1], mpi->stride[1]);
|
||||||
|
memcpy_pic(mpi2.planes[2], mpi->planes[2], mpi->w >> 1, mpi->h >> 1, mpi2.stride[2], mpi->stride[2]);
|
||||||
|
}
|
||||||
|
mpi = &mpi2;
|
||||||
|
}
|
||||||
|
stride[0] = mpi->stride[0]; stride[1] = mpi->stride[1]; stride[2] = mpi->stride[2];
|
||||||
|
planes[0] = mpi->planes[0]; planes[1] = mpi->planes[1]; planes[2] = mpi->planes[2];
|
||||||
mpi_flipped = (stride[0] < 0);
|
mpi_flipped = (stride[0] < 0);
|
||||||
if (mpi->flags & MP_IMGFLAG_DIRECT) {
|
if (mpi->flags & MP_IMGFLAG_DIRECT) {
|
||||||
intptr_t base = (intptr_t)planes[0];
|
intptr_t base = (intptr_t)planes[0];
|
||||||
@ -793,6 +809,7 @@ static opt_t subopts[] = {
|
|||||||
{"lscale", OPT_ARG_INT, &lscale, (opt_test_f)int_non_neg},
|
{"lscale", OPT_ARG_INT, &lscale, (opt_test_f)int_non_neg},
|
||||||
{"cscale", OPT_ARG_INT, &cscale, (opt_test_f)int_non_neg},
|
{"cscale", OPT_ARG_INT, &cscale, (opt_test_f)int_non_neg},
|
||||||
{"ati-hack", OPT_ARG_BOOL, &ati_hack, NULL},
|
{"ati-hack", OPT_ARG_BOOL, &ati_hack, NULL},
|
||||||
|
{"force-pbo", OPT_ARG_BOOL, &force_pbo, NULL},
|
||||||
{"glfinish", OPT_ARG_BOOL, &use_glFinish, NULL},
|
{"glfinish", OPT_ARG_BOOL, &use_glFinish, NULL},
|
||||||
{"swapinterval", OPT_ARG_INT, &swap_interval,NULL},
|
{"swapinterval", OPT_ARG_INT, &swap_interval,NULL},
|
||||||
{"customprog", OPT_ARG_MSTRZ,&custom_prog, NULL},
|
{"customprog", OPT_ARG_MSTRZ,&custom_prog, NULL},
|
||||||
@ -816,6 +833,7 @@ static int preinit(const char *arg)
|
|||||||
use_rectangle = 0;
|
use_rectangle = 0;
|
||||||
use_glFinish = 0;
|
use_glFinish = 0;
|
||||||
ati_hack = 0;
|
ati_hack = 0;
|
||||||
|
force_pbo = 0;
|
||||||
swap_interval = 1;
|
swap_interval = 1;
|
||||||
slice_height = 0;
|
slice_height = 0;
|
||||||
custom_prog = NULL;
|
custom_prog = NULL;
|
||||||
@ -842,6 +860,8 @@ static int preinit(const char *arg)
|
|||||||
" 2: use texture_non_power_of_two\n"
|
" 2: use texture_non_power_of_two\n"
|
||||||
" ati-hack\n"
|
" ati-hack\n"
|
||||||
" Workaround ATI bug with PBOs\n"
|
" Workaround ATI bug with PBOs\n"
|
||||||
|
" force-pbo\n"
|
||||||
|
" Force use of PBO even if this involves an extra memcpy\n"
|
||||||
" glfinish\n"
|
" glfinish\n"
|
||||||
" Call glFinish() before swapping buffers\n"
|
" Call glFinish() before swapping buffers\n"
|
||||||
" swapinterval=<n>\n"
|
" swapinterval=<n>\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user