Signed-off-by: Matthieu Bouron <matthieu.bouron@gmail.com>tags/n4.0
@@ -15,6 +15,10 @@ libavutil: 2017-10-21 | |||||
API changes, most recent first: | API changes, most recent first: | ||||
2017-xx-xx - xxxxxxx - lavu 56.6.100 - hwcontext.h hwcontext_mediacodec.h | |||||
Add AV_HWDEVICE_TYPE_MEDIACODEC and a new installed header with | |||||
MediaCodec-specific hwcontext definitions. | |||||
2017-xx-xx - xxxxxxc - lavc 58.7.100 - avcodec.h | 2017-xx-xx - xxxxxxc - lavc 58.7.100 - avcodec.h | ||||
Add AV_CODEC_CAP_HARDWARE, AV_CODEC_CAP_HYBRID, and AVCodec.wrapper_name, | Add AV_CODEC_CAP_HARDWARE, AV_CODEC_CAP_HYBRID, and AVCodec.wrapper_name, | ||||
and mark all AVCodecs accordingly. | and mark all AVCodecs accordingly. | ||||
@@ -37,6 +37,7 @@ HEADERS = adler32.h \ | |||||
hwcontext_drm.h \ | hwcontext_drm.h \ | ||||
hwcontext_dxva2.h \ | hwcontext_dxva2.h \ | ||||
hwcontext_qsv.h \ | hwcontext_qsv.h \ | ||||
hwcontext_mediacodec.h \ | |||||
hwcontext_vaapi.h \ | hwcontext_vaapi.h \ | ||||
hwcontext_videotoolbox.h \ | hwcontext_videotoolbox.h \ | ||||
hwcontext_vdpau.h \ | hwcontext_vdpau.h \ | ||||
@@ -166,6 +167,7 @@ OBJS-$(CONFIG_OPENCL) += hwcontext_opencl.o | |||||
OBJS-$(CONFIG_VAAPI) += hwcontext_vaapi.o | OBJS-$(CONFIG_VAAPI) += hwcontext_vaapi.o | ||||
OBJS-$(CONFIG_VIDEOTOOLBOX) += hwcontext_videotoolbox.o | OBJS-$(CONFIG_VIDEOTOOLBOX) += hwcontext_videotoolbox.o | ||||
OBJS-$(CONFIG_VDPAU) += hwcontext_vdpau.o | OBJS-$(CONFIG_VDPAU) += hwcontext_vdpau.o | ||||
OBJS-$(CONFIG_MEDIACODEC) += hwcontext_mediacodec.o | |||||
OBJS += $(COMPAT_OBJS:%=../compat/%) | OBJS += $(COMPAT_OBJS:%=../compat/%) | ||||
@@ -55,6 +55,9 @@ static const HWContextType * const hw_table[] = { | |||||
#endif | #endif | ||||
#if CONFIG_VIDEOTOOLBOX | #if CONFIG_VIDEOTOOLBOX | ||||
&ff_hwcontext_type_videotoolbox, | &ff_hwcontext_type_videotoolbox, | ||||
#endif | |||||
#if CONFIG_MEDIACODEC | |||||
&ff_hwcontext_type_mediacodec, | |||||
#endif | #endif | ||||
NULL, | NULL, | ||||
}; | }; | ||||
@@ -69,6 +72,7 @@ static const char *const hw_type_names[] = { | |||||
[AV_HWDEVICE_TYPE_VAAPI] = "vaapi", | [AV_HWDEVICE_TYPE_VAAPI] = "vaapi", | ||||
[AV_HWDEVICE_TYPE_VDPAU] = "vdpau", | [AV_HWDEVICE_TYPE_VDPAU] = "vdpau", | ||||
[AV_HWDEVICE_TYPE_VIDEOTOOLBOX] = "videotoolbox", | [AV_HWDEVICE_TYPE_VIDEOTOOLBOX] = "videotoolbox", | ||||
[AV_HWDEVICE_TYPE_MEDIACODEC] = "mediacodec", | |||||
}; | }; | ||||
enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name) | enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name) | ||||
@@ -35,6 +35,7 @@ enum AVHWDeviceType { | |||||
AV_HWDEVICE_TYPE_D3D11VA, | AV_HWDEVICE_TYPE_D3D11VA, | ||||
AV_HWDEVICE_TYPE_DRM, | AV_HWDEVICE_TYPE_DRM, | ||||
AV_HWDEVICE_TYPE_OPENCL, | AV_HWDEVICE_TYPE_OPENCL, | ||||
AV_HWDEVICE_TYPE_MEDIACODEC, | |||||
}; | }; | ||||
typedef struct AVHWDeviceInternal AVHWDeviceInternal; | typedef struct AVHWDeviceInternal AVHWDeviceInternal; | ||||
@@ -166,5 +166,6 @@ extern const HWContextType ff_hwcontext_type_qsv; | |||||
extern const HWContextType ff_hwcontext_type_vaapi; | extern const HWContextType ff_hwcontext_type_vaapi; | ||||
extern const HWContextType ff_hwcontext_type_vdpau; | extern const HWContextType ff_hwcontext_type_vdpau; | ||||
extern const HWContextType ff_hwcontext_type_videotoolbox; | extern const HWContextType ff_hwcontext_type_videotoolbox; | ||||
extern const HWContextType ff_hwcontext_type_mediacodec; | |||||
#endif /* AVUTIL_HWCONTEXT_INTERNAL_H */ | #endif /* AVUTIL_HWCONTEXT_INTERNAL_H */ |
@@ -0,0 +1,50 @@ | |||||
/* | |||||
* 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 "config.h" | |||||
#include "buffer.h" | |||||
#include "common.h" | |||||
#include "hwcontext.h" | |||||
#include "hwcontext_internal.h" | |||||
#include "hwcontext_mediacodec.h" | |||||
static int mc_device_create(AVHWDeviceContext *ctx, const char *device, | |||||
AVDictionary *opts, int flags) | |||||
{ | |||||
if (device && device[0]) { | |||||
av_log(ctx, AV_LOG_ERROR, "Device selection unsupported.\n"); | |||||
return AVERROR_UNKNOWN; | |||||
} | |||||
return 0; | |||||
} | |||||
const HWContextType ff_hwcontext_type_mediacodec = { | |||||
.type = AV_HWDEVICE_TYPE_MEDIACODEC, | |||||
.name = "mediacodec", | |||||
.device_hwctx_size = sizeof(AVMediaCodecDeviceContext), | |||||
.device_create = mc_device_create, | |||||
.pix_fmts = (const enum AVPixelFormat[]){ | |||||
AV_PIX_FMT_MEDIACODEC, | |||||
AV_PIX_FMT_NONE | |||||
}, | |||||
}; |
@@ -0,0 +1,36 @@ | |||||
/* | |||||
* 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 | |||||
*/ | |||||
#ifndef AVUTIL_HWCONTEXT_MEDIACODEC_H | |||||
#define AVUTIL_HWCONTEXT_MEDIACODEC_H | |||||
/** | |||||
* MediaCodec details. | |||||
* | |||||
* Allocated as AVHWDeviceContext.hwctx | |||||
*/ | |||||
typedef struct AVMediaCodecDeviceContext { | |||||
/** | |||||
* android/view/Surface handle, to be filled by the user. | |||||
* | |||||
* This is the default surface used by decoders on this device. | |||||
*/ | |||||
void *surface; | |||||
} AVMediaCodecDeviceContext; | |||||
#endif /* AVUTIL_HWCONTEXT_MEDIACODEC_H */ |
@@ -79,7 +79,7 @@ | |||||
*/ | */ | ||||
#define LIBAVUTIL_VERSION_MAJOR 56 | #define LIBAVUTIL_VERSION_MAJOR 56 | ||||
#define LIBAVUTIL_VERSION_MINOR 5 | |||||
#define LIBAVUTIL_VERSION_MINOR 6 | |||||
#define LIBAVUTIL_VERSION_MICRO 100 | #define LIBAVUTIL_VERSION_MICRO 100 | ||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||