Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
d0a63d8b
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,发现更多精彩内容 >>
提交
d0a63d8b
编写于
3月 13, 2015
作者:
A
Anton Khirnov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
qsvdec: split off some code that will be shared with the encoder
上级
b04d009b
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
163 addition
and
95 deletion
+163
-95
configure
configure
+2
-0
libavcodec/Makefile
libavcodec/Makefile
+2
-1
libavcodec/qsv.c
libavcodec/qsv.c
+115
-0
libavcodec/qsv_internal.h
libavcodec/qsv_internal.h
+38
-0
libavcodec/qsvdec.c
libavcodec/qsvdec.c
+5
-84
libavcodec/qsvdec.h
libavcodec/qsvdec.h
+0
-10
libavcodec/qsvdec_h264.c
libavcodec/qsvdec_h264.c
+1
-0
未找到文件。
configure
浏览文件 @
d0a63d8b
...
...
@@ -1597,6 +1597,7 @@ CONFIG_EXTRA="
nettle
pixblockdsp
qpeldsp
qsv
qsvdec
rangecoder
riffdec
...
...
@@ -1760,6 +1761,7 @@ mpegaudio_select="mpegaudiodsp"
mpegaudiodsp_select
=
"dct"
mpegvideo_select
=
"blockdsp hpeldsp idctdsp me_cmp videodsp"
mpegvideoenc_select
=
"me_cmp mpegvideo pixblockdsp qpeldsp"
qsvdec_select
=
"qsv"
# decoders / encoders
aac_decoder_select
=
"imdct15 mdct sinewin"
...
...
libavcodec/Makefile
浏览文件 @
d0a63d8b
...
...
@@ -80,6 +80,7 @@ OBJS-$(CONFIG_MPEGVIDEOENC) += mpegvideo_enc.o mpeg12data.o \
mpegvideoencdsp.o
OBJS-$(CONFIG_PIXBLOCKDSP)
+=
pixblockdsp.o
OBJS-$(CONFIG_QPELDSP)
+=
qpeldsp.o
OBJS-$(CONFIG_QSV)
+=
qsv.o
OBJS-$(CONFIG_QSVDEC)
+=
qsvdec.o
OBJS-$(CONFIG_RANGECODER)
+=
rangecoder.o
RDFT-OBJS-$(CONFIG_HARDCODED_TABLES)
+=
sin_tables.o
...
...
@@ -719,7 +720,7 @@ SKIPHEADERS += %_tablegen.h \
SKIPHEADERS-$(CONFIG_DXVA2)
+=
dxva2.h dxva2_internal.h
SKIPHEADERS-$(CONFIG_LIBSCHROEDINGER)
+=
libschroedinger.h
SKIPHEADERS-$(CONFIG_MPEG_XVMC_DECODER)
+=
xvmc.h
SKIPHEADERS-$(CONFIG_QSVDEC)
+=
qsv.h qsvdec.h
SKIPHEADERS-$(CONFIG_QSVDEC)
+=
qsv.h qsvdec.h
qsv_internal.h
SKIPHEADERS-$(CONFIG_VAAPI)
+=
vaapi_internal.h
SKIPHEADERS-$(CONFIG_VDA)
+=
vda.h vda_internal.h
SKIPHEADERS-$(CONFIG_VDPAU)
+=
vdpau.h vdpau_internal.h
...
...
libavcodec/qsv.c
0 → 100644
浏览文件 @
d0a63d8b
/*
* Intel MediaSDK QSV encoder/decoder shared code
*
* 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 <mfx/mfxvideo.h>
#include "libavutil/error.h"
#include "avcodec.h"
#include "qsv_internal.h"
int
ff_qsv_codec_id_to_mfx
(
enum
AVCodecID
codec_id
)
{
switch
(
codec_id
)
{
case
AV_CODEC_ID_H264
:
return
MFX_CODEC_AVC
;
case
AV_CODEC_ID_MPEG1VIDEO
:
case
AV_CODEC_ID_MPEG2VIDEO
:
return
MFX_CODEC_MPEG2
;
case
AV_CODEC_ID_VC1
:
return
MFX_CODEC_VC1
;
default:
break
;
}
return
AVERROR
(
ENOSYS
);
}
int
ff_qsv_error
(
int
mfx_err
)
{
switch
(
mfx_err
)
{
case
MFX_ERR_NONE
:
return
0
;
case
MFX_ERR_MEMORY_ALLOC
:
case
MFX_ERR_NOT_ENOUGH_BUFFER
:
return
AVERROR
(
ENOMEM
);
case
MFX_ERR_INVALID_HANDLE
:
return
AVERROR
(
EINVAL
);
case
MFX_ERR_DEVICE_FAILED
:
case
MFX_ERR_DEVICE_LOST
:
case
MFX_ERR_LOCK_MEMORY
:
return
AVERROR
(
EIO
);
case
MFX_ERR_NULL_PTR
:
case
MFX_ERR_UNDEFINED_BEHAVIOR
:
case
MFX_ERR_NOT_INITIALIZED
:
return
AVERROR_BUG
;
case
MFX_ERR_UNSUPPORTED
:
case
MFX_ERR_NOT_FOUND
:
return
AVERROR
(
ENOSYS
);
case
MFX_ERR_MORE_DATA
:
case
MFX_ERR_MORE_SURFACE
:
case
MFX_ERR_MORE_BITSTREAM
:
return
AVERROR
(
EAGAIN
);
case
MFX_ERR_INCOMPATIBLE_VIDEO_PARAM
:
case
MFX_ERR_INVALID_VIDEO_PARAM
:
return
AVERROR
(
EINVAL
);
case
MFX_ERR_ABORTED
:
case
MFX_ERR_UNKNOWN
:
default:
return
AVERROR_UNKNOWN
;
}
}
int
ff_qsv_init_internal_session
(
AVCodecContext
*
avctx
,
mfxSession
*
session
)
{
mfxIMPL
impl
=
MFX_IMPL_AUTO_ANY
;
mfxVersion
ver
=
{
{
QSV_VERSION_MINOR
,
QSV_VERSION_MAJOR
}
};
const
char
*
desc
;
int
ret
;
ret
=
MFXInit
(
impl
,
&
ver
,
session
);
if
(
ret
<
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error initializing an internal MFX session
\n
"
);
return
ff_qsv_error
(
ret
);
}
MFXQueryIMPL
(
*
session
,
&
impl
);
switch
(
MFX_IMPL_BASETYPE
(
impl
))
{
case
MFX_IMPL_SOFTWARE
:
desc
=
"software"
;
break
;
case
MFX_IMPL_HARDWARE
:
case
MFX_IMPL_HARDWARE2
:
case
MFX_IMPL_HARDWARE3
:
case
MFX_IMPL_HARDWARE4
:
desc
=
"hardware accelerated"
;
break
;
default:
desc
=
"unknown"
;
}
av_log
(
avctx
,
AV_LOG_VERBOSE
,
"Initialized an internal MFX session using %s implementation
\n
"
,
desc
);
return
0
;
}
libavcodec/qsv_internal.h
0 → 100644
浏览文件 @
d0a63d8b
/*
* Intel MediaSDK QSV encoder/decoder shared code
*
* 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
*/
#ifndef AVCODEC_QSV_INTERNAL_H
#define AVCODEC_QSV_INTERNAL_H
#define QSV_VERSION_MAJOR 1
#define QSV_VERSION_MINOR 1
#define ASYNC_DEPTH_DEFAULT 4 // internal parallelism
/**
* Convert a libmfx error code into a libav error code.
*/
int
ff_qsv_error
(
int
mfx_err
);
int
ff_qsv_codec_id_to_mfx
(
enum
AVCodecID
codec_id
);
int
ff_qsv_init_internal_session
(
AVCodecContext
*
avctx
,
mfxSession
*
session
);
#endif
/* AVCODEC_QSV_INTERNAL_H */
libavcodec/qsvdec.c
浏览文件 @
d0a63d8b
...
...
@@ -34,43 +34,9 @@
#include "avcodec.h"
#include "internal.h"
#include "qsv_internal.h"
#include "qsvdec.h"
int
ff_qsv_error
(
int
mfx_err
)
{
switch
(
mfx_err
)
{
case
MFX_ERR_NONE
:
return
0
;
case
MFX_ERR_MEMORY_ALLOC
:
case
MFX_ERR_NOT_ENOUGH_BUFFER
:
return
AVERROR
(
ENOMEM
);
case
MFX_ERR_INVALID_HANDLE
:
return
AVERROR
(
EINVAL
);
case
MFX_ERR_DEVICE_FAILED
:
case
MFX_ERR_DEVICE_LOST
:
case
MFX_ERR_LOCK_MEMORY
:
return
AVERROR
(
EIO
);
case
MFX_ERR_NULL_PTR
:
case
MFX_ERR_UNDEFINED_BEHAVIOR
:
case
MFX_ERR_NOT_INITIALIZED
:
return
AVERROR_BUG
;
case
MFX_ERR_UNSUPPORTED
:
case
MFX_ERR_NOT_FOUND
:
return
AVERROR
(
ENOSYS
);
case
MFX_ERR_MORE_DATA
:
case
MFX_ERR_MORE_SURFACE
:
case
MFX_ERR_MORE_BITSTREAM
:
return
AVERROR
(
EAGAIN
);
case
MFX_ERR_INCOMPATIBLE_VIDEO_PARAM
:
case
MFX_ERR_INVALID_VIDEO_PARAM
:
return
AVERROR
(
EINVAL
);
case
MFX_ERR_ABORTED
:
case
MFX_ERR_UNKNOWN
:
default:
return
AVERROR_UNKNOWN
;
}
}
int
ff_qsv_map_pixfmt
(
enum
AVPixelFormat
format
)
{
switch
(
format
)
{
...
...
@@ -82,58 +48,13 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format)
}
}
static
int
codec_id_to_mfx
(
enum
AVCodecID
codec_id
)
{
switch
(
codec_id
)
{
case
AV_CODEC_ID_H264
:
return
MFX_CODEC_AVC
;
case
AV_CODEC_ID_MPEG1VIDEO
:
case
AV_CODEC_ID_MPEG2VIDEO
:
return
MFX_CODEC_MPEG2
;
case
AV_CODEC_ID_VC1
:
return
MFX_CODEC_VC1
;
default:
break
;
}
return
AVERROR
(
ENOSYS
);
}
static
int
qsv_init_session
(
AVCodecContext
*
avctx
,
QSVContext
*
q
,
mfxSession
session
)
{
if
(
!
session
)
{
if
(
!
q
->
internal_session
)
{
mfxIMPL
impl
=
MFX_IMPL_AUTO_ANY
;
mfxVersion
ver
=
{
{
QSV_VERSION_MINOR
,
QSV_VERSION_MAJOR
}
};
const
char
*
desc
;
int
ret
;
ret
=
MFXInit
(
impl
,
&
ver
,
&
q
->
internal_session
);
if
(
ret
<
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error initializing an internal MFX session
\n
"
);
return
ff_qsv_error
(
ret
);
}
MFXQueryIMPL
(
q
->
internal_session
,
&
impl
);
switch
(
MFX_IMPL_BASETYPE
(
impl
))
{
case
MFX_IMPL_SOFTWARE
:
desc
=
"software"
;
break
;
case
MFX_IMPL_HARDWARE
:
case
MFX_IMPL_HARDWARE2
:
case
MFX_IMPL_HARDWARE3
:
case
MFX_IMPL_HARDWARE4
:
desc
=
"hardware accelerated"
;
break
;
default:
desc
=
"unknown"
;
}
av_log
(
avctx
,
AV_LOG_VERBOSE
,
"Initialized an internal MFX session using %s implementation
\n
"
,
desc
);
int
ret
=
ff_qsv_init_internal_session
(
avctx
,
&
q
->
internal_session
);
if
(
ret
<
0
)
return
ret
;
}
q
->
session
=
q
->
internal_session
;
...
...
@@ -159,7 +80,7 @@ int ff_qsv_init(AVCodecContext *avctx, QSVContext *q, mfxSession session)
}
ret
=
codec_id_to_mfx
(
avctx
->
codec_id
);
ret
=
ff_qsv_
codec_id_to_mfx
(
avctx
->
codec_id
);
if
(
ret
<
0
)
return
ret
;
...
...
libavcodec/qsvdec.h
浏览文件 @
d0a63d8b
...
...
@@ -33,11 +33,6 @@
#include "avcodec.h"
#define QSV_VERSION_MAJOR 1
#define QSV_VERSION_MINOR 1
#define ASYNC_DEPTH_DEFAULT 4 // internal parallelism
typedef
struct
QSVFrame
{
AVFrame
*
frame
;
mfxFrameSurface1
*
surface
;
...
...
@@ -68,11 +63,6 @@ typedef struct QSVContext {
int
nb_ext_buffers
;
}
QSVContext
;
/**
* Convert a libmfx error code into a libav error code.
*/
int
ff_qsv_error
(
int
mfx_err
);
int
ff_qsv_map_pixfmt
(
enum
AVPixelFormat
format
);
int
ff_qsv_init
(
AVCodecContext
*
s
,
QSVContext
*
q
,
mfxSession
session
);
...
...
libavcodec/qsvdec_h264.c
浏览文件 @
d0a63d8b
...
...
@@ -33,6 +33,7 @@
#include "avcodec.h"
#include "internal.h"
#include "qsv_internal.h"
#include "qsvdec.h"
#include "qsv.h"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录