diff --git a/ijkmedia/ijkplayer/ff_ffplay.c b/ijkmedia/ijkplayer/ff_ffplay.c index 01ed6490264153c2c5dd5d24fb43584f02256941..0ffe1b7858ca979a8ab4eed6eb9d9f799c50c603 100644 --- a/ijkmedia/ijkplayer/ff_ffplay.c +++ b/ijkmedia/ijkplayer/ff_ffplay.c @@ -740,7 +740,7 @@ static void alloc_picture(FFPlayer *ffp) video_open(ffp, 0, vp); #endif - vp->bmp = SDL_VoutFFmpeg_CreateOverlay(vp->width, vp->height, + vp->bmp = SDL_Vout_CreateOverlay(vp->width, vp->height, ffp->overlay_format, ffp->vout); #ifdef FFP_MERGE diff --git a/ijkmedia/ijksdl/android/ijksdl_vout_android_nativewindow.c b/ijkmedia/ijksdl/android/ijksdl_vout_android_nativewindow.c index 6705e2df7c69e40d9f69245e12890d7d4512f5f7..256d4f9c51b706d80632fa9bf13400867e350cda 100644 --- a/ijkmedia/ijksdl/android/ijksdl_vout_android_nativewindow.c +++ b/ijkmedia/ijksdl/android/ijksdl_vout_android_nativewindow.c @@ -39,6 +39,19 @@ typedef struct SDL_Vout_Opaque { ANativeWindow *native_window; } SDL_Vout_Opaque; +static SDL_VoutOverlay *vout_create_overlay_l(int width, int height, Uint32 format, SDL_Vout *vout) +{ + return SDL_VoutFFmpeg_CreateOverlay(width, height, format, vout); +} + +static SDL_VoutOverlay *vout_create_overlay(int width, int height, Uint32 format, SDL_Vout *vout) +{ + SDL_LockMutex(vout->mutex); + SDL_VoutOverlay *overlay = vout_create_overlay_l(width, height, format, vout); + SDL_UnlockMutex(vout->mutex); + return overlay; +} + static void vout_free_l(SDL_Vout *vout) { if (!vout) @@ -94,6 +107,7 @@ SDL_Vout *SDL_VoutAndroid_CreateForANativeWindow() SDL_Vout_Opaque *opaque = vout->opaque; opaque->native_window = NULL; + vout->create_overlay = vout_create_overlay; vout->free_l = vout_free_l; vout->display_overlay = voud_display_overlay; diff --git a/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.h b/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.h index 7358cde073ea987e7c47772b0d11c516c054afa3..c773e7be9579193d44977053befb4101f96b33e0 100644 --- a/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.h +++ b/ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.h @@ -29,7 +29,7 @@ #include "ijksdl_inc_ffmpeg.h" // TODO: 9 alignment to speed up memcpy when display -SDL_VoutOverlay *SDL_VoutFFmpeg_CreateOverlay(int width, int height, Uint32 format, SDL_Vout *display); +SDL_VoutOverlay *SDL_VoutFFmpeg_CreateOverlay(int width, int height, Uint32 format, SDL_Vout *vout); int SDL_VoutFFmpeg_ConvertFrame( SDL_VoutOverlay *overlay, AVFrame *frame, diff --git a/ijkmedia/ijksdl/ijksdl_vout.c b/ijkmedia/ijksdl/ijksdl_vout.c index b3f5fc51ecca3a8f7b71f67decdf08ca62025bc5..de37c297e5756307da5332ce00faa63588301fa8 100644 --- a/ijkmedia/ijksdl/ijksdl_vout.c +++ b/ijkmedia/ijksdl/ijksdl_vout.c @@ -57,6 +57,15 @@ int SDL_VoutDisplayYUVOverlay(SDL_Vout *vout, SDL_VoutOverlay *overlay) return -1; } + +SDL_VoutOverlay *SDL_Vout_CreateOverlay(int width, int height, Uint32 format, SDL_Vout *vout) +{ + if (vout && vout->create_overlay) + return vout->create_overlay(width, height, format, vout); + + return NULL; +} + int SDL_VoutLockYUVOverlay(SDL_VoutOverlay *overlay) { if (overlay && overlay->lock) diff --git a/ijkmedia/ijksdl/ijksdl_vout.h b/ijkmedia/ijksdl/ijksdl_vout.h index d94d2434a724171591bcf69aa14310159847a623..61926db8bd1c8fe28b764b638526d8241912d2dc 100644 --- a/ijkmedia/ijksdl/ijksdl_vout.h +++ b/ijkmedia/ijksdl/ijksdl_vout.h @@ -50,6 +50,7 @@ typedef struct SDL_Vout { SDL_mutex *mutex; SDL_Vout_Opaque *opaque; + SDL_VoutOverlay *(*create_overlay)(int width, int height, Uint32 format, SDL_Vout *vout); void (*free_l)(SDL_Vout *vout); int (*display_overlay)(SDL_Vout *vout, SDL_VoutOverlay *overlay); } SDL_Vout; @@ -58,6 +59,7 @@ void SDL_VoutFree(SDL_Vout *vout); void SDL_VoutFreeP(SDL_Vout **pvout); int SDL_VoutDisplayYUVOverlay(SDL_Vout *vout, SDL_VoutOverlay *overlay); +SDL_VoutOverlay *SDL_Vout_CreateOverlay(int width, int height, Uint32 format, SDL_Vout *vout); int SDL_VoutLockYUVOverlay(SDL_VoutOverlay *overlay); int SDL_VoutUnlockYUVOverlay(SDL_VoutOverlay *overlay); void SDL_VoutFreeYUVOverlay(SDL_VoutOverlay *overlay);