[FFmpeg-trac] #1396(undetermined:new): Commit 32d545e0 breaks binary backward compatibility

FFmpeg trac at avcodec.org
Sat Jun 2 04:15:38 CEST 2012

#1396: Commit 32d545e0 breaks binary backward compatibility
             Reporter:  jyavenard    |                     Type:  defect
               Status:  new          |                 Priority:  important
            Component:               |                  Version:
  undetermined                       |  unspecified
             Keywords:               |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
 commit [32d545e0] inserted a new member to the structure URLProtocol that
 breaks binary compatibility.

 New members should only ever be added at the end, not in the middle of
 things !

 Using C99 designated initialisers isn't always possible.
 (like when using ffmpeg from a C++ code)

 Definition of URLProtocol should be as follow:
 typedef struct URLProtocol {
     const char *name;
     int     (*url_open)( URLContext *h, const char *url, int flags);
      * This callback is to be used by protocols which open further nested
      * protocols. options are then to be passed to
      * for those nested protocols.
     int     (*url_open2)(URLContext *h, const char *url, int flags,
 AVDictionary **options);

      * Read data from the protocol.
      * If data is immediately available (even less than size), EOF is
      * reached or an error occurs (including EINTR), return immediately.
      * Otherwise:
      * In non-blocking mode, return AVERROR(EAGAIN) immediately.
      * In blocking mode, wait for data/EOF/error with a short timeout
      * and return AVERROR(EAGAIN) on timeout.
      * Checking interrupt_callback, looping on EINTR and EAGAIN and until
      * enough data has been read is left to the calling function; see
      * retry_transfer_wrapper in avio.c.
     int     (*url_read)( URLContext *h, unsigned char *buf, int size);
     int     (*url_write)(URLContext *h, const unsigned char *buf, int
     int64_t (*url_seek)( URLContext *h, int64_t pos, int whence);
     int     (*url_close)(URLContext *h);
     struct URLProtocol *next;
     int (*url_read_pause)(URLContext *h, int pause);
     int64_t (*url_read_seek)(URLContext *h, int stream_index,
                              int64_t timestamp, int flags);
     int (*url_get_file_handle)(URLContext *h);
     int priv_data_size;
     const AVClass *priv_data_class;
     int flags;
     int (*url_check)(URLContext *h, int mask);
     int (*url_shutdown)(URLContext *h, int flags);
 } URLProtocol;

 note that url_shutdown is add at the bottom instead

Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/1396>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker

More information about the FFmpeg-trac mailing list