You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	added url_get_max_packet_size() support - added URL_RDWR flag
Originally committed as revision 795 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		
							
								
								
									
										32
									
								
								libav/avio.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								libav/avio.c
									
									
									
									
									
								
							| @@ -58,15 +58,18 @@ int url_open(URLContext **puc, const char *filename, int flags) | ||||
|             goto found; | ||||
|         up = up->next; | ||||
|     } | ||||
|     return -ENOENT; | ||||
|     err = -ENOENT; | ||||
|     goto fail; | ||||
|  found: | ||||
|     uc = av_malloc(sizeof(URLContext)); | ||||
|     if (!uc) | ||||
|         return -ENOMEM; | ||||
|     if (!uc) { | ||||
|         err = -ENOMEM; | ||||
|         goto fail; | ||||
|     } | ||||
|     uc->prot = up; | ||||
|     uc->flags = flags; | ||||
|     uc->is_streamed = 0; /* default = not streamed */ | ||||
|     uc->packet_size = 1; /* default packet size */ | ||||
|     uc->max_packet_size = 0; /* default: stream file */ | ||||
|     err = up->url_open(uc, filename, flags); | ||||
|     if (err < 0) { | ||||
|         av_free(uc); | ||||
| @@ -75,6 +78,9 @@ int url_open(URLContext **puc, const char *filename, int flags) | ||||
|     } | ||||
|     *puc = uc; | ||||
|     return 0; | ||||
|  fail: | ||||
|     *puc = NULL; | ||||
|     return err; | ||||
| } | ||||
|  | ||||
| int url_read(URLContext *h, unsigned char *buf, int size) | ||||
| @@ -89,8 +95,11 @@ int url_read(URLContext *h, unsigned char *buf, int size) | ||||
| int url_write(URLContext *h, unsigned char *buf, int size) | ||||
| { | ||||
|     int ret; | ||||
|     if (!(h->flags & URL_WRONLY)) | ||||
|     if (!(h->flags & (URL_WRONLY | URL_RDWR))) | ||||
|         return -EIO; | ||||
|     /* avoid sending too big packets */ | ||||
|     if (h->max_packet_size && size > h->max_packet_size) | ||||
|         return -EIO;  | ||||
|     ret = h->prot->url_write(h, buf, size); | ||||
|     return ret; | ||||
| } | ||||
| @@ -132,3 +141,16 @@ offset_t url_filesize(URLContext *h) | ||||
|     url_seek(h, pos, SEEK_SET); | ||||
|     return size; | ||||
| } | ||||
|  | ||||
| /*  | ||||
|  * Return the maximum packet size associated to packetized file | ||||
|  * handle. If the file is not packetized (stream like http or file on | ||||
|  * disk), then 0 is returned. | ||||
|  *  | ||||
|  * @param h file handle | ||||
|  * @return maximum packet size in bytes | ||||
|  */ | ||||
| int url_get_max_packet_size(URLContext *h) | ||||
| { | ||||
|     return h->max_packet_size; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user