gst/qtdemux/: Cleanup and refactor to make the code more readable.

Original commit message from CVS:
* gst/qtdemux/Makefile.am:
* gst/qtdemux/qtdemux.c: (extract_initial_length_and_fourcc),
(gst_qtdemux_loop_state_header), (gst_qtdemux_combine_flows),
(gst_qtdemux_loop_state_movie), (gst_qtdemux_loop),
(gst_qtdemux_chain), (qtdemux_sink_activate_pull),
(qtdemux_inflate), (qtdemux_parse_moov), (qtdemux_parse_container),
(qtdemux_parse_node), (qtdemux_tree_get_child_by_type),
(qtdemux_tree_get_sibling_by_type), (gst_qtdemux_add_stream),
(qtdemux_parse_samples), (qtdemux_parse_segments),
(qtdemux_parse_trak), (qtdemux_tag_add_str), (qtdemux_tag_add_num),
(qtdemux_tag_add_date), (qtdemux_tag_add_gnre),
(qtdemux_parse_udta), (qtdemux_redirects_sort_func),
(qtdemux_process_redirects), (qtdemux_parse_redirects),
(qtdemux_parse_tree), (gst_qtdemux_handle_esds),
(qtdemux_video_caps), (qtdemux_audio_caps):
* gst/qtdemux/qtdemux.h:
* gst/qtdemux/qtdemux_dump.c: (qtdemux_dump_mvhd),
(qtdemux_dump_tkhd), (qtdemux_dump_elst), (qtdemux_dump_mdhd),
(qtdemux_dump_hdlr), (qtdemux_dump_vmhd), (qtdemux_dump_dref),
(qtdemux_dump_stsd), (qtdemux_dump_stts), (qtdemux_dump_stss),
(qtdemux_dump_stsc), (qtdemux_dump_stsz), (qtdemux_dump_stco),
(qtdemux_dump_co64), (qtdemux_dump_dcom), (qtdemux_dump_cmvd),
(qtdemux_dump_unknown), (qtdemux_node_dump_foreach),
(qtdemux_node_dump):
* gst/qtdemux/qtdemux_dump.h:
* gst/qtdemux/qtdemux_fourcc.h:
* gst/qtdemux/qtdemux_types.c: (qtdemux_type_get):
* gst/qtdemux/qtdemux_types.h:
* gst/qtdemux/qtpalette.h:
Cleanup and refactor to make the code more readable.
Move debugging/tables into separate files.
Add 2/4/16 color palletee support.
Fix raw 15 bit RGB handling.
Use more FOURCC constants.
Add some docs.
This commit is contained in:
Wim Taymans 2007-01-12 10:22:16 +00:00
parent 18ba3efeba
commit 9562fe4f16
10 changed files with 2106 additions and 1902 deletions

View file

@ -1,3 +1,41 @@
2007-01-12 Wim Taymans <wim@fluendo.com>
* gst/qtdemux/Makefile.am:
* gst/qtdemux/qtdemux.c: (extract_initial_length_and_fourcc),
(gst_qtdemux_loop_state_header), (gst_qtdemux_combine_flows),
(gst_qtdemux_loop_state_movie), (gst_qtdemux_loop),
(gst_qtdemux_chain), (qtdemux_sink_activate_pull),
(qtdemux_inflate), (qtdemux_parse_moov), (qtdemux_parse_container),
(qtdemux_parse_node), (qtdemux_tree_get_child_by_type),
(qtdemux_tree_get_sibling_by_type), (gst_qtdemux_add_stream),
(qtdemux_parse_samples), (qtdemux_parse_segments),
(qtdemux_parse_trak), (qtdemux_tag_add_str), (qtdemux_tag_add_num),
(qtdemux_tag_add_date), (qtdemux_tag_add_gnre),
(qtdemux_parse_udta), (qtdemux_redirects_sort_func),
(qtdemux_process_redirects), (qtdemux_parse_redirects),
(qtdemux_parse_tree), (gst_qtdemux_handle_esds),
(qtdemux_video_caps), (qtdemux_audio_caps):
* gst/qtdemux/qtdemux.h:
* gst/qtdemux/qtdemux_dump.c: (qtdemux_dump_mvhd),
(qtdemux_dump_tkhd), (qtdemux_dump_elst), (qtdemux_dump_mdhd),
(qtdemux_dump_hdlr), (qtdemux_dump_vmhd), (qtdemux_dump_dref),
(qtdemux_dump_stsd), (qtdemux_dump_stts), (qtdemux_dump_stss),
(qtdemux_dump_stsc), (qtdemux_dump_stsz), (qtdemux_dump_stco),
(qtdemux_dump_co64), (qtdemux_dump_dcom), (qtdemux_dump_cmvd),
(qtdemux_dump_unknown), (qtdemux_node_dump_foreach),
(qtdemux_node_dump):
* gst/qtdemux/qtdemux_dump.h:
* gst/qtdemux/qtdemux_fourcc.h:
* gst/qtdemux/qtdemux_types.c: (qtdemux_type_get):
* gst/qtdemux/qtdemux_types.h:
* gst/qtdemux/qtpalette.h:
Cleanup and refactor to make the code more readable.
Move debugging/tables into separate files.
Add 2/4/16 color palletee support.
Fix raw 15 bit RGB handling.
Use more FOURCC constants.
Add some docs.
2007-01-11 Tim-Philipp Müller <tim at centricular dot net>
Patch by: Sebastian Dröge <slomo@circular-chaos.org>

View file

@ -4,6 +4,6 @@ plugin_LTLIBRARIES = libgstqtdemux.la
libgstqtdemux_la_CFLAGS = ${GST_CFLAGS}
libgstqtdemux_la_LIBADD = $(GST_BASE_LIBS) $(ZLIB_LIBS)
libgstqtdemux_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS}
libgstqtdemux_la_SOURCES = qtdemux.c
libgstqtdemux_la_SOURCES = qtdemux.c qtdemux_types.c qtdemux_dump.c
noinst_HEADERS = qtdemux.h
noinst_HEADERS = qtdemux.h qtdemux_types.h qtdemux_dump.h

