Coverage Report

Created: 2026-01-10 07:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/vlc/include/vlc_ancillary.h
Line
Count
Source
1
/*****************************************************************************
2
 * vlc_ancillary.h: ancillary management functions
3
 *****************************************************************************
4
 * Copyright (C) 2021 VLC authors and VideoLAN
5
 *
6
 * This program is free software; you can redistribute it and/or modify it
7
 * under the terms of the GNU Lesser General Public License as published by
8
 * the Free Software Foundation; either version 2.1 of the License, or
9
 * (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
 * GNU Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public License
17
 * along with this program; if not, write to the Free Software Foundation,
18
 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19
 *****************************************************************************/
20
21
#ifndef VLC_ANCILLARY_H
22
#define VLC_ANCILLARY_H 1
23
24
#include <vlc_vector.h>
25
#include <stdint.h>
26
27
/**
28
 * \defgroup ancillary Ancillary
29
 * \ingroup input
30
 *
31
 * Ancillary that can be attached to any vlc_frame_t or picture_t.
32
 *
33
 * Ancillaries can be created from:
34
 *  - packetized demuxer modules,
35
 *  - packetizer modules,
36
 *  - decoder modules.
37
 *
38
 *  @warning Ancillaries should not be attached from a non packetized demuxer
39
 *  module since the attachment to the vlc_frame will be lost by the packetizer
40
 *  module that will be automatically inserted.
41
 *
42
 * Ancillaries are automatically forwarded from a vlc_frame_t to an other
43
 * vlc_frame_t and from a picture_t to an other picture_t. This allow to keep
44
 * ancillaries untouched when audio filters or video filters are used (these
45
 * filters don't have to know about the ancillary).
46
 *
47
 * Ancillary readers can be either:
48
 *  - A decoder module,
49
 *  - An audio output,
50
 *  - A video output,
51
 *  - A video or audio filter.
52
 *
53
 * @{
54
 * \file
55
 * Ancillary definition and functions
56
 * \defgroup ancillary_api Ancillary API
57
 * @{
58
 */
59
60
/**
61
 * Ancillary opaque struct, refcounted struct that hold user data with a free
62
 * callback.
63
 */
64
struct vlc_ancillary;
65
66
typedef struct VLC_VECTOR(struct vlc_ancillary *) vlc_ancillary_array;
67
#define VLC_ANCILLARY_ARRAY_INITIALIZER VLC_VECTOR_INITIALIZER
68
69
/**
70
 * ID of an ancillary. Each ancillary user can create its own unique ID via
71
 * VLC_ANCILLARY_ID.
72
 */
73
typedef uint32_t vlc_ancillary_id;
74
#define VLC_ANCILLARY_ID(a,b,c,d) VLC_FOURCC(a,b,c,d)
75
76
/**
77
 * Callback to free an ancillary data
78
 */
79
typedef void (*vlc_ancillary_free_cb)(void *data);
80
81
/**
82
 * Create an ancillary
83
 *
84
 * @param data an opaque ancillary, can't be NULL
85
 * @param id id of ancillary
86
 * @param free_cb callback to release the data, can be NULL
87
 * @return a valid vlc_ancillary pointer or NULL in case of allocation error
88
 */
89
VLC_API struct vlc_ancillary *
90
vlc_ancillary_CreateWithFreeCb(void *data, vlc_ancillary_id id,
91
                               vlc_ancillary_free_cb free_cb);
92
93
/**
94
 * Helper to create an ancillary holding an allocated data
95
 */
