History

swr: use native planar sample formats.

Clément Bœsch committed 14 years ago

Commit 58205ed1 parent 573ffbb3 files · +20 −21Browse files

Unified · Split

3 files
  1. libswresample/swresample.c +4 −4
  2. libswresample/swresample.h +3 −3
  3. libswresample/swresample_test.c +13 −14
libswresample/swresample.c+4−4
@@ -143,10 +143,10 @@ int swr_init(struct SwrContext *s){ · 142 unmodified lines
143143 swri_audio_convert_free(&s->out_convert);
144144 swri_audio_convert_free(&s->full_convert);
145145
146− s-> in.planar= s-> in_sample_fmt >= 0x100;
147− s->out.planar= s->out_sample_fmt >= 0x100;
148− s-> in_sample_fmt &= 0xFF;
149− s->out_sample_fmt &= 0xFF;
146+ s-> in.planar= av_sample_fmt_is_planar(s-> in_sample_fmt);
147+ s->out.planar= av_sample_fmt_is_planar(s->out_sample_fmt);
148+ s-> in_sample_fmt= av_get_alt_sample_fmt(s-> in_sample_fmt, 0);
149+ s->out_sample_fmt= av_get_alt_sample_fmt(s->out_sample_fmt, 0);
150150
151151 if(s-> in_sample_fmt >= AV_SAMPLE_FMT_NB){
152152 av_log(s, AV_LOG_ERROR, "Requested sample format %s is invalid\n", av_get_sample_fmt_name(s->in_sample_fmt));
libswresample/swresample.h+3−3
@@ -30,7 +30,7 @@ · 29 unmodified lines
3030 #include "libavutil/samplefmt.h"
3131
3232 #define LIBSWRESAMPLE_VERSION_MAJOR 0
33−#define LIBSWRESAMPLE_VERSION_MINOR 4
33+#define LIBSWRESAMPLE_VERSION_MINOR 5
3434 #define LIBSWRESAMPLE_VERSION_MICRO 0
3535
3636 #define SWR_CH_MAX 16 ///< Maximum number of channels
@@ -69,10 +69,10 @@ int swr_init(struct SwrContext *s); · 32 unmodified lines
6969 *
7070 * @param s Swr context, can be NULL
7171 * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*)
72− * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). Use +0x100 for planar audio
72+ * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*).
7373 * @param out_sample_rate output sample rate (frequency in Hz)
7474 * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*)
75− * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). Use +0x100 for planar audio
75+ * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*).
7676 * @param in_sample_rate input sample rate (frequency in Hz)
7777 * @param log_offset logging level offset
7878 * @param log_ctx parent logging context, can be NULL
libswresample/swresample_test.c+13−14
@@ -30,8 +30,8 @@ · 29 unmodified lines
3030
3131 static double get(const uint8_t *a[], int ch, int index, int ch_count, enum AVSampleFormat f){
3232 const uint8_t *p;
33− if(f>=0x100){
34− f&=0xFF;
33+ if(av_sample_fmt_is_planar(f)){
34+ f= av_get_alt_sample_fmt(f, 0);
3535 p= a[ch];
3636 }else{
3737 p= a[0];
@@ -50,8 +50,8 @@ static double get(const uint8_t *a[], int ch, int index, int ch_count, enum AVSa · 12 unmodified lines
5050
5151 static void set(uint8_t *a[], int ch, int index, int ch_count, enum AVSampleFormat f, double v){
5252 uint8_t *p;
53− if(f>=0x100){
54− f&=0xFF;
53+ if(av_sample_fmt_is_planar(f)){
54+ f= av_get_alt_sample_fmt(f, 0);
5555 p= a[ch];
5656 }else{
5757 p= a[0];
@@ -86,7 +86,7 @@ AV_CH_LAYOUT_7POINT1_WIDE , · 28 unmodified lines
8686 };
8787
8888 static void setup_array(uint8_t *out[SWR_CH_MAX], uint8_t *in, enum AVSampleFormat format, int samples){
89− if(format >= 0x100){
89+ if(av_sample_fmt_is_planar(format)){
9090 int i;
9191 int plane_size= av_get_bytes_per_sample(format&0xFF)*samples;
9292 format&=0xFF;
@@ -109,7 +109,6 @@ int main(int argc, char **argv){ · 16 unmodified lines
109109 uint8_t *ain[SWR_CH_MAX];
110110 uint8_t *aout[SWR_CH_MAX];
111111 uint8_t *amid[SWR_CH_MAX];
112− int planar_in=256, planar_out=256;
113112
114113 struct SwrContext * forw_ctx= NULL;
115114 struct SwrContext *backw_ctx= NULL;
@@ -130,11 +129,11 @@ int main(int argc, char **argv){ · 14 unmodified lines
130129 in_ch_count, out_ch_count,
131130 in_sample_rate, out_sample_rate,
132131 av_get_sample_fmt_name(in_sample_fmt), av_get_sample_fmt_name(out_sample_fmt));
133− forw_ctx = swr_alloc_set_opts(forw_ctx, out_ch_layout, out_sample_fmt+planar_out, out_sample_rate,
134− in_ch_layout, in_sample_fmt+planar_in , in_sample_rate,
132+ forw_ctx = swr_alloc_set_opts(forw_ctx, out_ch_layout, av_get_alt_sample_fmt(out_sample_fmt, 1), out_sample_rate,
133+ in_ch_layout, av_get_alt_sample_fmt( in_sample_fmt, 1), in_sample_rate,
135134 0, 0);
136135 backw_ctx = swr_alloc_set_opts(backw_ctx, in_ch_layout, in_sample_fmt, in_sample_rate,
137− out_ch_layout, out_sample_fmt+planar_out, out_sample_rate,
136+ out_ch_layout, av_get_alt_sample_fmt(out_sample_fmt, 1), out_sample_rate,
138137 0, 0);
139138 if(swr_init( forw_ctx) < 0)
140139 fprintf(stderr, "swr_init(->) failed\n");
@@ -145,12 +144,12 @@ int main(int argc, char **argv){ · 4 unmodified lines
145144 if(!backw_ctx)
146145 fprintf(stderr, "Failed to init backw_ctx\n");
147146 //FIXME test planar
148− setup_array(ain , array_in , in_sample_fmt+planar_in , SAMPLES);
149− setup_array(amid, array_mid, out_sample_fmt+planar_out, 3*SAMPLES);
147+ setup_array(ain , array_in , av_get_alt_sample_fmt( in_sample_fmt, 1), SAMPLES);
148+ setup_array(amid, array_mid, av_get_alt_sample_fmt(out_sample_fmt, 1), 3*SAMPLES);
150149 setup_array(aout, array_out, in_sample_fmt , SAMPLES);
151150 for(ch=0; ch<in_ch_count; ch++){
152151 for(i=0; i<SAMPLES; i++)
153− set(ain, ch, i, in_ch_count, in_sample_fmt+planar_in, sin(i*i*3/SAMPLES));
152+ set(ain, ch, i, in_ch_count, av_get_alt_sample_fmt(in_sample_fmt, 1), sin(i*i*3/SAMPLES));
154153 }
155154 mid_count= swr_convert(forw_ctx, amid, 3*SAMPLES, ain, SAMPLES);
156155 out_count= swr_convert(backw_ctx,aout, SAMPLES, amid, mid_count);
@@ -163,7 +162,7 @@ int main(int argc, char **argv){ · 6 unmodified lines
163162 double sum_bb= 0;
164163 double sum_ab= 0;
165164 for(i=0; i<out_count; i++){
166− double a= get(ain , ch, i, in_ch_count, in_sample_fmt+planar_in);
165+ double a= get(ain , ch, i, in_ch_count, av_get_alt_sample_fmt(in_sample_fmt, 1));
167166 double b= get(aout, ch, i, in_ch_count, in_sample_fmt);
168167 sum_a += a;
169168 sum_b += b;
@@ -188,7 +187,7 @@ int main(int argc, char **argv){ · 18 unmodified lines
188187 double sum_bb= 0;
189188 double sum_ab= 0;
190189 for(i=0; i<flush_count; i++){
191− double a= get(ain , ch, i+out_count, in_ch_count, in_sample_fmt+planar_in);
190+ double a= get(ain , ch, i+out_count, in_ch_count, av_get_alt_sample_fmt(in_sample_fmt, 1));
192191 double b= get(aout, ch, i, in_ch_count, in_sample_fmt);
193192 sum_a += a;
194193 sum_b += b;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t