blob: 989a550398f6ebfa672cc90f7fdbb72fa5d84863 [file] [log] [blame]
// Copyright 2018 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_DRIVERS_AMLOGIC_DECODER_VP9_UTILS_H_
#define SRC_MEDIA_DRIVERS_AMLOGIC_DECODER_VP9_UTILS_H_
#include <fuchsia/mediacodec/cpp/fidl.h>
#include <lib/fpromise/result.h>
#include <cstdint>
#include <vector>
namespace amlogic_decoder {
std::vector<uint32_t> TryParseSuperframeHeader(const uint8_t* data, uint32_t frame_size);
// like_secmem - Fill output_vector with the same data that would be generated by secmem TA's
// kSecmemCommandIdGetVp9HeaderSize. When false, output_vector will include only the AMLV
// headers and the frame data. When true, output_vector will contain zeroes after the last
// frame equal in size to the superframe header, if any. When false, the output_vector will be
// frame_size + output_vector->size() * 16.
void SplitSuperframe(const uint8_t* data, uint32_t frame_size, std::vector<uint8_t>* output_vector,
std::vector<uint32_t>* superframe_byte_sizes = nullptr,
bool like_secmem = false);
fpromise::result<bool, fuchsia::media::StreamError> IsVp9KeyFrame(uint8_t frame_header_byte_0);
const uint32_t kVp9AmlvHeaderSize = 16;
const uint32_t kVp9FrameMarker = 2;
const uint32_t kVp9FrameTypeKeyFrame = 0;
const uint32_t kVp9FrameTypeNonKeyFrame = 1;
} // namespace amlogic_decoder
#endif // SRC_MEDIA_DRIVERS_AMLOGIC_DECODER_VP9_UTILS_H_