#include "qemu-common.h"\r
#include "maru_camera_common.h"\r
#include "tizen/src/debug_ch.h"\r
+#include "tizen/src/mloop_event.h"\r
\r
#define CINTERFACE\r
#define COBJMACROS\r
if (This->m_pCallback != NULL) {\r
HRESULT hr;\r
BYTE* pBuffer = NULL;\r
- BYTE* pTmp_Buffer = NULL; /* is this required? */\r
DWORD dwSize = 0;\r
dwSize = IMediaSample_GetSize(pSample);\r
hr = IMediaSample_GetPointer(pSample, &pBuffer);\r
if (FAILED(hr))\r
return hr;\r
-\r
- pTmp_Buffer = (BYTE *)g_malloc0((size_t)dwSize);\r
- if (!pTmp_Buffer)\r
- return E_OUTOFMEMORY;\r
- memcpy((void*)pTmp_Buffer, (void*)pBuffer, (size_t)dwSize);\r
-\r
- hr = IGrabCallback_Grab(This->m_pCallback, dwSize, pTmp_Buffer);\r
+ hr = IGrabCallback_Grab(This->m_pCallback, dwSize, pBuffer);\r
if (FAILED(hr))\r
return hr;\r
}\r
static STDMETHODIMP marucam_device_callbackfn(ULONG dwSize, BYTE *pBuffer)\r
{\r
static uint32_t index = 0;\r
- static uint32_t is_init = 1;\r
uint32_t width, height;\r
width = supported_dst_frames[cur_frame_idx].width;\r
height = supported_dst_frames[cur_frame_idx].height;\r
void *buf = g_state->vaddr + (g_state->buf_size * index);\r
\r
- if (is_init == 1) {\r
- qemu_thread_get_self(&g_state->thread_id);\r
- is_init = 0;\r
- }\r
-\r
switch (supported_dst_pixfmts[cur_fmt_idx].fmt) {\r
case V4L2_PIX_FMT_YUV420:\r
v4lconvert_yuyv_to_yuv420(pBuffer, buf, width, height, 0);\r
index = !index;\r
\r
if (g_state->req_frame) {\r
- qemu_irq_raise(g_state->dev.irq[2]);\r
- g_state->req_frame = 0;\r
+ mloop_evcmd_raise_intr(g_state->dev.irq[2]);\r
+ g_state->req_frame = 0;\r
}\r
return S_OK;\r
}\r
\r
static STDMETHODIMP_(void) CloseInterfaces(void)\r
{\r
- INFO("%s\n", __func__);\r
if (g_pMediaControl)\r
g_pMediaControl->lpVtbl->Stop(g_pMediaControl);\r
\r
\r
static STDMETHODIMP_(void) DeleteMediaType(AM_MEDIA_TYPE *pmt)\r
{\r
- INFO("%s\n", __func__);\r
if (pmt == NULL) {\r
return;\r
}\r
IEnumPins *pEnum = NULL;\r
IPin *pPin = NULL;\r
\r
- INFO("%s\n", __func__);\r
-\r
if (ppPin == NULL)\r
{\r
return E_POINTER;\r
static STDMETHODIMP GraphBuilder_Init(void)\r
{\r
HRESULT hr;\r
- INFO("%s\n", __func__);\r
\r
hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC, &IID_IGraphBuilder, (void**)&g_pGB);\r
if (FAILED(hr))\r
IEnumMoniker *pEnumMK = NULL;\r
IMoniker *pMoniKer;\r
\r
- INFO("%s\n", __func__);\r
hr = CoCreateInstance(&CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC, &IID_ICreateDevEnum, (void**)&pCreateDevEnum);\r
if (FAILED(hr))\r
return hr;\r
HRESULT hr;\r
hr = HWCFilter_Construct(&g_pDstFilter);\r
\r
- INFO("%s\n", __func__);\r
if (SUCCEEDED(hr) && g_pDstFilter)\r
{\r
hr = g_pGB->lpVtbl->AddFilter(g_pGB, g_pDstFilter, L"HWCFilter");\r
{\r
HRESULT hr;\r
\r
- INFO("%s\n", __func__);\r
hr = GetPin(g_pSrcFilter, PINDIR_OUTPUT , &g_pOutputPin);\r
if (FAILED(hr))\r
return hr;\r
IAMStreamConfig *pSConfig;\r
int iCount = 0, iSize = 0;\r
\r
- INFO("%s\n", __func__);\r
hr = g_pCGB->lpVtbl->FindInterface(g_pCGB, &PIN_CATEGORY_CAPTURE, 0, g_pSrcFilter, &IID_IAMStreamConfig, (void**)&pSConfig);\r
if (FAILED(hr)) {\r
ERR("failed to FindInterface method\n");\r
IAMStreamConfig* vsc = NULL;\r
AM_MEDIA_TYPE* pmt = NULL;\r
\r
- INFO("%s\n", __func__);\r
hr = g_pCGB->lpVtbl->FindInterface(g_pCGB, &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, g_pSrcFilter, &IID_IAMStreamConfig, (void**)&vsc);\r
if (FAILED(hr))\r
return hr;\r
long Flags;\r
IAMVideoProcAmp *pProcAmp = NULL;\r
\r
- INFO("%s\n", __func__);\r
-\r
hr = g_pSrcFilter->lpVtbl->QueryInterface(g_pSrcFilter, &IID_IAMVideoProcAmp, (void**)&pProcAmp);\r
if (FAILED(hr)) {\r
return hr;\r
long Flags;\r
IAMVideoProcAmp *pProcAmp = NULL;\r
\r
- INFO("%s\n", __func__);\r
hr = g_pSrcFilter->lpVtbl->QueryInterface(g_pSrcFilter, &IID_IAMVideoProcAmp, (void**)&pProcAmp);\r
if (FAILED(hr))\r
return hr;\r
MaruCamParam *param = state->param;\r
param->top = 0;\r
\r
- INFO("%s\n", __func__);\r
- CoInitialize(NULL);\r
-\r
hr = GraphBuilder_Init();\r
if (FAILED(hr)) {\r
ERR("GraphBuilder_Init\n");\r
goto error_failed;\r
}\r
\r
- g_dwAvgInterval = 333333;\r
+ g_dwAvgInterval = 666666;\r
g_dwFourcc = MAKEFOURCC('Y','U','Y','2');\r
g_dwHeight = 480;\r
g_dwWidth = 640;\r
\r
error_failed:\r
CloseInterfaces();\r
- CoUninitialize();\r
param->errCode = EINVAL;\r
ERR("camera device open failed!!!, [HRESULT : 0x%x]\n", hr);\r
}\r
param->top = 0;\r
\r
CloseInterfaces();\r
- CoUninitialize();\r
INFO("Close successfully!!!\n");\r
}\r
\r
MaruCamParam *param = state->param;\r
param->top = 0;\r
\r
- INFO("%s\n", __func__);\r
assert(g_pCallback != NULL);\r
hr = ((HWCInPin*)g_pInputPin)->SetGrabCallbackIF(g_pInputPin, g_pCallback);\r
if (FAILED(hr)) {\r
MaruCamParam *param = state->param;\r
\r
param->top = 0;\r
- TRACE("setting fps : %d/%d\n", param->stack[0], param->stack[1]);\r
}\r
\r
// MARUCAM_CMD_G_PARAM\r
MaruCamParam *param = state->param;\r
\r
param->top = 0;\r
- TRACE("getting fps : 30/1\n");\r
\r
param->stack[0] = 0x1000; // V4L2_CAP_TIMEPERFRAME\r
param->stack[1] = 1; // numerator;\r
#include "qobject.h"\r
#include "qemu-common.h"\r
#include "hw/usb.h"\r
+#include "hw/irq.h"\r
#include "mloop_event.h"\r
\r
#define error_report(x, ...)\r
\r
#define MLOOP_EVTYPE_USB_ADD 1\r
#define MLOOP_EVTYPE_USB_DEL 2\r
+#define MLOOP_EVTYPE_INTR_UP 3\r
+#define MLOOP_EVTYPE_INTR_DOWN 4\r
\r
static struct mloop_evsock mloop = {-1,0,0};\r
\r
}\r
}\r
\r
+static void mloop_evhandle_intr_up(long data)\r
+{\r
+ if (data == 0) {\r
+ return;\r
+ }\r
+\r
+ qemu_irq_raise((qemu_irq)data);\r
+}\r
+\r
+static void mloop_evhandle_intr_down(long data)\r
+{\r
+ if (data == 0) {\r
+ return;\r
+ }\r
+\r
+ qemu_irq_lower((qemu_irq)data);\r
+}\r
+\r
static void mloop_evcb_recv(struct mloop_evsock *ev)\r
{\r
struct mloop_evpack pack;\r
break;\r
case MLOOP_EVTYPE_USB_DEL:\r
mloop_evhandle_usb_del(pack.data);\r
- break;\r
+ break;\r
+ case MLOOP_EVTYPE_INTR_UP:\r
+ mloop_evhandle_intr_up(ntohl(*(long*)&pack.data[0]));\r
+ break;\r
+ case MLOOP_EVTYPE_INTR_DOWN:\r
+ mloop_evhandle_intr_down(ntohl(*(long*)&pack.data[0]));\r
+ break;\r
default:\r
break;\r
}\r
{\r
usbdisk = (USBDevice *)dev;\r
}\r
+\r
+void mloop_evcmd_raise_intr(void *irq)\r
+{\r
+ struct mloop_evpack pack;\r
+ memset((void*)&pack, 0, sizeof(struct mloop_evpack));\r
+ pack.type = htons(MLOOP_EVTYPE_INTR_UP);\r
+ pack.size = htons(8);\r
+ *(long*)&pack.data[0] = htonl((long)irq);\r
+ mloop_evsock_send(&mloop, &pack);\r
+}\r
+\r
+void mloop_evcmd_lower_intr(void *irq)\r
+{\r
+ struct mloop_evpack pack;\r
+ memset((void*)&pack, 0, sizeof(struct mloop_evpack));\r
+ pack.type = htons(MLOOP_EVTYPE_INTR_DOWN);\r
+ pack.size = htons(8);\r
+ *(long*)&pack.data[0] = htonl((long)irq);\r
+ mloop_evsock_send(&mloop, &pack);\r
+}\r