Le decadi 20 thermidor, an CCXXIII, Michał Kurowski a écrit :
> I'm developing a mobile music player and I'm planning to use ffmpeg for
> some of the audio decoding. The decoder has been written some time ago,
> but it seems to work ok (music plays without issues). Except for APE
> files. The result is as if the decoder was seeking ~0.8 second forward
> after reading each packet, so that a 4 minute track plays in a couple of
> seconds. Decoding of one stereo 96kHz APE file results in frames with
> 18432 bytes of data each (4608 samples, or 48 ms), but the consecutive
> timestamps are as follows:

>               ret = av_read_frame(af->mFormatCtx, &(af->mPacket));
>               if (ret < 0)
>               {
>                       return ret;
>               }
> 
>           if (af->mPacket.stream_index == af->mAudioStream)
>           {
>                   avcodec_get_frame_defaults(frame);
>                   got_frame = 0;
>                   ret = avcodec_decode_audio4(af->mCodecCtx, frame, 
> &got_frame, &(af->mPacket));
>                   if (ret < 0)
>                   {
>                       continue;
>                   }
> 
>                   if (got_frame)
>                   {
>                       af->mTimestamp = (float)(af->mPacket.pts * 
> af->mDTimebase);
>                       return 0;
>                   }
>           }
>            av_free_packet(&(af->mPacket));
>       }

Unlike video packets, audio packets can decode into multiple frames: you
have to get the return value of avcodec_decode_audio4(), remove that many
bytes from the beginning of the packet, and re-call avcodec_decode_audio4()
until all the packet have been consumed.

Regards,

-- 
  Nicolas George

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to