mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 09:55:36 +00:00
mxfdemux: Post structural metadata tree as tag on the bus
This will later be used to keep the structural metadata when remuxing an MXF file and can also be used in Pitivi for example to know the file structure and to select what should be used and played.
This commit is contained in:
parent
a9461b9818
commit
acc6a316ce
10 changed files with 1854 additions and 6 deletions
|
@ -2,6 +2,7 @@ plugin_LTLIBRARIES = libgstmxf.la
|
|||
|
||||
libgstmxf_la_SOURCES = \
|
||||
mxf.c \
|
||||
mxfquark.c \
|
||||
mxfdemux.c \
|
||||
mxfparse.c \
|
||||
mxfaes-bwf.c \
|
||||
|
@ -21,6 +22,7 @@ libgstmxf_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) \
|
|||
libgstmxf_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||
|
||||
noinst_HEADERS = \
|
||||
mxfquark.h \
|
||||
mxfdemux.h \
|
||||
mxfparse.h \
|
||||
mxfaes-bwf.h \
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
#include <gst/gst.h>
|
||||
|
||||
#include "mxfquark.h"
|
||||
#include "mxfdemux.h"
|
||||
#include "mxfaes-bwf.h"
|
||||
#include "mxfmpeg.h"
|
||||
|
@ -41,12 +42,19 @@ mxf_init (void)
|
|||
{
|
||||
gst_tag_register (GST_TAG_MXF_UMID, GST_TAG_FLAG_META,
|
||||
G_TYPE_STRING, "UMID", "Unique Material Identifier", NULL);
|
||||
gst_tag_register (GST_TAG_MXF_STRUCTURE, GST_TAG_FLAG_META,
|
||||
GST_TYPE_STRUCTURE, "Structure", "Structural metadata of "
|
||||
"the MXF file", NULL);
|
||||
gst_tag_register (GST_TAG_MXF_DESCRIPTIVE_METADATA_FRAMEWORK,
|
||||
GST_TAG_FLAG_META, GST_TYPE_STRUCTURE, "DM Framework",
|
||||
"Descriptive metadata framework", NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
plugin_init (GstPlugin * plugin)
|
||||
{
|
||||
mxf_init ();
|
||||
mxf_quark_initialize ();
|
||||
mxf_metadata_init_types ();
|
||||
mxf_aes_bwf_init ();
|
||||
mxf_mpeg_init ();
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "mxfaes-bwf.h"
|
||||
#include "mxfquark.h"
|
||||
|
||||
GST_DEBUG_CATEGORY_EXTERN (mxf_debug);
|
||||
#define GST_CAT_DEFAULT mxf_debug
|
||||
|
@ -231,6 +232,79 @@ error:
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static GstStructure *
|
||||
mxf_metadata_wave_audio_essence_descriptor_to_structure (MXFMetadataBase * m)
|
||||
{
|
||||
GstStructure *ret =
|
||||
MXF_METADATA_BASE_CLASS
|
||||
(mxf_metadata_wave_audio_essence_descriptor_parent_class)->to_structure
|
||||
(m);
|
||||
MXFMetadataWaveAudioEssenceDescriptor *self =
|
||||
MXF_METADATA_WAVE_AUDIO_ESSENCE_DESCRIPTOR (m);
|
||||
gchar str[48];
|
||||
|
||||
gst_structure_id_set (ret, MXF_QUARK (BLOCK_ALIGN), G_TYPE_UINT,
|
||||
self->block_align, NULL);
|
||||
|
||||
if (self->sequence_offset)
|
||||
gst_structure_id_set (ret, MXF_QUARK (SEQUENCE_OFFSET), G_TYPE_UCHAR,
|
||||
self->sequence_offset, NULL);
|
||||
|
||||
if (self->avg_bps)
|
||||
gst_structure_id_set (ret, MXF_QUARK (AVG_BPS), G_TYPE_UINT, self->avg_bps,
|
||||
NULL);
|
||||
|
||||
if (!mxf_ul_is_zero (&self->channel_assignment)) {
|
||||
gst_structure_id_set (ret, MXF_QUARK (CHANNEL_ASSIGNMENT), G_TYPE_STRING,
|
||||
mxf_ul_to_string (&self->channel_assignment, str), NULL);
|
||||
}
|
||||
|
||||
if (self->peak_envelope_version)
|
||||
gst_structure_id_set (ret, MXF_QUARK (PEAK_ENVELOPE_VERSION), G_TYPE_UINT,
|
||||
self->peak_envelope_version, NULL);
|
||||
|
||||
if (self->peak_envelope_format)
|
||||
gst_structure_id_set (ret, MXF_QUARK (PEAK_ENVELOPE_FORMAT), G_TYPE_UINT,
|
||||
self->peak_envelope_format, NULL);
|
||||
|
||||
if (self->points_per_peak_value)
|
||||
gst_structure_id_set (ret, MXF_QUARK (POINTS_PER_PEAK_VALUE), G_TYPE_UINT,
|
||||
self->points_per_peak_value, NULL);
|
||||
|
||||
if (self->peak_envelope_block_size)
|
||||
gst_structure_id_set (ret, MXF_QUARK (PEAK_ENVELOPE_BLOCK_SIZE),
|
||||
G_TYPE_UINT, self->peak_envelope_block_size, NULL);
|
||||
|
||||
if (self->peak_channels)
|
||||
gst_structure_id_set (ret, MXF_QUARK (PEAK_CHANNELS), G_TYPE_UINT,
|
||||
self->peak_channels, NULL);
|
||||
|
||||
if (self->peak_frames)
|
||||
gst_structure_id_set (ret, MXF_QUARK (PEAK_FRAMES), G_TYPE_UINT,
|
||||
self->peak_frames, NULL);
|
||||
|
||||
if (self->peak_of_peaks_position)
|
||||
gst_structure_id_set (ret, MXF_QUARK (PEAK_OF_PEAKS_POSITION), G_TYPE_INT64,
|
||||
self->peak_of_peaks_position, NULL);
|
||||
|
||||
if (!mxf_timestamp_is_unknown (&self->peak_envelope_timestamp))
|
||||
gst_structure_id_set (ret, MXF_QUARK (PEAK_ENVELOPE_TIMESTAMP),
|
||||
G_TYPE_STRING, mxf_timestamp_to_string (&self->peak_envelope_timestamp,
|
||||
str), NULL);
|
||||
|
||||
if (self->peak_envelope_data) {
|
||||
GstBuffer *buf = gst_buffer_new_and_alloc (self->peak_envelope_data_length);
|
||||
|
||||
memcpy (GST_BUFFER_DATA (buf), self->peak_envelope_data,
|
||||
self->peak_envelope_data_length);
|
||||
gst_structure_id_set (ret, MXF_QUARK (PEAK_ENVELOPE_DATA), GST_TYPE_BUFFER,
|
||||
buf, NULL);
|
||||
gst_buffer_unref (buf);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
mxf_metadata_wave_audio_essence_descriptor_init
|
||||
(MXFMetadataWaveAudioEssenceDescriptor * self)
|
||||
|
@ -246,6 +320,9 @@ static void
|
|||
|
||||
metadata_base_class->handle_tag =
|
||||
mxf_metadata_wave_audio_essence_descriptor_handle_tag;
|
||||
metadata_base_class->name_quark = MXF_QUARK (WAVE_AUDIO_ESSENCE_DESCRIPTOR);
|
||||
metadata_base_class->to_structure =
|
||||
mxf_metadata_wave_audio_essence_descriptor_to_structure;
|
||||
}
|
||||
|
||||
/* SMPTE 382M Annex 2 */
|
||||
|
@ -511,6 +588,122 @@ error:
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static GstStructure *
|
||||
mxf_metadata_aes3_audio_essence_descriptor_to_structure (MXFMetadataBase * m)
|
||||
{
|
||||
GstStructure *ret =
|
||||
MXF_METADATA_BASE_CLASS
|
||||
(mxf_metadata_aes3_audio_essence_descriptor_parent_class)->to_structure
|
||||
(m);
|
||||
MXFMetadataAES3AudioEssenceDescriptor *self =
|
||||
MXF_METADATA_AES3_AUDIO_ESSENCE_DESCRIPTOR (m);
|
||||
|
||||
if (self->emphasis)
|
||||
gst_structure_id_set (ret, MXF_QUARK (EMPHASIS), G_TYPE_UCHAR,
|
||||
self->emphasis, NULL);
|
||||
|
||||
if (self->block_start_offset)
|
||||
gst_structure_id_set (ret, MXF_QUARK (BLOCK_START_OFFSET), G_TYPE_UINT,
|
||||
self->block_start_offset, NULL);
|
||||
|
||||
if (self->auxiliary_bits_mode)
|
||||
gst_structure_id_set (ret, MXF_QUARK (AUXILIARY_BITS_MODE), G_TYPE_UCHAR,
|
||||
self->auxiliary_bits_mode, NULL);
|
||||
|
||||
if (self->channel_status_mode) {
|
||||
GstBuffer *buf = gst_buffer_new_and_alloc (self->n_channel_status_mode);
|
||||
|
||||
memcpy (GST_BUFFER_DATA (buf), self->channel_status_mode,
|
||||
self->n_channel_status_mode);
|
||||
gst_structure_id_set (ret, MXF_QUARK (CHANNEL_STATUS_MODE), GST_TYPE_BUFFER,
|
||||
buf, NULL);
|
||||
gst_buffer_unref (buf);
|
||||
}
|
||||
|
||||
if (self->channel_status_mode) {
|
||||
GstBuffer *buf = gst_buffer_new_and_alloc (self->n_channel_status_mode);
|
||||
|
||||
memcpy (GST_BUFFER_DATA (buf), self->channel_status_mode,
|
||||
self->n_channel_status_mode);
|
||||
gst_structure_id_set (ret, MXF_QUARK (CHANNEL_STATUS_MODE), GST_TYPE_BUFFER,
|
||||
buf, NULL);
|
||||
gst_buffer_unref (buf);
|
||||
}
|
||||
|
||||
if (self->fixed_channel_status_data) {
|
||||
guint i;
|
||||
GValue va = { 0, }
|
||||
, v = {
|
||||
0,};
|
||||
GstBuffer *buf;
|
||||
|
||||
g_value_init (&va, GST_TYPE_ARRAY);
|
||||
|
||||
for (i = 0; i < self->n_fixed_channel_status_data; i++) {
|
||||
buf = gst_buffer_new_and_alloc (24);
|
||||
g_value_init (&v, GST_TYPE_BUFFER);
|
||||
|
||||
memcpy (GST_BUFFER_DATA (buf), self->fixed_channel_status_data[i], 24);
|
||||
gst_value_set_buffer (&v, buf);
|
||||
gst_value_array_append_value (&va, &v);
|
||||
gst_buffer_unref (buf);
|
||||
g_value_unset (&v);
|
||||
}
|
||||
|
||||
if (gst_value_array_get_size (&va) > 0)
|
||||
gst_structure_id_set_value (ret, MXF_QUARK (FIXED_CHANNEL_STATUS_DATA),
|
||||
&va);
|
||||
g_value_unset (&va);
|
||||
}
|
||||
|
||||
|
||||
if (self->user_data_mode) {
|
||||
GstBuffer *buf = gst_buffer_new_and_alloc (self->n_user_data_mode);
|
||||
|
||||
memcpy (GST_BUFFER_DATA (buf), self->user_data_mode,
|
||||
self->n_user_data_mode);
|
||||
gst_structure_id_set (ret, MXF_QUARK (USER_DATA_MODE), GST_TYPE_BUFFER, buf,
|
||||
NULL);
|
||||
gst_buffer_unref (buf);
|
||||
}
|
||||
|
||||
if (self->fixed_user_data) {
|
||||
guint i;
|
||||
GValue va = { 0, }
|
||||
, v = {
|
||||
0,};
|
||||
GstBuffer *buf;
|
||||
|
||||
g_value_init (&va, GST_TYPE_ARRAY);
|
||||
|
||||
for (i = 0; i < self->n_fixed_user_data; i++) {
|
||||
buf = gst_buffer_new_and_alloc (24);
|
||||
g_value_init (&v, GST_TYPE_BUFFER);
|
||||
|
||||
memcpy (GST_BUFFER_DATA (buf), self->fixed_user_data[i], 24);
|
||||
gst_value_set_buffer (&v, buf);
|
||||
gst_value_array_append_value (&va, &v);
|
||||
gst_buffer_unref (buf);
|
||||
g_value_unset (&v);
|
||||
}
|
||||
|
||||
if (gst_value_array_get_size (&va) > 0)
|
||||
gst_structure_id_set_value (ret, MXF_QUARK (FIXED_USER_DATA), &va);
|
||||
g_value_unset (&va);
|
||||
}
|
||||
|
||||
if (self->linked_timecode_track_id)
|
||||
gst_structure_id_set (ret, MXF_QUARK (LINKED_TIMECODE_TRACK_ID),
|
||||
G_TYPE_UINT, self->linked_timecode_track_id, NULL);
|
||||
|
||||
if (self->stream_number)
|
||||
gst_structure_id_set (ret, MXF_QUARK (STREAM_NUMBER), G_TYPE_UCHAR,
|
||||
self->stream_number, NULL);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
mxf_metadata_aes3_audio_essence_descriptor_init
|
||||
(MXFMetadataAES3AudioEssenceDescriptor * self)
|
||||
|
@ -529,6 +722,9 @@ static void
|
|||
mxf_metadata_aes3_audio_essence_descriptor_finalize;
|
||||
metadata_base_class->handle_tag =
|
||||
mxf_metadata_aes3_audio_essence_descriptor_handle_tag;
|
||||
metadata_base_class->name_quark = MXF_QUARK (AES3_AUDIO_ESSENCE_DESCRIPTOR);
|
||||
metadata_base_class->to_structure =
|
||||
mxf_metadata_aes3_audio_essence_descriptor_to_structure;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
|
@ -498,6 +498,8 @@ gst_mxf_demux_resolve_references (GstMXFDemux * demux)
|
|||
GList *l, *values;
|
||||
#endif
|
||||
MXFMetadataBase *m = NULL;
|
||||
GstStructure *structure;
|
||||
GstTagList *taglist;
|
||||
|
||||
GST_DEBUG_OBJECT (demux, "Resolve metadata references");
|
||||
demux->update_metadata = FALSE;
|
||||
|
@ -542,6 +544,14 @@ gst_mxf_demux_resolve_references (GstMXFDemux * demux)
|
|||
|
||||
demux->metadata_resolved = TRUE;
|
||||
|
||||
taglist = gst_tag_list_new ();
|
||||
structure =
|
||||
mxf_metadata_base_to_structure (MXF_METADATA_BASE (demux->preface));
|
||||
gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_MXF_STRUCTURE,
|
||||
structure, NULL);
|
||||
gst_element_found_tags (GST_ELEMENT (demux), taglist);
|
||||
gst_structure_free (structure);
|
||||
|
||||
#if !GLIB_CHECK_VERSION (2, 16, 0)
|
||||
g_list_free (values);
|
||||
#endif
|
||||
|
@ -812,7 +822,7 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux)
|
|||
if (MXF_IS_METADATA_GENERIC_DATA_ESSENCE_DESCRIPTOR (track->
|
||||
parent.descriptor[0]))
|
||||
mxf_ul_to_string (&MXF_METADATA_GENERIC_DATA_ESSENCE_DESCRIPTOR
|
||||
(track->parent.descriptor[0])->data_essence_compression,
|
||||
(track->parent.descriptor[0])->data_essence_coding,
|
||||
essence_compression);
|
||||
|
||||
name =
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -385,6 +385,9 @@ struct _MXFMetadataBaseClass {
|
|||
|
||||
gboolean (*handle_tag) (MXFMetadataBase *self, MXFPrimerPack *primer, guint16 tag, const guint8 *tag_data, guint tag_size);
|
||||
gboolean (*resolve) (MXFMetadataBase *self, GHashTable *metadata);
|
||||
GstStructure * (*to_structure) (MXFMetadataBase *self);
|
||||
|
||||
GQuark name_quark;
|
||||
};
|
||||
|
||||
struct _MXFMetadata {
|
||||
|
@ -699,7 +702,7 @@ struct _MXFMetadataGenericSoundEssenceDescriptor {
|
|||
struct _MXFMetadataGenericDataEssenceDescriptor {
|
||||
MXFMetadataFileDescriptor parent;
|
||||
|
||||
MXFUL data_essence_compression;
|
||||
MXFUL data_essence_coding;
|
||||
};
|
||||
|
||||
struct _MXFMetadataMultipleDescriptor {
|
||||
|
@ -747,6 +750,7 @@ struct _MXFDescriptiveMetadataFrameworkInterface {
|
|||
|
||||
gboolean mxf_metadata_base_parse (MXFMetadataBase *self, MXFPrimerPack *primer, const guint8 *data, guint size);
|
||||
gboolean mxf_metadata_base_resolve (MXFMetadataBase *self, GHashTable *metadata);
|
||||
GstStructure * mxf_metadata_base_to_structure (MXFMetadataBase *self);
|
||||
|
||||
MXFMetadata *mxf_metadata_new (guint16 type, MXFPrimerPack *primer, guint64 offset, const guint8 *data, guint size);
|
||||
void mxf_metadata_register (guint16 type_id, GType type);
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "mxfmpeg.h"
|
||||
#include "mxfquark.h"
|
||||
|
||||
#include <gst/base/gstbytereader.h>
|
||||
|
||||
|
@ -210,6 +211,38 @@ error:
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static GstStructure *
|
||||
mxf_metadata_mpeg_video_descriptor_to_structure (MXFMetadataBase * m)
|
||||
{
|
||||
GstStructure *ret =
|
||||
MXF_METADATA_BASE_CLASS
|
||||
(mxf_metadata_mpeg_video_descriptor_parent_class)->to_structure (m);
|
||||
MXFMetadataMPEGVideoDescriptor *self = MXF_METADATA_MPEG_VIDEO_DESCRIPTOR (m);
|
||||
|
||||
gst_structure_id_set (ret, MXF_QUARK (SINGLE_SEQUENCE), G_TYPE_BOOLEAN,
|
||||
self->single_sequence, MXF_QUARK (CONST_B_FRAMES), G_TYPE_BOOLEAN,
|
||||
self->const_b_frames, MXF_QUARK (CODED_CONTENT_TYPE), G_TYPE_UCHAR,
|
||||
self->coded_content_type, MXF_QUARK (LOW_DELAY), G_TYPE_BOOLEAN,
|
||||
self->low_delay, MXF_QUARK (CLOSED_GOP), G_TYPE_BOOLEAN, self->closed_gop,
|
||||
MXF_QUARK (IDENTICAL_GOP), G_TYPE_BOOLEAN, self->identical_gop,
|
||||
MXF_QUARK (PROFILE_AND_LEVEL), G_TYPE_UCHAR, self->profile_and_level,
|
||||
NULL);
|
||||
|
||||
if (self->max_gop)
|
||||
gst_structure_id_set (ret, MXF_QUARK (MAX_GOP), G_TYPE_UINT, self->max_gop,
|
||||
NULL);
|
||||
|
||||
if (self->b_picture_count)
|
||||
gst_structure_id_set (ret, MXF_QUARK (B_PICTURE_COUNT), G_TYPE_UINT,
|
||||
self->b_picture_count, NULL);
|
||||
|
||||
if (self->bitrate)
|
||||
gst_structure_id_set (ret, MXF_QUARK (BITRATE), G_TYPE_UINT, self->bitrate,
|
||||
NULL);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
mxf_metadata_mpeg_video_descriptor_init (MXFMetadataMPEGVideoDescriptor * self)
|
||||
{
|
||||
|
@ -224,6 +257,9 @@ static void
|
|||
|
||||
metadata_base_class->handle_tag =
|
||||
mxf_metadata_mpeg_video_descriptor_handle_tag;
|
||||
metadata_base_class->name_quark = MXF_QUARK (MPEG_VIDEO_DESCRIPTOR);
|
||||
metadata_base_class->to_structure =
|
||||
mxf_metadata_mpeg_video_descriptor_to_structure;
|
||||
}
|
||||
|
||||
typedef enum
|
||||
|
|
211
gst/mxf/mxfquark.c
Normal file
211
gst/mxf/mxfquark.c
Normal file
|
@ -0,0 +1,211 @@
|
|||
/* GStreamer
|
||||
* Copyright (C) <2009> Sebastian Dröge <sebastian.droege@collabora.co.uk>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "mxfquark.h"
|
||||
|
||||
static const gchar *_quark_strings[] = {
|
||||
"instance-uid",
|
||||
"generation-uid",
|
||||
"other-tags",
|
||||
"tag",
|
||||
"data",
|
||||
"preface",
|
||||
"last-modified-date",
|
||||
"version",
|
||||
"object-model-version",
|
||||
"primary-package",
|
||||
"identifications",
|
||||
"content-storage",
|
||||
"operational-pattern",
|
||||
"essence-containers",
|
||||
"dm-schemes",
|
||||
"identification",
|
||||
"this-generation-uid",
|
||||
"company-name",
|
||||
"product-name",
|
||||
"product-version",
|
||||
"version-string",
|
||||
"product-uid",
|
||||
"modification-date",
|
||||
"toolkit-version",
|
||||
"platform",
|
||||
"packages",
|
||||
"essence-container-data",
|
||||
"linked-package",
|
||||
"index-sid",
|
||||
"body-sid",
|
||||
"package-uid",
|
||||
"name",
|
||||
"package-creation-date",
|
||||
"package-modified-date",
|
||||
"tracks",
|
||||
"material-package",
|
||||
"source-package",
|
||||
"descriptor",
|
||||
"track-id",
|
||||
"track-number",
|
||||
"track-name",
|
||||
"sequence",
|
||||
"timeline-track",
|
||||
"edit-rate",
|
||||
"origin",
|
||||
"event-track",
|
||||
"event-edit-rate",
|
||||
"event-origin",
|
||||
"static-track",
|
||||
"data-definition",
|
||||
"duration",
|
||||
"structural-components",
|
||||
"timecode-component",
|
||||
"start-timecode",
|
||||
"rounded-timecode-base",
|
||||
"drop-frame",
|
||||
"source-clip",
|
||||
"start-position",
|
||||
"source-track-id",
|
||||
"dm-source-clip",
|
||||
"track-ids",
|
||||
"dm-segment",
|
||||
"event-start-position",
|
||||
"event-comment",
|
||||
"dm-framework",
|
||||
"locators",
|
||||
"file-descriptor",
|
||||
"linked-track-id",
|
||||
"sample-rate",
|
||||
"container-duration",
|
||||
"essence-container",
|
||||
"codec",
|
||||
"generic-picture-essence-descriptor",
|
||||
"signal-standard",
|
||||
"frame-layout",
|
||||
"stored-width",
|
||||
"stored-height",
|
||||
"stored-f2-offset",
|
||||
"sampled-width",
|
||||
"sampled-height",
|
||||
"sampled-x-offset",
|
||||
"sampled-y-offset",
|
||||
"display-height",
|
||||
"display-width",
|
||||
"display-x-offset",
|
||||
"display-y-offset",
|
||||
"display-f2-offset",
|
||||
"aspect-ratio",
|
||||
"active-format-descriptor",
|
||||
"video-line-map-0",
|
||||
"video-line-map-1",
|
||||
"alpha-transparency",
|
||||
"capture-gamma",
|
||||
"image-alignment-offset",
|
||||
"image-start-offset",
|
||||
"image-end-offset",
|
||||
"field-dominance",
|
||||
"picture-essence-coding",
|
||||
"cdci-picture-essence-descriptor",
|
||||
"component-depth",
|
||||
"horizontal-subsampling",
|
||||
"vertical-subsampling",
|
||||
"color-siting",
|
||||
"reversed-byte-order",
|
||||
"padding-bits",
|
||||
"alpha-sample-depth",
|
||||
"black-ref-level",
|
||||
"white-ref-level",
|
||||
"color-range",
|
||||
"rgba-picture-essence-descriptor",
|
||||
"component-max-ref",
|
||||
"component-min-ref",
|
||||
"alpha-max-ref",
|
||||
"alpha-min-ref",
|
||||
"scanning-direction",
|
||||
"pixel-layout",
|
||||
"generic-sound-essence-descriptor",
|
||||
"audio-sampling-rate",
|
||||
"locked",
|
||||
"audio-ref-level",
|
||||
"electro-spatial-formulation",
|
||||
"channel-count",
|
||||
"quantization-bits",
|
||||
"dial-norm",
|
||||
"sound-essence-compression",
|
||||
"generic-data-essence-descriptor",
|
||||
"data-essence-coding",
|
||||
"multiple-descriptor",
|
||||
"sub-descriptors",
|
||||
"text-locator",
|
||||
"locator-name",
|
||||
"network-locator",
|
||||
"url-string",
|
||||
"wave-audio-essence-descriptor",
|
||||
"block-align",
|
||||
"sequence-offset",
|
||||
"avg-bps",
|
||||
"channel-assignment",
|
||||
"peak-envelope-version",
|
||||
"peak-envelope-format",
|
||||
"points-per-peak-value",
|
||||
"peak-envelope-block-size",
|
||||
"peak-channels",
|
||||
"peak-frames",
|
||||
"peak-of-peaks-position",
|
||||
"peak-envelope-timestamp",
|
||||
"peak-envelope-data",
|
||||
"aes3-audio-essence-descriptor",
|
||||
"emphasis",
|
||||
"block-start-offset",
|
||||
"auxiliary-bits-mode",
|
||||
"channel-status-mode",
|
||||
"fixed-channel-status-data",
|
||||
"user-data-mode",
|
||||
"fixed-user-data",
|
||||
"linked-timecode-track-id",
|
||||
"stream-number",
|
||||
"mpeg-video-descriptor",
|
||||
"single-sequence",
|
||||
"const-b-frames",
|
||||
"coded-content-type",
|
||||
"low-delay",
|
||||
"closed-gop",
|
||||
"identical-gop",
|
||||
"max-gop",
|
||||
"b-picture-count",
|
||||
"bitrate",
|
||||
"profile-and-level",
|
||||
};
|
||||
|
||||
GQuark _mxf_quark_table[MXF_QUARK_MAX];
|
||||
|
||||
void
|
||||
mxf_quark_initialize (void)
|
||||
{
|
||||
gint i;
|
||||
|
||||
if (G_N_ELEMENTS (_quark_strings) != MXF_QUARK_MAX)
|
||||
g_warning ("the quark table is not consistent! %d != %d",
|
||||
(int) G_N_ELEMENTS (_quark_strings), MXF_QUARK_MAX);
|
||||
|
||||
for (i = 0; i < MXF_QUARK_MAX; i++) {
|
||||
_mxf_quark_table[i] = g_quark_from_static_string (_quark_strings[i]);
|
||||
}
|
||||
}
|
204
gst/mxf/mxfquark.h
Normal file
204
gst/mxf/mxfquark.h
Normal file
|
@ -0,0 +1,204 @@
|
|||
/* GStreamer
|
||||
* Copyright (C) <2009> Sebastian Dröge <sebastian.droege@collabora.co.uk>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __MXF_QUARK_H__
|
||||
#define __MXF_QUARK_H__
|
||||
|
||||
#include <gst/gst.h>
|
||||
|
||||
typedef enum {
|
||||
MXF_QUARK_INSTANCE_UID = 0,
|
||||
MXF_QUARK_GENERATION_UID = 1,
|
||||
MXF_QUARK_OTHER_TAGS = 2,
|
||||
MXF_QUARK_TAG = 3,
|
||||
MXF_QUARK_DATA = 4,
|
||||
MXF_QUARK_PREFACE = 5,
|
||||
MXF_QUARK_LAST_MODIFIED_DATE = 6,
|
||||
MXF_QUARK_VERSION = 7,
|
||||
MXF_QUARK_OBJECT_MODEL_VERSION = 8,
|
||||
MXF_QUARK_PRIMARY_PACKAGE = 9,
|
||||
MXF_QUARK_IDENTIFICATIONS = 10,
|
||||
MXF_QUARK_CONTENT_STORAGE = 11,
|
||||
MXF_QUARK_OPERATIONAL_PATTERN = 12,
|
||||
MXF_QUARK_ESSENCE_CONTAINERS = 13,
|
||||
MXF_QUARK_DM_SCHEMES = 14,
|
||||
MXF_QUARK_IDENTIFICATION = 15,
|
||||
MXF_QUARK_THIS_GENERATION_UID = 16,
|
||||
MXF_QUARK_COMPANY_NAME = 17,
|
||||
MXF_QUARK_PRODUCT_NAME = 18,
|
||||
MXF_QUARK_PRODUCT_VERSION = 19,
|
||||
MXF_QUARK_VERSION_STRING = 20,
|
||||
MXF_QUARK_PRODUCT_UID = 21,
|
||||
MXF_QUARK_MODIFICATION_DATE = 22,
|
||||
MXF_QUARK_TOOLKIT_VERSION = 23,
|
||||
MXF_QUARK_PLATFORM = 24,
|
||||
MXF_QUARK_PACKAGES = 25,
|
||||
MXF_QUARK_ESSENCE_CONTAINER_DATA = 26,
|
||||
MXF_QUARK_LINKED_PACKAGE = 27,
|
||||
MXF_QUARK_INDEX_SID = 28,
|
||||
MXF_QUARK_BODY_SID = 29,
|
||||
MXF_QUARK_PACKAGE_UID = 30,
|
||||
MXF_QUARK_NAME = 31,
|
||||
MXF_QUARK_PACKAGE_CREATION_DATE = 32,
|
||||
MXF_QUARK_PACKAGE_MODIFIED_DATE = 33,
|
||||
MXF_QUARK_TRACKS = 34,
|
||||
MXF_QUARK_MATERIAL_PACKAGE = 35,
|
||||
MXF_QUARK_SOURCE_PACKAGE = 36,
|
||||
MXF_QUARK_DESCRIPTOR = 37,
|
||||
MXF_QUARK_TRACK_ID = 38,
|
||||
MXF_QUARK_TRACK_NUMBER = 39,
|
||||
MXF_QUARK_TRACK_NAME = 40,
|
||||
MXF_QUARK_SEQUENCE = 41,
|
||||
MXF_QUARK_TIMELINE_TRACK = 42,
|
||||
MXF_QUARK_EDIT_RATE = 43,
|
||||
MXF_QUARK_ORIGIN = 44,
|
||||
MXF_QUARK_EVENT_TRACK = 45,
|
||||
MXF_QUARK_EVENT_EDIT_RATE = 46,
|
||||
MXF_QUARK_EVENT_ORIGIN = 47,
|
||||
MXF_QUARK_STATIC_TRACK = 48,
|
||||
MXF_QUARK_DATA_DEFINITION = 49,
|
||||
MXF_QUARK_DURATION = 50,
|
||||
MXF_QUARK_STRUCTURAL_COMPONENTS = 51,
|
||||
MXF_QUARK_TIMECODE_COMPONENT = 52,
|
||||
MXF_QUARK_START_TIMECODE = 53,
|
||||
MXF_QUARK_ROUNDED_TIMECODE_BASE = 54,
|
||||
MXF_QUARK_DROP_FRAME = 55,
|
||||
MXF_QUARK_SOURCE_CLIP = 56,
|
||||
MXF_QUARK_START_POSITION = 57,
|
||||
MXF_QUARK_SOURCE_TRACK_ID = 58,
|
||||
MXF_QUARK_DM_SOURCE_CLIP = 59,
|
||||
MXF_QUARK_TRACK_IDS = 60,
|
||||
MXF_QUARK_DM_SEGMENT = 61,
|
||||
MXF_QUARK_EVENT_START_POSITION = 62,
|
||||
MXF_QUARK_EVENT_COMMENT = 63,
|
||||
MXF_QUARK_DM_FRAMEWORK = 64,
|
||||
MXF_QUARK_LOCATORS = 65,
|
||||
MXF_QUARK_FILE_DESCRIPTOR = 66,
|
||||
MXF_QUARK_LINKED_TRACK_ID = 67,
|
||||
MXF_QUARK_SAMPLE_RATE = 68,
|
||||
MXF_QUARK_CONTAINER_DURATION = 69,
|
||||
MXF_QUARK_ESSENCE_CONTAINER = 70,
|
||||
MXF_QUARK_CODEC = 71,
|
||||
MXF_QUARK_GENERIC_PICTURE_ESSENCE_DESCRIPTOR = 72,
|
||||
MXF_QUARK_SIGNAL_STANDARD = 73,
|
||||
MXF_QUARK_FRAME_LAYOUT = 74,
|
||||
MXF_QUARK_STORED_WIDTH = 75,
|
||||
MXF_QUARK_STORED_HEIGHT = 76,
|
||||
MXF_QUARK_STORED_F2_OFFSET = 77,
|
||||
MXF_QUARK_SAMPLED_WIDTH = 78,
|
||||
MXF_QUARK_SAMPLED_HEIGHT = 79,
|
||||
MXF_QUARK_SAMPLED_X_OFFSET = 80,
|
||||
MXF_QUARK_SAMPLED_Y_OFFSET = 81,
|
||||
MXF_QUARK_DISPLAY_HEIGHT = 82,
|
||||
MXF_QUARK_DISPLAY_WIDTH = 83,
|
||||
MXF_QUARK_DISPLAY_X_OFFSET = 84,
|
||||
MXF_QUARK_DISPLAY_Y_OFFSET = 85,
|
||||
MXF_QUARK_DISPLAY_F2_OFFSET = 86,
|
||||
MXF_QUARK_ASPECT_RATIO = 87,
|
||||
MXF_QUARK_ACTIVE_FORMAT_DESCRIPTOR = 88,
|
||||
MXF_QUARK_VIDEO_LINE_MAP_0 = 89,
|
||||
MXF_QUARK_VIDEO_LINE_MAP_1 = 90,
|
||||
MXF_QUARK_ALPHA_TRANSPARENCY = 91,
|
||||
MXF_QUARK_CAPTURE_GAMMA = 92,
|
||||
MXF_QUARK_IMAGE_ALIGNMENT_OFFSET = 93,
|
||||
MXF_QUARK_IMAGE_START_OFFSET = 94,
|
||||
MXF_QUARK_IMAGE_END_OFFSET = 95,
|
||||
MXF_QUARK_FIELD_DOMINANCE = 96,
|
||||
MXF_QUARK_PICTURE_ESSENCE_CODING = 97,
|
||||
MXF_QUARK_CDCI_PICTURE_ESSENCE_DESCRIPTOR = 98,
|
||||
MXF_QUARK_COMPONENT_DEPTH = 99,
|
||||
MXF_QUARK_HORIZONTAL_SUBSAMPLING = 100,
|
||||
MXF_QUARK_VERTICAL_SUBSAMPLING = 101,
|
||||
MXF_QUARK_COLOR_SITING = 102,
|
||||
MXF_QUARK_REVERSED_BYTE_ORDER = 103,
|
||||
MXF_QUARK_PADDING_BITS = 104,
|
||||
MXF_QUARK_ALPHA_SAMPLE_DEPTH = 105,
|
||||
MXF_QUARK_BLACK_REF_LEVEL = 106,
|
||||
MXF_QUARK_WHITE_REF_LEVEL = 107,
|
||||
MXF_QUARK_COLOR_RANGE = 108,
|
||||
MXF_QUARK_RGBA_PICTURE_ESSENCE_DESCRIPTOR = 109,
|
||||
MXF_QUARK_COMPONENT_MAX_REF = 110,
|
||||
MXF_QUARK_COMPONENT_MIN_REF = 111,
|
||||
MXF_QUARK_ALPHA_MAX_REF = 112,
|
||||
MXF_QUARK_ALPHA_MIN_REF = 113,
|
||||
MXF_QUARK_SCANNING_DIRECTION = 114,
|
||||
MXF_QUARK_PIXEL_LAYOUT = 115,
|
||||
MXF_QUARK_GENERIC_SOUND_ESSENCE_DESCRIPTOR = 116,
|
||||
MXF_QUARK_AUDIO_SAMPLING_RATE = 117,
|
||||
MXF_QUARK_LOCKED = 118,
|
||||
MXF_QUARK_AUDIO_REF_LEVEL = 119,
|
||||
MXF_QUARK_ELECTRO_SPATIAL_FORMULATION = 120,
|
||||
MXF_QUARK_CHANNEL_COUNT = 121,
|
||||
MXF_QUARK_QUANTIZATION_BITS = 122,
|
||||
MXF_QUARK_DIAL_NORM = 123,
|
||||
MXF_QUARK_SOUND_ESSENCE_COMPRESSION = 124,
|
||||
MXF_QUARK_GENERIC_DATA_ESSENCE_DESCRIPTOR = 125,
|
||||
MXF_QUARK_DATA_ESSENCE_CODING = 126,
|
||||
MXF_QUARK_MULTIPLE_DESCRIPTOR = 127,
|
||||
MXF_QUARK_SUB_DESCRIPTORS = 128,
|
||||
MXF_QUARK_TEXT_LOCATOR = 129,
|
||||
MXF_QUARK_LOCATOR_NAME = 130,
|
||||
MXF_QUARK_NETWORK_LOCATOR = 131,
|
||||
MXF_QUARK_URL_STRING = 132,
|
||||
MXF_QUARK_WAVE_AUDIO_ESSENCE_DESCRIPTOR = 133,
|
||||
MXF_QUARK_BLOCK_ALIGN = 134,
|
||||
MXF_QUARK_SEQUENCE_OFFSET = 135,
|
||||
MXF_QUARK_AVG_BPS = 136,
|
||||
MXF_QUARK_CHANNEL_ASSIGNMENT = 137,
|
||||
MXF_QUARK_PEAK_ENVELOPE_VERSION = 138,
|
||||
MXF_QUARK_PEAK_ENVELOPE_FORMAT = 139,
|
||||
MXF_QUARK_POINTS_PER_PEAK_VALUE = 140,
|
||||
MXF_QUARK_PEAK_ENVELOPE_BLOCK_SIZE = 141,
|
||||
MXF_QUARK_PEAK_CHANNELS = 142,
|
||||
MXF_QUARK_PEAK_FRAMES = 143,
|
||||
MXF_QUARK_PEAK_OF_PEAKS_POSITION = 144,
|
||||
MXF_QUARK_PEAK_ENVELOPE_TIMESTAMP = 145,
|
||||
MXF_QUARK_PEAK_ENVELOPE_DATA = 146,
|
||||
MXF_QUARK_AES3_AUDIO_ESSENCE_DESCRIPTOR = 147,
|
||||
MXF_QUARK_EMPHASIS = 148,
|
||||
MXF_QUARK_BLOCK_START_OFFSET = 149,
|
||||
MXF_QUARK_AUXILIARY_BITS_MODE = 150,
|
||||
MXF_QUARK_CHANNEL_STATUS_MODE = 151,
|
||||
MXF_QUARK_FIXED_CHANNEL_STATUS_DATA = 152,
|
||||
MXF_QUARK_USER_DATA_MODE = 153,
|
||||
MXF_QUARK_FIXED_USER_DATA = 154,
|
||||
MXF_QUARK_LINKED_TIMECODE_TRACK_ID = 155,
|
||||
MXF_QUARK_STREAM_NUMBER = 156,
|
||||
MXF_QUARK_MPEG_VIDEO_DESCRIPTOR = 157,
|
||||
MXF_QUARK_SINGLE_SEQUENCE = 158,
|
||||
MXF_QUARK_CONST_B_FRAMES = 159,
|
||||
MXF_QUARK_CODED_CONTENT_TYPE = 160,
|
||||
MXF_QUARK_LOW_DELAY = 161,
|
||||
MXF_QUARK_CLOSED_GOP = 162,
|
||||
MXF_QUARK_IDENTICAL_GOP = 163,
|
||||
MXF_QUARK_MAX_GOP = 164,
|
||||
MXF_QUARK_B_PICTURE_COUNT = 165,
|
||||
MXF_QUARK_BITRATE = 166,
|
||||
MXF_QUARK_PROFILE_AND_LEVEL = 167,
|
||||
|
||||
MXF_QUARK_MAX
|
||||
} MXFQuarkId;
|
||||
|
||||
extern GQuark _mxf_quark_table[MXF_QUARK_MAX];
|
||||
|
||||
#define MXF_QUARK(q) _mxf_quark_table[MXF_QUARK_##q]
|
||||
|
||||
void mxf_quark_initialize (void);
|
||||
|
||||
#endif /* __MXF_QUARK_H__ */
|
|
@ -155,5 +155,7 @@ typedef struct {
|
|||
} MXFIndexTableSegment;
|
||||
|
||||
#define GST_TAG_MXF_UMID "mxf-umid"
|
||||
#define GST_TAG_MXF_STRUCTURE "mxf-structure"
|
||||
#define GST_TAG_MXF_DESCRIPTIVE_METADATA_FRAMEWORK "mxf-descriptive-metadata-framework"
|
||||
|
||||
#endif /* __MXF_TYPES_H__ */
|
||||
|
|
Loading…
Reference in a new issue