diff --git a/include/vlc_picture.h b/include/vlc_picture.h index 54171e140f..69b3b4d459 100644 --- a/include/vlc_picture.h +++ b/include/vlc_picture.h @@ -28,14 +28,12 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { #endif -struct vlc_ancillary; -typedef uint32_t vlc_ancillary_id; - /** * \defgroup picture Generic picture API * \ingroup output @@ -417,6 +415,27 @@ VLC_API void picture_Copy( picture_t *p_dst, const picture_t *p_src ); */ VLC_API picture_t *picture_Clone(picture_t *pic); +/** + * Merge two ancillary arrays + * + * @param picture the picture that hold the destination ancillary array + * @param src_array pointer to an ancillary array + * @return VLC_SUCCESS in case of success, VLC_ENOMEM in case of alloc error + */ +VLC_API int +picture_MergeAncillaries(picture_t *pic, const vlc_ancillary_array *src_array); + +/** + * Merge and clear two ancillary arrays + * + * @param picture the picture that hold the destination ancillary array + * @param src_array pointer to the source ancillary array, will point to empty + * data after this call. + * @return VLC_SUCCESS in case of success, VLC_ENOMEM in case of alloc error + */ +VLC_API int +picture_MergeAndClearAncillaries(picture_t *pic, vlc_ancillary_array *src_array); + /** * Attach an ancillary to the picture * diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 63958d9039..3dad7d10dd 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -318,6 +318,8 @@ net_Read net_SetCSCov net_Write picture_AttachAncillary +picture_MergeAncillaries +picture_MergeAndClearAncillaries picture_AttachNewAncillary picture_BlendSubpicture picture_Clone diff --git a/src/misc/picture.c b/src/misc/picture.c index 6c7c7c593a..ed6e52d937 100644 --- a/src/misc/picture.c +++ b/src/misc/picture.c @@ -484,6 +484,20 @@ picture_t *picture_Clone(picture_t *picture) return clone; } +int +picture_MergeAncillaries(picture_t *pic, const vlc_ancillary_array *src_array) +{ + picture_priv_t *priv = container_of(pic, picture_priv_t, picture); + return vlc_ancillary_array_Merge(&priv->ancillaries, src_array); +} + +int +picture_MergeAndClearAncillaries(picture_t *pic, vlc_ancillary_array *src_array) +{ + picture_priv_t *priv = container_of(pic, picture_priv_t, picture); + return vlc_ancillary_array_MergeAndClear(&priv->ancillaries, src_array); +} + int picture_AttachAncillary(picture_t *pic, struct vlc_ancillary *ancillary) {