00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "l1394_avcvcr.h"
00019 #include "l1394_fcpnode.h"
00020 #include "l1394_qarray.h"
00021
00022 namespace L1394{
00023 AvcVcr::AvcVcr(FcpNode* parent_node, const int subunit_value)
00024 : Vcr(parent_node)
00025 {
00026 setFrameWidth(720);
00027 setFrameHeight(485);
00028 this->subunit_value = subunit_value;
00029 avc_parent = parent_node;
00030 device_register = new AvcRegister(parent_node, subunit_value);
00031 setName("AvcVcr");
00032 }
00033 AvcVcr::~AvcVcr()
00034 {
00035 delete device_register;
00036 }
00037
00038 int AvcVcr::start()
00039 {
00040 if (getParentNode()->getIsoObject())
00041 {
00042 if (play() == L1394_SUCCESS)
00043 {
00044 setSending(true);
00045 return getParentNode()->getIsoObject()->startIsoListen();
00046 }
00047 }
00048 internal::SMessage::getInstance()->warningStream() << "AvcVcr > No valid Iso-Object" << endl;
00049 return L1394_FAILED;
00050 }
00051
00052 int AvcVcr::stop()
00053 {
00054 if (!isSending())
00055 return L1394_SUCCESS;
00056 if ( getParentNode()->getIsoObject() )
00057 {
00058 if (wind(0x60)->send() == L1394_SUCCESS)
00059 {
00060 getParentNode()->getIsoObject()->stopIsoListen();
00061 }
00062 else
00063 internal::SMessage::getInstance()->errorStream() << " AvcVcr > Could not stop device" << endl;
00064 }
00065 else
00066 internal::SMessage::getInstance()->errorStream() << " AvcVcr > No valid ISO object" << endl;
00067 return L1394_FAILED;
00068 }
00069
00070 const AvcRegister* AvcVcr::analogAudioOutputMode(const int mode)
00071 {
00072 return device_register->defaultSet(1,0x70,mode);
00073 }
00074
00075
00076 const DeviceRegister* AvcVcr::recordingDate(const Timecode time_code)
00077 {
00078 device_register->defaultSet(2,0x53,0x70);
00079 device_register->getData()->setByte(4,time_code.timezone());
00080 device_register->getData()->setByte(5,(3<<6 | time_code.day()));
00081 device_register->getData()->setByte(6,(time_code.day()<<5 | time_code.month()));
00082 device_register->getData()->setByte(7,time_code.year());
00083 return device_register;
00084 }
00085
00086 const AvcRegister* AvcVcr::timecode(const int value, const Timecode time_code)
00087 {
00088 device_register->defaultSet(2,0x51,value);
00089 device_register->getData()->getQuadlet(1).setByte(0,time_code.frame());
00090 device_register->getData()->getQuadlet(1).setByte(1,time_code.minute());
00091 device_register->getData()->getQuadlet(1).setByte(2,time_code.second());
00092 device_register->getData()->getQuadlet(1).setByte(3,time_code.hour());
00093 return device_register;
00094 }
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 const AvcRegister* AvcVcr::writeMic()
00105 {
00106 return device_register->defaultSet(1,0x51,0x0);
00107 }
00108
00109 const AvcRegister* AvcVcr::wind(const int command)
00110 {
00111 return device_register->defaultSet(1,0xc4,command);
00112 }
00113
00114
00115 const AvcRegister* AvcVcr::search(const int command, const Timecode time_code)
00116 {
00117 device_register->defaultSet(2,0x50, command);
00118 device_register->getData()->getQuadlet(1).setByte(0,time_code.frame());
00119 device_register->getData()->getQuadlet(1).setByte(1,time_code.second());
00120 device_register->getData()->getQuadlet(1).setByte(2,time_code.minute());
00121 device_register->getData()->getQuadlet(1).setByte(3,time_code.hour());
00122 return device_register;
00123 }
00124
00125 const DeviceRegister* AvcVcr::transportState()
00126 {
00127 return device_register;
00128 }
00129
00130 const DeviceRegister* AvcVcr::recordingSpeed(const int speed)
00131 {
00132 return device_register->defaultSet(1,0xdb,speed);
00133 }
00134
00135
00136 Timecode AvcVcr::getTimeCode()
00137 {
00138 Quadlet tmp_quadlet;
00139 Timecode time_code;
00140 device_register->defaultSet(2,0x51,0x71)->setCtype(STATUS);
00141
00142
00143 tmp_quadlet = avc_parent->send( *(device_register->getData()) ).getQuadlet(1);
00144
00145 time_code.setFrame(tmp_quadlet.getByte(0));
00146 time_code.setSecond(tmp_quadlet.getByte(1));
00147 time_code.setMinute(tmp_quadlet.getByte(2));
00148 time_code.setHour(tmp_quadlet.getByte(3));
00149
00150 return time_code;
00151 }
00152 const AvcRegister* AvcVcr::backward(const int measurement_unit,const int count)
00153 {
00154 device_register->defaultSet(2,0x56, measurement_unit)->getData()->setByte(4,count);
00155 return device_register;
00156
00157 }
00158 const AvcRegister* AvcVcr::forward(const int measurement_unit,const int count)
00159 {
00160 device_register->defaultSet(2,0x55, measurement_unit)->getData()->setByte(4,count);
00161 return device_register;
00162 }
00163 const AvcRegister* AvcVcr::preset(const int reset,const int id,const u_int32_t parameter_value)
00164 {
00165 device_register->defaultSet(2,0x45, (reset << 7) | id)->getData()->insert(parameter_value,2);
00166 return device_register;
00167 }
00168
00169 Quadlet AvcVcr::mediumInfo()
00170 {
00171 device_register->defaultSet(2,0xda,0x7f);
00172 device_register->getData()->setByte(4,0x7f);
00173 return avc_parent->send(*(device_register->getData())).getQuadlet(1);
00174 }
00175
00176 int AvcVcr::setParameter(const int buffercount, const int channel, const Isomode ,const Videomode videomode, const Framerate framerate)
00177 {
00178 if (videomode != DEVICE_DV)
00179 {
00180 internal::SMessage::getInstance()->warningStream() << "AvcVcr > Invalid videomode. This device supports only DV" << endl;
00181 }
00182
00183 if (framerate != DEVICE_FRAMES_DV)
00184 {
00185 internal::SMessage::getInstance()->warningStream() << "AvcVcr > Invalid framerate. This device supports only DV-specific framerates" << endl;
00186 }
00187
00188 if (! (getParentNode()->getIsoObject()) )
00189 {
00190 internal::SMessage::getInstance()->errorStream() << "AvcVcr > Invalid ISO object" << endl;
00191 return L1394_FAILED;
00192 }
00193
00194 return getParentNode()->getIsoObject()->setParameter(buffercount, channel, 1440000);
00195 }
00196
00197 bool AvcVcr::hasFramerate(const Videomode videomode,const Framerate framerate)
00198 {
00199 if ( (videomode == DEVICE_DV) && (framerate == DEVICE_FRAMES_DV) )
00200 return true;
00201
00202 return false;
00203 }
00204
00205
00206 }