mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 09:40:37 +00:00
flacdec: set the channel positions using the appropriate API
This avoids _set_format setting the unpositioned flag when passed NULL as channel positions, as it would not be cleared when setting actual channel positions later.
This commit is contained in:
parent
d0e8a385e0
commit
0b36fe59e1
1 changed files with 17 additions and 18 deletions
|
@ -433,13 +433,14 @@ gst_flac_dec_metadata_cb (const FLAC__StreamDecoder * decoder,
|
|||
const FLAC__StreamMetadata * metadata, void *client_data)
|
||||
{
|
||||
GstFlacDec *flacdec = GST_FLAC_DEC (client_data);
|
||||
GstAudioChannelPosition position[8];
|
||||
|
||||
GST_LOG_OBJECT (flacdec, "metadata type: %d", metadata->type);
|
||||
|
||||
switch (metadata->type) {
|
||||
case FLAC__METADATA_TYPE_STREAMINFO:{
|
||||
gint64 samples;
|
||||
guint depth, width, gdepth;
|
||||
guint depth, width, gdepth, channels;
|
||||
|
||||
samples = metadata->data.stream_info.total_samples;
|
||||
|
||||
|
@ -458,20 +459,18 @@ gst_flac_dec_metadata_cb (const FLAC__StreamDecoder * decoder,
|
|||
gdepth = width = 32;
|
||||
}
|
||||
|
||||
channels = metadata->data.stream_info.channels;
|
||||
memcpy (position, channel_positions[channels - 1], sizeof (position));
|
||||
gst_audio_channel_positions_to_valid_order (position, channels);
|
||||
/* Note: we create the inverse reordering map here */
|
||||
gst_audio_get_channel_reorder_map (channels,
|
||||
position, channel_positions[channels - 1],
|
||||
flacdec->channel_reorder_map);
|
||||
|
||||
gst_audio_info_set_format (&flacdec->info,
|
||||
gst_audio_format_build_integer (TRUE, G_BYTE_ORDER, width, gdepth),
|
||||
metadata->data.stream_info.sample_rate,
|
||||
metadata->data.stream_info.channels, NULL);
|
||||
|
||||
memcpy (flacdec->info.position,
|
||||
channel_positions[flacdec->info.channels - 1],
|
||||
sizeof (GstAudioChannelPosition) * flacdec->info.channels);
|
||||
gst_audio_channel_positions_to_valid_order (flacdec->info.position,
|
||||
flacdec->info.channels);
|
||||
/* Note: we create the inverse reordering map here */
|
||||
gst_audio_get_channel_reorder_map (flacdec->info.channels,
|
||||
flacdec->info.position, channel_positions[flacdec->info.channels - 1],
|
||||
flacdec->channel_reorder_map);
|
||||
metadata->data.stream_info.channels, position);
|
||||
|
||||
GST_DEBUG_OBJECT (flacdec, "blocksize: min=%u, max=%u",
|
||||
flacdec->min_blocksize, flacdec->max_blocksize);
|
||||
|
@ -555,6 +554,7 @@ gst_flac_dec_write (GstFlacDec * flacdec, const FLAC__Frame * frame,
|
|||
guint j, i;
|
||||
GstMapInfo map;
|
||||
gboolean caps_changed;
|
||||
GstAudioChannelPosition chanpos[8];
|
||||
|
||||
GST_LOG_OBJECT (flacdec, "samples in frame header: %d", samples);
|
||||
|
||||
|
@ -611,15 +611,14 @@ gst_flac_dec_write (GstFlacDec * flacdec, const FLAC__Frame * frame,
|
|||
GST_DEBUG_OBJECT (flacdec, "Negotiating %d Hz @ %d channels", sample_rate,
|
||||
channels);
|
||||
|
||||
memcpy (chanpos, channel_positions[flacdec->info.channels - 1],
|
||||
sizeof (chanpos));
|
||||
gst_audio_channel_positions_to_valid_order (chanpos,
|
||||
flacdec->info.channels);
|
||||
gst_audio_info_set_format (&flacdec->info,
|
||||
gst_audio_format_build_integer (TRUE, G_BYTE_ORDER, width, gdepth),
|
||||
sample_rate, channels, NULL);
|
||||
sample_rate, channels, chanpos);
|
||||
|
||||
memcpy (flacdec->info.position,
|
||||
channel_positions[flacdec->info.channels - 1],
|
||||
sizeof (GstAudioChannelPosition) * flacdec->info.channels);
|
||||
gst_audio_channel_positions_to_valid_order (flacdec->info.position,
|
||||
flacdec->info.channels);
|
||||
/* Note: we create the inverse reordering map here */
|
||||
gst_audio_get_channel_reorder_map (flacdec->info.channels,
|
||||
flacdec->info.position, channel_positions[flacdec->info.channels - 1],
|
||||
|
|
Loading…
Reference in a new issue