<div dir="ltr"><div>My application creates AAC files. The input is feed with frames in AV_SAMPLE_FMT_S16 format. I am doing conversion to AV_SAMPLE_FMT_FLTP and encoding these frames using avcodec_encode_audio2 function.</div><div><br></div><div>The problem is that function "avcodec_encode_audio2" crashes without error. When I feed input with frames with AV_SAMPLE_FMT_FLTP, conversion is working and encoding is correct as well. </div><div><br></div><div>I assume that there is something wrong with frames conversion. Do you have any ideas what is wrong? Thanks. Below there is function I use to convert samples:<br></div><div><br></div><div><div>static AVFrame *convert_frame_format(AVFrame *frame) {</div><div><br></div><div>    int src_nb_channels = input_codec_context->channels;</div><div>    long long int src_channel_layout = av_get_default_channel_layout(src_nb_channels);</div><div><br></div><div>    if (1 || (input_codec_context->sample_fmt != output_codec_context->sample_fmt) ||</div><div>        (frame->channel_layout != output_codec_context->channel_layout)){</div><div><br></div><div>        SwrContext *swr = swr_alloc();</div><div>        av_opt_set_int(swr, "in_channel_layout", src_channel_layout, 0);</div><div>        av_opt_set_int(swr, "out_channel_layout", output_codec_context->channel_layout, 0);</div><div>        av_opt_set_int(swr, "in_sample_rate", frame->sample_rate, 0);</div><div>        av_opt_set_int(swr, "out_sample_rate", output_codec_context->sample_rate, 0);</div><div>        av_opt_set_sample_fmt(swr, "in_sample_fmt", input_codec_context->sample_fmt, 0);</div><div>        av_opt_set_sample_fmt(swr, "out_sample_fmt", output_codec_context->sample_fmt, 0);</div><div>        av_opt_set_int(swr, "internal_sample_fmt", output_codec_context->sample_fmt, 0);</div><div><br></div><div>        swr_init(swr);</div><div>        uint8_t *outputBuffer;</div><div>        int linesize;</div><div><br></div><div>        av_samples_alloc(&outputBuffer,</div><div>                         &linesize,</div><div>                         OUTPUT_CHANNELS,</div><div>                         frame->nb_samples,</div><div>                         output_codec_context->sample_fmt,</div><div>                         0);;</div><div>       swr_convert(swr, &outputBuffer, frame->nb_samples, (const uint8_t **) &frame->data[0],</div><div>                    frame->nb_samples);</div><div>       //LOGE("MaKr convert_frame_format 1.4 outputBuffer: %c %c %c", outputBuffer[0], outputBuffer[500], outputBuffer[1000]);</div><div>       swr_free(&swr);</div><div>       AVFrame *new_frame = NULL;</div><div>       utility_init_output_frame(&new_frame, DEFAULT_AAC_FRAME_SIZE, OUTPUT_CHANNELS,</div><div>                                 output_codec_context->sample_fmt, output_codec_context->sample_rate);</div><div>       new_frame->data[0] = outputBuffer;</div><div>       return new_frame;</div><div>    }</div><div>    return frame;</div><div>    </div><div>}</div><div><br></div><div>int utility_init_output_frame(AVFrame **frame, int frame_size, int channels, int sample_fmt,</div><div>                             int sample_rate) {</div><div><br></div><div>    int error;</div><div>    if (!(*frame = av_frame_alloc())) {</div><div>        return AVERROR_EXIT;</div><div>    }</div><div><br></div><div>    (*frame)->nb_samples = frame_size;</div><div>    (*frame)->channels = channels;</div><div>    (*frame)->channel_layout = av_get_default_channel_layout(channels);</div><div>    (*frame)->format = sample_fmt;</div><div>    (*frame)->sample_rate = sample_rate;</div><div><br></div><div>    if ((error = av_frame_get_buffer(*frame, 0)) < 0) {</div><div>        av_frame_free(frame);</div><div>        return error;</div><div>    }</div><div>    return 0;</div><div><br></div><div>}</div></div></div>