亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? video4linux.cxx

?? radius協議源碼÷The Radius Stack will connect to a Radius Server. This stack implementation is built upo
?? CXX
字號:
/* * video4linux.cxx * * Classes to support streaming video input (grabbing) and output. * * Portable Windows Library * * Copyright (c) 1993-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: video4linux.cxx,v $ * Revision 1.2  2000/07/26 06:13:25  robertj * Added missing pragma implementation for GNU headers. * * Revision 1.1  2000/07/26 02:40:30  robertj * Added video I/O devices. * */#pragma implementation "videoio.h"#include <ptlib.h>#include <ptlib/videoio.h>#include <sys/mman.h>///////////////////////////////////////////////////////////////////////////////// PVideoDevicePVideoInputDevice::PVideoInputDevice(VideoFormat videoFmt,                                     unsigned channel,                                     ColourFormat colourFmt)  : PVideoDevice(videoFmt, channel, colourFmt){  videoFd = -1;  canMap  = -1;}static int colourFormatTab[PVideoInputDevice::NumColourFormats][2] = {  { VIDEO_PALETTE_GREY,   1 },  { VIDEO_PALETTE_RGB24,  3 },  { VIDEO_PALETTE_RGB32,  4 },  { VIDEO_PALETTE_YUV422, 2 },  { VIDEO_PALETTE_RGB565, 2 }};BOOL PVideoInputDevice::Open(const PString & devName, BOOL startImmediate){  Close();  deviceName = devName;  // open the device  videoFd = ::open((const char *)devName, O_RDWR);  if (videoFd < 0)    return FALSE;  // get the device capabilities  if (::ioctl(videoFd, VIDIOCGCAP, &videoCapability) >= 0) {    // set height and width    frameHeight = videoCapability.maxheight;    frameWidth  = videoCapability.maxwidth;    // select the specified input and video format    if (SetChannel(channelNumber) && SetVideoFormat(videoFormat)) {      // get picture information      struct video_picture pictureInfo;      if (::ioctl(videoFd, VIDIOCGPICT, &pictureInfo) >= 0) {        // set colour format        PINDEX i;        for (i = 0; i < NumVideoFormats; i++)          if (colourFormatTab[i][0] == pictureInfo.palette)            break;        if (i < NumVideoFormats)          return SetColourFormat((ColourFormat)i);        else          return SetColourFormat(RGB24);      }    }  }  ::close(videoFd);  videoFd = -1;  return FALSE;}BOOL PVideoInputDevice::IsOpen() const{  return videoFd >= 0;}BOOL PVideoInputDevice::Close(){  if (!IsOpen())    return FALSE;  ClearMapping();  ::close(videoFd);  videoFd = -1;  canMap  = -1;  return TRUE;}BOOL PVideoInputDevice::Start(){  return TRUE;}BOOL PVideoInputDevice::Stop(){  return TRUE;}BOOL PVideoInputDevice::IsCapturing(){  return IsOpen();}PStringList PVideoInputDevice::GetDeviceNames() const{  PStringList list;  list.AppendString("/dev/video0");  list.AppendString("/dev/video1");  return list;}BOOL PVideoInputDevice::SetVideoFormat(VideoFormat newFormat){  if (!PVideoDevice::SetVideoFormat(newFormat))    return FALSE;  // get channel information (to check if channel is valid)  struct video_channel channel;  channel.channel = channelNumber;  if (::ioctl(videoFd, VIDIOCGCHAN, &channel) < 0)    return FALSE;  // set channel information  static int fmt[4] = { VIDEO_MODE_PAL, VIDEO_MODE_NTSC, VIDEO_MODE_SECAM, VIDEO_MODE_AUTO };  channel.norm = fmt[newFormat];  // set the information  if (::ioctl(videoFd, VIDIOCSCHAN, &channel) < 0)    return FALSE;  return TRUE;}unsigned PVideoInputDevice::GetNumChannels() const{  return videoCapability.channels;}BOOL PVideoInputDevice::SetChannel(unsigned newChannel){  if (!PVideoDevice::SetChannel(newChannel))    return FALSE;  // get channel information (to check if channel is valid)  struct video_channel channel;  channel.channel = channelNumber;  if (::ioctl(videoFd, VIDIOCGCHAN, &channel) < 0)    return FALSE;  // set channel information  channel.channel = channelNumber;  // set the information  if (::ioctl(videoFd, VIDIOCSCHAN, &channel) < 0)    return FALSE;  return TRUE;}BOOL PVideoInputDevice::SetColourFormat(ColourFormat newFormat){  if (!PVideoDevice::SetColourFormat(newFormat))    return FALSE;  ClearMapping();  // get picture information  struct video_picture pictureInfo;  if (::ioctl(videoFd, VIDIOCGPICT, &pictureInfo) < 0)    return FALSE;  // set colour format  pictureInfo.palette = colourFormatTab[newFormat][0];  // set the information  if (::ioctl(videoFd, VIDIOCSPICT, &pictureInfo) < 0)    return FALSE;  // set the new information  pixelSize      = colourFormatTab[newFormat][1];  videoFrameSize = frameWidth * frameHeight * pixelSize;  return TRUE;}BOOL PVideoInputDevice::SetFrameRate(unsigned rate){  if (!PVideoDevice::SetFrameRate(rate))    return FALSE;  return TRUE;}BOOL PVideoInputDevice::GetFrameSizeLimits(unsigned & minWidth,                                           unsigned & minHeight,                                           unsigned & maxWidth,                                           unsigned & maxHeight) const{  if (!IsOpen())    return FALSE;  minWidth  = videoCapability.minwidth;  minHeight = videoCapability.minheight;  maxWidth  = videoCapability.maxwidth;  maxHeight = videoCapability.maxheight;  return TRUE;}BOOL PVideoInputDevice::SetFrameSize(unsigned width, unsigned height){  if (!PVideoDevice::SetFrameSize(width, height))    return FALSE;  ClearMapping();  videoFrameSize = frameWidth * frameHeight * pixelSize;  return TRUE;}PINDEX PVideoInputDevice::GetMaxFrameBytes(){  return videoFrameSize;}BOOL PVideoInputDevice::GetFrameData(BYTE * buffer, PINDEX * bytesReturned){  if (canMap < 0) {    if (::ioctl(videoFd, VIDIOCGMBUF, &frame) < 0)      cout << "VIDIOCGMBUF failed" << endl;    else {      videoBuffer = (BYTE *)::mmap(0, frame.size, PROT_READ|PROT_WRITE, MAP_SHARED, videoFd, 0);      if (videoBuffer < 0) {        canMap = 0;      } else {        canMap = 1;        frameBuffer[0].frame  = 0;        frameBuffer[0].format = colourFormatTab[colourFormat][0];        frameBuffer[0].width  = frameWidth;        frameBuffer[0].height = frameHeight;        ::ioctl(videoFd, VIDIOCMCAPTURE, &frameBuffer[0]);        frameBuffer[1].frame  = 1;        frameBuffer[1].format = colourFormatTab[colourFormat][0];        frameBuffer[1].width  = frameWidth;        frameBuffer[1].height = frameHeight;        ::ioctl(videoFd, VIDIOCMCAPTURE, &frameBuffer[1]);        currentFrame = 0;      }    }  }  if (bytesReturned != NULL)    *bytesReturned = videoFrameSize;  // device does not support memory mapping - use normal read  if (canMap == 0)    return (PINDEX)::read(videoFd, buffer, videoFrameSize) == videoFrameSize;  // device does support memory mapping, get data  // wait for the frame to load  ::ioctl(videoFd, VIDIOCSYNC, currentFrame);  // copy the frame to our storage  memcpy(buffer, videoBuffer + frame.offsets[currentFrame], videoFrameSize);  // trigger capture of next frame in this buffer  ::ioctl(videoFd, VIDIOCMCAPTURE, &frameBuffer[currentFrame]);  // change buffers  currentFrame = 1 - currentFrame;  return TRUE;}void PVideoInputDevice::ClearMapping(){  if (canMap == 1) {    if (videoBuffer != NULL)      ::munmap(videoBuffer, videoFrameSize*2);    canMap = -1;    videoBuffer = NULL;  }}    // End Of File ///////////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人第一页| 成人免费在线观看入口| 一本大道久久a久久综合婷婷| 狠狠色狠狠色综合| 精品无人码麻豆乱码1区2区| 免费在线观看精品| 日本亚洲最大的色成网站www| 亚洲国产cao| 人人精品人人爱| 蜜桃av一区二区在线观看 | 成人夜色视频网站在线观看| 狠狠色丁香九九婷婷综合五月| 日本欧美在线观看| 国产一区二区毛片| 成人精品高清在线| 91蜜桃免费观看视频| 欧美性生活久久| 欧美猛男超大videosgay| 91精品国产91久久综合桃花| 91精品国产综合久久精品麻豆| 7777精品伊人久久久大香线蕉 | 精品一区二区久久| 国产精品996| 一本久道中文字幕精品亚洲嫩| 欧美三级资源在线| 26uuu国产在线精品一区二区| 久久噜噜亚洲综合| 中文字幕在线不卡国产视频| 亚洲一区二区精品视频| 久久99国产精品久久99果冻传媒| 国产成人免费高清| 在线免费精品视频| 日韩女优av电影在线观看| 国产亚洲1区2区3区| 一区二区日韩电影| 国产在线日韩欧美| 欧美性大战久久久久久久蜜臀| 欧美二区三区的天堂| 国产午夜精品一区二区| 一区二区欧美精品| 国产夫妻精品视频| 欧美精品久久99| 国产精品成人午夜| 激情av综合网| 欧美日韩亚洲综合一区| 欧美国产日本韩| 奇米精品一区二区三区在线观看| 大桥未久av一区二区三区中文| 精品视频在线免费观看| 国产农村妇女精品| 青青草伊人久久| 日本久久电影网| 国产精品视频一区二区三区不卡| 五月婷婷激情综合网| 波多野结衣亚洲| 久久综合99re88久久爱| 日韩精品视频网站| 色综合久久久久综合体桃花网| 久久在线免费观看| 美女在线观看视频一区二区| 欧美亚洲高清一区| 一二三四社区欧美黄| aaa国产一区| 国产农村妇女精品| 国产精品乡下勾搭老头1| 在线成人av网站| 亚洲一区二区三区激情| 欧美一a一片一级一片| 久久精品水蜜桃av综合天堂| 免费人成网站在线观看欧美高清| 欧美性受xxxx黑人xyx| 一区二区三区在线观看动漫| 成人av在线看| 日韩美女久久久| 99久久777色| 亚洲激情在线激情| 色视频成人在线观看免| 亚洲欧美日韩国产成人精品影院| 成人免费视频播放| 欧美激情一区二区三区不卡| 国产精品亚洲专一区二区三区| www精品美女久久久tv| 韩国欧美国产1区| 国产亚洲视频系列| 成人在线综合网| 自拍偷拍国产精品| 色激情天天射综合网| 亚洲国产色一区| 这里是久久伊人| 精品系列免费在线观看| 欧美国产精品v| 91麻豆精品视频| 一区二区三区日韩欧美| 在线视频欧美区| 免费看欧美女人艹b| 久久久久久久久久久黄色| 国产成人午夜电影网| 亚洲欧美日韩久久精品| 欧美日韩1区2区| 黄色精品一二区| 亚洲欧洲三级电影| 欧美视频一区在线| 国产专区欧美精品| 亚洲免费视频中文字幕| 911精品产国品一二三产区| 极品少妇一区二区| 一区免费观看视频| 日韩欧美亚洲另类制服综合在线 | 懂色av一区二区三区免费看| 国产精品久线观看视频| 欧美日韩一区二区在线观看| 蜜臀av性久久久久蜜臀av麻豆| 国产欧美一区二区精品忘忧草 | 欧美综合视频在线观看| 91精品国产美女浴室洗澡无遮挡| 六月丁香婷婷色狠狠久久| 国产欧美精品一区aⅴ影院 | 日韩精品中文字幕在线不卡尤物| 成人avav影音| 色av成人天堂桃色av| 欧美日韩精品高清| 国产一区高清在线| 亚洲国产一区二区在线播放| 国产日韩欧美在线一区| 欧美日韩精品一区视频| 成人黄色国产精品网站大全在线免费观看| 亚洲一区二区视频在线观看| 久久久精品日韩欧美| 欧美精选一区二区| 91成人在线精品| 波多野结衣中文字幕一区| 久久国产精品72免费观看| 一区二区三区欧美亚洲| 中文字幕欧美国产| 久久久久久影视| 日韩欧美国产成人一区二区| 欧洲av一区二区嗯嗯嗯啊| 97se亚洲国产综合在线| 国产一区二区影院| 久久疯狂做爰流白浆xx| 日韩中文欧美在线| 亚洲va天堂va国产va久| 亚洲国产另类精品专区| 亚洲一区二区在线视频| 亚洲免费高清视频在线| 中日韩免费视频中文字幕| 久久这里只有精品6| 欧美成人免费网站| 精品国产三级电影在线观看| 欧美一区二区人人喊爽| 91精品国产乱| 日韩亚洲欧美在线| 日韩欧美亚洲国产另类| 日韩一区二区三区在线观看| 欧美精品一级二级| 91精品综合久久久久久| 在线观看91av| 日韩欧美资源站| 欧美tickle裸体挠脚心vk| 日韩午夜激情av| 精品福利在线导航| 国产亚洲自拍一区| 最新国产成人在线观看| 伊人色综合久久天天| 亚洲一区免费视频| 日韩激情在线观看| 国模大尺度一区二区三区| 国产白丝网站精品污在线入口| 粉嫩欧美一区二区三区高清影视| 波多野结衣精品在线| 色综合久久久久综合体桃花网| 欧美三级乱人伦电影| 日韩午夜电影av| 亚洲国产岛国毛片在线| 一区二区三区四区高清精品免费观看 | 不卡视频在线看| 色天天综合色天天久久| 欧美猛男超大videosgay| 精品少妇一区二区三区免费观看| 久久嫩草精品久久久久| 国产精品的网站| 日韩国产高清在线| 国产成人无遮挡在线视频| 色偷偷88欧美精品久久久| 4438x亚洲最大成人网| 久久精品一区二区三区不卡牛牛| 一区在线中文字幕| 日韩 欧美一区二区三区| 国产成人免费网站| 欧美精品xxxxbbbb| 中文字幕免费观看一区| 日韩精品国产精品| 成人免费观看男女羞羞视频| 欧美精品少妇一区二区三区| 久久精品水蜜桃av综合天堂| 亚洲电影中文字幕在线观看| 国产乱码精品一区二区三区五月婷 | 国产视频一区在线观看 | 日韩一区二区在线免费观看| 中文无字幕一区二区三区|