96
static inline struct vlc_ancillary *
97
vlc_ancillary_Create(void *data, vlc_ancillary_id id)
98
0
{
99
0
    return vlc_ancillary_CreateWithFreeCb(data, id, free);
100
0
}
Unexecuted instantiation: demux-run.c:vlc_ancillary_Create
Unexecuted instantiation: var.c:vlc_ancillary_Create
Unexecuted instantiation: decoder.c:vlc_ancillary_Create
Unexecuted instantiation: aiff.c:vlc_ancillary_Create
Unexecuted instantiation: asf.c:vlc_ancillary_Create
Unexecuted instantiation: libasf.c:vlc_ancillary_Create
Unexecuted instantiation: asfpacket.c:vlc_ancillary_Create
Unexecuted instantiation: au.c:vlc_ancillary_Create
Unexecuted instantiation: avi.c:vlc_ancillary_Create
Unexecuted instantiation: libavi.c:vlc_ancillary_Create
Unexecuted instantiation: caf.c:vlc_ancillary_Create
Unexecuted instantiation: cdg.c:vlc_ancillary_Create
Unexecuted instantiation: es.c:vlc_ancillary_Create
Unexecuted instantiation: dts_header.c:vlc_ancillary_Create
Unexecuted instantiation: flac.c:vlc_ancillary_Create
Unexecuted instantiation: xiph_metadata.c:vlc_ancillary_Create
Unexecuted instantiation: h26x.c:vlc_ancillary_Create
Unexecuted instantiation: mjpeg.c:vlc_ancillary_Create
Unexecuted instantiation: mp4.c:vlc_ancillary_Create
Unexecuted instantiation: fragments.c:vlc_ancillary_Create
Unexecuted instantiation: attachments.c:vlc_ancillary_Create
Unexecuted instantiation: heif.c:vlc_ancillary_Create
Unexecuted instantiation: essetup.c:vlc_ancillary_Create
Unexecuted instantiation: meta.c:vlc_ancillary_Create
Unexecuted instantiation: libmp4.c:vlc_ancillary_Create
Unexecuted instantiation: nsv.c:vlc_ancillary_Create
Unexecuted instantiation: ps.c:vlc_ancillary_Create
Unexecuted instantiation: pva.c:vlc_ancillary_Create
Unexecuted instantiation: sap.c:vlc_ancillary_Create
Unexecuted instantiation: smf.c:vlc_ancillary_Create
Unexecuted instantiation: subtitle.c:vlc_ancillary_Create
Unexecuted instantiation: tta.c:vlc_ancillary_Create
Unexecuted instantiation: encttml.c:vlc_ancillary_Create
Unexecuted instantiation: substtml.c:vlc_ancillary_Create
Unexecuted instantiation: ttml.c:vlc_ancillary_Create
Unexecuted instantiation: ty.c:vlc_ancillary_Create
Unexecuted instantiation: voc.c:vlc_ancillary_Create
Unexecuted instantiation: wav.c:vlc_ancillary_Create
Unexecuted instantiation: webvtt.c:vlc_ancillary_Create
Unexecuted instantiation: encvtt.c:vlc_ancillary_Create
Unexecuted instantiation: subsvtt.c:vlc_ancillary_Create
Unexecuted instantiation: xa.c:vlc_ancillary_Create
Unexecuted instantiation: a52.c:vlc_ancillary_Create
Unexecuted instantiation: copy.c:vlc_ancillary_Create
Unexecuted instantiation: dts.c:vlc_ancillary_Create
Unexecuted instantiation: h264.c:vlc_ancillary_Create
Unexecuted instantiation: hxxx_sei.c:vlc_ancillary_Create
Unexecuted instantiation: hxxx_common.c:vlc_ancillary_Create
Unexecuted instantiation: h264_nal.c:vlc_ancillary_Create
Unexecuted instantiation: hevc.c:vlc_ancillary_Create
Unexecuted instantiation: mlp.c:vlc_ancillary_Create
Unexecuted instantiation: mpeg4audio.c:vlc_ancillary_Create
Unexecuted instantiation: mpeg4video.c:vlc_ancillary_Create
Unexecuted instantiation: mpegaudio.c:vlc_ancillary_Create
Unexecuted instantiation: mpegvideo.c:vlc_ancillary_Create
Unexecuted instantiation: vc1.c:vlc_ancillary_Create
Unexecuted instantiation: rawaud.c:vlc_ancillary_Create
Unexecuted instantiation: rawvid.c:vlc_ancillary_Create
Unexecuted instantiation: file.c:vlc_ancillary_Create
Unexecuted instantiation: directory.c:vlc_ancillary_Create
Unexecuted instantiation: libxml.c:vlc_ancillary_Create
Unexecuted instantiation: ogg.c:vlc_ancillary_Create
Unexecuted instantiation: oggseek.c:vlc_ancillary_Create
Unexecuted instantiation: mkv.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: util.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: virtual_segment.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: matroska_segment.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: matroska_segment_parse.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: matroska_segment_seeker.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: demux.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: events.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: Ebml_parser.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: chapters.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: chapter_command.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: chapter_command_dvd.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: chapter_command_script.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: chapter_command_script_common.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: stream_io_callback.cpp:vlc_ancillary_Create(void*, unsigned int)
Unexecuted instantiation: adpcm.c:vlc_ancillary_Create
Unexecuted instantiation: aes3.c:vlc_ancillary_Create
Unexecuted instantiation: araw.c:vlc_ancillary_Create
Unexecuted instantiation: g711.c:vlc_ancillary_Create
Unexecuted instantiation: lpcm.c:vlc_ancillary_Create
Unexecuted instantiation: uleaddvaudio.c:vlc_ancillary_Create
Unexecuted instantiation: rawvideo.c:vlc_ancillary_Create
Unexecuted instantiation: cc.c:vlc_ancillary_Create
Unexecuted instantiation: cea708.c:vlc_ancillary_Create
Unexecuted instantiation: cvdsub.c:vlc_ancillary_Create
Unexecuted instantiation: dvbsub.c:vlc_ancillary_Create
Unexecuted instantiation: scte18.c:vlc_ancillary_Create
Unexecuted instantiation: scte27.c:vlc_ancillary_Create
Unexecuted instantiation: spudec.c:vlc_ancillary_Create
Unexecuted instantiation: parse.c:vlc_ancillary_Create
Unexecuted instantiation: stl.c:vlc_ancillary_Create
Unexecuted instantiation: subsdec.c:vlc_ancillary_Create
Unexecuted instantiation: subsusf.c:vlc_ancillary_Create
Unexecuted instantiation: svcdsub.c:vlc_ancillary_Create
Unexecuted instantiation: textst.c:vlc_ancillary_Create
Unexecuted instantiation: substx3g.c:vlc_ancillary_Create
Unexecuted instantiation: libvlc.c:vlc_ancillary_Create
Unexecuted instantiation: media_source.c:vlc_ancillary_Create
Unexecuted instantiation: media_tree.c:vlc_ancillary_Create
Unexecuted instantiation: bank.c:vlc_ancillary_Create
Unexecuted instantiation: content.c:vlc_ancillary_Create
Unexecuted instantiation: control.c:vlc_ancillary_Create
Unexecuted instantiation: notify.c:vlc_ancillary_Create
Unexecuted instantiation: player.c:vlc_ancillary_Create
Unexecuted instantiation: playlist.c:vlc_ancillary_Create
Unexecuted instantiation: preparse.c:vlc_ancillary_Create
Unexecuted instantiation: preparser.c:vlc_ancillary_Create
Unexecuted instantiation: item.c:vlc_ancillary_Create
Unexecuted instantiation: access.c:vlc_ancillary_Create
Unexecuted instantiation: decoder_prevframe.c:vlc_ancillary_Create
Unexecuted instantiation: decoder_device.c:vlc_ancillary_Create
Unexecuted instantiation: decoder_helpers.c:vlc_ancillary_Create
Unexecuted instantiation: demux.c:vlc_ancillary_Create
Unexecuted instantiation: input.c:vlc_ancillary_Create
Unexecuted instantiation: attachment.c:vlc_ancillary_Create
Unexecuted instantiation: timer.c:vlc_ancillary_Create
Unexecuted instantiation: track.c:vlc_ancillary_Create
Unexecuted instantiation: title.c:vlc_ancillary_Create
Unexecuted instantiation: aout.c:vlc_ancillary_Create
Unexecuted instantiation: vout.c:vlc_ancillary_Create
Unexecuted instantiation: osd.c:vlc_ancillary_Create
Unexecuted instantiation: medialib.c:vlc_ancillary_Create
Unexecuted instantiation: resource.c:vlc_ancillary_Create
Unexecuted instantiation: services_discovery.c:vlc_ancillary_Create
Unexecuted instantiation: stats.c:vlc_ancillary_Create
Unexecuted instantiation: stream.c:vlc_ancillary_Create
Unexecuted instantiation: stream_extractor.c:vlc_ancillary_Create
Unexecuted instantiation: stream_filter.c:vlc_ancillary_Create
Unexecuted instantiation: stream_memory.c:vlc_ancillary_Create
Unexecuted instantiation: subtitles.c:vlc_ancillary_Create
Unexecuted instantiation: common.c:vlc_ancillary_Create
Unexecuted instantiation: dec.c:vlc_ancillary_Create
Unexecuted instantiation: filters.c:vlc_ancillary_Create
Unexecuted instantiation: meter.c:vlc_ancillary_Create
Unexecuted instantiation: output.c:vlc_ancillary_Create
Unexecuted instantiation: volume.c:vlc_ancillary_Create
Unexecuted instantiation: video_output.c:vlc_ancillary_Create
Unexecuted instantiation: video_text.c:vlc_ancillary_Create
Unexecuted instantiation: video_widgets.c:vlc_ancillary_Create
Unexecuted instantiation: vout_subpictures.c:vlc_ancillary_Create
Unexecuted instantiation: video_window.c:vlc_ancillary_Create
Unexecuted instantiation: vout_intf.c:vlc_ancillary_Create
Unexecuted instantiation: vout_wrapper.c:vlc_ancillary_Create
Unexecuted instantiation: strings.c:vlc_ancillary_Create
Unexecuted instantiation: ancillary.c:vlc_ancillary_Create
Unexecuted instantiation: frame.c:vlc_ancillary_Create
Unexecuted instantiation: fifo.c:vlc_ancillary_Create
Unexecuted instantiation: picture.c:vlc_ancillary_Create
Unexecuted instantiation: picture_fifo.c:vlc_ancillary_Create
Unexecuted instantiation: picture_pool.c:vlc_ancillary_Create
Unexecuted instantiation: renderer_discovery.c:vlc_ancillary_Create
Unexecuted instantiation: image.c:vlc_ancillary_Create
Unexecuted instantiation: objects.c:vlc_ancillary_Create
Unexecuted instantiation: filter.c:vlc_ancillary_Create
Unexecuted instantiation: filter_chain.c:vlc_ancillary_Create
Unexecuted instantiation: subpicture.c:vlc_ancillary_Create
Unexecuted instantiation: stream_output.c:vlc_ancillary_Create
Unexecuted instantiation: vlm.c:vlc_ancillary_Create
Unexecuted instantiation: vlm_event.c:vlc_ancillary_Create
Unexecuted instantiation: vlmshell.c:vlc_ancillary_Create
Unexecuted instantiation: libvlc-module.c:vlc_ancillary_Create
Unexecuted instantiation: fetcher.c:vlc_ancillary_Create
Unexecuted instantiation: clock.c:vlc_ancillary_Create
Unexecuted instantiation: es_out.c:vlc_ancillary_Create
Unexecuted instantiation: es_out_source.c:vlc_ancillary_Create
Unexecuted instantiation: es_out_timeshift.c:vlc_ancillary_Create
Unexecuted instantiation: display.c:vlc_ancillary_Create
Unexecuted instantiation: interlacing.c:vlc_ancillary_Create
Unexecuted instantiation: snapshot.c:vlc_ancillary_Create
Unexecuted instantiation: input_clock.c:vlc_ancillary_Create
101
102
/**
103
 * Release an ancillary
104
 *
105
 * If the refcount reaches 0, the free_cb provided by
106
 * vlc_ancillary_CreateWithFreeCb() is called.
107
 *
108
 * @param ancillary ancillary to release
109
 */
