videoio.cxx
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:4k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * videoio.cxx
  3.  *
  4.  * Classes to support streaming video input (grabbing) and output.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-2000 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Contributor(s): ______________________________________.
  25.  *
  26.  * $Log: videoio.cxx,v $
  27.  * Revision 1.4  2000/07/26 03:50:50  robertj
  28.  * Added last error variable to video device.
  29.  *
  30.  * Revision 1.3  2000/07/26 02:13:48  robertj
  31.  * Added some more "common" bounds checking to video device.
  32.  *
  33.  * Revision 1.2  2000/07/25 13:38:26  robertj
  34.  * Added frame rate parameter to video frame grabber.
  35.  *
  36.  * Revision 1.1  2000/07/15 09:47:35  robertj
  37.  * Added video I/O device classes.
  38.  *
  39.  */
  40. #include <ptlib.h>
  41. #include <ptlib/videoio.h>
  42. ///////////////////////////////////////////////////////////////////////////////
  43. // PVideoDevice
  44. PVideoDevice::PVideoDevice(VideoFormat videofmt,
  45.                            unsigned channel,
  46.                            ColourFormat colourFmt)
  47. {
  48.   lastError = 0;
  49.   videoFormat = videofmt;
  50.   channelNumber = channel;
  51.   colourFormat = colourFmt;
  52.   frameRate = 15;
  53.   frameWidth = CIF_WIDTH;
  54.   frameHeight = CIF_HEIGHT;
  55. }
  56. BOOL PVideoDevice::SetVideoFormat(VideoFormat videoFmt)
  57. {
  58.   videoFormat = videoFmt;
  59.   return IsOpen();
  60. }
  61. PVideoDevice::VideoFormat PVideoDevice::GetVideoFormat() const
  62. {
  63.   return videoFormat;
  64. }
  65. unsigned PVideoDevice::GetNumChannels() const
  66. {
  67.   return 1;
  68. }
  69. BOOL PVideoDevice::SetChannel(unsigned channelNum)
  70. {
  71.   if (channelNum >= GetNumChannels())
  72.     return FALSE;
  73.   channelNumber = channelNum;
  74.   return IsOpen();
  75. }
  76. unsigned PVideoDevice::GetChannel() const
  77. {
  78.   return channelNumber;
  79. }
  80. BOOL PVideoDevice::SetColourFormat(ColourFormat colourFmt)
  81. {
  82.   colourFormat = colourFmt;
  83.   return IsOpen();
  84. }
  85. PVideoDevice::ColourFormat PVideoDevice::GetColourFormat() const
  86. {
  87.   return colourFormat;
  88. }
  89. BOOL PVideoDevice::SetFrameRate(unsigned rate)
  90. {
  91.   frameRate = rate;
  92.   return IsOpen();
  93. }
  94. unsigned PVideoDevice::GetFrameRate() const
  95. {
  96.   return frameRate;
  97. }
  98. BOOL PVideoDevice::GetFrameSizeLimits(unsigned & minWidth,
  99.                                       unsigned & minHeight,
  100.                                       unsigned & maxWidth,
  101.                                       unsigned & maxHeight) const
  102. {
  103.   minWidth = minHeight = 1;
  104.   maxWidth = maxHeight = UINT_MAX;
  105.   return FALSE;
  106. }
  107. BOOL PVideoDevice::SetFrameSize(unsigned width, unsigned height)
  108. {
  109.   unsigned minWidth, minHeight, maxWidth, maxHeight;
  110.   GetFrameSizeLimits(minWidth, minHeight, maxWidth, maxHeight);
  111.   if (width < minWidth)
  112.     frameWidth = minWidth;
  113.   else if (width > maxWidth)
  114.     frameWidth = maxWidth;
  115.   else
  116.     frameWidth = width;
  117.   if (height < minHeight)
  118.     frameHeight = minHeight;
  119.   else if (height > maxHeight)
  120.     frameHeight = maxHeight;
  121.   else
  122.     frameHeight = height;
  123.   return IsOpen();
  124. }
  125. BOOL PVideoDevice::GetFrameSize(unsigned & width, unsigned & height) const
  126. {
  127.   width = frameWidth;
  128.   height = frameHeight;
  129.   return IsOpen();
  130. }
  131. ///////////////////////////////////////////////////////////////////////////////
  132. // PVideoInputDevice
  133. BOOL PVideoInputDevice::GetFrame(PBYTEArray & frame)
  134. {
  135.   PINDEX returned;
  136.   if (!GetFrameData(frame.GetPointer(GetMaxFrameBytes()), &returned))
  137.     return FALSE;
  138.   frame.SetSize(returned);
  139.   return TRUE;
  140. }
  141. // End Of File ///////////////////////////////////////////////////////////////