mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-21 13:08:08 +00:00
make it utf8 and reindent
git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@413 3f6dc0c8-ddfe-455d-9043-3cd528dc4637
This commit is contained in:
parent
adac242a1b
commit
2b73e44ee9
1 changed files with 252 additions and 341 deletions
|
|
@ -44,9 +44,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "dxfilter.h"
|
||||
EXTERN_C const CLSID CLSID_NullRenderer;
|
||||
|
||||
HRESULT AddGraphToRot(IUnknown *pUnkGraph, DWORD *pdwRegister);
|
||||
void RemoveGraphFromRot(DWORD pdwRegister);
|
||||
|
||||
typedef struct V4wState{
|
||||
|
||||
char dev[512];
|
||||
|
|
@ -102,7 +99,7 @@ HRESULT ( Callback)(IMediaSample* pSample, REFERENCE_TIME* sTime, REFERENCE_TIME
|
|||
if (s->pix_fmt==MS_RGB24)
|
||||
{
|
||||
/* Conversion from top down bottom up (BGR to RGB and flip) */
|
||||
unsigned long Index,nPixels;
|
||||
unsigned long Index,nPixels;
|
||||
unsigned char *blue;
|
||||
unsigned char tmp;
|
||||
short iPixelSize;
|
||||
|
|
@ -111,7 +108,7 @@ HRESULT ( Callback)(IMediaSample* pSample, REFERENCE_TIME* sTime, REFERENCE_TIME
|
|||
|
||||
nPixels=s->vsize.width*s->vsize.height;
|
||||
iPixelSize=24/8;
|
||||
|
||||
|
||||
for(Index=0;Index!=nPixels;Index++) // For each pixel
|
||||
{
|
||||
tmp=*blue;
|
||||
|
|
@ -119,7 +116,7 @@ HRESULT ( Callback)(IMediaSample* pSample, REFERENCE_TIME* sTime, REFERENCE_TIME
|
|||
*(blue+2)=tmp;
|
||||
blue+=iPixelSize;
|
||||
}
|
||||
|
||||
|
||||
unsigned char *pLine1, *pLine2;
|
||||
int iLineLen,iIndex;
|
||||
|
||||
|
|
@ -138,7 +135,7 @@ HRESULT ( Callback)(IMediaSample* pSample, REFERENCE_TIME* sTime, REFERENCE_TIME
|
|||
}
|
||||
}
|
||||
buf->b_wptr+=size;
|
||||
|
||||
|
||||
ms_mutex_lock(&s->mutex);
|
||||
putq(&s->rq, buf);
|
||||
ms_mutex_unlock(&s->mutex);
|
||||
|
|
@ -149,39 +146,39 @@ HRESULT ( Callback)(IMediaSample* pSample, REFERENCE_TIME* sTime, REFERENCE_TIME
|
|||
|
||||
HRESULT GetPinCategory(IPin *pPin, GUID *pPinCategory)
|
||||
{
|
||||
HRESULT hr;
|
||||
IKsPropertySet *pKs;
|
||||
hr = pPin->QueryInterface(IID_IKsPropertySet, (void **)&pKs);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
// The pin does not support IKsPropertySet.
|
||||
return hr;
|
||||
}
|
||||
// Try to retrieve the pin category.
|
||||
DWORD cbReturned;
|
||||
hr = pKs->Get(AMPROPSETID_Pin, AMPROPERTY_PIN_CATEGORY, NULL, 0,
|
||||
pPinCategory, sizeof(GUID), &cbReturned);
|
||||
HRESULT hr;
|
||||
IKsPropertySet *pKs;
|
||||
hr = pPin->QueryInterface(IID_IKsPropertySet, (void **)&pKs);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
// The pin does not support IKsPropertySet.
|
||||
return hr;
|
||||
}
|
||||
// Try to retrieve the pin category.
|
||||
DWORD cbReturned;
|
||||
hr = pKs->Get(AMPROPSETID_Pin, AMPROPERTY_PIN_CATEGORY, NULL, 0,
|
||||
pPinCategory, sizeof(GUID), &cbReturned);
|
||||
|
||||
// If this succeeded, pPinCategory now contains the category GUID.
|
||||
// If this succeeded, pPinCategory now contains the category GUID.
|
||||
|
||||
pKs->Release();
|
||||
return hr;
|
||||
pKs->Release();
|
||||
return hr;
|
||||
}
|
||||
|
||||
int try_format(V4wState *s, int format, GUID *pPinCategory)
|
||||
{
|
||||
HRESULT hr=S_OK;
|
||||
IEnumPins *pEnum=0;
|
||||
ULONG ulFound;
|
||||
IPin *pPin;
|
||||
HRESULT hr=S_OK;
|
||||
IEnumPins *pEnum=0;
|
||||
ULONG ulFound;
|
||||
IPin *pPin;
|
||||
|
||||
GUID guid_format;
|
||||
DWORD biCompression;
|
||||
DWORD biBitCount;
|
||||
|
||||
// Verify input
|
||||
if (!s->m_pDeviceFilter)
|
||||
return -1;
|
||||
if (!s->m_pDeviceFilter)
|
||||
return -1;
|
||||
|
||||
if (format == MS_YUV420P)
|
||||
guid_format = (GUID)FOURCCMap(MAKEFOURCC('I','4','2','0'));
|
||||
|
|
@ -204,7 +201,7 @@ int try_format(V4wState *s, int format, GUID *pPinCategory)
|
|||
biCompression = BI_RGB;
|
||||
else if (format == MS_YUY2)
|
||||
biCompression = MAKEFOURCC('Y','U','Y','2');
|
||||
|
||||
|
||||
if (format == MS_YUV420P)
|
||||
biBitCount = 12;
|
||||
else if (format == MS_YUYV)
|
||||
|
|
@ -215,32 +212,32 @@ int try_format(V4wState *s, int format, GUID *pPinCategory)
|
|||
biBitCount = 24;
|
||||
else if (format == MS_YUY2)
|
||||
biBitCount = 16;
|
||||
|
||||
// Get pin enumerator
|
||||
|
||||
// Get pin enumerator
|
||||
hr = s->m_pDeviceFilter->EnumPins(&pEnum);
|
||||
if(FAILED(hr))
|
||||
return -1;
|
||||
if(FAILED(hr))
|
||||
return -1;
|
||||
|
||||
pEnum->Reset();
|
||||
pEnum->Reset();
|
||||
|
||||
// Count every pin on the filter
|
||||
while(S_OK == pEnum->Next(1, &pPin, &ulFound))
|
||||
{
|
||||
PIN_DIRECTION pindir = (PIN_DIRECTION) 3;
|
||||
// Count every pin on the filter
|
||||
while(S_OK == pEnum->Next(1, &pPin, &ulFound))
|
||||
{
|
||||
PIN_DIRECTION pindir = (PIN_DIRECTION) 3;
|
||||
|
||||
hr = pPin->QueryDirection(&pindir);
|
||||
hr = pPin->QueryDirection(&pindir);
|
||||
|
||||
if(pindir != PINDIR_INPUT)
|
||||
if(pindir != PINDIR_INPUT)
|
||||
{
|
||||
IEnumMediaTypes *ppEnum;
|
||||
ULONG ulFound2;
|
||||
ULONG ulFound2;
|
||||
|
||||
GetPinCategory(pPin, pPinCategory);
|
||||
if (*pPinCategory!=PIN_CATEGORY_CAPTURE
|
||||
&& *pPinCategory!=PIN_CATEGORY_PREVIEW)
|
||||
continue;
|
||||
GetPinCategory(pPin, pPinCategory);
|
||||
if (*pPinCategory!=PIN_CATEGORY_CAPTURE
|
||||
&& *pPinCategory!=PIN_CATEGORY_PREVIEW)
|
||||
continue;
|
||||
|
||||
hr = pPin->EnumMediaTypes(&ppEnum);
|
||||
hr = pPin->EnumMediaTypes(&ppEnum);
|
||||
if(FAILED(hr))
|
||||
continue;
|
||||
|
||||
|
|
@ -259,33 +256,33 @@ int try_format(V4wState *s, int format, GUID *pPinCategory)
|
|||
if (pvi->bmiHeader.biBitCount!=biBitCount)
|
||||
continue;
|
||||
|
||||
pPin->Release();
|
||||
pEnum->Release();
|
||||
pPin->Release();
|
||||
pEnum->Release();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
pPin->Release();
|
||||
}
|
||||
pPin->Release();
|
||||
}
|
||||
|
||||
pEnum->Release();
|
||||
return -1;
|
||||
pEnum->Release();
|
||||
return -1;
|
||||
}
|
||||
|
||||
int try_format_size(V4wState *s, int format, int width, int height, GUID *pPinCategory)
|
||||
{
|
||||
HRESULT hr=S_OK;
|
||||
IEnumPins *pEnum=0;
|
||||
ULONG ulFound;
|
||||
IPin *pPin;
|
||||
HRESULT hr=S_OK;
|
||||
IEnumPins *pEnum=0;
|
||||
ULONG ulFound;
|
||||
IPin *pPin;
|
||||
|
||||
GUID guid_format;
|
||||
DWORD biCompression;
|
||||
DWORD biBitCount;
|
||||
|
||||
// Verify input
|
||||
if (!s->m_pDeviceFilter)
|
||||
return -1;
|
||||
if (!s->m_pDeviceFilter)
|
||||
return -1;
|
||||
|
||||
if (format == MS_YUV420P)
|
||||
guid_format = (GUID)FOURCCMap(MAKEFOURCC('I','4','2','0'));
|
||||
|
|
@ -308,7 +305,7 @@ int try_format_size(V4wState *s, int format, int width, int height, GUID *pPinCa
|
|||
biCompression = BI_RGB;
|
||||
else if (format == MS_YUY2)
|
||||
biCompression = MAKEFOURCC('Y','U','Y','2');
|
||||
|
||||
|
||||
if (format == MS_YUV420P)
|
||||
biBitCount = 12;
|
||||
else if (format == MS_YUYV)
|
||||
|
|
@ -320,32 +317,32 @@ int try_format_size(V4wState *s, int format, int width, int height, GUID *pPinCa
|
|||
else if (format == MS_YUY2)
|
||||
biBitCount = 16;
|
||||
|
||||
// Get pin enumerator
|
||||
// Get pin enumerator
|
||||
hr = s->m_pDeviceFilter->EnumPins(&pEnum);
|
||||
if(FAILED(hr))
|
||||
return -1;
|
||||
if(FAILED(hr))
|
||||
return -1;
|
||||
|
||||
pEnum->Reset();
|
||||
pEnum->Reset();
|
||||
|
||||
// Count every pin on the filter
|
||||
while(S_OK == pEnum->Next(1, &pPin, &ulFound))
|
||||
{
|
||||
PIN_DIRECTION pindir = (PIN_DIRECTION) 3;
|
||||
// Count every pin on the filter
|
||||
while(S_OK == pEnum->Next(1, &pPin, &ulFound))
|
||||
{
|
||||
PIN_DIRECTION pindir = (PIN_DIRECTION) 3;
|
||||
|
||||
hr = pPin->QueryDirection(&pindir);
|
||||
hr = pPin->QueryDirection(&pindir);
|
||||
|
||||
if(pindir != PINDIR_INPUT)
|
||||
if(pindir != PINDIR_INPUT)
|
||||
{
|
||||
IEnumMediaTypes *ppEnum;
|
||||
ULONG ulFound2;
|
||||
ULONG ulFound2;
|
||||
hr = pPin->EnumMediaTypes(&ppEnum);
|
||||
if(FAILED(hr))
|
||||
continue;
|
||||
|
||||
GUID pCurrentPinCategory;
|
||||
GetPinCategory(pPin, &pCurrentPinCategory);
|
||||
if (*pPinCategory!=pCurrentPinCategory)
|
||||
continue;
|
||||
GUID pCurrentPinCategory;
|
||||
GetPinCategory(pPin, &pCurrentPinCategory);
|
||||
if (*pPinCategory!=pCurrentPinCategory)
|
||||
continue;
|
||||
|
||||
AM_MEDIA_TYPE *ppMediaTypes;
|
||||
while(S_OK == ppEnum->Next(1, &ppMediaTypes, &ulFound2))
|
||||
|
|
@ -370,16 +367,16 @@ int try_format_size(V4wState *s, int format, int width, int height, GUID *pPinCa
|
|||
s->vsize.height = height;
|
||||
|
||||
pPin->Release();
|
||||
pEnum->Release();
|
||||
pEnum->Release();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
pPin->Release();
|
||||
}
|
||||
pPin->Release();
|
||||
}
|
||||
|
||||
pEnum->Release();
|
||||
return -1;
|
||||
pEnum->Release();
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int v4w_configure_videodevice(V4wState *s)
|
||||
|
|
@ -389,10 +386,10 @@ static int v4w_configure_videodevice(V4wState *s)
|
|||
|
||||
// get a Graph
|
||||
HRESULT hr= CoCreateInstance (CLSID_FilterGraph,
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_IGraphBuilder, //IID_IBaseFilter,
|
||||
(void **)&s->m_pGraph);
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_IGraphBuilder, //IID_IBaseFilter,
|
||||
(void **)&s->m_pGraph);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
return -1;
|
||||
|
|
@ -400,10 +397,10 @@ static int v4w_configure_videodevice(V4wState *s)
|
|||
|
||||
// get a CaptureGraphBuilder2
|
||||
hr= CoCreateInstance (CLSID_CaptureGraphBuilder2,
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_ICaptureGraphBuilder2, //IID_IBaseFilter,
|
||||
(void **)&s->m_pBuilder);
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_ICaptureGraphBuilder2, //IID_IBaseFilter,
|
||||
(void **)&s->m_pBuilder);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
return -2;
|
||||
|
|
@ -420,17 +417,6 @@ static int v4w_configure_videodevice(V4wState *s)
|
|||
}
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
HANDLE m_hLogFile=CreateFile(L"DShowGraphLog.txt",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
|
||||
if(m_hLogFile!=INVALID_HANDLE_VALUE)
|
||||
{
|
||||
hr=s->m_pGraph->SetLogFile((DWORD_PTR)m_hLogFile);
|
||||
/* ASSERT(SUCCEEDED(hr)); */
|
||||
}
|
||||
|
||||
//AddGraphToRot(s->m_pGraph, &s->rotregvalue);
|
||||
#endif
|
||||
|
||||
ICreateDevEnum *pCreateDevEnum = NULL;
|
||||
IEnumMoniker *pEnumMoniker = NULL;
|
||||
IMoniker *pMoniker = NULL;
|
||||
|
|
@ -454,49 +440,49 @@ static int v4w_configure_videodevice(V4wState *s)
|
|||
pEnumMoniker->Reset();
|
||||
|
||||
int pos=0;
|
||||
while(S_OK == pEnumMoniker->Next(1, &pMoniker, &nFetched) )
|
||||
{
|
||||
IPropertyBag *pBag;
|
||||
hr = pMoniker->BindToStorage( 0, 0, IID_IPropertyBag, (void**) &pBag );
|
||||
if( hr != S_OK )
|
||||
continue;
|
||||
while(S_OK == pEnumMoniker->Next(1, &pMoniker, &nFetched) )
|
||||
{
|
||||
IPropertyBag *pBag;
|
||||
hr = pMoniker->BindToStorage( 0, 0, IID_IPropertyBag, (void**) &pBag );
|
||||
if( hr != S_OK )
|
||||
continue;
|
||||
|
||||
if (s->dev[0]=='\0')
|
||||
break;
|
||||
if (s->dev[0]=='\0')
|
||||
break;
|
||||
|
||||
VARIANT var;
|
||||
VariantInit(&var);
|
||||
hr = pBag->Read( L"FriendlyName", &var, NULL );
|
||||
if( hr != S_OK )
|
||||
{
|
||||
pMoniker->Release();
|
||||
continue;
|
||||
}
|
||||
//USES_CONVERSION;
|
||||
char szName[256];
|
||||
VARIANT var;
|
||||
VariantInit(&var);
|
||||
hr = pBag->Read( L"FriendlyName", &var, NULL );
|
||||
if( hr != S_OK )
|
||||
{
|
||||
pMoniker->Release();
|
||||
continue;
|
||||
}
|
||||
//USES_CONVERSION;
|
||||
char szName[256];
|
||||
|
||||
WideCharToMultiByte(CP_ACP,0,var.bstrVal,-1,szName,256,0,0);
|
||||
VariantClear(&var);
|
||||
WideCharToMultiByte(CP_UTF8,0,var.bstrVal,-1,szName,256,0,0);
|
||||
VariantClear(&var);
|
||||
|
||||
if (strcmp(szName, s->dev)==0)
|
||||
break;
|
||||
if (strcmp(szName, s->dev)==0)
|
||||
break;
|
||||
|
||||
pMoniker->Release();
|
||||
pBag->Release();
|
||||
pMoniker=NULL;
|
||||
pBag=NULL;
|
||||
pMoniker->Release();
|
||||
pBag->Release();
|
||||
pMoniker=NULL;
|
||||
pBag=NULL;
|
||||
}
|
||||
|
||||
if(pMoniker==NULL)
|
||||
{
|
||||
int pos=0;
|
||||
while(S_OK == pEnumMoniker->Next(1, &pMoniker, &nFetched) )
|
||||
{
|
||||
IPropertyBag *pBag;
|
||||
hr = pMoniker->BindToStorage( 0, 0, IID_IPropertyBag, (void**) &pBag );
|
||||
if( hr != S_OK )
|
||||
continue;
|
||||
}
|
||||
{
|
||||
int pos=0;
|
||||
while(S_OK == pEnumMoniker->Next(1, &pMoniker, &nFetched) )
|
||||
{
|
||||
IPropertyBag *pBag;
|
||||
hr = pMoniker->BindToStorage( 0, 0, IID_IPropertyBag, (void**) &pBag );
|
||||
if( hr != S_OK )
|
||||
continue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -518,7 +504,7 @@ static int v4w_configure_videodevice(V4wState *s)
|
|||
pCreateDevEnum->Release();
|
||||
|
||||
|
||||
GUID pPinCategory;
|
||||
GUID pPinCategory;
|
||||
|
||||
if (try_format(s, s->pix_fmt, &pPinCategory)==0)
|
||||
s->pix_fmt = s->pix_fmt;
|
||||
|
|
@ -537,7 +523,7 @@ static int v4w_configure_videodevice(V4wState *s)
|
|||
ms_error("Unsupported video pixel format.");
|
||||
return -8;
|
||||
}
|
||||
|
||||
|
||||
if (s->pix_fmt == MS_YUV420P)
|
||||
ms_message("Driver supports YUV420P, using that format.");
|
||||
else if (s->pix_fmt == MS_YUY2)
|
||||
|
|
@ -578,10 +564,10 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
|
||||
// get a Graph
|
||||
HRESULT hr= CoCreateInstance (CLSID_FilterGraph,
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_IGraphBuilder, //IID_IBaseFilter,
|
||||
(void **)&s->m_pGraph);
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_IGraphBuilder, //IID_IBaseFilter,
|
||||
(void **)&s->m_pGraph);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
return -1;
|
||||
|
|
@ -589,10 +575,10 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
|
||||
// get a CaptureGraphBuilder2
|
||||
hr= CoCreateInstance (CLSID_CaptureGraphBuilder2,
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_ICaptureGraphBuilder2, //IID_IBaseFilter,
|
||||
(void **)&s->m_pBuilder);
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_ICaptureGraphBuilder2, //IID_IBaseFilter,
|
||||
(void **)&s->m_pBuilder);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
return -2;
|
||||
|
|
@ -609,17 +595,6 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
}
|
||||
|
||||
|
||||
#ifdef _DEBUG
|
||||
HANDLE m_hLogFile=CreateFile(L"DShowGraphLog.txt",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
|
||||
if(m_hLogFile!=INVALID_HANDLE_VALUE)
|
||||
{
|
||||
hr=s->m_pGraph->SetLogFile((DWORD_PTR)m_hLogFile);
|
||||
/* ASSERT(SUCCEEDED(hr)); */
|
||||
}
|
||||
|
||||
//AddGraphToRot(s->m_pGraph, &s->rotregvalue);
|
||||
#endif
|
||||
|
||||
ICreateDevEnum *pCreateDevEnum = NULL;
|
||||
IEnumMoniker *pEnumMoniker = NULL;
|
||||
IMoniker *pMoniker = NULL;
|
||||
|
|
@ -643,37 +618,37 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
pEnumMoniker->Reset();
|
||||
|
||||
int pos=0;
|
||||
while(S_OK == pEnumMoniker->Next(1, &pMoniker, &nFetched) )
|
||||
{
|
||||
IPropertyBag *pBag;
|
||||
hr = pMoniker->BindToStorage( 0, 0, IID_IPropertyBag, (void**) &pBag );
|
||||
if( hr != S_OK )
|
||||
continue;
|
||||
while(S_OK == pEnumMoniker->Next(1, &pMoniker, &nFetched) )
|
||||
{
|
||||
IPropertyBag *pBag;
|
||||
hr = pMoniker->BindToStorage( 0, 0, IID_IPropertyBag, (void**) &pBag );
|
||||
if( hr != S_OK )
|
||||
continue;
|
||||
|
||||
if (s->dev[0]=='\0')
|
||||
break;
|
||||
if (s->dev[0]=='\0')
|
||||
break;
|
||||
|
||||
VARIANT var;
|
||||
VariantInit(&var);
|
||||
hr = pBag->Read( L"FriendlyName", &var, NULL );
|
||||
if( hr != S_OK )
|
||||
{
|
||||
pMoniker->Release();
|
||||
continue;
|
||||
}
|
||||
//USES_CONVERSION;
|
||||
char szName[256];
|
||||
VARIANT var;
|
||||
VariantInit(&var);
|
||||
hr = pBag->Read( L"FriendlyName", &var, NULL );
|
||||
if( hr != S_OK )
|
||||
{
|
||||
pMoniker->Release();
|
||||
continue;
|
||||
}
|
||||
//USES_CONVERSION;
|
||||
char szName[256];
|
||||
|
||||
WideCharToMultiByte(CP_ACP,0,var.bstrVal,-1,szName,256,0,0);
|
||||
VariantClear(&var);
|
||||
WideCharToMultiByte(CP_UTF8,0,var.bstrVal,-1,szName,256,0,0);
|
||||
VariantClear(&var);
|
||||
|
||||
if (strcmp(szName, s->dev)==0)
|
||||
break;
|
||||
if (strcmp(szName, s->dev)==0)
|
||||
break;
|
||||
|
||||
pMoniker->Release();
|
||||
pBag->Release();
|
||||
pMoniker=NULL;
|
||||
pBag=NULL;
|
||||
pMoniker->Release();
|
||||
pBag->Release();
|
||||
pMoniker=NULL;
|
||||
pBag=NULL;
|
||||
}
|
||||
|
||||
if(pMoniker==NULL)
|
||||
|
|
@ -694,7 +669,7 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
pCreateDevEnum->Release();
|
||||
|
||||
|
||||
GUID pPinCategory;
|
||||
GUID pPinCategory;
|
||||
|
||||
if (try_format(s, s->pix_fmt, &pPinCategory)==0)
|
||||
s->pix_fmt = s->pix_fmt;
|
||||
|
|
@ -713,7 +688,7 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
ms_error("Unsupported video pixel format.");
|
||||
return -8;
|
||||
}
|
||||
|
||||
|
||||
if (s->pix_fmt == MS_YUV420P)
|
||||
ms_message("Driver supports YUV420P, using that format.");
|
||||
else if (s->pix_fmt == MS_YUY2)
|
||||
|
|
@ -767,12 +742,12 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
else if (s->pix_fmt == MS_RGB24)
|
||||
m = MEDIASUBTYPE_RGB24;
|
||||
mt.SetSubtype(&m);
|
||||
|
||||
|
||||
mt.formattype = FORMAT_VideoInfo;
|
||||
mt.SetTemporalCompression(FALSE);
|
||||
|
||||
VIDEOINFO *pvi = (VIDEOINFO *)
|
||||
mt.AllocFormatBuffer(sizeof(VIDEOINFO));
|
||||
mt.AllocFormatBuffer(sizeof(VIDEOINFO));
|
||||
if (NULL == pvi)
|
||||
return -11;
|
||||
ZeroMemory(pvi, sizeof(VIDEOINFO));
|
||||
|
|
@ -787,7 +762,7 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
pvi->bmiHeader.biCompression = MAKEFOURCC('U','Y','V','Y');
|
||||
else if (s->pix_fmt == MS_RGB24)
|
||||
pvi->bmiHeader.biCompression = BI_RGB;
|
||||
|
||||
|
||||
if (s->pix_fmt == MS_YUV420P)
|
||||
pvi->bmiHeader.biBitCount = 12;
|
||||
else if (s->pix_fmt == MS_YUY2)
|
||||
|
|
@ -822,7 +797,7 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
}
|
||||
|
||||
hr = s->m_pDXFilter->QueryInterface(IID_IBaseFilter,
|
||||
(LPVOID *)&s->m_pIDXFilter);
|
||||
(LPVOID *)&s->m_pIDXFilter);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
return -14;
|
||||
|
|
@ -837,10 +812,10 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
|
||||
// get null renderer
|
||||
hr=CoCreateInstance (CLSID_NullRenderer,
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_IBaseFilter,
|
||||
(void **)&s->m_pNullRenderer);
|
||||
NULL,
|
||||
CLSCTX_INPROC_SERVER,
|
||||
IID_IBaseFilter,
|
||||
(void **)&s->m_pNullRenderer);
|
||||
if(FAILED(hr))
|
||||
{
|
||||
return -16;
|
||||
|
|
@ -856,60 +831,60 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
{
|
||||
return -17;
|
||||
}
|
||||
|
||||
IAMStreamConfig *pConfig = NULL;
|
||||
hr = s->m_pBuilder->FindInterface(
|
||||
&pPinCategory, // Preview pin.
|
||||
&MEDIATYPE_Video, // Any media type.
|
||||
s->m_pDeviceFilter, // Pointer to the capture filter.
|
||||
IID_IAMStreamConfig, (void**)&pConfig);
|
||||
if (pConfig!=NULL)
|
||||
{
|
||||
AM_MEDIA_TYPE *pType = NULL;
|
||||
int iCount, iSize;
|
||||
pConfig->GetNumberOfCapabilities(&iCount, &iSize);
|
||||
|
||||
for (int i = 0; i < iCount; i++) {
|
||||
VIDEO_STREAM_CONFIG_CAPS scc;
|
||||
pType = NULL;
|
||||
pConfig->GetStreamCaps(i, &pType, (BYTE *)&scc);
|
||||
IAMStreamConfig *pConfig = NULL;
|
||||
hr = s->m_pBuilder->FindInterface(
|
||||
&pPinCategory, // Preview pin.
|
||||
&MEDIATYPE_Video, // Any media type.
|
||||
s->m_pDeviceFilter, // Pointer to the capture filter.
|
||||
IID_IAMStreamConfig, (void**)&pConfig);
|
||||
if (pConfig!=NULL)
|
||||
{
|
||||
AM_MEDIA_TYPE *pType = NULL;
|
||||
int iCount, iSize;
|
||||
pConfig->GetNumberOfCapabilities(&iCount, &iSize);
|
||||
|
||||
if (!((pType->formattype == FORMAT_VideoInfo) &&
|
||||
(pType->cbFormat >= sizeof(VIDEOINFOHEADER)) &&
|
||||
(pType->pbFormat != NULL)))
|
||||
continue;
|
||||
for (int i = 0; i < iCount; i++) {
|
||||
VIDEO_STREAM_CONFIG_CAPS scc;
|
||||
pType = NULL;
|
||||
pConfig->GetStreamCaps(i, &pType, (BYTE *)&scc);
|
||||
|
||||
VIDEOINFOHEADER & videoInfo = *(VIDEOINFOHEADER *)pType->pbFormat;
|
||||
if (!((pType->formattype == FORMAT_VideoInfo) &&
|
||||
(pType->cbFormat >= sizeof(VIDEOINFOHEADER)) &&
|
||||
(pType->pbFormat != NULL)))
|
||||
continue;
|
||||
|
||||
if (m != pType->subtype)
|
||||
continue;
|
||||
VIDEOINFOHEADER & videoInfo = *(VIDEOINFOHEADER *)pType->pbFormat;
|
||||
|
||||
if (videoInfo.bmiHeader.biWidth != s->vsize.width)
|
||||
continue;
|
||||
if (m != pType->subtype)
|
||||
continue;
|
||||
|
||||
if (videoInfo.bmiHeader.biHeight != s->vsize.height)
|
||||
continue;
|
||||
if (videoInfo.bmiHeader.biWidth != s->vsize.width)
|
||||
continue;
|
||||
|
||||
if (videoInfo.bmiHeader.biBitCount != pvi->bmiHeader.biBitCount)
|
||||
continue;
|
||||
if (videoInfo.bmiHeader.biHeight != s->vsize.height)
|
||||
continue;
|
||||
|
||||
if (videoInfo.bmiHeader.biCompression != pvi->bmiHeader.biCompression)
|
||||
continue;
|
||||
if (videoInfo.bmiHeader.biBitCount != pvi->bmiHeader.biBitCount)
|
||||
continue;
|
||||
|
||||
videoInfo.AvgTimePerFrame = UNITS / (LONGLONG)s->fps;
|
||||
pConfig->SetFormat(pType);
|
||||
}
|
||||
if (videoInfo.bmiHeader.biCompression != pvi->bmiHeader.biCompression)
|
||||
continue;
|
||||
|
||||
pConfig->GetFormat(&pType);
|
||||
if (pType!=NULL)
|
||||
{
|
||||
VIDEOINFO *pvi;
|
||||
pvi = (VIDEOINFO *)pType->pbFormat;
|
||||
ms_message("v4w: camera asked fps=%i // real fps=%i", (int)(UNITS / (LONGLONG)s->fps), pvi->AvgTimePerFrame);
|
||||
}
|
||||
|
||||
pConfig->Release();
|
||||
}
|
||||
videoInfo.AvgTimePerFrame = UNITS / (LONGLONG)s->fps;
|
||||
pConfig->SetFormat(pType);
|
||||
}
|
||||
|
||||
pConfig->GetFormat(&pType);
|
||||
if (pType!=NULL)
|
||||
{
|
||||
VIDEOINFO *pvi;
|
||||
pvi = (VIDEOINFO *)pType->pbFormat;
|
||||
ms_message("v4w: camera asked fps=%i // real fps=%i", (int)(UNITS / (LONGLONG)s->fps), pvi->AvgTimePerFrame);
|
||||
}
|
||||
|
||||
pConfig->Release();
|
||||
}
|
||||
|
||||
//m_pDXFilter->SetBufferSamples(TRUE);
|
||||
|
||||
|
|
@ -925,68 +900,6 @@ static int v4w_open_videodevice(V4wState *s)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
FUNCTION: AddGraphToRot.
|
||||
|
||||
DESCRIPTION:
|
||||
Adds a DirectShow filter graph to the Running Object Table,
|
||||
allowing GraphEdit to "spy" on a remote filter graph.
|
||||
|
||||
PARAMETERS:
|
||||
|
||||
RETURNS:
|
||||
. 0 for success, otherwise an error #.
|
||||
. Standard COM/HRESULT error numbers are returned if a COM/HRESULT error
|
||||
was encountered.
|
||||
|
||||
****************************************************************************/
|
||||
HRESULT AddGraphToRot(IUnknown *pUnkGraph, DWORD *pdwRegister)
|
||||
{
|
||||
IMoniker * pMoniker;
|
||||
IRunningObjectTable *pROT;
|
||||
WCHAR wsz[128];
|
||||
HRESULT hr;
|
||||
|
||||
if (FAILED(GetRunningObjectTable(0, &pROT)))
|
||||
return E_FAIL;
|
||||
|
||||
wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());
|
||||
wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());
|
||||
|
||||
hr = CreateItemMoniker(L"!", wsz, &pMoniker);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = pROT->Register(0, pUnkGraph, pMoniker, pdwRegister);
|
||||
pMoniker->Release();
|
||||
}
|
||||
|
||||
pROT->Release();
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
|
||||
FUNCTION: RemoveGraphFromRot.
|
||||
|
||||
DESCRIPTION:
|
||||
Removes a filter graph from the Running Object Table.
|
||||
|
||||
PARAMETERS:
|
||||
|
||||
****************************************************************************/
|
||||
void RemoveGraphFromRot(DWORD pdwRegister)
|
||||
{
|
||||
IRunningObjectTable *pROT;
|
||||
|
||||
if (SUCCEEDED(GetRunningObjectTable(0, &pROT)))
|
||||
{
|
||||
pROT->Revoke(pdwRegister);
|
||||
pROT->Release();
|
||||
}
|
||||
}
|
||||
|
||||
static void v4w_init(MSFilter *f){
|
||||
V4wState *s=(V4wState *)ms_new0(V4wState,1);
|
||||
int idx;
|
||||
|
|
@ -1013,7 +926,7 @@ static void v4w_init(MSFilter *f){
|
|||
s->start_time=0;
|
||||
s->frame_count=-1;
|
||||
s->fps=15;
|
||||
memset(s->dev, 0, sizeof(s->dev));
|
||||
memset(s->dev, 0, sizeof(s->dev));
|
||||
|
||||
f->data=s;
|
||||
}
|
||||
|
|
@ -1023,14 +936,13 @@ static int _v4w_test(V4wState *s, void *arg)
|
|||
int i;
|
||||
i = v4w_configure_videodevice(s);
|
||||
|
||||
if (i!=0)
|
||||
{
|
||||
s->pix_fmt = MS_YUV420P;
|
||||
s->vsize.width = MS_VIDEO_SIZE_CIF_W;
|
||||
s->vsize.height = MS_VIDEO_SIZE_CIF_H;
|
||||
}
|
||||
if (i!=0)
|
||||
{
|
||||
s->pix_fmt = MS_YUV420P;
|
||||
s->vsize.width = MS_VIDEO_SIZE_CIF_W;
|
||||
s->vsize.height = MS_VIDEO_SIZE_CIF_H;
|
||||
}
|
||||
|
||||
//RemoveGraphFromRot(s->rotregvalue);
|
||||
if (s->m_pGraph!=NULL)
|
||||
{
|
||||
if (s->m_pNullRenderer!=NULL)
|
||||
|
|
@ -1069,7 +981,7 @@ static int _v4w_test(V4wState *s, void *arg)
|
|||
CoUninitialize();
|
||||
s_callback = NULL;
|
||||
flushq(&s->rq,0);
|
||||
ms_message("v4w: checked device size=%ix%i format=%i (err=%i)", s->vsize.width, s->vsize.height, s->pix_fmt, i);
|
||||
ms_message("v4w: checked device size=%ix%i format=%i (err=%i)", s->vsize.width, s->vsize.height, s->pix_fmt, i);
|
||||
|
||||
return i;
|
||||
}
|
||||
|
|
@ -1082,7 +994,6 @@ static int _v4w_start(V4wState *s, void *arg)
|
|||
i = v4w_open_videodevice(s);
|
||||
|
||||
if (s->rotregvalue==0){
|
||||
//RemoveGraphFromRot(s->rotregvalue);
|
||||
if (s->m_pGraph!=NULL)
|
||||
{
|
||||
if (s->m_pNullRenderer!=NULL)
|
||||
|
|
@ -1250,9 +1161,9 @@ static mblk_t * v4w_make_nowebcam(V4wState *s){
|
|||
int idx;
|
||||
int count;
|
||||
if(s->mire[0]==NULL && s->frame_ind==0 && s->nowebcamimage[0] != '\0')
|
||||
{
|
||||
s->mire[0] = ms_load_jpeg_as_yuv(s->nowebcamimage,&s->vsize);
|
||||
}
|
||||
{
|
||||
s->mire[0] = ms_load_jpeg_as_yuv(s->nowebcamimage,&s->vsize);
|
||||
}
|
||||
if (s->mire[0]==NULL && s->frame_ind==0){
|
||||
/* load several images to fake a movie */
|
||||
for (idx=0;idx<10;idx++)
|
||||
|
|
@ -1284,7 +1195,7 @@ static mblk_t * v4w_make_nowebcam(V4wState *s){
|
|||
static void v4w_preprocess(MSFilter * obj){
|
||||
V4wState *s=(V4wState*)obj->data;
|
||||
if (s->rotregvalue==0)
|
||||
_v4w_start(s, NULL);
|
||||
_v4w_start(s, NULL);
|
||||
if (s->rotregvalue==0)
|
||||
s->fps=1;
|
||||
}
|
||||
|
|
@ -1347,7 +1258,7 @@ static int v4w_set_fps(MSFilter *f, void *arg){
|
|||
|
||||
static int v4w_set_pix_fmt(MSFilter *f,void *arg){
|
||||
V4wState *s=(V4wState*)f->data;
|
||||
s->pix_fmt=*((MSPixFmt*)arg);
|
||||
s->pix_fmt=*((MSPixFmt*)arg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1356,7 +1267,7 @@ static int v4w_get_pix_fmt(MSFilter *f,void *arg){
|
|||
if (s->rotregvalue==0){
|
||||
_v4w_test(s, NULL); /* check supported format */
|
||||
*((MSPixFmt*)arg) = (MSPixFmt)s->pix_fmt;
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
*((MSPixFmt*)arg) = (MSPixFmt)s->pix_fmt;
|
||||
return 0;
|
||||
|
|
@ -1388,9 +1299,9 @@ static int v4w_set_image(MSFilter *f, void *arg){
|
|||
char *image = (char *)arg;
|
||||
ms_mutex_lock(&s->mutex);
|
||||
if (image!=NULL && image[0]!='\0')
|
||||
snprintf(s->nowebcamimage, sizeof(s->nowebcamimage), "%s", image);
|
||||
snprintf(s->nowebcamimage, sizeof(s->nowebcamimage), "%s", image);
|
||||
else
|
||||
s->nowebcamimage[0] = '\0';
|
||||
s->nowebcamimage[0] = '\0';
|
||||
for (idx=0;idx<10;idx++)
|
||||
{
|
||||
if (s->mire[idx]==NULL)
|
||||
|
|
@ -1405,7 +1316,7 @@ static int v4w_set_image(MSFilter *f, void *arg){
|
|||
|
||||
static int v4w_set_name(MSFilter *f, void *arg){
|
||||
V4wState *s=(V4wState*)f->data;
|
||||
snprintf(s->dev, sizeof(s->dev), (char*)arg);
|
||||
snprintf(s->dev, sizeof(s->dev), (char*)arg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1482,7 +1393,7 @@ static void vfw_detect(MSWebCamManager *obj){
|
|||
ICreateDevEnum *pCreateDevEnum = NULL;
|
||||
IEnumMoniker *pEnumMoniker = NULL;
|
||||
IMoniker *pMoniker = NULL;
|
||||
HRESULT hr;
|
||||
HRESULT hr;
|
||||
|
||||
ULONG nFetched = 0;
|
||||
|
||||
|
|
@ -1503,35 +1414,35 @@ static void vfw_detect(MSWebCamManager *obj){
|
|||
pEnumMoniker->Reset();
|
||||
|
||||
int pos=0;
|
||||
while(S_OK == pEnumMoniker->Next(1, &pMoniker, &nFetched) )
|
||||
{
|
||||
IPropertyBag *pBag;
|
||||
hr = pMoniker->BindToStorage( 0, 0, IID_IPropertyBag, (void**) &pBag );
|
||||
if( hr != S_OK )
|
||||
continue;
|
||||
while(S_OK == pEnumMoniker->Next(1, &pMoniker, &nFetched) )
|
||||
{
|
||||
IPropertyBag *pBag;
|
||||
hr = pMoniker->BindToStorage( 0, 0, IID_IPropertyBag, (void**) &pBag );
|
||||
if( hr != S_OK )
|
||||
continue;
|
||||
|
||||
VARIANT var;
|
||||
VariantInit(&var);
|
||||
hr = pBag->Read( L"FriendlyName", &var, NULL );
|
||||
if( hr != S_OK )
|
||||
{
|
||||
pMoniker->Release();
|
||||
continue;
|
||||
}
|
||||
//USES_CONVERSION;
|
||||
char szName[256];
|
||||
VARIANT var;
|
||||
VariantInit(&var);
|
||||
hr = pBag->Read( L"FriendlyName", &var, NULL );
|
||||
if( hr != S_OK )
|
||||
{
|
||||
pMoniker->Release();
|
||||
continue;
|
||||
}
|
||||
//USES_CONVERSION;
|
||||
char szName[256];
|
||||
|
||||
WideCharToMultiByte(CP_ACP,0,var.bstrVal,-1,szName,256,0,0);
|
||||
VariantClear(&var);
|
||||
WideCharToMultiByte(CP_UTF8,0,var.bstrVal,-1,szName,256,0,0);
|
||||
VariantClear(&var);
|
||||
|
||||
MSWebCam *cam=ms_web_cam_new(&ms_directx_cam_desc);
|
||||
cam->name=ms_strdup(szName);
|
||||
ms_web_cam_manager_add_cam(obj,cam);
|
||||
MSWebCam *cam=ms_web_cam_new(&ms_directx_cam_desc);
|
||||
cam->name=ms_strdup(szName);
|
||||
ms_web_cam_manager_add_cam(obj,cam);
|
||||
|
||||
pMoniker->Release();
|
||||
pBag->Release();
|
||||
pMoniker=NULL;
|
||||
pBag=NULL;
|
||||
pMoniker->Release();
|
||||
pBag->Release();
|
||||
pMoniker=NULL;
|
||||
pBag=NULL;
|
||||
}
|
||||
|
||||
pEnumMoniker->Release();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue