You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avcodec/avcodec: add helpers to convert between packet and frame side data
They will be used in following commits. Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
		| @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2025-03-28 | ||||
|  | ||||
| API changes, most recent first: | ||||
|  | ||||
| 2025-10-30 - xxxxxxxxxx - lavc 62.17.100 - packet.h | ||||
|   Add av_packet_side_data_from_frame() and av_packet_side_data_to_frame(). | ||||
|  | ||||
| 2025-10-xx - xxxxxxxxxx - lavu 60.16.100 - pixfmt.h | ||||
|   Add AVCOL_TRC_EXT_BASE, AVCOL_TRC_V_LOG, | ||||
|   AVCOL_PRI_EXT_BASE and AVCOL_PRI_V_GAMUT. | ||||
|   | ||||
| @@ -815,3 +815,53 @@ int avcodec_get_supported_config(const AVCodecContext *avctx, const AVCodec *cod | ||||
|         return ff_default_get_supported_config(avctx, codec, config, flags, out, out_num); | ||||
|     } | ||||
| } | ||||
|  | ||||
| int av_packet_side_data_from_frame(AVPacketSideData **psd, int *pnb_sd, | ||||
|                                    const AVFrameSideData *src, unsigned int flags) | ||||
| { | ||||
|     AVPacketSideData *sd = NULL; | ||||
|  | ||||
|     for (unsigned j = 0; ff_sd_global_map[j].packet < AV_PKT_DATA_NB; j++) { | ||||
|         if (ff_sd_global_map[j].frame != src->type) | ||||
|             continue; | ||||
|  | ||||
|         sd = av_packet_side_data_new(psd, pnb_sd, ff_sd_global_map[j].packet, | ||||
|                                      src->size, 0); | ||||
|  | ||||
|         if (!sd) | ||||
|             return AVERROR(ENOMEM); | ||||
|  | ||||
|         memcpy(sd->data, src->data, src->size); | ||||
|         break; | ||||
|     } | ||||
|  | ||||
|     if (!sd) | ||||
|         return AVERROR(EINVAL); | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int av_packet_side_data_to_frame(AVFrameSideData ***psd, int *pnb_sd, | ||||
|                                  const AVPacketSideData *src, unsigned int flags) | ||||
| { | ||||
|     AVFrameSideData *sd = NULL; | ||||
|  | ||||
|     for (unsigned j = 0; ff_sd_global_map[j].packet < AV_PKT_DATA_NB; j++) { | ||||
|         if (ff_sd_global_map[j].packet != src->type) | ||||
|             continue; | ||||
|  | ||||
|         sd = av_frame_side_data_new(psd, pnb_sd, ff_sd_global_map[j].frame, | ||||
|                                     src->size, flags); | ||||
|  | ||||
|         if (!sd) | ||||
|             return AVERROR(ENOMEM); | ||||
|  | ||||
|         memcpy(sd->data, src->data, src->size); | ||||
|         break; | ||||
|     } | ||||
|  | ||||
|     if (!sd) | ||||
|         return AVERROR(EINVAL); | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -489,6 +489,36 @@ void av_packet_side_data_remove(AVPacketSideData *sd, int *nb_sd, | ||||
|  */ | ||||
| void av_packet_side_data_free(AVPacketSideData **sd, int *nb_sd); | ||||
|  | ||||
| struct AVFrameSideData; | ||||
|  | ||||
| /** | ||||
|  * Add a new packet side data entry to an array based on existing frame | ||||
|  * side data, if a matching type exists for packet side data. | ||||
|  * | ||||
|  * @param flags              Currently unused. Must be 0. | ||||
|  * @retval >= 0              Success | ||||
|  * @retval AVERROR(EINVAL)   The frame side data type does not have a matching | ||||
|  *                           packet side data type. | ||||
|  * @retval AVERROR(ENOMEM)   Failed to add a side data entry to the array, or | ||||
|  *                           similar. | ||||
|  */ | ||||
| int av_packet_side_data_from_frame(AVPacketSideData **sd, int *nb_sd, | ||||
|                                    const struct AVFrameSideData *src, unsigned int flags); | ||||
| /** | ||||
|  * Add a new frame side data entry to an array based on existing packet | ||||
|  * side data, if a matching type exists for frame side data. | ||||
|  * | ||||
|  * @param flags              Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, | ||||
|  *                           or 0. | ||||
|  * @retval >= 0              Success | ||||
|  * @retval AVERROR(EINVAL)   The packet side data type does not have a matching | ||||
|  *                           frame side data type. | ||||
|  * @retval AVERROR(ENOMEM)   Failed to add a side data entry to the array, or | ||||
|  *                           similar. | ||||
|  */ | ||||
| int av_packet_side_data_to_frame(struct AVFrameSideData ***sd, int *nb_sd, | ||||
|                                  const AVPacketSideData *src, unsigned int flags); | ||||
|  | ||||
| const char *av_packet_side_data_name(enum AVPacketSideDataType type); | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -29,7 +29,7 @@ | ||||
|  | ||||
| #include "version_major.h" | ||||
|  | ||||
| #define LIBAVCODEC_VERSION_MINOR  16 | ||||
| #define LIBAVCODEC_VERSION_MINOR  17 | ||||
| #define LIBAVCODEC_VERSION_MICRO 100 | ||||
|  | ||||
| #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user