mpeg12: Ignore slice threading if hwaccel is active

Slice threading does not work with hardware acceleration, as decoding
is per-picture.  This fixes Bugzilla #542.

Signed-off-by: Diego Biurrun <diego@biurrun.de>
(cherry picked from commit 93a51984a2)

Conflicts:
	libavcodec/mpeg12dec.c
This commit is contained in:
Rémi Denis-Courmont
2013-07-24 19:50:43 +03:00
committed by Carl Eugen Hoyos
parent 8f9bc6f2ce
commit ccf470fdb6

View File

@@ -2130,7 +2130,8 @@ static int decode_chunks(AVCodecContext *avctx,
buf_ptr = avpriv_find_start_code(buf_ptr, buf_end, &start_code); buf_ptr = avpriv_find_start_code(buf_ptr, buf_end, &start_code);
if (start_code > 0x1ff) { if (start_code > 0x1ff) {
if (!skip_frame) { if (!skip_frame) {
if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE)) { if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE) &&
!avctx->hwaccel) {
int i; int i;
av_assert0(avctx->thread_count > 1); av_assert0(avctx->thread_count > 1);
@@ -2194,7 +2195,8 @@ static int decode_chunks(AVCodecContext *avctx,
s2->intra_dc_precision= 3; s2->intra_dc_precision= 3;
s2->intra_matrix[0]= 1; s2->intra_matrix[0]= 1;
} }
if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE) && s->slice_count) { if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE) &&
!avctx->hwaccel && s->slice_count) {
int i; int i;
avctx->execute(avctx, slice_decode_thread, avctx->execute(avctx, slice_decode_thread,
@@ -2369,7 +2371,8 @@ static int decode_chunks(AVCodecContext *avctx,
break; break;
} }
if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE)) { if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE) &&
!avctx->hwaccel) {
int threshold = (s2->mb_height * s->slice_count + int threshold = (s2->mb_height * s->slice_count +
s2->slice_context_count / 2) / s2->slice_context_count / 2) /
s2->slice_context_count; s2->slice_context_count;