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
1da9851e
Commit
1da9851e
authored
Nov 19, 2017
by
Philip Langdale
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec/nvdec: Implement vp8 hwaccel
parent
f69e9365
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
110 additions
and
2 deletions
+110
-2
Changelog
Changelog
+1
-1
configure
configure
+2
-0
Makefile
libavcodec/Makefile
+1
-0
hwaccels.h
libavcodec/hwaccels.h
+1
-0
nvdec.c
libavcodec/nvdec.c
+1
-0
nvdec_vp8.c
libavcodec/nvdec_vp8.c
+97
-0
version.h
libavcodec/version.h
+1
-1
vp8.c
libavcodec/vp8.c
+6
-0
No files found.
Changelog
View file @
1da9851e
...
...
@@ -13,7 +13,7 @@ version <next>:
- PCE support for extended channel layouts in the AAC encoder
- native aptX encoder and decoder
- Raw aptX muxer and demuxer
- NVIDIA NVDEC-accelerated H.264, HEVC, MPEG-1/2/4, VC1
and VP
9 hwaccel decoding
- NVIDIA NVDEC-accelerated H.264, HEVC, MPEG-1/2/4, VC1
, VP8/
9 hwaccel decoding
- Intel QSV-accelerated overlay filter
- mcompand audio filter
- acontrast audio filter
...
...
configure
View file @
1da9851e
...
...
@@ -2746,6 +2746,8 @@ vc1_vaapi_hwaccel_deps="vaapi"
vc1_vaapi_hwaccel_select
=
"vc1_decoder"
vc1_vdpau_hwaccel_deps
=
"vdpau"
vc1_vdpau_hwaccel_select
=
"vc1_decoder"
vp8_nvdec_hwaccel_deps
=
"nvdec"
vp8_nvdec_hwaccel_select
=
"vp8_decoder"
vp8_vaapi_hwaccel_deps
=
"vaapi VAPictureParameterBufferVP8"
vp8_vaapi_hwaccel_select
=
"vp8_decoder"
vp9_d3d11va_hwaccel_deps
=
"d3d11va DXVA_PicParams_VP9"
...
...
libavcodec/Makefile
View file @
1da9851e
...
...
@@ -871,6 +871,7 @@ OBJS-$(CONFIG_VC1_NVDEC_HWACCEL) += nvdec_vc1.o
OBJS-$(CONFIG_VC1_QSV_HWACCEL)
+=
qsvdec_other.o
OBJS-$(CONFIG_VC1_VAAPI_HWACCEL)
+=
vaapi_vc1.o
OBJS-$(CONFIG_VC1_VDPAU_HWACCEL)
+=
vdpau_vc1.o
OBJS-$(CONFIG_VP8_NVDEC_HWACCEL)
+=
nvdec_vp8.o
OBJS-$(CONFIG_VP8_VAAPI_HWACCEL)
+=
vaapi_vp8.o
OBJS-$(CONFIG_VP9_D3D11VA_HWACCEL)
+=
dxva2_vp9.o
OBJS-$(CONFIG_VP9_DXVA2_HWACCEL)
+=
dxva2_vp9.o
...
...
libavcodec/hwaccels.h
View file @
1da9851e
...
...
@@ -59,6 +59,7 @@ extern const AVHWAccel ff_vc1_dxva2_hwaccel;
extern
const
AVHWAccel
ff_vc1_nvdec_hwaccel
;
extern
const
AVHWAccel
ff_vc1_vaapi_hwaccel
;
extern
const
AVHWAccel
ff_vc1_vdpau_hwaccel
;
extern
const
AVHWAccel
ff_vp8_nvdec_hwaccel
;
extern
const
AVHWAccel
ff_vp8_vaapi_hwaccel
;
extern
const
AVHWAccel
ff_vp9_d3d11va_hwaccel
;
extern
const
AVHWAccel
ff_vp9_d3d11va2_hwaccel
;
...
...
libavcodec/nvdec.c
View file @
1da9851e
...
...
@@ -58,6 +58,7 @@ static int map_avcodec_id(enum AVCodecID id)
case
AV_CODEC_ID_MPEG2VIDEO
:
return
cudaVideoCodec_MPEG2
;
case
AV_CODEC_ID_MPEG4
:
return
cudaVideoCodec_MPEG4
;
case
AV_CODEC_ID_VC1
:
return
cudaVideoCodec_VC1
;
case
AV_CODEC_ID_VP8
:
return
cudaVideoCodec_VP8
;
case
AV_CODEC_ID_VP9
:
return
cudaVideoCodec_VP9
;
case
AV_CODEC_ID_WMV3
:
return
cudaVideoCodec_VC1
;
}
...
...
libavcodec/nvdec_vp8.c
0 → 100644
View file @
1da9851e
/*
* VP8 HW decode acceleration through NVDEC
*
* Copyright (c) 2017 Philip Langdale
*
* This file is part of FFmpeg.
*
* FFmpeg 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.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "avcodec.h"
#include "nvdec.h"
#include "decode.h"
#include "internal.h"
#include "vp8.h"
static
unsigned
char
safe_get_ref_idx
(
VP8Frame
*
frame
)
{
return
frame
?
ff_nvdec_get_ref_idx
(
frame
->
tf
.
f
)
:
255
;
}
static
int
nvdec_vp8_start_frame
(
AVCodecContext
*
avctx
,
const
uint8_t
*
buffer
,
uint32_t
size
)
{
VP8Context
*
h
=
avctx
->
priv_data
;
NVDECContext
*
ctx
=
avctx
->
internal
->
hwaccel_priv_data
;
CUVIDPICPARAMS
*
pp
=
&
ctx
->
pic_params
;
FrameDecodeData
*
fdd
;
NVDECFrame
*
cf
;
AVFrame
*
cur_frame
=
h
->
framep
[
VP56_FRAME_CURRENT
]
->
tf
.
f
;
int
ret
;
ret
=
ff_nvdec_start_frame
(
avctx
,
cur_frame
);
if
(
ret
<
0
)
return
ret
;
fdd
=
(
FrameDecodeData
*
)
cur_frame
->
private_ref
->
data
;
cf
=
(
NVDECFrame
*
)
fdd
->
hwaccel_priv
;
*
pp
=
(
CUVIDPICPARAMS
)
{
.
PicWidthInMbs
=
(
cur_frame
->
width
+
15
)
/
16
,
.
FrameHeightInMbs
=
(
cur_frame
->
height
+
15
)
/
16
,
.
CurrPicIdx
=
cf
->
idx
,
.
CodecSpecific
.
vp8
=
{
.
width
=
cur_frame
->
width
,
.
height
=
cur_frame
->
height
,
.
first_partition_size
=
h
->
header_partition_size
,
.
LastRefIdx
=
safe_get_ref_idx
(
h
->
framep
[
VP56_FRAME_PREVIOUS
]),
.
GoldenRefIdx
=
safe_get_ref_idx
(
h
->
framep
[
VP56_FRAME_GOLDEN
]),
.
AltRefIdx
=
safe_get_ref_idx
(
h
->
framep
[
VP56_FRAME_GOLDEN2
]),
.
frame_type
=
!
h
->
keyframe
,
.
version
=
h
->
profile
,
.
show_frame
=
!
h
->
invisible
,
.
update_mb_segmentation_data
=
h
->
segmentation
.
enabled
?
h
->
segmentation
.
update_feature_data
:
0
,
}
};
return
0
;
}
static
int
nvdec_vp8_frame_params
(
AVCodecContext
*
avctx
,
AVBufferRef
*
hw_frames_ctx
)
{
// VP8 uses a fixed size pool of 3 possible reference frames
return
ff_nvdec_frame_params
(
avctx
,
hw_frames_ctx
,
3
);
}
AVHWAccel
ff_vp8_nvdec_hwaccel
=
{
.
name
=
"vp8_nvdec"
,
.
type
=
AVMEDIA_TYPE_VIDEO
,
.
id
=
AV_CODEC_ID_VP8
,
.
pix_fmt
=
AV_PIX_FMT_CUDA
,
.
start_frame
=
nvdec_vp8_start_frame
,
.
end_frame
=
ff_nvdec_simple_end_frame
,
.
decode_slice
=
ff_nvdec_simple_decode_slice
,
.
frame_params
=
nvdec_vp8_frame_params
,
.
init
=
ff_nvdec_decode_init
,
.
uninit
=
ff_nvdec_decode_uninit
,
.
priv_data_size
=
sizeof
(
NVDECContext
),
};
libavcodec/version.h
View file @
1da9851e
...
...
@@ -29,7 +29,7 @@
#define LIBAVCODEC_VERSION_MAJOR 58
#define LIBAVCODEC_VERSION_MINOR 6
#define LIBAVCODEC_VERSION_MICRO 10
0
#define LIBAVCODEC_VERSION_MICRO 10
1
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
...
...
libavcodec/vp8.c
View file @
1da9851e
...
...
@@ -2601,6 +2601,9 @@ int vp78_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
enum
AVPixelFormat
pix_fmts
[]
=
{
#if CONFIG_VP8_VAAPI_HWACCEL
AV_PIX_FMT_VAAPI
,
#endif
#if CONFIG_VP8_NVDEC_HWACCEL
AV_PIX_FMT_CUDA
,
#endif
AV_PIX_FMT_YUV420P
,
AV_PIX_FMT_NONE
,
...
...
@@ -2949,6 +2952,9 @@ AVCodec ff_vp8_decoder = {
.
hw_configs
=
(
const
AVCodecHWConfigInternal
*
[])
{
#if CONFIG_VP8_VAAPI_HWACCEL
HWACCEL_VAAPI
(
vp8
),
#endif
#if CONFIG_VP8_NVDEC_HWACCEL
HWACCEL_NVDEC
(
vp8
),
#endif
NULL
},
...
...
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