110
VLC_API void
111
vlc_ancillary_Release(struct vlc_ancillary *ancillary);
112
113
/**
114
 * Hold an ancillary
115
 *
116
 * @param ancillary ancillary to hold
117
 * @return the same ancillary
118
 */
119
VLC_API struct vlc_ancillary *
120
vlc_ancillary_Hold(struct vlc_ancillary *ancillary);
121
122
/**
123
 * Get the data of the ancillary
124
 *
125
 * @param ancillary ancillary to get data from
126
 * @return data used when created the ancillary, same lifetime than the ancillary
127
 */
128
VLC_API void *
129
vlc_ancillary_GetData(const struct vlc_ancillary *ancillary);
130
131
/**
132
 * @}
133
 * \defgroup ancillary_array Ancillary array API
134
 * @{
135
 */
136
137
/**
138
 * Init an ancillary array
139
 *
140
 * @param array pointer to the ancillary array to initialize
141
 */
142
static inline void
143
vlc_ancillary_array_Init(vlc_ancillary_array *array)
144
290M
{
145
290M
    vlc_vector_init(array);
146
290M
}
Unexecuted instantiation: demux-run.c:vlc_ancillary_array_Init
Unexecuted instantiation: var.c:vlc_ancillary_array_Init
Unexecuted instantiation: decoder.c:vlc_ancillary_array_Init
Unexecuted instantiation: aiff.c:vlc_ancillary_array_Init
Unexecuted instantiation: asf.c:vlc_ancillary_array_Init
Unexecuted instantiation: libasf.c:vlc_ancillary_array_Init
Unexecuted instantiation: asfpacket.c:vlc_ancillary_array_Init
Unexecuted instantiation: au.c:vlc_ancillary_array_Init
Unexecuted instantiation: avi.c:vlc_ancillary_array_Init
Unexecuted instantiation: libavi.c:vlc_ancillary_array_Init
Unexecuted instantiation: caf.c:vlc_ancillary_array_Init
Unexecuted instantiation: cdg.c:vlc_ancillary_array_Init
Unexecuted instantiation: es.c:vlc_ancillary_array_Init
Unexecuted instantiation: dts_header.c:vlc_ancillary_array_Init
Unexecuted instantiation: flac.c:vlc_ancillary_array_Init
Unexecuted instantiation: xiph_metadata.c:vlc_ancillary_array_Init
Unexecuted instantiation: h26x.c:vlc_ancillary_array_Init
Unexecuted instantiation: mjpeg.c:vlc_ancillary_array_Init
Unexecuted instantiation: mp4.c:vlc_ancillary_array_Init
Unexecuted instantiation: fragments.c:vlc_ancillary_array_Init
Unexecuted instantiation: attachments.c:vlc_ancillary_array_Init
Unexecuted instantiation: heif.c:vlc_ancillary_array_Init
Unexecuted instantiation: essetup.c:vlc_ancillary_array_Init
Unexecuted instantiation: meta.c:vlc_ancillary_array_Init
Unexecuted instantiation: libmp4.c:vlc_ancillary_array_Init
Unexecuted instantiation: nsv.c:vlc_ancillary_array_Init
Unexecuted instantiation: ps.c:vlc_ancillary_array_Init
Unexecuted instantiation: pva.c:vlc_ancillary_array_Init
Unexecuted instantiation: sap.c:vlc_ancillary_array_Init
Unexecuted instantiation: smf.c:vlc_ancillary_array_Init
Unexecuted instantiation: subtitle.c:vlc_ancillary_array_Init
Unexecuted instantiation: tta.c:vlc_ancillary_array_Init
Unexecuted instantiation: encttml.c:vlc_ancillary_array_Init
Unexecuted instantiation: substtml.c:vlc_ancillary_array_Init
Unexecuted instantiation: ttml.c:vlc_ancillary_array_Init
Unexecuted instantiation: ty.c:vlc_ancillary_array_Init
Unexecuted instantiation: voc.c:vlc_ancillary_array_Init
Unexecuted instantiation: wav.c:vlc_ancillary_array_Init
Unexecuted instantiation: webvtt.c:vlc_ancillary_array_Init
Unexecuted instantiation: encvtt.c:vlc_ancillary_array_Init
Unexecuted instantiation: subsvtt.c:vlc_ancillary_array_Init
Unexecuted instantiation: xa.c:vlc_ancillary_array_Init
Unexecuted instantiation: a52.c:vlc_ancillary_array_Init
Unexecuted instantiation: copy.c:vlc_ancillary_array_Init
Unexecuted instantiation: dts.c:vlc_ancillary_array_Init
Unexecuted instantiation: h264.c:vlc_ancillary_array_Init
Unexecuted instantiation: hxxx_sei.c:vlc_ancillary_array_Init
Unexecuted instantiation: hxxx_common.c:vlc_ancillary_array_Init
Unexecuted instantiation: h264_nal.c:vlc_ancillary_array_Init
Unexecuted instantiation: hevc.c:vlc_ancillary_array_Init
Unexecuted instantiation: mlp.c:vlc_ancillary_array_Init
Unexecuted instantiation: mpeg4audio.c:vlc_ancillary_array_Init
Unexecuted instantiation: mpeg4video.c:vlc_ancillary_array_Init
Unexecuted instantiation: mpegaudio.c:vlc_ancillary_array_Init
Unexecuted instantiation: mpegvideo.c:vlc_ancillary_array_Init
Unexecuted instantiation: vc1.c:vlc_ancillary_array_Init
Unexecuted instantiation: rawaud.c:vlc_ancillary_array_Init
Unexecuted instantiation: rawvid.c:vlc_ancillary_array_Init
Unexecuted instantiation: file.c:vlc_ancillary_array_Init
Unexecuted instantiation: directory.c:vlc_ancillary_array_Init
Unexecuted instantiation: libxml.c:vlc_ancillary_array_Init
Unexecuted instantiation: ogg.c:vlc_ancillary_array_Init
Unexecuted instantiation: oggseek.c:vlc_ancillary_array_Init
Unexecuted instantiation: mkv.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: util.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: virtual_segment.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: matroska_segment.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: matroska_segment_parse.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: matroska_segment_seeker.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: demux.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: events.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: Ebml_parser.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: chapters.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: chapter_command.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: chapter_command_dvd.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: chapter_command_script.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: chapter_command_script_common.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: stream_io_callback.cpp:vlc_ancillary_array_Init(vlc_ancillary_array*)
Unexecuted instantiation: adpcm.c:vlc_ancillary_array_Init
Unexecuted instantiation: aes3.c:vlc_ancillary_array_Init
Unexecuted instantiation: araw.c:vlc_ancillary_array_Init
Unexecuted instantiation: g711.c:vlc_ancillary_array_Init
Unexecuted instantiation: lpcm.c:vlc_ancillary_array_Init
Unexecuted instantiation: uleaddvaudio.c:vlc_ancillary_array_Init
Unexecuted instantiation: rawvideo.c:vlc_ancillary_array_Init
Unexecuted instantiation: cc.c:vlc_ancillary_array_Init
Unexecuted instantiation: cea708.c:vlc_ancillary_array_Init
Unexecuted instantiation: cvdsub.c:vlc_ancillary_array_Init
Unexecuted instantiation: dvbsub.c:vlc_ancillary_array_Init
Unexecuted instantiation: scte18.c:vlc_ancillary_array_Init
Unexecuted instantiation: scte27.c:vlc_ancillary_array_Init
Unexecuted instantiation: spudec.c:vlc_ancillary_array_Init
Unexecuted instantiation: parse.c:vlc_ancillary_array_Init
Unexecuted instantiation: stl.c:vlc_ancillary_array_Init
Unexecuted instantiation: subsdec.c:vlc_ancillary_array_Init
Unexecuted instantiation: subsusf.c:vlc_ancillary_array_Init
Unexecuted instantiation: svcdsub.c:vlc_ancillary_array_Init
Unexecuted instantiation: textst.c:vlc_ancillary_array_Init
Unexecuted instantiation: substx3g.c:vlc_ancillary_array_Init
Unexecuted instantiation: libvlc.c:vlc_ancillary_array_Init
Unexecuted instantiation: media_source.c:vlc_ancillary_array_Init
Unexecuted instantiation: media_tree.c:vlc_ancillary_array_Init
Unexecuted instantiation: bank.c:vlc_ancillary_array_Init
Unexecuted instantiation: content.c:vlc_ancillary_array_Init
Unexecuted instantiation: control.c:vlc_ancillary_array_Init
Unexecuted instantiation: notify.c:vlc_ancillary_array_Init
Unexecuted instantiation: player.c:vlc_ancillary_array_Init
Unexecuted instantiation: playlist.c:vlc_ancillary_array_Init
Unexecuted instantiation: preparse.c:vlc_ancillary_array_Init
Unexecuted instantiation: preparser.c:vlc_ancillary_array_Init
Unexecuted instantiation: item.c:vlc_ancillary_array_Init
Unexecuted instantiation: access.c:vlc_ancillary_array_Init
Unexecuted instantiation: decoder_prevframe.c:vlc_ancillary_array_Init
Unexecuted instantiation: decoder_device.c:vlc_ancillary_array_Init
Unexecuted instantiation: decoder_helpers.c:vlc_ancillary_array_Init
Unexecuted instantiation: demux.c:vlc_ancillary_array_Init
Unexecuted instantiation: input.c:vlc_ancillary_array_Init
Unexecuted instantiation: attachment.c:vlc_ancillary_array_Init
Unexecuted instantiation: timer.c:vlc_ancillary_array_Init
Unexecuted instantiation: track.c:vlc_ancillary_array_Init
Unexecuted instantiation: title.c:vlc_ancillary_array_Init
Unexecuted instantiation: aout.c:vlc_ancillary_array_Init
Unexecuted instantiation: vout.c:vlc_ancillary_array_Init
Unexecuted instantiation: osd.c:vlc_ancillary_array_Init
Unexecuted instantiation: medialib.c:vlc_ancillary_array_Init
Unexecuted instantiation: resource.c:vlc_ancillary_array_Init
Unexecuted instantiation: services_discovery.c:vlc_ancillary_array_Init
Unexecuted instantiation: stats.c:vlc_ancillary_array_Init
Unexecuted instantiation: stream.c:vlc_ancillary_array_Init
Unexecuted instantiation: stream_extractor.c:vlc_ancillary_array_Init
Unexecuted instantiation: stream_filter.c:vlc_ancillary_array_Init
Unexecuted instantiation: stream_memory.c:vlc_ancillary_array_Init
Unexecuted instantiation: subtitles.c:vlc_ancillary_array_Init
Unexecuted instantiation: common.c:vlc_ancillary_array_Init
Unexecuted instantiation: dec.c:vlc_ancillary_array_Init
Unexecuted instantiation: filters.c:vlc_ancillary_array_Init
Unexecuted instantiation: meter.c:vlc_ancillary_array_Init
Unexecuted instantiation: output.c:vlc_ancillary_array_Init
Unexecuted instantiation: volume.c:vlc_ancillary_array_Init
Unexecuted instantiation: video_output.c:vlc_ancillary_array_Init
Unexecuted instantiation: video_text.c:vlc_ancillary_array_Init
Unexecuted instantiation: video_widgets.c:vlc_ancillary_array_Init
Unexecuted instantiation: vout_subpictures.c:vlc_ancillary_array_Init
Unexecuted instantiation: video_window.c:vlc_ancillary_array_Init
Unexecuted instantiation: vout_intf.c:vlc_ancillary_array_Init
Unexecuted instantiation: vout_wrapper.c:vlc_ancillary_array_Init
Unexecuted instantiation: strings.c:vlc_ancillary_array_Init
Unexecuted instantiation: ancillary.c:vlc_ancillary_array_Init
frame.c:vlc_ancillary_array_Init
Line
Count
Source
144
290M
{
145
    vlc_vector_init(array);
146
290M
}
Unexecuted instantiation: fifo.c:vlc_ancillary_array_Init
picture.c:vlc_ancillary_array_Init
Line
Count
Source
144
15.4k
{
145
    vlc_vector_init(array);
146
15.4k
}
Unexecuted instantiation: picture_fifo.c:vlc_ancillary_array_Init
Unexecuted instantiation: picture_pool.c:vlc_ancillary_array_Init
Unexecuted instantiation: renderer_discovery.c:vlc_ancillary_array_Init
Unexecuted instantiation: image.c:vlc_ancillary_array_Init
Unexecuted instantiation: objects.c:vlc_ancillary_array_Init
Unexecuted instantiation: filter.c:vlc_ancillary_array_Init
Unexecuted instantiation: filter_chain.c:vlc_ancillary_array_Init
Unexecuted instantiation: subpicture.c:vlc_ancillary_array_Init
Unexecuted instantiation: stream_output.c:vlc_ancillary_array_Init
Unexecuted instantiation: vlm.c:vlc_ancillary_array_Init
Unexecuted instantiation: vlm_event.c:vlc_ancillary_array_Init
Unexecuted instantiation: vlmshell.c:vlc_ancillary_array_Init
Unexecuted instantiation: libvlc-module.c:vlc_ancillary_array_Init
Unexecuted instantiation: fetcher.c:vlc_ancillary_array_Init
Unexecuted instantiation: clock.c:vlc_ancillary_array_Init
Unexecuted instantiation: es_out.c:vlc_ancillary_array_Init
Unexecuted instantiation: es_out_source.c:vlc_ancillary_array_Init
Unexecuted instantiation: es_out_timeshift.c:vlc_ancillary_array_Init
Unexecuted instantiation: display.c:vlc_ancillary_array_Init
Unexecuted instantiation: interlacing.c:vlc_ancillary_array_Init
Unexecuted instantiation: snapshot.c:vlc_ancillary_array_Init
Unexecuted instantiation: input_clock.c:vlc_ancillary_array_Init
147
148
/**
149
 * Clear an ancillary array
150
 *
151
 * This will release the refcount on all ancillaries and free the vector data
152
 *
153
 * @param array pointer to the ancillary array to clear
154
 */
155
VLC_API void
156
vlc_ancillary_array_Clear(vlc_ancillary_array *array);
157
158
/**
159
 * Merge two ancillary arrays
160
 *
161
 * Copy all ancillaries from src_array to dst_array, preserving all previous
162
 * ancillaries. In case of ancillary id conflict, the one from src_array will
163
 * have precedence.
164
 *
165
 * @param dst_array pointer to an initialized ancillary array, if not empty,
166
 * previous ancillaries will be preserved.
167
 * @param src_array pointer to the source ancillary array
168
 * @return VLC_SUCCESS in case of success, VLC_ENOMEM in case of alloc error
169
 */
170
VLC_API int
171
vlc_ancillary_array_Merge(vlc_ancillary_array *dst_array,
172
                          const vlc_ancillary_array *src_array);
173
174
/**
175
 * Merge and clear two ancillary arrays
176
 *
177
 * The src array will be moved to the dst array if the dst array is empty (fast
178
 * path). Otherwise, both arrays will be merged into dst_array and the
179
 * src_array will be cleared afterward.
180
 *
181
 * @param dst_array pointer to a valid ancillary array, if not empty, previous
182
 * ancillaries will be preserved.
183
 * @param src_array pointer to the source ancillary array, will point to empty
184
 * data after this call.
185
 * @return VLC_SUCCESS in case of success, VLC_ENOMEM in case of alloc error
186
 */
