////////////////////////////////////////////////////////////////////////////// // Set video codec to use ////////////////////////////////////////////////////////////////////////////// void CCustomDrone::SetVideoCodec(eVideoCodec VideoCodec) { if (version.major == ARDRONE_VERSION_2) { // Finalize video finalizeVideo(); if (mutexCommand) pthread_mutex_lock(mutexCommand);; // Output video with selected codec sockCommand.sendf("AT*CONFIG_IDS=%d,\"%s\",\"%s\",\"%s\"\r", seq++, ARDRONE_SESSION_ID, ARDRONE_PROFILE_ID, ARDRONE_APPLOCATION_ID); sockCommand.sendf("AT*CONFIG=%d,\"video:video_codec\",\"%d\"\r", seq++, VideoCodec); if (mutexCommand) pthread_mutex_unlock(mutexCommand);; msleep(100); // Initialize video if(0 == initVideo()) { DoLog("Failed to restart video after codec change, watchdog should catch this", MSG_ERROR); // TODO: change watchdog way //bNeedVideoRestart = true; } } }
// -------------------------------------------------------------------------- // ARDrone::startVideoRecord(Enable/Disable) // Description : Start or stop recording video. // This function is only for AR.Drone 2.0 // You should set a USB key with > 100MB to your drone // Return value : NONE // -------------------------------------------------------------------------- void ARDrone::setVideoRecord(bool activate) { // AR.Drone 2.0 if (version.major == ARDRONE_VERSION_2) { // Finalize video finalizeVideo(); // Enable/Disable video recording if (mutexCommand) pthread_mutex_lock(mutexCommand); sockCommand.sendf("AT*CONFIG_IDS=%d,\"%s\",\"%s\",\"%s\"\r", ++seq, ARDRONE_SESSION_ID, ARDRONE_PROFILE_ID, ARDRONE_APPLOCATION_ID); if (activate) sockCommand.sendf("AT*CONFIG=%d,\"video:video_on_usb\",\"TRUE\"\r", ++seq); else sockCommand.sendf("AT*CONFIG=%d,\"video:video_on_usb\",\"FALSE\"\r", ++seq); if (mutexCommand) pthread_mutex_unlock(mutexCommand); msleep(100); // Output video with MP4_360P_H264_720P_CODEC / H264_360P_CODEC if (mutexCommand) pthread_mutex_lock(mutexCommand); sockCommand.sendf("AT*CONFIG_IDS=%d,\"%s\",\"%s\",\"%s\"\r", ++seq, ARDRONE_SESSION_ID, ARDRONE_PROFILE_ID, ARDRONE_APPLOCATION_ID); if (activate) sockCommand.sendf("AT*CONFIG=%d,\"video:video_codec\",\"%d\"\r", ++seq, 0x82); else sockCommand.sendf("AT*CONFIG=%d,\"video:video_codec\",\"%d\"\r", ++seq, 0x81); if (mutexCommand) pthread_mutex_unlock(mutexCommand); msleep(100); // Initialize video initVideo(); } }
// -------------------------------------------------------------------------- // ARDrone::close() // Description : Finalize // Return value : NONE // -------------------------------------------------------------------------- void ARDrone::close(void) { // Stop AR.Drone if (!onGround()) landing(); // Finalize video finalizeVideo(); // Finalize Navdata finalizeNavdata(); // Finalize AT command finalizeCommand(); }
// -------------------------------------------------------------------------- // ARDrone::close() // Description : Finalize // Return value : NONE // -------------------------------------------------------------------------- void ARDrone::close(void) { // Stop AR.Drone if (!onGround()) landing(); // Finalize video finalizeVideo(); // Finalize Navdata finalizeNavdata(); // Finalize AT command finalizeCommand(); #if _WIN32 // Finalize WSA WSACleanup(); #endif }
// -------------------------------------------------------------------------- // ARDrone::close() // Description : Finalize // Return value : NONE // -------------------------------------------------------------------------- void ARDrone::close(void) { // Stop AR.Drone if (!onGround()) landing(); // Finalize Navdata finalizeNavdata(); // Finalize configuration finalizeConfig(); // Finalize AT command finalizeCommand(); // Finalize video finalizeVideo(); // Finalize WSA WSACleanup(); }
// -------------------------------------------------------------------------- // ARDrone::stopVideoRecord() // Stop recording video. // This function is only for AR.Drone 2.0 // Return value NONE // -------------------------------------------------------------------------- void ARDrone::stopVideoRecord(void) { if (version.major == ARDRONE_VERSION_2) { // Finalize video finalizeVideo(); // Disable video record sockCommand.sendf("AT*CONFIG_IDS=%d,\"%s\",\"%s\",\"%s\"\r", seq++, ARDRONE_SESSION_ID, ARDRONE_PROFILE_ID, ARDRONE_APPLOCATION_ID); sockCommand.sendf("AT*CONFIG=%d,\"video:video_on_usb\",\"FALSE\"\r", seq++); Sleep(100); // Output video with 360P sockCommand.sendf("AT*CONFIG_IDS=%d,\"%s\",\"%s\",\"%s\"\r", seq++, ARDRONE_SESSION_ID, ARDRONE_PROFILE_ID, ARDRONE_APPLOCATION_ID); sockCommand.sendf("AT*CONFIG=%d,\"video:video_codec\",\"%d\"\r", seq++, 0x81); Sleep(100); // Initialize video initVideo(); } }