לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 23-04-2014, 00:44
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
עזרה בהצגת ביטמאפ על המסך בדרך הכי יעילה.

יש לי דריבר של מצלמה שמשום מה(לפי מה שאני רואה), שולף פריים מהמצלמה ומחזיק אותו בפורמו של PPM(לא ברור למה.., הרי זה תופס המון מקום), בכל מקרה השאלה שלי מהיא הדרך הכי יעילה וכסכונית לפלוט את מה שהדרייבר מחזיק ישירות למסך, בדוגמא של הקוד מתבצעה שמירה של התמונה על הדיסק הקשיחף אני כאמור מעוניין לפלוט ישירות למסך, בצורה הכי יעילה שיש.
**לא בדיוק הכי יעילה, אני אדייק, אני הולך להשתמש באחת הספריות QT, או GTK, אז על ידי השענות למש שיש לספריות הללו להציעה.

קוד:
/************************************************** ******** Software developed by AVA ( Ava Group of the University of Cordoba, ava at uco dot es) Main author Rafael Munoz Salinas (rmsalinas at uco dot es) This software is released under BSD license as expressed below ------------------------------------------------------------------- Copyright (c) 2013, AVA ( Ava Group University of Cordoba, ava at uco dot es) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the Ava group of the University of Cordoba. 4. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AVA ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AVA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ************************************************** **************/ #include <iostream> #include <ctime> #include <cstdlib> #include <fstream> #include <sstream> #include <raspicam/raspicam.h> using namespace std; bool doTestSpeedOnly=false; size_t nFramesCaptured=100; //parse command line //returns the index of a command line param in argv. If not found, return -1 int findParam ( string param,int argc,char **argv ) { int idx=-1; for ( int i=0; i<argc && idx==-1; i++ ) if ( string ( argv[i] ) ==param ) idx=i; return idx; } //parse command line //returns the value of a command line param. If not found, defvalue is returned float getParamVal ( string param,int argc,char **argv,float defvalue=-1 ) { int idx=-1; for ( int i=0; i<argc && idx==-1; i++ ) if ( string ( argv[i] ) ==param ) idx=i; if ( idx==-1 ) return defvalue; else return atof ( argv[ idx+1] ); } raspicam::RASPICAM_EXPOSURE getExposureFromString ( string str ) { if ( str=="OFF" ) return raspicam::RASPICAM_EXPOSURE_OFF; if ( str=="AUTO" ) return raspicam::RASPICAM_EXPOSURE_AUTO; if ( str=="NIGHT" ) return raspicam::RASPICAM_EXPOSURE_NIGHT; if ( str=="NIGHTPREVIEW" ) return raspicam::RASPICAM_EXPOSURE_NIGHTPREVIEW; if ( str=="BACKLIGHT" ) return raspicam::RASPICAM_EXPOSURE_BACKLIGHT; if ( str=="SPOTLIGHT" ) return raspicam::RASPICAM_EXPOSURE_SPOTLIGHT; if ( str=="SPORTS" ) return raspicam::RASPICAM_EXPOSURE_SPORTS; if ( str=="SNOW" ) return raspicam::RASPICAM_EXPOSURE_SNOW; if ( str=="BEACH" ) return raspicam::RASPICAM_EXPOSURE_BEACH; if ( str=="VERYLONG" ) return raspicam::RASPICAM_EXPOSURE_VERYLONG; if ( str=="FIXEDFPS" ) return raspicam::RASPICAM_EXPOSURE_FIXEDFPS; if ( str=="ANTISHAKE" ) return raspicam::RASPICAM_EXPOSURE_ANTISHAKE; if ( str=="FIREWORKS" ) return raspicam::RASPICAM_EXPOSURE_FIREWORKS; return raspicam::RASPICAM_EXPOSURE_AUTO; } raspicam::RASPICAM_AWB getAwbFromString ( string str ) { if ( str=="OFF" ) return raspicam::RASPICAM_AWB_OFF; if ( str=="AUTO" ) return raspicam::RASPICAM_AWB_AUTO; if ( str=="SUNLIGHT" ) return raspicam::RASPICAM_AWB_SUNLIGHT; if ( str=="CLOUDY" ) return raspicam::RASPICAM_AWB_CLOUDY; if ( str=="SHADE" ) return raspicam::RASPICAM_AWB_SHADE; if ( str=="TUNGSTEN" ) return raspicam::RASPICAM_AWB_TUNGSTEN; if ( str=="FLUORESCENT" ) return raspicam::RASPICAM_AWB_FLUORESCENT; if ( str=="INCANDESCENT" ) return raspicam::RASPICAM_AWB_INCANDESCENT; if ( str=="FLASH" ) return raspicam::RASPICAM_AWB_FLASH; if ( str=="HORIZON" ) return raspicam::RASPICAM_AWB_HORIZON; return raspicam::RASPICAM_AWB_AUTO; } void processCommandLine ( int argc,char **argv,raspicam::RaspiCam &Camera ) { Camera.setWidth ( getParamVal ( "-w",argc,argv,1280 ) ); Camera.setHeight ( getParamVal ( "-h",argc,argv,960 ) ); Camera.setBrightness ( getParamVal ( "-br",argc,argv,50 ) ); Camera.setSharpness ( getParamVal ( "-sh",argc,argv,0 ) ); Camera.setContrast ( getParamVal ( "-co",argc,argv,0 ) ); Camera.setSaturation ( getParamVal ( "-sa",argc,argv,0 ) ); Camera.setShutterSpeed( getParamVal ( "-ss",argc,argv,0 ) ); Camera.setISO ( getParamVal ( "-iso",argc,argv ,400 ) ); if ( findParam ( "-vs",argc,argv ) !=-1 ) Camera.setVideoStabilization ( true ); Camera.setExposureCompensation ( getParamVal ( "-ec",argc,argv ,0 ) ); if ( findParam ( "-gr",argc,argv ) !=-1 ) Camera.setFormat(raspicam::RASPICAM_FORMAT_GRAY); if ( findParam ( "-yuv",argc,argv ) !=-1 ) Camera.setFormat(raspicam::RASPICAM_FORMAT_YUV420) ; if ( findParam ( "-test_speed",argc,argv ) !=-1 ) doTestSpeedOnly=true; int idx; if ( ( idx=findParam ( "-ex",argc,argv ) ) !=-1 ) Camera.setExposure ( getExposureFromString ( argv[idx+1] ) ); if ( ( idx=findParam ( "-awb",argc,argv ) ) !=-1 ) Camera.setAWB( getAwbFromString ( argv[idx+1] ) ); nFramesCaptured=getParamVal("-nframes",argc,argv,100); } void showUsage() { cout<<"Usage: "<<endl; cout<<"[-help shows this help]\n"<<endl; cout<<"[-gr sets gray color mode]\n"<<endl; cout<<"[-test_speed use for test speed and no images will be saved]\n"; cout<<"[-yuv sets yuv420 color mode]\n"<<endl; cout<<"[-w width] [-h height] \n[-br brightness_val(0,100)]\n[-sh sharpness_val (-100 to 100)]\n"; cout<<"[-co contrast_val (-100 to 100)]\n[-sa saturation_val (-100 to 100)]\n"; cout<<"[-iso ISO_val (100 to 800)]\n[-vs turns on video stabilisation]\n[-ec exposure_compensation_value(-10,10)]\n"; cout<<"[-ss shutter_speed (value in microsecs (max 330000)]\n[-ec exposure_compensation_value(-10,10)]\n"; cout<<"[-exp mode (OFF,AUTO,NIGHT,NIGHTPREVIEW,BACKLIGHT,SPOTLIGHT,S PORTS,SNOW,BEACH,VERYLONG,FIXEDFPS,ANTISHAKE,FIREW ORKS)]"<<endl; cout<<"[-awb (OFF,AUTO,SUNLIGHT,CLOUDY,TUNGSTEN,FLUORESCENT,INC ANDESCENT,FLASH,HORIZON)]"<<endl; cout<<"[-nframes val: number of frames captured (100 default). 0 == Infinite lopp]\n"; // cout<<"[-ex exposure_mode ( cout<<endl; } void saveImage ( string filepath,unsigned char *data,raspicam::RaspiCam &Camera ) { std::ofstream outFile ( filepath.c_str(),std::ios::binary ); if ( Camera.getFormat()==raspicam::RASPICAM_FORMAT_BGR || Camera.getFormat()==raspicam::RASPICAM_FORMAT_RGB ) { outFile<<"P6\n"; } else if ( Camera.getFormat()==raspicam::RASPICAM_FORMAT_GRAY ) { outFile<<"P5\n"; } else if ( Camera.getFormat()==raspicam::RASPICAM_FORMAT_YUV4 20 ) { //made up format outFile<<"P7\n"; } outFile<<Camera.getWidth() <<" "<<Camera.getHeight() <<" 255\n"; outFile.write ( ( char* ) data,Camera.getImageBufferSize() ); } int main ( int argc,char **argv ) { if ( argc==1 ) { cerr<<"Usage (-help for help)"<<endl; } if ( findParam ( "-help",argc,argv ) !=-1) { showUsage(); return -1; } raspicam::RaspiCam Camera; processCommandLine ( argc,argv,Camera ); cout<<"Connecting to camera"<<endl; if ( !Camera.open() ) { cerr<<"Error opening camera"<<endl; return -1; } cout<<"Connected to camera ="<<Camera.getId() <<" bufs="<<Camera.getImageBufferSize( )<<endl; unsigned char *data=new unsigned char[ Camera.getImageBufferSize( )]; time_t timer_begin,timer_end; time ( &timer_begin ); cout<<"Capturing...."<<endl; size_t i=0; do{ Camera.grab(); Camera.retrieve ( data ); if ( !doTestSpeedOnly ) { if ( i%5==0 ) cout<<"\r capturing ..."<<i<<"/"<<nFramesCaptured<<std::flush; if ( i%30==0 && i!=0 && nFramesCaptured>0 ) { //save image if not in inifite loop std::stringstream fn; fn<<"image"; if (i<10) fn<<"0"; fn<<i<<".ppm"; saveImage ( fn.str(),data,Camera ); cerr<<"Saving "<<fn.str()<<endl; } } }while(++i<nFramesCaptured || nFramesCaptured==0);//stops when nFrames captured or at infinity lpif nFramesCaptured<0 if ( !doTestSpeedOnly ) cout<<endl<<"Images saved in imagexx.ppm"<<endl; time ( &timer_end ); /* get current time; same as: timer = time(NULL) */ double secondsElapsed = difftime ( timer_end,timer_begin ); printf ( "%.f seconds for %d frames : FPS = %f\n", secondsElapsed,nFramesCaptured, ( float ) ( ( float ) ( nFramesCaptured ) /secondsElapsed ) ); Camera.release(); }

