FFmpeg
Data Structures | Macros | Enumerations | Functions
hevc.c File Reference
#include "libavcodec/get_bits.h"
#include "libavcodec/golomb.h"
#include "libavcodec/hevc.h"
#include "libavutil/intreadwrite.h"
#include "avc.h"
#include "avio.h"
#include "avio_internal.h"
#include "hevc.h"

Go to the source code of this file.

Data Structures

struct  HVCCNALUnitArray
 
struct  HEVCDecoderConfigurationRecord
 
struct  HVCCProfileTierLevel
 

Macros

#define MAX_SPATIAL_SEGMENTATION   4096
 

Enumerations

enum  {
  VPS_INDEX, SPS_INDEX, PPS_INDEX, SEI_PREFIX_INDEX,
  SEI_SUFFIX_INDEX, NB_ARRAYS
}
 

Functions

static void hvcc_update_ptl (HEVCDecoderConfigurationRecord *hvcc, HVCCProfileTierLevel *ptl)
 
static void hvcc_parse_ptl (GetBitContext *gb, HEVCDecoderConfigurationRecord *hvcc, unsigned int max_sub_layers_minus1)
 
static void skip_sub_layer_hrd_parameters (GetBitContext *gb, unsigned int cpb_cnt_minus1, uint8_t sub_pic_hrd_params_present_flag)
 
static int skip_hrd_parameters (GetBitContext *gb, uint8_t cprms_present_flag, unsigned int max_sub_layers_minus1)
 
static void skip_timing_info (GetBitContext *gb)
 
static void hvcc_parse_vui (GetBitContext *gb, HEVCDecoderConfigurationRecord *hvcc, unsigned int max_sub_layers_minus1)
 
static void skip_sub_layer_ordering_info (GetBitContext *gb)
 
static int hvcc_parse_vps (GetBitContext *gb, HEVCDecoderConfigurationRecord *hvcc)
 
static void skip_scaling_list_data (GetBitContext *gb)
 
static int parse_rps (GetBitContext *gb, unsigned int rps_idx, unsigned int num_rps, unsigned int num_delta_pocs[HEVC_MAX_SHORT_TERM_REF_PIC_SETS])
 
static int hvcc_parse_sps (GetBitContext *gb, HEVCDecoderConfigurationRecord *hvcc)
 
static int hvcc_parse_pps (GetBitContext *gb, HEVCDecoderConfigurationRecord *hvcc)
 
static void nal_unit_parse_header (GetBitContext *gb, uint8_t *nal_type)
 
static int hvcc_array_add_nal_unit (uint8_t *nal_buf, uint32_t nal_size, uint8_t nal_type, int ps_array_completeness, HVCCNALUnitArray *array)
 
static int hvcc_add_nal_unit (uint8_t *nal_buf, uint32_t nal_size, int ps_array_completeness, HEVCDecoderConfigurationRecord *hvcc, unsigned array_idx)
 
static void hvcc_init (HEVCDecoderConfigurationRecord *hvcc)
 
static void hvcc_close (HEVCDecoderConfigurationRecord *hvcc)
 
static int hvcc_write (AVIOContext *pb, HEVCDecoderConfigurationRecord *hvcc)
 
int ff_hevc_annexb2mp4 (AVIOContext *pb, const uint8_t *buf_in, int size, int filter_ps, int *ps_count)
 Writes Annex B formatted HEVC NAL units to the provided AVIOContext. More...
 
int ff_hevc_annexb2mp4_buf (const uint8_t *buf_in, uint8_t **buf_out, int *size, int filter_ps, int *ps_count)
 Writes Annex B formatted HEVC NAL units to a data buffer. More...
 
int ff_isom_write_hvcc (AVIOContext *pb, const uint8_t *data, int size, int ps_array_completeness)
 Writes HEVC extradata (parameter sets, declarative SEI NAL units) to the provided AVIOContext. More...
 

Macro Definition Documentation

◆ MAX_SPATIAL_SEGMENTATION

#define MAX_SPATIAL_SEGMENTATION   4096

Definition at line 30 of file hevc.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
VPS_INDEX 
SPS_INDEX 
PPS_INDEX 
SEI_PREFIX_INDEX 
SEI_SUFFIX_INDEX 
NB_ARRAYS 

