00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00018
00019
00020
00021
00022
00023
00025 #include <stdlib.h>
00026 #include <stdio.h>
00027 #include <string.h>
00028 #include "playerv4l2.h"
00029 #include "plv4l2tools.h"
00030
00031
00032 #define TMP_BUFF_SIZE 128
00033
00034 #define WYKONAJ_REQUEST(req, len) this->client->Request(this->m_device_id, (req), (len) )
00035 #define WYKONAJ_REQUEST4(req, len, rep, rplen) this->client->Request(this->m_device_id, (req), (len), &rephdr, (rep), (rplen))
00036
00037 CameraV4L2Proxy::CameraV4L2Proxy (PlayerClient *pc, unsigned short index,
00038 unsigned char access)
00039 : CameraProxy (pc, index, access )
00040 {
00041 swapRBFlag = 0;
00042 refreshState();
00043
00044 getBrighteness();
00045 getContrast();
00046 getSaturation();
00047 getHue();
00048 }
00049
00050
00051 void CameraV4L2Proxy::refreshState(){
00052 getPixelFormatS();
00053 pixelFormat = (PixelFormats)convPixS2I(pixelFormatS);
00054
00055 getNormS();
00056 norm = (NormStandards)convNormS2I(normS);
00057
00058 getFieldS();
00059 field = (FieldTypes)convFieldS2I(fieldS);
00060
00061 getName();
00062
00063 getInputName();
00064
00065 noOfControls = countControls();
00066 }
00067
00068
00069
00070 void CameraV4L2Proxy::FillData(player_msghdr_t hdr, const char* buffer)
00071 {
00072 CameraProxy::FillData(hdr, buffer);
00073 }
00074
00075
00076 int CameraV4L2Proxy::selectSourceI(int src_id)
00077 {
00078 char req[TMP_BUFF_SIZE+1];
00079 snprintf(req, TMP_BUFF_SIZE,"i %d", src_id);
00080
00081 int out = WYKONAJ_REQUEST(req, strlen(req)+1);
00082 refreshState();
00083
00084 return out;
00085 }
00086
00087
00088 int CameraV4L2Proxy::selectSourceS(const char *src_name)
00089 {
00090 char req[TMP_BUFF_SIZE+1];
00091 snprintf(req, TMP_BUFF_SIZE,"i %s", src_name);
00092
00093 int out = WYKONAJ_REQUEST(req, strlen(req)+1);
00094 refreshState();
00095
00096 return out;
00097 }
00098
00099 int CameraV4L2Proxy::setFrameSize(int w, int h)
00100 {
00101 char req[TMP_BUFF_SIZE+1];
00102 snprintf(req, TMP_BUFF_SIZE,"s %d %d", w, h);
00103
00104 return WYKONAJ_REQUEST(req, strlen(req)+1);
00105 }
00106
00107
00108 int CameraV4L2Proxy::setNormI(int normID)
00109 {
00110 return setNormS(convNormI2S(normID));
00111 }
00112
00113
00114 int CameraV4L2Proxy::setNormS(const char * normID)
00115 {
00116 if (normID == 0)
00117 return -1;
00118 char req[TMP_BUFF_SIZE+1];
00119 snprintf(req, TMP_BUFF_SIZE, "n %s", normID);
00120
00121 int out = WYKONAJ_REQUEST(req, strlen(req)+1);
00122 refreshState();
00123
00124 return out;
00125 }
00126
00127
00128 int CameraV4L2Proxy::setFieldTypeI(int fielsType)
00129 {
00130 return setFieldTypeS(convFieldI2S(fielsType));
00131 }
00132
00133
00134 int CameraV4L2Proxy::setFieldTypeS(const char * fielsType)
00135 {
00136 if (fielsType == 0)
00137 return -1;
00138 char req[TMP_BUFF_SIZE+1];
00139 snprintf(req, TMP_BUFF_SIZE, "f %s", fielsType);
00140
00141 int out = WYKONAJ_REQUEST(req, strlen(req)+1);
00142 getFieldS();
00143 field = (FieldTypes)convFieldS2I(fieldS);
00144
00145
00146 return out;
00147 }
00148
00149
00150 int CameraV4L2Proxy::setPixelFormatI(int pixFormat)
00151 {
00152 return setPixelFormatS(convPixI2S(pixFormat));
00153 }
00154
00155 int CameraV4L2Proxy::setPixelFormatS(const char * pixFormat)
00156 {
00157 if (pixFormat == 0)
00158 return -1;
00159 char req[TMP_BUFF_SIZE+1];
00160 snprintf(req, TMP_BUFF_SIZE, "m %s", pixFormat);
00161 int out = WYKONAJ_REQUEST(req, strlen(req)+1);
00162 getPixelFormatS();
00163 pixelFormat = (PixelFormats)convPixS2I(pixelFormatS);
00164
00165 return out;
00166 }
00167
00168
00169 int CameraV4L2Proxy::setSwapRB(int swap)
00170 {
00171 char *req = 0;
00172
00173 if (swap)
00174 req = "w 1";
00175 else
00176 req = "w 0";
00177
00178 int out = WYKONAJ_REQUEST(req, strlen(req)+1);
00179
00180 if (out == 0)
00181 swapRBFlag = swap;
00182
00183 return out;
00184 }
00185
00186
00187 int CameraV4L2Proxy::countControls()
00188 {
00189 player_msghdr_t rephdr;
00190 char tmpBuf[TMP_BUFF_SIZE+1];
00191 int out;
00192
00193 char *req = "gc";
00194
00195 out = WYKONAJ_REQUEST4(req, strlen(req)+1, tmpBuf, TMP_BUFF_SIZE);
00196
00197 if (out != 0)
00198 return -1;
00199
00200 if (sscanf(tmpBuf, "%d", &out)!=1)
00201 return -1;
00202 return out;
00203 }
00204
00205
00206 int CameraV4L2Proxy::setControlValueI(int id, double value)
00207 {
00208 char req[TMP_BUFF_SIZE+1];
00209 int out;
00210
00211 snprintf(req, TMP_BUFF_SIZE,"ci %f %d", value, id);
00212 out = WYKONAJ_REQUEST(req, strlen(req)+1);
00213 if (out==0) {
00214 getBrighteness();
00215 getContrast();
00216 getSaturation();
00217 getHue();
00218 }
00219 return out;
00220 }
00221
00222
00223 int CameraV4L2Proxy::setControlValueS(const char *name, double value)
00224 {
00225 char req[TMP_BUFF_SIZE+1];
00226 int out;
00227
00228 snprintf(req, TMP_BUFF_SIZE,"c %f %s", value, name);
00229 out = WYKONAJ_REQUEST(req, strlen(req)+1);
00230 if (out==0) {
00231 getBrighteness();
00232 getContrast();
00233 getSaturation();
00234 getHue();
00235 }
00236 return out;
00237 }
00238
00239
00240
00241 double CameraV4L2Proxy::getControlValueI(int id)
00242 {
00243 player_msghdr_t rephdr;
00244 char tmpBuf[TMP_BUFF_SIZE+1];
00245 double out;
00246 char req[TMP_BUFF_SIZE+1];
00247 snprintf(req, TMP_BUFF_SIZE, "gci %d", id);
00248 tmpBuf[0]='\0';
00249
00250 if (WYKONAJ_REQUEST4(req, strlen(req)+1, tmpBuf, TMP_BUFF_SIZE) == 0 &&
00251 sscanf(tmpBuf, "%lf", &out)!=1)
00252 return -1.0;
00253 return out;
00254 }
00255
00256
00257
00258 double CameraV4L2Proxy::getControlValueS(const char *name)
00259 {
00260 player_msghdr_t rephdr;
00261 char tmpBuf[TMP_BUFF_SIZE+1];
00262 double out;
00263 char req[TMP_BUFF_SIZE+1];
00264 snprintf(req, TMP_BUFF_SIZE, "gc %s", name);
00265
00266 if (WYKONAJ_REQUEST4(req, strlen(req)+1, tmpBuf, TMP_BUFF_SIZE) == 0 &&
00267 sscanf(tmpBuf, "%lf", &out)!=1)
00268 return -1.0;
00269 return out;
00270 }
00271
00272 const char * CameraV4L2Proxy::getControlName(int id){
00273 player_msghdr_t rephdr;
00274 static char tmpBuf[TMP_BUFF_SIZE+1];
00275 int out;
00276 char req[TMP_BUFF_SIZE+1];
00277 snprintf(req, TMP_BUFF_SIZE, "gcn %d", id);
00278
00279 out = WYKONAJ_REQUEST4(req, strlen(req)+1, tmpBuf, TMP_BUFF_SIZE);
00280
00281 if (out != 0)
00282 return 0;
00283
00284 return tmpBuf;
00285 }
00286
00287
00288 int CameraV4L2Proxy::setBrighteness(double value)
00289 {
00290 return setControlValueS("Brighteness", value);
00291 }
00292
00293 double CameraV4L2Proxy::getBrighteness()
00294 {
00295 return brighteness = getControlValueS("Brighteness");
00296 }
00297
00298
00299 int CameraV4L2Proxy::setSaturation(double value)
00300 {
00301 return setControlValueS("Saturation", value);
00302 }
00303
00304 double CameraV4L2Proxy::getSaturation()
00305 {
00306 return saturation = getControlValueS("Saturation");
00307 }
00308
00309
00310 int CameraV4L2Proxy::setContrast(double value)
00311 {
00312 return setControlValueS("Contrast", value);
00313 }
00314
00315 double CameraV4L2Proxy::getContrast()
00316 {
00317 return contrast = getControlValueS("Contrast");
00318 }
00319
00320
00321 int CameraV4L2Proxy::setHue(double value)
00322 {
00323 return setControlValueS("Hue", value);
00324 }
00325
00326 double CameraV4L2Proxy::getHue()
00327 {
00328 return hue = getControlValueS("Hue");
00329 }
00330
00331
00332
00333
00335 const char * CameraV4L2Proxy::getInputName(){
00336 player_msghdr_t rephdr;
00337 int out;
00338 char req[TMP_BUFF_SIZE+1];
00339 snprintf(req, TMP_BUFF_SIZE, "gi");
00340
00341 out = WYKONAJ_REQUEST4(req, strlen(req)+1, inputName, sizeof(inputName));
00342
00343 if (out != 0)
00344 return 0;
00345
00346 return inputName;
00347 }
00348
00349
00350
00352 const char * CameraV4L2Proxy::getName(){
00353 player_msghdr_t rephdr;
00354 int out;
00355 char req[TMP_BUFF_SIZE+1];
00356 snprintf(req, TMP_BUFF_SIZE, "g");
00357
00358 out = WYKONAJ_REQUEST4(req, strlen(req)+1, name, sizeof(name));
00359
00360 if (out != 0)
00361 return 0;
00362
00363 return name;
00364 }
00365
00367 const char * CameraV4L2Proxy::getFieldS(){
00368 player_msghdr_t rephdr;
00369 int out;
00370 char req[TMP_BUFF_SIZE+1];
00371 snprintf(req, TMP_BUFF_SIZE, "gf");
00372
00373 out = WYKONAJ_REQUEST4(req, strlen(req)+1, fieldS, sizeof(fieldS));
00374
00375 if (out != 0)
00376 return 0;
00377
00378 return fieldS;
00379 }
00380
00382 const char * CameraV4L2Proxy::getPixelFormatS(){
00383 player_msghdr_t rephdr;
00384 int out;
00385 char req[TMP_BUFF_SIZE+1];
00386 snprintf(req, TMP_BUFF_SIZE, "gm");
00387
00388 out = WYKONAJ_REQUEST4(req, strlen(req)+1, pixelFormatS, sizeof(pixelFormatS));
00389
00390 if (out != 0)
00391 return 0;
00392
00393 return pixelFormatS;
00394 }
00395
00397 const char * CameraV4L2Proxy::getNormS(){
00398 player_msghdr_t rephdr;
00399 int out;
00400 char req[TMP_BUFF_SIZE+1];
00401 snprintf(req, TMP_BUFF_SIZE, "gn");
00402
00403 out = WYKONAJ_REQUEST4(req, strlen(req)+1, normS, sizeof(normS));
00404
00405 if (out != 0)
00406 return 0;
00407
00408 return normS;
00409 }
00410