mirror of https://git.ffmpeg.org/ffmpeg.git
mpeg12 fix 10l of aspect calucalations, return gop perser to print debug info, and make mpeg1_seq_header hot overwrite height/width
Originally committed as revision 2897 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
e15dec10d5
commit
5ac4768362
|
@ -1840,7 +1840,10 @@ uint8_t old_permutation[64];
|
||||||
if(s->aspect_ratio_info > 1){
|
if(s->aspect_ratio_info > 1){
|
||||||
if( (s1->display_weight == 0 )||(s1->display_height == 0) ){
|
if( (s1->display_weight == 0 )||(s1->display_height == 0) ){
|
||||||
s->avctx->sample_aspect_ratio=
|
s->avctx->sample_aspect_ratio=
|
||||||
mpeg2_aspect[s->aspect_ratio_info];
|
av_div_q(
|
||||||
|
mpeg2_aspect[s->aspect_ratio_info],
|
||||||
|
(AVRational){s->width, s->height}
|
||||||
|
);
|
||||||
}else{
|
}else{
|
||||||
s->avctx->sample_aspect_ratio=
|
s->avctx->sample_aspect_ratio=
|
||||||
av_div_q(
|
av_div_q(
|
||||||
|
@ -1850,10 +1853,7 @@ uint8_t old_permutation[64];
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
s->avctx->sample_aspect_ratio=
|
s->avctx->sample_aspect_ratio=
|
||||||
av_div_q(
|
mpeg2_aspect[s->aspect_ratio_info];
|
||||||
mpeg2_aspect[s->aspect_ratio_info],
|
|
||||||
(AVRational){s->width, s->height}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}//mpeg2
|
}//mpeg2
|
||||||
|
|
||||||
|
@ -2482,12 +2482,16 @@ static int mpeg1_decode_sequence(AVCodecContext *avctx,
|
||||||
{
|
{
|
||||||
Mpeg1Context *s1 = avctx->priv_data;
|
Mpeg1Context *s1 = avctx->priv_data;
|
||||||
MpegEncContext *s = &s1->mpeg_enc_ctx;
|
MpegEncContext *s = &s1->mpeg_enc_ctx;
|
||||||
|
int width,height;
|
||||||
int i, v, j;
|
int i, v, j;
|
||||||
|
|
||||||
init_get_bits(&s->gb, buf, buf_size*8);
|
init_get_bits(&s->gb, buf, buf_size*8);
|
||||||
|
|
||||||
s->width = get_bits(&s->gb, 12);
|
width = get_bits(&s->gb, 12);
|
||||||
s->height = get_bits(&s->gb, 12);
|
height = get_bits(&s->gb, 12);
|
||||||
|
if (width <= 0 || height <= 0 ||
|
||||||
|
(width % 2) != 0 || (height % 2) != 0)
|
||||||
|
return -1;
|
||||||
s->aspect_ratio_info= get_bits(&s->gb, 4);
|
s->aspect_ratio_info= get_bits(&s->gb, 4);
|
||||||
if (s->aspect_ratio_info == 0)
|
if (s->aspect_ratio_info == 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -2497,8 +2501,8 @@ static int mpeg1_decode_sequence(AVCodecContext *avctx,
|
||||||
s->bit_rate = get_bits(&s->gb, 18) * 400;
|
s->bit_rate = get_bits(&s->gb, 18) * 400;
|
||||||
if (get_bits1(&s->gb) == 0) /* marker */
|
if (get_bits1(&s->gb) == 0) /* marker */
|
||||||
return -1;
|
return -1;
|
||||||
if (s->width <= 0 || s->height <= 0)
|
s->width = width;
|
||||||
return -1;
|
s->height = height;
|
||||||
|
|
||||||
s->avctx->rc_buffer_size= get_bits(&s->gb, 10) * 1024*16;
|
s->avctx->rc_buffer_size= get_bits(&s->gb, 10) * 1024*16;
|
||||||
skip_bits(&s->gb, 1);
|
skip_bits(&s->gb, 1);
|
||||||
|
@ -2662,6 +2666,36 @@ static void mpeg_decode_user_data(AVCodecContext *avctx,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void mpeg_decode_gop(AVCodecContext *avctx,
|
||||||
|
const uint8_t *buf, int buf_size){
|
||||||
|
Mpeg1Context *s1 = avctx->priv_data;
|
||||||
|
MpegEncContext *s = &s1->mpeg_enc_ctx;
|
||||||
|
|
||||||
|
int drop_frame_flag;
|
||||||
|
int time_code_hours, time_code_minutes;
|
||||||
|
int time_code_seconds, time_code_pictures;
|
||||||
|
int broken_link;
|
||||||
|
|
||||||
|
init_get_bits(&s->gb, buf, buf_size*8);
|
||||||
|
|
||||||
|
drop_frame_flag = get_bits1(&s->gb);
|
||||||
|
|
||||||
|
time_code_hours=get_bits(&s->gb,5);
|
||||||
|
time_code_minutes = get_bits(&s->gb,6);
|
||||||
|
skip_bits1(&s->gb);//marker bit
|
||||||
|
time_code_seconds = get_bits(&s->gb,6);
|
||||||
|
time_code_pictures = get_bits(&s->gb,6);
|
||||||
|
|
||||||
|
/*broken_link indicate that after editing the
|
||||||
|
reference frames of the first B-Frames after GOP I-Frame
|
||||||
|
are missing (open gop)*/
|
||||||
|
broken_link = get_bits1(&s->gb);
|
||||||
|
|
||||||
|
if(s->avctx->debug & FF_DEBUG_PICT_INFO)
|
||||||
|
av_log(s->avctx, AV_LOG_DEBUG, "GOP (%2d:%02d:%02d.[%02d]) broken_link=%d\n",
|
||||||
|
time_code_hours, time_code_minutes, time_code_seconds,
|
||||||
|
time_code_pictures, broken_link);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* finds the end of the current frame in the bitstream.
|
* finds the end of the current frame in the bitstream.
|
||||||
* @return the position of the first byte of the next frame, or -1
|
* @return the position of the first byte of the next frame, or -1
|
||||||
|
@ -2800,6 +2834,8 @@ static int mpeg_decode_frame(AVCodecContext *avctx,
|
||||||
break;
|
break;
|
||||||
case GOP_START_CODE:
|
case GOP_START_CODE:
|
||||||
s2->first_field=0;
|
s2->first_field=0;
|
||||||
|
mpeg_decode_gop(avctx,
|
||||||
|
buf_ptr, input_size);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (start_code >= SLICE_MIN_START_CODE &&
|
if (start_code >= SLICE_MIN_START_CODE &&
|
||||||
|
|
Loading…
Reference in New Issue