@ -56,9 +56,14 @@ URLProtocol *av_protocol_next(URLProtocol *p)
else return first_protocol ;
}
int av_register_protocol ( URLProtocol * protocol )
int av_register_protocol2 ( URLProtocol * protocol , int size )
{
URLProtocol * * p ;
if ( size < sizeof ( URLProtocol ) ) {
URLProtocol * temp = av_mallocz ( sizeof ( URLProtocol ) ) ;
memcpy ( temp , protocol , size ) ;
protocol = temp ;
}
p = & first_protocol ;
while ( * p ! = NULL ) p = & ( * p ) - > next ;
* p = protocol ;
@ -67,6 +72,22 @@ int av_register_protocol(URLProtocol *protocol)
}
# if LIBAVFORMAT_VERSION_MAJOR < 53
/* The layout of URLProtocol as of when major was bumped to 52 */
struct URLProtocol_compat {
const char * name ;
int ( * url_open ) ( URLContext * h , const char * filename , int flags ) ;
int ( * url_read ) ( URLContext * h , unsigned char * buf , int size ) ;
int ( * url_write ) ( URLContext * h , unsigned char * buf , int size ) ;
int64_t ( * url_seek ) ( URLContext * h , int64_t pos , int whence ) ;
int ( * url_close ) ( URLContext * h ) ;
struct URLProtocol * next ;
} ;
int av_register_protocol ( URLProtocol * protocol )
{
return av_register_protocol2 ( protocol , sizeof ( struct URLProtocol_compat ) ) ;
}
int register_protocol ( URLProtocol * protocol )
{
return av_register_protocol ( protocol ) ;