[Decode] Fix several issues for decode APO.

1. Use output surface width/height as output surface region width/height when app is not passing them.
2. Refine status report for AVC APO.
3. Fix decode prediction/marker feature update issue.
diff --git a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/av1/packet/decode_av1_packet.cpp b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/av1/packet/decode_av1_packet.cpp
index 61241a2..f55dbb6 100644
--- a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/av1/packet/decode_av1_packet.cpp
+++ b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/av1/packet/decode_av1_packet.cpp
@@ -126,18 +126,22 @@
     DECODE_CHK_STATUS(makerPacket->Execute(cmdBuffer));
 
 #ifdef _MMC_SUPPORTED
-        m_mmcState = m_av1Pipeline->GetMmcState();
-        if (m_mmcState && m_mmcState->IsMmcEnabled())
-        {
-            DECODE_CHK_STATUS(m_mmcState->SendPrologCmd(&cmdBuffer, false));
-        }
+    m_mmcState = m_av1Pipeline->GetMmcState();
+    bool isMmcEnabled = (m_mmcState != nullptr && m_mmcState->IsMmcEnabled());
+    if (isMmcEnabled)
+    {
+        DECODE_CHK_STATUS(m_mmcState->SendPrologCmd(&cmdBuffer, false));
+    }
 #endif
 
     MHW_GENERIC_PROLOG_PARAMS  genericPrologParams;
     MOS_ZeroMemory(&genericPrologParams, sizeof(genericPrologParams));
     genericPrologParams.pOsInterface = m_osInterface;
     genericPrologParams.pvMiInterface = m_miInterface;
-    genericPrologParams.bMmcEnabled = false;
+
+#ifdef _MMC_SUPPORTED
+    genericPrologParams.bMmcEnabled = isMmcEnabled;
+#endif
 
     DECODE_CHK_STATUS(Mhw_SendGenericPrologCmd(&cmdBuffer, &genericPrologParams));
 
diff --git a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_downsampling_feature.cpp b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_downsampling_feature.cpp
index f065180..98b945a 100644
--- a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_downsampling_feature.cpp
+++ b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_downsampling_feature.cpp
@@ -127,8 +127,10 @@
 
     m_outputSurfaceRegion.m_x      = procParams->m_outputSurfaceRegion.m_x;
     m_outputSurfaceRegion.m_y      = procParams->m_outputSurfaceRegion.m_y;
-    m_outputSurfaceRegion.m_width  = procParams->m_outputSurfaceRegion.m_width;
-    m_outputSurfaceRegion.m_height = procParams->m_outputSurfaceRegion.m_height;
+    m_outputSurfaceRegion.m_width  = (procParams->m_outputSurfaceRegion.m_width == 0) ?
+        m_outputSurface.dwWidth : procParams->m_outputSurfaceRegion.m_width;
+    m_outputSurfaceRegion.m_height = (procParams->m_outputSurfaceRegion.m_height == 0) ?
+        m_outputSurface.dwHeight : procParams->m_outputSurfaceRegion.m_height;
 
     if (procParams->m_inputSurface != nullptr)
     {
diff --git a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_marker.cpp b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_marker.cpp
index 4a655c3..916b8ff 100644
--- a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_marker.cpp
+++ b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_marker.cpp
@@ -40,22 +40,29 @@
     MOS_Delete(m_markerBuffer);
 }
 
