FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
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 Libav.
5
*
6
* Libav 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
* Libav 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 Libav; 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
/**
33
* Audio buffer used for intermediate storage between conversion phases.
34
*/
35
struct
AudioData
{
36
const
AVClass
*
class
;
/**< AVClass for logging */
37
uint8_t
*
data
[
AVRESAMPLE_MAX_CHANNELS
];
/**< data plane pointers */
38
uint8_t
*
buffer
;
/**< data buffer */
39
unsigned
int
buffer_size
;
/**< allocated buffer size */
40
int
allocated_samples
;
/**< number of samples the buffer can hold */
41
int
nb_samples
;
/**< current number of samples */
42
enum
AVSampleFormat
sample_fmt
;
/**< sample format */
43
int
channels
;
/**< channel count */
44
int
allocated_channels
;
/**< allocated channel count */
45
int
is_planar
;
/**< sample format is planar */
46
int
planes
;
/**< number of data planes */
47
int
sample_size
;
/**< bytes per sample */
48
int
stride
;
/**< sample byte offset within a plane */
49
int
read_only
;
/**< data is read-only */
50
int
allow_realloc
;
/**< realloc is allowed */
51
int
ptr_align
;
/**< minimum data pointer alignment */
52
int
samples_align
;
/**< allocated samples alignment */
53
const
char
*
name
;
/**< name for debug logging */
54
};
55
56
int
ff_audio_data_set_channels
(
AudioData
*
a
,
int
channels);
57
58
/**
59
* Initialize AudioData using a given source.
60
*
61
* This does not allocate an internal buffer. It only sets the data pointers
62
* and audio parameters.
63
*
64
* @param a AudioData struct
65
* @param src source data pointers
66
* @param plane_size plane size, in bytes.
67
* This can be 0 if unknown, but that will lead to
68
* optimized functions not being used in many cases,
69
* which could slow down some conversions.
70
* @param channels channel count
71
* @param nb_samples number of samples in the source data
72
* @param sample_fmt sample format
73
* @param read_only indicates if buffer is read only or read/write
74
* @param name name for debug logging (can be NULL)
75
* @return 0 on success, negative AVERROR value on error
76
*/
77
int
ff_audio_data_init
(
AudioData
*
a
,
uint8_t
**src,
int
plane_size,
int
channels,
78
int
nb_samples
,
enum
AVSampleFormat
sample_fmt,
79
int
read_only,
const
char
*
name
);
80
81
/**
82
* Allocate AudioData.
83
*
84
* This allocates an internal buffer and sets audio parameters.
85
*
86
* @param channels channel count
87
* @param nb_samples number of samples to allocate space for
88
* @param sample_fmt sample format
89
* @param name name for debug logging (can be NULL)
90
* @return newly allocated AudioData struct, or NULL on error
91
*/
92
AudioData
*
ff_audio_data_alloc
(
int
channels,
int
nb_samples
,
93
enum
AVSampleFormat
sample_fmt,
94
const
char
*
name
);
95
96
/**
97
* Reallocate AudioData.
98
*
99
* The AudioData must have been previously allocated with ff_audio_data_alloc().
100
*
101
* @param a AudioData struct
102
* @param nb_samples number of samples to allocate space for
103
* @return 0 on success, negative AVERROR value on error
104
*/
105
int
ff_audio_data_realloc
(
AudioData
*
a
,
int
nb_samples
);
106
107
/**
108
* Free AudioData.
109
*
110
* The AudioData must have been previously allocated with ff_audio_data_alloc().
111
*
112
* @param a AudioData struct
113
*/
114
void
ff_audio_data_free
(
AudioData
**
a
);
115
116
/**
117
* Copy data from one AudioData to another.
118
*
119
* @param out output AudioData
120
* @param in input AudioData
121
* @param map channel map, NULL if not remapping
122
* @return 0 on success, negative AVERROR value on error
123
*/
124
int
ff_audio_data_copy
(
AudioData
*
out
,
AudioData
*
in
,
ChannelMapInfo
*map);
125
126
/**
127
* Append data from one AudioData to the end of another.
128
*
129
* @param dst destination AudioData
130
* @param dst_offset offset, in samples, to start writing, relative to the
131
* start of dst
132
* @param src source AudioData
133
* @param src_offset offset, in samples, to start copying, relative to the
134
* start of the src
135
* @param nb_samples number of samples to copy
136
* @return 0 on success, negative AVERROR value on error
137
*/
138
int
ff_audio_data_combine
(
AudioData
*
dst
,
int
dst_offset,
AudioData
*src,
139
int
src_offset,
int
nb_samples
);
140
141
/**
142
* Drain samples from the start of the AudioData.
143
*
144
* Remaining samples are shifted to the start of the AudioData.
145
*
146
* @param a AudioData struct
147
* @param nb_samples number of samples to drain
148
*/
149
void
ff_audio_data_drain
(
AudioData
*
a
,
int
nb_samples
);
150
151
/**
152
* Add samples in AudioData to an AVAudioFifo.
153
*
154
* @param af Audio FIFO Buffer
155
* @param a AudioData struct
156
* @param offset number of samples to skip from the start of the data
157
* @param nb_samples number of samples to add to the FIFO
158
* @return number of samples actually added to the FIFO, or
159
* negative AVERROR code on error
160
*/
161
int
ff_audio_data_add_to_fifo
(
AVAudioFifo
*af,
AudioData
*
a
,
int
offset
,
162
int
nb_samples
);
163
164
/**
165
* Read samples from an AVAudioFifo to AudioData.
166
*
167
* @param af Audio FIFO Buffer
168
* @param a AudioData struct
169
* @param nb_samples number of samples to read from the FIFO
170
* @return number of samples actually read from the FIFO, or
171
* negative AVERROR code on error
172
*/
173
int
ff_audio_data_read_from_fifo
(
AVAudioFifo
*af,
AudioData
*
a
,
int
nb_samples
);
174
175
#endif
/* AVRESAMPLE_AUDIO_DATA_H */
Generated on Sat May 25 2013 04:01:20 for FFmpeg by
1.8.2