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  * Called by encoders to get the next frame for encoding.
31  *
32  * @param frame An empty frame to be filled with data.
33  * @return 0 if a new reference has been successfully written to frame
34  * AVERROR(EAGAIN) if no data is currently available
35  * AVERROR_EOF if end of stream has been reached, so no more data
36  * will be available
37  */
39 
40 /**
41  * Get a buffer for a packet. This is a wrapper around
42  * AVCodecContext.get_encode_buffer() and should be used instead calling get_encode_buffer()
43  * directly.
44  */
45 int ff_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int flags);
46 
47 /**
48  * Allocate buffers for a frame. Encoder equivalent to ff_get_buffer().
49  */
51 
52 /**
53  * Check AVPacket size and allocate data.
54  *
55  * Encoders of type FF_CODEC_CB_TYPE_ENCODE can use this as a convenience to
56  * obtain a big enough buffer for the encoded bitstream.
57  *
58  * @param avctx the AVCodecContext of the encoder
59  * @param avpkt The AVPacket: on success, avpkt->data will point to a buffer
60  * of size at least `size`; the packet will not be refcounted.
61  * This packet must be initially blank.
62  * @param size an upper bound of the size of the packet to encode
63  * @return non negative on success, negative error code on failure
64  */
65 int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size);
66 
67 /**
68  * Propagate user opaque values from the frame to avctx/pkt as needed.
69  */
71  AVPacket *pkt, const AVFrame *frame);
72 
74  AVFrame *frame, int *got_packet);
75 
76 /**
77  * Add a CPB properties side data to an encoding context.
78  */
80 
81 /**
82  * Rescale from sample rate to AVCodecContext.time_base.
83  */
85  int64_t samples)
86 {
87  if (samples == AV_NOPTS_VALUE)
88  return AV_NOPTS_VALUE;
89  return av_rescale_q(samples, (AVRational){ 1, avctx->sample_rate },
90  avctx->time_base);
91 }
92 
93 #endif /* AVCODEC_ENCODE_H */
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:1064
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:258
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:84
ff_encode_alloc_frame
int ff_encode_alloc_frame(AVCodecContext *avctx, AVFrame *frame)
Allocate buffers for a frame.
Definition: encode.c:808
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:563
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:209
avcodec.h
AVCodecContext
main external API structure.
Definition: avcodec.h:441
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:870
AVPacket
This structure stores compressed data.
Definition: packet.h:468
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:239