File diff suppressed because it is too large Load diff

View file

@ -37,7 +37,7 @@ G_BEGIN_DECLS
#define GST_IS_QTDEMUX_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_QTDEMUX))
#define GST_QT_DEMUX_CAST(obj) ((GstQTDemux *)(obj))
#define GST_QTDEMUX_CAST(obj) ((GstQTDemux *)(obj))
#define GST_QTDEMUX_MAX_STREAMS 8
@ -52,9 +52,9 @@ struct _GstQTDemux {
GstPad *sinkpad;
QtDemuxStream *streams[GST_QTDEMUX_MAX_STREAMS];
gint n_streams;
gint n_video_streams;
gint n_audio_streams;
gint n_streams;
gint n_video_streams;
gint n_audio_streams;
GNode *moov_node;
GNode *moov_node_compressed;
@ -80,7 +80,6 @@ struct _GstQTDemux {
GstTagList *tag_list;
/* track stuff */
guint64 last_ts;
/* configured playback region */

375
gst/qtdemux/qtdemux_dump.c Normal file
View file

@ -0,0 +1,375 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* 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.
*/
#include "qtdemux_types.h"
#include "qtdemux_dump.h"
#if 0
#define qtdemux_dump_mem(a,b) gst_util_dump_mem(a,b)
#else
#define qtdemux_dump_mem(a,b) /* */
#endif
void
qtdemux_dump_mvhd (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s creation time: %u", depth, "", QT_UINT32 (buffer + 12));
GST_LOG ("%*s modify time: %u", depth, "", QT_UINT32 (buffer + 16));
GST_LOG ("%*s time scale: 1/%u sec", depth, "", QT_UINT32 (buffer + 20));
GST_LOG ("%*s duration: %u", depth, "", QT_UINT32 (buffer + 24));
GST_LOG ("%*s pref. rate: %g", depth, "", QT_FP32 (buffer + 28));
GST_LOG ("%*s pref. volume: %g", depth, "", QT_FP16 (buffer + 32));
GST_LOG ("%*s preview time: %u", depth, "", QT_UINT32 (buffer + 80));
GST_LOG ("%*s preview dur.: %u", depth, "", QT_UINT32 (buffer + 84));
GST_LOG ("%*s poster time: %u", depth, "", QT_UINT32 (buffer + 88));
GST_LOG ("%*s select time: %u", depth, "", QT_UINT32 (buffer + 92));
GST_LOG ("%*s select dur.: %u", depth, "", QT_UINT32 (buffer + 96));
GST_LOG ("%*s current time: %u", depth, "", QT_UINT32 (buffer + 100));
GST_LOG ("%*s next track ID: %d", depth, "", QT_UINT32 (buffer + 104));
}
void
qtdemux_dump_tkhd (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s creation time: %u", depth, "", QT_UINT32 (buffer + 12));
GST_LOG ("%*s modify time: %u", depth, "", QT_UINT32 (buffer + 16));
GST_LOG ("%*s track ID: %u", depth, "", QT_UINT32 (buffer + 20));
GST_LOG ("%*s duration: %u", depth, "", QT_UINT32 (buffer + 28));
GST_LOG ("%*s layer: %u", depth, "", QT_UINT16 (buffer + 36));
GST_LOG ("%*s alt group: %u", depth, "", QT_UINT16 (buffer + 38));
GST_LOG ("%*s volume: %g", depth, "", QT_FP16 (buffer + 44));
GST_LOG ("%*s track width: %g", depth, "", QT_FP32 (buffer + 84));
GST_LOG ("%*s track height: %g", depth, "", QT_FP32 (buffer + 88));
}
void
qtdemux_dump_elst (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
int i;
int n;
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s n entries: %u", depth, "", QT_UINT32 (buffer + 12));
n = QT_UINT32 (buffer + 12);
for (i = 0; i < n; i++) {
GST_LOG ("%*s track dur: %u", depth, "",
QT_UINT32 (buffer + 16 + i * 12));
GST_LOG ("%*s media time: %u", depth, "",
QT_UINT32 (buffer + 20 + i * 12));
GST_LOG ("%*s media rate: %g", depth, "",
QT_FP32 (buffer + 24 + i * 12));
}
}
void
qtdemux_dump_mdhd (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s creation time: %u", depth, "", QT_UINT32 (buffer + 12));
GST_LOG ("%*s modify time: %u", depth, "", QT_UINT32 (buffer + 16));
GST_LOG ("%*s time scale: 1/%u sec", depth, "", QT_UINT32 (buffer + 20));
GST_LOG ("%*s duration: %u", depth, "", QT_UINT32 (buffer + 24));
GST_LOG ("%*s language: %u", depth, "", QT_UINT16 (buffer + 28));
GST_LOG ("%*s quality: %u", depth, "", QT_UINT16 (buffer + 30));
}
void
qtdemux_dump_hdlr (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s type: %" GST_FOURCC_FORMAT, depth, "",
GST_FOURCC_ARGS (QT_FOURCC (buffer + 12)));
GST_LOG ("%*s subtype: %" GST_FOURCC_FORMAT, depth, "",
GST_FOURCC_ARGS (QT_FOURCC (buffer + 16)));
GST_LOG ("%*s manufacturer: %" GST_FOURCC_FORMAT, depth, "",
GST_FOURCC_ARGS (QT_FOURCC (buffer + 20)));
GST_LOG ("%*s flags: %08x", depth, "", QT_UINT32 (buffer + 24));
GST_LOG ("%*s flags mask: %08x", depth, "", QT_UINT32 (buffer + 28));
GST_LOG ("%*s name: %*s", depth, "",
QT_UINT8 (buffer + 32), (char *) (buffer + 33));
}
void
qtdemux_dump_vmhd (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s mode/color: %08x", depth, "", QT_UINT32 (buffer + 16));
}
void
qtdemux_dump_dref (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
int n;
int i;
int offset;
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s n entries: %u", depth, "", QT_UINT32 (buffer + 12));
n = QT_UINT32 (buffer + 12);
offset = 16;
for (i = 0; i < n; i++) {
GST_LOG ("%*s size: %u", depth, "",
QT_UINT32 (buffer + offset));
GST_LOG ("%*s type: %" GST_FOURCC_FORMAT, depth, "",
GST_FOURCC_ARGS (QT_FOURCC (buffer + offset + 4)));
offset += QT_UINT32 (buffer + offset);
}
}
void
qtdemux_dump_stsd (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
int i;
int n;
int offset;
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s n entries: %d", depth, "", QT_UINT32 (buffer + 12));
n = QT_UINT32 (buffer + 12);
offset = 16;
for (i = 0; i < n; i++) {
GST_LOG ("%*s size: %u", depth, "",
QT_UINT32 (buffer + offset));
GST_LOG ("%*s type: %" GST_FOURCC_FORMAT, depth, "",
GST_FOURCC_ARGS (QT_FOURCC (buffer + offset + 4)));
GST_LOG ("%*s data reference:%d", depth, "",
QT_UINT16 (buffer + offset + 14));
GST_LOG ("%*s version/rev.: %08x", depth, "",
QT_UINT32 (buffer + offset + 16));
GST_LOG ("%*s vendor: %" GST_FOURCC_FORMAT, depth, "",
GST_FOURCC_ARGS (QT_FOURCC (buffer + offset + 20)));
GST_LOG ("%*s temporal qual: %u", depth, "",
QT_UINT32 (buffer + offset + 24));
GST_LOG ("%*s spatial qual: %u", depth, "",
QT_UINT32 (buffer + offset + 28));
GST_LOG ("%*s width: %u", depth, "",
QT_UINT16 (buffer + offset + 32));
GST_LOG ("%*s height: %u", depth, "",
QT_UINT16 (buffer + offset + 34));
GST_LOG ("%*s horiz. resol: %g", depth, "",
QT_FP32 (buffer + offset + 36));
GST_LOG ("%*s vert. resol.: %g", depth, "",
QT_FP32 (buffer + offset + 40));
GST_LOG ("%*s data size: %u", depth, "",
QT_UINT32 (buffer + offset + 44));
GST_LOG ("%*s frame count: %u", depth, "",
QT_UINT16 (buffer + offset + 48));
GST_LOG ("%*s compressor: %d %d %d", depth, "",
QT_UINT8 (buffer + offset + 49),
QT_UINT8 (buffer + offset + 50), QT_UINT8 (buffer + offset + 51));
//(char *) (buffer + offset + 51));
GST_LOG ("%*s depth: %u", depth, "",
QT_UINT16 (buffer + offset + 82));
GST_LOG ("%*s color table ID:%u", depth, "",
QT_UINT16 (buffer + offset + 84));
offset += QT_UINT32 (buffer + offset);
}
}
void
qtdemux_dump_stts (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
int i;
int n;
int offset;
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s n entries: %d", depth, "", QT_UINT32 (buffer + 12));
n = QT_UINT32 (buffer + 12);
offset = 16;
for (i = 0; i < n; i++) {
GST_LOG ("%*s count: %u", depth, "",
QT_UINT32 (buffer + offset));
GST_LOG ("%*s duration: %u", depth, "",
QT_UINT32 (buffer + offset + 4));
offset += 8;
}
}
void
qtdemux_dump_stss (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
int i;
int n;
int offset;
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s n entries: %d", depth, "", QT_UINT32 (buffer + 12));
n = QT_UINT32 (buffer + 12);
offset = 16;
for (i = 0; i < n; i++) {
GST_LOG ("%*s sample: %u", depth, "",
QT_UINT32 (buffer + offset));
offset += 4;
}
}
void
qtdemux_dump_stsc (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
int i;
int n;
int offset;
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s n entries: %d", depth, "", QT_UINT32 (buffer + 12));
n = QT_UINT32 (buffer + 12);
offset = 16;
for (i = 0; i < n; i++) {
GST_LOG ("%*s first chunk: %u", depth, "",
QT_UINT32 (buffer + offset));
GST_LOG ("%*s sample per ch: %u", depth, "",
QT_UINT32 (buffer + offset + 4));
GST_LOG ("%*s sample desc id:%08x", depth, "",
QT_UINT32 (buffer + offset + 8));
offset += 12;
}
}
void
qtdemux_dump_stsz (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
//int i;
int n;
int offset;
int sample_size;
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
sample_size = QT_UINT32 (buffer + 12);
GST_LOG ("%*s sample size: %d", depth, "", sample_size);
if (sample_size == 0) {
GST_LOG ("%*s n entries: %d", depth, "", QT_UINT32 (buffer + 16));
n = QT_UINT32 (buffer + 16);
offset = 20;
#if 0
for (i = 0; i < n; i++) {
GST_LOG ("%*s sample size: %u", depth, "",
QT_UINT32 (buffer + offset));
offset += 4;
}
#endif
}
}
void
qtdemux_dump_stco (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
int i;
int n;
int offset;
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
n = QT_UINT32 (buffer + 12);
GST_LOG ("%*s n entries: %d", depth, "", n);
offset = 16;
for (i = 0; i < n; i++) {
GST_LOG ("%*s chunk offset: %d", depth, "",
QT_UINT32 (buffer + offset));
offset += 4;
}
}
void
qtdemux_dump_co64 (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
//int i;
int n;
int offset;
GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8));
GST_LOG ("%*s n entries: %d", depth, "", QT_UINT32 (buffer + 12));
n = QT_UINT32 (buffer + 12);
offset = 16;
#if 0
for (i = 0; i < n; i++) {
GST_LOG ("%*s chunk offset: %" G_GUINT64_FORMAT, depth, "",
QTDEMUX_GUINT64_GET (buffer + offset));
offset += 8;
}
#endif
}
void
qtdemux_dump_dcom (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
GST_LOG ("%*s compression type: %" GST_FOURCC_FORMAT, depth, "",
GST_FOURCC_ARGS (QT_FOURCC (buffer + 8)));
}
void
qtdemux_dump_cmvd (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
GST_LOG ("%*s length: %d", depth, "", QT_UINT32 (buffer + 8));
}
void
qtdemux_dump_unknown (GstQTDemux * qtdemux, guint8 * buffer, int depth)
{
int len;
GST_LOG ("%*s length: %d", depth, "", QT_UINT32 (buffer + 0));
len = QT_UINT32 (buffer + 0);
qtdemux_dump_mem (buffer, len);
}
static gboolean
qtdemux_node_dump_foreach (GNode * node, gpointer qtdemux)
{
guint8 *buffer = (guint8 *) node->data;
guint32 node_length;
guint32 fourcc;
const QtNodeType *type;
int depth;
node_length = GST_READ_UINT32_BE (buffer);
fourcc = GST_READ_UINT32_LE (buffer + 4);
type = qtdemux_type_get (fourcc);
depth = (g_node_depth (node) - 1) * 2;
GST_LOG ("%*s'%" GST_FOURCC_FORMAT "', [%d], %s",
depth, "", GST_FOURCC_ARGS (fourcc), node_length, type->name);
if (type->dump)
type->dump (GST_QTDEMUX_CAST (qtdemux), buffer, depth);
return FALSE;
}
void
qtdemux_node_dump (GstQTDemux * qtdemux, GNode * node)
{
g_node_traverse (qtdemux->moov_node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
qtdemux_node_dump_foreach, qtdemux);
}

