h264: Always decode MMCOs into temprary array
When decoding succeeded the array is copied into the permanent one.
This prevents inconsistencies
Fixes assertion failure
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit c40f51e15b)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -696,7 +696,7 @@ int ff_h264_decode_ref_pic_marking(H264Context *h, GetBitContext *gb,
|
|||||||
int first_slice)
|
int first_slice)
|
||||||
{
|
{
|
||||||
int i, ret;
|
int i, ret;
|
||||||
MMCO mmco_temp[MAX_MMCO_COUNT], *mmco = first_slice ? h->mmco : mmco_temp;
|
MMCO mmco_temp[MAX_MMCO_COUNT], *mmco = mmco_temp;
|
||||||
int mmco_index = 0;
|
int mmco_index = 0;
|
||||||
|
|
||||||
if (h->nal_unit_type == NAL_IDR_SLICE){ // FIXME fields
|
if (h->nal_unit_type == NAL_IDR_SLICE){ // FIXME fields
|
||||||
@@ -762,6 +762,7 @@ int ff_h264_decode_ref_pic_marking(H264Context *h, GetBitContext *gb,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (first_slice && mmco_index != -1) {
|
if (first_slice && mmco_index != -1) {
|
||||||
|
memcpy(h->mmco, mmco_temp, sizeof(h->mmco));
|
||||||
h->mmco_index = mmco_index;
|
h->mmco_index = mmco_index;
|
||||||
} else if (!first_slice && mmco_index >= 0 &&
|
} else if (!first_slice && mmco_index >= 0 &&
|
||||||
(mmco_index != h->mmco_index ||
|
(mmco_index != h->mmco_index ||
|
||||||
|
|||||||
Reference in New Issue
Block a user