[FFmpeg-devel] [PATCH] Use AVERROR(ENOSYS) when it makes sense

Howard Chu hyc
Mon Apr 12 20:32:07 CEST 2010


Michael Niedermayer wrote:
> On Mon, Apr 12, 2010 at 12:42:05AM +0200, Stefano Sabatini wrote:
>> On date Sunday 2010-04-11 23:33:15 +0200, Michael Niedermayer encoded:
>>> On Sun, Apr 11, 2010 at 10:13:30PM +0200, Stefano Sabatini wrote:
>>>> On date Saturday 2010-04-03 13:46:24 +0200, Stefano Sabatini encoded:
>>>>> Hi, as in subject.
>>>>> --
>>>>> FFmpeg = Fucking and Fabulous Moronic Peaceful Elitarian Genius
>>>>
>>>>>  From e66cec2193ee289f742120f92db17f33e7651fba Mon Sep 17 00:00:00 2001
>>>>> From: Stefano Sabatini<stefano.sabatini-lala at poste.it>
>>>>> Date: Tue, 16 Mar 2010 22:48:37 +0100
>>>>> Subject: [PATCH 2/5] Make url_seek() return AVERROR(ENOSYS) rather than AVERROR(EPIPE) in
>>>>>   the case where the seek operation is not defined in the protocol
>>>>>   handler.
>>>>>
>>>>> ---
>>>>>   libavformat/avio.c |    2 +-
>>>>>   1 files changed, 1 insertions(+), 1 deletions(-)
>>>>>
>>>>> diff --git a/libavformat/avio.c b/libavformat/avio.c
>>>>> index af9e049..3fb64d1 100644
>>>>> --- a/libavformat/avio.c
>>>>> +++ b/libavformat/avio.c
>>>>> @@ -201,7 +201,7 @@ int64_t url_seek(URLContext *h, int64_t pos, int whence)
>>>>>       int64_t ret;
>>>>>
>>>>>       if (!h->prot->url_seek)
>>>>> -        return AVERROR(EPIPE);
>>>>> +        return AVERROR(ENOSYS);
>>>>>       ret = h->prot->url_seek(h, pos, whence&  ~AVSEEK_FORCE);
>>>>>       return ret;
>>>>>   }
>>>>> --
>>>>> 1.7.0
>>>>>
>>>>
>>>>>  From f11131bc3a2e08f46b291e4fa849e7e8c642c757 Mon Sep 17 00:00:00 2001
>>>>> From: Stefano Sabatini<stefano.sabatini-lala at poste.it>
>>>>> Date: Tue, 16 Mar 2010 23:08:32 +0100
>>>>> Subject: [PATCH 3/5] Make url_fseek() return AVERROR(ENOSYS) rather than AVERROR(EPIPE) if
>>>>>   the seek operation is not defined in the ByteIOContext.
>>>>>
>>>>> ---
>>>>>   libavformat/aviobuf.c |    2 +-
>>>>>   1 files changed, 1 insertions(+), 1 deletions(-)
>>>>>
>>>>> diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
>>>>> index 37a6f6d..039b6d3 100644
>>>>> --- a/libavformat/aviobuf.c
>>>>> +++ b/libavformat/aviobuf.c
>>>>> @@ -160,7 +160,7 @@ int64_t url_fseek(ByteIOContext *s, int64_t offset, int whence)
>>>>>               return AVERROR_EOF;
>>>>>           s->buf_ptr = s->buf_end + offset - s->pos;
>>>>>       } else {
>>>>> -        int64_t res = AVERROR(EPIPE);
>>>>> +        int64_t res = AVERROR(ENOSYS);
>>>>>
>>>>>   #if CONFIG_MUXERS || CONFIG_NETWORK
>>>>>           if (s->write_flag) {
>>>>> --
>>>>> 1.7.0
>>>>>
>>>>
>>>>>  From 492f5063961b0d63fd6dda4404a107aa99484d40 Mon Sep 17 00:00:00 2001
>>>>> From: Stefano Sabatini<stefano.sabatini-lala at poste.it>
>>>>> Date: Tue, 16 Mar 2010 23:10:21 +0100
>>>>> Subject: [PATCH 4/5] Make url_fsize() return AVERROR(ENOSYS) rather than AVERROR(EPIPE) if
>>>>>   the seek operation is not defined in the ByteIOContext.
>>>>>
>>>>> ---
>>>>>   libavformat/aviobuf.c |    2 +-
>>>>>   1 files changed, 1 insertions(+), 1 deletions(-)
>>>>>
>>>>> diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
>>>>> index 039b6d3..0c46327 100644
>>>>> --- a/libavformat/aviobuf.c
>>>>> +++ b/libavformat/aviobuf.c
>>>>> @@ -197,7 +197,7 @@ int64_t url_fsize(ByteIOContext *s)
>>>>>           return AVERROR(EINVAL);
>>>>>
>>>>>       if (!s->seek)
>>>>> -        return AVERROR(EPIPE);
>>>>> +        return AVERROR(ENOSYS);
>>>>>       size = s->seek(s->opaque, 0, AVSEEK_SIZE);
>>>>>       if(size<0){
>>>>>           if ((size = s->seek(s->opaque, -1, SEEK_END))<  0)
>>>>
>>>> Ping.
>>>
>>> you are misusing ENOSYS
>>
>> This is possible, anyway how is EPIPE better than ENOSYS in this case?
>>
>> Please give some advice if you have any.
>
> ive none atm, just that i prefer to leave things as they are if they are
> wrong before and afte the patch. And i didnt really think much about it
> maybe EPIPE does make some sense dunno

If you decide that EPIPE is the way to go, then this last patch toaviobuf.c 
needs to be fixed.

Index: aviobuf.c
===================================================================
--- aviobuf.c	(revision 22853)
+++ aviobuf.c	(working copy)
@@ -748,7 +748,7 @@
          pos = s->seek(h, 0, SEEK_CUR);
          if (pos >= 0)
              s->pos = pos;
-        else if (pos != AVERROR(ENOSYS))
+        else if (pos != AVERROR(ENOSYS) && pos !=AVERROR(EPIPE))
              ret = pos;
      }
      return ret;



-- 
   -- Howard Chu
   CTO, Symas Corp.           http://www.symas.com
   Director, Highland Sun     http://highlandsun.com/hyc/
   Chief Architect, OpenLDAP  http://www.openldap.org/project/



More information about the ffmpeg-devel mailing list