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/ColorSpace.h>
25 #include <AMF/components/VideoEncoderVCE.h>
26 #include <AMF/components/VideoEncoderHEVC.h>
27 #include <AMF/components/VideoEncoderAV1.h>
28 
29 #include "libavutil/fifo.h"
30 
31 #include "avcodec.h"
32 #include "hwconfig.h"
33 
34 #define MAX_LOOKAHEAD_DEPTH 41
35 
36 /**
37 * AMF encoder context
38 */
39 
40 typedef struct AMFEncoderContext {
42  // access to AMF runtime
44 
45  //encoder
46  AMFComponent *encoder; ///< AMF encoder object
47  amf_bool eof; ///< flag indicating EOF happened
48  AMF_SURFACE_FORMAT format; ///< AMF surface format
49 
53 
54  // helpers to handle async calls
56 
57  // shift dts back by max_b_frames in timing
62 
63  // common encoder options
64 
65  // Static options, have to be set before Init() call
66  int usage;
67  int profile;
68  int level;
69  int latency;
70  int preencode;
71  int quality;
74  int bit_depth;
76 
77  // Dynamic options, can be set after Init() call
78 
84  int qp_i;
85  int qp_p;
86  int qp_b;
94  int aud;
100 
101  // HEVC - specific options
102 
105  int min_qp_i;
106  int max_qp_i;
107  int min_qp_p;
108  int max_qp_p;
109  int min_qp_b;
110  int max_qp_b;
111  int tier;
112 
113  // AV1 - specific options
114 
115  enum AMF_VIDEO_ENCODER_AV1_ALIGNMENT_MODE_ENUM align;
116  enum AMF_VIDEO_ENCODER_AV1_AQ_MODE_ENUM aq_mode;
117 
118  // Preanalysis - specific options
119 
130  int pa_ltr;
136 
137 
139 
140 extern const AVCodecHWConfigInternal *const ff_amfenc_hw_configs[];
141 
142 /**
143 * Common encoder initization function
144 */
146 /**
147 * Common encoder termination function
148 */
150 
151 /**
152 * Ecoding one frame - common function for all AMF encoders
153 */
154 int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt);
155 
156 /**
157 * Supported formats
158 */
159 extern const enum AVPixelFormat ff_amf_pix_fmts[];
160 
162 
163 /**
164 * Error handling helper
165 */
166 #define AMF_RETURN_IF_FALSE(avctx, exp, ret_value, /*message,*/ ...) \
167  if (!(exp)) { \
168  av_log(avctx, AV_LOG_ERROR, __VA_ARGS__); \
169  return ret_value; \
170  }
171 
172 #endif //AVCODEC_AMFENC_H
hwconfig.h
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
AMFEncoderContext::min_qp_i
int min_qp_i
Definition: amfenc.h:105
AMFEncoderContext::encoded_frame
int64_t encoded_frame
Definition: amfenc.h:61
AMFEncoderContext::skip_frame
int skip_frame
Definition: amfenc.h:83
AMFEncoderContext::min_qp_p
int min_qp_p
Definition: amfenc.h:107
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:374
int64_t
long long int64_t
Definition: coverity.c:34
AMFEncoderContext::usage
int usage
Definition: amfenc.h:66
AMFEncoderContext::pa_adaptive_mini_gop
int pa_adaptive_mini_gop
Definition: amfenc.h:135
AMFEncoderContext::gops_per_idr
int gops_per_idr
Definition: amfenc.h:103
AMFEncoderContext::align
enum AMF_VIDEO_ENCODER_AV1_ALIGNMENT_MODE_ENUM align
Definition: amfenc.h:115
AMFEncoderContext::query_timeout_supported
int query_timeout_supported
Definition: amfenc.h:52
AMFEncoderContext::level
int level
Definition: amfenc.h:68
AMFEncoderContext::max_b_frames
int max_b_frames
Definition: amfenc.h:96
AMFEncoderContext::ref_b_frame_delta_qp
int ref_b_frame_delta_qp
Definition: amfenc.h:73
AMFEncoderContext::hwsurfaces_in_queue
int hwsurfaces_in_queue
Definition: amfenc.h:50
fifo.h
AMFEncoderContext::pa_scene_change_detection_sensitivity
int pa_scene_change_detection_sensitivity
Definition: amfenc.h:123
AMFEncoderContext::delayed_drain
int delayed_drain
Definition: amfenc.h:55
AMFEncoderContext::me_half_pel
int me_half_pel
Definition: amfenc.h:92
AMFEncoderContext::bit_depth
int bit_depth
Definition: amfenc.h:74
ff_amfenc_hw_configs
const AVCodecHWConfigInternal *const ff_amfenc_hw_configs[]
Definition: amfenc.c:679
AMFEncoderContext::preencode
int preencode
Definition: amfenc.h:70
AMFEncoderContext::aq_mode
enum AMF_VIDEO_ENCODER_AV1_AQ_MODE_ENUM aq_mode
Definition: amfenc.h:116
AMFEncoderContext::qp_b
int qp_b
Definition: amfenc.h:86
AMFEncoderContext::filler_data
int filler_data
Definition: amfenc.h:81
AMFEncoderContext::qp_p
int qp_p
Definition: amfenc.h:85
AMFEncoderContext::b_frame_ref
int b_frame_ref
Definition: amfenc.h:89
AMFEncoderContext::pa_initial_qp
int pa_initial_qp
Definition: amfenc.h:126
AMFEncoderContext::forced_idr
int forced_idr
Definition: amfenc.h:99
AMFEncoderContext
AMF encoder context.
Definition: amfenc.h:40
AMFEncoderContext::profile
int profile
Definition: amfenc.h:67
AMFEncoderContext::pa_caq_strength
int pa_caq_strength
Definition: amfenc.h:128
AMFEncoderContext::hwsurfaces_in_queue_max
int hwsurfaces_in_queue_max
Definition: amfenc.h:51
AMFEncoderContext::pa_taq_mode
int pa_taq_mode
Definition: amfenc.h:133
AMFEncoderContext::pa_high_motion_quality_boost_mode
int pa_high_motion_quality_boost_mode
Definition: amfenc.h:134
AMFEncoderContext::header_spacing
int header_spacing
Definition: amfenc.h:88
AMFEncoderContext::quality
int quality
Definition: amfenc.h:71
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:75
AMFEncoderContext::max_au_size
int max_au_size
Definition: amfenc.h:87
AMFEncoderContext::coding_mode
int coding_mode
Definition: amfenc.h:91
AMFEncoderContext::max_qp_p
int max_qp_p
Definition: amfenc.h:108
AMFEncoderContext::hw_high_motion_quality_boost
int hw_high_motion_quality_boost
Definition: amfenc.h:98
AMFEncoderContext::pa_activity_type
int pa_activity_type
Definition: amfenc.h:121
AMFEncoderContext::pa_paq_mode
int pa_paq_mode
Definition: amfenc.h:132
AMFEncoderContext::latency
int latency
Definition: amfenc.h:69
AMFEncoderContext::avclass
AVClass * avclass
Definition: amfenc.h:41
AVFifo
Definition: fifo.c:35
AMFEncoderContext::rate_control_mode
int rate_control_mode
Definition: amfenc.h:79
AVCodecHWConfigInternal
Definition: hwconfig.h:25
AMFEncoderContext::header_insertion_mode
int header_insertion_mode
Definition: amfenc.h:104
ff_amf_pix_fmts
enum AVPixelFormat ff_amf_pix_fmts[]
Supported formats.
Definition: amfenc.c:109
AMFEncoderContext::device_ctx_ref
AVBufferRef * device_ctx_ref
Definition: amfenc.h:43
AMFEncoderContext::aud
int aud
Definition: amfenc.h:94
AMFEncoderContext::pa_max_qp
int pa_max_qp
Definition: amfenc.h:127
AMFEncoderContext::intra_refresh_mb
int intra_refresh_mb
Definition: amfenc.h:90
AMFEncoderContext::pa_frame_sad
int pa_frame_sad
Definition: amfenc.h:129
AMFEncoderContext::min_qp_b
int min_qp_b
Definition: amfenc.h:109
AMFEncoderContext::eof
amf_bool eof
flag indicating EOF happened
Definition: amfenc.h:47
AMFEncoderContext::pa_static_scene_detection
int pa_static_scene_detection
Definition: amfenc.h:124
AMFEncoderContext::dts_delay
int64_t dts_delay
Definition: amfenc.h:59
AMFEncoderContext::qvbr_quality_level
int qvbr_quality_level
Definition: amfenc.h:97
AMFEncoderContext::format
AMF_SURFACE_FORMAT format
AMF surface format.
Definition: amfenc.h:48
AMFEncoderContext::submitted_frame
int64_t submitted_frame
Definition: amfenc.h:60
AMFEncoderContext::enforce_hrd
int enforce_hrd
Definition: amfenc.h:80
ff_amf_encode_close
int ff_amf_encode_close(AVCodecContext *avctx)
Common encoder termination function.
Definition: amfenc.c:177
AMFEncoderContext::me_quarter_pel
int me_quarter_pel
Definition: amfenc.h:93
avcodec.h
AMFEncoderContext::pa_ltr
int pa_ltr
Definition: amfenc.h:130
AMFEncoderContext::max_qp_i
int max_qp_i
Definition: amfenc.h:106
AMFEncoderContext::timestamp_list
AVFifo * timestamp_list
Definition: amfenc.h:58
AMFEncoderContext::b_frame_delta_qp
int b_frame_delta_qp
Definition: amfenc.h:72
AMFEncoderContext::pa_scene_change_detection
int pa_scene_change_detection
Definition: amfenc.h:122
AMFEncoderContext::preanalysis
int preanalysis
Definition: amfenc.h:120
AVCodecContext
main external API structure.
Definition: avcodec.h:431
AMFEncoderContext::pa_lookahead_buffer_depth
int pa_lookahead_buffer_depth
Definition: amfenc.h:131
AMFEncoderContext::pa_static_scene_detection_sensitivity
int pa_static_scene_detection_sensitivity
Definition: amfenc.h:125
AMFEncoderContext::max_qp_b
int max_qp_b
Definition: amfenc.h:110
AMFEncoderContext::encoder
AMFComponent * encoder
AMF encoder object.
Definition: amfenc.h:46
ff_amf_get_color_profile
int ff_amf_get_color_profile(AVCodecContext *avctx)
Definition: amfenc.c:644
ff_amf_encode_init
int ff_amf_encode_init(AVCodecContext *avctx)
Common encoder initization function.
Definition: amfenc.c:277
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
AMFEncoderContext::tier
int tier
Definition: amfenc.h:111
AMFEncoderContext::smart_access_video
int smart_access_video
Definition: amfenc.h:75
AVPacket
This structure stores compressed data.
Definition: packet.h:512
AMFEncoderContext::max_consecutive_b_frames
int max_consecutive_b_frames
Definition: amfenc.h:95
AMFEncoderContext::qp_i
int qp_i
Definition: amfenc.h:84
AMFEncoderContext::enable_vbaq
int enable_vbaq
Definition: amfenc.h:82