[FFmpeg-devel] [PATCH] make av_get_packet return AVERROR_EOF if appropriate

Reimar Döffinger Reimar.Doeffinger
Thu Oct 1 19:15:06 CEST 2009


On Thu, Oct 01, 2009 at 06:44:04PM +0200, Reimar D?ffinger wrote:
> On Thu, Oct 01, 2009 at 06:25:13PM +0200, Reimar D?ffinger wrote:
> > Hello,
> > I think av_get_packet should return an error (AVERROR_EOF) when it read nothing
> > at all due to reaching EOF.
> > I think this will also simplify my attempts to clean up the raw read
> > functions to be more consistent/whatever.
> 
> This is the actual change:
> Index: libavformat/utils.c
> ===================================================================
> --- libavformat/utils.c (revision 20105)
> +++ libavformat/utils.c (working copy)
> @@ -269,6 +269,8 @@
>      pkt->pos= url_ftell(s);
>  
>      ret= get_buffer(s, pkt->data, size);
> +    if (!ret && url_feof(s))
> +        ret = AVERROR_EOF;
>      if(ret<=0)
>          av_free_packet(pkt);
>      else
>  
> This seems to also change seek tests, I still have to find out if the
> changes are as intended.
> Another question is if maybe get_buffer should be changed to behave like
> this...

I propose this change to get_buffer:
Index: libavformat/aviobuf.c
===================================================================
--- libavformat/aviobuf.c       (revision 20105)
+++ libavformat/aviobuf.c       (working copy)
@@ -415,6 +415,8 @@
             size -= len;
         }
     }
+    if (size1 == size && url_feof(s))
+        return AVERROR_EOF;
     return size1 - size;
 }
 

It causes this change to the seek regressions, which is actually correct
since currently the demuxers detect EOF too late and produce a senseless
0-size packet before realizing eof is reached (aiff and au demuxers are
affected).
This hopefully demonstrates that my main motivation is justified:
handling EOF is too much of a pain currently so it tends to not be done
right, making it so that EOF can be handled like a normal error (or
trivially translated to AVERROR(EIO)) at least in some cases hopefully
will improve things.
Index: tests/seek.regression.ref
===================================================================
--- tests/seek.regression.ref   (revision 20105)
+++ tests/seek.regression.ref   (working copy)
@@ -2521,51 +2521,51 @@
 ret: 0 st:-1 ts:-1.000000 flags:0
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:54 size:4096 flags:1
 ret: 0 st:-1 ts:1.894167 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:167120 size:0 flags:1
+ret:-32
 ret: 0 st: 0 ts:0.788345 flags:0
 ret: 0 st: 0 dts:0.788345 pts:0.788345 pos:69586 size:4096 flags:1
 ret: 0 st: 0 ts:-0.317506 flags:1
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:54 size:4096 flags:1
 ret: 0 st:-1 ts:2.576668 flags:0
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:227316 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:1.470835 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:129782 size:0 flags:1
+ret:-32
 ret: 0 st: 0 ts:0.365011 flags:0
 ret: 0 st: 0 dts:0.365011 pts:0.365011 pos:32248 size:4096 flags:1
 ret: 0 st: 0 ts:-0.740839 flags:1
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:54 size:4096 flags:1
 ret: 0 st:-1 ts:2.153336 flags:0
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:189978 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:1.047503 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:92444 size:0 flags:1
+ret:-32
 ret: 0 st: 0 ts:-0.058322 flags:0
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:54 size:4096 flags:1
 ret: 0 st: 0 ts:2.835828 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:250174 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:1.730004 flags:0
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:152640 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:0.624171 flags:1
 ret: 0 st: 0 dts:0.624172 pts:0.624172 pos:55106 size:4096 flags:1
 ret: 0 st: 0 ts:-0.481655 flags:0
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:54 size:4096 flags:1
 ret: 0 st: 0 ts:2.412494 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:212836 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:1.306672 flags:0
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:115302 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:0.200839 flags:1
 ret: 0 st: 0 dts:0.200839 pts:0.200839 pos:17768 size:4096 flags:1
 ret: 0 st: 0 ts:-0.904989 flags:0
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:54 size:4096 flags:1
 ret: 0 st: 0 ts:1.989184 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:175500 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:0.883340 flags:0
 ret: 0 st: 0 dts:0.883333 pts:0.883333 pos:77964 size:4096 flags:1
 ret: 0 st:-1 ts:-0.222493 flags:1
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:54 size:4096 flags:1
 ret: 0 st: 0 ts:2.671678 flags:0
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:235696 size:0 flags:1
+ret:-32
 ret: 0 st: 0 ts:1.565850 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:138162 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:0.460008 flags:0
 ret: 0 st: 0 dts:0.460000 pts:0.460000 pos:40626 size:4096 flags:1
 ret: 0 st:-1 ts:-0.645825 flags:1
@@ -2686,51 +2686,51 @@
 ret: 0 st:-1 ts:-1.000000 flags:0
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:24 size:4096 flags:1
 ret: 0 st:-1 ts:1.894167 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:167090 size:0 flags:1
+ret:-32
 ret: 0 st: 0 ts:0.788345 flags:0
 ret: 0 st: 0 dts:0.788345 pts:0.788345 pos:69556 size:4096 flags:1
 ret: 0 st: 0 ts:-0.317506 flags:1
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:24 size:4096 flags:1
 ret: 0 st:-1 ts:2.576668 flags:0
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:227286 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:1.470835 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:129752 size:0 flags:1
+ret:-32
 ret: 0 st: 0 ts:0.365011 flags:0
 ret: 0 st: 0 dts:0.365011 pts:0.365011 pos:32218 size:4096 flags:1
 ret: 0 st: 0 ts:-0.740839 flags:1
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:24 size:4096 flags:1
 ret: 0 st:-1 ts:2.153336 flags:0
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:189948 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:1.047503 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:92414 size:0 flags:1
+ret:-32
 ret: 0 st: 0 ts:-0.058322 flags:0
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:24 size:4096 flags:1
 ret: 0 st: 0 ts:2.835828 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:250144 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:1.730004 flags:0
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:152610 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:0.624171 flags:1
 ret: 0 st: 0 dts:0.624172 pts:0.624172 pos:55076 size:4096 flags:1
 ret: 0 st: 0 ts:-0.481655 flags:0
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:24 size:4096 flags:1
 ret: 0 st: 0 ts:2.412494 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:212806 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:1.306672 flags:0
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:115272 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:0.200839 flags:1
 ret: 0 st: 0 dts:0.200839 pts:0.200839 pos:17738 size:4096 flags:1
 ret: 0 st: 0 ts:-0.904989 flags:0
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:24 size:4096 flags:1
 ret: 0 st: 0 ts:1.989184 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:175470 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:0.883340 flags:0
 ret: 0 st: 0 dts:0.883333 pts:0.883333 pos:77934 size:4096 flags:1
 ret: 0 st:-1 ts:-0.222493 flags:1
 ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:24 size:4096 flags:1
 ret: 0 st: 0 ts:2.671678 flags:0
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:235666 size:0 flags:1
+ret:-32
 ret: 0 st: 0 ts:1.565850 flags:1
-ret: 0 st: 0 dts:-209146758205323.718750 pts:-209146758205323.718750 pos:138132 size:0 flags:1
+ret:-32
 ret: 0 st:-1 ts:0.460008 flags:0
 ret: 0 st: 0 dts:0.460000 pts:0.460000 pos:40596 size:4096 flags:1
 ret: 0 st:-1 ts:-0.645825 flags:1




More information about the ffmpeg-devel mailing list