static void SDL_VoutAndroid_SetNativeWindow_l(SDL_Vout *vout, ANativeWindow *native_window) { AMCTRACE("%s(%p, %p)\n", __func__, vout, native_window); SDL_Vout_Opaque *opaque = vout->opaque; if (opaque->native_window == native_window) { if (native_window == NULL) { // always invalidate buffers, if native_window is changed SDL_VoutAndroid_invalidateAllBuffers_l(vout); } return; } else IJK_EGL_terminate(opaque->egl); SDL_VoutAndroid_invalidateAllBuffers_l(vout); if (opaque->native_window) ANativeWindow_release(opaque->native_window); if (native_window) ANativeWindow_acquire(native_window); opaque->native_window = native_window; opaque->null_native_window_warned = 0; }
static void SDL_VoutAndroid_setAMediaCodec_l(SDL_Vout *vout, SDL_AMediaCodec *acodec) { AMCTRACE("%s(%p)\n", __func__, acodec); SDL_Vout_Opaque *opaque = vout->opaque; if (opaque->acodec == acodec) return; SDL_VoutAndroid_invalidateAllBuffers_l(vout); SDL_AMediaCodec_decreaseReferenceP(&opaque->acodec); opaque->acodec = acodec; if (opaque->acodec) SDL_AMediaCodec_increaseReference(opaque->acodec); }
void SDL_VoutAndroid_invalidateAllBuffers(SDL_Vout *vout) { SDL_LockMutex(vout->mutex); SDL_VoutAndroid_invalidateAllBuffers_l(vout); SDL_UnlockMutex(vout->mutex); }