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 { 35 NALU *nalus; 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. */ 55 void ff_nal_units_write_list(const NALUList *list, AVIOContext *pb, 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; 73 uint8_t constraint_set_flags; 74 uint8_t chroma_format_idc; 75 uint8_t bit_depth_luma; 76 uint8_t bit_depth_chroma; 77 uint8_t frame_mbs_only_flag; 78 AVRational sar; 79 } H264SPS; 80 81 int ff_avc_decode_sps(H264SPS *sps, const uint8_t *buf, int buf_size); 82 83 #endif /* AVFORMAT_AVC_H */ 84