Commit 75143651 authored by vaclav's avatar vaclav
Browse files

fix crash due to too high 'max_bits' for residual coding in DFT stereo

parent 5d295d69
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -630,6 +630,7 @@ ivas_error ivas_cpe_enc(
        }
#endif

        /* DFT stereo side bits */
        if ( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && cpe_brate < MASA_STEREO_MIN_BITRATE && sts[0]->core_brate != SID_2k40 && sts[0]->core_brate != FRAME_NO_DATA )
        {
            nb_bits = 0; /* Only mono downmix is transmitted in this case */
@@ -643,10 +644,19 @@ ivas_error ivas_cpe_enc(
            stereo_dft_enc_write_BS( hCPE, &nb_bits );
        }

        /* Residual coding in MDCT domain */
        if ( !( ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) && ( sts[0]->core_brate == SID_2k40 || sts[0]->core_brate == FRAME_NO_DATA ) ) )
        {
            /* Residual coding in MDCT domain */
            stereo_dft_enc_res( hCPE->hStereoDft, old_inp_12k8[1] + L_INP_MEM - STEREO_DFT_OVL_8k, hCPE->hMetaData, &nb_bits, (int16_t) ( ( hCPE->element_brate ) / FRAMES_PER_SEC - 0.8f * sts[0]->bits_frame_nominal - ( ( ivas_format == MASA_FORMAT ) ? nb_bits_metadata : 0 ) ) );
            int16_t max_bits = (int16_t) ( hCPE->element_brate / FRAMES_PER_SEC - 0.8f * sts[0]->bits_frame_nominal );
            if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT )
            {
                max_bits -= nb_bits_metadata;
#ifdef OMASA_BRATE
                max_bits += (int16_t) ( hCPE->brate_surplus / FRAMES_PER_SEC );
#endif
            }

            stereo_dft_enc_res( hCPE->hStereoDft, old_inp_12k8[1] + L_INP_MEM - STEREO_DFT_OVL_8k, hCPE->hMetaData, &nb_bits, max_bits );
        }
#else
        if ( ivas_format == MASA_FORMAT && ivas_total_brate < MASA_STEREO_MIN_BITRATE && sts[0]->core_brate != SID_2k40 && sts[0]->core_brate != FRAME_NO_DATA )