2 * Intel MediaSDK QSV based MJPEG encoder
4 * This file is part of Libav.
6 * Libav 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.
11 * Libav 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.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with Libav; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 #include <sys/types.h>
25 #include <mfx/mfxvideo.h>
27 #include "libavutil/common.h"
28 #include "libavutil/opt.h"
34 #include "qsv_internal.h"
37 typedef struct QSVMJPEGEncContext
{
42 static av_cold
int qsv_enc_init(AVCodecContext
*avctx
)
44 QSVMJPEGEncContext
*q
= avctx
->priv_data
;
46 return ff_qsv_enc_init(avctx
, &q
->qsv
);
49 static int qsv_enc_frame(AVCodecContext
*avctx
, AVPacket
*pkt
,
50 const AVFrame
*frame
, int *got_packet
)
52 QSVMJPEGEncContext
*q
= avctx
->priv_data
;
54 return ff_qsv_encode(avctx
, &q
->qsv
, pkt
, frame
, got_packet
);
57 static av_cold
int qsv_enc_close(AVCodecContext
*avctx
)
59 QSVMJPEGEncContext
*q
= avctx
->priv_data
;
61 return ff_qsv_enc_close(avctx
, &q
->qsv
);
64 #define OFFSET(x) offsetof(QSVMJPEGEncContext, x)
65 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
66 static const AVOption options
[] = {
67 { "async_depth", "Maximum processing parallelism", OFFSET(qsv
.async_depth
), AV_OPT_TYPE_INT
, { .i64
= ASYNC_DEPTH_DEFAULT
}, 1, INT_MAX
, VE
},
71 static const AVClass
class = {
72 .class_name
= "mjpeg_qsv encoder",
73 .item_name
= av_default_item_name
,
75 .version
= LIBAVUTIL_VERSION_INT
,
78 static const AVCodecDefault qsv_enc_defaults
[] = {
79 { "global_quality", "80" },
83 AVCodec ff_mjpeg_qsv_encoder
= {
85 .long_name
= NULL_IF_CONFIG_SMALL("MJPEG (Intel Quick Sync Video acceleration)"),
86 .priv_data_size
= sizeof(QSVMJPEGEncContext
),
87 .type
= AVMEDIA_TYPE_VIDEO
,
88 .id
= AV_CODEC_ID_MJPEG
,
90 .encode2
= qsv_enc_frame
,
91 .close
= qsv_enc_close
,
92 .capabilities
= AV_CODEC_CAP_DELAY
| AV_CODEC_CAP_HYBRID
,
93 .pix_fmts
= (const enum AVPixelFormat
[]){ AV_PIX_FMT_NV12
,
97 .defaults
= qsv_enc_defaults
,
98 .wrapper_name
= "qsv",