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
720cf4e6
Commit
720cf4e6
authored
Oct 25, 2017
by
Mark Thompson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavc: Add codec metadata to indicate hardware support
parent
47687a2f
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
108 additions
and
1 deletion
+108
-1
APIchanges
doc/APIchanges
+3
-0
avcodec.h
libavcodec/avcodec.h
+74
-0
hwaccel.h
libavcodec/hwaccel.h
+18
-0
utils.c
libavcodec/utils.c
+12
-0
version.h
libavcodec/version.h
+1
-1
No files found.
doc/APIchanges
View file @
720cf4e6
...
...
@@ -13,6 +13,9 @@ libavutil: 2017-03-23
API changes, most recent first:
2017-xx-xx - xxxxxxx - lavc 58.6.0 - avcodec.h
Add AVCodecHWConfig and avcodec_get_hw_config().
2017-xx-xx - xxxxxxx - lavu 56.7.0 - stereo3d.h
Add view field to AVStereo3D structure and AVStereo3DView enum.
...
...
libavcodec/avcodec.h
View file @
720cf4e6
...
...
@@ -35,6 +35,7 @@
#include "libavutil/cpu.h"
#include "libavutil/dict.h"
#include "libavutil/frame.h"
#include "libavutil/hwcontext.h"
#include "libavutil/log.h"
#include "libavutil/pixfmt.h"
#include "libavutil/rational.h"
...
...
@@ -2748,6 +2749,61 @@ typedef struct AVProfile {
const
char
*
name
;
///< short name for the profile
}
AVProfile
;
enum
{
/**
* The codec supports this format via the hw_device_ctx interface.
*
* When selecting this format, AVCodecContext.hw_device_ctx should
* have been set to a device of the specified type before calling
* avcodec_open2().
*/
AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX
=
0x01
,
/**
* The codec supports this format via the hw_frames_ctx interface.
*
* When selecting this format for a decoder,
* AVCodecContext.hw_frames_ctx should be set to a suitable frames
* context inside the get_format() callback. The frames context
* must have been created on a device of the specified type.
*/
AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX
=
0x02
,
/**
* The codec supports this format by some internal method.
*
* This format can be selected without any additional configuration -
* no device or frames context is required.
*/
AV_CODEC_HW_CONFIG_METHOD_INTERNAL
=
0x04
,
/**
* The codec supports this format by some ad-hoc method.
*
* Additional settings and/or function calls are required. See the
* codec-specific documentation for details. (Methods requiring
* this sort of configuration are deprecated and others should be
* used in preference.)
*/
AV_CODEC_HW_CONFIG_METHOD_AD_HOC
=
0x08
,
};
typedef
struct
AVCodecHWConfig
{
/**
* A hardware pixel format which the codec can use.
*/
enum
AVPixelFormat
pix_fmt
;
/**
* Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible
* setup methods which can be used with this configuration.
*/
int
methods
;
/**
* The device type associated with the configuration.
*
* Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and
* AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused.
*/
enum
AVHWDeviceType
device_type
;
}
AVCodecHWConfig
;
typedef
struct
AVCodecDefault
AVCodecDefault
;
struct
AVSubtitle
;
...
...
@@ -2884,8 +2940,26 @@ typedef struct AVCodec {
* packets before decoding.
*/
const
char
*
bsfs
;
/**
* Array of pointers to hardware configurations supported by the codec,
* or NULL if no hardware supported. The array is terminated by a NULL
* pointer.
*
* The user can only access this field via avcodec_get_hw_config().
*/
const
struct
AVCodecHWConfigInternal
**
hw_configs
;
}
AVCodec
;
/**
* Retrieve supported hardware configurations for a codec.
*
* Values of index from zero to some maximum return the indexed configuration
* descriptor; all other values return NULL. If the codec does not support
* any hardware configurations then it will always return NULL.
*/
const
AVCodecHWConfig
*
avcodec_get_hw_config
(
const
AVCodec
*
codec
,
int
index
);
/**
* @defgroup lavc_hwaccel AVHWAccel
* @{
...
...
libavcodec/hwaccel.h
View file @
720cf4e6
...
...
@@ -19,6 +19,24 @@
#ifndef AVCODEC_HWACCEL_H
#define AVCODEC_HWACCEL_H
#include "avcodec.h"
#define HWACCEL_CAP_ASYNC_SAFE (1 << 0)
typedef
struct
AVCodecHWConfigInternal
{
/**
* This is the structure which will be returned to the user by
* avcodec_get_hw_config().
*/
AVCodecHWConfig
public
;
/**
* If this configuration uses a hwaccel, a pointer to it.
* If not, NULL.
*/
const
AVHWAccel
*
hwaccel
;
}
AVCodecHWConfigInternal
;
#endif
/* AVCODEC_HWACCEL_H */
libavcodec/utils.c
View file @
720cf4e6
...
...
@@ -41,6 +41,7 @@
#include "libavutil/dict.h"
#include "avcodec.h"
#include "decode.h"
#include "hwaccel.h"
#include "libavutil/opt.h"
#include "me_cmp.h"
#include "mpegvideo.h"
...
...
@@ -1335,6 +1336,17 @@ int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b)
return
i
;
}
const
AVCodecHWConfig
*
avcodec_get_hw_config
(
const
AVCodec
*
codec
,
int
index
)
{
int
i
;
if
(
!
codec
->
hw_configs
||
index
<
0
)
return
NULL
;
for
(
i
=
0
;
i
<=
index
;
i
++
)
if
(
!
codec
->
hw_configs
[
i
])
return
NULL
;
return
&
codec
->
hw_configs
[
index
]
->
public
;
}
static
AVHWAccel
*
first_hwaccel
=
NULL
;
void
av_register_hwaccel
(
AVHWAccel
*
hwaccel
)
...
...
libavcodec/version.h
View file @
720cf4e6
...
...
@@ -28,7 +28,7 @@
#include "libavutil/version.h"
#define LIBAVCODEC_VERSION_MAJOR 58
#define LIBAVCODEC_VERSION_MINOR
5
#define LIBAVCODEC_VERSION_MINOR
6
#define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
...
...
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