Fixes "make THREADS=2 fate-mpeg2-field-enc".
---
libavcodec/mpeg12.c | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index c60826b..c47b6e2 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -1882,7 +1882,9 @@ static int slice_decode_thread(AVCodecContext *c, void
*arg){
start_code= -1;
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)
return -1;
}
@@ -2299,6 +2301,16 @@ static int decode_chunks(AVCodecContext *avctx,
break;
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(mpeg_decode_postinit(avctx) < 0){
av_log(avctx, AV_LOG_ERROR, "mpeg_decode_postinit()
failure\n");
--
1.7.2.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel