You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avutil/frame: Rename av_frame_side_data_get and add wrapper for it
av_frame_side_data_get() has a const AVFrameSideData * const *sd parameter; so calling it with an AVFramesSideData **sd like AVCodecContext.decoded_side_data (or with a AVFramesSideData * const *sd) is safe, but the conversion is not performed automatically in C. All users of this function therefore resort to a cast. This commit changes this: av_frame_side_data_get() is renamed to av_frame_side_data_get_c(); furthermore, a static inline wrapper for it name av_frame_side_data_get() is added that accepts an AVFramesSideData * const * and converts this to const AVFramesSideData * const * in a Wcast-qual safe way. This also allows to remove the casts from the current users. Reviewed-by: Jan Ekström <jeebjp@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
		| @@ -3,7 +3,10 @@ The last version increases of all libraries were on 2024-03-07 | ||||
| API changes, most recent first: | ||||
|  | ||||
| 2024-03-22 - xxxxxxxxxx - lavu 59.4.100 - frame.h | ||||
|   Constified the first-level pointee of av_frame_side_data_get(). | ||||
|   Constified the first-level pointee of av_frame_side_data_get() | ||||
|   and renamed it to av_frame_side_data_get_c(). From now on, | ||||
|   av_frame_side_data_get() is a wrapper around av_frame_side_data_get_c() | ||||
|   that accepts AVFrameSideData * const *sd. | ||||
|  | ||||
| 2024-03-xx - xxxxxxxxxx - lavc 61.2.100 - avcodec.h | ||||
|   Add AVCodecContext.[nb_]decoded_side_data. | ||||
|   | ||||
| @@ -180,12 +180,10 @@ static void handle_side_data(AVCodecContext *avctx, | ||||
|                              EbSvtAv1EncConfiguration *param) | ||||
| { | ||||
|     const AVFrameSideData *cll_sd = | ||||
|         av_frame_side_data_get( | ||||
|             (const AVFrameSideData **)avctx->decoded_side_data, | ||||
|         av_frame_side_data_get(avctx->decoded_side_data, | ||||
|             avctx->nb_decoded_side_data, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); | ||||
|     const AVFrameSideData *mdcv_sd = | ||||
|         av_frame_side_data_get( | ||||
|             (const AVFrameSideData **)avctx->decoded_side_data, | ||||
|         av_frame_side_data_get(avctx->decoded_side_data, | ||||
|             avctx->nb_decoded_side_data, | ||||
|             AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); | ||||
|  | ||||
|   | ||||
| @@ -1044,12 +1044,10 @@ static void handle_side_data(AVCodecContext *avctx, x264_param_t *params) | ||||
| { | ||||
| #if CONFIG_LIBX264_HDR10 | ||||
|     const AVFrameSideData *cll_sd = | ||||
|         av_frame_side_data_get( | ||||
|             (const AVFrameSideData **)avctx->decoded_side_data, | ||||
|         av_frame_side_data_get(avctx->decoded_side_data, | ||||
|             avctx->nb_decoded_side_data, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); | ||||
|     const AVFrameSideData *mdcv_sd = | ||||
|         av_frame_side_data_get( | ||||
|             (const AVFrameSideData **)avctx->decoded_side_data, | ||||
|         av_frame_side_data_get(avctx->decoded_side_data, | ||||
|             avctx->nb_decoded_side_data, | ||||
|             AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); | ||||
|  | ||||
|   | ||||
| @@ -211,12 +211,10 @@ static int handle_side_data(AVCodecContext *avctx, const x265_api *api, | ||||
|                             x265_param *params) | ||||
| { | ||||
|     const AVFrameSideData *cll_sd = | ||||
|         av_frame_side_data_get( | ||||
|             (const AVFrameSideData **)avctx->decoded_side_data, | ||||
|         av_frame_side_data_get(avctx->decoded_side_data, | ||||
|             avctx->nb_decoded_side_data, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); | ||||
|     const AVFrameSideData *mdcv_sd = | ||||
|         av_frame_side_data_get( | ||||
|             (const AVFrameSideData **)avctx->decoded_side_data, | ||||
|         av_frame_side_data_get(avctx->decoded_side_data, | ||||
|             avctx->nb_decoded_side_data, | ||||
|             AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); | ||||
|  | ||||
|   | ||||
| @@ -813,9 +813,9 @@ int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd, | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| const AVFrameSideData *av_frame_side_data_get(const AVFrameSideData * const *sd, | ||||
|                                               const int nb_sd, | ||||
|                                               enum AVFrameSideDataType type) | ||||
| const AVFrameSideData *av_frame_side_data_get_c(const AVFrameSideData * const *sd, | ||||
|                                                 const int nb_sd, | ||||
|                                                 enum AVFrameSideDataType type) | ||||
| { | ||||
|     for (int i = 0; i < nb_sd; i++) { | ||||
|         if (sd[i]->type == type) | ||||
| @@ -828,7 +828,7 @@ AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, | ||||
|                                         enum AVFrameSideDataType type) | ||||
| { | ||||
|     return (AVFrameSideData *)av_frame_side_data_get( | ||||
|         (const AVFrameSideData **)frame->side_data, frame->nb_side_data, | ||||
|         frame->side_data, frame->nb_side_data, | ||||
|         type | ||||
|     ); | ||||
| } | ||||
|   | ||||
| @@ -1051,9 +1051,24 @@ int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd, | ||||
|  * @return a pointer to the side data of a given type on success, NULL if there | ||||
|  *         is no side data with such type in this set. | ||||
|  */ | ||||
| const AVFrameSideData *av_frame_side_data_get(const AVFrameSideData * const *sd, | ||||
| const AVFrameSideData *av_frame_side_data_get_c(const AVFrameSideData * const *sd, | ||||
|                                                 const int nb_sd, | ||||
|                                                 enum AVFrameSideDataType type); | ||||
|  | ||||
| /** | ||||
|  * Wrapper around av_frame_side_data_get_c() to workaround the limitation | ||||
|  * that for any type T the conversion from T * const * to const T * const * | ||||
|  * is not performed automatically in C. | ||||
|  * @see av_frame_side_data_get_c() | ||||
|  */ | ||||
| static inline | ||||
| const AVFrameSideData *av_frame_side_data_get(AVFrameSideData * const *sd, | ||||
|                                               const int nb_sd, | ||||
|                                               enum AVFrameSideDataType type); | ||||
|                                               enum AVFrameSideDataType type) | ||||
| { | ||||
|     return av_frame_side_data_get_c((const AVFrameSideData * const *)sd, | ||||
|                                     nb_sd, type); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user