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
cd98f20b
Commit
cd98f20b
authored
Feb 18, 2018
by
Philip Langdale
Committed by
Mark Thompson
Feb 21, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec/nvdec: Implement mjpeg nvdec hwaccel
parent
63c690ad
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
99 additions
and
2 deletions
+99
-2
Changelog
Changelog
+1
-1
configure
configure
+2
-0
Makefile
libavcodec/Makefile
+1
-0
hwaccels.h
libavcodec/hwaccels.h
+1
-0
mjpegdec.c
libavcodec/mjpegdec.c
+6
-0
nvdec.c
libavcodec/nvdec.c
+1
-0
nvdec_mjpeg.c
libavcodec/nvdec_mjpeg.c
+86
-0
version.h
libavcodec/version.h
+1
-1
No files found.
Changelog
View file @
cd98f20b
...
@@ -13,7 +13,7 @@ version <next>:
...
@@ -13,7 +13,7 @@ version <next>:
- PCE support for extended channel layouts in the AAC encoder
- PCE support for extended channel layouts in the AAC encoder
- native aptX and aptX HD encoder and decoder
- native aptX and aptX HD encoder and decoder
- Raw aptX and aptX HD muxer and demuxer
- Raw aptX and aptX HD muxer and demuxer
- NVIDIA NVDEC-accelerated H.264, HEVC, MPEG-1/2/4, VC1, VP8/9 hwaccel decoding
- NVIDIA NVDEC-accelerated H.264, HEVC, M
JPEG, M
PEG-1/2/4, VC1, VP8/9 hwaccel decoding
- Intel QSV-accelerated overlay filter
- Intel QSV-accelerated overlay filter
- mcompand audio filter
- mcompand audio filter
- acontrast audio filter
- acontrast audio filter
...
...
configure
View file @
cd98f20b
...
@@ -2714,6 +2714,8 @@ hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
...
@@ -2714,6 +2714,8 @@ hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
hevc_vdpau_hwaccel_select
=
"hevc_decoder"
hevc_vdpau_hwaccel_select
=
"hevc_decoder"
hevc_videotoolbox_hwaccel_deps
=
"videotoolbox"
hevc_videotoolbox_hwaccel_deps
=
"videotoolbox"
hevc_videotoolbox_hwaccel_select
=
"hevc_decoder"
hevc_videotoolbox_hwaccel_select
=
"hevc_decoder"
mjpeg_nvdec_hwaccel_deps
=
"nvdec"
mjpeg_nvdec_hwaccel_select
=
"mjpeg_decoder"
mjpeg_vaapi_hwaccel_deps
=
"vaapi"
mjpeg_vaapi_hwaccel_deps
=
"vaapi"
mjpeg_vaapi_hwaccel_select
=
"mjpeg_decoder"
mjpeg_vaapi_hwaccel_select
=
"mjpeg_decoder"
mpeg_xvmc_hwaccel_deps
=
"xvmc"
mpeg_xvmc_hwaccel_deps
=
"xvmc"
...
...
libavcodec/Makefile
View file @
cd98f20b
...
@@ -854,6 +854,7 @@ OBJS-$(CONFIG_HEVC_NVDEC_HWACCEL) += nvdec_hevc.o
...
@@ -854,6 +854,7 @@ OBJS-$(CONFIG_HEVC_NVDEC_HWACCEL) += nvdec_hevc.o
OBJS-$(CONFIG_HEVC_QSV_HWACCEL)
+=
qsvdec_h2645.o
OBJS-$(CONFIG_HEVC_QSV_HWACCEL)
+=
qsvdec_h2645.o
OBJS-$(CONFIG_HEVC_VAAPI_HWACCEL)
+=
vaapi_hevc.o
OBJS-$(CONFIG_HEVC_VAAPI_HWACCEL)
+=
vaapi_hevc.o
OBJS-$(CONFIG_HEVC_VDPAU_HWACCEL)
+=
vdpau_hevc.o
OBJS-$(CONFIG_HEVC_VDPAU_HWACCEL)
+=
vdpau_hevc.o
OBJS-$(CONFIG_MJPEG_NVDEC_HWACCEL)
+=
nvdec_mjpeg.o
OBJS-$(CONFIG_MJPEG_VAAPI_HWACCEL)
+=
vaapi_mjpeg.o
OBJS-$(CONFIG_MJPEG_VAAPI_HWACCEL)
+=
vaapi_mjpeg.o
OBJS-$(CONFIG_MPEG1_NVDEC_HWACCEL)
+=
nvdec_mpeg12.o
OBJS-$(CONFIG_MPEG1_NVDEC_HWACCEL)
+=
nvdec_mpeg12.o
OBJS-$(CONFIG_MPEG1_VDPAU_HWACCEL)
+=
vdpau_mpeg12.o
OBJS-$(CONFIG_MPEG1_VDPAU_HWACCEL)
+=
vdpau_mpeg12.o
...
...
libavcodec/hwaccels.h
View file @
cd98f20b
...
@@ -37,6 +37,7 @@ extern const AVHWAccel ff_hevc_nvdec_hwaccel;
...
@@ -37,6 +37,7 @@ extern const AVHWAccel ff_hevc_nvdec_hwaccel;
extern
const
AVHWAccel
ff_hevc_vaapi_hwaccel
;
extern
const
AVHWAccel
ff_hevc_vaapi_hwaccel
;
extern
const
AVHWAccel
ff_hevc_vdpau_hwaccel
;
extern
const
AVHWAccel
ff_hevc_vdpau_hwaccel
;
extern
const
AVHWAccel
ff_hevc_videotoolbox_hwaccel
;
extern
const
AVHWAccel
ff_hevc_videotoolbox_hwaccel
;
extern
const
AVHWAccel
ff_mjpeg_nvdec_hwaccel
;
extern
const
AVHWAccel
ff_mjpeg_vaapi_hwaccel
;
extern
const
AVHWAccel
ff_mjpeg_vaapi_hwaccel
;
extern
const
AVHWAccel
ff_mpeg1_nvdec_hwaccel
;
extern
const
AVHWAccel
ff_mpeg1_nvdec_hwaccel
;
extern
const
AVHWAccel
ff_mpeg1_vdpau_hwaccel
;
extern
const
AVHWAccel
ff_mpeg1_vdpau_hwaccel
;
...
...
libavcodec/mjpegdec.c
View file @
cd98f20b
...
@@ -650,6 +650,9 @@ unk_pixfmt:
...
@@ -650,6 +650,9 @@ unk_pixfmt:
s
->
avctx
->
pix_fmt
=
s
->
hwaccel_pix_fmt
;
s
->
avctx
->
pix_fmt
=
s
->
hwaccel_pix_fmt
;
}
else
{
}
else
{
enum
AVPixelFormat
pix_fmts
[]
=
{
enum
AVPixelFormat
pix_fmts
[]
=
{
#if CONFIG_MJPEG_NVDEC_HWACCEL
AV_PIX_FMT_CUDA
,
#endif
#if CONFIG_MJPEG_VAAPI_HWACCEL
#if CONFIG_MJPEG_VAAPI_HWACCEL
AV_PIX_FMT_VAAPI
,
AV_PIX_FMT_VAAPI
,
#endif
#endif
...
@@ -2780,6 +2783,9 @@ AVCodec ff_mjpeg_decoder = {
...
@@ -2780,6 +2783,9 @@ AVCodec ff_mjpeg_decoder = {
.
caps_internal
=
FF_CODEC_CAP_INIT_THREADSAFE
|
.
caps_internal
=
FF_CODEC_CAP_INIT_THREADSAFE
|
FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM
,
FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM
,
.
hw_configs
=
(
const
AVCodecHWConfigInternal
*
[])
{
.
hw_configs
=
(
const
AVCodecHWConfigInternal
*
[])
{
#if CONFIG_MJPEG_NVDEC_HWACCEL
HWACCEL_NVDEC
(
mjpeg
),
#endif
#if CONFIG_MJPEG_VAAPI_HWACCEL
#if CONFIG_MJPEG_VAAPI_HWACCEL
HWACCEL_VAAPI
(
mjpeg
),
HWACCEL_VAAPI
(
mjpeg
),
#endif
#endif
...
...
libavcodec/nvdec.c
View file @
cd98f20b
...
@@ -54,6 +54,7 @@ static int map_avcodec_id(enum AVCodecID id)
...
@@ -54,6 +54,7 @@ static int map_avcodec_id(enum AVCodecID id)
switch
(
id
)
{
switch
(
id
)
{
case
AV_CODEC_ID_H264
:
return
cudaVideoCodec_H264
;
case
AV_CODEC_ID_H264
:
return
cudaVideoCodec_H264
;
case
AV_CODEC_ID_HEVC
:
return
cudaVideoCodec_HEVC
;
case
AV_CODEC_ID_HEVC
:
return
cudaVideoCodec_HEVC
;
case
AV_CODEC_ID_MJPEG
:
return
cudaVideoCodec_JPEG
;
case
AV_CODEC_ID_MPEG1VIDEO
:
return
cudaVideoCodec_MPEG1
;
case
AV_CODEC_ID_MPEG1VIDEO
:
return
cudaVideoCodec_MPEG1
;
case
AV_CODEC_ID_MPEG2VIDEO
:
return
cudaVideoCodec_MPEG2
;
case
AV_CODEC_ID_MPEG2VIDEO
:
return
cudaVideoCodec_MPEG2
;
case
AV_CODEC_ID_MPEG4
:
return
cudaVideoCodec_MPEG4
;
case
AV_CODEC_ID_MPEG4
:
return
cudaVideoCodec_MPEG4
;
...
...
libavcodec/nvdec_mjpeg.c
0 → 100644
View file @
cd98f20b
/*
* MJPEG 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 "internal.h"
#include "mjpegdec.h"
#include "nvdec.h"
#include "decode.h"
static
int
nvdec_mjpeg_start_frame
(
AVCodecContext
*
avctx
,
const
uint8_t
*
buffer
,
uint32_t
size
)
{
MJpegDecodeContext
*
s
=
avctx
->
priv_data
;
NVDECContext
*
ctx
=
avctx
->
internal
->
hwaccel_priv_data
;
CUVIDPICPARAMS
*
pp
=
&
ctx
->
pic_params
;
FrameDecodeData
*
fdd
;
NVDECFrame
*
cf
;
AVFrame
*
cur_frame
=
s
->
picture
;
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
,
.
intra_pic_flag
=
1
,
.
ref_pic_flag
=
0
,
};
return
ff_nvdec_simple_decode_slice
(
avctx
,
buffer
,
size
);
}
static
int
nvdec_mjpeg_decode_slice
(
AVCodecContext
*
avctx
,
const
uint8_t
*
buffer
,
uint32_t
size
)
{
return
0
;
}
static
int
nvdec_mjpeg_frame_params
(
AVCodecContext
*
avctx
,
AVBufferRef
*
hw_frames_ctx
)
{
// Only need storage for the current frame
return
ff_nvdec_frame_params
(
avctx
,
hw_frames_ctx
,
1
);
}
#if CONFIG_MJPEG_NVDEC_HWACCEL
AVHWAccel
ff_mjpeg_nvdec_hwaccel
=
{
.
name
=
"mjpeg_nvdec"
,
.
type
=
AVMEDIA_TYPE_VIDEO
,
.
id
=
AV_CODEC_ID_MJPEG
,
.
pix_fmt
=
AV_PIX_FMT_CUDA
,
.
start_frame
=
nvdec_mjpeg_start_frame
,
.
end_frame
=
ff_nvdec_simple_end_frame
,
.
decode_slice
=
nvdec_mjpeg_decode_slice
,
.
frame_params
=
nvdec_mjpeg_frame_params
,
.
init
=
ff_nvdec_decode_init
,
.
uninit
=
ff_nvdec_decode_uninit
,
.
priv_data_size
=
sizeof
(
NVDECContext
),
};
#endif
libavcodec/version.h
View file @
cd98f20b
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
#define LIBAVCODEC_VERSION_MAJOR 58
#define LIBAVCODEC_VERSION_MAJOR 58
#define LIBAVCODEC_VERSION_MINOR 12
#define LIBAVCODEC_VERSION_MINOR 12
#define LIBAVCODEC_VERSION_MICRO 10
1
#define LIBAVCODEC_VERSION_MICRO 10
2
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
LIBAVCODEC_VERSION_MINOR, \
...
...
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