[prev in list] [next in list] [prev in thread] [next in thread] 

List:       helix-datatype-cvs
Subject:    [Datatype-cvs] avi/fileformat avistrm.cpp,1.49,1.50
From:       ching_li () helixcommunity ! org
Date:       2011-02-18 7:57:50
Message-ID: 201102180758.p1I7w0CR012758 () mailer ! progressive-comp ! com
[Download RAW message or body]

Update of /cvsroot/datatype/avi/fileformat
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv19272

Modified Files:
	avistrm.cpp 
Log Message:
Fix bug 12720: A damaged AVI content caused all thumbnails can not be displayed.

Index: avistrm.cpp
===================================================================
RCS file: /cvsroot/datatype/avi/fileformat/avistrm.cpp,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -d -r1.49 -r1.50
--- avistrm.cpp	18 Jan 2011 02:13:00 -0000	1.49
+++ avistrm.cpp	18 Feb 2011 07:57:47 -0000	1.50
@@ -84,6 +84,7 @@
 #define MAX_VIDEO_PREROLL             30000
 #define MIN_AUDIO_PREROLL             750
 #define MAX_AUDIO_PREROLL             30000
+#define MAX_FRAMERATE                 120
 
 #ifdef NET_ENDIAN
 
@@ -720,6 +721,9 @@
         return HXR_OUTOFMEMORY;
     }
 
+    UINT32 ulPreroll = 0;
+    ULONG32 ulAverageBitrate = 0;
+
     if ( (HXR_OK == m_pCommonClassFactory->CreateInstance(CLSID_IHXBuffer,
                                                           (void**)&pMTBuf)) &&
          (HXR_OK == m_pCommonClassFactory->CreateInstance(CLSID_IHXBuffer,
@@ -736,8 +740,6 @@
             ulMaxPacketSize = DEFAULT_NON_LOCAL_PACKET_SIZE;
         }
 
-        HX_RESULT result = HXR_OK;
-
         switch (m_header.ulType)
         {
             case AVI_VIDS_TYPE:
@@ -784,10 +786,8 @@
                             m_pPayloadFormatter = new JPEGPayloadFormat();
                             if (!m_pPayloadFormatter)
                             {
-                                HX_RELEASE(pOpaqueData);
-                                HX_RELEASE(pSNBuf);
-                                HX_RELEASE(pMTBuf);
-                                return HXR_OUTOFMEMORY;
+                                result = HXR_OUTOFMEMORY;
+                                goto On_Error;
                             }
                             HX_ADDREF(m_pPayloadFormatter);
                             m_pPayloadFormatter->Init(m_pContext, TRUE);
@@ -875,6 +875,11 @@
                 }
 
                 m_fChunksPerSecond = (double) m_header.ulRate / m_header.ulScale;
+                if (m_fChunksPerSecond > MAX_FRAMERATE)
+                {
+                    result = HXR_UNEXPECTED;
+                    goto On_Error;
+                }
                 m_fSamplesPerSecond = m_fChunksPerSecond;
 
                 INT32 ulMaxChunkSize = 0;
@@ -1130,10 +1135,8 @@
                 break;
             }
             default:
-                HX_RELEASE(pOpaqueData);
-                HX_RELEASE(pSNBuf);
-                HX_RELEASE(pMTBuf);
-                return HXR_OUTOFMEMORY;
+                result = HXR_OUTOFMEMORY;
+                goto On_Error;
         }
 
         // Set opaque data:
@@ -1208,7 +1211,7 @@
 
     
     // Averate bit rate:
-    ULONG32 ulAverageBitrate = (ULONG32) (8 * m_ulAvgChunkSize * m_fChunksPerSecond);
+    ulAverageBitrate = (ULONG32) (8 * m_ulAvgChunkSize * m_fChunksPerSecond);
     pHeader->SetPropertyULONG32("AvgBitRate", ulAverageBitrate);
     HXLOGL4(HXLOG_AVIX,"\t\tAvgBitRate:\t%lu", ulAverageBitrate);
 
@@ -1225,7 +1228,7 @@
     }
         
     // Preroll:
-    UINT32 ulPreroll = (UINT32) (((double) m_ulMaxByteDeflict / ulAverageBitrate) * 1000);
+    ulPreroll = (UINT32) (((double) m_ulMaxByteDeflict / ulAverageBitrate) * 1000);
 
     if (IsAudio())
     {
@@ -1274,10 +1277,8 @@
     m_pPayloadFormatter = new SimpleSegmentPayloadFormat();
     if (!m_pPayloadFormatter)
     {
-        HX_RELEASE(pOpaqueData);
-        HX_RELEASE(pSNBuf);
-        HX_RELEASE(pMTBuf);
-        return HXR_OUTOFMEMORY;
+        result = HXR_OUTOFMEMORY;
+        goto On_Error;
     }
     HX_ADDREF(m_pPayloadFormatter);
     m_pPayloadFormatter->Init(m_pContext, TRUE);
@@ -1298,6 +1299,7 @@
             break;
     }
 
+On_Error:
     HX_RELEASE(pOpaqueData);
     HX_RELEASE(pSNBuf);
     HX_RELEASE(pMTBuf);


_______________________________________________
Datatype-cvs mailing list
Datatype-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/datatype-cvs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic