ffmpeg | branch: release/2.5 | Michael Niedermayer <michae...@gmx.at> | Sun Apr 
12 20:50:53 2015 +0200| [84fedd3be7685780de8a278f86d0ecb090e6b1c2] | committer: 
Michael Niedermayer

swresample: Allow reinitialization without ever setting channel layouts
(cherry picked from commit 80a28c7509a11114e1aea5b208d56c6646d69c07)

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

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

 libswresample/options.c             |    8 ++++----
 libswresample/rematrix.c            |    4 ++--
 libswresample/swresample.c          |    7 +++++--
 libswresample/swresample_internal.h |    2 ++
 4 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/libswresample/options.c b/libswresample/options.c
index e970d3b..de84672 100644
--- a/libswresample/options.c
+++ b/libswresample/options.c
@@ -51,10 +51,10 @@ static const AVOption options[]={
 {"out_sample_fmt"       , "set output sample format"    , 
OFFSET(out_sample_fmt ), AV_OPT_TYPE_SAMPLE_FMT , {.i64=AV_SAMPLE_FMT_NONE}, -1 
  , INT_MAX, PARAM},
 {"tsf"                  , "set internal sample format"  , 
OFFSET(int_sample_fmt ), AV_OPT_TYPE_SAMPLE_FMT , {.i64=AV_SAMPLE_FMT_NONE}, -1 
  , INT_MAX, PARAM},
 {"internal_sample_fmt"  , "set internal sample format"  , 
OFFSET(int_sample_fmt ), AV_OPT_TYPE_SAMPLE_FMT , {.i64=AV_SAMPLE_FMT_NONE}, -1 
  , INT_MAX, PARAM},
-{"icl"                  , "set input channel layout"    , OFFSET( in_ch_layout 
 ), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0                     }, 0      , 
INT64_MAX , PARAM, "channel_layout"},
-{"in_channel_layout"    , "set input channel layout"    , OFFSET( in_ch_layout 
 ), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0                     }, 0      , 
INT64_MAX , PARAM, "channel_layout"},
-{"ocl"                  , "set output channel layout"   , OFFSET(out_ch_layout 
 ), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0                     }, 0      , 
INT64_MAX , PARAM, "channel_layout"},
-{"out_channel_layout"   , "set output channel layout"   , OFFSET(out_ch_layout 
 ), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0                     }, 0      , 
INT64_MAX , PARAM, "channel_layout"},
+{"icl"                  , "set input channel layout"    , 
OFFSET(user_in_ch_layout ), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0           }, 0  
  , INT64_MAX , PARAM, "channel_layout"},
+{"in_channel_layout"    , "set input channel layout"    , 
OFFSET(user_in_ch_layout ), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0           }, 0  
  , INT64_MAX , PARAM, "channel_layout"},
+{"ocl"                  , "set output channel layout"   , 
OFFSET(user_out_ch_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0           }, 0  
  , INT64_MAX , PARAM, "channel_layout"},
+{"out_channel_layout"   , "set output channel layout"   , 
OFFSET(user_out_ch_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0           }, 0  
  , INT64_MAX , PARAM, "channel_layout"},
 {"clev"                 , "set center mix level"        , OFFSET(clev          
 ), AV_OPT_TYPE_FLOAT, {.dbl=C_30DB                }, -32    , 32        , 
PARAM},
 {"center_mix_level"     , "set center mix level"        , OFFSET(clev          
 ), AV_OPT_TYPE_FLOAT, {.dbl=C_30DB                }, -32    , 32        , 
PARAM},
 {"slev"                 , "set surround mix level"      , OFFSET(slev          
 ), AV_OPT_TYPE_FLOAT, {.dbl=C_30DB                }, -32    , 32        , 
PARAM},
diff --git a/libswresample/rematrix.c b/libswresample/rematrix.c
index 6552a2f..2238f0a 100644
--- a/libswresample/rematrix.c
+++ b/libswresample/rematrix.c
@@ -65,8 +65,8 @@ int swr_set_matrix(struct SwrContext *s, const double 
*matrix, int stride)
     if (!s || s->in_convert) // s needs to be allocated but not initialized
         return AVERROR(EINVAL);
     memset(s->matrix, 0, sizeof(s->matrix));
-    nb_in  = av_get_channel_layout_nb_channels(s->in_ch_layout);
-    nb_out = av_get_channel_layout_nb_channels(s->out_ch_layout);
+    nb_in  = av_get_channel_layout_nb_channels(s->user_in_ch_layout);
+    nb_out = av_get_channel_layout_nb_channels(s->user_out_ch_layout);
     for (out = 0; out < nb_out; out++) {
         for (in = 0; in < nb_in; in++)
             s->matrix[out][in] = matrix[in];
diff --git a/libswresample/swresample.c b/libswresample/swresample.c
index d7344b1..c9e5e4d 100644
--- a/libswresample/swresample.c
+++ b/libswresample/swresample.c
@@ -86,10 +86,10 @@ struct SwrContext *swr_alloc_set_opts(struct SwrContext *s,
     if (av_opt_set_int(s, "tsf", AV_SAMPLE_FMT_NONE,   0) < 0)
         goto fail;
 
-    if (av_opt_set_int(s, "ich", av_get_channel_layout_nb_channels(s-> 
in_ch_layout), 0) < 0)
+    if (av_opt_set_int(s, "ich", av_get_channel_layout_nb_channels(s-> 
user_in_ch_layout), 0) < 0)
         goto fail;
 
-    if (av_opt_set_int(s, "och", 
av_get_channel_layout_nb_channels(s->out_ch_layout), 0) < 0)
+    if (av_opt_set_int(s, "och", 
av_get_channel_layout_nb_channels(s->user_out_ch_layout), 0) < 0)
         goto fail;
 
     av_opt_set_int(s, "uch", 0, 0);
@@ -168,6 +168,9 @@ av_cold int swr_init(struct SwrContext *s){
     s-> in.ch_count  = s->  user_in_ch_count;
     s->used_ch_count = s->user_used_ch_count;
 
+    s-> in_ch_layout = s-> user_in_ch_layout;
+    s->out_ch_layout = s->user_out_ch_layout;
+
     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 b892fea..1bc6837 100644
--- a/libswresample/swresample_internal.h
+++ b/libswresample/swresample_internal.h
@@ -93,6 +93,8 @@ struct SwrContext {
     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
+    int64_t user_in_ch_layout;                      ///< User set input 
channel layout
+    int64_t user_out_ch_layout;                     ///< User set output 
channel layout
 
     struct DitherContext dither;
 

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

Reply via email to