summaryrefslogtreecommitdiff
path: root/mfx_stub/mfxvideo.c
diff options
context:
space:
mode:
Diffstat (limited to 'mfx_stub/mfxvideo.c')
-rw-r--r--mfx_stub/mfxvideo.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/mfx_stub/mfxvideo.c b/mfx_stub/mfxvideo.c
index 6057ba4..a3bc8a8 100644
--- a/mfx_stub/mfxvideo.c
+++ b/mfx_stub/mfxvideo.c
@@ -146,8 +146,7 @@ static void ParseSps(struct Bitstream* nalu, mfxSession session) {
session->ppb.sps_max_dec_pic_buffering_minus1 =
(uint8_t)BitstreamReadUE(nalu);
- session->ppb.pic_fields.bits.NoPicReorderingFlag =
- !!BitstreamReadUE(nalu); // sps_max_num_reorder_pics
+ assert(BitstreamReadUE(nalu) == 0); // sps_max_num_reorder_pics
assert(BitstreamReadUE(nalu) == 0); // sps_max_latency_increase_plus1
session->ppb.log2_min_luma_coding_block_size_minus3 =
@@ -329,15 +328,15 @@ void ParseSliceSegmentHeader(struct Bitstream* nalu, mfxSession session,
session->spb.LongSliceFlags.fields.slice_temporal_mvp_enabled_flag =
(uint32_t)BitstreamReadU(nalu, 1);
}
- session->spb.LongSliceFlags.fields.slice_sao_luma_flag =
- (uint32_t)BitstreamReadU(nalu, 1);
- assert(session->spb.LongSliceFlags.fields.slice_sao_luma_flag == 1);
-
- session->spb.LongSliceFlags.fields.slice_sao_chroma_flag =
- (uint32_t)BitstreamReadU(nalu, 1);
- assert(session->spb.LongSliceFlags.fields.slice_sao_chroma_flag == 1);
}
+ session->spb.LongSliceFlags.fields.slice_sao_luma_flag =
+ (uint32_t)BitstreamReadU(nalu, 1);
+ assert(session->spb.LongSliceFlags.fields.slice_sao_luma_flag == 1);
+ session->spb.LongSliceFlags.fields.slice_sao_chroma_flag =
+ (uint32_t)BitstreamReadU(nalu, 1);
+ assert(session->spb.LongSliceFlags.fields.slice_sao_chroma_flag == 1);
+
// vvv weird vvv
session->spb.collocated_ref_idx = 0xff;
session->spb.LongSliceFlags.fields.collocated_from_l0_flag = 1;
@@ -562,11 +561,13 @@ mfxStatus MFXVideoDECODE_DecodeFrameAsync(mfxSession session, mfxBitstream* bs,
session->allocator.pthis, mid_current, &psurface_current);
if (status != MFX_ERR_NONE) return status;
+ if (nal_unit_type == IDR_W_RADL) session->local_frame_counter = 0;
session->ppb.CurrPic.picture_id = *(VASurfaceID*)psurface_current;
session->ppb.CurrPic.pic_order_cnt = (int32_t)session->local_frame_counter;
for (size_t i = 0; i < LENGTH(session->ppb.ReferenceFrames); i++) {
session->ppb.ReferenceFrames[i].picture_id = VA_INVALID_SURFACE;
}
+ session->ppb.pic_fields.bits.NoPicReorderingFlag = 1;
session->ppb.pic_fields.bits.NoBiPredFlag = 1;
session->ppb.slice_parsing_fields.bits.RapPicFlag =
BLA_W_LP <= nal_unit_type && nal_unit_type <= CRA_NUT;
@@ -589,9 +590,7 @@ mfxStatus MFXVideoDECODE_DecodeFrameAsync(mfxSession session, mfxBitstream* bs,
////////////////////////////////////////////////////////////////////////////
- if (nal_unit_type == IDR_W_RADL) {
- session->local_frame_counter = 0;
- } else {
+ if (session->local_frame_counter) {
mfxHDL psurface_prev;
mfxMemId mid_prev =
session