FFmpeg
amfenc.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 #ifndef AVCODEC_AMFENC_H
20 #define AVCODEC_AMFENC_H
21 
22 #include <AMF/core/Factory.h>
23 
24 #include <AMF/components/VideoEncoderVCE.h>
25 #include <AMF/components/VideoEncoderHEVC.h>
26 #include <AMF/components/VideoEncoderAV1.h>
27 
28 #include "libavutil/fifo.h"
29 
30 #include "avcodec.h"
31 #include "hwconfig.h"
32 
33 #define MAX_LOOKAHEAD_DEPTH 41
34 
35 /**
36 * AMF trace writer callback class
37 * Used to capture all AMF logging
38 */
39 
40 typedef struct AmfTraceWriter {
41  AMFTraceWriterVtbl *vtbl;
44 
45 /**
46 * AMF encoder context
47 */
48 
49 typedef struct AmfContext {
51  // access to AMF runtime
52  amf_handle library; ///< handle to DLL library
53  AMFFactory *factory; ///< pointer to AMF factory
54  AMFDebug *debug; ///< pointer to AMF debug interface
55  AMFTrace *trace; ///< pointer to AMF trace interface
56 
57  amf_uint64 version; ///< version of AMF runtime
58  AmfTraceWriter tracer; ///< AMF writer registered with AMF
59  AMFContext *context; ///< AMF context
60  //encoder
61  AMFComponent *encoder; ///< AMF encoder object
62  amf_bool eof; ///< flag indicating EOF happened
63  AMF_SURFACE_FORMAT format; ///< AMF surface format
64 
65  AVBufferRef *hw_device_ctx; ///< pointer to HW accelerator (decoder)
66  AVBufferRef *hw_frames_ctx; ///< pointer to HW accelerator (frame allocator)
67 
70 
71  // helpers to handle async calls
73  AMFSurface *delayed_surface;
75 
76  // shift dts back by max_b_frames in timing
78  int64_t dts_delay;
79 
80  // common encoder option options
81 
83 
84  // Static options, have to be set before Init() call
85  int usage;
86  int profile;
87  int level;
88  int preencode;
89  int quality;
92 
93  // Dynamic options, can be set after Init() call
94 
100  int qp_i;
101  int qp_p;
102  int qp_b;
110  int aud;
115 
116  // HEVC - specific options
117 
120  int min_qp_i;
121  int max_qp_i;
122  int min_qp_p;
123  int max_qp_p;
124  int tier;
125 
126  // AV1 - specific options
127 
128  enum AMF_VIDEO_ENCODER_AV1_ALIGNMENT_MODE_ENUM align;
129 
130  // Preanalysis - specific options
131 
142  int pa_ltr;
148 
149 
150 } AmfContext;
151 
152 extern const AVCodecHWConfigInternal *const ff_amfenc_hw_configs[];
153 
154 /**
155 * Common encoder initization function
156 */
158 /**
159 * Common encoder termination function
160 */
162 
163 /**
164 * Ecoding one frame - common function for all AMF encoders
165 */
166 int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt);
167 
168 /**
169 * Supported formats
170 */
171 extern const enum AVPixelFormat ff_amf_pix_fmts[];
172 
173 /**
174 * Error handling helper
175 */
176 #define AMF_RETURN_IF_FALSE(avctx, exp, ret_value, /*message,*/ ...) \
177  if (!(exp)) { \
178  av_log(avctx, AV_LOG_ERROR, __VA_ARGS__); \
179  return ret_value; \
180  }
181 
182 #endif //AVCODEC_AMFENC_H
AmfContext::header_spacing
int header_spacing
Definition: amfenc.h:104
hwconfig.h
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
AmfContext::factory
AMFFactory * factory
pointer to AMF factory
Definition: amfenc.h:53
AmfContext::hwsurfaces_in_queue_max
int hwsurfaces_in_queue_max
Definition: amfenc.h:69
AmfContext::trace
AMFTrace * trace
pointer to AMF trace interface
Definition: amfenc.h:55
AmfContext::profile
int profile
Definition: amfenc.h:86
AmfContext::qp_i
int qp_i
Definition: amfenc.h:100
ff_amf_receive_packet
int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt)
Ecoding one frame - common function for all AMF encoders.
Definition: amfenc.c:586
AmfContext::ref_b_frame_delta_qp
int ref_b_frame_delta_qp
Definition: amfenc.h:91
AmfContext::pa_paq_mode
int pa_paq_mode
Definition: amfenc.h:144
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:374
AmfContext::quality
int quality
Definition: amfenc.h:89
AmfContext::qvbr_quality_level
int qvbr_quality_level
Definition: amfenc.h:113
AmfTraceWriter::vtbl
AMFTraceWriterVtbl * vtbl
Definition: amfenc.h:41
AmfContext::library
amf_handle library
handle to DLL library
Definition: amfenc.h:52
AmfContext::qp_b
int qp_b
Definition: amfenc.h:102
AmfContext::enable_vbaq
int enable_vbaq
Definition: amfenc.h:98
AmfContext::level
int level
Definition: amfenc.h:87
AmfContext::skip_frame
int skip_frame
Definition: amfenc.h:99
AmfContext::delayed_frame
AVFrame * delayed_frame
Definition: amfenc.h:74
fifo.h
AmfContext::pa_max_qp
int pa_max_qp
Definition: amfenc.h:139
AmfContext::pa_high_motion_quality_boost_mode
int pa_high_motion_quality_boost_mode
Definition: amfenc.h:146
AmfContext::enforce_hrd
int enforce_hrd
Definition: amfenc.h:96
ff_amfenc_hw_configs
const AVCodecHWConfigInternal *const ff_amfenc_hw_configs[]
Definition: amfenc.c:788
AmfContext::delayed_surface
AMFSurface * delayed_surface
Definition: amfenc.h:73
AmfContext::rate_control_mode
int rate_control_mode
Definition: amfenc.h:95
AmfContext::pa_ltr
int pa_ltr
Definition: amfenc.h:142
AmfContext::preanalysis
int preanalysis
Definition: amfenc.h:132
AmfContext::filler_data
int filler_data
Definition: amfenc.h:97
AmfContext::avclass
AVClass * avclass
Definition: amfenc.h:50
AmfContext::debug
AMFDebug * debug
pointer to AMF debug interface
Definition: amfenc.h:54
AmfContext::pa_lookahead_buffer_depth
int pa_lookahead_buffer_depth
Definition: amfenc.h:143
AmfContext::min_qp_i
int min_qp_i
Definition: amfenc.h:120
AmfContext::pa_caq_strength
int pa_caq_strength
Definition: amfenc.h:140
AmfContext::min_qp_p
int min_qp_p
Definition: amfenc.h:122
AmfTraceWriter::avctx
AVCodecContext * avctx
Definition: amfenc.h:42
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:66
AmfContext::hw_frames_ctx
AVBufferRef * hw_frames_ctx
pointer to HW accelerator (frame allocator)
Definition: amfenc.h:66
AmfContext::preencode
int preencode
Definition: amfenc.h:88
AmfContext::max_au_size
int max_au_size
Definition: amfenc.h:103
AmfContext::timestamp_list
AVFifo * timestamp_list
Definition: amfenc.h:77
AmfContext::hwsurfaces_in_queue
int hwsurfaces_in_queue
Definition: amfenc.h:68
AmfContext::pa_frame_sad
int pa_frame_sad
Definition: amfenc.h:141
AmfContext::me_half_pel
int me_half_pel
Definition: amfenc.h:108
AmfTraceWriter
AMF trace writer callback class Used to capture all AMF logging.
Definition: amfenc.h:40
AmfContext::format
AMF_SURFACE_FORMAT format
AMF surface format.
Definition: amfenc.h:63
AVFifo
Definition: fifo.c:35
AmfContext::pa_taq_mode
int pa_taq_mode
Definition: amfenc.h:145
AmfContext::pa_static_scene_detection_sensitivity
int pa_static_scene_detection_sensitivity
Definition: amfenc.h:137
AmfContext::pa_static_scene_detection
int pa_static_scene_detection
Definition: amfenc.h:136
AVCodecHWConfigInternal
Definition: hwconfig.h:25
AmfContext::dts_delay
int64_t dts_delay
Definition: amfenc.h:78
ff_amf_pix_fmts
enum AVPixelFormat ff_amf_pix_fmts[]
Supported formats.
Definition: amfenc.c:54
AmfContext::usage
int usage
Definition: amfenc.h:85
AmfContext::encoder
AMFComponent * encoder
AMF encoder object.
Definition: amfenc.h:61
AmfContext::pa_scene_change_detection
int pa_scene_change_detection
Definition: amfenc.h:134
AmfContext::coding_mode
int coding_mode
Definition: amfenc.h:107
AmfContext::gops_per_idr
int gops_per_idr
Definition: amfenc.h:118
AmfContext::pa_adaptive_mini_gop
int pa_adaptive_mini_gop
Definition: amfenc.h:147
AmfContext::b_frame_delta_qp
int b_frame_delta_qp
Definition: amfenc.h:90
AmfContext::max_consecutive_b_frames
int max_consecutive_b_frames
Definition: amfenc.h:111
AmfContext::intra_refresh_mb
int intra_refresh_mb
Definition: amfenc.h:106
AmfContext::max_qp_i
int max_qp_i
Definition: amfenc.h:121
ff_amf_encode_close
int ff_amf_encode_close(AVCodecContext *avctx)
Common encoder termination function.
Definition: amfenc.c:375
avcodec.h
AmfContext::max_b_frames
int max_b_frames
Definition: amfenc.h:112
AmfContext::tier
int tier
Definition: amfenc.h:124
AmfContext::me_quarter_pel
int me_quarter_pel
Definition: amfenc.h:109
AmfContext::max_qp_p
int max_qp_p
Definition: amfenc.h:123
AmfContext::align
enum AMF_VIDEO_ENCODER_AV1_ALIGNMENT_MODE_ENUM align
Definition: amfenc.h:128
AVCodecContext
main external API structure.
Definition: avcodec.h:445
AmfContext::header_insertion_mode
int header_insertion_mode
Definition: amfenc.h:119
AmfContext::version
amf_uint64 version
version of AMF runtime
Definition: amfenc.h:57
AmfContext::qp_p
int qp_p
Definition: amfenc.h:101
AmfContext::pa_activity_type
int pa_activity_type
Definition: amfenc.h:133
ff_amf_encode_init
int ff_amf_encode_init(AVCodecContext *avctx)
Common encoder initization function.
Definition: amfenc.c:501
AmfContext::log_to_dbg
int log_to_dbg
Definition: amfenc.h:82
AmfContext::aud
int aud
Definition: amfenc.h:110
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
AmfContext::hw_high_motion_quality_boost
int hw_high_motion_quality_boost
Definition: amfenc.h:114
AmfContext::eof
amf_bool eof
flag indicating EOF happened
Definition: amfenc.h:62
AVPacket
This structure stores compressed data.
Definition: packet.h:501
AmfContext::hw_device_ctx
AVBufferRef * hw_device_ctx
pointer to HW accelerator (decoder)
Definition: amfenc.h:65
AmfContext::b_frame_ref
int b_frame_ref
Definition: amfenc.h:105
AmfContext
AMF encoder context.
Definition: amfenc.h:49
AmfContext::tracer
AmfTraceWriter tracer
AMF writer registered with AMF.
Definition: amfenc.h:58
AmfContext::pa_initial_qp
int pa_initial_qp
Definition: amfenc.h:138
AmfContext::context
AMFContext * context
AMF context.
Definition: amfenc.h:59
AmfContext::pa_scene_change_detection_sensitivity
int pa_scene_change_detection_sensitivity
Definition: amfenc.h:135
AmfContext::delayed_drain
int delayed_drain
Definition: amfenc.h:72