mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
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…
Reference in New Issue
Block a user