187
VLC_API int
188
vlc_ancillary_array_MergeAndClear(vlc_ancillary_array *dst_array,
189
                                  vlc_ancillary_array *src_array);
190
191
/**
192
 * Insert a new ancillary in the array
193
 *
194
 * @note Several ancillaries can be attached to an array, but if two ancillaries
195
 * are identified by the same ID, only the last one take precedence.
196
 *
197
 * @param array pointer to the ancillary array
198
 * @param ancillary pointer to the ancillary to add
199
 * @return VLC_SUCCESS in case of success, VLC_ENOMEM in case of alloc error
200
 */
201
VLC_API int
202
vlc_ancillary_array_Insert(vlc_ancillary_array *array,
203
                           struct vlc_ancillary *ancillary);
204
205
/**
206
 * Get a specific ancillary from the array
207
 *
208
 * @param array pointer to the ancillary array
209
 * @param id id of the ancillary
210
 * @return a valid ancillary or NULL if not found, no need to release it.
211
 */
212
VLC_API struct vlc_ancillary *
213
vlc_ancillary_array_Get(const vlc_ancillary_array *array,
214
                        vlc_ancillary_id id);
215
216
/**
217
 * @}
218
 * \defgroup ancillary_data Ancillary IDs and data
219
 * @{
220
 */
