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
signature.asc
Description: Digital signature
_______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
