mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 06:58:56 +00:00
riff-media: Don't divide block align by zero channels
https://bugzilla.gnome.org/show_bug.cgi?id=777525
This commit is contained in:
parent
d894c19db6
commit
5d505d1088
1 changed files with 20 additions and 14 deletions
|
@ -1299,22 +1299,28 @@ gst_riff_create_audio_caps (guint16 codec_id,
|
||||||
if (strf != NULL) {
|
if (strf != NULL) {
|
||||||
gint ba = strf->blockalign;
|
gint ba = strf->blockalign;
|
||||||
gint ch = strf->channels;
|
gint ch = strf->channels;
|
||||||
gint wd = ba * 8 / ch;
|
|
||||||
|
|
||||||
caps = gst_caps_new_simple ("audio/x-raw",
|
if (ba > 0 && ch > 0 && (ba == (64 / 8) * ch || ba == (32 / 8) * ch)) {
|
||||||
"format", G_TYPE_STRING, wd == 64 ? "F64LE" : "F32LE",
|
gint wd = ba * 8 / ch;
|
||||||
"layout", G_TYPE_STRING, "interleaved",
|
|
||||||
"channels", G_TYPE_INT, ch, NULL);
|
|
||||||
|
|
||||||
/* Add default channel layout. We know no default layout for more than
|
caps = gst_caps_new_simple ("audio/x-raw",
|
||||||
* 8 channels. */
|
"format", G_TYPE_STRING, wd == 64 ? "F64LE" : "F32LE",
|
||||||
if (ch > 8)
|
"layout", G_TYPE_STRING, "interleaved",
|
||||||
GST_WARNING ("don't know default layout for %d channels", ch);
|
"channels", G_TYPE_INT, ch, NULL);
|
||||||
else if (gst_riff_wave_add_default_channel_mask (caps, ch,
|
|
||||||
channel_reorder_map))
|
/* Add default channel layout. We know no default layout for more than
|
||||||
GST_DEBUG ("using default channel layout for %d channels", ch);
|
* 8 channels. */
|
||||||
else
|
if (ch > 8)
|
||||||
GST_WARNING ("failed to add channel layout");
|
GST_WARNING ("don't know default layout for %d channels", ch);
|
||||||
|
else if (gst_riff_wave_add_default_channel_mask (caps, ch,
|
||||||
|
channel_reorder_map))
|
||||||
|
GST_DEBUG ("using default channel layout for %d channels", ch);
|
||||||
|
else
|
||||||
|
GST_WARNING ("failed to add channel layout");
|
||||||
|
} else {
|
||||||
|
GST_WARNING ("invalid block align %d or channel count %d", ba, ch);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* FIXME: this is pretty useless - we need fixed caps */
|
/* FIXME: this is pretty useless - we need fixed caps */
|
||||||
caps = gst_caps_from_string ("audio/x-raw, "
|
caps = gst_caps_from_string ("audio/x-raw, "
|
||||||
|
|
Loading…
Reference in a new issue