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 
27 #include "libavutil/fifo.h"
28 
29 #include "avcodec.h"
30 
31 
32 /**
33 * AMF trace writer callback class
34 * Used to capture all AMF logging
35 */
36 
37 typedef struct AmfTraceWriter {
38  AMFTraceWriterVtbl *vtbl;
41 
42 /**
43 * AMF encoder context
44 */
45 
46 typedef struct AmfContext {
48  // access to AMF runtime
49  amf_handle library; ///< handle to DLL library
50  AMFFactory *factory; ///< pointer to AMF factory
51  AMFDebug *debug; ///< pointer to AMF debug interface
52  AMFTrace *trace; ///< pointer to AMF trace interface
53 
54  amf_uint64 version; ///< version of AMF runtime
55  AmfTraceWriter tracer; ///< AMF writer registered with AMF
56  AMFContext *context; ///< AMF context
57  //encoder
58  AMFComponent *encoder; ///< AMF encoder object
59  amf_bool eof; ///< flag indicating EOF happened
60  AMF_SURFACE_FORMAT format; ///< AMF surface format
61 
62  AVBufferRef *hw_device_ctx; ///< pointer to HW accelerator (decoder)
63  AVBufferRef *hw_frames_ctx; ///< pointer to HW accelerator (frame allocator)
64 
67 
68  // helpers to handle async calls
70  AMFSurface *delayed_surface;
72 
73  // shift dts back by max_b_frames in timing
75  int64_t dts_delay;
76 
77  // common encoder option options
78 
80 
81  // Static options, have to be set before Init() call
82  int usage;
83  int profile;
84  int level;
86  int quality;
89 
90  // Dynamic options, can be set after Init() call
91 
97  int qp_i;
98  int qp_p;
99  int qp_b;
107  int aud;
108 
109  // HEVC - specific options
110 
113  int min_qp_i;
114  int max_qp_i;
115  int min_qp_p;
116  int max_qp_p;
117  int tier;
118 } AmfContext;
119 
120 /**
121 * Common encoder initization function
122 */
124 /**
125 * Common encoder termination function
126 */
128 
129 /**
130 * Ecoding one frame - common function for all AMF encoders
131 */
132 
133 int ff_amf_send_frame(AVCodecContext *avctx, const AVFrame *frame);
134 int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt);
135 
136 /**
137 * Supported formats
138 */
139 extern const enum AVPixelFormat ff_amf_pix_fmts[];
140 
141 /**
142 * Error handling helper
143 */
144 #define AMF_RETURN_IF_FALSE(avctx, exp, ret_value, /*message,*/ ...) \
145  if (!(exp)) { \
146  av_log(avctx, AV_LOG_ERROR, __VA_ARGS__); \
147  return ret_value; \
148  }
149 
150 #endif //AVCODEC_AMFENC_H
AmfContext::header_spacing
int header_spacing
Definition: amfenc.h:101
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
AmfContext::factory
AMFFactory * factory
pointer to AMF factory
Definition: amfenc.h:50
AmfContext::hwsurfaces_in_queue_max
int hwsurfaces_in_queue_max
Definition: amfenc.h:66
AmfContext::trace
AMFTrace * trace
pointer to AMF trace interface
Definition: amfenc.h:52
AmfContext::profile
int profile
Definition: amfenc.h:83
AmfContext::qp_i
int qp_i
Definition: amfenc.h:97
ff_amf_receive_packet
int ff_amf_receive_packet(AVCodecContext *avctx, AVPacket *avpkt)
Definition: amfenc.c:704
AmfContext::ref_b_frame_delta_qp
int ref_b_frame_delta_qp
Definition: amfenc.h:88
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:295
AmfContext::quality
int quality
Definition: amfenc.h:86
AmfTraceWriter::vtbl
AMFTraceWriterVtbl * vtbl
Definition: amfenc.h:38
AmfContext::library
amf_handle library
handle to DLL library
Definition: amfenc.h:49
AmfContext::qp_b
int qp_b
Definition: amfenc.h:99
AmfContext::enable_vbaq
int enable_vbaq
Definition: amfenc.h:95
AmfContext::level
int level
Definition: amfenc.h:84
AmfContext::skip_frame
int skip_frame
Definition: amfenc.h:96
AVFifoBuffer
Definition: fifo.h:31
AmfContext::delayed_frame
AVFrame * delayed_frame
Definition: amfenc.h:71
fifo.h
AmfContext::enforce_hrd
int enforce_hrd
Definition: amfenc.h:93
AmfContext::delayed_surface
AMFSurface * delayed_surface
Definition: amfenc.h:70
AmfContext::rate_control_mode
int rate_control_mode
Definition: amfenc.h:92
AmfContext::preanalysis
int preanalysis
Definition: amfenc.h:85
AmfContext::filler_data
int filler_data
Definition: amfenc.h:94
AmfContext::avclass
AVClass * avclass
Definition: amfenc.h:47
AmfContext::debug
AMFDebug * debug
pointer to AMF debug interface
Definition: amfenc.h:51
AmfContext::min_qp_i
int min_qp_i
Definition: amfenc.h:113
AmfContext::min_qp_p
int min_qp_p
Definition: amfenc.h:115
AmfTraceWriter::avctx
AVCodecContext * avctx
Definition: amfenc.h:39
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:67
AmfContext::hw_frames_ctx
AVBufferRef * hw_frames_ctx
pointer to HW accelerator (frame allocator)
Definition: amfenc.h:63
AmfContext::timestamp_list
AVFifoBuffer * timestamp_list
Definition: amfenc.h:74
AmfContext::max_au_size
int max_au_size
Definition: amfenc.h:100
AmfContext::hwsurfaces_in_queue
int hwsurfaces_in_queue
Definition: amfenc.h:65
AmfContext::me_half_pel
int me_half_pel
Definition: amfenc.h:105
AmfTraceWriter
AMF trace writer callback class Used to capture all AMF logging.
Definition: amfenc.h:37
AmfContext::format
AMF_SURFACE_FORMAT format
AMF surface format.
Definition: amfenc.h:60
AmfContext::dts_delay
int64_t dts_delay
Definition: amfenc.h:75
ff_amf_pix_fmts
enum AVPixelFormat ff_amf_pix_fmts[]
Supported formats.
Definition: amfenc.c:52
AmfContext::usage
int usage
Definition: amfenc.h:82
AmfContext::encoder
AMFComponent * encoder
AMF encoder object.
Definition: amfenc.h:58
AmfContext::coding_mode
int coding_mode
Definition: amfenc.h:104
AmfContext::gops_per_idr
int gops_per_idr
Definition: amfenc.h:111
AmfContext::b_frame_delta_qp
int b_frame_delta_qp
Definition: amfenc.h:87
AmfContext::intra_refresh_mb
int intra_refresh_mb
Definition: amfenc.h:103
AmfContext::max_qp_i
int max_qp_i
Definition: amfenc.h:114
ff_amf_encode_close
int ff_amf_encode_close(AVCodecContext *avctx)
Common encoder termination function.
Definition: amfenc.c:356
avcodec.h
ff_amf_send_frame
int ff_amf_send_frame(AVCodecContext *avctx, const AVFrame *frame)
Ecoding one frame - common function for all AMF encoders.
Definition: amfenc.c:578
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
AmfContext::tier
int tier
Definition: amfenc.h:117
AmfContext::me_quarter_pel
int me_quarter_pel
Definition: amfenc.h:106
AmfContext::max_qp_p
int max_qp_p
Definition: amfenc.h:116
AVCodecContext
main external API structure.
Definition: avcodec.h:1565
AmfContext::header_insertion_mode
int header_insertion_mode
Definition: amfenc.h:112
AmfContext::version
amf_uint64 version
version of AMF runtime
Definition: amfenc.h:54
AmfContext::qp_p
int qp_p
Definition: amfenc.h:98
ff_amf_encode_init
int ff_amf_encode_init(AVCodecContext *avctx)
Common encoder initization function.
Definition: amfenc.c:493
AmfContext::log_to_dbg
int log_to_dbg
Definition: amfenc.h:79
AmfContext::aud
int aud
Definition: amfenc.h:107
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:81
AmfContext::eof
amf_bool eof
flag indicating EOF happened
Definition: amfenc.h:59
AVPacket
This structure stores compressed data.
Definition: avcodec.h:1454
AmfContext::hw_device_ctx
AVBufferRef * hw_device_ctx
pointer to HW accelerator (decoder)
Definition: amfenc.h:62
AmfContext::b_frame_ref
int b_frame_ref
Definition: amfenc.h:102
AmfContext
AMF encoder context.
Definition: amfenc.h:46
AmfContext::tracer
AmfTraceWriter tracer
AMF writer registered with AMF.
Definition: amfenc.h:55
AmfContext::context
AMFContext * context
AMF context.
Definition: amfenc.h:56
AmfContext::delayed_drain
int delayed_drain
Definition: amfenc.h:69