/*
* Copyright (C) 2005-2013 Team XBMC
* http://xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC; see the file COPYING. If not, see
* .
*
*/
#include "libav_hacks.h"
#include
#include
struct SwrContext *swr_alloc_set_opts(struct SwrContext *s,
int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate,
int64_t in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate,
int log_offset, void *log_ctx)
{
AVAudioResampleContext *ret = avresample_alloc_context();
av_opt_set_int(ret, "out_channel_layout", out_ch_layout , 0);
av_opt_set_int(ret, "out_sample_fmt" , out_sample_fmt , 0);
av_opt_set_int(ret, "out_sample_rate" , out_sample_rate, 0);
av_opt_set_int(ret, "in_channel_layout" , in_ch_layout , 0);
av_opt_set_int(ret, "in_sample_fmt" , in_sample_fmt , 0);
av_opt_set_int(ret, "in_sample_rate" , in_sample_rate , 0);
return ret;
}
int swr_init(struct SwrContext *s)
{
return avresample_open(s);
}
void swr_free(struct SwrContext **s)
{
avresample_close(*s);
*s = NULL;
}
int swr_convert(struct SwrContext *s, uint8_t **out, int out_count,
const uint8_t **in , int in_count)
{
return avresample_convert(s, out, 0, out_count, (uint8_t**)in, 0,in_count);
}
int64_t swr_get_delay(struct SwrContext *s, int64_t base)
{
int64_t in_sr, out_sr;
av_opt_get_int(s, "in_sample_rate", 0, &in_sr);
av_opt_get_int(s, "out_sample_rate", 0, &out_sr);
return av_rescale_rnd(avresample_available(s), base, out_sr, AV_ROUND_UP) + av_rescale_rnd(avresample_get_delay(s), base, in_sr, AV_ROUND_UP);
}
int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map)
{
return avresample_set_channel_mapping(s, channel_map);
}
int swr_set_matrix(struct SwrContext *s, const double *matrix, int stride)
{
return avresample_set_matrix(s, matrix, stride);
}
int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance)
{
return avresample_set_compensation(s, sample_delta, compensation_distance);
}