74 lines
2.0 KiB
C
74 lines
2.0 KiB
C
#ifndef _mpeg_vvc_h
|
|
#define _mpeg_vvc_h
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct mpeg4_vvc_t
|
|
{
|
|
uint32_t lengthSizeMinusOne : 2; // 2bit,[0,3]
|
|
uint32_t ptl_present_flag : 1;
|
|
|
|
// valid on ptl_present_flag
|
|
uint32_t ols_idx : 9;
|
|
uint32_t num_sublayers : 3;
|
|
uint32_t constant_frame_rate : 2;
|
|
uint32_t chroma_format_idc : 2;
|
|
uint32_t bit_depth_minus8 : 2;
|
|
uint16_t max_picture_width;
|
|
uint16_t max_picture_height;
|
|
uint16_t avg_frame_rate;
|
|
struct
|
|
{
|
|
uint32_t num_bytes_constraint_info : 6;
|
|
uint32_t general_profile_idc : 7;
|
|
uint32_t general_tier_flag : 1;
|
|
uint32_t general_level_idc : 8;
|
|
uint32_t ptl_frame_only_constraint_flag : 1;
|
|
uint32_t ptl_multi_layer_enabled_flag : 1;
|
|
uint32_t ptl_sublayer_level_present_flag : 8;
|
|
uint8_t general_constraint_info[64];
|
|
uint8_t sublayer_level_idc[8 - 2];
|
|
uint8_t ptl_num_sub_profiles;
|
|
uint32_t *general_sub_profile_idc; // --> data
|
|
} native_ptl;
|
|
|
|
uint8_t numOfArrays;
|
|
struct
|
|
{
|
|
uint8_t array_completeness;
|
|
uint8_t type; // nalu type
|
|
uint16_t bytes;
|
|
uint8_t* data;
|
|
} nalu[64];
|
|
|
|
uint8_t array_completeness;
|
|
uint8_t data[4 * 1024];
|
|
size_t off;
|
|
};
|
|
|
|
int mpeg4_vvc_decoder_configuration_record_load(const uint8_t* data, size_t bytes, struct mpeg4_vvc_t* vvc);
|
|
|
|
int mpeg4_vvc_decoder_configuration_record_save(const struct mpeg4_vvc_t* vvc, uint8_t* data, size_t bytes);
|
|
|
|
int mpeg4_vvc_to_nalu(const struct mpeg4_vvc_t* vvc, uint8_t* data, size_t bytes);
|
|
|
|
int mpeg4_vvc_codecs(const struct mpeg4_vvc_t* vvc, char* codecs, size_t bytes);
|
|
|
|
int h266_annexbtomp4(struct mpeg4_vvc_t* vvc, const void* data, size_t bytes, void* out, size_t size, int* vcl, int* update);
|
|
|
|
int h266_mp4toannexb(const struct mpeg4_vvc_t* vvc, const void* data, size_t bytes, void* out, size_t size);
|
|
|
|
/// h266_is_new_access_unit H.266 new access unit(frame)
|
|
/// @return 1-new access, 0-not a new access
|
|
int h266_is_new_access_unit(const uint8_t* nalu, size_t bytes);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif
|
|
#endif /* !_mpeg_vvc_h */
|