Definition at line 32 of file hevc.c.

Function Documentation

◆ hvcc_update_ptl()

static void hvcc_update_ptl ( HEVCDecoderConfigurationRecord hvcc,
HVCCProfileTierLevel ptl 
)
static

Definition at line 80 of file hevc.c.

Referenced by hvcc_parse_ptl().

◆ hvcc_parse_ptl()

static void hvcc_parse_ptl ( GetBitContext gb,
HEVCDecoderConfigurationRecord hvcc,
unsigned int  max_sub_layers_minus1 
)
static

Definition at line 134 of file hevc.c.

Referenced by hvcc_parse_sps(), and hvcc_parse_vps().

◆ skip_sub_layer_hrd_parameters()

static void skip_sub_layer_hrd_parameters ( GetBitContext gb,
unsigned int  cpb_cnt_minus1,
uint8_t  sub_pic_hrd_params_present_flag 
)
static

Definition at line 183 of file hevc.c.

Referenced by skip_hrd_parameters().

◆ skip_hrd_parameters()

static int skip_hrd_parameters ( GetBitContext gb,
uint8_t  cprms_present_flag,
unsigned int  max_sub_layers_minus1 
)
static

Definition at line 202 of file hevc.c.

Referenced by hvcc_parse_vui().

◆ skip_timing_info()

static void skip_timing_info ( GetBitContext gb)
static

Definition at line 277 of file hevc.c.

Referenced by hvcc_parse_vui().

◆ hvcc_parse_vui()

static void hvcc_parse_vui ( GetBitContext gb,
HEVCDecoderConfigurationRecord hvcc,
unsigned int  max_sub_layers_minus1 
)
static

Definition at line 286 of file hevc.c.

Referenced by hvcc_parse_sps().

◆ skip_sub_layer_ordering_info()

static void skip_sub_layer_ordering_info ( GetBitContext gb)
static

Definition at line 364 of file hevc.c.

Referenced by hvcc_parse_sps().

◆ hvcc_parse_vps()

static int hvcc_parse_vps ( GetBitContext gb,
HEVCDecoderConfigurationRecord hvcc 
)
static

Definition at line 371 of file hevc.c.

Referenced by hvcc_add_nal_unit().

◆ skip_scaling_list_data()

static void skip_scaling_list_data ( GetBitContext gb)
static

Definition at line 408 of file hevc.c.

Referenced by hvcc_parse_sps().

◆ parse_rps()

static int parse_rps ( GetBitContext gb,
unsigned int  rps_idx,
unsigned int  num_rps,
unsigned int  num_delta_pocs[HEVC_MAX_SHORT_TERM_REF_PIC_SETS] 
)
static

Definition at line 427 of file hevc.c.

Referenced by hvcc_parse_sps().

◆ hvcc_parse_sps()

static int hvcc_parse_sps ( GetBitContext gb,
HEVCDecoderConfigurationRecord hvcc 
)
static

Definition at line 494 of file hevc.c.

Referenced by hvcc_add_nal_unit().

◆ hvcc_parse_pps()

static int hvcc_parse_pps ( GetBitContext gb,
HEVCDecoderConfigurationRecord hvcc 
)
static

Definition at line 598 of file hevc.c.

Referenced by hvcc_add_nal_unit().

◆ nal_unit_parse_header()

static void nal_unit_parse_header ( GetBitContext gb,
uint8_t *  nal_type 
)
static

Definition at line 655 of file hevc.c.

Referenced by hvcc_add_nal_unit().

◆ hvcc_array_add_nal_unit()

static int hvcc_array_add_nal_unit ( uint8_t *  nal_buf,
uint32_t  nal_size,
uint8_t  nal_type,
int  ps_array_completeness,
HVCCNALUnitArray array 
)
static

Definition at line 668 of file hevc.c.

Referenced by hvcc_add_nal_unit().

◆ hvcc_add_nal_unit()

static int hvcc_add_nal_unit ( uint8_t *  nal_buf,
uint32_t  nal_size,
int  ps_array_completeness,
HEVCDecoderConfigurationRecord hvcc,
unsigned  array_idx 
)
static

