[FFmpeg-devel] [PATCH] Set correct frame_size for Speex decoding

Justin Ruggles justin.ruggles
Sat Aug 1 01:34:00 CEST 2009


Michael Niedermayer wrote:
> On Fri, Jul 31, 2009 at 06:48:59PM -0400, Justin Ruggles wrote:
>> Michael Niedermayer wrote:
>>> On Thu, Jul 30, 2009 at 07:25:17PM -0400, Justin Ruggles wrote:
>>>> Justin Ruggles wrote:
>>>>> Hi,
>>>>>
>>>>> Currently AVCodecContext.frame_size is not set correctly for Speex.
>>>>> Since the Ogg and FLV demuxers and the libspeex decoder handle a full
>>>>> packet as a single frame, frame_size should be set to the Speex
>>>>> frame_size * frames_per_packet.
>>>>>
>>>>> If frames_per_packet is not specified in the Speex header, or if there
>>>>> is no header, it can be determined after decoding the first packet.
>>>>>
>>>>> Stream copy is not implemented yet for Speex, but once it is, a parser
>>>>> will be able to set all the stream parameters instead of the decoder
>>>>> when the header is missing or incomplete.
>>>> ping.
>>> it might be helpfull if you say who you expect to review this
>> In general, I'm looking for an ok on having lavf and lavc treat a whole
>> Speex packet as a single frame.  After considering and trying to code
>> the split-then-join idea it did not seem like a very clean solution, and
>> it is not really necessary.  This is my general plan:
> 
> which values of frames_per_packet does each container allow?
> that is each container that supports speex

AFAIK, Ogg is only limited by the Speex header, which supports up to
INT32_MAX. (libspeex reads the 4-byte value in the header as a signed int32)

For FLV, it's unclear.  Here is a quote from Art:
> Here's what I found.  Set the speex frames per packet all the way from 1 up
> to 8, and it appears they all now work with Flash Player (I erroneously
> reported that 1 would not work before, but at least with the latest version
> that is not the case).  Setting 9 frames per packet causes flash player to
> start stuttering.  Set 10 or more frames per packet causes flash player to
> crash, bringing down the browser with it.


The speexenc commandline program allows encoding between 1 and 10 frames
per packet.

-Justin



More information about the ffmpeg-devel mailing list