FFmpeg
encode.h
Go to the documentation of this file.
1 /*
2  * generic encoding-related code
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 AVCODEC_ENCODE_H
22 #define AVCODEC_ENCODE_H
23 
24 #include "libavutil/frame.h"
25 
26 #include "avcodec.h"
27 #include "packet.h"
28 
29 /**
30  * Used by some encoders as upper bound for the length of headers.
31  * TODO: Use proper codec-specific upper bounds.
32  */
33 #define FF_INPUT_BUFFER_MIN_SIZE 16384
34 
35 /**
36  * Called by encoders to get the next frame for encoding.
37  *
38  * @param frame An empty frame to be filled with data.
39  * @return 0 if a new reference has been successfully written to frame
40  * AVERROR(EAGAIN) if no data is currently available
41  * AVERROR_EOF if end of stream has been reached, so no more data
42  * will be available
43  */
45 
46 /**
47  * Get a buffer for a packet. This is a wrapper around
48  * AVCodecContext.get_encode_buffer() and should be used instead calling get_encode_buffer()
49  * directly.
50  */
51 int ff_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int flags);
52 
53 /**
54  * Allocate buffers for a frame. Encoder equivalent to ff_get_buffer().
55  */
57 
58 /**
59  * Check AVPacket size and allocate data.
60  *
61  * Encoders of type FF_CODEC_CB_TYPE_ENCODE can use this as a convenience to
62  * obtain a big enough buffer for the encoded bitstream.
63  *
64  * @param avctx the AVCodecContext of the encoder
65  * @param avpkt The AVPacket: on success, avpkt->data will point to a buffer
66  * of size at least `size`; the packet will not be refcounted.
67  * This packet must be initially blank.
68  * @param size an upper bound of the size of the packet to encode
69  * @return non negative on success, negative error code on failure
70  */
71 int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size);
72 
73 /**
74  * Propagate user opaque values from the frame to avctx/pkt as needed.
75  */
77  AVPacket *pkt, const AVFrame *frame);
78 
80  AVFrame *frame, int *got_packet);
81 
82 /**
83  * Add a CPB properties side data to an encoding context.
84  */
86 
87 /**
88  * Rescale from sample rate to AVCodecContext.time_base.
89  */
91  int64_t samples)
92 {
93  if (samples == AV_NOPTS_VALUE)
94  return AV_NOPTS_VALUE;
95  return av_rescale_q(samples, (AVRational){ 1, avctx->sample_rate },
96  avctx->time_base);
97 }
98 
99 #endif /* AVCODEC_ENCODE_H */
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:1050
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:340
ff_encode_encode_cb
int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt, AVFrame *frame, int *got_packet)
Definition: encode.c:247
pkt
AVPacket * pkt
Definition: movenc.c:59
av_rescale_q
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
Definition: mathematics.c:142
AVCPBProperties
This structure describes the bitrate properties of an encoded bitstream.
Definition: defs.h:269
frame
static AVFrame * frame
Definition: demux_decode.c:54
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
ff_samples_to_time_base
static av_always_inline int64_t ff_samples_to_time_base(const AVCodecContext *avctx, int64_t samples)
Rescale from sample rate to AVCodecContext.time_base.
Definition: encode.h:90
ff_encode_alloc_frame
int ff_encode_alloc_frame(AVCodecContext *avctx, AVFrame *frame)
Allocate buffers for a frame.
Definition: encode.c:794
AVCodecContext::time_base
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition: avcodec.h:544
size
int size
Definition: twinvq_data.h:10344
AV_NOPTS_VALUE
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:248
frame.h
packet.h
av_always_inline
#define av_always_inline
Definition: attributes.h:49
ff_encode_get_frame
int ff_encode_get_frame(AVCodecContext *avctx, AVFrame *frame)
Called by encoders to get the next frame for encoding.
Definition: encode.c:204
avcodec.h
AVCodecContext
main external API structure.
Definition: avcodec.h:445
ff_alloc_packet
int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
Check AVPacket size and allocate data.
Definition: encode.c:61
samples
Filter the word “frame” indicates either a video frame or a group of audio samples
Definition: filter_design.txt:8
ff_get_encode_buffer
int ff_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int flags)
Get a buffer for a packet.
Definition: encode.c:105
ff_encode_add_cpb_side_data
AVCPBProperties * ff_encode_add_cpb_side_data(AVCodecContext *avctx)
Add a CPB properties side data to an encoding context.
Definition: encode.c:856
AVPacket
This structure stores compressed data.
Definition: packet.h:499
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:474
ff_encode_reordered_opaque
int ff_encode_reordered_opaque(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame)
Propagate user opaque values from the frame to avctx/pkt as needed.
Definition: encode.c:234