* samplerate conversion for both audio and video
* Copyright (c) 2000 Fabrice Bellard
*
- * This file is part of FFmpeg.
+ * This file is part of Libav.
*
- * FFmpeg is free software; you can redistribute it and/or
+ * Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
- * FFmpeg is distributed in the hope that it will be useful,
+ * Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
+ * License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
- * @file libavcodec/resample.c
+ * @file
* samplerate conversion for both audio and video
*/
#include "avcodec.h"
#include "audioconvert.h"
-#include "opt.h"
+#include "libavutil/opt.h"
+#include "libavutil/samplefmt.h"
struct AVResampleContext;
}
static const AVOption options[] = {{NULL}};
-static const AVClass audioresample_context_class = { "ReSampleContext", context_to_name, options };
+static const AVClass audioresample_context_class = { "ReSampleContext", context_to_name, options, LIBAVUTIL_VERSION_INT };
struct ReSampleContext {
struct AVResampleContext *resample_context;
/* channel convert */
int input_channels, output_channels, filter_channels;
AVAudioConvert *convert_ctx[2];
- enum SampleFormat sample_fmt[2]; ///< input and output sample format
+ enum AVSampleFormat sample_fmt[2]; ///< input and output sample format
unsigned sample_size[2]; ///< size of one sample in sample_fmt
short *buffer[2]; ///< buffers used for conversion to S16
unsigned buffer_size[2]; ///< sizes of allocated buffers
ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
int output_rate, int input_rate,
- enum SampleFormat sample_fmt_out,
- enum SampleFormat sample_fmt_in,
+ enum AVSampleFormat sample_fmt_out,
+ enum AVSampleFormat sample_fmt_in,
int filter_length, int log2_phase_count,
int linear, double cutoff)
{
s->sample_fmt [0] = sample_fmt_in;
s->sample_fmt [1] = sample_fmt_out;
- s->sample_size[0] = av_get_bits_per_sample_format(s->sample_fmt[0])>>3;
- s->sample_size[1] = av_get_bits_per_sample_format(s->sample_fmt[1])>>3;
+ s->sample_size[0] = av_get_bits_per_sample_fmt(s->sample_fmt[0])>>3;
+ s->sample_size[1] = av_get_bits_per_sample_fmt(s->sample_fmt[1])>>3;
- if (s->sample_fmt[0] != SAMPLE_FMT_S16) {
- if (!(s->convert_ctx[0] = av_audio_convert_alloc(SAMPLE_FMT_S16, 1,
+ if (s->sample_fmt[0] != AV_SAMPLE_FMT_S16) {
+ if (!(s->convert_ctx[0] = av_audio_convert_alloc(AV_SAMPLE_FMT_S16, 1,
s->sample_fmt[0], 1, NULL, 0))) {
av_log(s, AV_LOG_ERROR,
"Cannot convert %s sample format to s16 sample format\n",
- avcodec_get_sample_fmt_name(s->sample_fmt[0]));
+ av_get_sample_fmt_name(s->sample_fmt[0]));
av_free(s);
return NULL;
}
}
- if (s->sample_fmt[1] != SAMPLE_FMT_S16) {
+ if (s->sample_fmt[1] != AV_SAMPLE_FMT_S16) {
if (!(s->convert_ctx[1] = av_audio_convert_alloc(s->sample_fmt[1], 1,
- SAMPLE_FMT_S16, 1, NULL, 0))) {
+ AV_SAMPLE_FMT_S16, 1, NULL, 0))) {
av_log(s, AV_LOG_ERROR,
"Cannot convert s16 sample format to %s sample format\n",
- avcodec_get_sample_fmt_name(s->sample_fmt[1]));
+ av_get_sample_fmt_name(s->sample_fmt[1]));
av_audio_convert_free(s->convert_ctx[0]);
av_free(s);
return NULL;
s->resample_context= av_resample_init(output_rate, input_rate,
filter_length, log2_phase_count, linear, cutoff);
- *(AVClass**)s->resample_context = &audioresample_context_class;
+ *(const AVClass**)s->resample_context = &audioresample_context_class;
return s;
}
-#if LIBAVCODEC_VERSION_MAJOR < 53
+#if FF_API_AUDIO_OLD
ReSampleContext *audio_resample_init(int output_channels, int input_channels,
int output_rate, int input_rate)
{
return av_audio_resample_init(output_channels, input_channels,
output_rate, input_rate,
- SAMPLE_FMT_S16, SAMPLE_FMT_S16,
+ AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16,
TAPS, 10, 0, 0.8);
}
#endif
return nb_samples;
}
- if (s->sample_fmt[0] != SAMPLE_FMT_S16) {
+ if (s->sample_fmt[0] != AV_SAMPLE_FMT_S16) {
int istride[1] = { s->sample_size[0] };
int ostride[1] = { 2 };
const void *ibuf[1] = { input };
s->buffer_size[0] = input_size;
s->buffer[0] = av_malloc(s->buffer_size[0]);
if (!s->buffer[0]) {
- av_log(s, AV_LOG_ERROR, "Could not allocate buffer\n");
+ av_log(s->resample_context, AV_LOG_ERROR, "Could not allocate buffer\n");
return 0;
}
}
if (av_audio_convert(s->convert_ctx[0], obuf, ostride,
ibuf, istride, nb_samples*s->input_channels) < 0) {
- av_log(s, AV_LOG_ERROR, "Audio sample format conversion failed\n");
+ av_log(s->resample_context, AV_LOG_ERROR, "Audio sample format conversion failed\n");
return 0;
}
lenout= 4*nb_samples * s->ratio + 16;
- if (s->sample_fmt[1] != SAMPLE_FMT_S16) {
+ if (s->sample_fmt[1] != AV_SAMPLE_FMT_S16) {
output_bak = output;
if (!s->buffer_size[1] || s->buffer_size[1] < lenout) {
s->buffer_size[1] = lenout;
s->buffer[1] = av_malloc(s->buffer_size[1]);
if (!s->buffer[1]) {
- av_log(s, AV_LOG_ERROR, "Could not allocate buffer\n");
+ av_log(s->resample_context, AV_LOG_ERROR, "Could not allocate buffer\n");
return 0;
}
}
ac3_5p1_mux(output, buftmp3[0], buftmp3[1], nb_samples1);
}
- if (s->sample_fmt[1] != SAMPLE_FMT_S16) {
+ if (s->sample_fmt[1] != AV_SAMPLE_FMT_S16) {
int istride[1] = { 2 };
int ostride[1] = { s->sample_size[1] };
const void *ibuf[1] = { output };
if (av_audio_convert(s->convert_ctx[1], obuf, ostride,
ibuf, istride, nb_samples1*s->output_channels) < 0) {
- av_log(s, AV_LOG_ERROR, "Audio sample format convertion failed\n");
+ av_log(s->resample_context, AV_LOG_ERROR, "Audio sample format convertion failed\n");
return 0;
}
}