// License: Apache 2.0. See LICENSE file in root directory. // Copyright(c) 2017 Intel Corporation. All Rights Reserved. /* Include the librealsense C header files */ #include #include #include #include #include "example.h" #include #include #include //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // These parameters are reconfigurable // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define STREAM RS2_STREAM_DEPTH // rs2_stream is a types of data provided by RealSense device // #define FORMAT RS2_FORMAT_Z16 // rs2_format identifies how binary data is encoded within a frame // #define WIDTH 640 // Defines the number of columns for each frame or zero for auto resolve// #define HEIGHT 0 // Defines the number of lines for each frame or zero for auto resolve // #define FPS 30 // Defines the rate of frames per second // #define STREAM_INDEX 0 // Defines the stream index, used for multiple streams of the same type // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int main() { rs2_error* e = 0; // Create a context object. This object owns the handles to all connected realsense devices. // The returned object should be released with rs2_delete_context(...) rs2_context* ctx = rs2_create_context(RS2_API_VERSION, &e); check_error(e); /* Get a list of all the connected devices. */ // The returned object should be released with rs2_delete_device_list(...) rs2_device_list* device_list = rs2_query_devices(ctx, &e); check_error(e); int dev_count = rs2_get_device_count(device_list, &e); check_error(e); printf("There are %d connected RealSense devices.\n", dev_count); if (0 == dev_count) return EXIT_FAILURE; // Get the first connected device // The returned object should be released with rs2_delete_device(...) rs2_device* dev = rs2_create_device(device_list, 0, &e); check_error(e); print_device_info(dev); // Create a pipeline to configure, start and stop camera streaming // The returned object should be released with rs2_delete_pipeline(...) rs2_pipeline* pipeline = rs2_create_pipeline(ctx, &e); check_error(e); // Create a config instance, used to specify hardware configuration // The retunred object should be released with rs2_delete_config(...) rs2_config* config = rs2_create_config(&e); check_error(e); // Request a specific configuration rs2_config_enable_stream(config, STREAM, STREAM_INDEX, WIDTH, HEIGHT, FORMAT, FPS, &e); check_error(e); // Start the pipeline streaming // The retunred object should be released with rs2_delete_pipeline_profile(...) rs2_pipeline_profile* pipeline_profile = rs2_pipeline_start_with_config(pipeline, config, &e); if (e) { printf("The connected device doesn't support depth streaming!\n"); exit(EXIT_FAILURE); } while (1) { // This call waits until a new composite_frame is available // composite_frame holds a set of frames. It is used to prevent frame drops // The returned object should be released with rs2_release_frame(...) rs2_frame* frames = rs2_pipeline_wait_for_frames(pipeline, RS2_DEFAULT_TIMEOUT, &e); check_error(e); // Returns the number of frames embedded within the composite frame int num_of_frames = rs2_embedded_frames_count(frames, &e); check_error(e); int i; for (i = 0; i < num_of_frames; ++i) { // The retunred object should be released with rs2_release_frame(...) rs2_frame* frame = rs2_extract_frame(frames, i, &e); check_error(e); // Check if the given frame can be extended to depth frame interface // Accept only depth frames and skip other frames if (0 == rs2_is_frame_extendable_to(frame, RS2_EXTENSION_DEPTH_FRAME, &e)) continue; // Get the depth frame's dimensions int width = rs2_get_frame_width(frame, &e); check_error(e); int height = rs2_get_frame_height(frame, &e); check_error(e); // Query the distance from the camera to the object in the center of the image float dist_to_center = rs2_depth_frame_get_distance(frame, width / 2, height / 2, &e); check_error(e); // Print the distance printf("The camera is facing an object %.3f meters away.\n", dist_to_center); rs2_release_frame(frame); } rs2_release_frame(frames); } // Stop the pipeline streaming rs2_pipeline_stop(pipeline, &e); check_error(e); // Release resources rs2_delete_pipeline_profile(pipeline_profile); rs2_delete_config(config); rs2_delete_pipeline(pipeline); rs2_delete_device(dev); rs2_delete_device_list(device_list); rs2_delete_context(ctx); return EXIT_SUCCESS; }