Vidplayer should lock SDL surfaces while accessing the pixel data directly
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2838 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
@@ -529,8 +529,6 @@ dukv_RenderFrame (THIS_PTR)
|
|||||||
default:
|
default:
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
if (!This->audio_synced)
|
|
||||||
This->callbacks.SetTimer (This, (uint32) (1000.0f / DUCK_GENERAL_FPS));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char*
|
static const char*
|
||||||
@@ -701,7 +699,12 @@ dukv_DecodeNext (THIS_PTR)
|
|||||||
|
|
||||||
dukv->iframe++;
|
dukv->iframe++;
|
||||||
|
|
||||||
|
This->callbacks.BeginFrame (This);
|
||||||
dukv_RenderFrame (This);
|
dukv_RenderFrame (This);
|
||||||
|
This->callbacks.EndFrame (This);
|
||||||
|
|
||||||
|
if (!This->audio_synced)
|
||||||
|
This->callbacks.SetTimer (This, (uint32) (1000.0f / DUCK_GENERAL_FPS));
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,9 @@ typedef struct tfb_videodecoderfunc
|
|||||||
// from the player
|
// from the player
|
||||||
typedef struct tfb_videocallbacks
|
typedef struct tfb_videocallbacks
|
||||||
{
|
{
|
||||||
// any decoder calls this
|
// any decoder calls these
|
||||||
|
void (* BeginFrame) (THIS_PTR);
|
||||||
|
void (* EndFrame) (THIS_PTR);
|
||||||
void* (* GetCanvasLine) (THIS_PTR, uint32 line);
|
void* (* GetCanvasLine) (THIS_PTR, uint32 line);
|
||||||
// non-audio-driven decoders call this to figure out
|
// non-audio-driven decoders call this to figure out
|
||||||
// when the next frame should be drawn
|
// when the next frame should be drawn
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
#include "libs/log.h"
|
#include "libs/log.h"
|
||||||
|
|
||||||
// video callbacks
|
// video callbacks
|
||||||
|
static void vp_BeginFrame (TFB_VideoDecoder*);
|
||||||
|
static void vp_EndFrame (TFB_VideoDecoder*);
|
||||||
static void* vp_GetCanvasLine (TFB_VideoDecoder*, uint32 line);
|
static void* vp_GetCanvasLine (TFB_VideoDecoder*, uint32 line);
|
||||||
static uint32 vp_GetTicks (TFB_VideoDecoder*);
|
static uint32 vp_GetTicks (TFB_VideoDecoder*);
|
||||||
static bool vp_SetTimer (TFB_VideoDecoder*, uint32 msecs);
|
static bool vp_SetTimer (TFB_VideoDecoder*, uint32 msecs);
|
||||||
@@ -32,6 +34,8 @@ static bool vp_SetTimer (TFB_VideoDecoder*, uint32 msecs);
|
|||||||
|
|
||||||
TFB_VideoCallbacks vp_DecoderCBs =
|
TFB_VideoCallbacks vp_DecoderCBs =
|
||||||
{
|
{
|
||||||
|
vp_BeginFrame,
|
||||||
|
vp_EndFrame,
|
||||||
vp_GetCanvasLine,
|
vp_GetCanvasLine,
|
||||||
vp_GetTicks,
|
vp_GetTicks,
|
||||||
vp_SetTimer
|
vp_SetTimer
|
||||||
@@ -472,6 +476,24 @@ TFB_VideoInput (VIDEO_REF VidRef)
|
|||||||
DoInput (&vis, TRUE);
|
DoInput (&vis, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
vp_BeginFrame (TFB_VideoDecoder* decoder)
|
||||||
|
{
|
||||||
|
TFB_VideoClip* vid = (TFB_VideoClip*) decoder->data;
|
||||||
|
|
||||||
|
if (vid)
|
||||||
|
TFB_DrawCanvas_Lock (vid->frame->NormalImg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
vp_EndFrame (TFB_VideoDecoder* decoder)
|
||||||
|
{
|
||||||
|
TFB_VideoClip* vid = (TFB_VideoClip*) decoder->data;
|
||||||
|
|
||||||
|
if (vid)
|
||||||
|
TFB_DrawCanvas_Unlock (vid->frame->NormalImg);
|
||||||
|
}
|
||||||
|
|
||||||
static void*
|
static void*
|
||||||
vp_GetCanvasLine (TFB_VideoDecoder* decoder, uint32 line)
|
vp_GetCanvasLine (TFB_VideoDecoder* decoder, uint32 line)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user