You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	lavu/hwcontext: add AV_HWDEVICE_TYPE_MEDIACODEC
Signed-off-by: Matthieu Bouron <matthieu.bouron@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 Matthieu Bouron
						Matthieu Bouron
					
				
			
			
				
	
			
			
			
						parent
						
							5450972be4
						
					
				
				
					commit
					e4d9f05ca7
				
			| @@ -15,6 +15,10 @@ libavutil:     2017-10-21 | ||||
|  | ||||
| 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 | ||||
|   Add AV_CODEC_CAP_HARDWARE, AV_CODEC_CAP_HYBRID, and AVCodec.wrapper_name, | ||||
|   and mark all AVCodecs accordingly. | ||||
|   | ||||
| @@ -37,6 +37,7 @@ HEADERS = adler32.h                                                     \ | ||||
|           hwcontext_drm.h                                               \ | ||||
|           hwcontext_dxva2.h                                             \ | ||||
|           hwcontext_qsv.h                                               \ | ||||
|           hwcontext_mediacodec.h                                        \ | ||||
|           hwcontext_vaapi.h                                             \ | ||||
|           hwcontext_videotoolbox.h                                      \ | ||||
|           hwcontext_vdpau.h                                             \ | ||||
| @@ -166,6 +167,7 @@ OBJS-$(CONFIG_OPENCL)                   += hwcontext_opencl.o | ||||
| OBJS-$(CONFIG_VAAPI)                    += hwcontext_vaapi.o | ||||
| OBJS-$(CONFIG_VIDEOTOOLBOX)             += hwcontext_videotoolbox.o | ||||
| OBJS-$(CONFIG_VDPAU)                    += hwcontext_vdpau.o | ||||
| OBJS-$(CONFIG_MEDIACODEC)               += hwcontext_mediacodec.o | ||||
|  | ||||
| OBJS += $(COMPAT_OBJS:%=../compat/%) | ||||
|  | ||||
|   | ||||
| @@ -55,6 +55,9 @@ static const HWContextType * const hw_table[] = { | ||||
| #endif | ||||
| #if CONFIG_VIDEOTOOLBOX | ||||
|     &ff_hwcontext_type_videotoolbox, | ||||
| #endif | ||||
| #if CONFIG_MEDIACODEC | ||||
|     &ff_hwcontext_type_mediacodec, | ||||
| #endif | ||||
|     NULL, | ||||
| }; | ||||
| @@ -69,6 +72,7 @@ static const char *const hw_type_names[] = { | ||||
|     [AV_HWDEVICE_TYPE_VAAPI]  = "vaapi", | ||||
|     [AV_HWDEVICE_TYPE_VDPAU]  = "vdpau", | ||||
|     [AV_HWDEVICE_TYPE_VIDEOTOOLBOX] = "videotoolbox", | ||||
|     [AV_HWDEVICE_TYPE_MEDIACODEC] = "mediacodec", | ||||
| }; | ||||
|  | ||||
| enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name) | ||||
|   | ||||
| @@ -35,6 +35,7 @@ enum AVHWDeviceType { | ||||
|     AV_HWDEVICE_TYPE_D3D11VA, | ||||
|     AV_HWDEVICE_TYPE_DRM, | ||||
|     AV_HWDEVICE_TYPE_OPENCL, | ||||
|     AV_HWDEVICE_TYPE_MEDIACODEC, | ||||
| }; | ||||
|  | ||||
| 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_vdpau; | ||||
| extern const HWContextType ff_hwcontext_type_videotoolbox; | ||||
| extern const HWContextType ff_hwcontext_type_mediacodec; | ||||
|  | ||||
| #endif /* AVUTIL_HWCONTEXT_INTERNAL_H */ | ||||
|   | ||||
							
								
								
									
										50
									
								
								libavutil/hwcontext_mediacodec.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								libavutil/hwcontext_mediacodec.c
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
|     }, | ||||
| }; | ||||
							
								
								
									
										36
									
								
								libavutil/hwcontext_mediacodec.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								libavutil/hwcontext_mediacodec.h
									
									
									
									
									
										Normal file
									
								
							| @@ -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_MINOR   5 | ||||
| #define LIBAVUTIL_VERSION_MINOR   6 | ||||
| #define LIBAVUTIL_VERSION_MICRO 100 | ||||
|  | ||||
| #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user