[MPlayer-dev-eng] fix for using -hr-edl-seek and -ovc copy with mencoder
Guillaume POIRIER
poirierg at gmail.com
Sun Mar 18 18:18:00 CET 2007
Oded, could you look at the attached patch? EDL is your baby....
On 2/1/07, Trent Piepho <xyzzy at speakeasy.org> wrote:
> If you try to use -hr-edl-seek and the EDL list with mencoder and -ovc copy,
> mencoder will hang at the end of a edl region.
>
> The problem is in the slowseek() function in mencoder.c. In copy mode, it
> will try to wait until it reaches a key-frame to break out of the seek
> loop.
>
> If it has reached the end of the edl region, it sets
> frame_data->already_read to 1. If already_read is 1, it doesn't read a new
> frame at the start of the loop. The effect is that when it reaches the end
> of the EDL region, it stops reading new frames and tests the same frame
> over and over waiting for it to become a keyframe.
>
> I'm attaching a patch to fix it. All that needs to be done is not set
> already_read until seeking is really done. The point of already_read
> appears to be to tell the rest of mencoder not to read a new frame, but to
> use the last frame that the edl seek code read.
> _______________________________________________
> MPlayer-dev-eng mailing list
> MPlayer-dev-eng at mplayerhq.hu
> http://lists.mplayerhq.hu/mailman/listinfo/mplayer-dev-eng
>
>
-------------- next part --------------
Index: mencoder.c
===================================================================
--- mencoder.c (revision 22100)
+++ mencoder.c (working copy)
@@ -1684,8 +1684,11 @@
a_pts = forward_audio(sh_video->pts - frame_data->frame_time + audio_delay, d_audio, mux_a);
if (done) {
- frame_data->already_read = 1;
- if (!framecopy || (sh_video->ds->flags & 1)) return 1;
+ /* In copy mode, wait for a keyframe before stopping */
+ if (!framecopy || (sh_video->ds->flags & 1)) {
+ frame_data->already_read = 1;
+ return 1;
+ }
}
if (sh_video->pts >= end_pts) done = 1;
More information about the MPlayer-dev-eng
mailing list