mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 04:31:06 +00:00
oggdemux: Ensure that no pad values are set when setting up the mapper
Otherwise we might have arbitrary values set that are used later and can cause undefined behaviour, as found by ossfuzz.
This commit is contained in:
parent
c1cf04f67f
commit
6024b8e46b
1 changed files with 98 additions and 44 deletions
|
@ -424,6 +424,12 @@ setup_theora_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
|
|
||||||
pad->granulerate_n = GST_READ_UINT32_BE (data + 22);
|
pad->granulerate_n = GST_READ_UINT32_BE (data + 22);
|
||||||
pad->granulerate_d = GST_READ_UINT32_BE (data + 26);
|
pad->granulerate_d = GST_READ_UINT32_BE (data + 26);
|
||||||
|
if (pad->granulerate_n == 0 || pad->granulerate_d == 0) {
|
||||||
|
GST_WARNING ("frame rate %d/%d", pad->granulerate_n, pad->granulerate_d);
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
par_n = GST_READ_UINT24_BE (data + 30);
|
par_n = GST_READ_UINT24_BE (data + 30);
|
||||||
par_d = GST_READ_UINT24_BE (data + 33);
|
par_d = GST_READ_UINT24_BE (data + 33);
|
||||||
|
@ -437,6 +443,9 @@ setup_theora_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
if (pad->granuleshift >= 63) {
|
if (pad->granuleshift >= 63) {
|
||||||
/* Granuleshift can't be greater than the storage size of a granule */
|
/* Granuleshift can't be greater than the storage size of a granule */
|
||||||
GST_WARNING ("Invalid granuleshift (%u >= 63)", pad->granuleshift);
|
GST_WARNING ("Invalid granuleshift (%u >= 63)", pad->granuleshift);
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
pad->granuleshift = -1;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
GST_LOG ("granshift: %d", pad->granuleshift);
|
GST_LOG ("granshift: %d", pad->granuleshift);
|
||||||
|
@ -448,11 +457,6 @@ setup_theora_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
pad->bitrate = GST_READ_UINT24_BE (data + 37);
|
pad->bitrate = GST_READ_UINT24_BE (data + 37);
|
||||||
GST_LOG ("bit rate: %d", pad->bitrate);
|
GST_LOG ("bit rate: %d", pad->bitrate);
|
||||||
|
|
||||||
if (pad->granulerate_n == 0 || pad->granulerate_d == 0) {
|
|
||||||
GST_WARNING ("frame rate %d/%d", pad->granulerate_n, pad->granulerate_d);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The interpretation of the granule position has changed with 3.2.1.
|
/* The interpretation of the granule position has changed with 3.2.1.
|
||||||
The granule is now made from the number of frames encoded, rather than
|
The granule is now made from the number of frames encoded, rather than
|
||||||
the index of the frame being encoded - so there is a difference of 1. */
|
the index of the frame being encoded - so there is a difference of 1. */
|
||||||
|
@ -556,6 +560,11 @@ setup_dirac_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (header.interlaced_coding != 0) {
|
||||||
|
GST_DEBUG ("non-progressive Dirac coding not implemented");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
pad->is_video = TRUE;
|
pad->is_video = TRUE;
|
||||||
pad->always_flush_page = TRUE;
|
pad->always_flush_page = TRUE;
|
||||||
pad->granulerate_n = header.frame_rate_numerator * 2;
|
pad->granulerate_n = header.frame_rate_numerator * 2;
|
||||||
|
@ -564,11 +573,6 @@ setup_dirac_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
pad->n_header_packets = 1;
|
pad->n_header_packets = 1;
|
||||||
pad->frame_size = 2;
|
pad->frame_size = 2;
|
||||||
|
|
||||||
if (header.interlaced_coding != 0) {
|
|
||||||
GST_DEBUG ("non-progressive Dirac coding not implemented");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
pad->caps = gst_caps_new_simple ("video/x-dirac",
|
pad->caps = gst_caps_new_simple ("video/x-dirac",
|
||||||
"width", G_TYPE_INT, header.width,
|
"width", G_TYPE_INT, header.width,
|
||||||
"height", G_TYPE_INT, header.height,
|
"height", G_TYPE_INT, header.height,
|
||||||
|
@ -861,8 +865,15 @@ setup_vorbis_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
data += 4;
|
data += 4;
|
||||||
chans = GST_READ_UINT8 (data);
|
chans = GST_READ_UINT8 (data);
|
||||||
data += 1;
|
data += 1;
|
||||||
|
|
||||||
pad->granulerate_n = GST_READ_UINT32_LE (data);
|
pad->granulerate_n = GST_READ_UINT32_LE (data);
|
||||||
pad->granulerate_d = 1;
|
pad->granulerate_d = 1;
|
||||||
|
if (pad->granulerate_n == 0) {
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
pad->granuleshift = 0;
|
pad->granuleshift = 0;
|
||||||
pad->preroll = 2;
|
pad->preroll = 2;
|
||||||
pad->last_size = 0;
|
pad->last_size = 0;
|
||||||
|
@ -888,9 +899,6 @@ setup_vorbis_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
|
|
||||||
pad->n_header_packets = 3;
|
pad->n_header_packets = 3;
|
||||||
|
|
||||||
if (pad->granulerate_n == 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
gst_parse_vorbis_header_packet (pad, packet);
|
gst_parse_vorbis_header_packet (pad, packet);
|
||||||
|
|
||||||
pad->caps = gst_caps_new_simple ("audio/x-vorbis",
|
pad->caps = gst_caps_new_simple ("audio/x-vorbis",
|
||||||
|
@ -983,8 +991,15 @@ setup_speex_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
guint chans;
|
guint chans;
|
||||||
|
|
||||||
data += 8 + 20 + 4 + 4;
|
data += 8 + 20 + 4 + 4;
|
||||||
|
|
||||||
pad->granulerate_n = GST_READ_UINT32_LE (data);
|
pad->granulerate_n = GST_READ_UINT32_LE (data);
|
||||||
pad->granulerate_d = 1;
|
pad->granulerate_d = 1;
|
||||||
|
if (pad->granulerate_n == 0) {
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
pad->granuleshift = 0;
|
pad->granuleshift = 0;
|
||||||
|
|
||||||
data += 4 + 4 + 4;
|
data += 4 + 4 + 4;
|
||||||
|
@ -999,9 +1014,6 @@ setup_speex_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
pad->frame_size = GST_READ_UINT32_LE (packet->packet + 64) *
|
pad->frame_size = GST_READ_UINT32_LE (packet->packet + 64) *
|
||||||
GST_READ_UINT32_LE (packet->packet + 56);
|
GST_READ_UINT32_LE (packet->packet + 56);
|
||||||
|
|
||||||
if (pad->granulerate_n == 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
pad->caps = gst_caps_new_simple ("audio/x-speex", "rate", G_TYPE_INT,
|
pad->caps = gst_caps_new_simple ("audio/x-speex", "rate", G_TYPE_INT,
|
||||||
pad->granulerate_n, "channels", G_TYPE_INT, chans, NULL);
|
pad->granulerate_n, "channels", G_TYPE_INT, chans, NULL);
|
||||||
|
|
||||||
|
@ -1079,6 +1091,13 @@ setup_flac_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
|
|
||||||
pad->granulerate_n = (GST_READ_UINT32_BE (data + 27) & 0xFFFFF000) >> 12;
|
pad->granulerate_n = (GST_READ_UINT32_BE (data + 27) & 0xFFFFF000) >> 12;
|
||||||
pad->granulerate_d = 1;
|
pad->granulerate_d = 1;
|
||||||
|
|
||||||
|
if (pad->granulerate_n == 0) {
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
pad->granuleshift = 0;
|
pad->granuleshift = 0;
|
||||||
chans = ((GST_READ_UINT32_BE (data + 27) & 0x00000E00) >> 9) + 1;
|
chans = ((GST_READ_UINT32_BE (data + 27) & 0x00000E00) >> 9) + 1;
|
||||||
|
|
||||||
|
@ -1086,9 +1105,6 @@ setup_flac_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
|
|
||||||
pad->n_header_packets = GST_READ_UINT16_BE (packet->packet + 7);
|
pad->n_header_packets = GST_READ_UINT16_BE (packet->packet + 7);
|
||||||
|
|
||||||
if (pad->granulerate_n == 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
pad->caps = gst_caps_new_simple ("audio/x-flac", "rate", G_TYPE_INT,
|
pad->caps = gst_caps_new_simple ("audio/x-flac", "rate", G_TYPE_INT,
|
||||||
pad->granulerate_n, "channels", G_TYPE_INT, chans, NULL);
|
pad->granulerate_n, "channels", G_TYPE_INT, chans, NULL);
|
||||||
|
|
||||||
|
@ -1325,8 +1341,6 @@ gst_ogg_map_add_fisbone (GstOggStream * pad, GstOggStream * skel_pad,
|
||||||
/* skip "fisbone\0" + headers offset + serialno + num headers */
|
/* skip "fisbone\0" + headers offset + serialno + num headers */
|
||||||
data += 8 + 4 + 4 + 4;
|
data += 8 + 4 + 4 + 4;
|
||||||
|
|
||||||
pad->have_fisbone = TRUE;
|
|
||||||
|
|
||||||
/* We don't overwrite whatever was set before by the format-specific
|
/* We don't overwrite whatever was set before by the format-specific
|
||||||
setup: skeleton contains wrong information sometimes, and the codec
|
setup: skeleton contains wrong information sometimes, and the codec
|
||||||
headers are authoritative.
|
headers are authoritative.
|
||||||
|
@ -1343,10 +1357,15 @@ gst_ogg_map_add_fisbone (GstOggStream * pad, GstOggStream * skel_pad,
|
||||||
if (pad->granuleshift >= 63) {
|
if (pad->granuleshift >= 63) {
|
||||||
/* Granuleshift can't be greater than the storage size of a granule */
|
/* Granuleshift can't be greater than the storage size of a granule */
|
||||||
GST_WARNING ("Invalid granuleshift (%u >= 63)", pad->granuleshift);
|
GST_WARNING ("Invalid granuleshift (%u >= 63)", pad->granuleshift);
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
pad->granuleshift = -1;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pad->have_fisbone = TRUE;
|
||||||
|
|
||||||
start_granule = GST_READ_UINT64_LE (data + 16);
|
start_granule = GST_READ_UINT64_LE (data + 16);
|
||||||
pad->preroll = GST_READ_UINT32_LE (data + 24);
|
pad->preroll = GST_READ_UINT32_LE (data + 24);
|
||||||
|
|
||||||
|
@ -1618,6 +1637,13 @@ setup_ogmaudio_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
pad->granulerate_n = GST_READ_UINT64_LE (data + 25);
|
pad->granulerate_n = GST_READ_UINT64_LE (data + 25);
|
||||||
pad->granulerate_d = 1;
|
pad->granulerate_d = 1;
|
||||||
|
|
||||||
|
GST_LOG ("sample rate: %d", pad->granulerate_n);
|
||||||
|
if (pad->granulerate_n == 0) {
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
fourcc = GST_READ_UINT32_LE (data + 9);
|
fourcc = GST_READ_UINT32_LE (data + 9);
|
||||||
fstr = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
|
fstr = g_strdup_printf ("%" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (fourcc));
|
||||||
GST_DEBUG ("fourcc: %s", fstr);
|
GST_DEBUG ("fourcc: %s", fstr);
|
||||||
|
@ -1626,10 +1652,6 @@ setup_ogmaudio_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
pad->caps =
|
pad->caps =
|
||||||
gst_riff_create_audio_caps (fourcc, NULL, NULL, NULL, NULL, NULL, NULL);
|
gst_riff_create_audio_caps (fourcc, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||||
|
|
||||||
GST_LOG ("sample rate: %d", pad->granulerate_n);
|
|
||||||
if (pad->granulerate_n == 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (pad->caps) {
|
if (pad->caps) {
|
||||||
gst_caps_set_simple (pad->caps,
|
gst_caps_set_simple (pad->caps,
|
||||||
"rate", G_TYPE_INT, pad->granulerate_n, NULL);
|
"rate", G_TYPE_INT, pad->granulerate_n, NULL);
|
||||||
|
@ -1716,8 +1738,11 @@ setup_ogmtext_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
pad->granulerate_n, pad->granulerate_d,
|
pad->granulerate_n, pad->granulerate_d,
|
||||||
(double) pad->granulerate_n / pad->granulerate_d);
|
(double) pad->granulerate_n / pad->granulerate_d);
|
||||||
|
|
||||||
if (pad->granulerate_d <= 0)
|
if (pad->granulerate_d <= 0) {
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
pad->caps = gst_caps_new_simple ("text/x-raw", "format", G_TYPE_STRING,
|
pad->caps = gst_caps_new_simple ("text/x-raw", "format", G_TYPE_STRING,
|
||||||
"utf8", NULL);
|
"utf8", NULL);
|
||||||
|
@ -1762,14 +1787,14 @@ setup_pcm_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
pad->granulerate_d = 1;
|
pad->granulerate_d = 1;
|
||||||
GST_LOG ("sample rate: %d", pad->granulerate_n);
|
GST_LOG ("sample rate: %d", pad->granulerate_n);
|
||||||
|
|
||||||
|
if (pad->granulerate_n == 0) {
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
format = GST_READ_UINT32_LE (data + 12);
|
format = GST_READ_UINT32_LE (data + 12);
|
||||||
channels = GST_READ_UINT8 (data + 21);
|
channels = GST_READ_UINT8 (data + 21);
|
||||||
|
|
||||||
pad->n_header_packets = 2 + GST_READ_UINT32_LE (data + 24);
|
|
||||||
|
|
||||||
if (pad->granulerate_n == 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case OGGPCM_FMT_S8:
|
case OGGPCM_FMT_S8:
|
||||||
caps = gst_caps_new_simple ("audio/x-raw",
|
caps = gst_caps_new_simple ("audio/x-raw",
|
||||||
|
@ -1826,9 +1851,13 @@ setup_pcm_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
"format", G_TYPE_STRING, "F64BE", NULL);
|
"format", G_TYPE_STRING, "F64BE", NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pad->n_header_packets = 2 + GST_READ_UINT32_LE (data + 24);
|
||||||
|
|
||||||
gst_caps_set_simple (caps,
|
gst_caps_set_simple (caps,
|
||||||
"layout", G_TYPE_STRING, "interleaved",
|
"layout", G_TYPE_STRING, "interleaved",
|
||||||
"rate", G_TYPE_INT, pad->granulerate_n,
|
"rate", G_TYPE_INT, pad->granulerate_n,
|
||||||
|
@ -1848,17 +1877,25 @@ setup_cmml_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
pad->granulerate_n = GST_READ_UINT64_LE (data + 12);
|
pad->granulerate_n = GST_READ_UINT64_LE (data + 12);
|
||||||
pad->granulerate_d = GST_READ_UINT64_LE (data + 20);
|
pad->granulerate_d = GST_READ_UINT64_LE (data + 20);
|
||||||
pad->granuleshift = data[28];
|
pad->granuleshift = data[28];
|
||||||
|
|
||||||
if (pad->granuleshift >= 63) {
|
if (pad->granuleshift >= 63) {
|
||||||
/* Granuleshift can't be greater than the storage size of a granule */
|
/* Granuleshift can't be greater than the storage size of a granule */
|
||||||
GST_WARNING ("Invalid granuleshift (%u >= 63)", pad->granuleshift);
|
GST_WARNING ("Invalid granuleshift (%u >= 63)", pad->granuleshift);
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
pad->granuleshift = -1;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
GST_LOG ("sample rate: %d", pad->granulerate_n);
|
GST_LOG ("sample rate: %d", pad->granulerate_n);
|
||||||
|
|
||||||
pad->n_header_packets = 3;
|
if (pad->granulerate_n == 0) {
|
||||||
|
pad->granulerate_n = 0;
|
||||||
if (pad->granulerate_n == 0)
|
pad->granulerate_d = 0;
|
||||||
|
pad->granuleshift = -1;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
pad->n_header_packets = 3;
|
||||||
|
|
||||||
data += 4 + (4 + 4 + 4);
|
data += 4 + (4 + 4 + 4);
|
||||||
GST_DEBUG ("blocksize0: %u", 1 << (data[0] >> 4));
|
GST_DEBUG ("blocksize0: %u", 1 << (data[0] >> 4));
|
||||||
|
@ -1887,8 +1924,12 @@ setup_celt_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
pad->frame_size = GST_READ_UINT32_LE (packet->packet + 44);
|
pad->frame_size = GST_READ_UINT32_LE (packet->packet + 44);
|
||||||
pad->n_header_packets = GST_READ_UINT32_LE (packet->packet + 56) + 2;
|
pad->n_header_packets = GST_READ_UINT32_LE (packet->packet + 56) + 2;
|
||||||
|
|
||||||
if (pad->granulerate_n == 0)
|
if (pad->granulerate_n == 0) {
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
pad->granuleshift = -1;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
pad->caps = gst_caps_new_simple ("audio/x-celt",
|
pad->caps = gst_caps_new_simple ("audio/x-celt",
|
||||||
"rate", G_TYPE_INT, pad->granulerate_n, NULL);
|
"rate", G_TYPE_INT, pad->granulerate_n, NULL);
|
||||||
|
@ -1913,16 +1954,23 @@ setup_kate_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
if (pad->granuleshift >= 63) {
|
if (pad->granuleshift >= 63) {
|
||||||
/* Granuleshift can't be greater than the storage size of a granule */
|
/* Granuleshift can't be greater than the storage size of a granule */
|
||||||
GST_WARNING ("Invalid granuleshift (%u >= 63)", pad->granuleshift);
|
GST_WARNING ("Invalid granuleshift (%u >= 63)", pad->granuleshift);
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
pad->granuleshift = -1;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
GST_LOG ("sample rate: %d", pad->granulerate_n);
|
GST_LOG ("sample rate: %d", pad->granulerate_n);
|
||||||
|
|
||||||
|
if (pad->granulerate_n == 0) {
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
pad->granuleshift = -1;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
pad->n_header_packets = GST_READ_UINT8 (data + 11);
|
pad->n_header_packets = GST_READ_UINT8 (data + 11);
|
||||||
GST_LOG ("kate header packets: %d", pad->n_header_packets);
|
GST_LOG ("kate header packets: %d", pad->n_header_packets);
|
||||||
|
|
||||||
if (pad->granulerate_n == 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
category = (const char *) data + 48;
|
category = (const char *) data + 48;
|
||||||
if (strcmp (category, "subtitles") == 0 || strcmp (category, "SUB") == 0 ||
|
if (strcmp (category, "subtitles") == 0 || strcmp (category, "SUB") == 0 ||
|
||||||
strcmp (category, "spu-subtitles") == 0 ||
|
strcmp (category, "spu-subtitles") == 0 ||
|
||||||
|
@ -2178,19 +2226,25 @@ setup_daala_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
if (pad->granuleshift >= 63) {
|
if (pad->granuleshift >= 63) {
|
||||||
/* Granuleshift can't be greater than the storage size of a granule */
|
/* Granuleshift can't be greater than the storage size of a granule */
|
||||||
GST_WARNING ("Invalid granuleshift (%u >= 63)", pad->granuleshift);
|
GST_WARNING ("Invalid granuleshift (%u >= 63)", pad->granuleshift);
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
pad->granuleshift = -1;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
GST_LOG ("granshift: %d", pad->granuleshift);
|
GST_LOG ("granshift: %d", pad->granuleshift);
|
||||||
|
|
||||||
|
if (pad->granulerate_n == 0 || pad->granulerate_d == 0) {
|
||||||
|
GST_WARNING ("frame rate %d/%d", pad->granulerate_n, pad->granulerate_d);
|
||||||
|
pad->granulerate_n = 0;
|
||||||
|
pad->granulerate_d = 0;
|
||||||
|
pad->granuleshift = -1;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
pad->is_video = TRUE;
|
pad->is_video = TRUE;
|
||||||
pad->n_header_packets = 3;
|
pad->n_header_packets = 3;
|
||||||
pad->frame_size = 1;
|
pad->frame_size = 1;
|
||||||
|
|
||||||
if (pad->granulerate_n == 0 || pad->granulerate_d == 0) {
|
|
||||||
GST_WARNING ("frame rate %d/%d", pad->granulerate_n, pad->granulerate_d);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
pad->caps = gst_caps_new_empty_simple ("video/x-daala");
|
pad->caps = gst_caps_new_empty_simple ("video/x-daala");
|
||||||
|
|
||||||
if (w > 0 && h > 0) {
|
if (w > 0 && h > 0) {
|
||||||
|
|
Loading…
Reference in a new issue