[FFmpeg-devel] Patch for chained OGG files

Måns Rullgård mans
Tue Apr 13 00:14:50 CEST 2010


David Conrad <lessen42 at gmail.com> writes:

> On Apr 3, 2010, at 12:37 PM, M?ns Rullg?rd wrote:
>
>> Cyril Zorin <cyril.zorin at gmail.com> writes:
>> 
>>> Hi!
>>> 
>>> Attached is a patch that lets ffmpeg handle chained OGG files, often used in
>>> internet radio streams. Let me know if there's anything to change.
>>> 
>>> +static int
>>> +ogg_read_packet (AVFormatContext * s, AVPacket * pkt)
>>> +{
>>> +  const int result = ogg_read_packet_internal(s, pkt);
>>> +  if (result >= 0)
>>> +    return result;
>>> +
>>> +  ogg_read_close(s);
>>> +  memset(s->priv_data, 0, sizeof(struct ogg));
>>> +  if (ogg_read_header(s, 0) < 0)
>>> +    return AVERROR(EIO);
>>> +
>>> +  return ogg_read_packet_internal(s, pkt);
>>> +}
>> 
>> This won't work if the parameters of the new set of streams don't
>> exactly match the old.  Libavformat simply doesn't support randomly
>> changing streams halfway through a file.
>
> I'd imagine that the most common (only?) usage of chained ogg is to
> update metadata mid-stream for streaming radio,

That's probably true, but the spec allows _anything_.

> so only really working for this case seems OK to me.

We should at least make sure it fails gracefully in other cases.

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list