gavl
metatags.h
1/*****************************************************************
2 * gavl - a general purpose audio/video processing library
3 *
4 * Copyright (c) 2001 - 2024 Members of the Gmerlin project
5 * http://github.com/bplaum
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 * *****************************************************************/
20
21
22
23#ifndef GAVL_METATAGS_H_INCLUDED
24#define GAVL_METATAGS_H_INCLUDED
25
36
38
39#define GAVL_META_TITLE "Title"
40
42#define GAVL_META_SEARCH_TITLE "SearchTitle"
43
44#define GAVL_META_ORIGINAL_TITLE "OriginalTitle"
45
47
48#define GAVL_META_ID "ID"
49#define GAVL_META_UUID "UUID"
50#define GAVL_META_HASH "Hash"
51
52/* Generic name */
53#define GAVL_META_NAME "Name"
54
55/* Object is locked for access */
56#define GAVL_META_LOCKED "Locked"
57
58#define GAVL_META_NEXT_ID "NextID"
59#define GAVL_META_PREVIOUS_ID "PreviousID"
60
62
63#define GAVL_META_ARTIST "Artist"
64
66
67#define GAVL_META_ALBUMARTIST "Albumartist"
68
70
71#define GAVL_META_AUTHOR "Author"
72
74
75#define GAVL_META_COPYRIGHT "Copyright"
76
78
79#define GAVL_META_ALBUM "Album"
80
82
83#define GAVL_META_GENRE "Genre"
84
86
87#define GAVL_META_CATEGORY "Category"
88
89
94
95#define GAVL_META_TRACKNUMBER "Track"
96
101
102#define GAVL_META_DATE "Date"
103
108
109#define GAVL_META_DATE_CREATE "CreationDate" // YYYY-MM-DD [HH:MM:SS]
110
115
116#define GAVL_META_DATE_MODIFY "ModificationDate" // YYYY-MM-DD [HH:MM:SS]
117
118#define GAVL_META_MTIME "mtime" // time_t (from stat()) as long
119
120/* Size of the object in bytes */
121#define GAVL_META_TOTAL_BYTES "totalbytes"
122
125
126#define GAVL_META_YEAR "Year" // YYYY
127
132
133#define GAVL_META_LANGUAGE "Language" // ISO 639-2/B 3 letter code
134
137
138#define GAVL_META_COMMENT "Comment"
139
142
143#define GAVL_META_RELURL "RelURL"
144
147
148// #define GAVL_META_REFURL "RefURL"
149
155
156#define GAVL_META_SOFTWARE "Software"
157
160
161#define GAVL_META_CREATOR "Creator"
162
168#define GAVL_META_FORMAT "Format"
169
170/* Some defined formats */
171
172#define GAVL_META_FORMAT_MP3 "MP3"
173#define GAVL_META_FORMAT_FLAC "Flac"
174
183
184#define GAVL_META_LABEL "Label"
185
191
192#define GAVL_META_BITRATE "Bitrate"
193
194/* Framerate (float, exact value is in the video format) */
195
196#define GAVL_META_FRAMERATE "Framerate"
197
200
201#define GAVL_META_AUDIO_BITS "BitsPerSample"
202
205
206#define GAVL_META_VIDEO_BPP "BitsPerPixel"
207
212
213#define GAVL_META_PROFILE "Profile"
214#define GAVL_META_LEVEL "Level"
215
216/* MPEG-2 Profiles */
217
218#define GAVL_META_MPEG2_PROFILE_422 "422"
219#define GAVL_META_MPEG2_PROFILE_HIGH "High"
220#define GAVL_META_MPEG2_PROFILE_SPATIALLY_SCALABLE "SpatiallyScalable"
221#define GAVL_META_MPEG2_PROFILE_SNR_SCALABLE "SNRScalable"
222#define GAVL_META_MPEG2_PROFILE_MAIN "Main"
223#define GAVL_META_MPEG2_PROFILE_SIMPLE "Simple"
224
225/* MPEG-2 Levels */
226
227#define GAVL_META_MPEG2_LEVEL_HIGH "High"
228#define GAVL_META_MPEG2_LEVEL_HIGH1440 "High1440"
229#define GAVL_META_MPEG2_LEVEL_MAIN "Main"
230#define GAVL_META_MPEG2_LEVEL_LOW "Low"
231
232/* MPEG-4 Profiles */
233
234#define GAVL_META_MPEG4_PROFILE_SIMPLE "Simple"
235#define GAVL_META_MPEG4_PROFILE_SIMPLE_SCALABLE "SimpleScalable"
236#define GAVL_META_MPEG4_PROFILE_CORE "Core"
237#define GAVL_META_MPEG4_PROFILE_MAIN "Main"
238#define GAVL_META_MPEG4_PROFILE_N_BIT "N-Bit"
239#define GAVL_META_MPEG4_PROFILE_SCALABLE_TEXTURE "ScalableTexture"
240#define GAVL_META_MPEG4_PROFILE_SIMPLE_FACE_ANIMATION "SimpleFaceAnimation"
241#define GAVL_META_MPEG4_PROFILE_BASIC_ANIMATED_TEXTURE "BasicAnimatedTexture"
242#define GAVL_META_MPEG4_PROFILE_HYBRID "Hybrid"
243#define GAVL_META_MPEG4_PROFILE_ADVANCED_REAL_TIME "AdvancedRealTime"
244#define GAVL_META_MPEG4_PROFILE_CORE_SCALABLE "CoreScalable"
245#define GAVL_META_MPEG4_PROFILE_ADVANCED_CODING "AdvancedCoding"
246#define GAVL_META_MPEG4_PROFILE_ADVANCED_CORE "AdvancedCore"
247#define GAVL_META_MPEG4_PROFILE_ADVANCED_SCALABLE_TEXTURE "AdvancedScalableTexture"
248#define GAVL_META_MPEG4_PROFILE_SIMPLE_STUDIO "AdvancedSimpleStudio"
249#define GAVL_META_MPEG4_PROFILE_ADVANCED_SIMPLE "AdvancedSimple"
250
251
252/* H.264 Profiles */
253#define GAVL_META_H264_PROFILE_BASELINE "Baseline"
254#define GAVL_META_H264_PROFILE_CONSTRAINED_BASELINE "ConstrainedBaseline"
255#define GAVL_META_H264_PROFILE_MAIN "Main"
256#define GAVL_META_H264_PROFILE_EXTENDED "Extended"
257#define GAVL_META_H264_PROFILE_HIGH "High"
258#define GAVL_META_H264_PROFILE_CONSTRAINED_HIGH "ConstrainedHigh"
259#define GAVL_META_H264_PROFILE_PROGRESSIVE_HIGH "ProgressiveHigh"
260#define GAVL_META_H264_PROFILE_HIGH_10 "High10"
261#define GAVL_META_H264_PROFILE_HIGH_10_INTRA "High10Intra"
262#define GAVL_META_H264_PROFILE_HIGH_422 "High422"
263#define GAVL_META_H264_PROFILE_HIGH_422_INTRA "High422Intra"
264#define GAVL_META_H264_PROFILE_HIGH_444_PREDICTIVE "High444Predictive"
265#define GAVL_META_H264_PROFILE_HIGH_444_INTRA "High444Intra"
266#define GAVL_META_H264_PROFILE_CAVLC_444_INTRA "CAVLC444Intra"
267#define GAVL_META_H264_PROFILE_SCALABLE_BASELINE "ScalableBaseline"
268#define GAVL_META_H264_PROFILE_SCALABLE_CONSTRAINED_BASELINE "ScalableConstrainedBaseline"
269#define GAVL_META_H264_PROFILE_SCALABLE_HIGH "ScalableHigh"
270#define GAVL_META_H264_PROFILE_SCALABLE_CONSTRAINED_HIGH "ScalableConstrainedHigh"
271#define GAVL_META_H264_PROFILE_SCALABLE_HIGH_INTRA "ScalableHighIntra"
272#define GAVL_META_H264_PROFILE_STEREO_HIGH "StereoHigh"
273#define GAVL_META_H264_PROFILE_MULTIVIEW_HIGH "MultiviewHigh"
274#define GAVL_META_H264_PROFILE_MULTIVIEW_DEPTH_HIGH "MultiviewDepthHigh"
275
276#define GAVL_META_LEVEL "Level"
277
280
281#define GAVL_META_VENDOR "Vendor"
282
283#define GAVL_META_DISK_NAME GAVL_META_LABEL
284
287
288#define GAVL_META_DEVICE "Device"
289
292
293#define GAVL_META_STATION "Station"
294#define GAVL_META_STATION_URL "StationURL"
295#define GAVL_META_LOGO_URL "LogoURL"
296
299
300#define GAVL_META_APPROX_DURATION "ApproxDuration"
301
304#define GAVL_META_MIMETYPE "MimeType"
305
308#define GAVL_META_URI "URI"
309
312#define GAVL_META_REAL_URI "RealURI"
313
317
318#define GAVL_META_SRC "src"
319
320
321/* Total tracks of the logical parent */
322#define GAVL_META_TOTAL_TRACKS "TotalTracks"
323
326
327#define GAVL_META_BIG_ENDIAN "BigEndian"
328
331#define GAVL_META_ACTOR "Actor"
332
335
336#define GAVL_META_DIRECTOR "Director"
337
340
341#define GAVL_META_COUNTRY "Country"
342
343
346
347// ISO 3166-1 alpha-3
348#define GAVL_META_COUNTRY_CODE_3 "CountryCode3"
349
350// ISO 3166-1 alpha-2
351#define GAVL_META_COUNTRY_CODE_2 "CountryCode2"
352
353#define GAVL_META_GROUP "Group"
354
355
356#define GAVL_META_DESCRIPTION "Description"
357
360
361#define GAVL_META_PLOT GAVL_META_DESCRIPTION
362
367
368#define GAVL_META_AUDIO_LANGUAGES "AudioLanguages"
369
374
375#define GAVL_META_SUBTITLE_LANGUAGES "SubtitleLanguages"
376
377/* Images associated with media content */
378
381
382
383
384#define GAVL_META_COVER_URL "CoverURL"
385
386
387/* For embedded covers: Location is NULL and offset and size are given */
388#define GAVL_META_COVER_EMBEDDED "CoverEmbedded"
389/* Buffer of an embedded image */
390#define GAVL_META_IMAGE_BUFFER "ImageBuffer"
391
392#define GAVL_META_WALLPAPER_URL "WallpaperURL"
393#define GAVL_META_POSTER_URL "PosterURL"
394#define GAVL_META_ICON_URL "IconURL"
395#define GAVL_META_ICON_NAME "IconName"
396
397#define GAVL_META_CAN_SEEK "CanSeek"
398
399#define GAVL_META_CAN_PAUSE "CanPause"
400#define GAVL_META_SAMPLE_ACCURATE "SampleAccurate"
401
402#define GAVL_META_TIME_PTS "PTS"
403#define GAVL_META_TIME_CLOCK "Clock"
404#define GAVL_META_TIME_START "Start"
405
406#define GAVL_META_TIME_PTS_TO_CLOCK "PTSToClock"
407#define GAVL_META_TIME_PTS_TO_START "PTSToStart"
408
409
410/*
411 * Several commands are expected in asynchronous mode.
412 * Details are specified in libgmerlin
413 */
414
415#define GAVL_META_ASYNC "Async"
416
417#define GAVL_META_AVG_BITRATE "AVGBitrate" // Float, kbps
418#define GAVL_META_AVG_FRAMERATE "AVGFramerate" // Float
419
420/* Purely informational entries for the global metadata or per Location */
421#define GAVL_META_AUDIO_CHANNELS "Channels"
422#define GAVL_META_AUDIO_SAMPLERATE "Samplerate"
423#define GAVL_META_AUDIO_BITRATE "AudioBitrate"
424#define GAVL_META_VIDEO_BITRATE "VideoBitrate"
425#define GAVL_META_AUDIO_CODEC "AudioCodec"
426#define GAVL_META_VIDEO_CODEC "VideoCodec"
427
428#define GAVL_META_VIDEO_ASPECT_RATIO "VideoAspectRatio" // Human readable e.g. (16:9)
429
430#define GAVL_META_WIDTH "w"
431#define GAVL_META_HEIGHT "h"
432#define GAVL_META_X "x"
433#define GAVL_META_Y "y"
434
435/* Specify that a file got transcoded, i.e. has not the original format */
436#define GAVL_META_TRANSCODED "transcoded"
437
438
439#define GAVL_META_NUM_CHILDREN "NumChildren" // Number of children for container items
440#define GAVL_META_NUM_ITEM_CHILDREN "NumItemChildren" // Number of children for container items
441#define GAVL_META_NUM_CONTAINER_CHILDREN "NumContainerChildren" // Number of children for container items
442
443#define GAVL_META_CHILDREN "children" // Generic name for children of an element, which must be an array
444
445#define GAVL_META_IDX "idx" // Index in parent container
446#define GAVL_META_TOTAL "total" // Total number (maximum idx + 1)
447#define GAVL_META_SHOW "Show" // TV Show, this item belongs to
448#define GAVL_META_SEASON "Season" // Season, this episode belongs to (integer but can be non-continuous
449#define GAVL_META_PODCAST "Podcast" // Name of the pocast this item belongs to
450
451#define GAVL_META_EPISODENUMBER "EPNum" // Number of the Episode (starting with 1)
452#define GAVL_META_RATING "Rating" // Rating (float, 0.0..1.0)
453#define GAVL_META_PARENTAL_CONTROL "ParentalControl" // mpaa or FSK (or whatever) rating
454#define GAVL_META_TAG "Tag" // Arbitrary tag
455
456#define GAVL_META_NFO_FILE "NFOFILE" //
457#define GAVL_META_TOOLTIP "tooltip" // Tooltip to be shown in GUIs
458
459#define GAVL_META_STREAM_DURATION "duration"
460#define GAVL_META_STREAM_FORMAT "fmt"
461#define GAVL_META_STREAM_PACKET_TIMESCALE "pscale"
462#define GAVL_META_STREAM_SAMPLE_TIMESCALE "sscale"
463#define GAVL_META_STREAM_ENABLED "enabled"
464
465#define GAVL_META_STREAM_PACKET_DURATION_DIVISOR "packet_duration_divisor"
466
467/* Set to the absolute stream index offset by one by default
468 but can be changed to anything */
469
470#define GAVL_META_STREAM_ID "streamid"
471
472/* Handled inside of gavl */
473#define GAVL_META_STREAM_ID_MSG_GAVF -2
474#define GAVL_META_STREAM_ID_MSG_PROGRAM -1
475
476#define GAVL_META_STREAM_ID_MEDIA_START 1
477
478#define GAVL_META_STREAM_COMPRESSION_INFO "cmp"
479
480
481#define GAVL_META_STREAM_STATS "stats"
482
483#define GAVL_META_STREAM_STATS_NUM_BYTES GAVL_META_TOTAL_BYTES
484#define GAVL_META_STREAM_STATS_NUM_PACKETS "TotalPackets"
485#define GAVL_META_STREAM_STATS_PTS_START "PTSStart"
486#define GAVL_META_STREAM_STATS_PTS_END "PTSEnd"
487#define GAVL_META_STREAM_STATS_PACKET_SIZE_MIN "minsize"
488#define GAVL_META_STREAM_STATS_PACKET_SIZE_MAX "maxsize"
489#define GAVL_META_STREAM_STATS_PACKET_DURATION_MIN "mindur"
490#define GAVL_META_STREAM_STATS_PACKET_DURATION_MAX "maxdur"
491
492#define GAVL_META_STREAMS "streams"
493#define GAVL_META_STREAMS_EXT "streams-ext" // External streams with separate URIs (e.g. subtitles)
494#define GAVL_META_STREAM_TYPE "streamtype"
495
496#define GAVL_META_METADATA "metadata"
497#define GAVL_META_EDL "edl"
498#define GAVL_META_TRACKS GAVL_META_CHILDREN // Array containing single tracks
499
500// Additional url variables passed to the open() function
501#define GAVL_META_URLVARS "urlvars"
502
503#define GAVL_META_CURIDX "curidx" // Index of "current" child
504
505#define GAVL_META_PARTS "parts" // Parts of a multipart movie
506
507#define GAVL_META_VARIANTS "variants" // Multiple variants of the same content (typically with different bitrates)
508
509// #define GAVL_META_DATA_FORMAT_MSG "msg"
510// #define GAVL_META_DATA_ROLE_EVENTS "evt"
511
512#define GAVL_META_MSG_TIMESTAMP "timestamp" // Timestamp of messages embedded into A/V streams
513
514
519
520#define GAVL_META_CLASS "MediaClass"
521#define GAVL_META_CHILD_CLASS "ChildClass"
522
523/* Value for class */
524#define GAVL_META_CLASS_ITEM "item"
525
526#define GAVL_META_CLASS_AUDIO_FILE "item.audio"
527#define GAVL_META_CLASS_VIDEO_FILE "item.video"
528#define GAVL_META_CLASS_AUDIO_DISK_TRACK "item.audio.disktrack"
529#define GAVL_META_CLASS_VIDEO_DISK_TRACK "item.video.disktrack"
530#define GAVL_META_CLASS_SONG "item.audio.song"
531#define GAVL_META_CLASS_MOVIE "item.video.movie"
532#define GAVL_META_CLASS_MOVIE_PART "item.video.movie.part"
533
534#define GAVL_META_CLASS_AUDIO_PODCAST_EPISODE "item.audio.podcastepisode"
535#define GAVL_META_CLASS_VIDEO_PODCAST_EPISODE "item.video.podcastepisode"
536
537#define GAVL_META_CLASS_TV_EPISODE "item.video.episode"
538
539/* Streams get this this type when it's not clear if they are audio or video broadcasts */
540#define GAVL_META_CLASS_BROADCAST "item.broadcast"
541#define GAVL_META_CLASS_AUDIO_BROADCAST "item.audio.broadcast"
542#define GAVL_META_CLASS_VIDEO_BROADCAST "item.video.broadcast"
543#define GAVL_META_CLASS_IMAGE "item.image"
544
545// non-media file: This is given to filesystem objects, which contain no media
546#define GAVL_META_CLASS_FILE "item.file"
547
548// Location, which needs to be specified further: This is given to urls in redirector (e.g. m3u) files.
549// Loading can be delayed
550
551#define GAVL_META_CLASS_LOCATION "item.location"
552
553// External subtitle file
554#define GAVL_META_CLASS_SUBTITLE_FILE "item.subtitles"
555
556// Stream comes from recording device
557#define GAVL_META_CLASS_AUDIO_RECORDER "item.audio.recorder"
558#define GAVL_META_CLASS_VIDEO_RECORDER "item.video.recorder"
559
560/* Container values */
561#define GAVL_META_CLASS_CONTAINER "container" // Generic
562#define GAVL_META_CLASS_MUSICALBUM "container.musicalbum"
563#define GAVL_META_CLASS_PHOTOALBUM "container.photoalbum"
564#define GAVL_META_CLASS_PLAYLIST "container.playlist"
565#define GAVL_META_CLASS_PODCAST "container.podcast"
566#define GAVL_META_CLASS_CONTAINER_CATEGORY "container.category"
567#define GAVL_META_CLASS_CONTAINER_ACTOR "container.category.actor"
568#define GAVL_META_CLASS_CONTAINER_DIRECTOR "container.category.director"
569#define GAVL_META_CLASS_CONTAINER_ARTIST "container.category.artist"
570#define GAVL_META_CLASS_CONTAINER_COUNTRY "container.category.country"
571#define GAVL_META_CLASS_CONTAINER_GENRE "container.category.genre"
572#define GAVL_META_CLASS_CONTAINER_LANGUAGE "container.category.language"
573#define GAVL_META_CLASS_CONTAINER_TAG "container.category.tag"
574#define GAVL_META_CLASS_CONTAINER_YEAR "container.category.year"
575#define GAVL_META_CLASS_CONTAINER_TV "container.tv"
576#define GAVL_META_CLASS_CONTAINER_RADIO "container.radio"
577#define GAVL_META_CLASS_TV_SEASON "container.season"
578#define GAVL_META_CLASS_TV_SHOW "container.tvshow"
579#define GAVL_META_CLASS_DIRECTORY "container.directory" // On filesystem
580
581#define GAVL_META_CLASS_MULTITRACK_FILE "container.multitrackfile"
582
583/* Root Containers */
584#define GAVL_META_CLASS_ROOT "container.root"
585
586// Mapped locally, not part of database
587#define GAVL_META_CLASS_ROOT_PLAYQUEUE "container.root.playqueue"
588
589#define GAVL_META_CLASS_ROOT_MUSICALBUMS "container.root.musicalbums"
590#define GAVL_META_CLASS_ROOT_SONGS "container.root.songs"
591#define GAVL_META_CLASS_ROOT_MOVIES "container.root.movies"
592#define GAVL_META_CLASS_ROOT_TV_SHOWS "container.root.tvshows"
593#define GAVL_META_CLASS_ROOT_STREAMS "container.root.streams"
594#define GAVL_META_CLASS_ROOT_DIRECTORIES "container.root.directories"
595#define GAVL_META_CLASS_ROOT_PHOTOS "container.root.photos"
596#define GAVL_META_CLASS_ROOT_PODCASTS "container.root.podcasts"
597#define GAVL_META_CLASS_ROOT_RECORDERS "container.root.recorders"
598
599#define GAVL_META_CLASS_ROOT_FAVORITES "container.root.favorites"
600#define GAVL_META_CLASS_ROOT_BOOKMARKS "container.root.bookmarks"
601#define GAVL_META_CLASS_ROOT_LIBRARY "container.root.library"
602
603#define GAVL_META_CLASS_ROOT_REMOVABLE "container.root.removable"
604#define GAVL_META_CLASS_ROOT_REMOVABLE_AUDIOCD "container.root.removable.cd.audio"
605#define GAVL_META_CLASS_ROOT_REMOVABLE_VCD "container.root.removable.cd.vcd"
606#define GAVL_META_CLASS_ROOT_REMOVABLE_SVCD "container.root.removable.cd.svcd"
607#define GAVL_META_CLASS_ROOT_REMOVABLE_VIDEODVD "container.root.removable.dvd.video"
608
609#define GAVL_META_CLASS_ROOT_REMOVABLE_FILESYSTEM "container.root.removable.filesystem"
610#define GAVL_META_CLASS_ROOT_REMOVABLE_FILESYSTEM_HDD "container.root.removable.filesystem.hdd"
611#define GAVL_META_CLASS_ROOT_REMOVABLE_FILESYSTEM_PENDRIVE "container.root.removable.filesystem.pendrive"
612#define GAVL_META_CLASS_ROOT_REMOVABLE_FILESYSTEM_MEMORYCARD "container.root.removable.filesystem.memorycard"
613#define GAVL_META_CLASS_ROOT_REMOVABLE_FILESYSTEM_MOBILE "container.root.removable.filesystem.mobile"
614#define GAVL_META_CLASS_ROOT_REMOVABLE_FILESYSTEM_CD "container.root.removable.filesystem.cdrom"
615#define GAVL_META_CLASS_ROOT_REMOVABLE_FILESYSTEM_DVD "container.root.removable.filesystem.dvd"
616
617/* Remote media server */
618#define GAVL_META_CLASS_ROOT_SERVER "container.root.server"
619
620/* Non-media source related media classes */
621
622#define GAVL_META_CLASS_BACKEND_RENDERER "backend.renderer"
623#define GAVL_META_CLASS_BACKEND_MDB "backend.mdb"
624#define GAVL_META_CLASS_BACKEND_CONTROLPANEL "backend.controlpanel"
625
626#define GAVL_META_CLASS_SINK_AUDIO "sink.audio"
627#define GAVL_META_CLASS_SINK_VIDEO "sink.video"
628
629#define GAVL_META_CLASS_WEBPAGE "item.webpage"
630
631/* GUI States */
632
633// Indicate, that an error occurred during loading of a track
634#define GAVL_META_GUI_ERROR "GUIError"
635
636// Track is selected in a GUI
637#define GAVL_META_GUI_SELECTED "GUISelected"
638
639// Track is current in a GUI
640#define GAVL_META_GUI_CURRENT "GUICurrent"
641
645
646#endif // GAVL_METATAGS_H_INCLUDED