Commit 76c3fff2 authored by Michael Niedermayer's avatar Michael Niedermayer

h264: Workaround invalid MPEG-TS broadcasts

Fixes seeking to the first keyframe
Fixes Ticket1029
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 9e5f79ed
......@@ -3867,11 +3867,17 @@ again:
if ((err = decode_slice_header(hx, h)))
break;
if (h->sei_recovery_frame_cnt >= 0 && (h->frame_num != h->sei_recovery_frame_cnt || hx->slice_type_nos != AV_PICTURE_TYPE_I))
h->valid_recovery_point++;
if ( h->sei_recovery_frame_cnt >= 0
&& ( h->recovery_frame<0
|| ((h->recovery_frame - h->frame_num) & ((1 << h->sps.log2_max_frame_num)-1)) > h->sei_recovery_frame_cnt)) {
h->recovery_frame = (h->frame_num + h->sei_recovery_frame_cnt) %
(1 << h->sps.log2_max_frame_num);
if (!h->valid_recovery_point)
h->recovery_frame = h->frame_num;
}
s->current_picture_ptr->f.key_frame |=
......
......@@ -580,6 +580,11 @@ typedef struct H264Context {
*/
int recovery_frame;
/**
* Are the SEI recovery points looking valid.
*/
int valid_recovery_point;
int luma_weight_flag[2]; ///< 7.4.3.2 luma_weight_lX_flag
int chroma_weight_flag[2]; ///< 7.4.3.2 chroma_weight_lX_flag
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment