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

Justin Ruggles justin.ruggles
Tue Oct 13 01:51:44 CEST 2009


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.

-Justin


-------------- next part --------------
A non-text attachment was scrubbed...
Name: ogg_speex_muxer_3.patch
Type: text/x-diff
Size: 5138 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20091012/37c216f0/attachment.patch>



More information about the ffmpeg-devel mailing list