10 Jul 2021, 03:10 by roman.bera...@prusa3d.cz:

> Frame size of Opus stream was previously presumed here to be 960 samples
> (20ms), however sizes of 120, 240, 480, 1920, and 2880 are also allowed.
> It can also alter on a per-packet basis and even multiple frames may be
> present in a single packet according to the specification, for the sake
> of simplicity however, let us assume that this doesn't occur.
>

Actually 120ms frames are the maximum, so 5760 samples, but that's
irrelevant to the patch.
 

>  if (pb->seekable & AVIO_SEEKABLE_NORMAL) {
>  int64_t file_size = avio_tell(pb);
>  
>  avio_seek(pb, caf->data, SEEK_SET);
>  avio_wb64(pb, file_size - caf->data - 8);
> -        avio_seek(pb, file_size, SEEK_SET);
>  if (!par->block_align) {
> +            int packet_size = samples_per_packet(par->codec_id, 
> par->channels, par->block_align);
> +            if (!packet_size) {
> +                packet_size = st->duration / (caf->packets - 1);
> +                avio_seek(pb, FRAME_SIZE_OFFSET, SEEK_SET);
> +                avio_wb32(pb, packet_size);
> +            }
> +            avio_seek(pb, file_size, SEEK_SET);
>  ffio_wfourcc(pb, "pakt");
>  avio_wb64(pb, caf->size_entries_used + 24);
>  avio_wb64(pb, caf->packets); ///< mNumberPackets
> -            avio_wb64(pb, caf->packets * samples_per_packet(par->codec_id, 
> par->channels, par->block_align)); ///< mNumberValidFrames
> +            avio_wb64(pb, caf->packets * packet_size); ///< 
> mNumberValidFrames
>  avio_wb32(pb, 0); ///< mPrimingFrames
>  avio_wb32(pb, 0); ///< mRemainderFrames
>  avio_write(pb, caf->pkt_sizes, caf->size_entries_used);
>

This doesn't move the pointer back to the file end if par->block_align is set.
I think that's fine though, since the function writes the trailer, which should
mean that nothing more needs to be written.
Patch LGTM. But please, someone yell at Apple to support Opus in MP4,
WebM and OGG, as terrible as that is.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to