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
libavcodec
internal.h
Go to the documentation of this file.
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* FFmpeg is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with FFmpeg; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
/**
20
* @file
21
* common internal api header.
22
*/
23
24
#ifndef AVCODEC_INTERNAL_H
25
#define AVCODEC_INTERNAL_H
26
27
#include <stdint.h>
28
29
#include "
libavutil/buffer.h
"
30
#include "
libavutil/mathematics.h
"
31
#include "
libavutil/pixfmt.h
"
32
#include "
avcodec.h
"
33
#include "config.h"
34
35
#define FF_SANE_NB_CHANNELS 63U
36
37
typedef
struct
FramePool
{
38
/**
39
* Pools for each data plane. For audio all the planes have the same size,
40
* so only pools[0] is used.
41
*/
42
AVBufferPool
*
pools
[4];
43
44
/*
45
* Pool parameters
46
*/
47
int
format
;
48
int
width
,
height
;
49
int
stride_align
[
AV_NUM_DATA_POINTERS
];
50
int
linesize
[4];
51
int
planes
;
52
int
channels
;
53
int
samples
;
54
}
FramePool
;
55
56
typedef
struct
AVCodecInternal
{
57
/**
58
* Whether the parent AVCodecContext is a copy of the context which had
59
* init() called on it.
60
* This is used by multithreading - shared tables and picture pointers
61
* should be freed from the original context only.
62
*/
63
int
is_copy
;
64
65
/**
66
* Whether to allocate progress for frame threading.
67
*
68
* The codec must set it to 1 if it uses ff_thread_await/report_progress(),
69
* then progress will be allocated in ff_thread_get_buffer(). The frames
70
* then MUST be freed with ff_thread_release_buffer().
71
*
72
* If the codec does not need to call the progress functions (there are no
73
* dependencies between the frames), it should leave this at 0. Then it can
74
* decode straight to the user-provided frames (which the user will then
75
* free with av_frame_unref()), there is no need to call
76
* ff_thread_release_buffer().
77
*/
78
int
allocate_progress
;
79
80
#if FF_API_OLD_ENCODE_AUDIO
81
/**
82
* Internal sample count used by avcodec_encode_audio() to fabricate pts.
83
* Can be removed along with avcodec_encode_audio().
84
*/
85
int64_t sample_count;
86
#endif
87
88
/**
89
* An audio frame with less than required samples has been submitted and
90
* padded with silence. Reject all subsequent frames.
91
*/
92
int
last_audio_frame
;
93
94
AVFrame
to_free
;
95
96
FramePool
*
pool
;
97
98
/**
99
* temporary buffer used for encoders to store their bitstream
100
*/
101
uint8_t
*
byte_buffer
;
102
unsigned
int
byte_buffer_size
;
103
104
void
*
frame_thread_encoder
;
105
106
/**
107
* Number of audio samples to skip at the start of the next decoded frame
108
*/
109
int
skip_samples
;
110
}
AVCodecInternal
;
111
112
struct
AVCodecDefault
{
113
const
uint8_t
*
key
;
114
const
uint8_t
*
value
;
115
};
116
117
/**
118
* Return the hardware accelerated codec for codec codec_id and
119
* pixel format pix_fmt.
120
*
121
* @param codec_id the codec to match
122
* @param pix_fmt the pixel format to match
123
* @return the hardware accelerated codec, or NULL if none was found.
124
*/
125
AVHWAccel
*
ff_find_hwaccel
(
enum
AVCodecID
codec_id
,
enum
AVPixelFormat
pix_fmt
);
126
127
/**
128
* Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
129
* If there is no such matching pair then size is returned.
130
*/
131
int
ff_match_2uint16
(
const
uint16_t (*
tab
)[2],
int
size
,
int
a
,
int
b
);
132
133
unsigned
int
avpriv_toupper4
(
unsigned
int
x);
134
135
/**
136
* does needed setup of pkt_pts/pos and such for (re)get_buffer();
137
*/
138
int
ff_init_buffer_info
(
AVCodecContext
*
s
,
AVFrame
*
frame
);
139
140
141
void
avpriv_color_frame
(
AVFrame
*
frame
,
const
int
color
[4]);
142
143
/**
144
* Remove and free all side data from packet.
145
*/
146
void
ff_packet_free_side_data
(
AVPacket
*
pkt
);
147
148
extern
volatile
int
ff_avcodec_locked
;
149
int
ff_lock_avcodec
(
AVCodecContext
*log_ctx);
150
int
ff_unlock_avcodec
(
void
);
151
152
int
avpriv_lock_avformat
(
void
);
153
int
avpriv_unlock_avformat
(
void
);
154
155
/**
156
* Maximum size in bytes of extradata.
157
* This value was chosen such that every bit of the buffer is
158
* addressable by a 32-bit signed integer as used by get_bits.
159
*/
160
#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - FF_INPUT_BUFFER_PADDING_SIZE)
161
162
/**
163
* Check AVPacket size and/or allocate data.
164
*
165
* Encoders supporting AVCodec.encode2() can use this as a convenience to
166
* ensure the output packet data is large enough, whether provided by the user
167
* or allocated in this function.
168
*
169
* @param avctx the AVCodecContext of the encoder
170
* @param avpkt the AVPacket
171
* If avpkt->data is already set, avpkt->size is checked
172
* to ensure it is large enough.
173
* If avpkt->data is NULL, a new buffer is allocated.
174
* avpkt->size is set to the specified size.
175
* All other AVPacket fields will be reset with av_init_packet().
176
* @param size the minimum required packet size
177
* @return 0 on success, negative error code on failure
178
*/
179
int
ff_alloc_packet2
(
AVCodecContext
*avctx,
AVPacket
*avpkt,
int
size
);
180
181
int
ff_alloc_packet
(
AVPacket
*avpkt,
int
size
);
182
183
/**
184
* Rescale from sample rate to AVCodecContext.time_base.
185
*/
186
static
av_always_inline
int64_t
ff_samples_to_time_base
(
AVCodecContext
*avctx,
187
int64_t samples)
188
{
189
if
(samples ==
AV_NOPTS_VALUE
)
190
return
AV_NOPTS_VALUE
;
191
return
av_rescale_q
(samples, (
AVRational
){ 1, avctx->
sample_rate
},
192
avctx->
time_base
);
193
}
194
195
/**
196
* Get a buffer for a frame. This is a wrapper around
197
* AVCodecContext.get_buffer() and should be used instead calling get_buffer()
198
* directly.
199
*/
200
int
ff_get_buffer
(
AVCodecContext
*avctx,
AVFrame
*
frame
,
int
flags
);
201
202
/**
203
* Identical in function to av_frame_make_writable(), except it uses
204
* ff_get_buffer() to allocate the buffer when needed.
205
*/
206
int
ff_reget_buffer
(
AVCodecContext
*avctx,
AVFrame
*
frame
);
207
208
int
ff_thread_can_start_frame
(
AVCodecContext
*avctx);
209
210
int
avpriv_h264_has_num_reorder_frames
(
AVCodecContext
*avctx);
211
212
/**
213
* Call avcodec_open2 recursively by decrementing counter, unlocking mutex,
214
* calling the function and then restoring again. Assumes the mutex is
215
* already locked
216
*/
217
int
ff_codec_open2_recursive
(
AVCodecContext
*avctx,
const
AVCodec
*codec,
AVDictionary
**
options
);
218
219
/**
220
* Call avcodec_close recursively, counterpart to avcodec_open2_recursive.
221
*/
222
int
ff_codec_close_recursive
(
AVCodecContext
*avctx);
223
224
/**
225
* Finalize buf into extradata and set its size appropriately.
226
*/
227
int
avpriv_bprint_to_extradata
(
AVCodecContext
*avctx,
struct
AVBPrint
*
buf
);
228
229
const
uint8_t
*
avpriv_find_start_code
(
const
uint8_t
*p,
230
const
uint8_t
*
end
,
231
uint32_t *
state
);
232
233
#endif
/* AVCODEC_INTERNAL_H */
Generated on Wed Jul 10 2013 23:47:59 for FFmpeg by
1.8.2