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
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/mathematics.h
"
30
#include "
libavutil/pixfmt.h
"
31
#include "
avcodec.h
"
32
33
#define FF_SANE_NB_CHANNELS 128U
34
35
typedef
struct
InternalBuffer
{
36
uint8_t
*
base
[
AV_NUM_DATA_POINTERS
];
37
uint8_t
*
data
[
AV_NUM_DATA_POINTERS
];
38
int
linesize
[
AV_NUM_DATA_POINTERS
];
39
int
width
;
40
int
height
;
41
enum
AVPixelFormat
pix_fmt
;
42
}
InternalBuffer
;
43
44
typedef
struct
AVCodecInternal
{
45
/**
46
* internal buffer count
47
* used by default get/release/reget_buffer().
48
*/
49
int
buffer_count
;
50
51
/**
52
* internal buffers
53
* used by default get/release/reget_buffer().
54
*/
55
InternalBuffer
*
buffer
;
56
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
#if FF_API_OLD_DECODE_AUDIO
66
/**
67
* Internal sample count used by avcodec_encode_audio() to fabricate pts.
68
* Can be removed along with avcodec_encode_audio().
69
*/
70
int
sample_count;
71
#endif
72
73
/**
74
* An audio frame with less than required samples has been submitted and
75
* padded with silence. Reject all subsequent frames.
76
*/
77
int
last_audio_frame
;
78
79
/**
80
* The data for the last allocated audio frame.
81
* Stored here so we can free it.
82
*/
83
uint8_t
*
audio_data
;
84
85
/**
86
* temporary buffer used for encoders to store their bitstream
87
*/
88
uint8_t
*
byte_buffer
;
89
unsigned
int
byte_buffer_size
;
90
91
void
*
frame_thread_encoder
;
92
93
/**
94
* Number of audio samples to skip at the start of the next decoded frame
95
*/
96
int
skip_samples
;
97
}
AVCodecInternal
;
98
99
struct
AVCodecDefault
{
100
const
uint8_t
*
key
;
101
const
uint8_t
*
value
;
102
};
103
104
/**
105
* Return the hardware accelerated codec for codec codec_id and
106
* pixel format pix_fmt.
107
*
108
* @param codec_id the codec to match
109
* @param pix_fmt the pixel format to match
110
* @return the hardware accelerated codec, or NULL if none was found.
111
*/
112
AVHWAccel
*
ff_find_hwaccel
(
enum
AVCodecID
codec_id
,
enum
AVPixelFormat
pix_fmt
);
113
114
/**
115
* Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
116
* If there is no such matching pair then size is returned.
117
*/
118
int
ff_match_2uint16
(
const
uint16_t (*
tab
)[2],
int
size
,
int
a
,
int
b
);
119
120
unsigned
int
avpriv_toupper4
(
unsigned
int
x);
121
122
/**
123
* does needed setup of pkt_pts/pos and such for (re)get_buffer();
124
*/
125
void
ff_init_buffer_info
(
AVCodecContext
*s,
AVFrame
*
frame
);
126
127
/**
128
* Remove and free all side data from packet.
129
*/
130
void
ff_packet_free_side_data
(
AVPacket
*
pkt
);
131
132
extern
volatile
int
ff_avcodec_locked
;
133
int
ff_lock_avcodec
(
AVCodecContext
*log_ctx);
134
int
ff_unlock_avcodec
(
void
);
135
136
int
avpriv_lock_avformat
(
void
);
137
int
avpriv_unlock_avformat
(
void
);
138
139
/**
140
* Maximum size in bytes of extradata.
141
* This value was chosen such that every bit of the buffer is
142
* addressable by a 32-bit signed integer as used by get_bits.
143
*/
144
#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - FF_INPUT_BUFFER_PADDING_SIZE)
145
146
/**
147
* Check AVPacket size and/or allocate data.
148
*
149
* Encoders supporting AVCodec.encode2() can use this as a convenience to
150
* ensure the output packet data is large enough, whether provided by the user
151
* or allocated in this function.
152
*
153
* @param avctx the AVCodecContext of the encoder
154
* @param avpkt the AVPacket
155
* If avpkt->data is already set, avpkt->size is checked
156
* to ensure it is large enough.
157
* If avpkt->data is NULL, a new buffer is allocated.
158
* avpkt->size is set to the specified size.
159
* All other AVPacket fields will be reset with av_init_packet().
160
* @param size the minimum required packet size
161
* @return 0 on success, negative error code on failure
162
*/
163
int
ff_alloc_packet2
(
AVCodecContext
*avctx,
AVPacket
*avpkt,
int
size
);
164
165
int
ff_alloc_packet
(
AVPacket
*avpkt,
int
size
);
166
167
/**
168
* Rescale from sample rate to AVCodecContext.time_base.
169
*/
170
static
av_always_inline
int64_t
ff_samples_to_time_base
(
AVCodecContext
*avctx,
171
int64_t
samples
)
172
{
173
if
(samples ==
AV_NOPTS_VALUE
)
174
return
AV_NOPTS_VALUE
;
175
return
av_rescale_q
(samples, (
AVRational
){ 1, avctx->
sample_rate
},
176
avctx->
time_base
);
177
}
178
179
/**
180
* Get a buffer for a frame. This is a wrapper around
181
* AVCodecContext.get_buffer() and should be used instead calling get_buffer()
182
* directly.
183
*/
184
int
ff_get_buffer
(
AVCodecContext
*avctx,
AVFrame
*
frame
);
185
186
int
ff_thread_can_start_frame
(
AVCodecContext
*avctx);
187
188
int
ff_get_logical_cpus
(
AVCodecContext
*avctx);
189
190
int
avpriv_h264_has_num_reorder_frames
(
AVCodecContext
*avctx);
191
192
/**
193
* Call avcodec_open2 recursively by decrementing counter, unlocking mutex,
194
* calling the function and then restoring again. Assumes the mutex is
195
* already locked
196
*/
197
int
ff_codec_open2_recursive
(
AVCodecContext
*avctx,
const
AVCodec
*codec,
AVDictionary
**
options
);
198
199
/**
200
* Call avcodec_close recursively, counterpart to avcodec_open2_recursive.
201
*/
202
int
ff_codec_close_recursive
(
AVCodecContext
*avctx);
203
204
/**
205
* Finalize buf into extradata and set its size appropriately.
206
*/
207
int
avpriv_bprint_to_extradata
(
AVCodecContext
*avctx,
struct
AVBPrint
*buf);
208
209
#endif
/* AVCODEC_INTERNAL_H */
Generated on Sat May 25 2013 03:58:35 for FFmpeg by
1.8.2