libavformat/aviobuf: keep track of the original buffer-size and restore it after probe/ensure-seekback
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							parent
							
								
									0d4a66ee7f
								
							
						
					
					
						commit
						61b5ef7754
					
				| @ -146,6 +146,13 @@ typedef struct AVIOContext { | ||||
|      * This field is internal to libavformat and access from outside is not allowed. | ||||
|      */ | ||||
|     int writeout_count; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Original buffer size | ||||
|      * used internally after probing and ensure seekback to reset the buffer size | ||||
|      * This field is internal to libavformat and access from outside is not allowed. | ||||
|      */ | ||||
|     int orig_buffer_size; | ||||
| } AVIOContext; | ||||
| 
 | ||||
| /* unbuffered I/O */ | ||||
|  | ||||
| @ -78,6 +78,7 @@ int ffio_init_context(AVIOContext *s, | ||||
|                   int64_t (*seek)(void *opaque, int64_t offset, int whence)) | ||||
| { | ||||
|     s->buffer      = buffer; | ||||
|     s->orig_buffer_size = | ||||
|     s->buffer_size = buffer_size; | ||||
|     s->buf_ptr     = buffer; | ||||
|     s->opaque      = opaque; | ||||
| @ -434,14 +435,14 @@ static void fill_buffer(AVIOContext *s) | ||||
|     } | ||||
| 
 | ||||
|     /* make buffer smaller in case it ended up large after probing */ | ||||
|     if (s->read_packet && s->buffer_size > max_buffer_size) { | ||||
|     if (s->read_packet && s->orig_buffer_size && s->buffer_size > s->orig_buffer_size) { | ||||
|         if (dst == s->buffer) { | ||||
|             ffio_set_buf_size(s, max_buffer_size); | ||||
|             ffio_set_buf_size(s, s->orig_buffer_size); | ||||
| 
 | ||||
|             s->checksum_ptr = dst = s->buffer; | ||||
|         } | ||||
|         av_assert0(len >= max_buffer_size); | ||||
|         len = max_buffer_size; | ||||
|         av_assert0(len >= s->orig_buffer_size); | ||||
|         len = s->orig_buffer_size; | ||||
|     } | ||||
| 
 | ||||
|     if (s->read_packet) | ||||
| @ -792,6 +793,7 @@ int ffio_set_buf_size(AVIOContext *s, int buf_size) | ||||
| 
 | ||||
|     av_free(s->buffer); | ||||
|     s->buffer = buffer; | ||||
|     s->orig_buffer_size = | ||||
|     s->buffer_size = buf_size; | ||||
|     s->buf_ptr = buffer; | ||||
|     url_resetbuf(s, s->write_flag ? AVIO_FLAG_WRITE : AVIO_FLAG_READ); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user