mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
isoff: Add parsing moov and tfdt
To extract isobmff level timestamp, moov and tfdt parsing is required. https://bugzilla.gnome.org/show_bug.cgi?id=777825
This commit is contained in:
parent
7d06ecb3a4
commit
3db9152ec6
5 changed files with 714 additions and 7 deletions
|
@ -231,6 +231,34 @@ error:
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_isoff_tfdt_box_parse (GstTfdtBox * tfdt, GstByteReader * reader)
|
||||
{
|
||||
gint8 version;
|
||||
|
||||
memset (tfdt, 0, sizeof (*tfdt));
|
||||
|
||||
if (gst_byte_reader_get_remaining (reader) < 4)
|
||||
return FALSE;
|
||||
|
||||
version = gst_byte_reader_get_uint8_unchecked (reader);
|
||||
|
||||
if (!gst_byte_reader_skip (reader, 3))
|
||||
return FALSE;
|
||||
|
||||
if (version == 1) {
|
||||
if (!gst_byte_reader_get_uint64_be (reader, &tfdt->decode_time))
|
||||
return FALSE;
|
||||
} else {
|
||||
guint32 dec_time = 0;
|
||||
if (!gst_byte_reader_get_uint32_be (reader, &dec_time))
|
||||
return FALSE;
|
||||
tfdt->decode_time = dec_time;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_isoff_traf_box_parse (GstTrafBox * traf, GstByteReader * reader)
|
||||
{
|
||||
|
@ -241,10 +269,13 @@ gst_isoff_traf_box_parse (GstTrafBox * traf, GstByteReader * reader)
|
|||
g_array_set_clear_func (traf->trun,
|
||||
(GDestroyNotify) gst_isoff_trun_box_clear);
|
||||
|
||||
traf->tfdt.decode_time = GST_CLOCK_TIME_NONE;
|
||||
|
||||
while (gst_byte_reader_get_remaining (reader) > 0) {
|
||||
guint32 fourcc;
|
||||
guint header_size;
|
||||
guint64 size;
|
||||
GstByteReader sub_reader;
|
||||
|
||||
if (!gst_isoff_parse_box_header (reader, &fourcc, NULL, &header_size,
|
||||
&size))
|
||||
|
@ -254,8 +285,6 @@ gst_isoff_traf_box_parse (GstTrafBox * traf, GstByteReader * reader)
|
|||
|
||||
switch (fourcc) {
|
||||
case GST_ISOFF_FOURCC_TFHD:{
|
||||
GstByteReader sub_reader;
|
||||
|
||||
gst_byte_reader_get_sub_reader (reader, &sub_reader,
|
||||
size - header_size);
|
||||
if (!gst_isoff_tfhd_box_parse (&traf->tfhd, &sub_reader))
|
||||
|
@ -263,8 +292,14 @@ gst_isoff_traf_box_parse (GstTrafBox * traf, GstByteReader * reader)
|
|||
had_tfhd = TRUE;
|
||||
break;
|
||||
}
|
||||
case GST_ISOFF_FOURCC_TFDT:{
|
||||
gst_byte_reader_get_sub_reader (reader, &sub_reader,
|
||||
size - header_size);
|
||||
if (!gst_isoff_tfdt_box_parse (&traf->tfdt, &sub_reader))
|
||||
goto error;
|
||||
break;
|
||||
}
|
||||
case GST_ISOFF_FOURCC_TRUN:{
|
||||
GstByteReader sub_reader;
|
||||
GstTrunBox trun;
|
||||
|
||||
gst_byte_reader_get_sub_reader (reader, &sub_reader,
|
||||
|
@ -297,6 +332,7 @@ gst_isoff_moof_box_parse (GstByteReader * reader)
|
|||
{
|
||||
GstMoofBox *moof;
|
||||
gboolean had_mfhd = FALSE;
|
||||
GstByteReader sub_reader;
|
||||
|
||||
|
||||
INITIALIZE_DEBUG_CATEGORY;
|
||||
|
@ -318,8 +354,6 @@ gst_isoff_moof_box_parse (GstByteReader * reader)
|
|||
|
||||
switch (fourcc) {
|
||||
case GST_ISOFF_FOURCC_MFHD:{
|
||||
GstByteReader sub_reader;
|
||||
|
||||
gst_byte_reader_get_sub_reader (reader, &sub_reader,
|
||||
size - header_size);
|
||||
if (!gst_isoff_mfhd_box_parse (&moof->mfhd, &sub_reader))
|
||||
|
@ -328,7 +362,6 @@ gst_isoff_moof_box_parse (GstByteReader * reader)
|
|||
break;
|
||||
}
|
||||
case GST_ISOFF_FOURCC_TRAF:{
|
||||
GstByteReader sub_reader;
|
||||
GstTrafBox traf;
|
||||
|
||||
gst_byte_reader_get_sub_reader (reader, &sub_reader,
|
||||
|
@ -362,6 +395,239 @@ gst_isoff_moof_box_free (GstMoofBox * moof)
|
|||
g_free (moof);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_isoff_mdhd_box_parse (GstMdhdBox * mdhd, GstByteReader * reader)
|
||||
{
|
||||
guint8 version;
|
||||
|
||||
memset (mdhd, 0, sizeof (*mdhd));
|
||||
|
||||
if (gst_byte_reader_get_remaining (reader) < 4)
|
||||
return FALSE;
|
||||
|
||||
version = gst_byte_reader_get_uint8_unchecked (reader);
|
||||
|
||||
if (!gst_byte_reader_skip (reader, 3))
|
||||
return FALSE;
|
||||
|
||||
/* skip {creation, modification}_time, we don't have interest */
|
||||
if (version == 1) {
|
||||
if (!gst_byte_reader_skip (reader, 16))
|
||||
return FALSE;
|
||||
} else {
|
||||
if (!gst_byte_reader_skip (reader, 8))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!gst_byte_reader_get_uint32_be (reader, &mdhd->timescale))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_isoff_hdlr_box_parse (GstHdlrBox * hdlr, GstByteReader * reader)
|
||||
{
|
||||
memset (hdlr, 0, sizeof (*hdlr));
|
||||
|
||||
if (gst_byte_reader_get_remaining (reader) < 4)
|
||||
return FALSE;
|
||||
|
||||
/* version & flag */
|
||||
if (!gst_byte_reader_skip (reader, 4))
|
||||
return FALSE;
|
||||
|
||||
/* pre_defined = 0 */
|
||||
if (!gst_byte_reader_skip (reader, 4))
|
||||
return FALSE;
|
||||
|
||||
if (!gst_byte_reader_get_uint32_le (reader, &hdlr->handler_type))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_isoff_mdia_box_parse (GstMdiaBox * mdia, GstByteReader * reader)
|
||||
{
|
||||
gboolean had_mdhd = FALSE, had_hdlr = FALSE;
|
||||
while (gst_byte_reader_get_remaining (reader) > 0) {
|
||||
guint32 fourcc;
|
||||
guint header_size;
|
||||
guint64 size;
|
||||
GstByteReader sub_reader;
|
||||
|
||||
if (!gst_isoff_parse_box_header (reader, &fourcc, NULL, &header_size,
|
||||
&size))
|
||||
return FALSE;
|
||||
if (gst_byte_reader_get_remaining (reader) < size - header_size)
|
||||
return FALSE;
|
||||
|
||||
switch (fourcc) {
|
||||
case GST_ISOFF_FOURCC_MDHD:{
|
||||
gst_byte_reader_get_sub_reader (reader, &sub_reader,
|
||||
size - header_size);
|
||||
if (!gst_isoff_mdhd_box_parse (&mdia->mdhd, &sub_reader))
|
||||
return FALSE;
|
||||
|
||||
had_mdhd = TRUE;
|
||||
break;
|
||||
}
|
||||
case GST_ISOFF_FOURCC_HDLR:{
|
||||
gst_byte_reader_get_sub_reader (reader, &sub_reader,
|
||||
size - header_size);
|
||||
if (!gst_isoff_hdlr_box_parse (&mdia->hdlr, &sub_reader))
|
||||
return FALSE;
|
||||
|
||||
had_hdlr = TRUE;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
gst_byte_reader_skip (reader, size - header_size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!had_mdhd || !had_hdlr)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_isoff_tkhd_box_parse (GstTkhdBox * tkhd, GstByteReader * reader)
|
||||
{
|
||||
guint8 version;
|
||||
|
||||
memset (tkhd, 0, sizeof (*tkhd));
|
||||
|
||||
if (gst_byte_reader_get_remaining (reader) < 4)
|
||||
return FALSE;
|
||||
|
||||
if (!gst_byte_reader_get_uint8 (reader, &version))
|
||||
return FALSE;
|
||||
|
||||
if (!gst_byte_reader_skip (reader, 3))
|
||||
return FALSE;
|
||||
|
||||
/* skip {creation, modification}_time, we don't have interest */
|
||||
if (version == 1) {
|
||||
if (!gst_byte_reader_skip (reader, 16))
|
||||
return FALSE;
|
||||
} else {
|
||||
if (!gst_byte_reader_skip (reader, 8))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!gst_byte_reader_get_uint32_be (reader, &tkhd->track_id))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_isoff_trak_box_parse (GstTrakBox * trak, GstByteReader * reader)
|
||||
{
|
||||
gboolean had_mdia = FALSE, had_tkhd = FALSE;
|
||||
while (gst_byte_reader_get_remaining (reader) > 0) {
|
||||
guint32 fourcc;
|
||||
guint header_size;
|
||||
guint64 size;
|
||||
GstByteReader sub_reader;
|
||||
|
||||
if (!gst_isoff_parse_box_header (reader, &fourcc, NULL, &header_size,
|
||||
&size))
|
||||
return FALSE;
|
||||
if (gst_byte_reader_get_remaining (reader) < size - header_size)
|
||||
return FALSE;
|
||||
|
||||
switch (fourcc) {
|
||||
case GST_ISOFF_FOURCC_MDIA:{
|
||||
gst_byte_reader_get_sub_reader (reader, &sub_reader,
|
||||
size - header_size);
|
||||
if (!gst_isoff_mdia_box_parse (&trak->mdia, &sub_reader))
|
||||
return FALSE;
|
||||
|
||||
had_mdia = TRUE;
|
||||
break;
|
||||
}
|
||||
case GST_ISOFF_FOURCC_TKHD:{
|
||||
gst_byte_reader_get_sub_reader (reader, &sub_reader,
|
||||
size - header_size);
|
||||
if (!gst_isoff_tkhd_box_parse (&trak->tkhd, &sub_reader))
|
||||
return FALSE;
|
||||
|
||||
had_tkhd = TRUE;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
gst_byte_reader_skip (reader, size - header_size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!had_tkhd || !had_mdia)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
GstMoovBox *
|
||||
gst_isoff_moov_box_parse (GstByteReader * reader)
|
||||
{
|
||||
GstMoovBox *moov;
|
||||
gboolean had_trak = FALSE;
|
||||
moov = g_new0 (GstMoovBox, 1);
|
||||
moov->trak = g_array_new (FALSE, FALSE, sizeof (GstTrakBox));
|
||||
|
||||
while (gst_byte_reader_get_remaining (reader) > 0) {
|
||||
guint32 fourcc;
|
||||
guint header_size;
|
||||
guint64 size;
|
||||
|
||||
if (!gst_isoff_parse_box_header (reader, &fourcc, NULL, &header_size,
|
||||
&size))
|
||||
goto error;
|
||||
if (gst_byte_reader_get_remaining (reader) < size - header_size)
|
||||
goto error;
|
||||
|
||||
switch (fourcc) {
|
||||
case GST_ISOFF_FOURCC_TRAK:{
|
||||
GstByteReader sub_reader;
|
||||
GstTrakBox trak;
|
||||
|
||||
gst_byte_reader_get_sub_reader (reader, &sub_reader,
|
||||
size - header_size);
|
||||
if (!gst_isoff_trak_box_parse (&trak, &sub_reader))
|
||||
goto error;
|
||||
|
||||
had_trak = TRUE;
|
||||
g_array_append_val (moov->trak, trak);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
gst_byte_reader_skip (reader, size - header_size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!had_trak)
|
||||
goto error;
|
||||
|
||||
return moov;
|
||||
|
||||
error:
|
||||
gst_isoff_moov_box_free (moov);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
gst_isoff_moov_box_free (GstMoovBox * moov)
|
||||
{
|
||||
g_array_free (moov->trak, TRUE);
|
||||
g_free (moov);
|
||||
}
|
||||
|
||||
void
|
||||
gst_isoff_sidx_parser_init (GstSidxParser * parser)
|
||||
{
|
||||
|
|
|
@ -45,9 +45,20 @@ gboolean gst_isoff_parse_box_header (GstByteReader * reader, guint32 * type, gui
|
|||
#define GST_ISOFF_FOURCC_TFHD GST_MAKE_FOURCC('t','f','h','d')
|
||||
#define GST_ISOFF_FOURCC_TRUN GST_MAKE_FOURCC('t','r','u','n')
|
||||
#define GST_ISOFF_FOURCC_TRAF GST_MAKE_FOURCC('t','r','a','f')
|
||||
#define GST_ISOFF_FOURCC_TFDT GST_MAKE_FOURCC('t','f','d','t')
|
||||
#define GST_ISOFF_FOURCC_MDAT GST_MAKE_FOURCC('m','d','a','t')
|
||||
#define GST_ISOFF_FOURCC_MOOV GST_MAKE_FOURCC('m','o','o','v')
|
||||
#define GST_ISOFF_FOURCC_TRAK GST_MAKE_FOURCC('t','r','a','k')
|
||||
#define GST_ISOFF_FOURCC_TKHD GST_MAKE_FOURCC('t','k','h','d')
|
||||
#define GST_ISOFF_FOURCC_MDIA GST_MAKE_FOURCC('m','d','i','a')
|
||||
#define GST_ISOFF_FOURCC_MDHD GST_MAKE_FOURCC('m','d','h','d')
|
||||
#define GST_ISOFF_FOURCC_HDLR GST_MAKE_FOURCC('h','d','l','r')
|
||||
#define GST_ISOFF_FOURCC_SIDX GST_MAKE_FOURCC('s','i','d','x')
|
||||
|
||||
/* handler type */
|
||||
#define GST_ISOFF_FOURCC_SOUN GST_MAKE_FOURCC('s','o','u','n')
|
||||
#define GST_ISOFF_FOURCC_VIDE GST_MAKE_FOURCC('v','i','d','e')
|
||||
|
||||
#define GST_ISOFF_SAMPLE_FLAGS_IS_LEADING(flags) (((flags) >> 26) & 0x03)
|
||||
#define GST_ISOFF_SAMPLE_FLAGS_SAMPLE_DEPENDS_ON(flags) (((flags) >> 24) & 0x03)
|
||||
#define GST_ISOFF_SAMPLE_FLAGS_SAMPLE_IS_DEPENDED_ON(flags) (((flags) >> 22) & 0x03)
|
||||
|
@ -122,9 +133,15 @@ typedef struct _GstTrunSample
|
|||
} sample_composition_time_offset;
|
||||
} GstTrunSample;
|
||||
|
||||
typedef struct _GstTdftBox
|
||||
{
|
||||
guint64 decode_time;
|
||||
} GstTfdtBox;
|
||||
|
||||
typedef struct _GstTrafBox
|
||||
{
|
||||
GstTfhdBox tfhd;
|
||||
GstTfdtBox tfdt;
|
||||
GArray *trun;
|
||||
} GstTrafBox;
|
||||
|
||||
|
@ -137,6 +154,41 @@ typedef struct _GstMoofBox
|
|||
GstMoofBox * gst_isoff_moof_box_parse (GstByteReader *reader);
|
||||
void gst_isoff_moof_box_free (GstMoofBox *moof);
|
||||
|
||||
typedef struct _GstTkhdBox
|
||||
{
|
||||
guint32 track_id;
|
||||
} GstTkhdBox;
|
||||
|
||||
typedef struct _GstMdhdBox
|
||||
{
|
||||
guint32 timescale;
|
||||
} GstMdhdBox;
|
||||
|
||||
typedef struct _GstHdlrBox
|
||||
{
|
||||
guint32 handler_type;
|
||||
} GstHdlrBox;
|
||||
|
||||
typedef struct _GstMdiaBox
|
||||
{
|
||||
GstMdhdBox mdhd;
|
||||
GstHdlrBox hdlr;
|
||||
} GstMdiaBox;
|
||||
|
||||
typedef struct _GstTrakBox
|
||||
{
|
||||
GstTkhdBox tkhd;
|
||||
GstMdiaBox mdia;
|
||||
} GstTrakBox;
|
||||
|
||||
typedef struct _GstMoovBox
|
||||
{
|
||||
GArray *trak;
|
||||
} GstMoovBox;
|
||||
|
||||
GstMoovBox * gst_isoff_moov_box_parse (GstByteReader *reader);
|
||||
void gst_isoff_moov_box_free (GstMoovBox *moov);
|
||||
|
||||
typedef struct _GstSidxBoxEntry
|
||||
{
|
||||
gboolean ref_type;
|
||||
|
|
|
@ -180,12 +180,110 @@ GST_START_TEST (isoff_moof_parse)
|
|||
|
||||
GST_END_TEST;
|
||||
|
||||
GST_START_TEST (isoff_moof_parse_with_tfdt)
|
||||
{
|
||||
/* INDENT-ON */
|
||||
GstByteReader reader = GST_BYTE_READER_INIT (seg_2_m4f, sizeof (seg_2_m4f));
|
||||
guint32 type;
|
||||
guint8 extended_type[16];
|
||||
guint header_size;
|
||||
guint64 size;
|
||||
GstMoofBox *moof;
|
||||
GstTrafBox *traf;
|
||||
GstTrunBox *trun;
|
||||
guint i;
|
||||
|
||||
fail_unless (gst_isoff_parse_box_header (&reader, &type, extended_type,
|
||||
&header_size, &size));
|
||||
fail_unless (type == GST_ISOFF_FOURCC_MOOF);
|
||||
fail_unless_equals_int (header_size, 8);
|
||||
fail_unless_equals_uint64 (size, seg_2_m4f_len);
|
||||
|
||||
moof = gst_isoff_moof_box_parse (&reader);
|
||||
fail_unless (moof != NULL);
|
||||
|
||||
fail_unless_equals_int (moof->mfhd.sequence_number, 4);
|
||||
fail_unless_equals_int (moof->traf->len, 1);
|
||||
|
||||
traf = &g_array_index (moof->traf, GstTrafBox, 0);
|
||||
fail_unless_equals_int (traf->tfhd.version, 0);
|
||||
fail_unless_equals_int (traf->tfhd.flags,
|
||||
GST_TFHD_FLAGS_DEFAULT_BASE_IS_MOOF);
|
||||
fail_unless_equals_int (traf->tfhd.track_id, 2);
|
||||
fail_unless_equals_uint64 (traf->tfhd.base_data_offset, 0);
|
||||
fail_unless_equals_int (traf->tfhd.sample_description_index, 0);
|
||||
fail_unless_equals_int (traf->tfhd.default_sample_duration, 0);
|
||||
fail_unless_equals_int (traf->tfhd.default_sample_size, 0);
|
||||
fail_unless_equals_int (traf->tfhd.default_sample_flags, 0);
|
||||
|
||||
fail_unless_equals_uint64 (traf->tfdt.decode_time, 132096);
|
||||
|
||||
fail_unless_equals_int (traf->trun->len, 1);
|
||||
trun = &g_array_index (traf->trun, GstTrunBox, 0);
|
||||
|
||||
fail_unless_equals_int (trun->version, 0);
|
||||
fail_unless_equals_int (trun->flags,
|
||||
GST_TRUN_FLAGS_SAMPLE_SIZE_PRESENT |
|
||||
GST_TRUN_FLAGS_SAMPLE_DURATION_PRESENT |
|
||||
GST_TRUN_FLAGS_DATA_OFFSET_PRESENT);
|
||||
fail_unless_equals_int (trun->sample_count, 129);
|
||||
fail_unless_equals_int (trun->data_offset, size + header_size);
|
||||
fail_unless_equals_int (trun->first_sample_flags, 0);
|
||||
|
||||
fail_unless_equals_int (trun->samples->len, 129);
|
||||
|
||||
for (i = 0; i < 129; i++) {
|
||||
GstTrunSample *sample = &g_array_index (trun->samples, GstTrunSample, i);
|
||||
|
||||
fail_unless_equals_int (sample->sample_duration, seg_sample_duration);
|
||||
fail_unless_equals_int (sample->sample_flags, 0x00000000);
|
||||
fail_unless_equals_int (sample->sample_size, seg_2_sample_sizes[i]);
|
||||
}
|
||||
|
||||
gst_isoff_moof_box_free (moof);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
GST_START_TEST (isoff_moov_parse)
|
||||
{
|
||||
/* INDENT-ON */
|
||||
GstByteReader reader = GST_BYTE_READER_INIT (init_mp4, sizeof (init_mp4));
|
||||
guint32 type;
|
||||
guint8 extended_type[16];
|
||||
guint header_size;
|
||||
guint64 size;
|
||||
GstMoovBox *moov;
|
||||
GstTrakBox *trak;
|
||||
|
||||
fail_unless (gst_isoff_parse_box_header (&reader, &type, extended_type,
|
||||
&header_size, &size));
|
||||
fail_unless (type == GST_ISOFF_FOURCC_MOOV);
|
||||
fail_unless_equals_int (header_size, 8);
|
||||
fail_unless_equals_uint64 (size, sizeof (init_mp4));
|
||||
|
||||
moov = gst_isoff_moov_box_parse (&reader);
|
||||
fail_unless (moov != NULL);
|
||||
|
||||
fail_unless_equals_int (moov->trak->len, 1);
|
||||
|
||||
trak = &g_array_index (moov->trak, GstTrakBox, 0);
|
||||
fail_unless_equals_int (trak->tkhd.track_id, 2);
|
||||
fail_unless (trak->mdia.hdlr.handler_type, GST_ISOFF_FOURCC_SOUN);
|
||||
fail_unless_equals_int (trak->mdia.mdhd.timescale, seg_timescale);
|
||||
|
||||
gst_isoff_moov_box_free (moov);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
static Suite *
|
||||
dash_isoff_suite (void)
|
||||
{
|
||||
Suite *s = suite_create ("isoff");
|
||||
TCase *tc_isoff_box = tcase_create ("isoff-box-parsing");
|
||||
TCase *tc_moof = tcase_create ("moof");
|
||||
TCase *tc_moov = tcase_create ("moov");
|
||||
|
||||
tcase_add_test (tc_isoff_box, isoff_box_header_minimal);
|
||||
tcase_add_test (tc_isoff_box, isoff_box_header_long_size);
|
||||
|
@ -194,10 +292,13 @@ dash_isoff_suite (void)
|
|||
|
||||
suite_add_tcase (s, tc_isoff_box);
|
||||
|
||||
|
||||
tcase_add_test (tc_moof, isoff_moof_parse);
|
||||
tcase_add_test (tc_moof, isoff_moof_parse_with_tfdt);
|
||||
suite_add_tcase (s, tc_moof);
|
||||
|
||||
tcase_add_test (tc_moov, isoff_moov_parse);
|
||||
suite_add_tcase (s, tc_moov);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
|
|
@ -110,4 +110,290 @@ static const guint8 moof1[] = {
|
|||
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
/* Fragments taken from http://www.bok.net/dash/tears_of_steel/cleartext/stream.mpd
|
||||
*
|
||||
* Audio stream (aac)
|
||||
* Header (moov only) + first fragment (moof only) + second fragment (moof only)
|
||||
*/
|
||||
|
||||
/* http://www.bok.net/dash/tears_of_steel/cleartext/audio/en/init.mp4 (except for ftyp box) */
|
||||
static const guint8 init_mp4[] = {
|
||||
0x00, 0x00, 0x02, 0x50, 0x6d, 0x6f, 0x6f, 0x76, 0x00, 0x00, 0x00, 0x6c,
|
||||
0x6d, 0x76, 0x68, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe8, 0x00, 0x0b, 0x33, 0xd7,
|
||||
0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0xa4,
|
||||
0x74, 0x72, 0x61, 0x6b, 0x00, 0x00, 0x00, 0x5c, 0x74, 0x6b, 0x68, 0x64,
|
||||
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x33, 0xbc,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x01, 0x40, 0x6d, 0x64, 0x69, 0x61, 0x00, 0x00, 0x00, 0x20,
|
||||
0x6d, 0x64, 0x68, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0x44, 0x00, 0x00, 0x00, 0x00,
|
||||
0x15, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x68, 0x64, 0x6c, 0x72,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x6f, 0x75, 0x6e,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x42, 0x65, 0x6e, 0x74, 0x6f, 0x34, 0x20, 0x53, 0x6f, 0x75, 0x6e, 0x64,
|
||||
0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00,
|
||||
0xe3, 0x6d, 0x69, 0x6e, 0x66, 0x00, 0x00, 0x00, 0x10, 0x73, 0x6d, 0x68,
|
||||
0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x24, 0x64, 0x69, 0x6e, 0x66, 0x00, 0x00, 0x00, 0x1c, 0x64, 0x72, 0x65,
|
||||
0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x0c, 0x75, 0x72, 0x6c, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0xa7, 0x73, 0x74, 0x62, 0x6c, 0x00, 0x00, 0x00, 0x5b, 0x73, 0x74, 0x73,
|
||||
0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
||||
0x4b, 0x6d, 0x70, 0x34, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
|
||||
0x10, 0x00, 0x00, 0x00, 0x00, 0xac, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x27, 0x65, 0x73, 0x64, 0x73, 0x00, 0x00, 0x00, 0x00, 0x03, 0x19, 0x00,
|
||||
0x00, 0x00, 0x04, 0x11, 0x40, 0x15, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf4,
|
||||
0x01, 0x00, 0x01, 0xf4, 0x01, 0x05, 0x02, 0x12, 0x10, 0x06, 0x01, 0x02,
|
||||
0x00, 0x00, 0x00, 0x14, 0x73, 0x74, 0x73, 0x7a, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
|
||||
0x73, 0x74, 0x73, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x10, 0x73, 0x74, 0x74, 0x73, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x73, 0x74, 0x63, 0x6f,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
|
||||
0x6d, 0x76, 0x65, 0x78, 0x00, 0x00, 0x00, 0x10, 0x6d, 0x65, 0x68, 0x64,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x33, 0xd7, 0x00, 0x00, 0x00, 0x20,
|
||||
0x74, 0x72, 0x65, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
|
||||
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
/* http://www.bok.net/dash/tears_of_steel/cleartext/audio/en/seg-1.m4f (except for mdat box) */
|
||||
static const guint8 seg_1_m4f[] = {
|
||||
0x00, 0x00, 0x04, 0x60, 0x6d, 0x6f, 0x6f, 0x66, 0x00, 0x00, 0x00, 0x10,
|
||||
0x6d, 0x66, 0x68, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
|
||||
0x00, 0x00, 0x04, 0x48, 0x74, 0x72, 0x61, 0x66, 0x00, 0x00, 0x00, 0x10,
|
||||
0x74, 0x66, 0x68, 0x64, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
|
||||
0x00, 0x00, 0x00, 0x14, 0x74, 0x66, 0x64, 0x74, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x1c,
|
||||
0x74, 0x72, 0x75, 0x6e, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x81,
|
||||
0x00, 0x00, 0x04, 0x68, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x73,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xdd, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x12,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xe9, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xce, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xb9,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xa5, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xa4, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x9a,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x92, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x8e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x7d,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x7d, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x82,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x71, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x72, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6a,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x5a, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x65, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x63,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x78, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x55,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x5e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6a,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x9f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x82,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x82,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x94,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x56, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x69, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6e,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x69, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x5e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x86,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x67,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x65, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x68, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x5d,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x64, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x89,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x81, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x7d,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x9e,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x71, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x91,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x87, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x4d, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x53,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xa7, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x57, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xbd,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xa9, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xa6, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x9f,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x96, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x85, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x8b,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x64, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xba,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xb0, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x87, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x81,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x53, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x25,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x35,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x85, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x67, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xab,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xa4, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x97,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xa3,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x5d, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x83, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x46,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x6f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x58,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xa9, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x7b,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x93, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x3a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x8d,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x70, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x85, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x7c,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x75, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x56, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x57,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x70, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xb4, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x67,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x69, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6e,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x5e, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xa3, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4b,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x91, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x7e,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x46, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x9b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6c,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x52, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x59
|
||||
};
|
||||
static const guint seg_1_m4f_len = 1120;
|
||||
|
||||
static const guint seg_1_sample_sizes[] = {
|
||||
371, 372, 477, 530, 489, 462, 441, 421, 420, 410, 402, 398, 381, 381, 386,
|
||||
386, 369, 370, 362, 346, 357, 355, 376, 336, 341, 358, 350, 362, 333, 415,
|
||||
386, 364, 344, 386, 358, 365, 404, 342, 361, 366, 361, 350, 390, 348, 366,
|
||||
359, 357, 360, 349, 356, 365, 393, 353, 385, 381, 348, 345, 414, 372, 369,
|
||||
401, 391, 333, 339, 423, 343, 445, 425, 422, 415, 406, 389, 395, 375, 356,
|
||||
442, 432, 391, 385, 339, 277, 293, 316, 327, 309, 389, 359, 427, 326, 420,
|
||||
407, 316, 362, 419, 349, 387, 326, 328, 367, 344, 425, 329, 379, 403, 314,
|
||||
397, 368, 389, 380, 373, 342, 343, 368, 436, 359, 352, 361, 366, 350, 419,
|
||||
331, 426, 401, 382, 326, 411, 364, 338, 345
|
||||
};
|
||||
|
||||
/* http://www.bok.net/dash/tears_of_steel/cleartext/audio/en/seg-2.m4f (except for mdat box) */
|
||||
static const guint8 seg_2_m4f[] = {
|
||||
0x00, 0x00, 0x04, 0x60, 0x6d, 0x6f, 0x6f, 0x66, 0x00, 0x00, 0x00, 0x10,
|
||||
0x6d, 0x66, 0x68, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
|
||||
0x00, 0x00, 0x04, 0x48, 0x74, 0x72, 0x61, 0x66, 0x00, 0x00, 0x00, 0x10,
|
||||
0x74, 0x66, 0x68, 0x64, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
|
||||
0x00, 0x00, 0x00, 0x14, 0x74, 0x66, 0x64, 0x74, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x04, 0x1c,
|
||||
0x74, 0x72, 0x75, 0x6e, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x81,
|
||||
0x00, 0x00, 0x04, 0x68, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x45,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x65, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x79, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x90,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x6b, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x98,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x75, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xa8,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x47, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x5f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x54,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xaf, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x60,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x66, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x59,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x98, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x72,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x62, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x65, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6c,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x64, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xa0, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x7e,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x70,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x5e, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xab,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x74, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x7c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6c,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x64,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x62, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x5f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x63,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6b, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6b,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x67, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x64, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6f,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6d, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x71,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6f, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x70,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x82,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x77, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x76, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x76,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xc8, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x64,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xbc, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xad, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xa6,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xa5, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x9a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x95,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x89, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x75, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x8e,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x51, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x3c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x66,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x3b, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x45,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x5e, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x5d, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x65,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6e, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x8c,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x59, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x51, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6c,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x5f, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xdd, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x6c,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x92, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xbc, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x59,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x97, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xa5, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0xa2,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x89, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x91, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x60,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x7c, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x35, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x48,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x58, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x89, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x7b,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x87, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xb1, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x8a,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x51, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x75,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x73, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x95, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x89,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4d, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x79,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x8a, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x49, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x78,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x94, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0xa2, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x86,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x5d,
|
||||
0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x04, 0x00,
|
||||
0x00, 0x00, 0x01, 0x59
|
||||
};
|
||||
static const guint seg_2_m4f_len = 1120;
|
||||
|
||||
static const guint seg_2_sample_sizes[] = {
|
||||
325, 357, 377, 400, 344, 363, 408, 373, 386, 424, 327, 351, 340, 362, 431,
|
||||
352, 362, 358, 345, 408, 375, 370, 354, 357, 364, 356, 416, 382, 362, 366,
|
||||
368, 350, 375, 427, 372, 380, 364, 353, 362, 356, 354, 351, 355, 363, 365,
|
||||
363, 359, 356, 367, 365, 375, 369, 367, 366, 368, 364, 364, 386, 375, 374,
|
||||
374, 364, 456, 356, 444, 429, 422, 421, 410, 405, 393, 373, 398, 337, 316,
|
||||
358, 315, 336, 325, 350, 349, 357, 366, 352, 396, 345, 337, 364, 351, 477,
|
||||
364, 402, 444, 345, 407, 421, 418, 393, 401, 352, 380, 309, 328, 344, 393,
|
||||
379, 391, 433, 394, 333, 337, 373, 371, 405, 393, 333, 328, 377, 394, 329,
|
||||
376, 404, 418, 390, 335, 335, 349, 352, 345
|
||||
};
|
||||
|
||||
/* in timescale */
|
||||
static const GstClockTime seg_sample_duration = 1024;
|
||||
static const guint32 seg_timescale = 44100;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
EXPORTS
|
||||
gst_isoff_moof_box_free
|
||||
gst_isoff_moof_box_parse
|
||||
gst_isoff_moov_box_free
|
||||
gst_isoff_moov_box_parse
|
||||
gst_isoff_parse_box_header
|
||||
gst_isoff_sidx_parser_add_buffer
|
||||
gst_isoff_sidx_parser_clear
|
||||
|
|
Loading…
Reference in a new issue