avcodec/mpeg12dec: add comments documenting the format of the DVD CC user-data packet.
this is to aid development and maintenance of that code. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
		
							parent
							
								
									1f6d7eb470
								
							
						
					
					
						commit
						c19da0cfd8
					
				| @ -2262,7 +2262,31 @@ static int mpeg_decode_a53_cc(AVCodecContext *avctx, | |||||||
|         return 1; |         return 1; | ||||||
|     } else if (buf_size >= 11 && |     } else if (buf_size >= 11 && | ||||||
|                p[0] == 'C' && p[1] == 'C' && p[2] == 0x01 && p[3] == 0xf8) { |                p[0] == 'C' && p[1] == 'C' && p[2] == 0x01 && p[3] == 0xf8) { | ||||||
|         /* extract DVD CC data */ |         /* extract DVD CC data
 | ||||||
|  |          * | ||||||
|  |          * uint32_t   user_data_start_code        0x000001B2    (big endian) | ||||||
|  |          * uint16_t   user_identifier             0x4343 "CC" | ||||||
|  |          * uint8_t    user_data_type_code         0x01 | ||||||
|  |          * uint8_t    caption_block_size          0xF8 | ||||||
|  |          * uint8_t | ||||||
|  |          *   bit 7    caption_odd_field_first     1=odd field (CC1/CC2) first  0=even field (CC3/CC4) first | ||||||
|  |          *   bit 6    caption_filler              0 | ||||||
|  |          *   bit 5:1  caption_block_count         number of caption blocks (pairs of caption words = frames). Most DVDs use 15 per start of GOP. | ||||||
|  |          *   bit 0    caption_extra_field_added   1=one additional caption word | ||||||
|  |          * | ||||||
|  |          * struct caption_field_block { | ||||||
|  |          *   uint8_t | ||||||
|  |          *     bit 7:1 caption_filler             0x7F (all 1s) | ||||||
|  |          *     bit 0   caption_field_odd          1=odd field (this is CC1/CC2)  0=even field (this is CC3/CC4) | ||||||
|  |          *   uint8_t   caption_first_byte | ||||||
|  |          *   uint8_t   caption_second_byte | ||||||
|  |          * } caption_block[(caption_block_count * 2) + caption_extra_field_added]; | ||||||
|  |          * | ||||||
|  |          * Some DVDs encode caption data for both fields with caption_field_odd=1. The only way to decode the fields | ||||||
|  |          * correctly is to start on the field indicated by caption_odd_field_first and count between odd/even fields. | ||||||
|  |          * Don't assume that the first caption word is the odd field. There do exist MPEG files in the wild that start | ||||||
|  |          * on the even field. There also exist DVDs in the wild that encode an odd field count and the | ||||||
|  |          * caption_extra_field_added/caption_odd_field_first bits change per packet to allow that. */ | ||||||
|         int cc_count = 0; |         int cc_count = 0; | ||||||
|         int i; |         int i; | ||||||
|         // There is a caption count field in the data, but it is often
 |         // There is a caption count field in the data, but it is often
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user