mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 12:36:41 +08:00 
			
		
		
		
	lavf/movenc: add get_moov_size and use it in fragment code.
This function will be re-used in the following commits.
This commit is contained in:
		 Clément Bœsch
					Clément Bœsch
				
			
				
					committed by
					
						 Clément Bœsch
						Clément Bœsch
					
				
			
			
				
	
			
			
			 Clément Bœsch
						Clément Bœsch
					
				
			
						parent
						
							65f7aee63b
						
					
				
				
					commit
					e17a2aba25
				
			| @@ -2876,6 +2876,21 @@ static void mov_parse_vc1_frame(AVPacket *pkt, MOVTrack *trk, int fragment) | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static int get_moov_size(AVFormatContext *s) | ||||||
|  | { | ||||||
|  |     int ret; | ||||||
|  |     uint8_t *buf; | ||||||
|  |     AVIOContext *moov_buf; | ||||||
|  |     MOVMuxContext *mov = s->priv_data; | ||||||
|  |  | ||||||
|  |     if ((ret = avio_open_dyn_buf(&moov_buf)) < 0) | ||||||
|  |         return ret; | ||||||
|  |     mov_write_moov_tag(moov_buf, mov, s); | ||||||
|  |     ret = avio_close_dyn_buf(moov_buf, &buf); | ||||||
|  |     av_free(buf); | ||||||
|  |     return ret; | ||||||
|  | } | ||||||
|  |  | ||||||
| static int mov_flush_fragment(AVFormatContext *s) | static int mov_flush_fragment(AVFormatContext *s) | ||||||
| { | { | ||||||
|     MOVMuxContext *mov = s->priv_data; |     MOVMuxContext *mov = s->priv_data; | ||||||
| @@ -2887,10 +2902,8 @@ static int mov_flush_fragment(AVFormatContext *s) | |||||||
|  |  | ||||||
|     if (!(mov->flags & FF_MOV_FLAG_EMPTY_MOOV) && mov->fragments == 0) { |     if (!(mov->flags & FF_MOV_FLAG_EMPTY_MOOV) && mov->fragments == 0) { | ||||||
|         int64_t pos = avio_tell(s->pb); |         int64_t pos = avio_tell(s->pb); | ||||||
|         int ret; |  | ||||||
|         AVIOContext *moov_buf; |  | ||||||
|         uint8_t *buf; |         uint8_t *buf; | ||||||
|         int buf_size; |         int buf_size, moov_size; | ||||||
|  |  | ||||||
|         for (i = 0; i < mov->nb_streams; i++) |         for (i = 0; i < mov->nb_streams; i++) | ||||||
|             if (!mov->tracks[i].entry) |             if (!mov->tracks[i].entry) | ||||||
| @@ -2899,13 +2912,9 @@ static int mov_flush_fragment(AVFormatContext *s) | |||||||
|         if (i < mov->nb_streams) |         if (i < mov->nb_streams) | ||||||
|             return 0; |             return 0; | ||||||
|  |  | ||||||
|         if ((ret = avio_open_dyn_buf(&moov_buf)) < 0) |         moov_size = get_moov_size(s); | ||||||
|             return ret; |  | ||||||
|         mov_write_moov_tag(moov_buf, mov, s); |  | ||||||
|         buf_size = avio_close_dyn_buf(moov_buf, &buf); |  | ||||||
|         av_free(buf); |  | ||||||
|         for (i = 0; i < mov->nb_streams; i++) |         for (i = 0; i < mov->nb_streams; i++) | ||||||
|             mov->tracks[i].data_offset = pos + buf_size + 8; |             mov->tracks[i].data_offset = pos + moov_size + 8; | ||||||
|  |  | ||||||
|         mov_write_moov_tag(s->pb, mov, s); |         mov_write_moov_tag(s->pb, mov, s); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user