blob: fbb52ada6aad970573d054a52e29e085f7942760 [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_MEDIA_CODEC_CODECS_SW_CVSD_CODEC_ADAPTER_CVSD_DECODER_H_
#define SRC_MEDIA_CODEC_CODECS_SW_CVSD_CODEC_ADAPTER_CVSD_DECODER_H_
#include <lib/fit/defer.h>
#include <lib/media/codec_impl/codec_adapter.h>
#include "codec_adapter_cvsd.h"
#include "codec_adapter_sw_impl.h"
class CodecAdapterCvsdDecoder : public CodecAdapterSWImpl<CvsdParams> {
public:
explicit CodecAdapterCvsdDecoder(std::mutex& lock, CodecAdapterEvents* codec_adapter_events);
~CodecAdapterCvsdDecoder() = default;
protected:
std::pair<fuchsia::media::FormatDetails, size_t> OutputFormatDetails() override;
CodecAdapterCvsdDecoder::InputLoopStatus ProcessFormatDetails(
const fuchsia::media::FormatDetails& format_details) override;
int ProcessInputChunkData(const uint8_t* input_data, size_t input_data_size,
uint8_t* output_buffer, size_t output_buffer_size) override;
// The minimum frame size (number of input data bytes that can be processed) is 1 byte.
// For convenience and intuition, we enforce the same for `ChunkInputStream::InputBlock`.
size_t InputChunkSize() override { return kInputFrameSize; }
// Buffer size required to process one input chunk.
size_t MinOutputBufferSize() override { return kOutputFrameSize; }
fuchsia::sysmem::BufferCollectionConstraints BufferCollectionConstraints(CodecPort port) override;
TimestampExtrapolator CreateTimestampExtrapolator(
const fuchsia::media::FormatDetails& format_details) override {
return TimestampExtrapolator();
}
private:
// CVSD decoder performs 1-16 decompression of data, where each 1 bit
// of input data is decoded into 2 bytes (16 bits). Therefore, minimum input
// sample data size is 1 byte.
static constexpr uint32_t kInputFrameSize = 1;
// Number of output bytes from processing kInputFrameSize of input data.
// 1-16 decompression means output frame size is 1 * 16 = 16 bytes.
static constexpr uint32_t kOutputFrameSize = 16;
};
#endif // SRC_MEDIA_CODEC_CODECS_SW_CVSD_CODEC_ADAPTER_CVSD_DECODER_H_