|
|
|
@ -458,12 +458,6 @@ static int h264_frame_start(H264Context *h) |
|
|
|
|
H264Picture *pic; |
|
|
|
|
int i, ret; |
|
|
|
|
const int pixel_shift = h->pixel_shift; |
|
|
|
|
int c[4] = { |
|
|
|
|
1<<(h->ps.sps->bit_depth_luma-1), |
|
|
|
|
1<<(h->ps.sps->bit_depth_chroma-1), |
|
|
|
|
1<<(h->ps.sps->bit_depth_chroma-1), |
|
|
|
|
-1 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if (!ff_thread_can_start_frame(h->avctx)) { |
|
|
|
|
av_log(h->avctx, AV_LOG_ERROR, "Attempt to start a frame outside SETUP state\n"); |
|
|
|
@ -504,8 +498,6 @@ static int h264_frame_start(H264Context *h) |
|
|
|
|
|
|
|
|
|
if ((ret = alloc_picture(h, pic)) < 0) |
|
|
|
|
return ret; |
|
|
|
|
if(!h->frame_recovered && !h->avctx->hwaccel) |
|
|
|
|
ff_color_frame(pic->f, c); |
|
|
|
|
|
|
|
|
|
h->cur_pic_ptr = pic; |
|
|
|
|
ff_h264_unref_picture(h, &h->cur_pic); |
|
|
|
@ -1582,6 +1574,13 @@ static int h264_field_start(H264Context *h, const H264SliceContext *sl, |
|
|
|
|
* vectors. Given we are concealing a lost frame, this probably |
|
|
|
|
* is not noticeable by comparison, but it should be fixed. */ |
|
|
|
|
if (h->short_ref_count) { |
|
|
|
|
int c[4] = { |
|
|
|
|
1<<(h->ps.sps->bit_depth_luma-1), |
|
|
|
|
1<<(h->ps.sps->bit_depth_chroma-1), |
|
|
|
|
1<<(h->ps.sps->bit_depth_chroma-1), |
|
|
|
|
-1 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if (prev && |
|
|
|
|
h->short_ref[0]->f->width == prev->f->width && |
|
|
|
|
h->short_ref[0]->f->height == prev->f->height && |
|
|
|
@ -1597,7 +1596,8 @@ static int h264_field_start(H264Context *h, const H264SliceContext *sl, |
|
|
|
|
prev->f->width, |
|
|
|
|
prev->f->height); |
|
|
|
|
h->short_ref[0]->poc = prev->poc + 2; |
|
|
|
|
} |
|
|
|
|
} else if (!h->frame_recovered && !h->avctx->hwaccel) |
|
|
|
|
ff_color_frame(h->short_ref[0]->f, c); |
|
|
|
|
h->short_ref[0]->frame_num = h->poc.prev_frame_num; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|