diff options
Diffstat (limited to 'src/gav1/decoder_settings.h')
-rw-r--r-- | src/gav1/decoder_settings.h | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/src/gav1/decoder_settings.h b/src/gav1/decoder_settings.h new file mode 100644 index 0000000..ab22a4d --- /dev/null +++ b/src/gav1/decoder_settings.h @@ -0,0 +1,144 @@ +/* + * Copyright 2019 The libgav1 Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef LIBGAV1_SRC_GAV1_DECODER_SETTINGS_H_ +#define LIBGAV1_SRC_GAV1_DECODER_SETTINGS_H_ + +#if defined(__cplusplus) +#include <cstdint> +#else +#include <stdint.h> +#endif // defined(__cplusplus) + +#include "gav1/frame_buffer.h" +#include "gav1/symbol_visibility.h" + +// All the declarations in this file are part of the public ABI. + +#if defined(__cplusplus) +extern "C" { +#endif + +// This callback is invoked by the decoder when it is done using an input frame +// buffer. When frame_parallel is set to true, this callback must not be +// nullptr. Otherwise, this callback is optional. +// +// |buffer_private_data| is the value passed in the EnqueueFrame() call. +typedef void (*Libgav1ReleaseInputBufferCallback)(void* callback_private_data, + void* buffer_private_data); + +typedef struct Libgav1DecoderSettings { + // Number of threads to use when decoding. Must be greater than 0. The library + // will create at most |threads| new threads. Defaults to 1 (no new threads + // will be created). + int threads; + // A boolean. Indicate to the decoder that frame parallel decoding is allowed. + // Note that this is just a request and the decoder will decide the number of + // frames to be decoded in parallel based on the video stream being decoded. + int frame_parallel; + // A boolean. In frame parallel mode, should Libgav1DecoderDequeueFrame wait + // until a enqueued frame is available for dequeueing. + // + // If frame_parallel is 0, this setting is ignored. + int blocking_dequeue; + // Called when the first sequence header or a sequence header with a + // different frame size (which includes bitdepth, monochrome, subsampling_x, + // subsampling_y, maximum frame width, or maximum frame height) is received. + Libgav1FrameBufferSizeChangedCallback on_frame_buffer_size_changed; + // Get frame buffer callback. + Libgav1GetFrameBufferCallback get_frame_buffer; + // Release frame buffer callback. + Libgav1ReleaseFrameBufferCallback release_frame_buffer; + // Release input frame buffer callback. + Libgav1ReleaseInputBufferCallback release_input_buffer; + // Passed as the private_data argument to the callbacks. + void* callback_private_data; + // A boolean. If set to 1, the decoder will output all the spatial and + // temporal layers. + int output_all_layers; + // Index of the operating point to decode. + int operating_point; + // Mask indicating the post processing filters that need to be applied to the + // reconstructed frame. Note this is an advanced setting and does not + // typically need to be changed. + // From LSB: + // Bit 0: Loop filter (deblocking filter). + // Bit 1: Cdef. + // Bit 2: SuperRes. + // Bit 3: Loop restoration. + // Bit 4: Film grain synthesis. + // All the bits other than the last 5 are ignored. + uint8_t post_filter_mask; +} Libgav1DecoderSettings; + +LIBGAV1_PUBLIC void Libgav1DecoderSettingsInitDefault( + Libgav1DecoderSettings* settings); + +#if defined(__cplusplus) +} // extern "C" + +namespace libgav1 { + +using ReleaseInputBufferCallback = Libgav1ReleaseInputBufferCallback; + +// Applications must populate this structure before creating a decoder instance. +struct DecoderSettings { + // Number of threads to use when decoding. Must be greater than 0. The library + // will create at most |threads| new threads. Defaults to 1 (no new threads + // will be created). + int threads = 1; + // Indicate to the decoder that frame parallel decoding is allowed. Note that + // this is just a request and the decoder will decide the number of frames to + // be decoded in parallel based on the video stream being decoded. + bool frame_parallel = false; + // In frame parallel mode, should DequeueFrame wait until a enqueued frame is + // available for dequeueing. + // + // If frame_parallel is false, this setting is ignored. + bool blocking_dequeue = false; + // Called when the first sequence header or a sequence header with a + // different frame size (which includes bitdepth, monochrome, subsampling_x, + // subsampling_y, maximum frame width, or maximum frame height) is received. + FrameBufferSizeChangedCallback on_frame_buffer_size_changed = nullptr; + // Get frame buffer callback. + GetFrameBufferCallback get_frame_buffer = nullptr; + // Release frame buffer callback. + ReleaseFrameBufferCallback release_frame_buffer = nullptr; + // Release input frame buffer callback. + ReleaseInputBufferCallback release_input_buffer = nullptr; + // Passed as the private_data argument to the callbacks. + void* callback_private_data = nullptr; + // If set to true, the decoder will output all the spatial and temporal + // layers. + bool output_all_layers = false; + // Index of the operating point to decode. + int operating_point = 0; + // Mask indicating the post processing filters that need to be applied to the + // reconstructed frame. Note this is an advanced setting and does not + // typically need to be changed. + // From LSB: + // Bit 0: Loop filter (deblocking filter). + // Bit 1: Cdef. + // Bit 2: SuperRes. + // Bit 3: Loop restoration. + // Bit 4: Film grain synthesis. + // All the bits other than the last 5 are ignored. + uint8_t post_filter_mask = 0x1f; +}; + +} // namespace libgav1 +#endif // defined(__cplusplus) +#endif // LIBGAV1_SRC_GAV1_DECODER_SETTINGS_H_ |