Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
d0a63d8b
Commit
d0a63d8b
authored
Mar 13, 2015
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
qsvdec: split off some code that will be shared with the encoder
parent
b04d009b
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
163 additions
and
95 deletions
+163
-95
configure
configure
+2
-0
Makefile
libavcodec/Makefile
+2
-1
qsv.c
libavcodec/qsv.c
+115
-0
qsv_internal.h
libavcodec/qsv_internal.h
+38
-0
qsvdec.c
libavcodec/qsvdec.c
+5
-84
qsvdec.h
libavcodec/qsvdec.h
+0
-10
qsvdec_h264.c
libavcodec/qsvdec_h264.c
+1
-0
No files found.
configure
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
d0a63d8b
...
...
@@ -33,6 +33,7 @@
#include "avcodec.h"
#include "internal.h"
#include "qsv_internal.h"
#include "qsvdec.h"
#include "qsv.h"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment