* Copyright (C) 2023-2026 Huawei Device Co., Ltd.
* 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 STREAM_PARSER_H
#define STREAM_PARSER_H
#include <cstdint>
namespace OHOS {
namespace Media {
namespace Plugins {
enum VideoStreamType {
HEVC = 0,
VVC = 1,
AVC = 2,
};
struct PacketConvertToBufferInfo {
const uint8_t *srcData {nullptr};
int32_t srcDataSize {0};
uint8_t *outBuffer {nullptr};
int32_t outBufferSize {0};
int32_t &outDataSize;
uint8_t *sideData {nullptr};
size_t sideDataSize {0};
explicit PacketConvertToBufferInfo(int32_t &outSizeRef) : outDataSize(outSizeRef) {}
};
struct HevcParseFormat {
bool isHdrVivid = false;
bool isHdr10Plus = false;
int32_t colorRange = 0;
uint8_t colorPrimaries = 0x02;
uint8_t colorTransfer = 0x02;
uint8_t colorMatrixCoeff = 0x02;
uint8_t profile = 0;
uint8_t level = 0;
uint32_t chromaLocation = 0;
uint32_t picWidInLumaSamples = 0;
uint32_t picHetInLumaSamples = 0;
};
class StreamParser {
public:
explicit StreamParser() = default;
virtual ~StreamParser() = default;
virtual void ParseExtraData(const uint8_t *sample, int32_t size,
uint8_t **extraDataBuf, int32_t *extraDataSize) = 0;
virtual bool ConvertExtraDataToAnnexb(uint8_t *extraData, int32_t extraDataSize) = 0;
virtual bool ConvertPacketToAnnexb(uint8_t **hvccPacket, int32_t &hvccPacketSize, uint8_t *sideData,
size_t sideDataSize, bool isExtradata) = 0;
virtual bool ConvertPacketToAnnexb(const PacketConvertToBufferInfo &convertInfo) = 0;
virtual void ParseAnnexbExtraData(const uint8_t *sample, int32_t size) = 0;
virtual void ResetXPSSendStatus();
virtual bool IsHdrVivid() = 0;
virtual bool IsHdr10Plus() = 0;
virtual bool IsSyncFrame(const uint8_t *sample, int32_t size) = 0;
virtual bool GetColorRange() = 0;
virtual uint8_t GetColorPrimaries() = 0;
virtual uint8_t GetColorTransfer() = 0;
virtual uint8_t GetColorMatrixCoeff() = 0;
virtual uint8_t GetProfileIdc() = 0;
virtual uint8_t GetLevelIdc() = 0;
virtual uint32_t GetChromaLocation() = 0;
virtual uint32_t GetPicWidInLumaSamples() = 0;
virtual uint32_t GetPicHetInLumaSamples() = 0;
virtual std::vector<uint8_t> GetLogInfo() = 0;
virtual uint32_t GetMaxReorderPic() = 0;
virtual int32_t GetFirstFillerDataNalSize(const uint8_t *sample, int32_t size) = 0;
virtual double GetSar() = 0;
};
}
}
}
#endif