[Libav-user] How to read in planar data?
Mark McKay
mark at kitfox.com
Sat Dec 7 00:37:55 EET 2019
I should have mentioned that the crash was happening at the line
_audioBytes.append((const char *)aFrame->data[ch] + i *
sizeof(float), sizeof(float));
This happens after 590 packets have been read.
On 2019-12-06 17:05, Mark McKay wrote:
> Just reposting with properly formatted code:
>
> void AudioReader::loadAudioFrame(AVPacket& packet)
> {
> int err = avcodec_send_packet(aCodecCtx, &packet);
> if (err < 0)
> {
> qDebug("Error sending packet to decoder");
> return;
> }
>
> int numChannels = aCodecCtx->channels;
> while (err >= 0)
> {
> err = avcodec_receive_frame(aCodecCtx, aFrame);
> if (err == AVERROR(EAGAIN) || err == AVERROR_EOF)
> return;
>
> if (err < 0)
> {
> qDebug() << "Error decoding packet: " << err;
> return;
> }
>
> int bytesPerSample =
> av_get_bytes_per_sample(aCodecCtx->sample_fmt);
> if (bytesPerSample < 0) {
> /* This should not occur, checking just for paranoia */
> fprintf(stderr, "Failed to calculate data size\n");
> exit(1);
> }
>
>
> int bufferSize = av_samples_get_buffer_size(NULL,
> aCodecCtx->channels,
> aFrame->nb_samples,
> aCodecCtx->sample_fmt,
> 1);
>
> switch(aCodecCtx->sample_fmt)
> {
> ...
> case AV_SAMPLE_FMT_FLTP:
> {
> //Serial format - change to interleaved order
> for (int i = 0; i < aFrame->nb_samples; i++)
> {
> for (int ch = 0; ch < numChannels; ch++)
> {
> _audioBytes.append((const char *)aFrame->data[ch] +
> i * sizeof(float), sizeof(float));
> }
> }
> break;
> }
> }
> }
>
>
>
> On 2019-12-06 15:55, Mark McKay wrote:
>
>> I'm having trouble trying to figure out how to read in planar data. I
>> have a file that has data in the AV_SAMPLE_FMT_FLTP format with two
>> channels. Below is my attempt to read in the data. This will crash
>> with a memory problem if I try to read in the second channel (but it
>> will complete if I bypass the second and just read from channel 0).
>> Am I doing this right?
> _______________________________________________
> Libav-user mailing list
> Libav-user at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/libav-user
>
> To unsubscribe, visit link above, or email
> libav-user-request at ffmpeg.org with subject "unsubscribe".
More information about the Libav-user
mailing list