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; | ||||
|     } else if (buf_size >= 11 && | ||||
|                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 i; | ||||
|         // There is a caption count field in the data, but it is often
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user