You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	asfdec: support reading ID3v2 tags in ASF files
Yes, these files do exist Signed-off-by: Vladimir Pantelic <vladoman@gmail.com> Signed-off-by: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
		
				
					committed by
					
						 Anton Khirnov
						Anton Khirnov
					
				
			
			
				
	
			
			
			
						parent
						
							db0a943266
						
					
				
				
					commit
					f5fac6f777
				
			| @@ -3,6 +3,7 @@ releases are sorted from youngest to oldest. | ||||
|  | ||||
| version 10: | ||||
| - av_strnstr | ||||
| - support ID3v2 tags in ASF files | ||||
|  | ||||
|  | ||||
| version 9: | ||||
|   | ||||
| @@ -277,6 +277,16 @@ fail: | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| static void get_id3_tag(AVFormatContext *s, int len) | ||||
| { | ||||
|     ID3v2ExtraMeta *id3v2_extra_meta = NULL; | ||||
|  | ||||
|     ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta); | ||||
|     if (id3v2_extra_meta) | ||||
|         ff_id3v2_parse_apic(s, &id3v2_extra_meta); | ||||
|     ff_id3v2_free_extra_meta(&id3v2_extra_meta); | ||||
| } | ||||
|  | ||||
| static void get_tag(AVFormatContext *s, const char *key, int type, int len, int type2_size) | ||||
| { | ||||
|     char *value; | ||||
| @@ -291,12 +301,18 @@ static void get_tag(AVFormatContext *s, const char *key, int type, int len, int | ||||
|  | ||||
|     if (type == 0) {         // UTF16-LE | ||||
|         avio_get_str16le(s->pb, len, value, 2 * len + 1); | ||||
|     } else if (type == 1) {  // byte array | ||||
|         if (!strcmp(key, "WM/Picture")) { // handle cover art | ||||
|             asf_read_picture(s, len); | ||||
|         } else if (!strcmp(key, "ID3")) { // handle ID3 tag | ||||
|             get_id3_tag(s, len); | ||||
|         } else { | ||||
|             av_log(s, AV_LOG_VERBOSE, "Unsupported byte array in tag %s.\n", key); | ||||
|         } | ||||
|         goto finish; | ||||
|     } else if (type > 1 && type <= 5) {  // boolean or DWORD or QWORD or WORD | ||||
|         uint64_t num = get_value(s->pb, type, type2_size); | ||||
|         snprintf(value, len, "%"PRIu64, num); | ||||
|     } else if (type == 1 && !strcmp(key, "WM/Picture")) { // handle cover art | ||||
|         asf_read_picture(s, len); | ||||
|         goto finish; | ||||
|     } else if (type == 6) { // (don't) handle GUID | ||||
|         av_log(s, AV_LOG_DEBUG, "Unsupported GUID value in tag %s.\n", key); | ||||
|         goto finish; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user