00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00024
00025 #include <QVMPlayerReaderBlock>
00026 #include <qvipp.h>
00027
00028 #include <iostream>
00029 #include <qvdefines.h>
00030
00031 QVMPlayerReaderBlock::QVMPlayerReaderBlock(QString name) : QVVideoReaderBlock(name)
00032 {
00033 addProperty<bool>("Deinterlaced", inputFlag, FALSE,"If the camera should be opened in deinterlaced mode");
00034 mplayerreader.setParent(this);
00035 }
00036
00037
00038 bool QVMPlayerReaderBlock::open(QString fileName, int &cols, int &rows, int &fps)
00039 {
00040
00041 QVMPlayerReader::OpenOptions options = QVMPlayerReader::Default;
00042 if(getPropertyValue<bool>("RealTime")) options |= QVMPlayerReader::RealTime;
00043 if(getPropertyValue<bool>("Deinterlaced")) options |= QVMPlayerReader::Deinterlaced;
00044 if(getPropertyValue<bool>("NoLoop")) options |= QVMPlayerReader::NoLoop;
00045
00046 if(not mplayerreader.open(fileName,options,cols,rows))
00047 {
00048 QString msg = QString("MPlayer can not open ") + fileName ;
00049 qWarning() << msg;
00050 setLastError(msg);
00051 return FALSE;
00052 }
00053 else
00054 {
00055 cols = mplayerreader.getCols();
00056 rows = mplayerreader.getRows();
00057 fps = (int)mplayerreader.getFPS();
00058
00059 if(mplayerreader.isLiveCamera() and not getPropertyValue<bool>("RealTime"))
00060 qWarning() << "QVMPlayerReaderBlock::open: Warning, live cameras should always be opened in\n"
00061 "RealTime mode; otherwise, strange delayed (buffered) frames behaviour could be\n"
00062 "observed when connected to slow blocks, or when pausing the camera.\n";
00063
00064 return TRUE;
00065 }
00066 }
00067
00068 void QVMPlayerReaderBlock::close()
00069 {
00070 mplayerreader.close();
00071 }
00072
00073 bool QVMPlayerReaderBlock::grab(QVImage<uChar,1> &imgY, QVImage<uChar,1> &imgU, QVImage<uChar,1> &imgV)
00074 {
00075 return mplayerreader.grab(imgY, imgU, imgV);
00076 }
00077
00078 double QVMPlayerReaderBlock::lengthOfVideo()
00079 {
00080 return mplayerreader.getTimeLength();
00081 }
00082
00083 double QVMPlayerReaderBlock::currentPos()
00084 {
00085 return mplayerreader.getTimePos();
00086 }
00087
00088 void QVMPlayerReaderBlock::setCurrentPos(double time_pos)
00089 {
00090 mplayerreader.seekCam(QVMPlayerReader::SeekAbsolute, time_pos);
00091 }