diff options
Diffstat (limited to 'src/libmpeg2/header.c')
-rw-r--r-- | src/libmpeg2/header.c | 43 |
1 files changed, 10 insertions, 33 deletions
diff --git a/src/libmpeg2/header.c b/src/libmpeg2/header.c index e075f51e1..0a486f0f9 100644 --- a/src/libmpeg2/header.c +++ b/src/libmpeg2/header.c @@ -131,39 +131,7 @@ int header_process_sequence_header (picture_t * picture, uint8_t * buffer) /* this is not used by the decoder */ picture->aspect_ratio_information = buffer[3] >> 4; picture->frame_rate_code = buffer[3] & 15; - - switch (picture->frame_rate_code) { - case 1: /* 23.976 fps */ - picture->frame_duration = 3913; - break; - case 2: /* 24 fps */ - picture->frame_duration = 3750; - break; - case 3: /* 25 fps */ - picture->frame_duration = 3600; - break; - case 4: /* 29.97 fps */ - picture->frame_duration = 3003; - break; - case 5: /* 30 fps */ - picture->frame_duration = 3000; - break; - case 6: /* 50 fps */ - picture->frame_duration = 1800; - break; - case 7: /* 59.94 fps */ - picture->frame_duration = 1525; - break; - case 8: /* 60 fps */ - picture->frame_duration = 1509; - break; - default: - /* printf ("invalid/unknown frame rate code : %d \n", - picture->frame_rate_code); */ - picture->frame_duration = 3000; - } - - picture->bitrate = (buffer[4]<<10)|(buffer[5]<<2)|(buffer[6]>>6); + /* picture->bitrate = (buffer[4]<<10)|(buffer[5]<<2)|(buffer[6]>>6); */ if (buffer[7] & 2) { for (i = 0; i < 64; i++) @@ -194,6 +162,7 @@ int header_process_sequence_header (picture_t * picture, uint8_t * buffer) /* picture->alternate_scan = 0; */ picture->picture_structure = FRAME_PICTURE; /* picture->second_field = 0; */ + picture->last_mba = ((width * height) >> 8) - 1; return 0; } @@ -209,10 +178,14 @@ static int header_process_sequence_extension (picture_t * picture, /* this is not used by the decoder */ picture->progressive_sequence = (buffer[1] >> 3) & 1; + picture->low_delay = buffer[5] & 0x80; + if (picture->progressive_sequence) picture->coded_picture_height = (picture->coded_picture_height + 31) & ~31; + printf ("libmpeg2: low_delay : %d\n", picture->low_delay); + /* printf ("libmpeg2: sequence extension+5 : %08x (%d)\n", buffer[5], buffer[5] % 0x80); @@ -422,6 +395,8 @@ int header_process_group_of_pictures (picture_t * picture, uint8_t * buffer) { int header_process_picture_header (picture_t *picture, uint8_t * buffer) { picture->picture_coding_type = (buffer [1] >> 3) & 7; + picture->vbv_delay = ((buffer[1] << 13) | (buffer[2] << 5) | + (buffer[3] >> 3)) & 0xffff; /* forward_f_code and backward_f_code - used in mpeg1 only */ picture->f_motion.f_code[1] = (buffer[3] >> 2) & 1; @@ -437,3 +412,5 @@ int header_process_picture_header (picture_t *picture, uint8_t * buffer) return 0; } + + |