You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avformat/movenc: Write auxi box for animated AVIF with alpha
According to the HEIF specification (ISO/IEC 23008-12) Section 7.5.3.1, tracks with handler_type 'auxv' must contain a 'auxi' box in its SampleEntry to notify the nature of the auxiliary track to the decoder. The content is the same as the 'auxC' box. So parameterize and re-use the existing function. Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com> Signed-off-by: James Zern <jzern@google.com>
This commit is contained in:
		
				
					committed by
					
						 James Zern
						James Zern
					
				
			
			
				
	
			
			
			
						parent
						
							bd7d69fe35
						
					
				
				
					commit
					a2d95928c3
				
			| @@ -2179,6 +2179,16 @@ static int mov_write_ccst_tag(AVIOContext *pb) | ||||
|     return update_size(pb, pos); | ||||
| } | ||||
|  | ||||
| static int mov_write_aux_tag(AVIOContext *pb, const char *aux_type) | ||||
| { | ||||
|     int64_t pos = avio_tell(pb); | ||||
|     avio_wb32(pb, 0); /* size */ | ||||
|     ffio_wfourcc(pb, aux_type); | ||||
|     avio_wb32(pb, 0); /* Version & flags */ | ||||
|     avio_write(pb, "urn:mpeg:mpegB:cicp:systems:auxiliary:alpha\0", 44); | ||||
|     return update_size(pb, pos); | ||||
| } | ||||
|  | ||||
| static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContext *mov, MOVTrack *track) | ||||
| { | ||||
|     int ret = AVERROR_BUG; | ||||
| @@ -2363,8 +2373,11 @@ static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex | ||||
|     if (avid) | ||||
|         avio_wb32(pb, 0); | ||||
|  | ||||
|     if (track->mode == MODE_AVIF) | ||||
|     if (track->mode == MODE_AVIF) { | ||||
|         mov_write_ccst_tag(pb); | ||||
|         if (s->nb_streams > 0 && track == &mov->tracks[1]) | ||||
|             mov_write_aux_tag(pb, "auxi"); | ||||
|     } | ||||
|  | ||||
|     return update_size(pb, pos); | ||||
| } | ||||
| @@ -3044,16 +3057,6 @@ static int mov_write_pixi_tag(AVIOContext *pb, MOVMuxContext *mov, AVFormatConte | ||||
|     return update_size(pb, pos); | ||||
| } | ||||
|  | ||||
| static int mov_write_auxC_tag(AVIOContext *pb) | ||||
| { | ||||
|     int64_t pos = avio_tell(pb); | ||||
|     avio_wb32(pb, 0); /* size */ | ||||
|     ffio_wfourcc(pb, "auxC"); | ||||
|     avio_wb32(pb, 0); /* Version & flags */ | ||||
|     avio_write(pb, "urn:mpeg:mpegB:cicp:systems:auxiliary:alpha\0", 44); | ||||
|     return update_size(pb, pos); | ||||
| } | ||||
|  | ||||
| static int mov_write_ipco_tag(AVIOContext *pb, MOVMuxContext *mov, AVFormatContext *s) | ||||
| { | ||||
|     int64_t pos = avio_tell(pb); | ||||
| @@ -3066,7 +3069,7 @@ static int mov_write_ipco_tag(AVIOContext *pb, MOVMuxContext *mov, AVFormatConte | ||||
|         if (!i) | ||||
|             mov_write_colr_tag(pb, &mov->tracks[0], 0); | ||||
|         else | ||||
|             mov_write_auxC_tag(pb); | ||||
|             mov_write_aux_tag(pb, "auxC"); | ||||
|     } | ||||
|     return update_size(pb, pos); | ||||
| } | ||||
|   | ||||
| @@ -32,7 +32,7 @@ | ||||
| #include "version_major.h" | ||||
|  | ||||
| #define LIBAVFORMAT_VERSION_MINOR  32 | ||||
| #define LIBAVFORMAT_VERSION_MICRO 100 | ||||
| #define LIBAVFORMAT_VERSION_MICRO 101 | ||||
|  | ||||
| #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||
|                                                LIBAVFORMAT_VERSION_MINOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user