mirror of
				https://git.ffmpeg.org/ffmpeg.git
				synced 2025-10-30 23:30:55 +00:00 
			
		
		
		
	avutil/hwcontext: Add ohcodec device and pixel format
Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
This commit is contained in:
		
							parent
							
								
									7b13d17b6d
								
							
						
					
					
						commit
						fbda5ffb95
					
				
					 11 changed files with 109 additions and 2 deletions
				
			
		
							
								
								
									
										5
									
								
								configure
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								configure
									
										
									
									
										vendored
									
									
								
							|  | @ -322,6 +322,7 @@ External library support: | |||
|   --enable-mediafoundation enable encoding via MediaFoundation [auto] | ||||
|   --disable-metal          disable Apple Metal framework [autodetect] | ||||
|   --enable-libmysofa       enable libmysofa, needed for sofalizer filter [no] | ||||
|   --enable-ohcodec         enable OpenHarmony Codec support [no] | ||||
|   --enable-openal          enable OpenAL 1.1 capture support [no] | ||||
|   --enable-opencl          enable OpenCL processing [no] | ||||
|   --enable-opengl          enable OpenGL rendering [no] | ||||
|  | @ -1997,6 +1998,7 @@ EXTERNAL_LIBRARY_LIST=" | |||
|     libzvbi | ||||
|     lv2 | ||||
|     mediacodec | ||||
|     ohcodec | ||||
|     openal | ||||
|     opengl | ||||
|     openssl | ||||
|  | @ -7171,6 +7173,9 @@ enabled mmal              && { check_lib mmal interface/mmal/mmal.h mmal_port_co | |||
|                                  check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } || | ||||
|                                die "ERROR: mmal not found" && | ||||
|                                check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; } | ||||
| enabled ohcodec           && { check_lib ohcodec "multimedia/player_framework/native_avcodec_videodecoder.h" \ | ||||
|                                     OH_VideoDecoder_CreateByName -lnative_media_codecbase -lnative_media_core -lnative_media_vdec || | ||||
|                                die "ERROR: missing native_media libs"; } | ||||
| enabled openal            && { check_pkg_config openal "openal >= 1.1" "AL/al.h" alGetError || | ||||
|                                { for al_extralibs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do | ||||
|                                check_lib openal 'AL/al.h' alGetError "${al_extralibs}" && break; done } || | ||||
|  |  | |||
|  | @ -2,6 +2,12 @@ The last version increases of all libraries were on 2025-03-28 | |||
| 
 | ||||
| API changes, most recent first: | ||||
| 
 | ||||
| 2025-07-18 - xxxxxxxxxx - lavu 60.5.100 - pixfmt.h | ||||
|   Add AV_PIX_FMT_OHCODEC. | ||||
| 
 | ||||
| 2025-07-18 - xxxxxxxxxx - lavu 60.5.100 - hwcontext.h | ||||
|   Add AV_HWDEVICE_TYPE_OHCODEC and AVOHCodecDeviceContext. | ||||
| 
 | ||||
| 2025-07-xx - xxxxxxxxxd - lavfi 11.2.100 - avfilter.h | ||||
|   Add AVFilterGraph->max_buffered_frames. | ||||
| 
 | ||||
|  |  | |||
|  | @ -51,6 +51,7 @@ HEADERS = adler32.h                                                     \ | |||
|           hwcontext_qsv.h                                               \
 | ||||
|           hwcontext_mediacodec.h                                        \
 | ||||
|           hwcontext_opencl.h                                            \
 | ||||
|           hwcontext_oh.h                                                \
 | ||||
|           hwcontext_vaapi.h                                             \
 | ||||
|           hwcontext_videotoolbox.h                                      \
 | ||||
|           hwcontext_vdpau.h                                             \
 | ||||
|  | @ -210,6 +211,7 @@ OBJS-$(CONFIG_AMF)                      += hwcontext_amf.o | |||
| OBJS-$(CONFIG_LIBDRM)                   += hwcontext_drm.o | ||||
| OBJS-$(CONFIG_MACOS_KPERF)              += macos_kperf.o | ||||
| OBJS-$(CONFIG_MEDIACODEC)               += hwcontext_mediacodec.o | ||||
| OBJS-$(CONFIG_OHCODEC)                  += hwcontext_oh.o | ||||
| OBJS-$(CONFIG_OPENCL)                   += hwcontext_opencl.o | ||||
| OBJS-$(CONFIG_QSV)                      += hwcontext_qsv.o | ||||
| OBJS-$(CONFIG_VAAPI)                    += hwcontext_vaapi.o | ||||
|  |  | |||
|  | @ -68,6 +68,9 @@ static const HWContextType * const hw_table[] = { | |||
| #endif | ||||
| #if CONFIG_AMF | ||||
|     &ff_hwcontext_type_amf, | ||||
| #endif | ||||
| #if CONFIG_OHCODEC | ||||
|     &ff_hwcontext_type_oh, | ||||
| #endif | ||||
|     NULL, | ||||
| }; | ||||
|  | @ -86,6 +89,7 @@ static const char *const hw_type_names[] = { | |||
|     [AV_HWDEVICE_TYPE_MEDIACODEC] = "mediacodec", | ||||
|     [AV_HWDEVICE_TYPE_VULKAN] = "vulkan", | ||||
|     [AV_HWDEVICE_TYPE_AMF] = "amf", | ||||
|     [AV_HWDEVICE_TYPE_OHCODEC] = "ohcodec", | ||||
| }; | ||||
| 
 | ||||
| typedef struct FFHWDeviceContext { | ||||
|  |  | |||
|  | @ -39,6 +39,8 @@ enum AVHWDeviceType { | |||
|     AV_HWDEVICE_TYPE_VULKAN, | ||||
|     AV_HWDEVICE_TYPE_D3D12VA, | ||||
|     AV_HWDEVICE_TYPE_AMF, | ||||
|     /* OpenHarmony Codec device */ | ||||
|     AV_HWDEVICE_TYPE_OHCODEC, | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  |  | |||
|  | @ -164,5 +164,6 @@ extern const HWContextType ff_hwcontext_type_videotoolbox; | |||
| extern const HWContextType ff_hwcontext_type_mediacodec; | ||||
| extern const HWContextType ff_hwcontext_type_vulkan; | ||||
| extern const HWContextType ff_hwcontext_type_amf; | ||||
| extern const HWContextType ff_hwcontext_type_oh; | ||||
| 
 | ||||
| #endif /* AVUTIL_HWCONTEXT_INTERNAL_H */ | ||||
|  |  | |||
							
								
								
									
										47
									
								
								libavutil/hwcontext_oh.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								libavutil/hwcontext_oh.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | |||
| /*
 | ||||
|  * This file is part of FFmpeg. | ||||
|  * | ||||
|  * Copyright (c) 2025 Zhao Zhili <quinkblack@foxmail.com> | ||||
|  * | ||||
|  * 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 <multimedia/player_framework/native_avcodec_base.h> | ||||
| 
 | ||||
| #include "hwcontext.h" | ||||
| #include "hwcontext_internal.h" | ||||
| #include "hwcontext_oh.h" | ||||
| 
 | ||||
| static int oh_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_oh = { | ||||
|     .type = AV_HWDEVICE_TYPE_OHCODEC, | ||||
|     .name = "ohcodec", | ||||
|     .device_hwctx_size = sizeof(AVOHCodecDeviceContext), | ||||
|     .device_create = oh_device_create, | ||||
|     .pix_fmts = (const enum AVPixelFormat[]) { | ||||
|         AV_PIX_FMT_OHCODEC, | ||||
|         AV_PIX_FMT_NONE | ||||
|     }, | ||||
| }; | ||||
							
								
								
									
										34
									
								
								libavutil/hwcontext_oh.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								libavutil/hwcontext_oh.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| /*
 | ||||
|  * This file is part of FFmpeg. | ||||
|  * | ||||
|  * Copyright (c) 2025 Zhao Zhili <quinkblack@foxmail.com> | ||||
|  * | ||||
|  * 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_OH_H | ||||
| #define AVUTIL_HWCONTEXT_OH_H | ||||
| 
 | ||||
| /**
 | ||||
|  * OpenHarmony codec device | ||||
|  */ | ||||
| typedef struct AVOHCodecDeviceContext { | ||||
|     /**
 | ||||
|      * Pointer to OHNativeWindow | ||||
|      */ | ||||
|     void *native_window; | ||||
| } AVOHCodecDeviceContext; | ||||
| 
 | ||||
| #endif /* AVUTIL_HWCONTEXT_OH_H */ | ||||
|  | @ -3263,6 +3263,10 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { | |||
|         }, | ||||
|         .flags = AV_PIX_FMT_FLAG_BE, | ||||
|     }, | ||||
|     [AV_PIX_FMT_OHCODEC] = { | ||||
|         .name = "ohcodec", | ||||
|         .flags = AV_PIX_FMT_FLAG_HWACCEL, | ||||
|     }, | ||||
| }; | ||||
| 
 | ||||
| static const char * const color_range_names[] = { | ||||
|  |  | |||
|  | @ -497,6 +497,8 @@ enum AVPixelFormat { | |||
|     AV_PIX_FMT_GBRP12MSBBE,    ///< planar GBR 4:4:4 36bpp, lowest bits zero, big-endian
 | ||||
|     AV_PIX_FMT_GBRP12MSBLE,    ///< planar GBR 4:4:4 36bpp, lowest bits zero, little-endian
 | ||||
| 
 | ||||
|     AV_PIX_FMT_OHCODEC, /// hardware decoding through openharmony
 | ||||
| 
 | ||||
|     AV_PIX_FMT_NB         ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
 | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -79,8 +79,8 @@ | |||
|  */ | ||||
| 
 | ||||
| #define LIBAVUTIL_VERSION_MAJOR  60 | ||||
| #define LIBAVUTIL_VERSION_MINOR   4 | ||||
| #define LIBAVUTIL_VERSION_MICRO 101 | ||||
| #define LIBAVUTIL_VERSION_MINOR   5 | ||||
| #define LIBAVUTIL_VERSION_MICRO 100 | ||||
| 
 | ||||
| #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||
|                                                LIBAVUTIL_VERSION_MINOR, \ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue