mirror of https://git.ffmpeg.org/ffmpeg.git
swr: handle correctly muted channel with u8 sample fmt.
This commit is contained in:
parent
9cdf048ad2
commit
81a65b82fb
|
@ -38,6 +38,7 @@ struct AudioConvert {
|
|||
int channels;
|
||||
conv_func_type *conv_f;
|
||||
const int *ch_map;
|
||||
uint8_t silence[8]; ///< silence input sample
|
||||
};
|
||||
|
||||
#define CONV_FUNC_NAME(dst_fmt, src_fmt) conv_ ## src_fmt ## _to_ ## dst_fmt
|
||||
|
@ -118,12 +119,14 @@ AudioConvert *swri_audio_convert_alloc(enum AVSampleFormat out_fmt,
|
|||
|
||||
if (!f)
|
||||
return NULL;
|
||||
ctx = av_malloc(sizeof(*ctx));
|
||||
ctx = av_mallocz(sizeof(*ctx));
|
||||
if (!ctx)
|
||||
return NULL;
|
||||
ctx->channels = channels;
|
||||
ctx->conv_f = f;
|
||||
ctx->ch_map = ch_map;
|
||||
if (in_fmt == AV_SAMPLE_FMT_U8)
|
||||
memset(ctx->silence, 0x80, sizeof(ctx->silence));
|
||||
return ctx;
|
||||
}
|
||||
|
||||
|
@ -135,7 +138,6 @@ void swri_audio_convert_free(AudioConvert **ctx)
|
|||
int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len)
|
||||
{
|
||||
int ch;
|
||||
const uint8_t null_input[8] = {0};
|
||||
|
||||
av_assert0(ctx->channels == out->ch_count);
|
||||
|
||||
|
@ -145,7 +147,7 @@ int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len
|
|||
const int ich= ctx->ch_map ? ctx->ch_map[ch] : ch;
|
||||
const int is= ich < 0 ? 0 : (in->planar ? 1 : in->ch_count) * in->bps;
|
||||
const int os= (out->planar ? 1 :out->ch_count) *out->bps;
|
||||
const uint8_t *pi= ich < 0 ? null_input : in->ch[ich];
|
||||
const uint8_t *pi= ich < 0 ? ctx->silence : in->ch[ich];
|
||||
uint8_t *po= out->ch[ch];
|
||||
uint8_t *end= po + os*len;
|
||||
if(!po)
|
||||
|
|
Loading…
Reference in New Issue