Пример #1
0
        // PREVIEW VIDEO CALLBACK FUNCTION
        //
        //回调函数,进行视频流操作
        EXPORTS.ReturnOfCallbackEnum on_process_preview_video_buffer(uint pDevice, double dSampleTime, uint pFrameBuffer, uint nFrameBufferLen, uint pUserData)
        {
            uint nCH = pUserData;

            if (b_bitmap[nCH] == true && pFrameBuffer != 0)
            {
                b_bitmap[nCH] = false;

                unsafe
                {
                    pDstABGRBuffer = (byte *)memory.Alloc((int)(m_nVideoWidth * m_nVideoHeight * 4));

                    EXPORTS.QCAP_COLORSPACE_YUY2_TO_ABGR32(pFrameBuffer, m_nVideoWidth, m_nVideoHeight, m_nVideoWidth * 2, (uint)pDstABGRBuffer, m_nVideoWidth, m_nVideoHeight, m_nVideoWidth * 4);

                    Bitmap bmp = new Bitmap((int)m_nVideoWidth, (int)m_nVideoHeight, PixelFormat.Format32bppRgb);

                    BitmapData bmpData = bmp.LockBits(new Rectangle(0,
                                                                    0,
                                                                    bmp.Width,
                                                                    bmp.Height),
                                                      ImageLockMode.WriteOnly,
                                                      bmp.PixelFormat);

                    byte[] managedArray = new byte[(m_nVideoWidth * m_nVideoHeight * 4)];

                    Marshal.Copy((IntPtr)pDstABGRBuffer, managedArray, 0, (int)(m_nVideoWidth * m_nVideoHeight * 4));

                    Marshal.Copy(managedArray, 0, bmpData.Scan0, (int)(m_nVideoWidth * m_nVideoHeight * 4));

                    bmp.UnlockBits(bmpData);

                    switch (nCH)
                    {
                    case 0:

                    {
                        PicTosql1(bmp, nCH);
                    }

                    break;

                    case 1:

                    {
                        PicTosql(bmp, nCH);
                    }

                    break;

                    case 2:

                    {
                        PicTosql(bmp, nCH);
                    }

                    break;

                    case 3:

                        if (m_nNetworkServerState_v[nCH] > 0x00000000)
                        {
                            PicTosql(bmp, nCH);
                        }

                        break;

                    default:
                        break;
                    }
                }
                //string strOutput = "CH" + (nCH + 1).ToString() +  " : on_process_preview_video_buffer => pDevice : " + pDevice.ToString() + " , dSampleTime : " + dSampleTime.ToString() + " , pFrameBuffer : " + pFrameBuffer.ToString() + " , nFrameBufferLen : " + nFrameBufferLen.ToString() + " , pUserData : " + pUserData.ToString() + " \n";

                //OutputDebugString(strOutput);
            }
            return(EXPORTS.ReturnOfCallbackEnum.QCAP_RT_OK);
        }