aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-08-04 02:49:43 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-08-04 02:49:48 +0200
commitc62fea75747de132d69cdf8504ab6c8af26fa307 (patch)
treeaa43d49d22eff48477167fd9aa359637015b7185
parent8f6d36b3cb8e3afc6cfa3abb1582ec4d71a3e1ee (diff)
parentfbc0b8659967ea54a8472b5f795270d38bb085dd (diff)
downloadffmpeg-c62fea75747de132d69cdf8504ab6c8af26fa307.tar.gz
Merge commit 'fbc0b8659967ea54a8472b5f795270d38bb085dd'
* commit 'fbc0b8659967ea54a8472b5f795270d38bb085dd': lavr: Do not change the sample format for mono audio Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavresample/audio_convert.c4
-rw-r--r--libavresample/audio_data.c12
-rw-r--r--libavresample/audio_data.h2
-rw-r--r--libavresample/utils.c10
4 files changed, 16 insertions, 12 deletions
diff --git a/libavresample/audio_convert.c b/libavresample/audio_convert.c
index e68d5727f4..c3e9aa3da9 100644
--- a/libavresample/audio_convert.c
+++ b/libavresample/audio_convert.c
@@ -288,8 +288,8 @@ AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr,
return ac;
}
- in_planar = av_sample_fmt_is_planar(in_fmt);
- out_planar = av_sample_fmt_is_planar(out_fmt);
+ in_planar = ff_sample_fmt_is_planar(in_fmt, channels);
+ out_planar = ff_sample_fmt_is_planar(out_fmt, channels);
if (in_planar == out_planar) {
ac->func_type = CONV_FUNC_TYPE_FLAT;
diff --git a/libavresample/audio_data.c b/libavresample/audio_data.c
index 1521d7e2d1..c2f545013c 100644
--- a/libavresample/audio_data.c
+++ b/libavresample/audio_data.c
@@ -48,6 +48,14 @@ static void calc_ptr_alignment(AudioData *a)
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)
{
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
av_log(a, AV_LOG_ERROR, "invalid sample format\n");
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->stride = a->sample_size * (a->is_planar ? 1 : channels);
@@ -125,7 +133,7 @@ AudioData *ff_audio_data_alloc(int channels, int nb_samples,
av_free(a);
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->stride = a->sample_size * (a->is_planar ? 1 : channels);
diff --git a/libavresample/audio_data.h b/libavresample/audio_data.h
index b2b8bdddac..b50bd40600 100644
--- a/libavresample/audio_data.h
+++ b/libavresample/audio_data.h
@@ -29,6 +29,8 @@
#include "avresample.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.
*/
diff --git a/libavresample/utils.c b/libavresample/utils.c
index 48874d6103..f4eb66684e 100644
--- a/libavresample/utils.c
+++ b/libavresample/utils.c
@@ -101,16 +101,10 @@ int avresample_open(AVAudioResampleContext *avr)
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
the output format is not planar */
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);
}
@@ -119,7 +113,7 @@ int avresample_open(AVAudioResampleContext *avr)
avr->in_convert_needed = avr->in_sample_fmt != avr->internal_sample_fmt;
else
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)
avr->out_convert_needed = avr->internal_sample_fmt != avr->out_sample_fmt;