BodyBalanceEvaluation/backend/dll/include/k4arecord/record.h

474 lines
16 KiB
C
Raw Normal View History

/** \file record.h
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License.
* Kinect For Azure Recording SDK.
*/
#ifndef K4A_RECORD_H
#define K4A_RECORD_H
#include <k4arecord/types.h>
#include <k4arecord/k4arecord_export.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
*
* \addtogroup Functions
*
* @{
*/
/** Opens a new recording file for writing.
*
* \param path
* Filesystem path for the new recording.
*
* \param device
* The Azure Kinect device that is being recorded. The device handle is used to store device calibration and serial
* number information. May be NULL if recording user-generated data.
*
* \param device_config
* The configuration the Azure Kinect device was started with.
*
* \param recording_handle
* If successful, this contains a pointer to the new recording handle. Caller must call k4a_record_close()
* when finished with recording.
*
* \remarks
* The file will be created if it doesn't exist, or overwritten if an existing file is specified.
*
* \remarks
* Streaming does not need to be started on the device at the time this function is called, but when it is started
* it should be started with the same configuration provided in \p device_config.
*
* \remarks
* Subsequent calls to k4a_record_write_capture() will need to have images in the resolution and format defined
* in \p device_config.
*
* \headerfile record.h <k4arecord/record.h>
*
* \returns ::K4A_RESULT_SUCCEEDED is returned on success
*
* \relates k4a_record_t
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT k4a_result_t k4a_record_create(const char *path,
k4a_device_t device,
const k4a_device_configuration_t device_config,
k4a_record_t *recording_handle);
/** Adds a tag to the recording.
*
* \param recording_handle
* The handle of a new recording, obtained by k4a_record_create().
*
* \param name
* The name of the tag to write.
*
* \param value
* The string value to store in the tag.
*
* \headerfile record.h <k4arecord/record.h>
*
* \relates k4a_record_t
*
* \returns ::K4A_RESULT_SUCCEEDED is returned on success.
*
* \remarks
* Tags are global to a file, and should store data related to the entire recording, such as camera configuration or
* recording location.
*
* \remarks
* Tag names must be ALL CAPS and may only contain A-Z, 0-9, '-' and '_'.
*
* \remarks
* All tags need to be added before the recording header is written.
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT k4a_result_t k4a_record_add_tag(k4a_record_t recording_handle, const char *name, const char *value);
/** Adds the track header for recording IMU.
*
* \param recording_handle
* The handle of a new recording, obtained by k4a_record_create().
*
* \headerfile record.h <k4arecord/record.h>
*
* \relates k4a_record_t
*
* \returns ::K4A_RESULT_SUCCEEDED is returned on success
*
* \remarks
* The track needs to be added before the recording header is written.
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT k4a_result_t k4a_record_add_imu_track(k4a_record_t recording_handle);
/** Adds an attachment to the recording.
*
* \param recording_handle
* The handle of a new recording, obtained by k4a_record_create().
*
* \param attachment_name
* The name of the attachment to be stored in the recording file. This name should be a valid filename with an
* extension.
*
* \param buffer
* The attachment data buffer.
*
* \param buffer_size
* The size of the attachment data buffer.
*
* \headerfile record.h <k4arecord/record.h>
*
* \relates k4a_record_t
*
* \returns ::K4A_RESULT_SUCCEEDED is returned on success
*
* \remarks
* All attachments need to be added before the recording header is written.
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT k4a_result_t k4a_record_add_attachment(const k4a_record_t recording_handle,
const char *attachment_name,
const uint8_t *buffer,
size_t buffer_size);
/** Adds custom video tracks to the recording.
*
* \param recording_handle
* The handle of a new recording, obtained by k4a_record_create().
*
* \param track_name
* The name of the custom video track to be added.
*
* \param codec_id
* A UTF8 null terminated string containing the codec ID of the track. Some of the existing formats are listed here:
* https://www.matroska.org/technical/specs/codecid/index.html. The codec ID can also be custom defined by the user.
* Video codec ID's should start with 'V_'.
*
* \param codec_context
* The codec context is a codec-specific buffer that contains any required codec metadata that is only known to the
* codec. It is mapped to the matroska 'CodecPrivate' element.
*
* \param codec_context_size
* The size of the codec context buffer.
*
* \param track_settings
* Additional metadata for the video track such as resolution and framerate.
*
* \headerfile record.h <k4arecord/record.h>
*
* \relates k4a_record_t
*
* \returns ::K4A_RESULT_SUCCEEDED is returned on success
*
* \remarks
* Built-in video tracks like the DEPTH, IR, and COLOR tracks will be created automatically when the k4a_record_create()
* API is called. This API can be used to add additional video tracks to save custom data.
*
* \remarks
* Track names must be ALL CAPS and may only contain A-Z, 0-9, '-' and '_'.
*
* \remarks
* All tracks need to be added before the recording header is written.
*
* \remarks
* Call k4a_record_write_custom_track_data() with the same track_name to write data to this track.
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT k4a_result_t k4a_record_add_custom_video_track(const k4a_record_t recording_handle,
const char *track_name,
const char *codec_id,
const uint8_t *codec_context,
size_t codec_context_size,
const k4a_record_video_settings_t *track_settings);
/** Adds custom subtitle tracks to the recording.
*
* \param recording_handle
* The handle of a new recording, obtained by k4a_record_create().
*
* \param track_name
* The name of the custom subtitle track to be added.
*
* \param codec_id
* A UTF8 null terminated string containing the codec ID of the track. Some of the existing formats are listed here:
* https://www.matroska.org/technical/specs/codecid/index.html. The codec ID can also be custom defined by the user.
* Subtitle codec ID's should start with 'S_'.
*
* \param codec_context
* The codec context is a codec-specific buffer that contains any required codec metadata that is only known to the
* codec. It is mapped to the matroska 'CodecPrivate' element.
*
* \param codec_context_size
* The size of the codec context buffer.
*
* \param track_settings
* Additional metadata for the subtitle track. If NULL, the default settings will be used.
*
* \headerfile record.h <k4arecord/record.h>
*
* \relates k4a_record_t
*
* \returns ::K4A_RESULT_SUCCEEDED is returned on success
*
* \remarks
* Built-in subtitle tracks like the IMU track will be created automatically when the k4a_record_add_imu_track() API is
* called. This API can be used to add additional subtitle tracks to save custom data.
*
* \remarks
* Track names must be ALL CAPS and may only contain A-Z, 0-9, '-' and '_'.
*
* \remarks
* All tracks need to be added before the recording header is written.
*
* \remarks
* Call k4a_record_write_custom_track_data() with the same track_name to write data to this track.
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT k4a_result_t
k4a_record_add_custom_subtitle_track(const k4a_record_t recording_handle,
const char *track_name,
const char *codec_id,
const uint8_t *codec_context,
size_t codec_context_size,
const k4a_record_subtitle_settings_t *track_settings);
/** Writes the recording header and metadata to file.
*
* \param recording_handle
* The handle of a new recording, obtained by k4a_record_create().
*
* \headerfile record.h <k4arecord/record.h>
*
* \relates k4a_record_t
*
* \returns ::K4A_RESULT_SUCCEEDED is returned on success
*
* \remarks
* This must be called before captures or any track data can be written.
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT k4a_result_t k4a_record_write_header(k4a_record_t recording_handle);
/** Writes a camera capture to file.
*
* \param recording_handle
* The handle of a new recording, obtained by k4a_record_create().
*
* \param capture_handle
* The handle of a capture to write to file.
*
* \headerfile record.h <k4arecord/record.h>
*
* \relates k4a_record_t
*
* \returns ::K4A_RESULT_SUCCEEDED is returned on success
*
* \remarks
* Captures must be written in increasing order of timestamp, and the file's header must already be written.
*
* \remarks
* k4a_record_write_capture() will write all images in the capture to the corresponding tracks in the recording file.
* If any of the images fail to write, other images will still be written before a failure is returned.
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT k4a_result_t k4a_record_write_capture(k4a_record_t recording_handle, k4a_capture_t capture_handle);
/** Writes an imu sample to file.
*
* \param recording_handle
* The handle of a new recording, obtained by k4a_record_create().
*
* \param imu_sample
* A structure containing the imu sample data and timestamps.
*
* \headerfile record.h <k4arecord/record.h>
*
* \relates k4a_record_t
*
* \returns ::K4A_RESULT_SUCCEEDED is returned on success
*
* \remarks
* Samples must be written in increasing order of timestamp, and the file's header must already be written.
*
* \remarks
* When writing imu samples at the same time as captures, the samples should be within 1 second of the most recently
* written capture.
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT k4a_result_t k4a_record_write_imu_sample(k4a_record_t recording_handle, k4a_imu_sample_t imu_sample);
/** Writes data for a custom track to file.
*
* \param recording_handle
* The handle of a new recording, obtained by k4a_record_create().
*
* \param track_name
* The name of the custom track that the data is going to be written to.
*
* \param device_timestamp_usec
* The timestamp in microseconds for the custom track data. This timestamp should be in the same time domain as the
* device timestamp used for recording.
*
* \param custom_data
* The buffer of custom track data.
*
* \param custom_data_size
* The size of the custom track data buffer.
*
* \headerfile record.h <k4arecord/record.h>
*
* \relates k4a_record_t
*
* \returns ::K4A_RESULT_SUCCEEDED is returned on success
*
* \remarks
* Custom track data must be written in increasing order of timestamp, and the file's header must already be written.
* When writing custom track data at the same time as captures or IMU data, the custom data should be within 1 second of
* the most recently written timestamp.
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT k4a_result_t k4a_record_write_custom_track_data(const k4a_record_t recording_handle,
const char *track_name,
uint64_t device_timestamp_usec,
uint8_t *custom_data,
size_t custom_data_size);
/** Flushes all pending recording data to disk.
*
* \param recording_handle
* Handle obtained by k4a_record_create().
*
* \headerfile record.h <k4arecord/record.h>
*
* \relates k4a_record_t
*
* \returns ::K4A_RESULT_SUCCEEDED is returned on success, or ::K4A_RESULT_FAILED if an error occurred.
*
* \remarks
* k4a_record_flush() ensures that all data passed to the recording API prior to calling flush is written to disk.
* If continuing to write recording data, care must be taken to ensure no new timestamps are added from before the
* flush.
*
* \remarks
* If an error occurs, best effort is made to flush as much data to disk as possible, but the integrity of the file is
* not guaranteed.
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT k4a_result_t k4a_record_flush(k4a_record_t recording_handle);
/** Closes a recording handle.
*
* \param recording_handle
* Handle obtained by k4a_record_create().
*
* \headerfile record.h <k4arecord/record.h>
*
* \relates k4a_record_t
*
* \remarks
* If there is any unwritten data it will be flushed to disk before closing the recording.
*
* \xmlonly
* <requirements>
* <requirement name="Header">record.h (include k4arecord/record.h)</requirement>
* <requirement name="Library">k4arecord.lib</requirement>
* <requirement name="DLL">k4arecord.dll</requirement>
* </requirements>
* \endxmlonly
*/
K4ARECORD_EXPORT void k4a_record_close(k4a_record_t recording_handle);
/**
* @}
*/
#ifdef __cplusplus
} // extern "C"
#endif
#endif /* K4A_RECORD_H */