נערך לאחרונה ע"י The_Equivocator בתאריך 23-04-2014 בשעה 00:48.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 23-04-2014, 02:20
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
בתגובה להודעה מספר 1 שנכתבה על ידי The_Equivocator שמתחילה ב "עזרה בהצגת ביטמאפ על המסך בדרך הכי יעילה."

ציטוט:

The texture conversion will work on any MMAL opaque buffer i.e. camera preview, still (up to 2000x2000 resolution), video. However, the example code only does the GL plumbing for stills preview. I think someone posted a patch on the RPI forums to make it work with RaspiVid so you might be able to use that.

Fastpath basically means not copying the buffer data to ARM memory and doing a software conversion. So, for the GL rendering it means just passing a handle to GL so the GPU driver can do this directly.

Currently, there is no support/fastpath in the drivers for feeding the OpenGL rendered buffers into the video encoder. Instead, the slow and probably impractical path is to call glReadPixels, convert the buffer to YUV and pass the converted buffer to the encoder.

A fastpath is certainly possible and I've done some work in porting this to the RPI drivers but there's some other framework required and I won't get chance to look at this until the New Year.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 23-04-2014, 07:18
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
בתגובה להודעה מספר 1 שנכתבה על ידי The_Equivocator שמתחילה ב "עזרה בהצגת ביטמאפ על המסך בדרך הכי יעילה."

