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_ENCODE_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
void
avpriv_color_frame
(
AVFrame
*
frame
,
const
int
color
[4]);
129
130
/**
131
* Remove and free all side data from packet.
132
*/
133
void
ff_packet_free_side_data
(
AVPacket
*
pkt
);
134
135
extern
volatile
int
ff_avcodec_locked
;
136
int
ff_lock_avcodec
(
AVCodecContext
*log_ctx);
137
int
ff_unlock_avcodec
(
void
);
138
139
int
avpriv_lock_avformat
(
void
);
140
int
avpriv_unlock_avformat
(
void
);
141
142
/**
143
* Maximum size in bytes of extradata.
144
* This value was chosen such that every bit of the buffer is
145
* addressable by a 32-bit signed integer as used by get_bits.
146
*/
147
#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - FF_INPUT_BUFFER_PADDING_SIZE)
148
149
/**
150
* Check AVPacket size and/or allocate data.
151
*
152
* Encoders supporting AVCodec.encode2() can use this as a convenience to
153
* ensure the output packet data is large enough, whether provided by the user
154
* or allocated in this function.
155
*
156
* @param avctx the AVCodecContext of the encoder
157
* @param avpkt the AVPacket
158
* If avpkt->data is already set, avpkt->size is checked
159
* to ensure it is large enough.
160
* If avpkt->data is NULL, a new buffer is allocated.
161
* avpkt->size is set to the specified size.
162
* All other AVPacket fields will be reset with av_init_packet().
163
* @param size the minimum required packet size
164
* @return 0 on success, negative error code on failure
165
*/
166
int
ff_alloc_packet2
(
AVCodecContext
*avctx,
AVPacket
*avpkt,
int
size
);
167
168
int
ff_alloc_packet
(
AVPacket
*avpkt,
int
size
);
169
170
/**
171
* Rescale from sample rate to AVCodecContext.time_base.
172
*/
173
static
av_always_inline
int64_t
ff_samples_to_time_base
(
AVCodecContext
*avctx,
174
int64_t
samples
)
175
{
176
if
(samples ==
AV_NOPTS_VALUE
)
177
return
AV_NOPTS_VALUE
;
178
return
av_rescale_q
(samples, (
AVRational
){ 1, avctx->
sample_rate
},
179
avctx->
time_base
);
180
}
181
182
/**
183
* Get a buffer for a frame. This is a wrapper around
184
* AVCodecContext.get_buffer() and should be used instead calling get_buffer()
185
* directly.
186
*/
187
int
ff_get_buffer
(
AVCodecContext
*avctx,
AVFrame
*
frame
);
188
189
int
ff_thread_can_start_frame
(
AVCodecContext
*avctx);
190
191
int
ff_get_logical_cpus
(
AVCodecContext
*avctx);
192
193
int
avpriv_h264_has_num_reorder_frames
(
AVCodecContext
*avctx);
194
195
void
ff_print_debug_info2
(
AVCodecContext
*avctx,
AVFrame
*pict,
uint8_t
*mbskip_table,
196
uint8_t
*visualization_buffer[3],
int
*low_delay,
197
int
mb_width,
int
mb_height,
int
mb_stride,
int
quarter_sample);
198
199
/**
200
* Call avcodec_open2 recursively by decrementing counter, unlocking mutex,
201
* calling the function and then restoring again. Assumes the mutex is
202
* already locked
203
*/
204
int
ff_codec_open2_recursive
(
AVCodecContext
*avctx,
const
AVCodec
*codec,
AVDictionary
**
options
);
205
206
/**
207
* Call avcodec_close recursively, counterpart to avcodec_open2_recursive.
208
*/
209
int
ff_codec_close_recursive
(
AVCodecContext
*avctx);
210
211
/**
212
* Finalize buf into extradata and set its size appropriately.
213
*/
214
int
avpriv_bprint_to_extradata
(
AVCodecContext
*avctx,
struct
AVBPrint
*buf);
215
216
AVDictionary
**
ff_frame_get_metadatap
(
AVFrame
*
frame
);
217
218
#endif
/* AVCODEC_INTERNAL_H */
Generated on Sat May 25 2013 04:01:05 for FFmpeg by
1.8.2