diff --git a/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp index 9b3df63f0e..b3d1a4bd48 100644 --- a/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp +++ b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp @@ -541,27 +541,26 @@ AVCodecEncoder::_EncodeAudio(const uint8* buffer, size_t bufferSize, packet.data = NULL; packet.size = 0; - // We need to wrap our input data into an AVFrame structure. - AVFrame frame; int gotPacket = 0; if (buffer) { - av_frame_unref(&frame); + av_frame_unref(fFrame); + fFrame->nb_samples = frameCount; - frame.nb_samples = frameCount; - - ret = avcodec_fill_audio_frame(&frame, fCodecContext->channels, + ret = avcodec_fill_audio_frame(fFrame, fCodecContext->channels, fCodecContext->sample_fmt, (const uint8_t *) buffer, bufferSize, 1); - if (ret != 0) + if (ret != 0) { + TRACE(" avcodec_encode_audio() failed filling data: %ld\n", ret); return B_ERROR; + } /* Set the presentation time of the frame */ - frame.pts = (bigtime_t)(fFramesWritten * 1000000LL + fFrame->pts = (bigtime_t)(fFramesWritten * 1000000LL / fInputFormat.u.raw_audio.frame_rate); - fFramesWritten += frame.nb_samples; + fFramesWritten += fFrame->nb_samples; - ret = avcodec_send_frame(fCodecContext, &frame); + ret = avcodec_send_frame(fCodecContext, fFrame); gotPacket = avcodec_receive_packet(fCodecContext, &packet) == 0; } else { // If called with NULL, ask the encoder to flush any buffers it may @@ -570,8 +569,8 @@ AVCodecEncoder::_EncodeAudio(const uint8* buffer, size_t bufferSize, gotPacket = (ret == 0); } - if (buffer && frame.extended_data != frame.data) - av_freep(&frame.extended_data); + if (buffer && fFrame->extended_data != fFrame->data) + av_freep(&fFrame->extended_data); if (ret != 0) { TRACE(" avcodec_encode_audio() failed: %s\n", strerror(ret));