internal.h 4.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * Copyright (c) 2012 Justin Ruggles <justin.ruggles@gmail.com>
  3. *
  4. * This file is part of Libav.
  5. *
  6. * Libav is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2.1 of the License, or (at your option) any later version.
  10. *
  11. * Libav is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with Libav; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  19. */
  20. #ifndef AVRESAMPLE_INTERNAL_H
  21. #define AVRESAMPLE_INTERNAL_H
  22. #include "libavutil/audio_fifo.h"
  23. #include "libavutil/log.h"
  24. #include "libavutil/opt.h"
  25. #include "libavutil/samplefmt.h"
  26. #include "avresample.h"
  27. #include "audio_convert.h"
  28. #include "audio_data.h"
  29. #include "audio_mix.h"
  30. #include "resample.h"
  31. struct AVAudioResampleContext {
  32. const AVClass *av_class; /**< AVClass for logging and AVOptions */
  33. uint64_t in_channel_layout; /**< input channel layout */
  34. enum AVSampleFormat in_sample_fmt; /**< input sample format */
  35. int in_sample_rate; /**< input sample rate */
  36. uint64_t out_channel_layout; /**< output channel layout */
  37. enum AVSampleFormat out_sample_fmt; /**< output sample format */
  38. int out_sample_rate; /**< output sample rate */
  39. enum AVSampleFormat internal_sample_fmt; /**< internal sample format */
  40. enum AVMixCoeffType mix_coeff_type; /**< mixing coefficient type */
  41. double center_mix_level; /**< center mix level */
  42. double surround_mix_level; /**< surround mix level */
  43. double lfe_mix_level; /**< lfe mix level */
  44. int normalize_mix_level; /**< enable mix level normalization */
  45. int force_resampling; /**< force resampling */
  46. int filter_size; /**< length of each FIR filter in the resampling filterbank relative to the cutoff frequency */
  47. int phase_shift; /**< log2 of the number of entries in the resampling polyphase filterbank */
  48. int linear_interp; /**< if 1 then the resampling FIR filter will be linearly interpolated */
  49. double cutoff; /**< resampling cutoff frequency. 1.0 corresponds to half the output sample rate */
  50. enum AVResampleFilterType filter_type; /**< resampling filter type */
  51. int kaiser_beta; /**< beta value for Kaiser window (only applicable if filter_type == AV_FILTER_TYPE_KAISER) */
  52. enum AVResampleDitherMethod dither_method; /**< dither method */
  53. int in_channels; /**< number of input channels */
  54. int out_channels; /**< number of output channels */
  55. int resample_channels; /**< number of channels used for resampling */
  56. int downmix_needed; /**< downmixing is needed */
  57. int upmix_needed; /**< upmixing is needed */
  58. int mixing_needed; /**< either upmixing or downmixing is needed */
  59. int resample_needed; /**< resampling is needed */
  60. int in_convert_needed; /**< input sample format conversion is needed */
  61. int out_convert_needed; /**< output sample format conversion is needed */
  62. AudioData *in_buffer; /**< buffer for converted input */
  63. AudioData *resample_out_buffer; /**< buffer for output from resampler */
  64. AudioData *out_buffer; /**< buffer for converted output */
  65. AVAudioFifo *out_fifo; /**< FIFO for output samples */
  66. AudioConvert *ac_in; /**< input sample format conversion context */
  67. AudioConvert *ac_out; /**< output sample format conversion context */
  68. ResampleContext *resample; /**< resampling context */
  69. AudioMix *am; /**< channel mixing context */
  70. enum AVMatrixEncoding matrix_encoding; /**< matrixed stereo encoding */
  71. /**
  72. * mix matrix
  73. * only used if avresample_set_matrix() is called before avresample_open()
  74. */
  75. double *mix_matrix;
  76. };
  77. #endif /* AVRESAMPLE_INTERNAL_H */