Definition at line 700 of file hevc.c.

Referenced by ff_isom_write_hvcc().

◆ hvcc_init()

static void hvcc_init ( HEVCDecoderConfigurationRecord hvcc)
static

Definition at line 749 of file hevc.c.

Referenced by ff_isom_write_hvcc().

◆ hvcc_close()

static void hvcc_close ( HEVCDecoderConfigurationRecord hvcc)
static

Definition at line 769 of file hevc.c.

Referenced by ff_isom_write_hvcc().

◆ hvcc_write()

static int hvcc_write ( AVIOContext pb,
HEVCDecoderConfigurationRecord hvcc 
)
static

Definition at line 779 of file hevc.c.

Referenced by ff_isom_write_hvcc().

◆ ff_hevc_annexb2mp4()

int ff_hevc_annexb2mp4 ( AVIOContext pb,
const uint8_t *  buf_in,
int  size,
int  filter_ps,
int ps_count 
)

Writes Annex B formatted HEVC NAL units to the provided AVIOContext.

The NAL units are converted to an MP4-compatible format (start code prefixes are replaced by 4-byte size fields, as per ISO/IEC 14496-15).

If filter_ps is non-zero, any HEVC parameter sets found in the input will be discarded, and *ps_count will be set to the number of discarded PS NAL units.

Parameters
pbaddress of the AVIOContext where the data shall be written
buf_inaddress of the buffer holding the input data
sizesize (in bytes) of the input buffer
filter_pswhether to write parameter set NAL units to the output (0) or to discard them (non-zero)
ps_countaddress of the variable where the number of discarded parameter set NAL units shall be written, may be NULL
Returns
the amount (in bytes) of data written in case of success, a negative value corresponding to an AVERROR code in case of failure

Definition at line 973 of file hevc.c.

Referenced by ff_hevc_annexb2mp4_buf(), and ff_mov_write_packet().

◆ ff_hevc_annexb2mp4_buf()

int ff_hevc_annexb2mp4_buf ( const uint8_t *  buf_in,
uint8_t **  buf_out,
int size,
int  filter_ps,
int ps_count 
)

Writes Annex B formatted HEVC NAL units to a data buffer.

The NAL units are converted to an MP4-compatible format (start code prefixes are replaced by 4-byte size fields, as per ISO/IEC 14496-15).

If filter_ps is non-zero, any HEVC parameter sets found in the input will be discarded, and *ps_count will be set to the number of discarded PS NAL units.

On success, *size holds the size (in bytes) of the output data buffer.

Parameters
buf_inaddress of the buffer holding the input data
sizeaddress of the variable holding the size (in bytes) of the input buffer (on input) and of the output buffer (on success)
buf_outon success, address of the variable holding the address of the output buffer
filter_pswhether to write parameter set NAL units to the output (0) or to discard them (non-zero)
ps_countaddress of the variable where the number of discarded parameter set NAL units shall be written, may be NULL
Returns
0 in case of success, a negative value corresponding to an AVERROR code in case of failure
Note
*buf_out will be treated as uninitialized on input and won't be freed.

Definition at line 1021 of file hevc.c.

Referenced by ff_mov_write_packet(), and flv_write_packet().

◆ ff_isom_write_hvcc()

int ff_isom_write_hvcc ( AVIOContext pb,
const uint8_t *  data,
int  size,
int  ps_array_completeness 
)

Writes HEVC extradata (parameter sets, declarative SEI NAL units) to the provided AVIOContext.

If the extradata is Annex B format, it gets converted to hvcC format before writing.

Parameters
pbaddress of the AVIOContext where the hvcC shall be written
dataaddress of the buffer holding the data needed to write the hvcC
sizesize (in bytes) of the data buffer
ps_array_completenesswhether all parameter sets are in the hvcC (1) or there may be additional parameter sets in the bitstream (0)
Returns
>=0 in case of success, a negative value corresponding to an AVERROR code in case of failure

Definition at line 1042 of file hevc.c.

Referenced by flv_write_codec_header(), mkv_assemble_native_codecprivate(), and mov_write_hvcc_tag().