View file

@ -0,0 +1,50 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* 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 __GST_QTDEMUX_DUMP_H__
#define __GST_QTDEMUX_DUMP_H__
#include <gst/gst.h>
#include <qtdemux.h>
G_BEGIN_DECLS
void qtdemux_dump_mvhd (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_tkhd (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_elst (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_mdhd (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_hdlr (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_vmhd (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_dref (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_stsd (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_stts (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_stss (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_stsc (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_stsz (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_stco (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_co64 (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_dcom (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_cmvd (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_dump_unknown (GstQTDemux * qtdemux, guint8 * buffer, int depth);
void qtdemux_node_dump (GstQTDemux * qtdemux, GNode * node);
G_END_DECLS
#endif /* __GST_QTDEMUX_DUMP_H__ */

View file

@ -0,0 +1,132 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* 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 __GST_QTDEMUX_FOURCC_H__
#define __GST_QTDEMUX_FOURCC_H__
#include <gst/gst.h>
G_BEGIN_DECLS
#define FOURCC_moov GST_MAKE_FOURCC('m','o','o','v')
#define FOURCC_mvhd GST_MAKE_FOURCC('m','v','h','d')
#define FOURCC_clip GST_MAKE_FOURCC('c','l','i','p')
#define FOURCC_trak GST_MAKE_FOURCC('t','r','a','k')
#define FOURCC_udta GST_MAKE_FOURCC('u','d','t','a')
#define FOURCC_ctab GST_MAKE_FOURCC('c','t','a','b')
#define FOURCC_tkhd GST_MAKE_FOURCC('t','k','h','d')
#define FOURCC_crgn GST_MAKE_FOURCC('c','r','g','n')
#define FOURCC_matt GST_MAKE_FOURCC('m','a','t','t')
#define FOURCC_kmat GST_MAKE_FOURCC('k','m','a','t')
#define FOURCC_edts GST_MAKE_FOURCC('e','d','t','s')
#define FOURCC_elst GST_MAKE_FOURCC('e','l','s','t')
#define FOURCC_load GST_MAKE_FOURCC('l','o','a','d')
#define FOURCC_tref GST_MAKE_FOURCC('t','r','e','f')
#define FOURCC_imap GST_MAKE_FOURCC('i','m','a','p')
#define FOURCC___in GST_MAKE_FOURCC(' ',' ','i','n')
#define FOURCC___ty GST_MAKE_FOURCC(' ',' ','t','y')
#define FOURCC_mdia GST_MAKE_FOURCC('m','d','i','a')
#define FOURCC_mdhd GST_MAKE_FOURCC('m','d','h','d')
#define FOURCC_hdlr GST_MAKE_FOURCC('h','d','l','r')
#define FOURCC_minf GST_MAKE_FOURCC('m','i','n','f')
#define FOURCC_vmhd GST_MAKE_FOURCC('v','m','h','d')
#define FOURCC_smhd GST_MAKE_FOURCC('s','m','h','d')
#define FOURCC_gmhd GST_MAKE_FOURCC('g','m','h','d')
#define FOURCC_gmin GST_MAKE_FOURCC('g','m','i','n')
#define FOURCC_dinf GST_MAKE_FOURCC('d','i','n','f')
#define FOURCC_dref GST_MAKE_FOURCC('d','r','e','f')
#define FOURCC_stbl GST_MAKE_FOURCC('s','t','b','l')
#define FOURCC_stsd GST_MAKE_FOURCC('s','t','s','d')
#define FOURCC_stts GST_MAKE_FOURCC('s','t','t','s')
#define FOURCC_stss GST_MAKE_FOURCC('s','t','s','s')
#define FOURCC_stsc GST_MAKE_FOURCC('s','t','s','c')
#define FOURCC_stsz GST_MAKE_FOURCC('s','t','s','z')
#define FOURCC_stco GST_MAKE_FOURCC('s','t','c','o')
#define FOURCC_vide GST_MAKE_FOURCC('v','i','d','e')
#define FOURCC_soun GST_MAKE_FOURCC('s','o','u','n')
#define FOURCC_strm GST_MAKE_FOURCC('s','t','r','m')
#define FOURCC_rtsp GST_MAKE_FOURCC('r','t','s','p')
#define FOURCC_co64 GST_MAKE_FOURCC('c','o','6','4')
#define FOURCC_cmov GST_MAKE_FOURCC('c','m','o','v')
#define FOURCC_dcom GST_MAKE_FOURCC('d','c','o','m')
#define FOURCC_cmvd GST_MAKE_FOURCC('c','m','v','d')
#define FOURCC_hint GST_MAKE_FOURCC('h','i','n','t')
#define FOURCC_mp4a GST_MAKE_FOURCC('m','p','4','a')
#define FOURCC_mp4v GST_MAKE_FOURCC('m','p','4','v')
#define FOURCC_wave GST_MAKE_FOURCC('w','a','v','e')
#define FOURCC_appl GST_MAKE_FOURCC('a','p','p','l')
#define FOURCC_esds GST_MAKE_FOURCC('e','s','d','s')
#define FOURCC_hnti GST_MAKE_FOURCC('h','n','t','i')
#define FOURCC_rtp_ GST_MAKE_FOURCC('r','t','p',' ')
#define FOURCC_sdp_ GST_MAKE_FOURCC('s','d','p',' ')
#define FOURCC_meta GST_MAKE_FOURCC('m','e','t','a')
#define FOURCC_ilst GST_MAKE_FOURCC('i','l','s','t')
#define FOURCC__nam GST_MAKE_FOURCC(0xa9,'n','a','m')
#define FOURCC__ART GST_MAKE_FOURCC(0xa9,'A','R','T')
#define FOURCC__wrt GST_MAKE_FOURCC(0xa9,'w','r','t')
#define FOURCC__grp GST_MAKE_FOURCC(0xa9,'g','r','p')
#define FOURCC__alb GST_MAKE_FOURCC(0xa9,'a','l','b')
#define FOURCC__day GST_MAKE_FOURCC(0xa9,'d','a','y')
#define FOURCC_gnre GST_MAKE_FOURCC('g','n','r','e')
#define FOURCC_disc GST_MAKE_FOURCC('d','i','s','c')
#define FOURCC_disk GST_MAKE_FOURCC('d','i','s','k')
#define FOURCC_trkn GST_MAKE_FOURCC('t','r','k','n')
#define FOURCC_cpil GST_MAKE_FOURCC('c','p','i','l')
#define FOURCC_tmpo GST_MAKE_FOURCC('t','m','p','o')
#define FOURCC__too GST_MAKE_FOURCC(0xa9,'t','o','o')
#define FOURCC_____ GST_MAKE_FOURCC('-','-','-','-')
#define FOURCC_free GST_MAKE_FOURCC('f','r','e','e')
#define FOURCC_data GST_MAKE_FOURCC('d','a','t','a')
#define FOURCC_SVQ3 GST_MAKE_FOURCC('S','V','Q','3')
#define FOURCC_rmra GST_MAKE_FOURCC('r','m','r','a')
#define FOURCC_rmda GST_MAKE_FOURCC('r','m','d','a')
#define FOURCC_rdrf GST_MAKE_FOURCC('r','d','r','f')
#define FOURCC__gen GST_MAKE_FOURCC(0xa9, 'g', 'e', 'n')
#define FOURCC_rmdr GST_MAKE_FOURCC('r','m','d','r')
#define FOURCC_rmvc GST_MAKE_FOURCC('r','m','v','c')
#define FOURCC_qtim GST_MAKE_FOURCC('q','t','i','m')
#define FOURCC_drms GST_MAKE_FOURCC('d','r','m','s')
#define FOURCC_avc1 GST_MAKE_FOURCC('a','v','c','1')
#define FOURCC_avcC GST_MAKE_FOURCC('a','v','c','C')
#define FOURCC_VP31 GST_MAKE_FOURCC('V','P','3','1')
#define FOURCC_rle_ GST_MAKE_FOURCC('r','l','e',' ')
#define FOURCC_MAC6 GST_MAKE_FOURCC('M','A','C','6')
#define FOURCC_MAC3 GST_MAKE_FOURCC('M','A','C','3')
#define FOURCC_ima4 GST_MAKE_FOURCC('i','m','a','4')
#define FOURCC_ulaw GST_MAKE_FOURCC('u','l','a','w')
#define FOURCC_alaw GST_MAKE_FOURCC('a','l','a','w')
#define FOURCC_twos GST_MAKE_FOURCC('t','w','o','s')
#define FOURCC_sowt GST_MAKE_FOURCC('s','o','w','t')
#define FOURCC_raw_ GST_MAKE_FOURCC('r','a','w',' ')
#define FOURCC_QDM2 GST_MAKE_FOURCC('Q','D','M','2')
#define FOURCC_alac GST_MAKE_FOURCC('a','l','a','c')
#define FOURCC_samr GST_MAKE_FOURCC('s','a','m','r')
#define FOURCC_sawb GST_MAKE_FOURCC('s','a','w','b')
#define FOURCC_mdat GST_MAKE_FOURCC('m','d','a','t')
#define FOURCC_wide GST_MAKE_FOURCC('w','i','d','e')
#define FOURCC_PICT GST_MAKE_FOURCC('P','I','C','T')
#define FOURCC_pnot GST_MAKE_FOURCC('p','n','o','t')
#define FOURCC_zlib GST_MAKE_FOURCC('z','l','i','b')
#define FOURCC_alis GST_MAKE_FOURCC('a','l','i','s')
#define FOURCC_url_ GST_MAKE_FOURCC('u','r','l',' ')
#define FOURCC_frma GST_MAKE_FOURCC('f','r','m','a')
G_END_DECLS
#endif /* __GST_QTDEMUX_FOURCC_H__ */

128
gst/qtdemux/qtdemux_types.c Normal file
View file

@ -0,0 +1,128 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* 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.
*/
#include "qtdemux_types.h"
#include "qtdemux_dump.h"
#include "qtdemux_fourcc.h"
static const QtNodeType qt_node_types[] = {
{FOURCC_moov, "movie", QT_FLAG_CONTAINER,},
{FOURCC_mvhd, "movie header", 0,
qtdemux_dump_mvhd},
{FOURCC_clip, "clipping", QT_FLAG_CONTAINER,},
{FOURCC_trak, "track", QT_FLAG_CONTAINER,},
{FOURCC_udta, "user data", QT_FLAG_CONTAINER,}, /* special container */
{FOURCC_ctab, "color table", 0,},
{FOURCC_tkhd, "track header", 0,
qtdemux_dump_tkhd},
{FOURCC_crgn, "clipping region", 0,},
{FOURCC_matt, "track matte", QT_FLAG_CONTAINER,},
{FOURCC_kmat, "compressed matte", 0,},
{FOURCC_edts, "edit", QT_FLAG_CONTAINER,},
{FOURCC_elst, "edit list", 0,
qtdemux_dump_elst},
{FOURCC_load, "track load settings", 0,},
{FOURCC_tref, "track reference", QT_FLAG_CONTAINER,},
{FOURCC_imap, "track input map", QT_FLAG_CONTAINER,},
{FOURCC___in, "track input", 0,}, /* special container */
{FOURCC___ty, "input type", 0,},
{FOURCC_mdia, "media", QT_FLAG_CONTAINER},
{FOURCC_mdhd, "media header", 0,
qtdemux_dump_mdhd},
{FOURCC_hdlr, "handler reference", 0,
qtdemux_dump_hdlr},
{FOURCC_minf, "media information", QT_FLAG_CONTAINER},
{FOURCC_vmhd, "video media information", 0,
qtdemux_dump_vmhd},
{FOURCC_smhd, "sound media information", 0},
{FOURCC_gmhd, "base media information header", 0},
{FOURCC_gmin, "base media info", 0},
{FOURCC_dinf, "data information", QT_FLAG_CONTAINER},
{FOURCC_dref, "data reference", 0,
qtdemux_dump_dref},
{FOURCC_stbl, "sample table", QT_FLAG_CONTAINER},
{FOURCC_stsd, "sample description", 0,
qtdemux_dump_stsd},
{FOURCC_stts, "time-to-sample", 0,
qtdemux_dump_stts},
{FOURCC_stss, "sync sample", 0,
qtdemux_dump_stss},
{FOURCC_stsc, "sample-to-chunk", 0,
qtdemux_dump_stsc},
{FOURCC_stsz, "sample size", 0,
qtdemux_dump_stsz},
{FOURCC_stco, "chunk offset", 0,
qtdemux_dump_stco},
{FOURCC_co64, "64-bit chunk offset", 0,
qtdemux_dump_co64},
{FOURCC_vide, "video media", 0},
{FOURCC_cmov, "compressed movie", QT_FLAG_CONTAINER},
{FOURCC_dcom, "compressed data", 0, qtdemux_dump_dcom},
{FOURCC_cmvd, "compressed movie data", 0, qtdemux_dump_cmvd},
{FOURCC_hint, "hint", 0,},
{FOURCC_mp4a, "mp4a", 0,},
{FOURCC_mp4v, "mp4v", 0,},
{FOURCC_wave, "wave", QT_FLAG_CONTAINER},
{FOURCC_appl, "appl", QT_FLAG_CONTAINER},
{FOURCC_esds, "esds", 0},
{FOURCC_hnti, "hnti", QT_FLAG_CONTAINER},
{FOURCC_rtp_, "rtp ", 0, qtdemux_dump_unknown},
{FOURCC_sdp_, "sdp ", 0, qtdemux_dump_unknown},
{FOURCC_meta, "meta", 0, qtdemux_dump_unknown},
{FOURCC_ilst, "ilst", QT_FLAG_CONTAINER,},
{FOURCC__nam, "Name", QT_FLAG_CONTAINER,},
{FOURCC__ART, "Artist", QT_FLAG_CONTAINER,},
{FOURCC__wrt, "Writer", QT_FLAG_CONTAINER,},
{FOURCC__grp, "Group", QT_FLAG_CONTAINER,},
{FOURCC__alb, "Album", QT_FLAG_CONTAINER,},
{FOURCC__day, "Date", QT_FLAG_CONTAINER,},
{FOURCC_gnre, "Genre", QT_FLAG_CONTAINER,},
{FOURCC_trkn, "Track Number", QT_FLAG_CONTAINER,},
{FOURCC_disc, "Disc Number", QT_FLAG_CONTAINER,},
{FOURCC_disk, "Disc Number", QT_FLAG_CONTAINER,},
{FOURCC_cpil, "cpil", QT_FLAG_CONTAINER,},
{FOURCC_tmpo, "Tempo", QT_FLAG_CONTAINER,},
{FOURCC__too, "too", QT_FLAG_CONTAINER,},
{FOURCC_____, "----", QT_FLAG_CONTAINER,},
{FOURCC_data, "data", 0, qtdemux_dump_unknown},
{FOURCC_free, "free", 0,},
{FOURCC_SVQ3, "SVQ3", 0,},
{FOURCC_rmra, "rmra", QT_FLAG_CONTAINER,},
{FOURCC_rmda, "rmda", QT_FLAG_CONTAINER,},
{FOURCC_rdrf, "rdrf", 0,},
{FOURCC__gen, "Custom Genre", QT_FLAG_CONTAINER,},
{0, "unknown", 0,},
};
static const int n_qt_node_types =
sizeof (qt_node_types) / sizeof (qt_node_types[0]);
const QtNodeType *
qtdemux_type_get (guint32 fourcc)
{
int i;
for (i = 0; i < n_qt_node_types; i++) {
if (qt_node_types[i].fourcc == fourcc)
return qt_node_types + i;
}
GST_WARNING ("unknown QuickTime node type %" GST_FOURCC_FORMAT,
GST_FOURCC_ARGS (fourcc));
return qt_node_types + n_qt_node_types - 1;
}

View file

@ -0,0 +1,58 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* 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 __GST_QTDEMUX_TYPES_H__
#define __GST_QTDEMUX_TYPES_H__
#include <gst/gst.h>
#include "qtdemux.h"
G_BEGIN_DECLS
typedef void (*QtDumpFunc) (GstQTDemux * qtdemux, guint8 * buffer, int depth);
typedef struct _QtNodeType QtNodeType;
#define QT_UINT32(a) (GST_READ_UINT32_BE(a))
#define QT_UINT24(a) (GST_READ_UINT32_BE(a) >> 8)
#define QT_UINT16(a) (GST_READ_UINT16_BE(a))
#define QT_UINT8(a) (GST_READ_UINT8(a))
#define QT_FP32(a) ((GST_READ_UINT32_BE(a))/65536.0)
#define QT_FP16(a) ((GST_READ_UINT16_BE(a))/256.0)
#define QT_FOURCC(a) (GST_READ_UINT32_LE(a))
#define QT_UINT64(a) ((((guint64)QT_UINT32(a))<<32)|QT_UINT32(((guint8 *)a)+4))
typedef enum {
QT_FLAG_NONE = (0),
QT_FLAG_CONTAINER = (1 << 0)
} QtFlags;
struct _QtNodeType {
guint32 fourcc;
const gchar *name;
QtFlags flags;
QtDumpFunc dump;
};
const QtNodeType *qtdemux_type_get (guint32 fourcc);
G_END_DECLS
#endif /* __GST_QTDEMUX_TYPES_H__ */

137
gst/qtdemux/qtpalette.h Normal file
View file

@ -0,0 +1,137 @@
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
*
* 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 __GST_QTPALLETE_H__
#define __GST_QTPALLETE_H__
#include <gst/gst.h>
G_BEGIN_DECLS
static const guint32 ff_qt_default_palette_2[2] = {
0xffffff, 0x000000
};
static const guint32 ff_qt_default_palette_4[4] = {
0x93655e, 0xffffff, 0xdfd0ab, 0x000000
};
static const guint32 ff_qt_default_palette_16[16] = {
0xfffbff, 0xefd9bb, 0xe8c9b1, 0x93655e,
0xfcdee8, 0x9d8891, 0xffffff, 0xffffff,
0xffffff, 0x474837, 0x7a5e55, 0xdfd0ab,
0xfffbf9, 0xe8cac5, 0x8a7c77, 0x000000
};
static const guint32 ff_qt_default_palette_256[256] = {
0xFFFFFF, 0xFFFFCC, 0xFFFF99, 0xFFFF66, 0xFFFF33, 0xFFFF00,
0xFFCCFF, 0xFFCCCC, 0xFFCC99, 0xFFCC66, 0xFFCC33, 0xFFCC00,
0xFF99FF, 0xFF99CC, 0xFF9999, 0xFF9966, 0xFF9933, 0xFF9900,
0xFF66FF, 0xFF66CC, 0xFF6699, 0xFF6666, 0xFF6633, 0xFF6600,
0xFF33FF, 0xFF33CC, 0xFF3399, 0xFF3366, 0xFF3333, 0xFF3300,
0xFF00FF, 0xFF00CC, 0xFF0099, 0xFF0066, 0xFF0033, 0xFF0000,
0xCCFFFF, 0xCCFFCC, 0xCCFF99, 0xCCFF66, 0xCCFF33, 0xCCFF00,
0xCCCCFF, 0xCCCCCC, 0xCCCC99, 0xCCCC66, 0xCCCC33, 0xCCCC00,
0xCC99FF, 0xCC99CC, 0xCC9999, 0xCC9966, 0xCC9933, 0xCC9900,
0xCC66FF, 0xCC66CC, 0xCC6699, 0xCC6666, 0xCC6633, 0xCC6600,
0xCC33FF, 0xCC33CC, 0xCC3399, 0xCC3366, 0xCC3333, 0xCC3300,
0xCC00FF, 0xCC00CC, 0xCC0099, 0xCC0066, 0xCC0033, 0xCC0000,
0x99FFFF, 0x99FFCC, 0x99FF99, 0x99FF66, 0x99FF33, 0x99FF00,
0x99CCFF, 0x99CCCC, 0x99CC99, 0x99CC66, 0x99CC33, 0x99CC00,
0x9999FF, 0x9999CC, 0x999999, 0x999966, 0x999933, 0x999900,
0x9966FF, 0x9966CC, 0x996699, 0x996666, 0x996633, 0x996600,
0x9933FF, 0x9933CC, 0x993399, 0x993366, 0x993333, 0x993300,
0x9900FF, 0x9900CC, 0x990099, 0x990066, 0x990033, 0x990000,
0x66FFFF, 0x66FFCC, 0x66FF99, 0x66FF66, 0x66FF33, 0x66FF00,
0x66CCFF, 0x66CCCC, 0x66CC99, 0x66CC66, 0x66CC33, 0x66CC00,
0x6699FF, 0x6699CC, 0x669999, 0x669966, 0x669933, 0x669900,
0x6666FF, 0x6666CC, 0x666699, 0x666666, 0x666633, 0x666600,
0x6633FF, 0x6633CC, 0x663399, 0x663366, 0x663333, 0x663300,
0x6600FF, 0x6600CC, 0x660099, 0x660066, 0x660033, 0x660000,
0x33FFFF, 0x33FFCC, 0x33FF99, 0x33FF66, 0x33FF33, 0x33FF00,
0x33CCFF, 0x33CCCC, 0x33CC99, 0x33CC66, 0x33CC33, 0x33CC00,
0x3399FF, 0x3399CC, 0x339999, 0x339966, 0x339933, 0x339900,
0x3366FF, 0x3366CC, 0x336699, 0x336666, 0x336633, 0x336600,
0x3333FF, 0x3333CC, 0x333399, 0x333366, 0x333333, 0x333300,
0x3300FF, 0x3300CC, 0x330099, 0x330066, 0x330033, 0x330000,
0x00FFFF, 0x00FFCC, 0x00FF99, 0x00FF66, 0x00FF33, 0x00FF00,
0x00CCFF, 0x00CCCC, 0x00CC99, 0x00CC66, 0x00CC33, 0x00CC00,
0x0099FF, 0x0099CC, 0x009999, 0x009966, 0x009933, 0x009900,
0x0066FF, 0x0066CC, 0x006699, 0x006666, 0x006633, 0x006600,
0x0033FF, 0x0033CC, 0x003399, 0x003366, 0x003333, 0x003300,
0x0000FF, 0x0000CC, 0x000099, 0x000066, 0x000033, 0xEE0000,
0xDD0000, 0xBB0000, 0xAA0000, 0x880000, 0x770000, 0x550000,
0x440000, 0x220000, 0x110000, 0x00EE00, 0x00DD00, 0x00BB00,
0x00AA00, 0x008800, 0x007700, 0x005500, 0x004400, 0x002200,
0x001100, 0x0000EE, 0x0000DD, 0x0000BB, 0x0000AA, 0x000088,
0x000077, 0x000055, 0x000044, 0x000022, 0x000011, 0xEEEEEE,
0xDDDDDD, 0xBBBBBB, 0xAAAAAA, 0x888888, 0x777777, 0x555555,
0x444444, 0x222222, 0x111111, 0x000000
};
static const guint32 ff_qt_grayscale_palette_16[16] = {
0xffffff, 0xeeeeee, 0xdddddd, 0xcccccc,
0xbbbbbb, 0xaaaaaa, 0x999999, 0x888888,
0x777777, 0x666666, 0x555555, 0x444444,
0x333333, 0x222222, 0x111111, 0x000000
};
static const guint32 ff_qt_grayscale_palette_256[256] = {
0xffffff, 0xfefefe, 0xfdfdfd, 0xfcfcfc, 0xfbfbfb, 0xfafafa, 0xf9f9f9,
0xf8f8f8, 0xf7f7f7, 0xf6f6f6, 0xf5f5f5, 0xf4f4f4, 0xf3f3f3, 0xf2f2f2,
0xf1f1f1, 0xf0f0f0, 0xefefef, 0xeeeeee, 0xededed, 0xececec, 0xebebeb,
0xeaeaea, 0xe9e9e9, 0xe8e8e8, 0xe7e7e7, 0xe6e6e6, 0xe5e5e5, 0xe4e4e4,
0xe3e3e3, 0xe2e2e2, 0xe1e1e1, 0xe0e0e0, 0xdfdfdf, 0xdedede, 0xdddddd,
0xdcdcdc, 0xdbdbdb, 0xdadada, 0xd9d9d9, 0xd8d8d8, 0xd7d7d7, 0xd6d6d6,
0xd5d5d5, 0xd4d4d4, 0xd3d3d3, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf,
0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8,
0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1,
0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa,
0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3,
0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac,
0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5,
0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e,
0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797,
0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090,
0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989,
0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282,
0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b,
0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474,
0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d,
0x6c6c6c, 0x6b6b6b, 0x6a6a6a, 0x696969, 0x686868, 0x676767, 0x666666,
0x656565, 0x646464, 0x636363, 0x626262, 0x616161, 0x606060, 0x5f5f5f,
0x5e5e5e, 0x5d5d5d, 0x5c5c5c, 0x5b5b5b, 0x5a5a5a, 0x595959, 0x585858,
0x575757, 0x565656, 0x555555, 0x545454, 0x535353, 0x525252, 0x515151,
0x505050, 0x4f4f4f, 0x4e4e4e, 0x4d4d4d, 0x4c4c4c, 0x4b4b4b, 0x4a4a4a,
0x494949, 0x484848, 0x474747, 0x464646, 0x454545, 0x444444, 0x434343,
0x424242, 0x414141, 0x404040, 0x3f3f3f, 0x3e3e3e, 0x3d3d3d, 0x3c3c3c,
0x3b3b3b, 0x3a3a3a, 0x393939, 0x383838, 0x373737, 0x363636, 0x353535,
0x343434, 0x333333, 0x323232, 0x313131, 0x303030, 0x2f2f2f, 0x2e2e2e,
0x2d2d2d, 0x2c2c2c, 0x2b2b2b, 0x2a2a2a, 0x292929, 0x282828, 0x272727,
0x262626, 0x252525, 0x242424, 0x232323, 0x222222, 0x212121, 0x202020,
0x1f1f1f, 0x1e1e1e, 0x1d1d1d, 0x1c1c1c, 0x1b1b1b, 0x1a1a1a, 0x191919,
0x181818, 0x171717, 0x161616, 0x151515, 0x141414, 0x131313, 0x121212,
0x111111, 0x101010, 0x0f0f0f, 0x0e0e0e, 0x0d0d0d, 0x0c0c0c, 0x0b0b0b,
0x0a0a0a, 0x090909, 0x080808, 0x070707, 0x060606, 0x050505, 0x040404,
0x030303, 0x020202, 0x010101, 0x000000
};
G_END_DECLS
#endif /* __GST_QTPALETTE_H__ */