בגדול זו השאלה שלי, מנוסחת בצורה יותר ברורה.


ציטוט:
I'm developing an application that shall receive images from a camera device and display them in a GTK window.

The camera delivers raw RGB images (3 bytes per pixel, no alpha channel, fixed size) at a varying frame rate (1-50 fps).

I've already done all that hardware stuff and now have a callback function that gets called with every new image captured by the camera.

What is the easyest but fast enough way to display those images in my window?

Here's what I already tried:

using gdk_draw_rgb_image() on a gtk drawing area: basically worked, but rendered so slow that the drawing processes overlapped and the application crashed after the first few frames, even at 1 fps capture rate.

allocating a GdkPixbuf for each new frame and calling gtk_image_set_from_pixbuf() on a gtk image widget: only displays the first frame, then I see no change in the window. May be a bug in my code, but don't know if that will be fast enough.

using Cairo (cairo_set_source_surface(), then cairo_paint()): seemed pretty fast, but the image looked striped, don't know if the image format is compatible.

Currently I'm thinking about trying something like gstreamer and treating those images like a video stream, but I'm not sure whether this is like an overkill for my simple mechanism.

Thanks in advance for any advice!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #9  
ישן 23-04-2014, 16:15
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
בתגובה להודעה מספר 1 שנכתבה על ידי The_Equivocator שמתחילה ב "עזרה בהצגת ביטמאפ על המסך בדרך הכי יעילה."

טוב לא יודע אם זה מעניין משהו..
מצאתי דרך להפוך סטרינג זה QPixmap או QImage.(ואז להציג עם ספריית QT).
http://asmaloney.com/2013/11/code/c...age-or-qpixmap/

עד כמה זה יהיה טוב יותר מלעבוד עם ההיאי-גיואי של האופן סיבי נבדוק בקרוב, תאורטית הבנתי שהוא גורם לאיטיות, מעשית תשובות בקרוב.

***QImage image( inMat.data, inMat.cols, inMat.rows, inMat.step, QImage::Format_RGB32 );

כאשר: inMat.data- זה הבאפשר עצמו.
inMat.cols, inMat.rows זו הרזלוציה שאנו עובדים איתה. (של המצלמה).
QImage::Format_RGB32 הפורמט שאנו עובדים איתו.
**אני לא ממש רואה איך האופן GL יכול חעזור כאן במשהו, אין לי כאן איזה אפקטים של גרפיקה, וגם אין יותר מדי חשובים.

נערך לאחרונה ע"י The_Equivocator בתאריך 23-04-2014 בשעה 16:39.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 23-04-2014, 16:26
  The_Equivocator The_Equivocator אינו מחובר  
 
חבר מתאריך: 11.02.04
הודעות: 16,543
בתגובה להודעה מספר 10 שנכתבה על ידי Tom.Cruise שמתחילה ב "אין דרך לקבל באפר וידאו..."

מה לא נורמלי בזה?
אתה מקבל באפר! (אולי לא רואים זאת בקוד הזה כי זו דוגמא לשימוש בדריבר), אני עכשיו אעלה את הממשק עצמו..
יש שם שיטה בשם getImageBufferData(), הבעיה שלי הייתה שלא היה לי מושג איך להציג את הבאפר הזה על המסך.. (זו בעצם הייתה השאלה), אחרי שישבתי על זה כמה שעות מצאתי פתרון כאמור.

והנה הממשק המלא(לא הדוגמה).

