Thread: [libdc1394-devel] correct destructor / method call order
Capture and control API for IIDC compliant cameras
Brought to you by:
ddouxchamps,
gordp
From: <cg...@un...> - 2004-04-16 16:02:15
|
I am using libdc1394 Version 0.9.3 and libraw 0.9.0 under SuSE Linux 8.2 (Linux dhcp86 2.4.20-4GB #1 Fri Mar 12 15:31:02 UTC 2004 i686 unknown unknown GNU/Linux). This is my Destructor: ############### snip ############### THIS::~THIS(){ int resDmaRel; int resDmaUnl; int resStopIso; dc1394bool_t is_on; if (verbose) cerr << endl << "Cleaning up " << nodelist.size() << " Cameranodes and "<< controllerList.size() << " Controller..." << endl; for (unsigned int i=0; i<nodelist.size(); i++) { resDmaRel = -1; resDmaUnl = -1; resStopIso = -1; if (verbose) cerr << "Stopping Camera #" << i << "..." << endl; dc1394_get_iso_status(nodelist[i].handle, nodelist[i].id, &is_on); if (verbose) cerr << " IsoStatus before Stopping: " << is_on << endl; // dc1394_dma_unlisten tells video1394 to halt iso reception. resDmaUnl = dc1394_dma_unlisten(nodelist[i].handle,&cameras[i]); // dc1394_dma_release_camera releases memory that was mapped by // dc1394_dma_setup_camera. Therefore it has to be called only // if dc1394_dma_setup_camera was called for the current camera // - otherwise it will produce a memory fault! if (resDmaUnl!=-1) resDmaRel = dc1394_dma_release_camera(nodelist[i].handle,&cameras[i]); if (is_on) resStopIso = dc1394_stop_iso_transmission(nodelist[i].handle, nodelist[i].id); if (verbose) cerr<<" CamNum: "<<i<<" Result StopIsoTransmission: "<<resStopIso<<" Result DMA Release: "<<resDmaRel<<" Result DMA Unlisten: "<<resDmaUnl<<endl; //DEBUG MESSAGE dc1394_get_iso_status(nodelist[i].handle, nodelist[i].id, &is_on); if (verbose) cerr << " IsoStatus after Stopping: " << is_on << endl; } for (unsigned int i=0; i<controllerList.size(); i++) { if (verbose) cerr << "Destroying Handle for Controller #" << i << "..."; raw1394_destroy_handle(controllerList[i]); if (verbose) cerr << "done!" << endl; } } ############### snip ############### It produces this output (verbose): ############### snip ############### Cleaning up 2 Cameranodes and 2 Controller... Stopping Camera #0... IsoStatus before Stopping: 0 CamNum: 0 Result StopIsoTransmission: -1 Result DMA Release: -1 Result DMA Unlisten: -1 IsoStatus after Stopping: 0 Stopping Camera #1... IsoStatus before Stopping: 1 CamNum: 1 Result StopIsoTransmission: 1 Result DMA Release: 1 Result DMA Unlisten: 1 IsoStatus after Stopping: 1 Destroying Handle for Controller #0...done! Destroying Handle for Controller #1...done! ############### snip ############### My Questions: Is this the correct order of calling the "cleansing" methods? What could be improved here? Why is the used camera's Iso Status after calling dc1394_stop_iso_transmission() still set to 1?? Furthermore the LED on our "Unibrain Fire-i" still shows orange color after stopping iso trnasmisson, not green. Why is that? |