コード例 #1
0
int ffurl_read_complete(URLContext *h, unsigned char *buf, int size)
{
#define MAX_RETRY (6*60) //10S*6*60=60MIN;
    int maxretry=MAX_RETRY;
    int toread=size;
    int readedlen=0;
    if (!(h->flags & AVIO_FLAG_READ))
        return AVERROR(EIO);
    while(toread>0 && maxretry-->0){
		int ret;
     		ret=retry_transfer_wrapper(h, buf+readedlen, toread, toread, h->prot->url_read);
		if(ret>0){
			toread-=ret;
			readedlen+=ret;
		}else if(ret!=AVERROR(EAGAIN)){
			return ret;/*error of EOF*/
		}
		if(url_interrupt_cb())
			return AVERROR_EXIT;
    }
    if((size-toread)!=0)
		return (size-toread);
 	else
		return AVERROR(ETIMEDOUT);/*retry too long time,//time out...*/
}
コード例 #2
0
int ffurl_read(URLContext *h, unsigned char *buf, int size)
{
    if (!h) return 0;
    if (!(h->flags & AVIO_FLAG_READ))
        return AVERROR(EIO);
    return retry_transfer_wrapper(h, buf, size, 1, h->prot->url_read);
}
コード例 #3
0
ファイル: avio.c プロジェクト: andoma/libav
int ffurl_write(URLContext *h, const unsigned char *buf, int size)
{
    if (!(h->flags & AVIO_FLAG_WRITE))
        return AVERROR(EIO);
    /* avoid sending too big packets */
    if (h->max_packet_size && size > h->max_packet_size)
        return AVERROR(EIO);

    return retry_transfer_wrapper(h, buf, size, size, h->prot->url_write);
}
コード例 #4
0
ファイル: avio.c プロジェクト: upsilon/libav
int url_read_complete(URLContext *h, unsigned char *buf, int size)
{
    if (h->flags & URL_WRONLY)
        return AVERROR(EIO);
    return retry_transfer_wrapper(h, buf, size, size, h->prot->url_read);
}