קוד:
/************************************************** ******** Software developed by AVA ( Ava Group of the University of Cordoba, ava at uco dot es) Main author Rafael Munoz Salinas (rmsalinas at uco dot es) This software is released under BSD license as expressed below ------------------------------------------------------------------- Copyright (c) 2013, AVA ( Ava Group University of Cordoba, ava at uco dot es) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the Ava group of the University of Cordoba. 4. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY AVA ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AVA BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ************************************************** **************/ #include "raspicam.h" #include "private/private_impl.h" namespace raspicam { RaspiCam::RaspiCam() { _impl=new _private::Private_Impl; } RaspiCam::~RaspiCam() { delete _impl; } bool RaspiCam::open ( bool StartCapture ) { return _impl->open ( StartCapture ); } bool RaspiCam::startCapture() { return _impl->startCapture(); } bool RaspiCam::isOpened() const {return _impl->isOpened();} bool RaspiCam::grab() { return _impl->grab(); } void RaspiCam::retrieve ( unsigned char *data,RASPICAM_FORMAT type ) { _impl->retrieve ( data,type ); } unsigned char *RaspiCam::getImageBufferData() const{return _impl->getImageBufferData();} size_t RaspiCam::getImageBufferSize() const{return _impl->getImageBufferSize();} size_t RaspiCam::getImageTypeSize ( RASPICAM_FORMAT type ) const{return _impl->getImageTypeSize ( type );} void RaspiCam::release() { _impl->release(); } void RaspiCam::setFormat(RASPICAM_FORMAT fmt){ _impl->setFormat( fmt); } void RaspiCam::setWidth ( unsigned int width ) { _impl->setWidth ( width ); } void RaspiCam::setHeight ( unsigned int height ) { _impl->setHeight ( height ); } void RaspiCam::setCaptureSize ( unsigned int width, unsigned int height ) { _impl->setCaptureSize ( width,height ); } void RaspiCam::setBrightness ( unsigned int brightness ) { _impl->setBrightness ( brightness ); } void RaspiCam::setRotation ( int rotation ) { _impl->setRotation ( rotation ); } void RaspiCam::setISO ( int iso ) { _impl->setISO ( iso ); } void RaspiCam::setSharpness ( int sharpness ) { _impl->setSharpness ( sharpness ); } void RaspiCam::setContrast ( int contrast ) { _impl->setContrast ( contrast ); } void RaspiCam::setSaturation ( int saturation ) { _impl->setSaturation ( saturation ); } void RaspiCam::setExposure ( RASPICAM_EXPOSURE exposure ) { _impl->setExposure ( exposure ); } void RaspiCam::setShutterSpeed ( unsigned int ss ) { _impl->setShutterSpeed ( ss ); } void RaspiCam::setVideoStabilization ( bool v ) { _impl->setVideoStabilization ( v ); } void RaspiCam::setExposureCompensation ( int val ) { _impl->setExposureCompensation ( val ); } void RaspiCam::setAWB ( RASPICAM_AWB awb ) { _impl->setAWB ( awb ); } void RaspiCam::setImageEffect ( RASPICAM_IMAGE_EFFECT imageEffect ) { _impl->setImageEffect ( imageEffect ); } void RaspiCam::setMetering ( RASPICAM_METERING metering ) { _impl->setMetering ( metering ); } void RaspiCam::setHorizontalFlip ( bool hFlip ) { _impl->setHorizontalFlip ( hFlip ); } void RaspiCam::setVerticalFlip ( bool vFlip ) { _impl->setVerticalFlip ( vFlip ); } RASPICAM_FORMAT RaspiCam::getFormat()const{return _impl->getFormat( ); } unsigned int RaspiCam::getWidth() const{return _impl->getWidth() ;} unsigned int RaspiCam::getHeight() const{return _impl->getHeight() ;} unsigned int RaspiCam::getBrightness() const{return _impl->getBrightness() ;} unsigned int RaspiCam::getRotation() const{return _impl->getRotation() ;} int RaspiCam::getISO() const{return _impl->getISO() ;} unsigned int RaspiCam::getShutterSpeed() const{return 150000;}//return _impl->getShutterSpeed();} int RaspiCam::getSharpness() const{return _impl->getSharpness() ;} int RaspiCam::getContrast() const{return _impl->getContrast() ;} int RaspiCam::getSaturation() const{return _impl->getSaturation() ;} RASPICAM_EXPOSURE RaspiCam::getExposure() const {return _impl->getExposure() ;} RASPICAM_AWB RaspiCam::getAWB() const{return _impl->getAWB() ;} RASPICAM_IMAGE_EFFECT RaspiCam::getImageEffect() const{return _impl->getImageEffect() ;}; RASPICAM_METERING RaspiCam::getMetering() const{return _impl->getMetering() ;} bool RaspiCam::isHorizontallyFlipped() const {return _impl->isHorizontallyFlipped() ;} bool RaspiCam::isVerticallyFlipped() const {return _impl->isVerticallyFlipped() ;} //Returns an id of the camera. We assume the camera id is the one of the raspberry //the id is obtained using raspberry serial number obtained in /proc/cpuinfo std::string RaspiCam::getId() const{return _impl->getId();} };
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 20:47

הדף נוצר ב 0.09 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר