Support xvid clips with more than 1 warp point (1/2)

BZ: 74615

The patch is an enhancement to support xvid clips with
more than 1 warp point. In the mix parser, we just keep
parsing the VOPs and don't report errors to OMX-IL layer.

The patch also handles the [S|B] packed frame situations.

Change-Id: I8533e6be0acac3cd56eb4d10cd1db889800274e9
Signed-off-by: wfeng6 <wei.feng@intel.com>
Reviewed-on: http://android.intel.com:8080/81198
Reviewed-by: Guo, Nana N <nana.n.guo@intel.com>
Reviewed-by: Tang, Richard <richard.tang@intel.com>
Reviewed-by: Chen, Tianmi <tianmi.chen@intel.com>
Reviewed-by: Jiang, Fei <fei.jiang@intel.com>
Reviewed-by: Ding, Haitao <haitao.ding@intel.com>
Tested-by: Ding, Haitao <haitao.ding@intel.com>
Reviewed-by: Wang, Elaine <elaine.wang@intel.com>
Reviewed-by: cactus <cactus@intel.com>
Tested-by: cactus <cactus@intel.com>
diff --git a/mix_vbp/viddec_fw/fw/codecs/mp4/parser/viddec_mp4_videoobjectlayer.c b/mix_vbp/viddec_fw/fw/codecs/mp4/parser/viddec_mp4_videoobjectlayer.c
index 93aed35..988883a 100644
--- a/mix_vbp/viddec_fw/fw/codecs/mp4/parser/viddec_mp4_videoobjectlayer.c
+++ b/mix_vbp/viddec_fw/fw/codecs/mp4/parser/viddec_mp4_videoobjectlayer.c
@@ -228,10 +228,8 @@
             cxt->no_of_sprite_warping_points = code >> 3;
             if (cxt->no_of_sprite_warping_points > 1)
             {
-                DEB("Error: mp4_Parse_VideoObject:bad no_of_sprite_warping_points %d\n",
+                DEB("Warning: mp4_Parse_VideoObject:bad no_of_sprite_warping_points %d\n",
                     cxt->no_of_sprite_warping_points);
-                ret = (mp4_Status_t)(MP4_STATUS_NOTSUPPORT | MP4_STATUS_REQD_DATA_ERROR);
-                break;
             }
 
             if ((vidObjLay->sprite_enable == MP4_SPRITE_GMC) && (cxt->sprite_brightness_change))
diff --git a/videodecoder/VideoDecoderMPEG4.cpp b/videodecoder/VideoDecoderMPEG4.cpp
index 5843b47..fcfcb2d 100644
--- a/videodecoder/VideoDecoderMPEG4.cpp
+++ b/videodecoder/VideoDecoderMPEG4.cpp
@@ -278,8 +278,6 @@
         int codingType = picParam->vop_fields.bits.vop_coding_type;
         if (codingType == MP4_VOP_TYPE_S && picParam->no_of_sprite_warping_points > 1) {
             WTRACE("Hardware only supports up to one warping point (stationary or translation)");
-            // TODO:  we actually can't decode this frame
-            return DECODE_FAIL;
         }
 
         if (picData->vop_coded == 0) {
@@ -371,7 +369,7 @@
             mAcquiredBuffer->renderBuffer.flag = 0;
             mAcquiredBuffer->renderBuffer.timeStamp = mCurrentPTS;
 
-            if (codingType == MP4_VOP_TYPE_I || codingType == MP4_VOP_TYPE_P) {
+            if (codingType != MP4_VOP_TYPE_B) {
                 mLastVOPCodingType = codingType;
                 mLastVOPTimeIncrement = picData->vop_time_increment;
             }