none
Problem in WINCE 6.0 Camera MDD buffer index RRS feed

  • Question

  • Hi all,

    I am working on WINCE 6.0 R3 camera driver for OMAP3530 processor. Following are information about my driver.

    1. My driver support only CAPTURE and STILL pin.

    2. Memory model for CAPTURE and STILL pin is CLIENT_UNLIMITED.

    3. Number of buffers for CAPTURE pin is 2 and correspondingly I receive call at Register Client Buffer for two times.

    4. Registered buffer is given to OMAP Camera MMU and used for further processing. No issues in that.

    5. I'm analysing on the buffer index passed by MDD, based on which the current application buffer is passed to FillBuffer and also to CAMERA DMA.

    6. Using the sample application available at WINCE_ROOT/PRIVATE/TEST/MULTIMEDIA/DIRECTX/DSHOW/CAMERA.

    7. Currently streaming resolution is 320X240.

    Now comes my question.

    1. All the time only the buffer with index 1 is passed to PDD layer (but I have registered 2 client buffers). MDD (RemoveBufferFromList()) throws error as index 0 is null and no buffer is available. Following are sample log message.

    PIN_IOControl(d6e184a0): IOCTL:0x2f401f, InBuf:0x11fe1c, InBufLen:8, OutBuf:0
    x0, OutBufLen:0x0)
    PIN_IOControl(d6e184a0): IOCTL_CS_BUFFERS
    CS_ENQUEUE
    EnqueueDescriptor++
    GetIndexFromHandle: dwHandle 0X73470A2 dwProcessId 0X7350002 lIRemoveBufferFr
    omList++
    EnqueueDescriptor: lIndex 1
    EnqueueDescriptor--
    RemoveBuf: dwCounter 0 m_dwBufferCount 2
    RemoveBuf: dwCounter 1 m_dwBufferCount 2
    RemoveBuf: Mapped Data dwCounter is 1
    RemoveBufferFromList--
    FillBuffer: pImage 0XD7240000
    RemoveBufferFromList++
    RemoveBuf: dwCounter 0 m_dwBufferCount 2
    RemoveBuf: dwCounter 1 m_dwBufferCount 2
    RemoveBufferFromList: Mapped Data is NULL. dwCounter 2
    RemoveBufferFromList--
    Frame dropped!!!
    PIN_IOControl(d6e184a0): IOCTL:0x2f401f, InBuf:0x11fe1c, InBufLen:8, OutBuf:0
    x0, OutBufLen:0x0)
    PIN_IOControl(d6e184a0): IOCTL_CS_BUFFERS
    RemoveBufferFromList++
    RemoveBuf: dwCounter 0 m_dwBufferCount 2
    RemoveBuf: dwCounter 1 m_dwBufferCount 2
    RemoveBufferFromList: Mapped Data is NULL. dwCounter 2
    RemoveBufferFromList--
    Frame dropped!!!
    CS_ENQUEUE
    EnqueueDescriptor++
    GetIndexFromHandle: dwHandle 0X73470A2 dwProcessId 0X7350002 lIndex 0X1
    EnqueueDescriptor: lIndex 1
    EnqueueDescriptor--
    RemoveBufferFromList++
    RemoveBuf: dwCounter 0 m_dwBufferCount 2
    RemoveBuf: dwCounter 1 m_dwBufferCount 2
    RemoveBuf: Mapped Data dwCounter is 1
    RemoveBufferFromList--
    FillBuffer: pImage 0XD7240000
    RemoveBufferFromList++
    RemoveBuf: dwCounter 0 m_dwBufferCount 2
    RemoveBuf: dwCounter 1 m_dwBufferCount 2
    RemoveBufferFromList: Mapped Data is NULL. dwCounter 2
    RemoveBufferFromList--

    Also application video renderer is displaying 1 frame (index 1)correctly and the other frame (index 0)is empty. I have even tried increasing max. number of client buffers to more than 2, but only two register client buffers are recevied.

    Why is that always buffer with index 1 is being passed to FillBuffer? The index being calculated at MDD using GetIndexFromHandle returns index 1. Is there any known issue in camera MDD for WINCE6.0 R3?

    Please help me to solve out this issue.


    Please mark Vote as helpful when it is so.

    Tuesday, August 14, 2012 1:55 PM