avformat/av1: Avoid allocation for small headers
By using avio_get_dyn_buf() + ffio_free_dyn_buf() instead of avio_close_dyn_buf() + av_free() one can avoid an allocation + copy for small headers. Furthermore, it simplifies freeing. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
		
							parent
							
								
									67ce9e0463
								
							
						
					
					
						commit
						a31f68fb44
					
				| @ -326,7 +326,7 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size) | |||||||
|     AV1SequenceParameters seq_params; |     AV1SequenceParameters seq_params; | ||||||
|     PutBitContext pbc; |     PutBitContext pbc; | ||||||
|     uint8_t header[4]; |     uint8_t header[4]; | ||||||
|     uint8_t *seq = NULL, *meta = NULL; |     uint8_t *seq, *meta; | ||||||
|     int64_t obu_size; |     int64_t obu_size; | ||||||
|     int start_pos, type, temporal_id, spatial_id; |     int start_pos, type, temporal_id, spatial_id; | ||||||
|     int ret, nb_seq = 0, seq_size, meta_size; |     int ret, nb_seq = 0, seq_size, meta_size; | ||||||
| @ -376,7 +376,7 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size) | |||||||
|         buf  += len; |         buf  += len; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     seq_size  = avio_close_dyn_buf(seq_pb, &seq); |     seq_size  = avio_get_dyn_buf(seq_pb, &seq); | ||||||
|     if (!seq_size) { |     if (!seq_size) { | ||||||
|         ret = AVERROR_INVALIDDATA; |         ret = AVERROR_INVALIDDATA; | ||||||
|         goto fail; |         goto fail; | ||||||
| @ -401,17 +401,13 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size) | |||||||
|     avio_write(pb, header, sizeof(header)); |     avio_write(pb, header, sizeof(header)); | ||||||
|     avio_write(pb, seq, seq_size); |     avio_write(pb, seq, seq_size); | ||||||
| 
 | 
 | ||||||
|     meta_size = avio_close_dyn_buf(meta_pb, &meta); |     meta_size = avio_get_dyn_buf(meta_pb, &meta); | ||||||
|     if (meta_size) |     if (meta_size) | ||||||
|         avio_write(pb, meta, meta_size); |         avio_write(pb, meta, meta_size); | ||||||
| 
 | 
 | ||||||
| fail: | fail: | ||||||
|     if (!seq) |     ffio_free_dyn_buf(&seq_pb); | ||||||
|         avio_close_dyn_buf(seq_pb, &seq); |     ffio_free_dyn_buf(&meta_pb); | ||||||
|     if (!meta) |  | ||||||
|         avio_close_dyn_buf(meta_pb, &meta); |  | ||||||
|     av_free(seq); |  | ||||||
|     av_free(meta); |  | ||||||
| 
 | 
 | ||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user