1
0
mirror of https://github.com/jojo61/vdr-plugin-softhdcuvid.git synced 2023-10-10 13:37:41 +02:00

more fixes

This commit is contained in:
jojo61 2018-09-08 16:53:55 +02:00
parent f08f01b6a5
commit 076501266c
5 changed files with 81 additions and 84 deletions

View File

@ -15,9 +15,10 @@ PLUGIN = softhdcuvid
ALSA ?= $(shell pkg-config --exists alsa && echo 1) ALSA ?= $(shell pkg-config --exists alsa && echo 1)
# support OSS audio output module # support OSS audio output module
OSS ?= 1 OSS ?= 1
# support glx output # support OPENGLOSD
OPENGL=1 OPENGLOSD=1
OPENGL=1
# use ffmpeg libswresample # use ffmpeg libswresample
#SWRESAMPLE ?= $(shell pkg-config --exists libswresample && echo 1) #SWRESAMPLE ?= $(shell pkg-config --exists libswresample && echo 1)
SWRESAMPLE = 1 SWRESAMPLE = 1
@ -27,7 +28,7 @@ AVRESAMPLE ?= $(shell pkg-config --exists libavresample && echo 1)
AVRESAMPLE = 0 AVRESAMPLE = 0
endif endif
CONFIG := #-DDEBUG #-DOSD_DEBUG # enable debug output+functions CONFIG := #-DDEBUG #-DOSD_DEBUG # enable debug output+functions
CONFIG += -DCUVID # enable CUVID decoder CONFIG += -DCUVID # enable CUVID decoder
CONFIG += -DHAVE_GL # needed for mpv libs CONFIG += -DHAVE_GL # needed for mpv libs
#CONFIG += -DSTILL_DEBUG=2 # still picture debug verbose level #CONFIG += -DSTILL_DEBUG=2 # still picture debug verbose level
@ -103,11 +104,13 @@ ifeq ($(OPENGL),1)
_CFLAGS += $(shell pkg-config --cflags libva-glx) _CFLAGS += $(shell pkg-config --cflags libva-glx)
LIBS += $(shell pkg-config --libs libva-glx) LIBS += $(shell pkg-config --libs libva-glx)
endif endif
ifeq ($(OPENGLOSD),1)
CONFIG += -DUSE_OPENGLOSD
endif
ifeq ($(OPENGL),1) ifeq ($(OPENGL),1)
CONFIG += -DUSE_GLX CONFIG += -DUSE_GLX
_CFLAGS += $(shell pkg-config --cflags gl glu glew) _CFLAGS += $(shell pkg-config --cflags gl glu glew)
LIBS += $(shell pkg-config --libs gl glu glew) LIBS += $(shell pkg-config --libs gl glu glew)
CONFIG += -DUSE_OPENGLOSD
_CFLAGS += $(shell pkg-config --cflags glew) _CFLAGS += $(shell pkg-config --cflags glew)
LIBS += $(shell pkg-config --libs glew) LIBS += $(shell pkg-config --libs glew)
_CFLAGS += $(shell pkg-config --cflags freetype2) _CFLAGS += $(shell pkg-config --cflags freetype2)
@ -202,7 +205,10 @@ override CFLAGS += $(_CFLAGS) $(DEFINES) $(INCLUDES) \
### The object files (add further files here): ### The object files (add further files here):
OBJS = $(PLUGIN).o softhddev.o video.o audio.o codec.o ringbuffer.o openglosd.o OBJS = $(PLUGIN).o softhddev.o video.o audio.o codec.o ringbuffer.o
ifeq ($(OPENGLOSD),1)
OBJS += openglosd.o
endif
SRCS = $(wildcard $(OBJS:.o=.c)) $(PLUGIN).cpp SRCS = $(wildcard $(OBJS:.o=.c)) $(PLUGIN).cpp

25
codec.c
View File

