|
|
@@ -8,7 +8,7 @@
|
|
|
#endif
|
|
|
|
|
|
#ifndef RVC_DEFAULT_DELAY_TIME
|
|
|
-#define RVC_DEFAULT_DELAY_TIME 1
|
|
|
+#define RVC_DEFAULT_DELAY_TIME 10
|
|
|
#endif
|
|
|
|
|
|
|
|
|
@@ -20,7 +20,7 @@ VideoRenderImpl::VideoRenderImpl(videorender_callback_t* pCallback)
|
|
|
memcpy(&m_callback, pCallback, sizeof(videorender_callback_t));
|
|
|
|
|
|
m_refresh_flag = false;
|
|
|
- m_bmoveable = false;
|
|
|
+ m_bmoveable = true;
|
|
|
m_refresh_thread = NULL;
|
|
|
|
|
|
m_cx = SDL_WINDOWPOS_UNDEFINED;
|
|
|
@@ -28,7 +28,7 @@ VideoRenderImpl::VideoRenderImpl(videorender_callback_t* pCallback)
|
|
|
m_width = 0;
|
|
|
m_height = 0;
|
|
|
m_videoformat = VIDEO_FORMAT_RGB24;
|
|
|
- m_flags = SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS | SDL_WINDOW_HIDDEN | SDL_WINDOW_ALWAYS_ON_TOP | SDL_WINDOW_SKIP_TASKBAR | SDL_WINDOW_POPUP_MENU;
|
|
|
+ m_flags = SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS | SDL_WINDOW_ALWAYS_ON_TOP;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -74,8 +74,6 @@ int VideoRenderImpl::SetWindowProperty(videorender_param_t* tparam)
|
|
|
m_videoheight = tparam->uvideoheight;
|
|
|
}
|
|
|
|
|
|
- m_flags |= tparam->uwinflags;
|
|
|
-
|
|
|
m_videoformat = tparam->ivideoformat;
|
|
|
|
|
|
iRet = 0;
|
|
|
@@ -86,7 +84,6 @@ int VideoRenderImpl::SetWindowProperty(videorender_param_t* tparam)
|
|
|
SDL_PixelFormatEnum VideoRenderImpl::GetPixelFormat()
|
|
|
{
|
|
|
SDL_PixelFormatEnum eType = SDL_PIXELFORMAT_BGR24;
|
|
|
- //SDL_PixelFormatEnum eType = SDL_PIXELFORMAT_BGR888;
|
|
|
if (VIDEO_FORMAT_I420 == m_videoformat){
|
|
|
eType = SDL_PIXELFORMAT_IYUV;
|
|
|
}
|
|
|
@@ -107,7 +104,7 @@ int VideoRenderImpl::VideoRenderSetParam(videorender_param_t* tparam)
|
|
|
// return -1;
|
|
|
//}
|
|
|
|
|
|
- SDL_SetHint("SDL_HINT_RENDER_SCALE_QUALITY", "1");
|
|
|
+ SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1");
|
|
|
|
|
|
m_sdl_window = SDL_CreateWindow(
|
|
|
"rvc video", // window title
|
|
|
@@ -141,6 +138,7 @@ int VideoRenderImpl::VideoRenderSetParam(videorender_param_t* tparam)
|
|
|
if (m_width > display_mode.w) {
|
|
|
m_width = display_mode.w;
|
|
|
}
|
|
|
+
|
|
|
if (m_height > display_mode.h) {
|
|
|
m_height = display_mode.h;
|
|
|
}
|
|
|
@@ -155,6 +153,7 @@ int VideoRenderImpl::VideoRenderSetParam(videorender_param_t* tparam)
|
|
|
VideoRenderDestroy();
|
|
|
return -5;
|
|
|
}
|
|
|
+
|
|
|
static bool blog = true;
|
|
|
/* Print the list of the available renderers*/
|
|
|
if (blog) {
|
|
|
@@ -169,10 +168,10 @@ int VideoRenderImpl::VideoRenderSetParam(videorender_param_t* tparam)
|
|
|
if (blog) {
|
|
|
RenderLog(RENDER_LOG_DEBUG, " %2d: %s", i, rend_info->name);
|
|
|
}
|
|
|
- //m_callback->Debug(" SDL_RENDERER_TARGETTEXTURE [%c]", (rend_info->flags & SDL_RENDERER_TARGETTEXTURE) ? 'X' : ' ');
|
|
|
- //m_callback->Debug(" SDL_RENDERER_SOFTWARE [%c]", (rend_info->flags & SDL_RENDERER_SOFTWARE) ? 'X' : ' ');
|
|
|
- //m_callback->Debug(" SDL_RENDERER_ACCELERATED [%c]", (rend_info->flags & SDL_RENDERER_ACCELERATED) ? 'X' : ' ');
|
|
|
- //m_callback->Debug(" SDL_RENDERER_PRESENTVSYNC [%c]", (rend_info->flags & SDL_RENDERER_PRESENTVSYNC) ? 'X' : ' ');
|
|
|
+ //RenderLog(RENDER_LOG_DEBUG," SDL_RENDERER_TARGETTEXTURE [%c]", (rend_info->flags & SDL_RENDERER_TARGETTEXTURE) ? 'X' : ' ');
|
|
|
+ //RenderLog(RENDER_LOG_DEBUG," SDL_RENDERER_SOFTWARE [%c]", (rend_info->flags & SDL_RENDERER_SOFTWARE) ? 'X' : ' ');
|
|
|
+ //RenderLog(RENDER_LOG_DEBUG," SDL_RENDERER_ACCELERATED [%c]", (rend_info->flags & SDL_RENDERER_ACCELERATED) ? 'X' : ' ');
|
|
|
+ //RenderLog(RENDER_LOG_DEBUG," SDL_RENDERER_PRESENTVSYNC [%c]", (rend_info->flags & SDL_RENDERER_PRESENTVSYNC) ? 'X' : ' ');
|
|
|
}
|
|
|
}
|
|
|
free(rend_info);
|
|
|
@@ -191,8 +190,7 @@ int VideoRenderImpl::VideoRenderSetParam(videorender_param_t* tparam)
|
|
|
SDL_RENDERER_TARGETTEXTURE |
|
|
|
SDL_RENDERER_SOFTWARE);
|
|
|
|
|
|
- if (m_renderer == NULL)
|
|
|
- {
|
|
|
+ if (m_renderer == NULL){
|
|
|
RenderLog(RENDER_LOG_ERROR, "RENDER: (SDL2) Couldn't get a software renderer: %s", SDL_GetError());
|
|
|
RenderLog(RENDER_LOG_ERROR, "RENDER: (SDL2) giving up...");
|
|
|
VideoRenderDestroy();
|
|
|
@@ -247,14 +245,13 @@ int VideoRenderImpl::VideoRenderSetParam(videorender_param_t* tparam)
|
|
|
static int refresh_video(void *opaque)
|
|
|
{
|
|
|
VideoRenderImpl* pImpl = (VideoRenderImpl*)opaque;
|
|
|
- pImpl->RenderLog(RENDER_LOG_DEBUG, "function enter %s:%d", __FUNCTION__, __LINE__);
|
|
|
+
|
|
|
while (pImpl->GetReFreshFlag()) {
|
|
|
SDL_Event event;
|
|
|
event.type = REFRESH_EVENT;
|
|
|
SDL_PushEvent(&event);
|
|
|
SDL_Delay(RVC_DEFAULT_DELAY_TIME);
|
|
|
}
|
|
|
- pImpl->RenderLog(RENDER_LOG_DEBUG, "function leave %s:%d", __FUNCTION__, __LINE__);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -269,6 +266,11 @@ static SDL_HitTestResult SDLCALL SDL_HitTestCallback(SDL_Window *win, const SDL_
|
|
|
VideoRenderImpl* pImpl = (VideoRenderImpl*)data;
|
|
|
|
|
|
SDL_GetWindowSize(win, &w, &h);
|
|
|
+
|
|
|
+ pImpl->RenderLog(RENDER_LOG_DEBUG, "win = 0x%08x, current windows is 0x%08x.", win, pImpl->GetRenderWindow());
|
|
|
+ pImpl->RenderLog(RENDER_LOG_DEBUG, "SDL_GetWindowSize area->x = %d, area->y = %d, w = %d, h = %d.", area->x, area->y, w, h);
|
|
|
+
|
|
|
+ return SDL_HITTEST_DRAGGABLE;
|
|
|
|
|
|
if (area->x < RESIZE_BORDER) {
|
|
|
if (area->y < RESIZE_BORDER) {
|
|
|
@@ -281,7 +283,8 @@ static SDL_HitTestResult SDLCALL SDL_HitTestCallback(SDL_Window *win, const SDL_
|
|
|
pImpl->RenderLog(RENDER_LOG_DEBUG, "SDL_HITTEST_RESIZE_LEFT");
|
|
|
return SDL_HITTEST_RESIZE_LEFT;
|
|
|
}
|
|
|
- } else if (area->x >= (w-RESIZE_BORDER)) {
|
|
|
+ }
|
|
|
+ else if (area->x >= (w-RESIZE_BORDER)) {
|
|
|
if (area->y < RESIZE_BORDER) {
|
|
|
pImpl->RenderLog(RENDER_LOG_DEBUG, "SDL_HITTEST_RESIZE_TOPRIGHT");
|
|
|
return SDL_HITTEST_RESIZE_TOPRIGHT;
|
|
|
@@ -292,17 +295,19 @@ static SDL_HitTestResult SDLCALL SDL_HitTestCallback(SDL_Window *win, const SDL_
|
|
|
pImpl->RenderLog(RENDER_LOG_DEBUG, "SDL_HITTEST_RESIZE_RIGHT");
|
|
|
return SDL_HITTEST_RESIZE_RIGHT;
|
|
|
}
|
|
|
- } else if (area->y >= (h-RESIZE_BORDER)) {
|
|
|
+ }
|
|
|
+ else if (area->y >= (h-RESIZE_BORDER)) {
|
|
|
pImpl->RenderLog(RENDER_LOG_DEBUG, "SDL_HITTEST_RESIZE_BOTTOM");
|
|
|
return SDL_HITTEST_RESIZE_BOTTOM;
|
|
|
- } else if (area->y < RESIZE_BORDER) {
|
|
|
+ }
|
|
|
+ else if (area->y < RESIZE_BORDER) {
|
|
|
pImpl->RenderLog(RENDER_LOG_DEBUG, "SDL_HITTEST_RESIZE_TOP");
|
|
|
return SDL_HITTEST_RESIZE_TOP;
|
|
|
- } else if (area->y < DRAGGABLE_TITLE) {
|
|
|
+ }
|
|
|
+ else if (area->y < DRAGGABLE_TITLE) {
|
|
|
pImpl->RenderLog(RENDER_LOG_DEBUG, "SDL_HITTEST_DRAGGABLE");
|
|
|
return SDL_HITTEST_DRAGGABLE;
|
|
|
}
|
|
|
- return SDL_HITTEST_NORMAL;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -316,8 +321,16 @@ int VideoRenderImpl::StartVideoRender()
|
|
|
m_refresh_flag = true;
|
|
|
m_refresh_thread = SDL_CreateThread(refresh_video,"refresh video thread", this);
|
|
|
RenderLog(RENDER_LOG_DEBUG, "%s:%d m_refresh_thread is 0x%08x.",__FUNCTION__, __LINE__, m_refresh_thread);
|
|
|
+ if (NULL == m_refresh_thread) {
|
|
|
+ RenderLog(RENDER_LOG_ERROR, "SDL_Create refresh video thread failed: %s.", SDL_GetError());
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
if (m_bmoveable){
|
|
|
- SDL_SetWindowHitTest(m_sdl_window, SDL_HitTestCallback, this);
|
|
|
+ if (0 != SDL_SetWindowHitTest(m_sdl_window, SDL_HitTestCallback, this)) {
|
|
|
+ RenderLog(RENDER_LOG_ERROR, "SDL_SetWindowHitTest failed: %s.", SDL_GetError());
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
@@ -413,6 +426,20 @@ int VideoRenderImpl::RenderVideoFrame(video_frame* pframe, RVC_RendererFlip eFli
|
|
|
|
|
|
SDL_Delay(RVC_DEFAULT_DELAY_TIME);
|
|
|
}
|
|
|
+ else if(SDL_MOUSEBUTTONDOWN == event.type)
|
|
|
+ {
|
|
|
+ RenderLog(RENDER_LOG_DEBUG, "Mouse button pressed down.");
|
|
|
+ RenderLog(RENDER_LOG_DEBUG, " - Mouse position: (%d, %d)", event.button.x, event.button.y);
|
|
|
+ RenderLog(RENDER_LOG_DEBUG, " - Mouse button: %d.", event.button.button);
|
|
|
+ }
|
|
|
+ else if (SDL_MOUSEBUTTONUP == event.type) {
|
|
|
+ RenderLog(RENDER_LOG_DEBUG, "Mouse button released.");
|
|
|
+ RenderLog(RENDER_LOG_DEBUG, " - Mouse position: (%d, %d)", event.button.x, event.button.y);
|
|
|
+ RenderLog(RENDER_LOG_DEBUG, " - Mouse button: %d", event.button.button);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ //RenderLog(RENDER_LOG_DEBUG, "SDL_WaitEvent type is %d.", event.type);
|
|
|
+ }
|
|
|
|
|
|
iret = 0;
|
|
|
|