/* 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., 51 Franklin St, Fifth Floor,
 * Boston, MA 02110-1301, 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",
  "filler",
};

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]);
  }
}
