Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
3a85397e
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3a85397e
编写于
6月 16, 2015
作者:
A
Anton Khirnov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
lavc: add Intel libmfx-based MPEG2 encoder
上级
69ab9f53
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
127 addition
and
4 deletion
+127
-4
Changelog
Changelog
+1
-0
configure
configure
+1
-0
libavcodec/Makefile
libavcodec/Makefile
+1
-0
libavcodec/allcodecs.c
libavcodec/allcodecs.c
+1
-0
libavcodec/qsvenc.c
libavcodec/qsvenc.c
+6
-4
libavcodec/qsvenc_mpeg2.c
libavcodec/qsvenc_mpeg2.c
+117
-0
未找到文件。
Changelog
浏览文件 @
3a85397e
...
...
@@ -38,6 +38,7 @@ version <next>:
- DirectDraw Surface image/texture decoder
- rewritten ASF demuxer
- Go2Meeting decoding support
- Intel QSV-accelerated MPEG-2 video encoding
version 11:
...
...
configure
浏览文件 @
3a85397e
...
...
@@ -1907,6 +1907,7 @@ mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
mpeg1video_encoder_select
=
"aandcttables mpegvideoenc"
mpeg2video_decoder_select
=
"error_resilience mpeg_er mpegvideo"
mpeg2video_encoder_select
=
"aandcttables mpegvideoenc"
mpeg2_qsv_encoder_select
=
"qsvenc"
mpeg4_decoder_select
=
"h263_decoder mpeg4video_parser"
mpeg4_encoder_select
=
"h263_encoder"
msmpeg4v1_decoder_select
=
"h263_decoder"
...
...
libavcodec/Makefile
浏览文件 @
3a85397e
...
...
@@ -299,6 +299,7 @@ OBJS-$(CONFIG_MPEG1VIDEO_DECODER) += mpeg12dec.o mpeg12.o mpeg12data.o
OBJS-$(CONFIG_MPEG1VIDEO_ENCODER)
+=
mpeg12enc.o mpeg12.o
OBJS-$(CONFIG_MPEG2VIDEO_DECODER)
+=
mpeg12dec.o mpeg12.o mpeg12data.o
OBJS-$(CONFIG_MPEG2VIDEO_ENCODER)
+=
mpeg12enc.o mpeg12.o
OBJS-$(CONFIG_MPEG2_QSV_ENCODER)
+=
qsvenc_mpeg2.o
OBJS-$(CONFIG_MPEG4_DECODER)
+=
xvididct.o
OBJS-$(CONFIG_MSMPEG4V1_DECODER)
+=
msmpeg4dec.o msmpeg4.o msmpeg4data.o
OBJS-$(CONFIG_MSMPEG4V2_DECODER)
+=
msmpeg4dec.o msmpeg4.o msmpeg4data.o
...
...
libavcodec/allcodecs.c
浏览文件 @
3a85397e
...
...
@@ -484,6 +484,7 @@ void avcodec_register_all(void)
REGISTER_ENCODER
(
H264_NVENC
,
h264_nvenc
);
REGISTER_ENCODER
(
H264_QSV
,
h264_qsv
);
REGISTER_ENCODER
(
HEVC_NVENC
,
hevc_nvenc
);
REGISTER_ENCODER
(
MPEG2_QSV
,
mpeg2_qsv
);
/* parsers */
REGISTER_PARSER
(
AAC
,
aac
);
...
...
libavcodec/qsvenc.c
浏览文件 @
3a85397e
...
...
@@ -153,6 +153,7 @@ static int qsv_retrieve_enc_params(AVCodecContext *avctx, QSVEncContext *q)
(
mfxExtBuffer
*
)
&
extradata
,
};
int
need_pps
=
avctx
->
codec_id
!=
AV_CODEC_ID_MPEG2VIDEO
;
int
ret
;
q
->
param
.
ExtParam
=
ext_buffers
;
...
...
@@ -164,19 +165,20 @@ static int qsv_retrieve_enc_params(AVCodecContext *avctx, QSVEncContext *q)
q
->
packet_size
=
q
->
param
.
mfx
.
BufferSizeInKB
*
1000
;
if
(
!
extradata
.
SPSBufSize
||
!
extradata
.
PPSBufSize
)
{
if
(
!
extradata
.
SPSBufSize
||
(
need_pps
&&
!
extradata
.
PPSBufSize
)
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"No extradata returned from libmfx.
\n
"
);
return
AVERROR_UNKNOWN
;
}
avctx
->
extradata
=
av_malloc
(
extradata
.
SPSBufSize
+
extradata
.
PPSBufSize
+
avctx
->
extradata
=
av_malloc
(
extradata
.
SPSBufSize
+
need_pps
*
extradata
.
PPSBufSize
+
FF_INPUT_BUFFER_PADDING_SIZE
);
if
(
!
avctx
->
extradata
)
return
AVERROR
(
ENOMEM
);
memcpy
(
avctx
->
extradata
,
sps_buf
,
extradata
.
SPSBufSize
);
memcpy
(
avctx
->
extradata
+
extradata
.
SPSBufSize
,
pps_buf
,
extradata
.
PPSBufSize
);
avctx
->
extradata_size
=
extradata
.
SPSBufSize
+
extradata
.
PPSBufSize
;
if
(
need_pps
)
memcpy
(
avctx
->
extradata
+
extradata
.
SPSBufSize
,
pps_buf
,
extradata
.
PPSBufSize
);
avctx
->
extradata_size
=
extradata
.
SPSBufSize
+
need_pps
*
extradata
.
PPSBufSize
;
memset
(
avctx
->
extradata
+
avctx
->
extradata_size
,
0
,
FF_INPUT_BUFFER_PADDING_SIZE
);
return
0
;
...
...
libavcodec/qsvenc_mpeg2.c
0 → 100644
浏览文件 @
3a85397e
/*
* Intel MediaSDK QSV based MPEG-2 encoder
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdint.h>
#include <sys/types.h>
#include <mfx/mfxvideo.h>
#include "libavutil/common.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "internal.h"
#include "qsv.h"
#include "qsv_internal.h"
#include "qsvenc.h"
typedef
struct
QSVMpeg2EncContext
{
AVClass
*
class
;
QSVEncContext
qsv
;
}
QSVMpeg2EncContext
;
static
av_cold
int
qsv_enc_init
(
AVCodecContext
*
avctx
)
{
QSVMpeg2EncContext
*
q
=
avctx
->
priv_data
;
return
ff_qsv_enc_init
(
avctx
,
&
q
->
qsv
);
}
static
int
qsv_enc_frame
(
AVCodecContext
*
avctx
,
AVPacket
*
pkt
,
const
AVFrame
*
frame
,
int
*
got_packet
)
{
QSVMpeg2EncContext
*
q
=
avctx
->
priv_data
;
return
ff_qsv_encode
(
avctx
,
&
q
->
qsv
,
pkt
,
frame
,
got_packet
);
}
static
av_cold
int
qsv_enc_close
(
AVCodecContext
*
avctx
)
{
QSVMpeg2EncContext
*
q
=
avctx
->
priv_data
;
return
ff_qsv_enc_close
(
avctx
,
&
q
->
qsv
);
}
#define OFFSET(x) offsetof(QSVMpeg2EncContext, x)
#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
static
const
AVOption
options
[]
=
{
{
"async_depth"
,
"Maximum processing parallelism"
,
OFFSET
(
qsv
.
async_depth
),
AV_OPT_TYPE_INT
,
{
.
i64
=
ASYNC_DEPTH_DEFAULT
},
0
,
INT_MAX
,
VE
},
{
"avbr_accuracy"
,
"Accuracy of the AVBR ratecontrol"
,
OFFSET
(
qsv
.
avbr_accuracy
),
AV_OPT_TYPE_INT
,
{
.
i64
=
0
},
0
,
INT_MAX
,
VE
},
{
"avbr_convergence"
,
"Convergence of the AVBR ratecontrol"
,
OFFSET
(
qsv
.
avbr_convergence
),
AV_OPT_TYPE_INT
,
{
.
i64
=
0
},
0
,
INT_MAX
,
VE
},
{
"profile"
,
NULL
,
OFFSET
(
qsv
.
profile
),
AV_OPT_TYPE_INT
,
{
.
i64
=
MFX_PROFILE_UNKNOWN
},
0
,
INT_MAX
,
VE
,
"profile"
},
{
"unknown"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
MFX_PROFILE_UNKNOWN
},
INT_MIN
,
INT_MAX
,
VE
,
"profile"
},
{
"simple"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
MFX_PROFILE_MPEG2_SIMPLE
},
INT_MIN
,
INT_MAX
,
VE
,
"profile"
},
{
"main"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
MFX_PROFILE_MPEG2_MAIN
},
INT_MIN
,
INT_MAX
,
VE
,
"profile"
},
{
"high"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
MFX_PROFILE_MPEG2_HIGH
},
INT_MIN
,
INT_MAX
,
VE
,
"profile"
},
{
"preset"
,
NULL
,
OFFSET
(
qsv
.
preset
),
AV_OPT_TYPE_INT
,
{
.
i64
=
MFX_TARGETUSAGE_BALANCED
},
0
,
7
,
VE
,
"preset"
},
{
"fast"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
MFX_TARGETUSAGE_BEST_SPEED
},
INT_MIN
,
INT_MAX
,
VE
,
"preset"
},
{
"medium"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
MFX_TARGETUSAGE_BALANCED
},
INT_MIN
,
INT_MAX
,
VE
,
"preset"
},
{
"slow"
,
NULL
,
0
,
AV_OPT_TYPE_CONST
,
{
.
i64
=
MFX_TARGETUSAGE_BEST_QUALITY
},
INT_MIN
,
INT_MAX
,
VE
,
"preset"
},
{
NULL
},
};
static
const
AVClass
class
=
{
.
class_name
=
"mpeg2_qsv encoder"
,
.
item_name
=
av_default_item_name
,
.
option
=
options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
static
const
AVCodecDefault
qsv_enc_defaults
[]
=
{
{
"b"
,
"1M"
},
{
"refs"
,
"0"
},
// same as the x264 default
{
"g"
,
"250"
},
{
"bf"
,
"3"
},
{
"flags"
,
"+cgop"
},
{
NULL
},
};
AVCodec
ff_mpeg2_qsv_encoder
=
{
.
name
=
"mpeg2_qsv"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"MPEG-2 video (Intel Quick Sync Video acceleration)"
),
.
priv_data_size
=
sizeof
(
QSVMpeg2EncContext
),
.
type
=
AVMEDIA_TYPE_VIDEO
,
.
id
=
AV_CODEC_ID_MPEG2VIDEO
,
.
init
=
qsv_enc_init
,
.
encode2
=
qsv_enc_frame
,
.
close
=
qsv_enc_close
,
.
capabilities
=
CODEC_CAP_DELAY
,
.
pix_fmts
=
(
const
enum
AVPixelFormat
[]){
AV_PIX_FMT_NV12
,
AV_PIX_FMT_QSV
,
AV_PIX_FMT_NONE
},
.
priv_class
=
&
class
,
.
defaults
=
qsv_enc_defaults
,
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录