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, \ | ||||