]> git.sesse.net Git - ffmpeg/blobdiff - libswresample/swresample_internal.h
swr: fix invalid sample format message.
[ffmpeg] / libswresample / swresample_internal.h
index c8832693138d8327038d37e89ea86960fc47d189..0fc1c6b6a679aa97e11a678e914b3494186964a1 100644 (file)
 #include "swresample.h"
 
 typedef struct AudioData{
-    uint8_t *ch[SWR_CH_MAX];
-    uint8_t *data;
-    int ch_count;
-    int bps;
-    int count;
-    int planar;
+    uint8_t *ch[SWR_CH_MAX];    ///< samples buffer per channel
+    uint8_t *data;              ///< samples buffer
+    int ch_count;               ///< number of channels
+    int bps;                    ///< bytes per sample
+    int count;                  ///< number of samples
+    int planar;                 ///< 1 if planar audio, 0 otherwise
 } AudioData;
 
-typedef struct SwrContext {          //FIXME find unused fields
-    AVClass *av_class;
-    int log_level_offset;
-    void *log_ctx;
-    enum AVSampleFormat  in_sample_fmt;
-    enum AVSampleFormat int_sample_fmt; ///<AV_SAMPLE_FMT_FLT OR AV_SAMPLE_FMT_S16
-    enum AVSampleFormat out_sample_fmt;
-    int64_t  in_ch_layout;
-    int64_t out_ch_layout;
-    int      in_sample_rate;
-    int     out_sample_rate;
-    int flags;
-    float slev, clev;
+typedef struct SwrContext {
+    const AVClass *av_class;                        ///< AVClass used for AVOption and av_log()
+    int log_level_offset;                           ///< logging level offset
+    void *log_ctx;                                  ///< parent logging context
+    enum AVSampleFormat  in_sample_fmt;             ///< input sample format
+    enum AVSampleFormat int_sample_fmt;             ///< internal sample format (AV_SAMPLE_FMT_FLT or AV_SAMPLE_FMT_S16)
+    enum AVSampleFormat out_sample_fmt;             ///< output sample format
+    int64_t  in_ch_layout;                          ///< input channel layout
+    int64_t out_ch_layout;                          ///< output channel layout
+    int      in_sample_rate;                        ///< input sample rate
+    int     out_sample_rate;                        ///< output sample rate
+    int flags;                                      ///< miscellaneous flags such as SWR_FLAG_RESAMPLE
+    float slev;                                     ///< surround mixing level
+    float clev;                                     ///< center mixing level
+    float rematrix_volume;                          ///< rematrixing volume coefficient
+    const int *channel_map;                         ///< channel index (or -1 if muted channel) map
+    int used_ch_count;                              ///< number of used input channels (mapped channel count if channel_map, otherwise in.ch_count)
 
-    //below are private
-    int int_bps;
-    int resample_first;
-    int rematrix;                   ///< flag to indicate if rematrixing is used
+    int int_bps;                                    ///< internal bytes per sample
+    int resample_first;                             ///< 1 if resampling must come first, 0 if rematrixing
+    int rematrix;                                   ///< flag to indicate if rematrixing is needed (basically if input and output layouts mismatch)
 
-    AudioData in, postin, midbuf, preout, out, in_buffer;
-    int in_buffer_index;
-    int in_buffer_count;
-    int resample_in_constraint;
+    AudioData in;                                   ///< input audio data
+    AudioData postin;                               ///< post-input audio data: used for rematrix/resample
+    AudioData midbuf;                               ///< intermediate audio data (postin/preout)
+    AudioData preout;                               ///< pre-output audio data: used for rematrix/resample
+    AudioData out;                                  ///< converted output audio data
+    AudioData in_buffer;                            ///< cached audio data (convert and resample purpose)
+    int in_buffer_index;                            ///< cached buffer position
+    int in_buffer_count;                            ///< cached buffer length
+    int resample_in_constraint;                     ///< 1 if the input end was reach before the output end, 0 otherwise
 
-    struct AVAudioConvert *in_convert;
-    struct AVAudioConvert *out_convert;
-    struct AVResampleContext *resample;
+    struct AudioConvert *in_convert;                ///< input conversion context
+    struct AudioConvert *out_convert;               ///< output conversion context
+    struct AudioConvert *full_convert;              ///< full conversion context (single conversion for input and output)
+    struct ResampleContext *resample;               ///< resampling context
 
-    float matrix[SWR_CH_MAX][SWR_CH_MAX];
-    int16_t matrix16[SWR_CH_MAX][SWR_CH_MAX];
-    uint8_t matrix_ch[SWR_CH_MAX][SWR_CH_MAX+1];
+    float matrix[SWR_CH_MAX][SWR_CH_MAX];           ///< floating point rematrixing coefficients
+    int32_t matrix32[SWR_CH_MAX][SWR_CH_MAX];       ///< 17.15 fixed point rematrixing coefficients
+    uint8_t matrix_ch[SWR_CH_MAX][SWR_CH_MAX+1];    ///< Lists of input channels per output channel that have non zero rematrixing coefficients
 
-    //TODO callbacks for asm optims
+    /* TODO: callbacks for ASM optimizations */
 }SwrContext;
 
-struct AVResampleContext *swr_resample_init(struct AVResampleContext *, int out_rate, int in_rate, int filter_size, int phase_shift, int linear, double cutoff);
-void swr_resample_free(struct AVResampleContext **c);
-int swr_multiple_resample(struct AVResampleContext *c, AudioData *dst, int dst_size, AudioData *src, int src_size, int *consumed);
-void swr_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
-int swr_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
+struct ResampleContext *swri_resample_init(struct ResampleContext *, int out_rate, int in_rate, int filter_size, int phase_shift, int linear, double cutoff);
+void swri_resample_free(struct ResampleContext **c);
+int swri_multiple_resample(struct ResampleContext *c, AudioData *dst, int dst_size, AudioData *src, int src_size, int *consumed);
+void swri_resample_compensate(struct ResampleContext *c, int sample_delta, int compensation_distance);
+int swri_resample(struct ResampleContext *c, int16_t *dst, const int16_t *src, int *consumed, int src_size, int dst_size, int update_ctx);
+
+int swri_rematrix_init(SwrContext *s);
+int swri_rematrix(SwrContext *s, AudioData *out, AudioData *in, int len, int mustcopy);
 
-int swr_rematrix_init(SwrContext *s);
-int swr_rematrix(SwrContext *s, AudioData *out, AudioData *in, int len, int mustcopy);
 #endif