ffmpeg | branch: release/2.4 | Michael Niedermayer <michae...@gmx.at> | Sun Apr 
12 19:43:08 2015 +0200| [72ddcb2459faac7fe41d7c563356f860ef2d0396] | committer: 
Michael Niedermayer

swresample: Allow reinitialization without ever setting channel counts

Signed-off-by: Michael Niedermayer <michae...@gmx.at>
(cherry picked from commit d7b9cb2f7a51351586791e65fa22e6536ee58c9f)

Signed-off-by: Michael Niedermayer <michae...@gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=72ddcb2459faac7fe41d7c563356f860ef2d0396
---

 libswresample/options.c             |   12 ++++++------
 libswresample/swresample.c          |    4 ++++
 libswresample/swresample_internal.h |    4 ++++
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/libswresample/options.c b/libswresample/options.c
index 01cdb1e..e970d3b 100644
--- a/libswresample/options.c
+++ b/libswresample/options.c
@@ -35,12 +35,12 @@
 #define PARAM AV_OPT_FLAG_AUDIO_PARAM
 
 static const AVOption options[]={
-{"ich"                  , "set input channel count"     , OFFSET( in.ch_count  
 ), AV_OPT_TYPE_INT  , {.i64=0                     }, 0      , SWR_CH_MAX, 
PARAM},
-{"in_channel_count"     , "set input channel count"     , OFFSET( in.ch_count  
 ), AV_OPT_TYPE_INT  , {.i64=0                     }, 0      , SWR_CH_MAX, 
PARAM},
-{"och"                  , "set output channel count"    , OFFSET(out.ch_count  
 ), AV_OPT_TYPE_INT  , {.i64=0                     }, 0      , SWR_CH_MAX, 
PARAM},
-{"out_channel_count"    , "set output channel count"    , OFFSET(out.ch_count  
 ), AV_OPT_TYPE_INT  , {.i64=0                     }, 0      , SWR_CH_MAX, 
PARAM},
-{"uch"                  , "set used channel count"      , OFFSET(used_ch_count 
 ), AV_OPT_TYPE_INT  , {.i64=0                     }, 0      , SWR_CH_MAX, 
PARAM},
-{"used_channel_count"   , "set used channel count"      , OFFSET(used_ch_count 
 ), AV_OPT_TYPE_INT  , {.i64=0                     }, 0      , SWR_CH_MAX, 
PARAM},
+{"ich"                  , "set input channel count"     , 
OFFSET(user_in_ch_count  ), AV_OPT_TYPE_INT, {.i64=0                    }, 0    
  , SWR_CH_MAX, PARAM},
+{"in_channel_count"     , "set input channel count"     , 
OFFSET(user_in_ch_count  ), AV_OPT_TYPE_INT, {.i64=0                    }, 0    
  , SWR_CH_MAX, PARAM},
+{"och"                  , "set output channel count"    , 
OFFSET(user_out_ch_count ), AV_OPT_TYPE_INT, {.i64=0                    }, 0    
  , SWR_CH_MAX, PARAM},
+{"out_channel_count"    , "set output channel count"    , 
OFFSET(user_out_ch_count ), AV_OPT_TYPE_INT, {.i64=0                    }, 0    
  , SWR_CH_MAX, PARAM},
+{"uch"                  , "set used channel count"      , 
OFFSET(user_used_ch_count), AV_OPT_TYPE_INT, {.i64=0                    }, 0    
  , SWR_CH_MAX, PARAM},
+{"used_channel_count"   , "set used channel count"      , 
OFFSET(user_used_ch_count), AV_OPT_TYPE_INT, {.i64=0                    }, 0    
  , SWR_CH_MAX, PARAM},
 {"isr"                  , "set input sample rate"       , OFFSET( 
in_sample_rate), AV_OPT_TYPE_INT  , {.i64=0                     }, 0      , 
INT_MAX   , PARAM},
 {"in_sample_rate"       , "set input sample rate"       , OFFSET( 
in_sample_rate), AV_OPT_TYPE_INT  , {.i64=0                     }, 0      , 
INT_MAX   , PARAM},
 {"osr"                  , "set output sample rate"      , 
OFFSET(out_sample_rate), AV_OPT_TYPE_INT  , {.i64=0                     }, 0    
  , INT_MAX   , PARAM},
diff --git a/libswresample/swresample.c b/libswresample/swresample.c
index 991aa13..e552626 100644
--- a/libswresample/swresample.c
+++ b/libswresample/swresample.c
@@ -164,6 +164,10 @@ av_cold int swr_init(struct SwrContext *s){
         return AVERROR(EINVAL);
     }
 
+    s->out.ch_count  = s-> user_out_ch_count;
+    s-> in.ch_count  = s->  user_in_ch_count;
+    s->used_ch_count = s->user_used_ch_count;
+
     if(av_get_channel_layout_nb_channels(s-> in_ch_layout) > SWR_CH_MAX) {
         av_log(s, AV_LOG_WARNING, "Input channel layout 0x%"PRIx64" is invalid 
or unsupported.\n", s-> in_ch_layout);
         s->in_ch_layout = 0;
diff --git a/libswresample/swresample_internal.h 
b/libswresample/swresample_internal.h
index 3761843..b892fea 100644
--- a/libswresample/swresample_internal.h
+++ b/libswresample/swresample_internal.h
@@ -90,6 +90,10 @@ struct SwrContext {
     int used_ch_count;                              ///< number of used input 
channels (mapped channel count if channel_map, otherwise in.ch_count)
     enum SwrEngine engine;
 
+    int user_in_ch_count;                           ///< User set input 
channel count
+    int user_out_ch_count;                          ///< User set output 
channel count
+    int user_used_ch_count;                         ///< User set used channel 
count
+
     struct DitherContext dither;
 
     int filter_size;                                /**< length of each FIR 
filter in the resampling filterbank relative to the cutoff frequency */

_______________________________________________
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

Reply via email to