You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avutil: introduce AVAmbientViewingEnvironment side data
This enables exposing H.274 Ambient Viewing Environment metadata in the framework.
This commit is contained in:
		| @@ -14,6 +14,12 @@ libavutil:     2021-04-27 | ||||
|  | ||||
| API changes, most recent first: | ||||
|  | ||||
| 2023-01-13 - xxxxxxxxxx - lavu 57.44.100 - ambient_viewing_environment.h frame.h | ||||
|   Adds a new structure for holding H.274 Ambient Viewing Environment metadata, | ||||
|   AVAmbientViewingEnvironment. | ||||
|   Adds a new AVFrameSideDataType entry AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT | ||||
|   for it. | ||||
|  | ||||
| 2022-12-xx - xxxxxxxxxx - lavc 59.55.100 - avcodec.h | ||||
|   Add AV_HWACCEL_FLAG_UNSAFE_OUTPUT. | ||||
|  | ||||
|   | ||||
| @@ -4,6 +4,7 @@ DESC = FFmpeg utility library | ||||
| HEADERS = adler32.h                                                     \ | ||||
|           aes.h                                                         \ | ||||
|           aes_ctr.h                                                     \ | ||||
|           ambient_viewing_environment.h                                 \ | ||||
|           attributes.h                                                  \ | ||||
|           audio_fifo.h                                                  \ | ||||
|           avassert.h                                                    \ | ||||
| @@ -102,6 +103,7 @@ BUILT_HEADERS = avconfig.h                                              \ | ||||
| OBJS = adler32.o                                                        \ | ||||
|        aes.o                                                            \ | ||||
|        aes_ctr.o                                                        \ | ||||
|        ambient_viewing_environment.o                                    \ | ||||
|        audio_fifo.o                                                     \ | ||||
|        avstring.o                                                       \ | ||||
|        avsscanf.o                                                       \ | ||||
|   | ||||
							
								
								
									
										49
									
								
								libavutil/ambient_viewing_environment.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								libavutil/ambient_viewing_environment.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| /* | ||||
|  * Copyright (c) 2023 Jan Ekström <jeebjp@gmail.com> | ||||
|  * | ||||
|  * 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 "ambient_viewing_environment.h" | ||||
| #include "mem.h" | ||||
|  | ||||
| AVAmbientViewingEnvironment *av_ambient_viewing_environment_alloc(size_t *size) | ||||
| { | ||||
|     AVAmbientViewingEnvironment *env = | ||||
|         av_mallocz(sizeof(AVAmbientViewingEnvironment)); | ||||
|     if (!env) | ||||
|         return NULL; | ||||
|  | ||||
|      if (size) | ||||
|         *size = sizeof(*env); | ||||
|  | ||||
|     return env; | ||||
| } | ||||
|  | ||||
| AVAmbientViewingEnvironment *av_ambient_viewing_environment_create_side_data(AVFrame *frame) | ||||
| { | ||||
|     AVFrameSideData *side_data = | ||||
|         av_frame_new_side_data(frame, | ||||
|                                AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT, | ||||
|                                sizeof(AVAmbientViewingEnvironment)); | ||||
|     if (!side_data) | ||||
|         return NULL; | ||||
|  | ||||
|     memset(side_data->data, 0, side_data->size); | ||||
|  | ||||
|     return (AVAmbientViewingEnvironment *)side_data->data; | ||||
| } | ||||
							
								
								
									
										72
									
								
								libavutil/ambient_viewing_environment.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								libavutil/ambient_viewing_environment.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| /* | ||||
|  * Copyright (c) 2023 Jan Ekström <jeebjp@gmail.com> | ||||
|  * | ||||
|  * 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_AMBIENT_VIEWING_ENVIRONMENT_H | ||||
| #define AVUTIL_AMBIENT_VIEWING_ENVIRONMENT_H | ||||
|  | ||||
| #include <stddef.h> | ||||
| #include "frame.h" | ||||
| #include "rational.h" | ||||
|  | ||||
| /** | ||||
|  * Ambient viewing environment metadata as defined by H.274. The values are | ||||
|  * saved in AVRationals so that they keep their exactness, while allowing for | ||||
|  * easy access to a double value with f.ex. av_q2d. | ||||
|  * | ||||
|  * @note sizeof(AVAmbientViewingEnvironment) is not part of the public ABI, and | ||||
|  *       it must be allocated using av_ambient_viewing_environment_alloc. | ||||
|  */ | ||||
| typedef struct AVAmbientViewingEnvironment { | ||||
|     /** | ||||
|      * Environmental illuminance of the ambient viewing environment in lux. | ||||
|      */ | ||||
|     AVRational ambient_illuminance; | ||||
|  | ||||
|     /** | ||||
|      * Normalized x chromaticity coordinate of the environmental ambient light | ||||
|      * in the nominal viewing environment according to the CIE 1931 definition | ||||
|      * of x and y as specified in ISO/CIE 11664-1. | ||||
|      */ | ||||
|     AVRational ambient_light_x; | ||||
|  | ||||
|     /** | ||||
|      * Normalized y chromaticity coordinate of the environmental ambient light | ||||
|      * in the nominal viewing environment according to the CIE 1931 definition | ||||
|      * of x and y as specified in ISO/CIE 11664-1. | ||||
|      */ | ||||
|     AVRational ambient_light_y; | ||||
| } AVAmbientViewingEnvironment; | ||||
|  | ||||
| /** | ||||
|  * Allocate an AVAmbientViewingEnvironment structure. | ||||
|  * | ||||
|  * @return the newly allocated struct or NULL on failure | ||||
|  */ | ||||
| AVAmbientViewingEnvironment *av_ambient_viewing_environment_alloc(size_t *size); | ||||
|  | ||||
| /** | ||||
|  * Allocate and add an AVAmbientViewingEnvironment structure to an existing | ||||
|  * AVFrame as side data. | ||||
|  * | ||||
|  * @return the newly allocated struct, or NULL on failure | ||||
|  */ | ||||
| AVAmbientViewingEnvironment *av_ambient_viewing_environment_create_side_data(AVFrame *frame); | ||||
|  | ||||
| #endif /* AVUTIL_AMBIENT_VIEWING_ENVIRONMENT_H */ | ||||
| @@ -831,6 +831,7 @@ const char *av_frame_side_data_name(enum AVFrameSideDataType type) | ||||
|     case AV_FRAME_DATA_DETECTION_BBOXES:            return "Bounding boxes for object detection and classification"; | ||||
|     case AV_FRAME_DATA_DOVI_RPU_BUFFER:             return "Dolby Vision RPU Data"; | ||||
|     case AV_FRAME_DATA_DOVI_METADATA:               return "Dolby Vision Metadata"; | ||||
|     case AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT: return "Ambient viewing environment"; | ||||
|     } | ||||
|     return NULL; | ||||
| } | ||||
|   | ||||
| @@ -209,6 +209,11 @@ enum AVFrameSideDataType { | ||||
|      * volume transform - CUVA 005.1-2021. | ||||
|      */ | ||||
|     AV_FRAME_DATA_DYNAMIC_HDR_VIVID, | ||||
|  | ||||
|     /** | ||||
|      * Ambient viewing environment metadata, as defined by H.274. | ||||
|      */ | ||||
|     AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT, | ||||
| }; | ||||
|  | ||||
| enum AVActiveFormatDescription { | ||||
|   | ||||
| @@ -79,7 +79,7 @@ | ||||
|  */ | ||||
|  | ||||
| #define LIBAVUTIL_VERSION_MAJOR  57 | ||||
| #define LIBAVUTIL_VERSION_MINOR  43 | ||||
| #define LIBAVUTIL_VERSION_MINOR  44 | ||||
| #define LIBAVUTIL_VERSION_MICRO 100 | ||||
|  | ||||
| #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user