[FFmpeg-cvslog] r22197 - trunk/libavformat/matroskaenc.c
Måns Rullgård
mans
Thu Mar 4 20:42:05 CET 2010
Reimar D?ffinger <Reimar.Doeffinger at gmx.de> writes:
> On Thu, Mar 04, 2010 at 06:12:42PM +0000, M?ns Rullg?rd wrote:
>> Reimar D?ffinger <Reimar.Doeffinger at gmx.de> writes:
>>
>> > On Thu, Mar 04, 2010 at 09:53:01AM +0100, conrad wrote:
>> >> Author: conrad
>> >> Date: Thu Mar 4 09:53:00 2010
>> >> New Revision: 22197
>> >>
>> >> Log:
>> >> Attempt seeking to write EBML master sizes even if streamed
>> >>
>> >> Most EBML masters are much smaller than IO_BUFFER_SIZE and thus the size
>> >> can be updated. This makes parsing the resulting files easier.
>> >>
>> >> Modified:
>> >> trunk/libavformat/matroskaenc.c
>> >>
>> >> Modified: trunk/libavformat/matroskaenc.c
>> >> ==============================================================================
>> >> --- trunk/libavformat/matroskaenc.c Thu Mar 4 05:58:43 2010 (r22196)
>> >> +++ trunk/libavformat/matroskaenc.c Thu Mar 4 09:53:00 2010 (r22197)
>> >> @@ -218,11 +218,8 @@ static void end_ebml_master(ByteIOContex
>> >> {
>> >> int64_t pos = url_ftell(pb);
>> >>
>> >> - // leave the unknown size for masters when streaming
>> >> - if (url_is_streamed(pb))
>> >> + if (url_fseek(pb, master.pos - master.sizebytes, SEEK_SET) < 0)
>> >> return;
>> >
>> > Is this "misuse" of fseek covered by our API specification?
>> > It assumes that seeking with url_is_streamed does never have a
>> > negative effect, however I'm not sure it couldn't be horribly
>> > slow or it might not keep the state the same or it might be possible
>> > to seek backward but seeking forward to the original position might fail...
>>
>> Seeking within the buffer is always fast. The seek function of the
>> underlying protocol is only invoked if the target is outside the buffer.
>
> I don't understand what that has to do with what I said at all.
> There's nothing in the documented API that would allow you to assume
> that url_fseek will not seek outside the buffer if url_is_streamed
> is true.
So fix the documentation. I don't understand what you are complaining
about.
> So above code adds the assumption that seeking backwards will be either
> reasonably fast or fail even in the url_is_streamed case, while the
> documentation would not even give someone implementing a protocol any hint
> about this - they might reasonably say "well, seek is so horribly slow
> we absolutely need avoid it, so we set is_streamed, however we would still
> be able to somehow play formats that absolutely require seeking, so we implement
> it anyway". If they wanted it to work well with the matroska muxer too they
> now would have to add a special hack...
The protocol seek function _is never called_ in this case. No, the
documentation of url_fseek() doesn't mention this. Patches welcome.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-cvslog
mailing list