[FFmpeg-trac] #5897(swresample:new): swresample. Incorrect work of swr_set_matrix() if the SwrContext was never initialized

FFmpeg trac at avcodec.org
Tue Oct 18 15:01:59 EEST 2016


#5897: swresample. Incorrect work of swr_set_matrix() if the SwrContext was never
initialized
-------------------------------------+-------------------------------------
             Reporter:  v0lt         |                     Type:  defect
               Status:  new          |                 Priority:  important
            Component:  swresample   |                  Version:
             Keywords:               |  unspecified
             Blocking:               |               Blocked By:
Analyzed by developer:  0            |  Reproduced by developer:  0
-------------------------------------+-------------------------------------
 Summary of the bug:

 Function swr_set_matrix() muted front channels when mixing from
 AV_CH_LAYOUT_6POINT1 in AV_CH_LAYOUT_STEREO if the SwrContext was never
 initialized.

 How to reproduce:
 {{{
 SwrContext* m_pSWRCxt = swr_alloc();

 for (int i = 1; i <= 2; i++) {
         int ret = 0;

         swr_close(m_pSWRCxt);

         av_opt_set_int(m_pSWRCxt, "in_sample_fmt", AV_SAMPLE_FMT_S16, 0);
         av_opt_set_int(m_pSWRCxt, "out_sample_fmt", AV_SAMPLE_FMT_FLT, 0);
         av_opt_set_int(m_pSWRCxt, "in_channel_layout",
 AV_CH_LAYOUT_6POINT1, 0);
         av_opt_set_int(m_pSWRCxt, "out_channel_layout",
 AV_CH_LAYOUT_STEREO, 0);
         av_opt_set_int(m_pSWRCxt, "in_sample_rate", 48000, 0);
         av_opt_set_int(m_pSWRCxt, "out_sample_rate", 48000, 0);

         const int in_ch  = av_popcount(AV_CH_LAYOUT_6POINT1);
         const int out_ch = av_popcount(AV_CH_LAYOUT_STEREO);
         double* m_matrix_dbl = (double*)av_mallocz(in_ch * out_ch *
 sizeof(*m_matrix_dbl));

         const double center_mix_level   = M_SQRT1_2;
         const double surround_mix_level = 1.0;
         const double lfe_mix_level      = 1.0;
         const double rematrix_maxval    = INT_MAX;
         const double rematrix_volume    = 0.0;
         ret = swr_build_matrix(
                 m_in_layout, m_out_layout,
                 center_mix_level, surround_mix_level, lfe_mix_level,
                 rematrix_maxval, rematrix_volume,
                 m_matrix_dbl, in_ch,
                 AV_MATRIX_ENCODING_NONE, NULL);

         ret = swr_set_matrix(m_pSWRCxt, m_matrix_dbl, in_ch);

         ret = swr_init(m_pSWRCxt);

         // working...
         // if i = 1 get the silence.
         // if i = 2 get the sound.
 }

 swr_free(&m_pSWRCxt);
 av_free(m_matrix_dbl);
 }}}

--
Ticket URL: <https://trac.ffmpeg.org/ticket/5897>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list