提交 08c2b203 编写于 作者: Z Zhang Rui

ijksdl: simplify SDL_Vout and SDL_Aout allocation

上级 239ceb97
......@@ -55,19 +55,12 @@ void aout_close_audio(SDL_Aout *aout)
SDL_Aout *SDL_AoutAndroid_CreateForAudioTrack(JNIEnv *env)
{
SDL_Aout *aout = SDL_Aout_CreateInternal();
SDL_Aout *aout = SDL_Aout_CreateInternal(sizeof(SDL_Aout_Opaque));
if (!aout)
return NULL;
SDL_Aout_Opaque *opaque = malloc(sizeof(SDL_Aout_Opaque));
if (!opaque)
{
aout_free_l(aout);
return NULL;
}
memset(opaque, 0, sizeof(SDL_Aout_Opaque));
SDL_Aout_Opaque *opaque = aout->opaque;
aout->opaque = opaque;
aout->free_l = aout_free_l;
aout->open_audio = aout_open_audio;
aout->play_audio = aout_play_audio;
......
......@@ -27,15 +27,23 @@
#include "ijksdl_mutex.h"
#include "ijksdl_aout.h"
inline static SDL_Aout *SDL_Aout_CreateInternal()
inline static SDL_Aout *SDL_Aout_CreateInternal(size_t opaque_size)
{
SDL_Aout *aout = (SDL_Aout*) malloc(sizeof(SDL_Aout));
if (!aout)
return NULL;
memset(aout, 0, sizeof(SDL_Aout));
aout->opaque = malloc(opaque_size);
if (!aout->opaque) {
free(aout);
return NULL;
}
memset(aout->opaque, 0, sizeof(aout->opaque));
aout->mutex = SDL_CreateMutex();
if (aout->mutex == NULL) {
free(aout->opaque);
free(aout);
return NULL;
}
......@@ -52,6 +60,7 @@ inline static void SDL_Aout_FreeInternal(SDL_Aout *aout)
SDL_DestroyMutex(aout->mutex);
}
free(aout->opaque);
memset(aout, 0, sizeof(SDL_Aout));
free(aout);
}
......
......@@ -49,8 +49,6 @@ static void vout_free_l(SDL_Vout *vout)
if (opaque->native_window) {
ANativeWindow_release(opaque->native_window);
}
free(vout->opaque);
vout->opaque = NULL;
}
SDL_Vout_FreeInternal(vout);
......@@ -104,23 +102,14 @@ static int voud_display_overlay(SDL_Vout *vout, SDL_VoutOverlay *overlay)
SDL_Vout *SDL_VoutAndroid_CreateForANativeWindow()
{
SDL_Vout *vout = SDL_Vout_CreateInternal();
SDL_Vout *vout = SDL_Vout_CreateInternal(sizeof(SDL_Vout_Opaque));
if (!vout)
return NULL;
SDL_Vout_Opaque *opaque = malloc(sizeof(SDL_Vout_Opaque));
if (!opaque)
{
vout_free_l(vout);
return NULL;
}
memset(opaque, 0, sizeof(SDL_Vout_Opaque));
SDL_Vout_Opaque *opaque = vout->opaque;
opaque->dummy_surface_opaque.vout = vout;
opaque->dummy_surface.opaque = &opaque->dummy_surface_opaque;
vout->opaque = opaque;
vout->free_l = vout_free_l;
vout->set_video_mode = vout_set_video_mode;
vout->display_overlay = voud_display_overlay;
......
......@@ -26,15 +26,23 @@
#include "ijksdl_vout.h"
inline static SDL_Vout *SDL_Vout_CreateInternal()
inline static SDL_Vout *SDL_Vout_CreateInternal(size_t opaque_size)
{
SDL_Vout *vout = (SDL_Vout*) malloc(sizeof(SDL_Vout));
if (!vout)
return NULL;
memset(vout, 0, sizeof(SDL_Vout));
vout->opaque = malloc(opaque_size);
if (!vout->opaque) {
free(vout);
return NULL;
}
memset(vout->opaque, 0, sizeof(vout->opaque));
vout->mutex = SDL_CreateMutex();
if (vout->mutex == NULL) {
free(vout->opaque);
free(vout);
return NULL;
}
......@@ -51,6 +59,7 @@ inline static void SDL_Vout_FreeInternal(SDL_Vout *vout)
SDL_DestroyMutex(vout->mutex);
}
free(vout->opaque);
memset(vout, 0, sizeof(SDL_Vout));
free(vout);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册