[Sumover-dev] [svn commit] r4661 - in vic/branches/mpeg4: video

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Tue Mar 2 12:44:50 GMT 2010


Author: douglask
Date: Tue Mar  2 12:44:50 2010
New Revision: 4661

Modified:
   vic/branches/mpeg4/vic.2008.vcproj
   vic/branches/mpeg4/video/grabber-decklink.cpp

Log:
Removed dependency on ATL and atlbase.h in grabber-decklink.cpp.

Added code to ignore old captured frames in grabber-decklink.cpp.

Modified: vic/branches/mpeg4/vic.2008.vcproj
==============================================================================
--- vic/branches/mpeg4/vic.2008.vcproj	(original)
+++ vic/branches/mpeg4/vic.2008.vcproj	Tue Mar  2 12:44:50 2010
@@ -74,7 +74,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tcl85.lib tk85.lib uclmm.lib ws2_32.lib iphlpapi.lib vfw32.lib ddraw.lib dxguid.lib strmiids.lib quartz.lib"
+				AdditionalDependencies="tcl85.lib tk85.lib uclmm.lib ws2_32.lib comsuppwd.lib iphlpapi.lib vfw32.lib ddraw.lib dxguid.lib strmiids.lib quartz.lib"
 				LinkIncremental="2"
 				AdditionalLibraryDirectories="C:\Tcl\lib;&quot;$(DXSDK_DIR)\Lib\x86&quot;;&quot;$(SolutionDir)Debug&quot;"
 				IgnoreDefaultLibraryNames=""
@@ -157,7 +157,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tcl85.lib tk85.lib uclmm.lib ws2_32.lib iphlpapi.lib vfw32.lib ddraw.lib dxguid.lib strmiids.lib quartz.lib"
+				AdditionalDependencies="tcl85.lib tk85.lib uclmm.lib ws2_32.lib comsuppwd.lib iphlpapi.lib vfw32.lib ddraw.lib dxguid.lib strmiids.lib quartz.lib"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="C:\Tcl\lib;&quot;$(DXSDK_DIR)\Lib\x86&quot;;&quot;$(SolutionDir)Release&quot;"
 				GenerateDebugInformation="true"
@@ -241,7 +241,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tcl85.lib tk85.lib uclmm.lib ws2_32.lib iphlpapi.lib vfw32.lib ddraw.lib dxguid.lib strmiids.lib quartz.lib libgcc.a libmingwex.a libavcodec.a libavutil.a libpostproc.a libswscale.a libpthread.a libx264.a libz.a"
+				AdditionalDependencies="tcl85.lib tk85.lib uclmm.lib ws2_32.lib comsuppwd.lib iphlpapi.lib vfw32.lib ddraw.lib dxguid.lib strmiids.lib quartz.lib libgcc.a libmingwex.a libavcodec.a libavutil.a libpostproc.a libswscale.a libpthread.a libx264.a libz.a"
 				LinkIncremental="2"
 				AdditionalLibraryDirectories="C:\Tcl\lib;&quot;$(DXSDK_DIR)\Lib\x86&quot;;C:\msys\1.0\lib;&quot;C:\mingw\lib\gcc\mingw32\4.2.1-sjlj&quot;;c:\mingw\local\lib;c:\mingw\local\bin;c:\mingw\lib;C:\msys\lib;&quot;$(SolutionDir)Debug&quot;;C:\msys\1.0\local\lib;C:\msys\local\lib;C:\msys\1.0\lib\gcc\mingw32\4.4.0;C:\msys\1.0\lib\gcc\mingw32\4.2.0;C:\msys\lib\gcc\mingw32\4.4.0;C:\msys\lib\gcc\mingw32\4.2.0"
 				IgnoreDefaultLibraryNames="MSVCRTD.lib"
@@ -327,7 +327,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="tcl85.lib tk85.lib uclmm.lib ws2_32.lib iphlpapi.lib vfw32.lib ddraw.lib dxguid.lib strmiids.lib quartz.lib libgcc.a libmingwex.a libavcodec.a libavutil.a libpostproc.a libswscale.a libpthread.a libx264.a libz.a"
+				AdditionalDependencies="tcl85.lib tk85.lib uclmm.lib ws2_32.lib comsuppwd.lib iphlpapi.lib vfw32.lib ddraw.lib dxguid.lib strmiids.lib quartz.lib libgcc.a libmingwex.a libavcodec.a libavutil.a libpostproc.a libswscale.a libpthread.a libx264.a libz.a"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="C:\Tcl\lib;&quot;$(DXSDK_DIR)\Lib\x86&quot;;C:\msys\1.0\lib;&quot;C:\mingw\lib\gcc\mingw32\4.2.1-sjlj&quot;;c:\mingw\local\lib;c:\mingw\local\bin;c:\mingw\lib;C:\msys\lib;&quot;$(SolutionDir)Release&quot;;C:\msys\1.0\local\lib;C:\msys\local\lib;C:\msys\1.0\lib\gcc\mingw32\4.4.0;C:\msys\1.0\lib\gcc\mingw32\4.2.0;C:\msys\lib\gcc\mingw32\4.4.0;C:\msys\lib\gcc\mingw32\4.2.0"
 				IgnoreDefaultLibraryNames=""

