static SDL_AMediaCodecBufferProxy *SDL_VoutAndroid_obtainBufferProxy_l(SDL_Vout *vout, int acodec_serial, int buffer_index) { SDL_Vout_Opaque *opaque = vout->opaque; SDL_AMediaCodecBufferProxy *proxy = NULL; if (ISDL_Array__size(&opaque->overlay_pool) > 0) { proxy = ISDL_Array__pop_back(&opaque->overlay_pool); SDL_AMediaCodecBufferProxy_reset(proxy); } else { proxy = (SDL_AMediaCodecBufferProxy *)mallocz(sizeof(SDL_AMediaCodecBufferProxy)); if (!proxy) return NULL; SDL_AMediaCodecBufferProxy_init(proxy); ISDL_Array__push_back(&opaque->overlay_manager, proxy); } proxy->buffer_id = opaque->next_buffer_id++; proxy->acodec_serial = acodec_serial; proxy->buffer_index = buffer_index; AMCTRACE("%s: [%d] ++++++++ proxy %d: vout: %d idx: %d", __func__, proxy->buffer_id, proxy->acodec_serial, SDL_AMediaCodec_getSerial(opaque->acodec), proxy->buffer_index); return proxy; }
static SDL_AMediaCodecBufferProxy *SDL_VoutAndroid_obtainBufferProxy_l(SDL_Vout *vout, int acodec_serial, int buffer_index, SDL_AMediaCodecBufferInfo *buffer_info) { SDL_Vout_Opaque *opaque = vout->opaque; SDL_AMediaCodecBufferProxy *proxy = NULL; if (ISDL_Array__size(&opaque->overlay_pool) > 0) { proxy = ISDL_Array__pop_back(&opaque->overlay_pool); SDL_AMediaCodecBufferProxy_reset(proxy); } else { proxy = (SDL_AMediaCodecBufferProxy *)mallocz(sizeof(SDL_AMediaCodecBufferProxy)); if (!proxy) return NULL; SDL_AMediaCodecBufferProxy_init(proxy); ISDL_Array__push_back(&opaque->overlay_manager, proxy); } proxy->buffer_id = opaque->next_buffer_id++; proxy->acodec_serial = acodec_serial; proxy->buffer_index = buffer_index; proxy->buffer_info = *buffer_info; AMCTRACE("%s: [%d] ++++++++ proxy %d: vout: %d idx: %d fake: %s", __func__, proxy->buffer_id, proxy->acodec_serial, SDL_AMediaCodec_getSerial(opaque->acodec), proxy->buffer_index, (proxy->buffer_info.flags & AMEDIACODEC__BUFFER_FLAG_FAKE_FRAME) ? "YES" : "NO"); return proxy; }