221
222
/**
223
 * Dolby Vision metadata description
224
 */
225
enum vlc_dovi_reshape_method_t
226
{
227
    VLC_DOVI_RESHAPE_POLYNOMIAL = 0,
228
    VLC_DOVI_RESHAPE_MMR = 1,
229
};
230
231
enum vlc_dovi_nlq_method_t
232
{
233
    VLC_DOVI_NLQ_NONE = -1,
234
    VLC_DOVI_NLQ_LINEAR_DZ = 0,
235
};
236
237
#define VLC_ANCILLARY_ID_DOVI VLC_FOURCC('D','o','V','i')
238
239
typedef struct vlc_video_dovi_metadata_t
240
{
241
    /* Common header fields */
242
    uint8_t coef_log2_denom;
243
    uint8_t bl_bit_depth;
244
    uint8_t el_bit_depth;
245
    enum vlc_dovi_nlq_method_t nlq_method_idc;
246
247
    /* Colorspace metadata */
248
    float nonlinear_offset[3];
249
    float nonlinear_matrix[9];
250
    float linear_matrix[9];
251
    uint16_t source_min_pq; /* 12-bit PQ values */
252
    uint16_t source_max_pq;
253
254
    /**
255
     * Do not reorder or modify the following structs, they are intentionally
256
     * specified to be identical to AVDOVIReshapingCurve / AVDOVINLQParams.
257
     */
258
    struct vlc_dovi_reshape_t {
259
        uint8_t num_pivots;
260
        uint16_t pivots[9];
261
        enum vlc_dovi_reshape_method_t mapping_idc[8];
262
        uint8_t poly_order[8];
263
        int64_t poly_coef[8][3];
264
        uint8_t mmr_order[8];
265
        int64_t mmr_constant[8];
266
        int64_t mmr_coef[8][3][7];
267
    } curves[3];
268
269
    struct vlc_dovi_nlq_t {
270
        uint8_t offset_depth; /* bit depth of offset value */
271
        uint16_t offset;
272
        uint64_t hdr_in_max;
273
        uint64_t dz_slope;
274
        uint64_t dz_threshold;
275
    } nlq[3];
276
} vlc_video_dovi_metadata_t;
277
278
/**
279
 * HDR10+ Dynamic metadata (based on ATSC A/341 Amendment 2094-40)
280
 *
281
 * This is similar to SMPTE ST2094-40:2016, but omits the mastering display and
282
 * target display actual peak luminance LUTs, the rectangular boundaries and
283
 * ellipse coefficients, and support for multiple processing windows, as these
284
 * are intentionally left unused in this version of the specification.
285
 */
