FFmpeg
avc.h
Go to the documentation of this file.
1 /*
2  * AVC helper functions for muxers
3  * Copyright (c) 2008 Aurelien Jacobs <aurel@gnuage.org>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #ifndef AVFORMAT_AVC_H
23 #define AVFORMAT_AVC_H
24 
25 #include <stdint.h>
26 #include "libavutil/rational.h"
27 #include "avio.h"
28 
29 typedef struct NALU {
30  int offset;
31  uint32_t size;
32 } NALU;
33 
34 typedef struct NALUList {
36  unsigned nalus_array_size;
37  unsigned nb_nalus; ///< valid entries in nalus
38 } NALUList;
39 
40 /* This function will parse the given annex B buffer and create
41  * a NALUList from it. This list can be passed to ff_nal_units_write_list()
42  * to write the access unit reformatted to mp4.
43  *
44  * @param list A NALUList. The list->nalus and list->nalus_array_size
45  * must be valid when calling this function and may be updated.
46  * nb_nalus is set by this function on success.
47  * @param buf buffer containing annex B H.264 or H.265. Must be padded.
48  * @param size size of buf, excluding padding.
49  * @return < 0 on error, the size of the mp4-style packet on success.
50  */
51 int ff_nal_units_create_list(NALUList *list, const uint8_t *buf, int size);
52 
53 /* Writes a NALUList to the specified AVIOContext. The list must originate
54  * from ff_nal_units_create_list() with the same buf. */
56  const uint8_t *buf);
57 
58 int ff_avc_parse_nal_units(AVIOContext *s, const uint8_t *buf, int size);
59 int ff_avc_parse_nal_units_buf(const uint8_t *buf_in, uint8_t **buf, int *size);
60 int ff_isom_write_avcc(AVIOContext *pb, const uint8_t *data, int len);
61 const uint8_t *ff_avc_find_startcode(const uint8_t *p, const uint8_t *end);
62 int ff_avc_write_annexb_extradata(const uint8_t *in, uint8_t **buf, int *size);
63 const uint8_t *ff_avc_mp4_find_startcode(const uint8_t *start,
64  const uint8_t *end,
65  int nal_length_size);
66 uint8_t *ff_nal_unit_extract_rbsp(const uint8_t *src, uint32_t src_len,
67  uint32_t *dst_len, int header_len);
68 
69 typedef struct {
70  uint8_t id;
71  uint8_t profile_idc;
72  uint8_t level_idc;
75  uint8_t bit_depth_luma;
79 } H264SPS;
80 
81 int ff_avc_decode_sps(H264SPS *sps, const uint8_t *buf, int buf_size);
82 
83 #endif /* AVFORMAT_AVC_H */
H264SPS
Definition: avc.h:69
ff_nal_units_write_list
void ff_nal_units_write_list(const NALUList *list, AVIOContext *pb, const uint8_t *buf)
Definition: avc.c:120
H264SPS::bit_depth_chroma
uint8_t bit_depth_chroma
Definition: avc.h:76
ff_avc_parse_nal_units_buf
int ff_avc_parse_nal_units_buf(const uint8_t *buf_in, uint8_t **buf, int *size)
Definition: avc.c:129
rational.h
ff_avc_decode_sps
int ff_avc_decode_sps(H264SPS *sps, const uint8_t *buf, int buf_size)
Definition: avc.c:368
H264SPS::constraint_set_flags
uint8_t constraint_set_flags
Definition: avc.h:73
data
const char data[16]
Definition: mxf.c:143
NALUList::nalus_array_size
unsigned nalus_array_size
Definition: avc.h:36
NALU::offset
int offset
Definition: avc.h:30
NALUList::nalus
NALU * nalus
Definition: avc.h:35
H264SPS::bit_depth_luma
uint8_t bit_depth_luma
Definition: avc.h:75
H264SPS::profile_idc
uint8_t profile_idc
Definition: avc.h:71
NALU::size
uint32_t size
Definition: avc.h:31
s
#define s(width, name)
Definition: cbs_vp9.c:256
ff_avc_parse_nal_units
int ff_avc_parse_nal_units(AVIOContext *s, const uint8_t *buf, int size)
Definition: avc.c:109
NALUList::nb_nalus
unsigned nb_nalus
valid entries in nalus
Definition: avc.h:37
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
ff_nal_units_create_list
int ff_nal_units_create_list(NALUList *list, const uint8_t *buf, int size)
Definition: avc.c:114
list
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining list
Definition: filter_design.txt:25
AVIOContext
Bytestream IO Context.
Definition: avio.h:162
size
int size
Definition: twinvq_data.h:10344
avio.h
ff_isom_write_avcc
int ff_isom_write_avcc(AVIOContext *pb, const uint8_t *data, int len)
Definition: avc.c:142
H264SPS::level_idc
uint8_t level_idc
Definition: avc.h:72
ff_avc_write_annexb_extradata
int ff_avc_write_annexb_extradata(const uint8_t *in, uint8_t **buf, int *size)
Definition: avc.c:255
ff_nal_unit_extract_rbsp
uint8_t * ff_nal_unit_extract_rbsp(const uint8_t *src, uint32_t src_len, uint32_t *dst_len, int header_len)
Definition: avc.c:303
H264SPS::chroma_format_idc
uint8_t chroma_format_idc
Definition: avc.h:74
H264SPS::id
uint8_t id
Definition: avc.h:70
NALU
Definition: avc.h:29
len
int len
Definition: vorbis_enc_data.h:426
H264SPS::frame_mbs_only_flag
uint8_t frame_mbs_only_flag
Definition: avc.h:77
sps
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
Definition: cbs_h264_syntax_template.c:260
NALUList
Definition: avc.h:34
H264SPS::sar
AVRational sar
Definition: avc.h:78
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
ff_avc_find_startcode
const uint8_t * ff_avc_find_startcode(const uint8_t *p, const uint8_t *end)
Definition: avc.c:67
ff_avc_mp4_find_startcode
const uint8_t * ff_avc_mp4_find_startcode(const uint8_t *start, const uint8_t *end, int nal_length_size)
Definition: avc.c:286