>>>  Off-by-one in the video handling of the avformat producer.

>> 
>>  Nice! It looks like the module has been useful already. I Hope I didn't 
> just create a whole bunch of work for you :)
>> 
> 
> I digged into that problem last night, found the culprit, and made a
> quick change to fix it. However, as I suspected might be the case, it
> created a huge regression for some other cases, namely your mkv and
> mov tests in the originating post. I am talking ~300ms off. I have put
> a huge amount of effort into a/v sync and seeking over the years, and
> I am very reluctant to make changes due to the large amount of testing
> to balance requirements and get it right. Here is a quick rundown of
> the requirements:
> 
> - large variety of formats/codecs
> - large variety of files (tools and devices used to produce them, each
> with a variety of versions)
> - a variety of ffmpeg and now libav versions
> As if that amount of diversity alone is not enough:
> - frame accurate and fast seeking where possible, including AVCHD
> - live (network stream and device) input (no seeking required)
> - large runs with no memory leaks
> - image caching to support filters such as YADIF and telecide that
> need previous and next frames
> - large numbers of files in a composition without consuming RAM or file 
> handles
> - a special mode to decode all audio streams in a mux
> - various combinations of the above
> - cross-platform
> - very limited human resources to develop and support
> 
> All I can say is thank goodness for FFmpeg and libav without which
> none of this would be possible, but there is still a lot of work for
> MLT to make effective and comprehensive usage of their API. I do not
> plan to revisit this task in the near term. With that said...

I hear that. Don't forget:
- maintain compatibility with two forks of the libav/ffmpeg project
- maintain compatibilty with the rapidly changing API
- maintain compatibility with all known legacy versions of the libav suite

I didn't mean to trivialize the work you've done. Just keeping up with the API 
must make you feel a little bit like Sisyphus. And I don't think that anything 
has to be done immediately. The current performance is doing a good job of 
meeting many people's needs. 

>>  My plan was to try to script some automated tests to run weekly on the 
> build server. That way we would know if any avsync regressions occurred. But 
> it 
> didn't occur to me that we might have to fix up some producers/consumers. My 
> plan was to use +/-3ms as my pass/fail criteria (hence my previous comment). 
> But 
> maybe it would make more sense to use one frame duration - at least until 
> everything gets dialed in.
>> 
> 
> I would like to develop a plan to test for regression against a
> baseline so I can try to make a change or improvement and have more
> automated testing to verify it. Starting with the avformat producer,
> we need a set of reference inputs, but we do not have them, and it
> does not make sense to produce them with the MLT avformat consumer.
> But we can use blipflash producer to generate a raw DV and verify that
> with dvthumbs.c. Then, we can use the ffmpeg command line tool to
> generate a variety of encodings. We still do not know if those are
> correct, but they do provide a best effort baseline against which we
> can measure deviations to check for regressions, analyze trends, and
> investigate the hotspots (popular or important formats that show a
> large offset).

I like the idea of tracking against a baseline. Let me capture some data and 
come up with a proposal. We just need to find some success criteria that will 
be tight enough so that we know when a regression has occurred. I'll chip away 
at it for a couple of weeks and get back to you.

>>  When you run "melt -silent", do you use CTL-C to stop it? Is 
> there any way to tell melt to exit after x frames?
>> 
> 
> yes, ctrl+c. If you want to go a certain number of frames set an out
> point on the producer and termnate_on_pause=1 on the consumer, but the
> consumer has to be written to exit the consumer thread's loop when
> that property is set.

Ah yes. I did implement terminate_on_pause in the blipflash consumer. But I 
didn't know what it was for. :$

Thanks,
~BM


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Mlt-devel mailing list
Mlt-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mlt-devel

Reply via email to