Commit c62fea75 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit 'fbc0b865'

* commit 'fbc0b865':
  lavr: Do not change the sample format for mono audio
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 8f6d36b3 fbc0b865
...@@ -288,8 +288,8 @@ AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, ...@@ -288,8 +288,8 @@ AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr,
return ac; return ac;
} }
in_planar = av_sample_fmt_is_planar(in_fmt); in_planar = ff_sample_fmt_is_planar(in_fmt, channels);
out_planar = av_sample_fmt_is_planar(out_fmt); out_planar = ff_sample_fmt_is_planar(out_fmt, channels);
if (in_planar == out_planar) { if (in_planar == out_planar) {
ac->func_type = CONV_FUNC_TYPE_FLAT; ac->func_type = CONV_FUNC_TYPE_FLAT;
......
...@@ -48,6 +48,14 @@ static void calc_ptr_alignment(AudioData *a) ...@@ -48,6 +48,14 @@ static void calc_ptr_alignment(AudioData *a)
a->ptr_align = min_align; a->ptr_align = min_align;
} }
int ff_sample_fmt_is_planar(enum AVSampleFormat sample_fmt, int channels)
{
if (channels == 1)
return 1;
else
return av_sample_fmt_is_planar(sample_fmt);
}
int ff_audio_data_set_channels(AudioData *a, int channels) int ff_audio_data_set_channels(AudioData *a, int channels)
{ {
if (channels < 1 || channels > AVRESAMPLE_MAX_CHANNELS || if (channels < 1 || channels > AVRESAMPLE_MAX_CHANNELS ||
...@@ -81,7 +89,7 @@ int ff_audio_data_init(AudioData *a, uint8_t **src, int plane_size, int channels ...@@ -81,7 +89,7 @@ int ff_audio_data_init(AudioData *a, uint8_t **src, int plane_size, int channels
av_log(a, AV_LOG_ERROR, "invalid sample format\n"); av_log(a, AV_LOG_ERROR, "invalid sample format\n");
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
a->is_planar = av_sample_fmt_is_planar(sample_fmt); a->is_planar = ff_sample_fmt_is_planar(sample_fmt, channels);
a->planes = a->is_planar ? channels : 1; a->planes = a->is_planar ? channels : 1;
a->stride = a->sample_size * (a->is_planar ? 1 : channels); a->stride = a->sample_size * (a->is_planar ? 1 : channels);
...@@ -125,7 +133,7 @@ AudioData *ff_audio_data_alloc(int channels, int nb_samples, ...@@ -125,7 +133,7 @@ AudioData *ff_audio_data_alloc(int channels, int nb_samples,
av_free(a); av_free(a);
return NULL; return NULL;
} }
a->is_planar = av_sample_fmt_is_planar(sample_fmt); a->is_planar = ff_sample_fmt_is_planar(sample_fmt, channels);
a->planes = a->is_planar ? channels : 1; a->planes = a->is_planar ? channels : 1;
a->stride = a->sample_size * (a->is_planar ? 1 : channels); a->stride = a->sample_size * (a->is_planar ? 1 : channels);
......
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
#include "avresample.h" #include "avresample.h"
#include "internal.h" #include "internal.h"
int ff_sample_fmt_is_planar(enum AVSampleFormat sample_fmt, int channels);
/** /**
* Audio buffer used for intermediate storage between conversion phases. * Audio buffer used for intermediate storage between conversion phases.
*/ */
......
...@@ -101,16 +101,10 @@ int avresample_open(AVAudioResampleContext *avr) ...@@ -101,16 +101,10 @@ int avresample_open(AVAudioResampleContext *avr)
av_get_sample_fmt_name(avr->internal_sample_fmt)); av_get_sample_fmt_name(avr->internal_sample_fmt));
} }
/* treat all mono as planar for easier comparison */
if (avr->in_channels == 1)
avr->in_sample_fmt = av_get_planar_sample_fmt(avr->in_sample_fmt);
if (avr->out_channels == 1)
avr->out_sample_fmt = av_get_planar_sample_fmt(avr->out_sample_fmt);
/* we may need to add an extra conversion in order to remap channels if /* we may need to add an extra conversion in order to remap channels if
the output format is not planar */ the output format is not planar */
if (avr->use_channel_map && !avr->mixing_needed && !avr->resample_needed && if (avr->use_channel_map && !avr->mixing_needed && !avr->resample_needed &&
!av_sample_fmt_is_planar(avr->out_sample_fmt)) { !ff_sample_fmt_is_planar(avr->out_sample_fmt, avr->out_channels)) {
avr->internal_sample_fmt = av_get_planar_sample_fmt(avr->out_sample_fmt); avr->internal_sample_fmt = av_get_planar_sample_fmt(avr->out_sample_fmt);
} }
...@@ -119,7 +113,7 @@ int avresample_open(AVAudioResampleContext *avr) ...@@ -119,7 +113,7 @@ int avresample_open(AVAudioResampleContext *avr)
avr->in_convert_needed = avr->in_sample_fmt != avr->internal_sample_fmt; avr->in_convert_needed = avr->in_sample_fmt != avr->internal_sample_fmt;
else else
avr->in_convert_needed = avr->use_channel_map && avr->in_convert_needed = avr->use_channel_map &&
!av_sample_fmt_is_planar(avr->out_sample_fmt); !ff_sample_fmt_is_planar(avr->out_sample_fmt, avr->out_channels);
if (avr->resample_needed || avr->mixing_needed || avr->in_convert_needed) if (avr->resample_needed || avr->mixing_needed || avr->in_convert_needed)
avr->out_convert_needed = avr->internal_sample_fmt != avr->out_sample_fmt; avr->out_convert_needed = avr->internal_sample_fmt != avr->out_sample_fmt;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment