FFmpeg: libavformat/adtsenc.c Source File
Go to the documentation of this file. 1 /*
2 * ADTS muxer.
3 * Copyright (c) 2006 Baptiste Coudurier <baptiste.coudurier@smartjog.com>
4 * Mans Rullgard <mans@mansr.com>
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
35
36 #define ADTS_HEADER_SIZE 7
37
50
51 #define ADTS_MAX_FRAME_BYTES ((1 << 14) - 1)
52
54 {
59
64 if (off < 0)
65 return off;
70
74 }
78 }
82 }
86 }
90 }
93
97 }
98
100
101 return 0;
102 }
103
105 {
108
112
113 return 0;
114 }
115
117 {
119
122
123 return 0;
124 }
125
127 uint8_t *buf,
int size,
int pce_size)
128 {
130
136 }
137
139
140 /* adts_fixed_header */
141 put_bits(&pb, 12, 0xfff);
/* syncword */
144 put_bits(&pb, 1, 1);
/* protection_absent */
145 put_bits(&pb, 2,
ctx->objecttype);
/* profile_objecttype */
147 put_bits(&pb, 1, 0);
/* private_bit */
148 put_bits(&pb, 3,
ctx->channel_conf);
/* channel_configuration */
149 put_bits(&pb, 1, 0);
/* original_copy */
151
152 /* adts_variable_header */
153 put_bits(&pb, 1, 0);
/* copyright_identification_bit */
154 put_bits(&pb, 1, 0);
/* copyright_identification_start */
155 put_bits(&pb, 13, full_frame_size);
/* aac_frame_length */
156 put_bits(&pb, 11, 0x7ff);
/* adts_buffer_fullness */
157 put_bits(&pb, 2, 0);
/* number_of_raw_data_blocks_in_frame */
158
160
161 return 0;
162 }
163
165 {
170
172 return 0;
174 uint8_t *side_data;
175 size_t side_data_size;
177
179 &side_data_size);
180 if (side_data_size) {
187 memcpy(par->
extradata, side_data, side_data_size);
188 }
189 }
193 if (err < 0)
194 return err;
199 }
200 }
202
203 return 0;
204 }
205
207 {
209
212
213 return 0;
214 }
215
216 #define ENC AV_OPT_FLAG_ENCODING_PARAM
217 #define OFFSET(obj) offsetof(ADTSContext, obj)
223 };
224
230 };
231
235 .p.mime_type = "audio/aac",
236 .p.extensions = "aac,adts",
249 };
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
static int adts_write_trailer(AVFormatContext *s)
static int adts_init(AVFormatContext *s)
This struct describes the properties of an encoded stream.
@ AV_PKT_DATA_NEW_EXTRADATA
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
static int adts_decode_extradata(AVFormatContext *s, ADTSContext *adts, const uint8_t *buf, int size)
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
#define FF_OFMT_FLAG_ONLY_DEFAULT_CODECS
If this flag is set, then the only permitted audio/video/subtitle codec ids are AVOutputFormat....
#define MAX_PCE_SIZE
Maximum size of a PCE including the 3-bit ID_PCE.
static const AVOption options[]
#define ADTS_MAX_FRAME_BYTES
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static int adts_write_packet(AVFormatContext *s, AVPacket *pkt)
static int adts_write_header(AVFormatContext *s)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
int avpriv_mpeg4audio_get_config2(MPEG4AudioConfig *c, const uint8_t *buf, int size, int sync_extension, void *logctx)
Parse MPEG-4 systems extradata from a raw buffer to retrieve audio configuration.
static int ff_copy_pce_data(PutBitContext *pb, GetBitContext *gb)
const FFOutputFormat ff_adts_muxer
int ff_ape_write_tag(AVFormatContext *s)
Write an APE tag into a file.
#define LIBAVUTIL_VERSION_INT
Describe the class of an AVClass context structure.
const char * av_default_item_name(void *ptr)
Return the context name.
int extradata_size
Size of the extradata content in bytes.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
#define ID3v2_DEFAULT_MAGIC
Default magic bytes for ID3v2 header: "ID3".
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, size_t *size)
Get side information from packet.
#define FF_OFMT_FLAG_MAX_ONE_OF_EACH
If this flag is set, it indicates that for each codec type whose corresponding default codec (i....
static int adts_write_frame_header(AVFormatContext *s, ADTSContext *ctx, uint8_t *buf, int size, int pce_size)
static const AVClass adts_muxer_class
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
uint8_t pce_data[MAX_PCE_SIZE]
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
This structure stores compressed data.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int ff_id3v2_write_simple(struct AVFormatContext *s, int id3v2_version, const char *magic)
Write an ID3v2 tag containing all global metadata from s.
Generated on Thu Sep 26 2024 23:15:43 for FFmpeg by
doxygen
1.8.17