[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;"$(DXSDK_DIR)\Lib\x86";"$(SolutionDir)Debug""
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;"$(DXSDK_DIR)\Lib\x86";"$(SolutionDir)Release""
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;"$(DXSDK_DIR)\Lib\x86";C:\msys\1.0\lib;"C:\mingw\lib\gcc\mingw32\4.2.1-sjlj";c:\mingw\local\lib;c:\mingw\local\bin;c:\mingw\lib;C:\msys\lib;"$(SolutionDir)Debug";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;"$(DXSDK_DIR)\Lib\x86";C:\msys\1.0\lib;"C:\mingw\lib\gcc\mingw32\4.2.1-sjlj";c:\mingw\local\lib;c:\mingw\local\bin;c:\mingw\lib;C:\msys\lib;"$(SolutionDir)Release";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