Merge commit 'fbc0b8659967ea54a8472b5f795270d38bb085dd'
* commit 'fbc0b8659967ea54a8472b5f795270d38bb085dd': lavr: Do not change the sample format for mono audio Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
c62fea7574
@ -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)
|
|||||||
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
|
|||||||
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,
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
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)
|
|||||||
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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user