{\r
HWCGrabCallback *This = impl_from_IGrabCallback(iface);\r
\r
- if( InterlockedDecrement(&This->m_cRef) == 0)\r
+ if (InterlockedDecrement(&This->m_cRef) == 0)\r
{\r
This->m_pCallback = NULL;\r
g_free((void*)This);\r
{\r
HWCInPin *This = impl_from_IPin(iface);\r
\r
- if( InterlockedDecrement(&This->m_cRef) == 0)\r
+ if (InterlockedDecrement(&This->m_cRef) == 0)\r
{\r
if (This->m_pCFilter) {\r
IBaseFilter_Release(This->m_pCFilter);\r
\r
static STDMETHODIMP HWCPin_Connect(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)\r
{\r
- if ( !pmt )\r
+ if (!pmt)\r
return S_OK;\r
return S_FALSE;\r
}\r
\r
static STDMETHODIMP HWCPin_ReceiveConnection(IPin *iface, IPin *pConnector, const AM_MEDIA_TYPE *pmt)\r
{\r
+ PIN_DIRECTION pd;\r
+ FILTER_STATE fs;\r
HWCInPin *This = impl_from_IPin(iface);\r
\r
if (pConnector == NULL || pmt == NULL)\r
if (This->m_pConnectedPin) {\r
return VFW_E_ALREADY_CONNECTED;\r
}\r
- FILTER_STATE fs;\r
IBaseFilter_GetState(This->m_pCFilter, 0, &fs);\r
if (fs != State_Stopped) {\r
return VFW_E_NOT_STOPPED;\r
}\r
- PIN_DIRECTION pd;\r
IPin_QueryDirection(pConnector, &pd);\r
if (pd == PINDIR_INPUT) {\r
return VFW_E_INVALID_DIRECTION;\r
\r
static STDMETHODIMP HWCPin_QueryId(IPin *iface, LPWSTR *Id)\r
{\r
+ PVOID pId;\r
if (Id == NULL)\r
return E_POINTER;\r
- PVOID pId = CoTaskMemAlloc(sizeof(HWCPinName));\r
+ pId = CoTaskMemAlloc(sizeof(HWCPinName));\r
memcpy((void*)pId, (void*)HWCPinName, sizeof(HWCPinName));\r
*Id = (LPWSTR)pId;\r
return S_OK;\r
{\r
HWCInPin *This = impl_from_IMemInputPin(iface);\r
\r
- if( InterlockedDecrement(&This->m_cRef) == 0)\r
+ if (InterlockedDecrement(&This->m_cRef) == 0)\r
{\r
if (This->m_pCFilter) {\r
IBaseFilter_Release(This->m_pCFilter);\r
{\r
HWCInPin *This = impl_from_IMemInputPin(iface);\r
\r
- if (pSample == NULL)\r
+ if (pSample == NULL) {\r
+ ERR("pSample is NULL\n");\r
return E_POINTER;\r
+ }\r
if (This->m_pCallback != NULL) {\r
HRESULT hr;\r
BYTE* pBuffer = NULL;\r
DWORD dwSize = 0;\r
dwSize = IMediaSample_GetSize(pSample);\r
hr = IMediaSample_GetPointer(pSample, &pBuffer);\r
- if (FAILED(hr))\r
+ if (FAILED(hr)) {\r
+ ERR("Receive function : "\r
+ "failed to IMediaSample_GetPointer, 0x%ld\n", hr);\r
return hr;\r
+ }\r
hr = IGrabCallback_Grab(This->m_pCallback, dwSize, pBuffer);\r
- if (FAILED(hr))\r
+ if (FAILED(hr)) {\r
+ ERR("Receive function : failed to IGrabCallback_Grab, 0x%ld\n", hr);\r
return hr;\r
+ }\r
}\r
return S_OK;\r
}\r
fetched = 0;\r
}\r
\r
- if (pcFetched != NULL ) {\r
+ if (pcFetched != NULL) {\r
*pcFetched = fetched;\r
}\r
\r
- return ( fetched == cPins ) ? S_OK : S_FALSE;\r
+ return (fetched == cPins) ? S_OK : S_FALSE;\r
}\r
\r
static STDMETHODIMP HWCEnumPins_Skip(IEnumPins *iface, ULONG cPins)\r
{\r
HWCEnumPins *This = impl_from_IEnumPins(iface);\r
This->m_nPos += cPins;\r
- return ( This->m_nPos >= 1 ) ? S_FALSE : S_OK;\r
+ return (This->m_nPos >= 1) ? S_FALSE : S_OK;\r
}\r
\r
static STDMETHODIMP HWCEnumPins_Reset(IEnumPins *iface)\r
\r
static STDMETHODIMP HWCFilter_QueryInterface(IBaseFilter *iface, REFIID riid, void **ppv)\r
{\r
- if(IsEqualIID(riid, &IID_IUnknown)) {\r
+ if (IsEqualIID(riid, &IID_IUnknown)) {\r
*ppv = (IUnknown*)iface;\r
} else if (IsEqualIID(riid, &IID_IPersist)) {\r
*ppv = (IPersist*)iface;\r
{\r
HWCFilter *This = impl_from_IBaseFilter(iface);\r
\r
- if( InterlockedDecrement(&This->m_cRef) == 0) {\r
+ if (InterlockedDecrement(&This->m_cRef) == 0) {\r
if (This->m_pPin) {\r
IPin_Release(This->m_pPin);\r
This->m_pPin = NULL;\r
HRESULT hr;\r
hr = IBaseFilter_Pause(iface);\r
if (FAILED(hr)) {\r
+ ERR("HWCFilter_Run : Failed to IBaseFilter_Pause, ret=0xld%\n", hr);\r
return hr;\r
}\r
}\r
\r
memcpy((void*)pInfo->achName, (void*)HWCFilterName, sizeof(HWCFilterName));\r
pInfo->pGraph = This->m_pFilterGraph;\r
- if(This->m_pFilterGraph) {\r
+ if (This->m_pFilterGraph) {\r
IFilterGraph_AddRef(This->m_pFilterGraph);\r
}\r
return S_OK;\r
\r
IGrabCallback *g_pCallback;\r
\r
-// V4L2 defines copy from videodev2.h\r
+/* V4L2 defines copy from videodev2.h */\r
#define V4L2_CTRL_FLAG_SLIDER 0x0020\r
\r
#define V4L2_CTRL_CLASS_USER 0x00980000\r
#define V4L2_CID_SATURATION (V4L2_CID_BASE+2)\r
#define V4L2_CID_SHARPNESS (V4L2_CID_BASE+27)\r
\r
-#define V4L2_PIX_FMT_YUYV MAKEFOURCC('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */\r
-#define V4L2_PIX_FMT_YUV420 MAKEFOURCC('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */\r
-#define V4L2_PIX_FMT_YVU420 MAKEFOURCC('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */\r
+#define V4L2_PIX_FMT_YUYV MAKEFOURCC('Y', 'U', 'Y', 'V') /* 16 YUV 4:2:2 */\r
+#define V4L2_PIX_FMT_YUV420 MAKEFOURCC('Y', 'U', '1', '2') /* 12 YUV 4:2:0 */\r
+#define V4L2_PIX_FMT_YVU420 MAKEFOURCC('Y', 'V', '1', '2') /* 12 YVU 4:2:0 */\r
\r
typedef struct tagMaruCamConvertPixfmt {\r
uint32_t fmt; /* fourcc */\r
* Helper functions - converting image formats, converting values\r
*/\r
\r
+static uint32_t get_bytesperline(uint32_t pixfmt, uint32_t width)\r
+{\r
+ uint32_t bytesperline;\r
+\r
+ switch (pixfmt) {\r
+ case V4L2_PIX_FMT_YUV420:\r
+ case V4L2_PIX_FMT_YVU420:\r
+ bytesperline = (width * 12) >> 3;\r
+ break;\r
+ case V4L2_PIX_FMT_YUYV:\r
+ default:\r
+ bytesperline = width * 2;\r
+ break;\r
+ }\r
+\r
+ return bytesperline;\r
+}\r
+\r
+static uint32_t get_sizeimage(uint32_t pixfmt, uint32_t width, uint32_t height)\r
+{\r
+ return (get_bytesperline(pixfmt, width) * height);\r
+}\r
+\r
void v4lconvert_yuyv_to_yuv420(const unsigned char *src, unsigned char *dest,\r
uint32_t width, uint32_t height, uint32_t yvu);\r
\r
{\r
IPropertyBag *pBag = NULL;\r
hr = pMoniKer->lpVtbl->BindToStorage(pMoniKer, 0, 0, &IID_IPropertyBag, (void **)&pBag);\r
- if(SUCCEEDED(hr))\r
+ if (SUCCEEDED(hr))\r
{\r
VARIANT var;\r
var.vt = VT_BSTR;\r
{\r
IPropertyBag *pBag = NULL;\r
hr = pMoniKer->lpVtbl->BindToStorage(pMoniKer, 0, 0, &IID_IPropertyBag, (void **)&pBag);\r
- if(SUCCEEDED(hr))\r
+ if (SUCCEEDED(hr))\r
{\r
VARIANT var;\r
var.vt = VT_BSTR;\r
return ret;\r
}\r
\r
-// MARUCAM_CMD_INIT\r
+/* MARUCAM_CMD_INIT */\r
void marucam_device_init(MaruCamState* state)\r
{\r
g_state = state;\r
}\r
\r
-// MARUCAM_CMD_OPEN\r
+/* MARUCAM_CMD_OPEN */\r
void marucam_device_open(MaruCamState* state)\r
{\r
HRESULT hr;\r
MaruCamParam *param = state->param;\r
param->top = 0;\r
\r
- hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);\r
+ hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);\r
if (FAILED(hr)) {\r
ERR("CoInitailizeEx\n");\r
ERR("camera device open failed!!!, [HRESULT : 0x%x]\n", hr);\r
ERR("camera device open failed!!!, [HRESULT : 0x%x]\n", hr);\r
}\r
\r
-// MARUCAM_CMD_CLOSE\r
+/* MARUCAM_CMD_CLOSE */\r
void marucam_device_close(MaruCamState* state)\r
{\r
MaruCamParam *param = state->param;\r
INFO("Close successfully!!!\n");\r
}\r
\r
-// MARUCAM_CMD_START_PREVIEW\r
+/* MARUCAM_CMD_START_PREVIEW */\r
void marucam_device_start_preview(MaruCamState* state)\r
{\r
HRESULT hr;\r
- uint32_t width, height;\r
+ uint32_t pixfmt, width, height;\r
MaruCamParam *param = state->param;\r
param->top = 0;\r
\r
+ width = supported_dst_frames[cur_frame_idx].width;\r
+ height = supported_dst_frames[cur_frame_idx].height;\r
+ pixfmt = supported_dst_pixfmts[cur_fmt_idx].fmt;\r
+ state->buf_size = get_sizeimage(pixfmt, width, height);\r
+\r
assert(g_pCallback != NULL);\r
hr = ((HWCInPin*)g_pInputPin)->SetGrabCallbackIF(g_pInputPin, g_pCallback);\r
if (FAILED(hr)) {\r
\r
hr = g_pMediaControl->lpVtbl->Run(g_pMediaControl);\r
if (FAILED(hr)) {\r
- ERR("Failed to run media control.\n");\r
+ ERR("Failed to run media control. hr=0x%x\n", hr);\r
param->errCode = EINVAL;\r
return;\r
}\r
ready_count = 0;\r
qemu_mutex_unlock(&state->thread_mutex);\r
\r
- width = supported_dst_frames[cur_frame_idx].width;\r
- height = supported_dst_frames[cur_frame_idx].height;\r
- state->buf_size = height * ((width * supported_dst_pixfmts[cur_fmt_idx].bpp) >> 3);\r
-\r
INFO("Start preview!!!\n");\r
}\r
\r
-// MARUCAM_CMD_STOP_PREVIEW\r
+/* MARUCAM_CMD_STOP_PREVIEW */\r
void marucam_device_stop_preview(MaruCamState* state)\r
{\r
HRESULT hr;\r
MaruCamParam *param = state->param;\r
param->top = 0;\r
\r
- hr = ((HWCInPin*)g_pInputPin)->SetGrabCallbackIF(g_pInputPin, NULL);\r
+ hr = g_pMediaControl->lpVtbl->Stop(g_pMediaControl);\r
if (FAILED(hr)) {\r
- ERR("Failed to set IGrabCallback interface.\n");\r
+ ERR("Failed to stop media control.\n");\r
param->errCode = EINVAL;\r
return;\r
}\r
\r
- hr = g_pMediaControl->lpVtbl->Stop(g_pMediaControl);\r
+ hr = ((HWCInPin*)g_pInputPin)->SetGrabCallbackIF(g_pInputPin, NULL);\r
if (FAILED(hr)) {\r
- ERR("Failed to stop media control.\n");\r
+ ERR("Failed to set IGrabCallback interface.\n");\r
param->errCode = EINVAL;\r
return;\r
}\r
INFO("Stop preview!!!\n");\r
}\r
\r
-// MARUCAM_CMD_S_PARAM\r
+/* MARUCAM_CMD_S_PARAM */\r
void marucam_device_s_param(MaruCamState* state)\r
{\r
MaruCamParam *param = state->param;\r
param->top = 0;\r
}\r
\r
-// MARUCAM_CMD_G_PARAM\r
+/* MARUCAM_CMD_G_PARAM */\r
void marucam_device_g_param(MaruCamState* state)\r
{\r
MaruCamParam *param = state->param;\r
param->stack[2] = 30; /* denominator */\r
}\r
\r
-// MARUCAM_CMD_S_FMT\r
+/* MARUCAM_CMD_S_FMT */\r
void marucam_device_s_fmt(MaruCamState* state)\r
{\r
uint32_t width, height, pixfmt, pidx, fidx;\r
MaruCamParam *param = state->param;\r
\r
param->top = 0;\r
- width = param->stack[0]; // width\r
- height = param->stack[1]; // height\r
- pixfmt = param->stack[2]; // pixelformat\r
+ width = param->stack[0];\r
+ height = param->stack[1];\r
+ pixfmt = param->stack[2];\r
\r
for (fidx = 0; fidx < ARRAY_SIZE(supported_dst_frames); fidx++) {\r
if ((supported_dst_frames[fidx].width == width) &&\r
}\r
}\r
\r
+ cur_frame_idx = fidx;\r
+ cur_fmt_idx = pidx;\r
+\r
+ pixfmt = supported_dst_pixfmts[cur_fmt_idx].fmt;\r
+ width = supported_dst_frames[cur_frame_idx].width;\r
+ height = supported_dst_frames[cur_frame_idx].height;\r
+\r
param->stack[0] = width;\r
param->stack[1] = height;\r
- param->stack[2] = 1; // V4L2_FIELD_NONE\r
+ param->stack[2] = 1; /* V4L2_FIELD_NONE */\r
param->stack[3] = pixfmt;\r
- // bytes per line = (width * bpp) / 8\r
- param->stack[4] = (width * supported_dst_pixfmts[pidx].bpp) >> 3;\r
- param->stack[5] = param->stack[4] * height; // height * bytesperline\r
+ param->stack[4] = get_bytesperline(pixfmt, width);\r
+ param->stack[5] = get_sizeimage(pixfmt, width, height);\r
param->stack[6] = 0;\r
param->stack[7] = 0;\r
\r
- cur_frame_idx = fidx;\r
- cur_fmt_idx = pidx;\r
-\r
TRACE("Set format...\n");\r
}\r
\r
-// MARUCAM_CMD_G_FMT\r
+/* MARUCAM_CMD_G_FMT */\r
void marucam_device_g_fmt(MaruCamState* state)\r
{\r
+ uint32_t width, height, pixfmt;\r
MaruCamParam *param = state->param;\r
\r
param->top = 0;\r
+ pixfmt = supported_dst_pixfmts[cur_fmt_idx].fmt;\r
+ width = supported_dst_frames[cur_frame_idx].width;\r
+ height = supported_dst_frames[cur_frame_idx].height;\r
\r
- param->stack[0] = supported_dst_frames[cur_frame_idx].width; // width\r
- param->stack[1] = supported_dst_frames[cur_frame_idx].height; // height\r
- param->stack[2] = 1; // V4L2_FIELD_NONE\r
- param->stack[3] = supported_dst_pixfmts[cur_fmt_idx].fmt; // pixelformat\r
- // bytes per line = (width * bpp) / 8\r
- param->stack[4] = (param->stack[0] * supported_dst_pixfmts[cur_fmt_idx].bpp) >> 3;\r
- param->stack[5] = param->stack[1] * param->stack[4]; // height * bytesperline\r
+ param->stack[0] = width;\r
+ param->stack[1] = height;\r
+ param->stack[2] = 1; /* V4L2_FIELD_NONE */\r
+ param->stack[3] = pixfmt;\r
+ param->stack[4] = get_bytesperline(pixfmt, width);\r
+ param->stack[5] = get_sizeimage(pixfmt, width, height);\r
param->stack[6] = 0;\r
param->stack[7] = 0;\r
\r
MaruCamParam *param = state->param;\r
\r
param->top = 0;\r
- width = param->stack[0]; // width\r
- height = param->stack[1]; // height\r
- pixfmt = param->stack[2]; // pixelformat\r
+ width = param->stack[0];\r
+ height = param->stack[1];\r
+ pixfmt = param->stack[2];\r
\r
for (i = 0; i < ARRAY_SIZE(supported_dst_frames); i++) {\r
if ((supported_dst_frames[i].width == width) &&\r
\r
param->stack[0] = width;\r
param->stack[1] = height;\r
- param->stack[2] = 1; // V4L2_FIELD_NONE\r
+ param->stack[2] = 1; /* V4L2_FIELD_NONE */\r
param->stack[3] = pixfmt;\r
- // bytes per line = (width * bpp) / 8\r
- param->stack[4] = (width * supported_dst_pixfmts[i].bpp) >> 3;\r
- param->stack[5] = param->stack[4] * height; // height * bytesperline\r
+ param->stack[4] = get_bytesperline(pixfmt, width);\r
+ param->stack[5] = get_sizeimage(pixfmt, width, height);\r
param->stack[6] = 0;\r
param->stack[7] = 0;\r
}\r
param->errCode = EINVAL;\r
return;\r
}\r
- param->stack[1] = 0; // flags = NONE;\r
- param->stack[2] = supported_dst_pixfmts[index].fmt; // pixelformat;\r
+ param->stack[1] = 0; /* flags = NONE */\r
+ param->stack[2] = supported_dst_pixfmts[index].fmt; /* pixelformat */\r
/* set description */\r
switch (supported_dst_pixfmts[index].fmt) {\r
case V4L2_PIX_FMT_YUYV:\r
- memcpy(¶m->stack[3], "YUY2", 32);\r
+ memcpy(¶m->stack[3], "YUYV", 32);\r
break;\r
case V4L2_PIX_FMT_YUV420:\r
memcpy(¶m->stack[3], "YU12", 32);\r
}\r
\r
param->stack[0] = id;\r
- param->stack[1] = MARUCAM_CTRL_VALUE_MIN; // minimum\r
- param->stack[2] = MARUCAM_CTRL_VALUE_MAX; // maximum\r
- param->stack[3] = MARUCAM_CTRL_VALUE_STEP;// step\r
- param->stack[4] = MARUCAM_CTRL_VALUE_MID; // default_value\r
+ param->stack[1] = MARUCAM_CTRL_VALUE_MIN; /* minimum */\r
+ param->stack[2] = MARUCAM_CTRL_VALUE_MAX; /* maximum */\r
+ param->stack[3] = MARUCAM_CTRL_VALUE_STEP; /* step */\r
+ param->stack[4] = MARUCAM_CTRL_VALUE_MID; /* default_value */\r
param->stack[5] = V4L2_CTRL_FLAG_SLIDER;\r
/* name field setting */\r
memcpy(¶m->stack[6], (void*)name, sizeof(name)/sizeof(name[0]));\r
\r
param->top = 0;\r
\r
- // switch by index(param->stack[0])\r
+ /* switch by index(param->stack[0]) */\r
switch (param->stack[0]) {\r
case 0:\r
- param->stack[1] = 30; // denominator\r
+ param->stack[1] = 30; /* denominator */\r
break;\r
default:\r
param->errCode = EINVAL;\r
return;\r
}\r
- param->stack[0] = 1; // numerator\r
+ param->stack[0] = 1; /* numerator */\r
}\r
\r
void v4lconvert_yuyv_to_yuv420(const unsigned char *src, unsigned char *dest,\r