The following code illustrates how to write data to the image capture buffer.

  USHORT  usUserParm = 0;
  ULONG   ulReturn;
  BITMAPINFOHEADER2 *pbmphdr;
  MMOTIONHEADER *pmmothdr;
  MCI_IMAGE_PARMS mciImageParms;

  memset (mciImageParms, 0x00, sizeof (MCI_IMAGE_PARMS));
  mciImageParms.hwndCallback = hwndNotify;

  /* If you desire to set from a standard format converted */
  /* buffer                                                */
  if (ulFlags & MCI_CONVERT)
       {
     /******************************/
     /* For RGB BITMAP data buffer */
     /******************************/
     mciImageParms.ulPelFormat = MCI_IMG_RGB;
     mciImageParms.usBitCount = 24;
     mciImageParms.ulImageCompression = MCI_IMG_COMP_NONE;
     mciImageParms.ulPelBufferWidth  = 200;
     mciImageParms.ulPelBufferHeight = 100;
     mciImageParms.ulBufLen = ((200 * 3) * 100) + sizeof
      (BITMAPINFOHEADER2);
     DosAllocMem (&mciImageParms.pPelBuffer,
                  mciImageParms.ulBufLen,
                  PAG_COMMIT | PAG_WRITE | PAG_READ);

     /* Set the BITMAP HEADER section to look like a real bitmap*/
     pbmphdr = (BITMAPINFOHEADER2 *)mciImageParms.pPelBuffer;
     pbmphdr->cbFix     = sizeof (BITMAPINFOHEADER2);
     pbmphdr->cx        = mciImageParms.ulPelBufferWidth;
     pbmphdr->cy        = mciImageParms.ulPelBufferHeight;
     pbmphdr->cPlanes   = 1;
     pbmphdr->cBitCount = mciImageParms.usBitCount;


     /* Set the BITMAP DATA section to RGB white. */
     memset ((PVOID)((LONG)mciImageParms.pPelBuffer + sizeof
     (BITMAPINFOHEADER2)
     ),
        0xFF, mciImageParms.ulBufLen - sizeof (BITMAPINFOHEADER2));
     }
    else
       {

     /********************************/
     /* For M-Motion YUV data buffer */
     /********************************/
     mciImageParms.ulPelFormat = MCI_IMG_YUV;
     mciImageParms.usBitCount = 12;
     mciImageParms.ulImageCompression = MCI_IMG_COMP_NONE;
     mciImageParms.ulPelBufferWidth  = 200;
     mciImageParms.ulPelBufferHeight = 100;
     mciImageParms.ulBufLen = (200 * 100) + ((200 * 100) >> 1) + sizeof
  (MMOTIONHEADER);
     DosAllocMem (&mciImageParms.pPelBuffer,
                mciImageParms.ulBufLen,
                  PAG_COMMIT | PAG_WRITE | PAG_READ);

     /* Set the BITMAP HEADER section to look like a real bitmap */
     pmmothdr = (MMOTIONHEADER *)mciImageParms.pPelBuffer;
     strncpy (&pmmothdr->mmID[0], "YUV12C", 6);
     pmmothdr->mmXlen = mciImageParms.ulPelBufferWidth ;
     pmmothdr->mmYlen = mciImageParms.ulPelBufferHeight;

     /* Leave the yuv buffer black for this example.  */
     }

  ulReturn = mciSendCommand(usDeviceID, MCI_SETIMAGEBUFFER,
                   MCI_WAIT | ulFlags,
                   (PVOID)&mciImageParms,
                   usUserParm);


[Back] [Next]