Modified: vic/branches/mpeg4/video/grabber-decklink.cpp
==============================================================================
--- vic/branches/mpeg4/video/grabber-decklink.cpp	(original)
+++ vic/branches/mpeg4/video/grabber-decklink.cpp	Tue Mar  2 12:44:50 2010
@@ -46,7 +46,8 @@
 #include <string.h>
 
 #if defined(_WIN32) || defined(_WIN64)
-#include <atlbase.h>
+#include <objbase.h>
+#include <comutil.h>
 #include "DeckLinkAPI_h.h"
 #include "inttypes.h"
 #else
@@ -89,6 +90,8 @@
         mRefCount = 1;
         mReadIndex = 0;
         mWriteIndex = 0;
+        mLastReadFrameNum = 0;
+        mLastWriteFrameNum = 0;
 #ifdef HAVE_SWSCALE
         sws_context = NULL;
 #endif
@@ -113,6 +116,12 @@
             return NULL;
         }
 
+		// ignore older frames
+		if (mLastReadFrameNum >= mBufferFrameNum[mReadIndex] && mLastReadFrameNum <= 0xFFFFFFFF - mBufferSize) {
+            return NULL;
+        }
+        mLastReadFrameNum = mBufferFrameNum[mReadIndex];
+
         uint8_t *retval = (uint8_t *)(mBuffer[mReadIndex]);
         int nextElement = (mReadIndex + 1) % mBufferSize;
         mReadIndex = nextElement;
@@ -235,8 +244,8 @@
 #endif
 
 // fprintf(stderr, "*push* mBuffer[%i] = 0x%lx\n", mWriteIndex, mBuffer[mWriteIndex]);
+			mBufferFrameNum[mWriteIndex] = ++mLastWriteFrameNum;
             mWriteIndex = nextElementIndex;
-
         }
 
         return S_OK;
@@ -252,6 +261,9 @@
     volatile int32_t mWriteIndex;
     static const int32_t mBufferSize = 4;
     volatile uint8_t *mBuffer[mBufferSize];
+    volatile int32_t mLastReadFrameNum;
+    volatile int32_t mLastWriteFrameNum;
+    volatile uint32_t mBufferFrameNum[mBufferSize];
 #ifdef HAVE_SWSCALE
     SwsContext *sws_context;
     uint8_t *sws_src[3];
@@ -323,8 +335,9 @@
         return;
     }
 
-    CComPtr<IDeckLinkIterator> deckLinkIterator = NULL;
-    if (CoCreateInstance(CLSID_CDeckLinkIterator, NULL, CLSCTX_INPROC_SERVER, IID_IDeckLinkIterator, (void**)&deckLinkIterator) != S_OK || deckLinkIterator == NULL) {
+    IDeckLinkIterator* deckLinkIterator;
+    result = CoCreateInstance(CLSID_CDeckLinkIterator, NULL, CLSCTX_INPROC_SERVER, IID_IDeckLinkIterator, (void**)&deckLinkIterator);
+    if (FAILED(result)) {
         debug_msg("DeckLinkScanner: DeckLink iterator instance could not be created\n");
         CoUninitialize();
         return;
@@ -344,11 +357,11 @@
 
 #if defined(_WIN32) || defined(_WIN64) 
         char deviceNameString[64] = {};
-        CComBSTR cardNameBSTR;
+        BSTR cardNameBSTR;
 
         result = deckLink->GetModelName(&cardNameBSTR);
         if (result == S_OK) {
-            CW2A tmpstr1(cardNameBSTR);
+            _bstr_t tmpstr1(cardNameBSTR);
             strncpy_s(deviceNameString, sizeof(deviceNameString), tmpstr1, _TRUNCATE);
         }
 #elif __APPLE__
@@ -462,11 +475,11 @@
 
 #if defined(_WIN32) || defined(_WIN64) 
         char displayModeString[64] = {};
-        CComBSTR displayModeNameBSTR;
+        BSTR displayModeNameBSTR;
 
         result = displayMode->GetName(&displayModeNameBSTR);
         if (result == S_OK) {
-            CW2A tmpstr1(displayModeNameBSTR);
+            _bstr_t tmpstr1(displayModeNameBSTR);
             strncpy_s(displayModeString, sizeof(displayModeString), tmpstr1, _TRUNCATE);
         }
 #elif __APPLE__
@@ -642,11 +655,11 @@
 
 #if defined(_WIN32) || defined(_WIN64) 
                 char displayModeString[64] = {};
-                CComBSTR displayModeNameBSTR;
+                BSTR displayModeNameBSTR;
 
                 result = displayMode->GetName(&displayModeNameBSTR);
                 if (result == S_OK) {
-                    CW2A tmpstr1(displayModeNameBSTR);
+                    _bstr_t tmpstr1(displayModeNameBSTR);
                     strncpy_s(displayModeString, sizeof(displayModeString), tmpstr1, _TRUNCATE);
                 }
 #elif __APPLE__



More information about the Sumover-dev mailing list