1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

avio: make url_seek() internal.

This commit is contained in:
Anton Khirnov 2011-03-31 17:30:31 +02:00
parent 230a468679
commit 58a48c6511
5 changed files with 32 additions and 27 deletions

View File

@ -143,10 +143,10 @@ int ffurl_connect(URLContext* uc)
if (err) if (err)
return err; return err;
uc->is_connected = 1; uc->is_connected = 1;
//We must be careful here as url_seek() could be slow, for example for http //We must be careful here as ffurl_seek() could be slow, for example for http
if( (uc->flags & (URL_WRONLY | URL_RDWR)) if( (uc->flags & (URL_WRONLY | URL_RDWR))
|| !strcmp(uc->prot->name, "file")) || !strcmp(uc->prot->name, "file"))
if(!uc->is_streamed && url_seek(uc, 0, SEEK_SET) < 0) if(!uc->is_streamed && ffurl_seek(uc, 0, SEEK_SET) < 0)
uc->is_streamed= 1; uc->is_streamed= 1;
return 0; return 0;
} }
@ -192,6 +192,10 @@ int url_write(URLContext *h, const unsigned char *buf, int size)
{ {
return ffurl_write(h, buf, size); return ffurl_write(h, buf, size);
} }
int64_t url_seek(URLContext *h, int64_t pos, int whence)
{
return ffurl_seek(h, pos, whence);
}
#endif #endif
#define URL_SCHEME_CHARS \ #define URL_SCHEME_CHARS \
@ -295,7 +299,7 @@ int ffurl_write(URLContext *h, const unsigned char *buf, int size)
return retry_transfer_wrapper(h, buf, size, size, h->prot->url_write); return retry_transfer_wrapper(h, buf, size, size, h->prot->url_write);
} }
int64_t url_seek(URLContext *h, int64_t pos, int whence) int64_t ffurl_seek(URLContext *h, int64_t pos, int whence)
{ {
int64_t ret; int64_t ret;
@ -334,13 +338,13 @@ int64_t url_filesize(URLContext *h)
{ {
int64_t pos, size; int64_t pos, size;
size= url_seek(h, 0, AVSEEK_SIZE); size= ffurl_seek(h, 0, AVSEEK_SIZE);
if(size<0){ if(size<0){
pos = url_seek(h, 0, SEEK_CUR); pos = ffurl_seek(h, 0, SEEK_CUR);
if ((size = url_seek(h, -1, SEEK_END)) < 0) if ((size = ffurl_seek(h, -1, SEEK_END)) < 0)
return size; return size;
size++; size++;
url_seek(h, pos, SEEK_SET); ffurl_seek(h, pos, SEEK_SET);
} }
return size; return size;
} }

View File

@ -108,24 +108,9 @@ attribute_deprecated int url_open(URLContext **h, const char *url, int flags);
attribute_deprecated int url_read(URLContext *h, unsigned char *buf, int size); attribute_deprecated int url_read(URLContext *h, unsigned char *buf, int size);
attribute_deprecated int url_read_complete(URLContext *h, unsigned char *buf, int size); attribute_deprecated int url_read_complete(URLContext *h, unsigned char *buf, int size);
attribute_deprecated int url_write(URLContext *h, const unsigned char *buf, int size); attribute_deprecated int url_write(URLContext *h, const unsigned char *buf, int size);
attribute_deprecated int64_t url_seek(URLContext *h, int64_t pos, int whence);
#endif #endif
/**
* Change the position that will be used by the next read/write
* operation on the resource accessed by h.
*
* @param pos specifies the new position to set
* @param whence specifies how pos should be interpreted, it must be
* one of SEEK_SET (seek from the beginning), SEEK_CUR (seek from the
* current position), SEEK_END (seek from the end), or AVSEEK_SIZE
* (return the filesize of the requested resource, pos is ignored).
* @return a negative value corresponding to an AVERROR code in case
* of failure, or the resulting file position, measured in bytes from
* the beginning of the file. You can use this feature together with
* SEEK_CUR to read the current file position.
*/
int64_t url_seek(URLContext *h, int64_t pos, int whence);
/** /**
* Close the resource accessed by the URLContext h, and free the * Close the resource accessed by the URLContext h, and free the
* memory used by it. * memory used by it.

View File

@ -846,7 +846,7 @@ int ffio_fdopen(AVIOContext **s, URLContext *h)
if (ffio_init_context(*s, buffer, buffer_size, if (ffio_init_context(*s, buffer, buffer_size,
(h->flags & URL_WRONLY || h->flags & URL_RDWR), h, (h->flags & URL_WRONLY || h->flags & URL_RDWR), h,
ffurl_read, ffurl_write, url_seek) < 0) { ffurl_read, ffurl_write, ffurl_seek) < 0) {
av_free(buffer); av_free(buffer);
av_freep(s); av_freep(s);
return AVERROR(EIO); return AVERROR(EIO);

View File

@ -141,7 +141,7 @@ static int concat_read(URLContext *h, unsigned char *buf, int size)
return total ? total : result; return total ? total : result;
if (!result) if (!result)
if (i + 1 == data->length || if (i + 1 == data->length ||
url_seek(nodes[++i].uc, 0, SEEK_SET) < 0) ffurl_seek(nodes[++i].uc, 0, SEEK_SET) < 0)
break; break;
total += result; total += result;
buf += result; buf += result;
@ -169,7 +169,7 @@ static int64_t concat_seek(URLContext *h, int64_t pos, int whence)
/* get the absolute position */ /* get the absolute position */
for (i = 0; i != data->current; i++) for (i = 0; i != data->current; i++)
pos += nodes[i].size; pos += nodes[i].size;
pos += url_seek(nodes[i].uc, 0, SEEK_CUR); pos += ffurl_seek(nodes[i].uc, 0, SEEK_CUR);
whence = SEEK_SET; whence = SEEK_SET;
/* fall through with the absolute position */ /* fall through with the absolute position */
case SEEK_SET: case SEEK_SET:
@ -180,7 +180,7 @@ static int64_t concat_seek(URLContext *h, int64_t pos, int whence)
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
result = url_seek(nodes[i].uc, pos, whence); result = ffurl_seek(nodes[i].uc, pos, whence);
if (result >= 0) { if (result >= 0) {
data->current = i; data->current = i;
while (i) while (i)

View File

@ -86,4 +86,20 @@ int ffurl_read_complete(URLContext *h, unsigned char *buf, int size);
*/ */
int ffurl_write(URLContext *h, const unsigned char *buf, int size); int ffurl_write(URLContext *h, const unsigned char *buf, int size);
/**
* Change the position that will be used by the next read/write
* operation on the resource accessed by h.
*
* @param pos specifies the new position to set
* @param whence specifies how pos should be interpreted, it must be
* one of SEEK_SET (seek from the beginning), SEEK_CUR (seek from the
* current position), SEEK_END (seek from the end), or AVSEEK_SIZE
* (return the filesize of the requested resource, pos is ignored).
* @return a negative value corresponding to an AVERROR code in case
* of failure, or the resulting file position, measured in bytes from
* the beginning of the file. You can use this feature together with
* SEEK_CUR to read the current file position.
*/
int64_t ffurl_seek(URLContext *h, int64_t pos, int whence);
#endif //AVFORMAT_URL_H #endif //AVFORMAT_URL_H