[FFmpeg-devel] [PATCH] speex in ogg muxer

Baptiste Coudurier baptiste.coudurier
Tue Oct 13 01:54:58 CEST 2009


On 10/12/2009 4:51 PM, Justin Ruggles wrote:
> Baptiste Coudurier wrote:
>
>> Justin Ruggles wrote:
>>> Baptiste Coudurier wrote:
>>>> Hi Justin,
>>>>
>>>> Justin Ruggles wrote:
>>>>> Hi,
>>>>>
>>>>> This patch adds speex support to the ogg muxer.  It basically does the
>>>>> same thing as Ogg/FLAC, in that the 1st packet is a global header from
>>>>> extradata and the 2nd packet is vorbiscomment metadata.
>>>>>
>>>>> This seems to work just fine for speex-to-speex stream copy, but
>>>>> probably would not work for flv-to-speex because flv doesn't to have any
>>>>> speex extradata from what I can tell.  I guess a header could be
>>>>> constructed, but that would be a separate patch to the flv demuxer.
>>>>>
>>>>> This patch is a precursor to libspeex encoding support, which I'll be
>>>>> sending shortly.
>>>>>
>>>>> -Justin
>>>>>
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>> Index: libavformat/oggenc.c
>>>>> ===================================================================
>>>>> --- libavformat/oggenc.c	(revision 19244)
>>>>> +++ libavformat/oggenc.c	(working copy)
>>>>> @@ -104,17 +125,39 @@
>>>>>       bytestream_put_byte(&p, 0x00); // streaminfo
>>>>>       bytestream_put_be24(&p, 34);
>>>>>       bytestream_put_buffer(&p, streaminfo, FLAC_STREAMINFO_SIZE);
>>>>> -    oggstream->header_len[1] = 1+3+4+strlen(vendor)+4;
>>>>> -    oggstream->header[1] = av_mallocz(oggstream->header_len[1]);
>>>>> -    p = oggstream->header[1];
>>>>> +    p = ogg_write_vorbiscomment(4, bitexact,&oggstream->header_len[1]);
>>>>> +    if (!p)
>>>>> +        return -1;
>>>> AVERROR(ENOMEM)
>>> fixed.
>>>
>>>>> @@ -144,6 +188,12 @@
>>>>>                   av_log(s, AV_LOG_ERROR, "Extradata corrupted\n");
>>>>>                   av_freep(&st->priv_data);
>>>>>               }
>>>>> +        } else if (st->codec->codec_id == CODEC_ID_SPEEX) {
>>>>> +            if (ogg_build_speex_headers(st->codec, oggstream,
>>>>> +                                        st->codec->flags&  CODEC_FLAG_BITEXACT)<  0) {
>>>>> +                av_log(s, AV_LOG_ERROR, "error writing Speex headers\n");
>>>>> +                av_freep(&st->priv_data);
>>>>> +            }
>>>> return error here with the return code of the func :>
>>>> Yes, it seems flac miss it too, this needs a fix.
>>>>
>>>> patch fine otherwise, maybe a micro bump for avformat would be nice.
>>> fixed. new patch attached. the new patch also differs in that it
>>> overrides the extra_headers field in the Speex header to be 0 since only
>>> the 2 required headers are written.
>>>
>>
>> patch ok if it works :>
>
> Ok, now I'm back here again after 4 months.  It works.  Updated patch
> against current SVN.

Patch ok if it sill works :)

-- 
Baptiste COUDURIER                              GnuPG Key Id: 0x5C1ABAAA
Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
checking for life_signs in -lkenny... no



More information about the ffmpeg-devel mailing list