Commit f7114249 authored by Ronald S. Bultje's avatar Ronald S. Bultje

mpeg12.c: fix slice threading for mpeg2 field picture mode.

Fixes "make THREADS=2 fate-mpeg2-field-enc".
parent cd256c3b
...@@ -1882,7 +1882,9 @@ static int slice_decode_thread(AVCodecContext *c, void *arg){ ...@@ -1882,7 +1882,9 @@ static int slice_decode_thread(AVCodecContext *c, void *arg){
start_code= -1; start_code= -1;
buf = ff_find_start_code(buf, s->gb.buffer_end, &start_code); buf = ff_find_start_code(buf, s->gb.buffer_end, &start_code);
mb_y= start_code - SLICE_MIN_START_CODE; mb_y= (start_code - SLICE_MIN_START_CODE) << field_pic;
if (s->picture_structure == PICT_BOTTOM_FIELD)
mb_y++;
if(mb_y < 0 || mb_y >= s->end_mb_y) if(mb_y < 0 || mb_y >= s->end_mb_y)
return -1; return -1;
} }
...@@ -2299,6 +2301,16 @@ static int decode_chunks(AVCodecContext *avctx, ...@@ -2299,6 +2301,16 @@ static int decode_chunks(AVCodecContext *avctx,
break; break;
case PICTURE_START_CODE: case PICTURE_START_CODE:
if (avctx->thread_count > 1 && s->slice_count) {
int i;
avctx->execute(avctx, slice_decode_thread,
s2->thread_context, NULL,
s->slice_count, sizeof(void*));
for (i = 0; i < s->slice_count; i++)
s2->error_count += s2->thread_context[i]->error_count;
s->slice_count = 0;
}
if(last_code == 0 || last_code == SLICE_MIN_START_CODE){ if(last_code == 0 || last_code == SLICE_MIN_START_CODE){
if(mpeg_decode_postinit(avctx) < 0){ if(mpeg_decode_postinit(avctx) < 0){
av_log(avctx, AV_LOG_ERROR, "mpeg_decode_postinit() failure\n"); av_log(avctx, AV_LOG_ERROR, "mpeg_decode_postinit() failure\n");
......
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