286
287
#define VLC_ANCILLARY_ID_HDR10PLUS VLC_FOURCC('H','D','R','+')
288
289
typedef struct vlc_video_hdr_dynamic_metadata_t
290
{
291
    uint8_t country_code;           /* ITU-T T.35 Annex A */
292
    uint8_t application_version;
293
    float targeted_luminance;       /* in cd/m² */
294
295
    /* parameters for the first processing window (encompassing the frame) */
296
    float maxscl[3];                /* in linearized range [0,1] */
297
    float average_maxrgb;           /* in linearized range [0,1] */
298
    uint8_t num_histogram;          /* in range [0,15] */
299
    struct {
300
        uint8_t percentage;         /* in range [1,100] */
301
        float percentile;           /* in linearized range [0,1] */
302
    } histogram[15];
303
    float fraction_bright_pixels;/* in range [0,1] */
304
    uint8_t tone_mapping_flag;
305
    float knee_point_x;             /* in ootf range [0,1] */
306
    float knee_point_y;             /* in ootf range [0,1] */
307
    uint8_t num_bezier_anchors;     /* in range [1,15] */
308
    float bezier_curve_anchors[15]; /* in range [0,1] */
309
} vlc_video_hdr_dynamic_metadata_t;
310
311
/**
312
 * Embedded ICC profiles
313
 */
314
315
3.61k
#define VLC_ANCILLARY_ID_ICC VLC_FOURCC('i','C','C','P')
316
317
typedef struct vlc_icc_profile_t
318
{
319
    size_t size;
320
    uint8_t data[]; /* binary profile data, see ICC.1:2022 (or later) */
321
} vlc_icc_profile_t;
322
323
/**
324
 * VPx alpha data
325
 */
326
327
2.32k
#define VLC_ANCILLARY_ID_VPX_ALPHA VLC_FOURCC('v','p','x','A')
328
329
typedef struct vlc_vpx_alpha_t
330
{
331
    size_t  size;
332
    uint8_t *data;
333
} vlc_vpx_alpha_t;
334
335
/**
336
 * @}
337
 * @}
338
 */
339
#endif /* VLC_ANCILLARY_H */