-MOS_STATUS DecodeMarker::Init(CodechalDecodeParams& params)
+MOS_STATUS DecodeMarker::Update(void *params)
 {
     DECODE_FUNC_CALL();
 
-    m_setMarkerEnabled = params.m_setMarkerEnabled;
-    m_setMarkerNumTs   = params.setMarkerNumTs;
+    DECODE_CHK_NULL(params);
+
+    CodechalDecodeParams* decodeParams = (CodechalDecodeParams*)params;
+    m_setMarkerEnabled = decodeParams->m_setMarkerEnabled;
+    m_setMarkerNumTs   = decodeParams->setMarkerNumTs;
 
     if (m_setMarkerEnabled)
     {
-        DECODE_CHK_NULL(params.m_presSetMarker);
+        DECODE_CHK_NULL(decodeParams->m_presSetMarker);
     }
 
-    m_markerBuffer = MOS_New(MOS_BUFFER);
-    if (params.m_presSetMarker != nullptr)
+    if (m_markerBuffer == nullptr)
     {
-        m_markerBuffer->OsResource = *params.m_presSetMarker;
+        m_markerBuffer = MOS_New(MOS_BUFFER);
+    }
+
+    if (decodeParams->m_presSetMarker != nullptr)
+    {
+        m_markerBuffer->OsResource = *decodeParams->m_presSetMarker;
     }
     else
     {
diff --git a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_marker.h b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_marker.h
index cb3abe8..d63bfea 100644
--- a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_marker.h
+++ b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_marker.h
@@ -50,13 +50,13 @@
     virtual ~DecodeMarker();
 
     //!
-    //! \brief  Initialize decode predication
+    //! \brief  Update decode predication
     //! \param  [in] params
     //!         Reference to CodechalDecodeParams
     //! \return MOS_STATUS
     //!         MOS_STATUS_SUCCESS if success, else fail reason
     //!
-    virtual MOS_STATUS Init(CodechalDecodeParams& params);
+    virtual MOS_STATUS Update(void *params) override;
 
     bool            m_setMarkerEnabled = false;   //!< Indicates whether or not SetMarker is enabled
     PMOS_BUFFER     m_markerBuffer     = nullptr; //!< Resource for SetMarker
diff --git a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_predication.cpp b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_predication.cpp
index 6141bdf..0d291f3 100644
--- a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_predication.cpp
+++ b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_predication.cpp
@@ -42,24 +42,31 @@
     MOS_Delete(m_resPredication);
 }
 
-MOS_STATUS DecodePredication::Init(CodechalDecodeParams& params)
+MOS_STATUS DecodePredication::Update(void *params)
 {
     DECODE_FUNC_CALL();
 
-    m_predicationEnabled = params.m_predicationEnabled;
+    DECODE_CHK_NULL(params);
+
+    CodechalDecodeParams* decodeParams = (CodechalDecodeParams*)params;
+    m_predicationEnabled = decodeParams->m_predicationEnabled;
     if (!m_predicationEnabled)
     {
         return MOS_STATUS_SUCCESS;
     }
 
-    m_predicationNotEqualZero = params.m_predicationNotEqualZero;
-    m_predicationResOffset    = params.m_predicationResOffset;
+    m_predicationNotEqualZero = decodeParams->m_predicationNotEqualZero;
+    m_predicationResOffset    = decodeParams->m_predicationResOffset;
 
-    m_resPredication = MOS_New(MOS_BUFFER);
-    DECODE_CHK_NULL(m_resPredication);
-    if (params.m_presPredication != nullptr)
+    if (m_resPredication == nullptr)
     {
-        m_resPredication->OsResource = *params.m_presPredication;
+        m_resPredication = MOS_New(MOS_BUFFER);
+    }
+
+    DECODE_CHK_NULL(m_resPredication);
+    if (decodeParams->m_presPredication != nullptr)
+    {
+        m_resPredication->OsResource = *decodeParams->m_presPredication;
     }
     else
     {
@@ -72,7 +79,7 @@
         DECODE_CHK_NULL(m_predicationBuffer);
     }
 
-    *(params.m_tempPredicationBuffer) = &m_predicationBuffer->OsResource;
+    *(decodeParams->m_tempPredicationBuffer) = &m_predicationBuffer->OsResource;
 
     return MOS_STATUS_SUCCESS;
 }
diff --git a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_predication.h b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_predication.h
index d2baae8..32b6703 100644
--- a/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_predication.h
+++ b/media_driver/media_driver_next/agnostic/common/codec/hal/dec/shared/features/decode_predication.h
@@ -48,13 +48,13 @@
     //!
     virtual ~DecodePredication();
     //!
-    //! \brief  Initialize decode predication
+    //! \brief  Update decode predication
     //! \param  [in] params
     //!         Reference to CodechalDecodeParams
     //! \return MOS_STATUS
     //!         MOS_STATUS_SUCCESS if success, else fail reason
     //!
-    virtual MOS_STATUS Init(CodechalDecodeParams& params);
+    virtual MOS_STATUS Update(void *params) override;
 
     PMOS_BUFFER      m_predicationBuffer = nullptr;      //!< Internal resource for Predication
     PMOS_BUFFER      m_resPredication = nullptr;         //!< External resource for predication