h264: don't clobber mmco opcode tables for non-first slice headers.
authorRonald S. Bultje <rsbultje@gmail.com>
Mon, 14 Jan 2013 05:46:44 +0000 (21:46 -0800)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 20 Jan 2013 01:42:47 +0000 (02:42 +0100)
commitac6b2fecf4731ddaac546a38294918be39ff190a
treebbaeb172e0ac48e4180e7eeb6a2ea982f6bf88cb
parentbca27b0480b605a300b79881475b34f05a48ed62
h264: don't clobber mmco opcode tables for non-first slice headers.

Clobbering these tables will temporarily clobber the template used
as a basis for other threads to start decoding from. If the other
decoding thread updates from the template right at that moment,
subsequent threads will get invalid (or, usually, none at all) mmco
tables. This leads to invalid reference lists and subsequent decode
failures.

Therefore, instead, decode the mmco tables only for the first slice in
a field or frame. For other slices, decode the bits and ensure they
are identical to the mmco tables in the first slice, but don't ever
clobber the context state. This prevents other threads from using a
clobbered/invalid template as starting point for decoding, and thus
fixes decoding in these cases.

This fixes occasional (~1%) failures of h264-conformance-mr1_bt_a with
frame-multithreading enabled.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit f6badba1859fb266a9c0bdaf006a04c73873cd90)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/h264.c
libavcodec/h264.h
libavcodec/h264_refs.c