FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavresample
audio_data.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2012 Justin Ruggles <justin.ruggles@gmail.com>
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#ifndef AVRESAMPLE_AUDIO_DATA_H
22
#define AVRESAMPLE_AUDIO_DATA_H
23
24
#include <stdint.h>
25
26
#include "
libavutil/audio_fifo.h
"
27
#include "
libavutil/log.h
"
28
#include "
libavutil/samplefmt.h
"
29
#include "
avresample.h
"
30
#include "
internal.h
"
31
32
int
ff_sample_fmt_is_planar
(
enum
AVSampleFormat
sample_fmt,
int
channels);
33
34
/**
35
* Audio buffer used for intermediate storage between conversion phases.
36
*/
37
struct
AudioData
{
38
const
AVClass
*
class
;
/**< AVClass for logging */
39
uint8_t
*
data
[
AVRESAMPLE_MAX_CHANNELS
];
/**< data plane pointers */
40
uint8_t
*
buffer
;
/**< data buffer */
41
unsigned
int
buffer_size
;
/**< allocated buffer size */
42
int
allocated_samples
;
/**< number of samples the buffer can hold */
43
int
nb_samples
;
/**< current number of samples */
44
enum
AVSampleFormat
sample_fmt
;
/**< sample format */
45
int
channels
;
/**< channel count */
46
int
allocated_channels
;
/**< allocated channel count */
47
int
is_planar
;
/**< sample format is planar */
48
int
planes
;
/**< number of data planes */
49
int
sample_size
;
/**< bytes per sample */
50
int
stride
;
/**< sample byte offset within a plane */
51
int
read_only
;
/**< data is read-only */
52
int
allow_realloc
;
/**< realloc is allowed */
53
int
ptr_align
;
/**< minimum data pointer alignment */
54
int
samples_align
;
/**< allocated samples alignment */
55
const
char
*
name
;
/**< name for debug logging */
56
};
57
58
int
ff_audio_data_set_channels
(
AudioData
*
a
,
int
channels);
59
60
/**
61
* Initialize AudioData using a given source.
62
*
63
* This does not allocate an internal buffer. It only sets the data pointers
64
* and audio parameters.
65
*
66
* @param a AudioData struct
67
* @param src source data pointers
68
* @param plane_size plane size, in bytes.
69
* This can be 0 if unknown, but that will lead to
70
* optimized functions not being used in many cases,
71
* which could slow down some conversions.
72
* @param channels channel count
73
* @param nb_samples number of samples in the source data
74
* @param sample_fmt sample format
75
* @param read_only indicates if buffer is read only or read/write
76
* @param name name for debug logging (can be NULL)
77
* @return 0 on success, negative AVERROR value on error
78
*/
79
int
ff_audio_data_init
(
AudioData
*
a
,
uint8_t
**
src
,
int
plane_size,
int
channels,
80
int
nb_samples,
enum
AVSampleFormat
sample_fmt,
81
int
read_only,
const
char
*
name
);
82
83
/**
84
* Allocate AudioData.
85
*
86
* This allocates an internal buffer and sets audio parameters.
87
*
88
* @param channels channel count
89
* @param nb_samples number of samples to allocate space for
90
* @param sample_fmt sample format
91
* @param name name for debug logging (can be NULL)
92
* @return newly allocated AudioData struct, or NULL on error
93
*/
94
AudioData
*
ff_audio_data_alloc
(
int
channels,
int
nb_samples,
95
enum
AVSampleFormat
sample_fmt,
96
const
char
*
name
);
97
98
/**
99
* Reallocate AudioData.
100
*
101
* The AudioData must have been previously allocated with ff_audio_data_alloc().
102
*
103
* @param a AudioData struct
104
* @param nb_samples number of samples to allocate space for
105
* @return 0 on success, negative AVERROR value on error
106
*/
107
int
ff_audio_data_realloc
(
AudioData
*
a
,
int
nb_samples);
108
109
/**
110
* Free AudioData.
111
*
112
* The AudioData must have been previously allocated with ff_audio_data_alloc().
113
*
114
* @param a AudioData struct
115
*/
116
void
ff_audio_data_free
(
AudioData
**
a
);
117
118
/**
119
* Copy data from one AudioData to another.
120
*
121
* @param out output AudioData
122
* @param in input AudioData
123
* @param map channel map, NULL if not remapping
124
* @return 0 on success, negative AVERROR value on error
125
*/
126
int
ff_audio_data_copy
(
AudioData
*
out
,
AudioData
*
in
,
ChannelMapInfo
*map);
127
128
/**
129
* Append data from one AudioData to the end of another.
130
*
131
* @param dst destination AudioData
132
* @param dst_offset offset, in samples, to start writing, relative to the
133
* start of dst
134
* @param src source AudioData
135
* @param src_offset offset, in samples, to start copying, relative to the
136
* start of the src
137
* @param nb_samples number of samples to copy
138
* @return 0 on success, negative AVERROR value on error
139
*/
140
int
ff_audio_data_combine
(
AudioData
*dst,
int
dst_offset,
AudioData
*
src
,
141
int
src_offset,
int
nb_samples);
142
143
/**
144
* Drain samples from the start of the AudioData.
145
*
146
* Remaining samples are shifted to the start of the AudioData.
147
*
148
* @param a AudioData struct
149
* @param nb_samples number of samples to drain
150
*/
151
void
ff_audio_data_drain
(
AudioData
*
a
,
int
nb_samples);
152
153
/**
154
* Add samples in AudioData to an AVAudioFifo.
155
*
156
* @param af Audio FIFO Buffer
157
* @param a AudioData struct
158
* @param offset number of samples to skip from the start of the data
159
* @param nb_samples number of samples to add to the FIFO
160
* @return number of samples actually added to the FIFO, or
161
* negative AVERROR code on error
162
*/
163
int
ff_audio_data_add_to_fifo
(
AVAudioFifo
*af,
AudioData
*
a
,
int
offset
,
164
int
nb_samples);
165
166
/**
167
* Read samples from an AVAudioFifo to AudioData.
168
*
169
* @param af Audio FIFO Buffer
170
* @param a AudioData struct
171
* @param nb_samples number of samples to read from the FIFO
172
* @return number of samples actually read from the FIFO, or
173
* negative AVERROR code on error
174
*/
175
int
ff_audio_data_read_from_fifo
(
AVAudioFifo
*af,
AudioData
*
a
,
int
nb_samples);
176
177
#endif
/* AVRESAMPLE_AUDIO_DATA_H */
Generated on Sun Mar 8 2015 02:35:13 for FFmpeg by
1.8.2