@ -116,7 +116,7 @@ static pthread_mutex_t CodecLockMutex;
/// Flag prefer fast channel switch /// Flag prefer fast channel switch
char CodecUsePossibleDefectFrames; char CodecUsePossibleDefectFrames;
AVBufferRef *hw_device_ctx;
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// Video // Video
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -268,7 +268,6 @@ void CodecVideoOpen(VideoDecoder * decoder, int codec_id)
const char *name; const char *name;
int ret; int ret;
Debug(3, "***************codec: Video Open using video codec ID %#06x (%s)\n", codec_id, Debug(3, "***************codec: Video Open using video codec ID %#06x (%s)\n", codec_id,
avcodec_get_name(codec_id)); avcodec_get_name(codec_id));
@ -276,27 +275,28 @@ void CodecVideoOpen(VideoDecoder * decoder, int codec_id)
Error(_("codec: missing close\n")); Error(_("codec: missing close\n"));
} }
name = NULL; name = "NULL";
if (!strcasecmp(VideoGetDriverName(), "cuvid")) { if (!strcasecmp(VideoGetDriverName(), "cuvid")) {
switch (codec_id) { switch (codec_id) {
case AV_CODEC_ID_MPEG2VIDEO: case AV_CODEC_ID_MPEG2VIDEO:
name = VideoHardwareDecoder < 0 ? "mpeg2_cuvid" : NULL; name = "mpeg2_cuvid";
break; break;
case AV_CODEC_ID_H264: case AV_CODEC_ID_H264:
name = VideoHardwareDecoder ? "h264_cuvid" : NULL; name = "h264_cuvid";
break; break;
case AV_CODEC_ID_HEVC: case AV_CODEC_ID_HEVC:
name = VideoHardwareDecoder ? "hevc_cuvid" : NULL; name = "hevc_cuvid";
break; break;
} }
} }
if (name && (video_codec = avcodec_find_decoder_by_name(name))) { if (name && (video_codec = avcodec_find_decoder_by_name(name))) {
Debug(3, "codec: cuvid decoder found\n"); Debug(3, "codec: cuvid decoder found\n");
} else } else {
if (!(video_codec = avcodec_find_decoder(codec_id))) { Debug(3,"Decoder %s not supported\n",name);
Fatal(_("codec: codec ID %#06x not found\n"), codec_id); Fatal(_(" No decoder found"));
} }
decoder->VideoCodec = video_codec; decoder->VideoCodec = video_codec;
if (!(decoder->VideoCtx = avcodec_alloc_context3(video_codec))) { if (!(decoder->VideoCtx = avcodec_alloc_context3(video_codec))) {
@ -327,7 +327,7 @@ void CodecVideoOpen(VideoDecoder * decoder, int codec_id)
Fatal(_("codec: can't set option drop 2.field to video codec!\n")); Fatal(_("codec: can't set option drop 2.field to video codec!\n"));
} }
} }
else { else if (strstr(name,"cuvid") != NULL) {
if (av_opt_set_int(decoder->VideoCtx->priv_data, "deint", 2 ,0) < 0) { // adaptive if (av_opt_set_int(decoder->VideoCtx->priv_data, "deint", 2 ,0) < 0) { // adaptive
pthread_mutex_unlock(&CodecLockMutex); pthread_mutex_unlock(&CodecLockMutex);
Fatal(_("codec: can't set option deint to video codec!\n")); Fatal(_("codec: can't set option deint to video codec!\n"));
@ -361,7 +361,8 @@ void CodecVideoOpen(VideoDecoder * decoder, int codec_id)
decoder->VideoCtx->thread_count = 1; decoder->VideoCtx->thread_count = 1;
decoder->VideoCtx->active_thread_type = 0; decoder->VideoCtx->active_thread_type = 0;
decoder->VideoCtx->draw_horiz_band = NULL; decoder->VideoCtx->draw_horiz_band = NULL;
decoder->VideoCtx->hwaccel_context = VideoGetHwAccelContext(decoder->HwDecoder); if (strstr(name,"cuvid"))
decoder->VideoCtx->hwaccel_context = VideoGetHwAccelContext(decoder->HwDecoder);
// //

View File

@ -1895,12 +1895,13 @@ cOglOsd::cOglOsd(int Left, int Top, uint Level, std::shared_ptr<cOglThread> oglT
VideoGetOsdSize(&osdWidth, &osdHeight); VideoGetOsdSize(&osdWidth, &osdHeight);
dsyslog("[softhddev]cOglOsd osdLeft %d osdTop %d screenWidth %d screenHeight %d", Left, Top, osdWidth, osdHeight); dsyslog("[softhddev]cOglOsd osdLeft %d osdTop %d screenWidth %d screenHeight %d", Left, Top, osdWidth, osdHeight);
#if 0
//create vdpau output framebuffer //create vdpau output framebuffer
if (!oFb) { if (!oFb) {
oFb = new cOglOutputFb(osdWidth, osdHeight); oFb = new cOglOutputFb(osdWidth, osdHeight);
oglThread->DoCmd(new cOglCmdInitOutputFb(oFb)); oglThread->DoCmd(new cOglCmdInitOutputFb(oFb));
} }
#endif
} }
cOglOsd::~cOglOsd() { cOglOsd::~cOglOsd() {

View File

@ -1447,7 +1447,7 @@ static void VideoEnqueue(VideoStream * stream, int64_t pts, int64_t dts, const v
#ifdef DEBUG #ifdef DEBUG
if (avpkt->stream_index > VideoMaxPacketSize) { if (avpkt->stream_index > VideoMaxPacketSize) {
VideoMaxPacketSize = avpkt->stream_index; VideoMaxPacketSize = avpkt->stream_index;
Debug(3, "video: max used PES packet size: %d\n", VideoMaxPacketSize); Debug(4, "video: max used PES packet size: %d\n", VideoMaxPacketSize);
} }
#endif #endif
} }
@ -2231,13 +2231,13 @@ int PlayVideo3(VideoStream * stream, const uint8_t * data, int size)
dts = (int64_t) (data[14] & 0x0E) << 29 | data[15] << 22 | (data[16] & dts = (int64_t) (data[14] & 0x0E) << 29 | data[15] << 22 | (data[16] &
0xFE) << 14 | data[17] << 7 | (data[18] & 0xFE) >> 1; 0xFE) << 14 | data[17] << 7 | (data[18] & 0xFE) >> 1;
} }
//printf("PTS %ld DTS %ld\n",pts,dts);
check = data + 9 + n; check = data + 9 + n;
l = size - 9 - n; l = size - 9 - n;
z = 0; z = 0;
while (!*check) { // count leading zeros while (!*check) { // count leading zeros
if (l < 3) { if (l < 3) {
Warning(_("[softhddev] empty video packet %d bytes\n"), size); // Warning(_("[softhddev] empty video packet %d bytes\n"), size);
z = 0; z = 0;
break; break;
} }

111
video.c
View File

@ -551,7 +551,7 @@ static void VideoSetPts(int64_t * pts_p, int interlaced,
} }
} }
} }
static int CuvidMessage(int level, const char *format, ...);
/// ///
/// Update output for new size or aspect ratio. /// Update output for new size or aspect ratio.
/// ///
@ -584,9 +584,9 @@ static void VideoUpdateOutput(AVRational input_aspect_ratio, int input_width,
} }
display_aspect_ratio.num = display_aspect_ratio.num =
VideoScreen->width_in_pixels; // * VideoScreen->height_in_millimeters; VideoScreen->width_in_pixels * VideoScreen->height_in_millimeters;
display_aspect_ratio.den = display_aspect_ratio.den =
VideoScreen->height_in_pixels; // * VideoScreen->width_in_millimeters; VideoScreen->height_in_pixels * VideoScreen->width_in_millimeters;
display_aspect_ratio = av_mul_q(input_aspect_ratio, display_aspect_ratio); display_aspect_ratio = av_mul_q(input_aspect_ratio, display_aspect_ratio);
Debug(3, "video: aspect %d:%d\n", display_aspect_ratio.num, Debug(3, "video: aspect %d:%d\n", display_aspect_ratio.num,
@ -649,7 +649,7 @@ static void VideoUpdateOutput(AVRational input_aspect_ratio, int input_width,
*output_x += (video_width - *output_width) / 2; *output_x += (video_width - *output_width) / 2;
} }
Debug(3, "video: normal aspect output %dx%d%+d%+d Video %dx%d\n", *output_width, *output_height, *output_x, *output_y,video_width,video_height); CuvidMessage(2, "video: normal aspect output %dx%d%+d%+d Video %dx%d\n", *output_width, *output_height, *output_x, *output_y,video_width,video_height);
return; return;
stretch: stretch:
@ -1770,16 +1770,15 @@ static void CuvidDestroySurfaces(CuvidDecoder * decoder)
glDeleteBuffers(1,(GLuint *)&vao_buffer); glDeleteBuffers(1,(GLuint *)&vao_buffer);
if (decoder->cuda_ctx) if (decoder->cuda_ctx) {
checkCudaErrors(cuCtxPushCurrent(decoder->cuda_ctx)); checkCudaErrors(cuCtxPushCurrent(decoder->cuda_ctx));
for (i=0;i<decoder->SurfacesNeeded;i++) {
for (i=0;i<decoder->SurfacesNeeded;i++) for (j=0;j<2;j++) {
for (j=0;j<2;j++) { checkCudaErrors(cuGraphicsUnregisterResource(decoder->cu_res[i][j]));
checkCudaErrors(cuGraphicsUnregisterResource(decoder->cu_res[i][j])); }
} }
checkCudaErrors(cuCtxPopCurrent(NULL));
if (decoder->cuda_ctx) }
checkCudaErrors(cuCtxPopCurrent(NULL));
glDeleteTextures(CODEC_SURFACES_MAX*2,(GLuint*)&decoder->gl_textures); glDeleteTextures(CODEC_SURFACES_MAX*2,(GLuint*)&decoder->gl_textures);
GlxCheck(); GlxCheck();
@ -2110,11 +2109,12 @@ createTextureDst(CuvidDecoder * decoder,int anz, unsigned int size_x, unsigned i
glTexImage2D(GL_TEXTURE_2D, 0,n==0?GL_R16:GL_RG16 ,n==0?size_x:size_x/2, n==0?size_y:size_y/2, 0, n==0?GL_RED:GL_RG , GL_UNSIGNED_SHORT, NULL); glTexImage2D(GL_TEXTURE_2D, 0,n==0?GL_R16:GL_RG16 ,n==0?size_x:size_x/2, n==0?size_y:size_y/2, 0, n==0?GL_RED:GL_RG , GL_UNSIGNED_SHORT, NULL);
SDK_CHECK_ERROR_GL(); SDK_CHECK_ERROR_GL();
// register this texture with CUDA // register this texture with CUDA
checkCudaErrors(cuGraphicsGLRegisterImage(&decoder->cu_res[i][n], decoder->gl_textures[i*2+n], if (decoder->cuda_ctx) {
GL_TEXTURE_2D, CU_GRAPHICS_REGISTER_FLAGS_WRITE_DISCARD)); checkCudaErrors(cuGraphicsGLRegisterImage(&decoder->cu_res[i][n], decoder->gl_textures[i*2+n],GL_TEXTURE_2D, CU_GRAPHICS_REGISTER_FLAGS_WRITE_DISCARD));
checkCudaErrors(cuGraphicsMapResources(1, &decoder->cu_res[i][n], 0)); checkCudaErrors(cuGraphicsMapResources(1, &decoder->cu_res[i][n], 0));
checkCudaErrors(cuGraphicsSubResourceGetMappedArray(&decoder->cu_array[i][n], decoder->cu_res[i][n],0, 0)); checkCudaErrors(cuGraphicsSubResourceGetMappedArray(&decoder->cu_array[i][n], decoder->cu_res[i][n],0, 0));
checkCudaErrors(cuGraphicsUnmapResources(1, &decoder->cu_res[i][n], 0)); checkCudaErrors(cuGraphicsUnmapResources(1, &decoder->cu_res[i][n], 0));
}
} }
} }
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
@ -2240,7 +2240,8 @@ static int init_cuvid(AVCodecContext *avctx,CuvidDecoder * decoder)
AVCUDADeviceContext *device_hwctx; AVCUDADeviceContext *device_hwctx;
CUcontext dummy; CUcontext dummy;
hw_device_ctx = NULL; AVBufferRef *hw_device_ctx = NULL;
hw_device_ctx = av_hwdevice_ctx_alloc(AV_HWDEVICE_TYPE_CUDA); hw_device_ctx = av_hwdevice_ctx_alloc(AV_HWDEVICE_TYPE_CUDA);
if (!hw_device_ctx) if (!hw_device_ctx)
@ -2294,6 +2295,7 @@ static int init_cuvid(AVCodecContext *avctx,CuvidDecoder * decoder)
/// it is terminated by -1 as 0 is a valid format, the /// it is terminated by -1 as 0 is a valid format, the
/// formats are ordered by quality. /// formats are ordered by quality.
/// ///
static enum AVPixelFormat Cuvid_get_format(CuvidDecoder * decoder, static enum AVPixelFormat Cuvid_get_format(CuvidDecoder * decoder,
AVCodecContext * video_ctx, const enum AVPixelFormat *fmt) AVCodecContext * video_ctx, const enum AVPixelFormat *fmt)
{ {
@ -2328,14 +2330,14 @@ static enum AVPixelFormat Cuvid_get_format(CuvidDecoder * decoder,
Debug(3,"video profile %d codec id %d\n",video_ctx->profile,video_ctx->codec_id); Debug(3,"video profile %d codec id %d\n",video_ctx->profile,video_ctx->codec_id);
if (*fmt_idx == AV_PIX_FMT_NONE) { if (*fmt_idx == AV_PIX_FMT_NONE) {
Error(_("video/vdpau: no valid vdpau pixfmt found\n")); Error(_("video: no valid pixfmt found\n"));
} }
if (*fmt_idx != AV_PIX_FMT_CUDA) { if (*fmt_idx != AV_PIX_FMT_CUDA) {
Fatal(_("video/vdpau: no valid profile found\n")); Fatal(_("video: no valid profile found\n"));
} }
Debug(3, "video/vdpau: create decoder 16bit?=%d %dx%d \n",bitformat16, video_ctx->width, video_ctx->height); Debug(3, "video: create decoder 16bit?=%d %dx%d \n",bitformat16, video_ctx->width, video_ctx->height);
decoder->SurfacesNeeded = VIDEO_SURFACES_MAX + 1; decoder->SurfacesNeeded = VIDEO_SURFACES_MAX + 1;
@ -2880,14 +2882,9 @@ Debug(3,"fmt %02d:%02d width %d:%d hight %d:%d\n,",decoder->PixFmt,video_ctx->p
/// ///
static void *CuvidGetHwAccelContext(CuvidDecoder * decoder) static void *CuvidGetHwAccelContext(CuvidDecoder * decoder)
{ {
(void)decoder;
int ret,n; int ret,n;
unsigned int device_count,version; unsigned int device_count,version;
CUdevice device; CUdevice device;
AVHWDeviceContext *device_ctx;
AVCUDADeviceContext *device_hwctx;
CUcontext dummy;
Debug(3, "Initializing cuvid hwaccel thread ID:%ld\n",(long int)syscall(186)); Debug(3, "Initializing cuvid hwaccel thread ID:%ld\n",(long int)syscall(186));
@ -2912,8 +2909,6 @@ static void *CuvidGetHwAccelContext(CuvidDecoder * decoder)
cuCtxGetApiVersion(decoder->cuda_ctx,&version); cuCtxGetApiVersion(decoder->cuda_ctx,&version);
Debug(3, "***********CUDA API Version %d\n",version); Debug(3, "***********CUDA API Version %d\n",version);
// cudaProfilerInitialize("./nvconfig","./nvresult.csv", cudaCSV);
// cudaProfilerStart();
return NULL; return NULL;
} }
@ -4872,18 +4867,14 @@ static void VideoCreateWindow(xcb_window_t parent, xcb_visualid_t visual,
// define only available with xcb-utils-0.3.8 // define only available with xcb-utils-0.3.8
#ifdef XCB_ICCCM_NUM_WM_SIZE_HINTS_ELEMENTS #ifdef XCB_ICCCM_NUM_WM_SIZE_HINTS_ELEMENTS
// FIXME: utf _NET_WM_NAME // FIXME: utf _NET_WM_NAME
xcb_icccm_set_wm_name(Connection, VideoWindow, XCB_ATOM_STRING, 8, xcb_icccm_set_wm_name(Connection, VideoWindow, XCB_ATOM_STRING, 8, sizeof("softhdcuvid") - 1, "softhdcuvid");
sizeof("softhddevice") - 1, "softhddevice"); xcb_icccm_set_wm_icon_name(Connection, VideoWindow, XCB_ATOM_STRING, 8, sizeof("softhdcuvid") - 1, "softhdcuvid");
xcb_icccm_set_wm_icon_name(Connection, VideoWindow, XCB_ATOM_STRING, 8,
sizeof("softhddevice") - 1, "softhddevice");
#endif #endif
// define only available with xcb-utils-0.3.6 // define only available with xcb-utils-0.3.6
#ifdef XCB_NUM_WM_HINTS_ELEMENTS #ifdef XCB_NUM_WM_HINTS_ELEMENTS
// FIXME: utf _NET_WM_NAME // FIXME: utf _NET_WM_NAME
xcb_set_wm_name(Connection, VideoWindow, XCB_ATOM_STRING, xcb_set_wm_name(Connection, VideoWindow, XCB_ATOM_STRING, sizeof("softhdcuvid") - 1, "softhdcuvid");
sizeof("softhddevice") - 1, "softhddevice"); xcb_set_wm_icon_name(Connection, VideoWindow, XCB_ATOM_STRING, sizeof("softhdcuvid") - 1, "softhdcuvid");
xcb_set_wm_icon_name(Connection, VideoWindow, XCB_ATOM_STRING,
sizeof("softhddevice") - 1, "softhddevice");
#endif #endif
// FIXME: size hints // FIXME: size hints
@ -4893,22 +4884,20 @@ static void VideoCreateWindow(xcb_window_t parent, xcb_visualid_t visual,
xcb_intern_atom_reply(Connection, xcb_intern_atom(Connection, 0, xcb_intern_atom_reply(Connection, xcb_intern_atom(Connection, 0,
sizeof("WM_DELETE_WINDOW") - 1, "WM_DELETE_WINDOW"), sizeof("WM_DELETE_WINDOW") - 1, "WM_DELETE_WINDOW"),
NULL))) { NULL))) {
WmDeleteWindowAtom = reply->atom; WmDeleteWindowAtom = reply->atom;
free(reply); free(reply);
if ((reply = if ((reply =
xcb_intern_atom_reply(Connection, xcb_intern_atom(Connection, xcb_intern_atom_reply(Connection, xcb_intern_atom(Connection,
0, sizeof("WM_PROTOCOLS") - 1, "WM_PROTOCOLS"), 0, sizeof("WM_PROTOCOLS") - 1, "WM_PROTOCOLS"),
NULL))) { NULL))) {
#ifdef XCB_ICCCM_NUM_WM_SIZE_HINTS_ELEMENTS #ifdef XCB_ICCCM_NUM_WM_SIZE_HINTS_ELEMENTS
xcb_icccm_set_wm_protocols(Connection, VideoWindow, reply->atom, 1, xcb_icccm_set_wm_protocols(Connection, VideoWindow, reply->atom, 1,&WmDeleteWindowAtom);
&WmDeleteWindowAtom);
#endif #endif
#ifdef XCB_NUM_WM_HINTS_ELEMENTS #ifdef XCB_NUM_WM_HINTS_ELEMENTS
xcb_set_wm_protocols(Connection, reply->atom, VideoWindow, 1, xcb_set_wm_protocols(Connection, reply->atom, VideoWindow, 1,&WmDeleteWindowAtom);
&WmDeleteWindowAtom);
#endif #endif
free(reply); free(reply);
} }
} }
// //
// prepare fullscreen. // prepare fullscreen.
@ -4916,15 +4905,15 @@ static void VideoCreateWindow(xcb_window_t parent, xcb_visualid_t visual,
if ((reply = if ((reply =
xcb_intern_atom_reply(Connection, xcb_intern_atom(Connection, 0, xcb_intern_atom_reply(Connection, xcb_intern_atom(Connection, 0,
sizeof("_NET_WM_STATE") - 1, "_NET_WM_STATE"), NULL))) { sizeof("_NET_WM_STATE") - 1, "_NET_WM_STATE"), NULL))) {
NetWmState = reply->atom; NetWmState = reply->atom;
free(reply); free(reply);
} }
if ((reply = if ((reply =
xcb_intern_atom_reply(Connection, xcb_intern_atom(Connection, 0, xcb_intern_atom_reply(Connection, xcb_intern_atom(Connection, 0,
sizeof("_NET_WM_STATE_FULLSCREEN") - 1, sizeof("_NET_WM_STATE_FULLSCREEN") - 1,
"_NET_WM_STATE_FULLSCREEN"), NULL))) { "_NET_WM_STATE_FULLSCREEN"), NULL))) {
NetWmStateFullscreen = reply->atom; NetWmStateFullscreen = reply->atom;
free(reply); free(reply);
} }
xcb_map_window(Connection, VideoWindow); xcb_map_window(Connection, VideoWindow);
@ -4935,12 +4924,10 @@ static void VideoCreateWindow(xcb_window_t parent, xcb_visualid_t visual,
pixmap = xcb_generate_id(Connection); pixmap = xcb_generate_id(Connection);
xcb_create_pixmap(Connection, 1, pixmap, parent, 1, 1); xcb_create_pixmap(Connection, 1, pixmap, parent, 1, 1);
cursor = xcb_generate_id(Connection); cursor = xcb_generate_id(Connection);
xcb_create_cursor(Connection, cursor, pixmap, pixmap, 0, 0, 0, 0, 0, 0, 1, xcb_create_cursor(Connection, cursor, pixmap, pixmap, 0, 0, 0, 0, 0, 0, 1,1);
1);
values[0] = cursor; values[0] = cursor;
xcb_change_window_attributes(Connection, VideoWindow, XCB_CW_CURSOR, xcb_change_window_attributes(Connection, VideoWindow, XCB_CW_CURSOR, values);
values);
VideoCursorPixmap = pixmap; VideoCursorPixmap = pixmap;
VideoBlankCursor = cursor; VideoBlankCursor = cursor;
VideoBlankTick = 0; VideoBlankTick = 0;
@ -5509,10 +5496,12 @@ void VideoInit(const char *display_name)
VideoWindowHeight = screen->height_in_pixels; VideoWindowHeight = screen->height_in_pixels;
VideoWindowWidth = screen->width_in_pixels; VideoWindowWidth = screen->width_in_pixels;
//*********************************************************************************************** //***********************************************************************************************
// if (strcmp(":0.0",display_name) == 0) { #if DEBUG
// VideoWindowHeight = 1080; if (strcmp(":0.0",display_name) == 0) {
// VideoWindowWidth = 1920; VideoWindowHeight = 1080;
// } VideoWindowWidth = 1920;
}
#endif
} }
} }
if (!VideoWindowWidth) { if (!VideoWindowWidth) {