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