[MPlayer-dev-eng] [PATCH] Add size based support for -endpos in MPlayer

Clément Bœsch ubitux at gmail.com
Sat Jun 11 16:21:32 CEST 2011


On Wed, Jan 05, 2011 at 04:22:12PM +0100, Reimar Döffinger wrote:
[...]

> > -
> > -// FIXME: add size based support for -endpos
> > - if (end_at.type == END_AT_TIME &&
> > -         !frame_time_remaining && end_at.pos <= mpctx->sh_video->pts)
> > + if (!frame_time_remaining &&
> > +     ((end_at.type == END_AT_TIME &&       mpctx->sh_video->pts >= end_at.pos) ||
> > +      (end_at.type == END_AT_SIZE && stream_tell(mpctx->stream) >= end_at.pos)))
> 
> In principle fine, but maybe it's time to factor out this duplicated
> code?
> E.g. (not valid C, too lazy to look up the types)
> static int is_at_end(&end_at, mpctx) {
>     switch (end_at->type)
>     {
>     case END_AT_TIME:
>         return mpctx->sh_video->pts >= end_at->pos;
>     ...
>     }
>     return 0;
> }
> 
> Particularly when extending this the switch is far more readable than
> the if, too.

Patch attached. I'll apply it in 3 days.

-- 
Clément B.
-------------- next part --------------
Index: mplayer.c
===================================================================
--- mplayer.c	(revision 33579)
+++ mplayer.c	(working copy)
@@ -1801,6 +1801,18 @@
            audio_out->get_delay();
 }
 
+static int is_at_end(MPContext *mpctx, m_time_size_t *end_at)
+{
+    switch (end_at->type) {
+    case END_AT_TIME:
+        return (mpctx->sh_video ? mpctx->sh_video->pts
+                                : mpctx->sh_audio->pts) >= end_at->pos;
+    case END_AT_SIZE:
+        return stream_tell(mpctx->stream) >= end_at->pos;
+    }
+    return 0;
+}
+
 static int check_framedrop(double frame_time)
 {
     // check for frame-drop:
@@ -3802,8 +3814,7 @@
                 if (!quiet)
                     print_status(a_pos, 0, 0);
 
-                if (end_at.type == END_AT_TIME && end_at.pos < a_pos ||
-                    end_at.type == END_AT_SIZE && end_at.pos < stream_tell(mpctx->stream))
+                if (is_at_end(mpctx, &end_at))
                     mpctx->eof = PT_NEXT_ENTRY;
                 update_subtitles(NULL, a_pos, mpctx->d_sub, 0);
                 update_osd_msg();
@@ -3923,9 +3934,7 @@
                         mpctx->eof = PT_NEXT_ENTRY;
                 }
 
-                if (!frame_time_remaining &&
-                    ((end_at.type == END_AT_TIME && mpctx->sh_video->pts >= end_at.pos) ||
-                     (end_at.type == END_AT_SIZE && stream_tell(mpctx->stream) >= end_at.pos)))
+                if (!frame_time_remaining && is_at_end(mpctx, &end_at))
                     mpctx->eof = PT_NEXT_ENTRY;
             } // end if(mpctx->sh_video)
 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/attachments/20110611/2c592d30/attachment.asc>


More information about the MPlayer-dev-eng mailing list