[MPlayer-users] how to "step backforward" ?
belcampo
belcampo at zonnet.nl
Wed May 27 11:54:23 CEST 2009
Phil Rhodes wrote:
>> stepping forward is rather simple, it is 'normal'play at non-standard
>> speed.
>> Going back is difficult in the sense you have to calculate several
>> frames plus/minus the differences to 'know' how that former frame has
>> looked.
>
> Precisely.
>
> However, "several frames" can actually be many tens or of frames, maybe
> a hundred frames in some edge circumstances, and with intensive codecs
> that's a very big job.
Do you know any, where I-Frames/Key-frames are more then 12 (PAL) or 15
(NTSC) between. Where are larger GOP-sizes used ??
In mythtv the internal-player is based on ffplay and that is also used
to 'edit-out' commercials. It is able to step back frame by frame, or
forward/backward to the next I-Frame. But it therefore needs/uses a
database with a 'seektable'
>
> As far as I can see this boils down to two scenarios:
>
> - We want a frame we have played recently, which is probably the most
> common situation. Most of the time, stepping backwards is used to find a
> specific frame of interest, through which we will probably have recently
> played - you wait till you see what you want, hit "pause", then step
> back until you find it. This situation is probably best handled by
> caching frames.
>
> Or:
>
> - We want a frame we haven't played recently. This could happen with DVD
> chapters or if you stepped through a long video with the arrow keys, and
> then tried to framestep back before the start of that part of the video.
> Regardless of the circumstances the only solution is brute force,
> although if you are at frame 100 and you want frame 99, if the last
> keyframe was 50, you have then mandatorially decoded frames 50-99 and
> should be able to revert to the cached-frame strategy. Virtualdub does
> not do this, which is what moves it from "slow" to "really freaking
> slow", because it seems to decode from last keyframe regardless of
> whether it just passed through the target frame enroute to another.
>
> Refinements:
>
> If you'd paused at frame 100, decoded from a keyframe at frame 50 all
> the way up to 100 so as to step back through it, you could implement a
> strategy such that as the user neared frame 50, and it looked like you
> were going to need frames below 50, you could start preemptively
> decoding from 50 back down to the previous keyframe.
>
> With some codecs, you could probably greatly optimise memory consumption
> by creating a smart caching strategy to avoid needing to store entire
> decoded frames. For instance, if you had a chunk of image that was used
> in frame X and then in every frame up to the target frame at X+50, you'd
> only need to store that chunk of image once. This would effectively mean
> storing a partially-decoded version of the footage, enough to make
> realtime reverse play possible, and could potentially get very complex
> and would be codec specific, as well as subject to greater or lesser
> effectiveness depending on image content. I may be talking drivel here.
>
> Do I know how to do any of this? Only in theory, I'm afraid.
>
> P
> _______________________________________________
> MPlayer-users mailing list
> MPlayer-users at mplayerhq.hu
> https://lists.mplayerhq.hu/mailman/listinfo/mplayer-users
More information about the MPlayer-users
mailing list