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

Justin Ruggles justin.ruggles
Sun Jun 21 23:03:22 CEST 2009


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.

-Justin

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-oggenc-add-support-for-Ogg-Speex-muxing.patch
Type: text/x-patch
Size: 5445 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090621/317ae20a/attachment.bin>



More information about the ffmpeg-devel mailing list