Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
  • zyad-ayad/vlc
  • shocknovaa/vlc
  • gremlinflat/vlc
  • Pratham24D/vlc
411 results
Show changes
Commits on Source (5)
......@@ -544,6 +544,63 @@ static inline video_transform_t transform_Inverse( video_transform_t transform )
return transform;
}
}
/**
* Dolby Vision metadata description
*/
enum vlc_dovi_reshape_method_t
{
VLC_DOVI_RESHAPE_POLYNOMIAL = 0,
VLC_DOVI_RESHAPE_MMR = 1,
};
enum vlc_dovi_nlq_method_t
{
VLC_DOVI_NLQ_NONE = -1,
VLC_DOVI_NLQ_LINEAR_DZ = 0,
};
#define VLC_ANCILLARY_ID_DOVI VLC_FOURCC('D','o','V','i')
typedef struct vlc_video_dovi_metadata_t
{
/* Common header fields */
uint8_t coef_log2_denom;
uint8_t bl_bit_depth;
uint8_t el_bit_depth;
enum vlc_dovi_nlq_method_t nlq_method_idc;
/* Colorspace metadata */
float nonlinear_offset[3];
float nonlinear_matrix[9];
float linear_matrix[9];
uint16_t source_min_pq; /* 12-bit PQ values */
uint16_t source_max_pq;
/**
* Do not reorder or modify the following structs, they are intentionally
* specified to be identical to AVDOVIReshapingCurve / AVDOVINLQParams.
*/
struct vlc_dovi_reshape_t {
uint8_t num_pivots;
uint16_t pivots[9];
enum vlc_dovi_reshape_method_t mapping_idc[8];
uint8_t poly_order[8];
int64_t poly_coef[8][3];
uint8_t mmr_order[8];
int64_t mmr_constant[8];
int64_t mmr_coef[8][3][7];
} curves[3];
struct vlc_dovi_nlq_t {
uint8_t offset_depth; /* bit depth of offset value */
uint16_t offset;
uint64_t hdr_in_max;
uint64_t dz_slope;
uint64_t dz_threshold;
} nlq[3];
} vlc_video_dovi_metadata_t;
/**
* subtitles format description
*/
......
......@@ -431,6 +431,19 @@ VLC_API picture_t *picture_Clone(picture_t *pic);
VLC_API int
picture_AttachAncillary(picture_t *pic, struct vlc_ancillary *ancillary);
/**
* Allocate a new ancillary and attach it to a picture. Helper equivalent to
* malloc + vlc_ancillary_Create + picture_AttachAncillary. The returned memory
* is not initialized.
*
* @param pic picture to attach created ancillary to
* @param id id of the ancillary to create
* @param size allocation size in bytes
* @return The allocated pointer on success, NULL on out-of-memory
*/
VLC_API void *
picture_AttachNewAncillary(picture_t *pic, vlc_ancillary_id id, size_t size);
/**
* Return the ancillary identified by an ID
*
......@@ -439,7 +452,7 @@ picture_AttachAncillary(picture_t *pic, struct vlc_ancillary *ancillary);
* not present
*/
VLC_API struct vlc_ancillary *
picture_GetAncillary(picture_t *pic, vlc_ancillary_id id);
picture_GetAncillary(const picture_t *pic, vlc_ancillary_id id);
/**
* This function will export a picture to an encoded bitstream.
......
......@@ -46,6 +46,10 @@
#include <libavutil/stereo3d.h>
#if LIBAVUTIL_VERSION_CHECK( 57, 16, 100 )
# include <libavutil/dovi_meta.h>
#endif
#include "../cc.h"
#define FRAME_INFO_DEPTH 64
......@@ -723,6 +727,34 @@ static void update_late_frame_count( decoder_t *p_dec, block_t *p_block,
}
}
#if LIBAVUTIL_VERSION_CHECK( 57, 16, 100 )
static void map_dovi_metadata( vlc_video_dovi_metadata_t *out,
const AVDOVIMetadata *data )
{
const AVDOVIRpuDataHeader *hdr = av_dovi_get_header( data );
const AVDOVIDataMapping *vdm = av_dovi_get_mapping( data );
const AVDOVIColorMetadata *color = av_dovi_get_color( data );
out->bl_bit_depth = hdr->bl_bit_depth;
out->el_bit_depth = hdr->el_bit_depth;
out->coef_log2_denom = hdr->coef_log2_denom;
out->nlq_method_idc = (enum vlc_dovi_nlq_method_t) vdm->nlq_method_idc;
for( size_t i = 0; i < ARRAY_SIZE( out->nonlinear_offset ); i++ )
out->nonlinear_offset[i] = av_q2d( color->ycc_to_rgb_offset[i] );
for( size_t i = 0; i < ARRAY_SIZE( out->nonlinear_matrix ); i++ )
out->nonlinear_matrix[i] = av_q2d( color->ycc_to_rgb_matrix[i] );
for( size_t i = 0; i < ARRAY_SIZE( out->linear_matrix); i++ )
out->linear_matrix[i] = av_q2d( color->rgb_to_lms_matrix[i] );
out->source_min_pq = color->source_min_pq;
out->source_max_pq = color->source_max_pq;
static_assert(sizeof(out->curves) == sizeof(vdm->curves), "struct mismatch");
static_assert(sizeof(out->nlq) == sizeof(vdm->nlq), "struct mismatch");
memcpy(out->curves, vdm->curves, sizeof(out->curves));
memcpy(out->nlq, vdm->nlq, sizeof(out->nlq));
for( int i = 0; i < ARRAY_SIZE( out->curves ); i++)
assert( out->curves[i].num_pivots <= ARRAY_SIZE( out->curves[i].pivots ));
}
#endif
static int DecodeSidedata( decoder_t *p_dec, const AVFrame *frame, picture_t *p_pic )
{
......@@ -876,6 +908,19 @@ static int DecodeSidedata( decoder_t *p_dec, const AVFrame *frame, picture_t *p_
cc_Flush( &p_sys->cc );
}
}
#if LIBAVUTIL_VERSION_CHECK( 57, 16, 100 )
const AVFrameSideData *p_dovi = av_frame_get_side_data( frame, AV_FRAME_DATA_DOVI_METADATA );
if( p_dovi )
{
vlc_video_dovi_metadata_t *dst;
dst = picture_AttachNewAncillary( p_pic, VLC_ANCILLARY_ID_DOVI, sizeof(*dst) );
if( !dst )
return VLC_ENOMEM;
map_dovi_metadata( dst, (AVDOVIMetadata *) p_dovi->data );
}
#endif
return 0;
}
......
......@@ -84,6 +84,10 @@ typedef struct vout_display_sys_t
const struct pl_hook *hook;
char *hook_path;
#if PL_API_VER >= 185
struct pl_dovi_metadata dovi_metadata;
#endif
} vout_display_sys_t;
// Display callbacks
......@@ -239,6 +243,10 @@ static void PictureRender(vout_display_t *vd, picture_t *pic,
},
};
#if PL_API_VER >= 185
vlc_placebo_DoviMetadata(&img, pic, &sys->dovi_metadata);
#endif
// Upload the image data for each plane
struct pl_plane_data data[4];
if (!vlc_placebo_PlaneData(pic, data, NULL)) {
......
......@@ -27,6 +27,7 @@
#include <stdlib.h>
#include <vlc_common.h>
#include <vlc_ancillary.h>
#include "utils.h"
static void Log(void *priv, enum pl_log_level level, const char *msg)
......@@ -451,6 +452,71 @@ struct pl_color_repr vlc_placebo_ColorRepr(const video_format_t *fmt)
};
}
#if PL_API_VER >= 187
void vlc_placebo_DoviMetadata(struct pl_frame *frame, const picture_t *pic,
struct pl_dovi_metadata *dst)
{
struct vlc_ancillary *ancillary = picture_GetAncillary(pic, VLC_ANCILLARY_ID_DOVI);
if (!ancillary)
return;
const vlc_video_dovi_metadata_t *src = vlc_ancillary_GetData(ancillary);
static_assert(sizeof(dst->nonlinear_offset) == sizeof(src->nonlinear_offset), "array mismatch");
static_assert(sizeof(dst->nonlinear) == sizeof(src->nonlinear_matrix), "matrix mismatch");
static_assert(sizeof(dst->linear) == sizeof(src->linear_matrix), "matrix mismatch");
memcpy(dst->nonlinear_offset, src->nonlinear_offset,
sizeof(dst->nonlinear_offset));
memcpy(dst->nonlinear.m[0], src->nonlinear_matrix, sizeof(dst->nonlinear.m));
memcpy(dst->linear.m[0], src->linear_matrix, sizeof(dst->linear.m));
for (int c = 0; c < ARRAY_SIZE(dst->comp); c++) {
const struct vlc_dovi_reshape_t *csrc = &src->curves[c];
struct pl_reshape_data *cdst = &dst->comp[c];
cdst->num_pivots = csrc->num_pivots;
assert(csrc->num_pivots <= ARRAY_SIZE(csrc->pivots));
for (int i = 0; i < csrc->num_pivots; i++) {
const float scale = 1.0f / ((1 << src->bl_bit_depth) - 1);
cdst->pivots[i] = scale * csrc->pivots[i];
}
for (int i = 0; i < csrc->num_pivots - 1; i++) {
const float scale = 1.0f / (1 << src->coef_log2_denom);
cdst->method[i] = csrc->mapping_idc[i];
switch (csrc->mapping_idc[i]) {
case VLC_DOVI_RESHAPE_POLYNOMIAL:
for (int k = 0; k < ARRAY_SIZE(cdst->poly_coeffs[i]); k++) {
cdst->poly_coeffs[i][k] = (k <= csrc->poly_order[i])
? scale * csrc->poly_coef[i][k]
: 0.0f;
}
break;
case VLC_DOVI_RESHAPE_MMR:
cdst->mmr_order[i] = csrc->mmr_order[i];
cdst->mmr_constant[i] = scale * csrc->mmr_constant[i];
for (int j = 0; j < csrc->mmr_order[i]; j++) {
for (int k = 0; k < ARRAY_SIZE(cdst->mmr_coeffs[i][j]); k++)
cdst->mmr_coeffs[i][j][k] = scale * csrc->mmr_coef[i][j][k];
}
break;
}
}
}
// The output of the Dolby Vision reshaping process is always BT.2020/PQ,
// no matter the color space of the base layer, so override these fields
frame->color.primaries = PL_COLOR_PRIM_BT_2020;
frame->color.transfer = PL_COLOR_TRC_PQ;
frame->repr.sys = PL_COLOR_SYSTEM_DOLBYVISION;
frame->repr.dovi = dst;
// These fields are specified to always have 12-bit precision
const float scale = 1.0f / ((1 << 12) - 1);
frame->color.hdr.min_luma = pl_hdr_rescale(PL_HDR_PQ, PL_HDR_NITS,
scale * src->source_min_pq);
frame->color.hdr.max_luma = pl_hdr_rescale(PL_HDR_PQ, PL_HDR_NITS,
scale * src->source_max_pq);
}
#endif
enum pl_chroma_location vlc_placebo_ChromaLoc(const video_format_t *fmt)
{
static const enum pl_chroma_location locs[CHROMA_LOCATION_MAX+1] = {
......
......@@ -38,6 +38,12 @@ struct pl_color_space vlc_placebo_ColorSpace(const video_format_t *);
struct pl_color_repr vlc_placebo_ColorRepr(const video_format_t *);
enum pl_chroma_location vlc_placebo_ChromaLoc(const video_format_t *);
#if PL_API_VER >= 185
// Map dolby vision metadata, using `data` as storage.
void vlc_placebo_DoviMetadata(struct pl_frame *out, const picture_t *pic,
struct pl_dovi_metadata *data);
#endif
int vlc_placebo_PlaneComponents(const video_format_t *, struct pl_plane[4]);
// Fill a pl_plane_data array with various data. Returns the number of planes,
......
......@@ -309,6 +309,7 @@ net_SetCSCov
net_Write
NTPtime64
picture_AttachAncillary
picture_AttachNewAncillary
picture_BlendSubpicture
picture_Clone
picture_CopyPixels
......
......@@ -479,8 +479,29 @@ picture_AttachAncillary(picture_t *pic, struct vlc_ancillary *ancillary)
return vlc_ancillary_array_Insert(&priv->ancillaries, ancillary);
}
void *
picture_AttachNewAncillary(picture_t *pic, vlc_ancillary_id id, size_t size)
{
void *data = malloc(size);
if (!data)
return NULL;
struct vlc_ancillary *ancillary = vlc_ancillary_Create(data, id);
if (!ancillary) {
free(data);
return NULL;
}
if (picture_AttachAncillary(pic, ancillary) != 0) {
vlc_ancillary_Release(ancillary);
return NULL;
}
return data;
}
struct vlc_ancillary *
picture_GetAncillary(picture_t *pic, vlc_ancillary_id id)
picture_GetAncillary(const picture_t *pic, vlc_ancillary_id id)
{
picture_priv_t *priv = container_of(pic, picture_priv_t, picture);
return vlc_ancillary_array_Get(&priv->ancillaries, id);
......