From c95ed7d18cab0c650f66e89abe53562f83905440 Mon Sep 17 00:00:00 2001 From: olly Date: Wed, 19 Feb 2020 16:09:10 +0000 Subject: [PATCH] Change libgav1's frame buffer callback API. 1. Have frame buffer callbacks return Libgav1StatusCode instead of int. The 0 (success), -1 (failure) return value convention is less obvious. Note: The callers of frame buffer callbacks, BufferPool::OnFrameBufferSizeChanged() and YuvBuffer::Realloc(), currently return bool, so more work is needed to propagate the frame buffer callbacks' Libgav1StatusCode return value to the Decoder API. 2. Allow the FrameBufferSizeChangedCallback to be omitted if the frame buffer size information is not useful to the application. 3. Remove the old (version 1) frame buffer callback API. Remove the frame buffer callback adaptor. frame_buffer2.h is renamed frame_buffer.h. Libgav1FrameBuffer2 is renamed Libgav1FrameBuffer. GetFrameBufferCallback2 and ReleaseFrameBufferCallback2 are renamed GetFrameBufferCallback and ReleaseFrameBufferCallback. PiperOrigin-RevId: 295971183 --- extensions/av1/src/main/jni/gav1_jni.cc | 38 +++++++------------------ 1 file changed, 11 insertions(+), 27 deletions(-) diff --git a/extensions/av1/src/main/jni/gav1_jni.cc b/extensions/av1/src/main/jni/gav1_jni.cc index 4215fe8890..19ebbce93f 100644 --- a/extensions/av1/src/main/jni/gav1_jni.cc +++ b/extensions/av1/src/main/jni/gav1_jni.cc @@ -322,31 +322,18 @@ struct JniContext { JniStatusCode jni_status_code = kJniStatusOk; }; -// Libgav1 frame buffer callbacks return 0 on success, -1 on failure. - -int Libgav1OnFrameBufferSizeChanged(void* /*callback_private_data*/, - int /*bitdepth*/, - libgav1::ImageFormat /*image_format*/, - int /*width*/, int /*height*/, - int /*left_border*/, int /*right_border*/, - int /*top_border*/, int /*bottom_border*/, - int /*stride_alignment*/) { - // The libgav1 decoder calls this callback to provide information on the - // subsequent frames in the video. JniBufferManager ignores this information. - return 0; -} - -int Libgav1GetFrameBuffer(void* callback_private_data, int bitdepth, - libgav1::ImageFormat image_format, int width, - int height, int left_border, int right_border, - int top_border, int bottom_border, - int stride_alignment, - libgav1::FrameBuffer2* frame_buffer) { +Libgav1StatusCode Libgav1GetFrameBuffer(void* callback_private_data, + int bitdepth, + libgav1::ImageFormat image_format, + int width, int height, int left_border, + int right_border, int top_border, + int bottom_border, int stride_alignment, + libgav1::FrameBuffer* frame_buffer) { libgav1::FrameBufferInfo info; Libgav1StatusCode status = libgav1::ComputeFrameBufferInfo( bitdepth, image_format, width, height, left_border, right_border, top_border, bottom_border, stride_alignment, &info); - if (status != kLibgav1StatusOk) return -1; + if (status != kLibgav1StatusOk) return status; JniContext* const context = static_cast(callback_private_data); JniFrameBuffer* jni_buffer; @@ -354,7 +341,7 @@ int Libgav1GetFrameBuffer(void* callback_private_data, int bitdepth, info.y_buffer_size, info.uv_buffer_size, &jni_buffer); if (context->jni_status_code != kJniStatusOk) { LOGE("%s", GetJniErrorMessage(context->jni_status_code)); - return -1; + return kLibgav1StatusOutOfMemory; } uint8_t* const y_buffer = jni_buffer->RawBuffer(0); @@ -363,10 +350,8 @@ int Libgav1GetFrameBuffer(void* callback_private_data, int bitdepth, uint8_t* const v_buffer = (info.uv_buffer_size != 0) ? jni_buffer->RawBuffer(2) : nullptr; - status = - libgav1::SetFrameBuffer(&info, y_buffer, u_buffer, v_buffer, - jni_buffer->BufferPrivateData(), frame_buffer); - return (status == kLibgav1StatusOk) ? 0 : -1; + return libgav1::SetFrameBuffer(&info, y_buffer, u_buffer, v_buffer, + jni_buffer->BufferPrivateData(), frame_buffer); } void Libgav1ReleaseFrameBuffer(void* callback_private_data, @@ -546,7 +531,6 @@ DECODER_FUNC(jlong, gav1Init, jint threads) { libgav1::DecoderSettings settings; settings.threads = threads; - settings.on_frame_buffer_size_changed = Libgav1OnFrameBufferSizeChanged; settings.get_frame_buffer = Libgav1GetFrameBuffer; settings.release_frame_buffer = Libgav1ReleaseFrameBuffer; settings.callback_private_data = context;