Commit 908a76e8 by olly Committed by Oliver Woodman

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
parent 75bd4ebc
Showing with 11 additions and 27 deletions
...@@ -322,31 +322,18 @@ struct JniContext { ...@@ -322,31 +322,18 @@ struct JniContext {
JniStatusCode jni_status_code = kJniStatusOk; JniStatusCode jni_status_code = kJniStatusOk;
}; };
// Libgav1 frame buffer callbacks return 0 on success, -1 on failure. Libgav1StatusCode Libgav1GetFrameBuffer(void* callback_private_data,
int bitdepth,
int Libgav1OnFrameBufferSizeChanged(void* /*callback_private_data*/, libgav1::ImageFormat image_format,
int /*bitdepth*/, int width, int height, int left_border,
libgav1::ImageFormat /*image_format*/, int right_border, int top_border,
int /*width*/, int /*height*/, int bottom_border, int stride_alignment,
int /*left_border*/, int /*right_border*/, libgav1::FrameBuffer* frame_buffer) {
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) {
libgav1::FrameBufferInfo info; libgav1::FrameBufferInfo info;
Libgav1StatusCode status = libgav1::ComputeFrameBufferInfo( Libgav1StatusCode status = libgav1::ComputeFrameBufferInfo(
bitdepth, image_format, width, height, left_border, right_border, bitdepth, image_format, width, height, left_border, right_border,
top_border, bottom_border, stride_alignment, &info); top_border, bottom_border, stride_alignment, &info);
if (status != kLibgav1StatusOk) return -1; if (status != kLibgav1StatusOk) return status;
JniContext* const context = static_cast<JniContext*>(callback_private_data); JniContext* const context = static_cast<JniContext*>(callback_private_data);
JniFrameBuffer* jni_buffer; JniFrameBuffer* jni_buffer;
...@@ -354,7 +341,7 @@ int Libgav1GetFrameBuffer(void* callback_private_data, int bitdepth, ...@@ -354,7 +341,7 @@ int Libgav1GetFrameBuffer(void* callback_private_data, int bitdepth,
info.y_buffer_size, info.uv_buffer_size, &jni_buffer); info.y_buffer_size, info.uv_buffer_size, &jni_buffer);
if (context->jni_status_code != kJniStatusOk) { if (context->jni_status_code != kJniStatusOk) {
LOGE("%s", GetJniErrorMessage(context->jni_status_code)); LOGE("%s", GetJniErrorMessage(context->jni_status_code));
return -1; return kLibgav1StatusOutOfMemory;
} }
uint8_t* const y_buffer = jni_buffer->RawBuffer(0); uint8_t* const y_buffer = jni_buffer->RawBuffer(0);
...@@ -363,10 +350,8 @@ int Libgav1GetFrameBuffer(void* callback_private_data, int bitdepth, ...@@ -363,10 +350,8 @@ int Libgav1GetFrameBuffer(void* callback_private_data, int bitdepth,
uint8_t* const v_buffer = uint8_t* const v_buffer =
(info.uv_buffer_size != 0) ? jni_buffer->RawBuffer(2) : nullptr; (info.uv_buffer_size != 0) ? jni_buffer->RawBuffer(2) : nullptr;
status = return libgav1::SetFrameBuffer(&info, y_buffer, u_buffer, v_buffer,
libgav1::SetFrameBuffer(&info, y_buffer, u_buffer, v_buffer, jni_buffer->BufferPrivateData(), frame_buffer);
jni_buffer->BufferPrivateData(), frame_buffer);
return (status == kLibgav1StatusOk) ? 0 : -1;
} }
void Libgav1ReleaseFrameBuffer(void* callback_private_data, void Libgav1ReleaseFrameBuffer(void* callback_private_data,
...@@ -546,7 +531,6 @@ DECODER_FUNC(jlong, gav1Init, jint threads) { ...@@ -546,7 +531,6 @@ DECODER_FUNC(jlong, gav1Init, jint threads) {
libgav1::DecoderSettings settings; libgav1::DecoderSettings settings;
settings.threads = threads; settings.threads = threads;
settings.on_frame_buffer_size_changed = Libgav1OnFrameBufferSizeChanged;
settings.get_frame_buffer = Libgav1GetFrameBuffer; settings.get_frame_buffer = Libgav1GetFrameBuffer;
settings.release_frame_buffer = Libgav1ReleaseFrameBuffer; settings.release_frame_buffer = Libgav1ReleaseFrameBuffer;
settings.callback_private_data = context; settings.callback_private_data = context;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment