VRS
A file format for sensor data.
Loading...
Searching...
No Matches
DataLayoutConventions.h
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include "DataLayout.h"
20#include "DataPieces.h"
21#include "ForwardDefinitions.h"
22#include "RecordFormat.h"
23
24namespace vrs {
25
27namespace datalayout_conventions {
28
30constexpr const char* kImageWidth = "image_width";
32constexpr const char* kImageHeight = "image_height";
34constexpr const char* kImageStride = "image_stride";
36constexpr const char* kImageStride2 = "image_stride_2";
38constexpr const char* kImagePixelFormat = "image_pixel_format";
41constexpr const char* kImageBytesPerPixel = "image_bytes_per_pixel";
43constexpr const char* kImageCodecName = "image_codec_name";
45constexpr const char* kImageCodecQuality = "image_codec_quality";
46
48using ImageSpecType = uint32_t;
49
63class ImageSpec : public AutoDataLayout {
64 public:
70
71 // For video encoding
74
75 // Deprecated fields
77 // for legacy data compatibility
79
81
88 const ImageContentBlockSpec& base,
89 size_t blockSize = ContentBlock::kSizeUnknown);
90};
91
93constexpr const char* kImageKeyFrameTimeStamp = "image_key_frame_timestamp";
96constexpr const char* kImageKeyFrameIndex = "image_key_frame_index";
97
100 public:
103
104 bool hasVideoSpec() const {
105 return isMapped() && keyFrameTimestamp.isAvailable() && keyFrameIndex.isAvailable();
106 }
107
109};
110
112constexpr const char* kAudioFormat = "audio_format";
114constexpr const char* kAudioSampleFormat = "audio_sample_format";
117constexpr const char* kAudioSampleFrameStride = "audio_sample_stride";
119constexpr const char* kAudioChannelCount = "audio_channel_count";
121constexpr const char* kAudioSampleRate = "audio_sample_rate";
123constexpr const char* kAudioSampleCount = "audio_sample_count";
125constexpr const char* kAudioStereoPairCount = "audio_stereo_pair_count";
126
137class AudioSpec : public AutoDataLayout {
138 public:
142 DataPieceValue<uint8_t> channelCount{kAudioChannelCount};
143 DataPieceValue<uint32_t> sampleRate{kAudioSampleRate};
144 DataPieceValue<uint32_t> sampleCount{kAudioSampleCount};
145 DataPieceValue<uint8_t> stereoPairCount{kAudioStereoPairCount};
146
147 AutoDataLayoutEnd end;
148};
149
151constexpr const char* kNextContentBlockSize = "next_content_block_size";
152using ContentBlockSizeType = uint32_t;
153
156 public:
158 DataPieceValue<uint32_t> nextAudioContentBlockSampleCount{kAudioSampleCount};
159
161};
162
163} // namespace datalayout_conventions
164
165// Previous name to help transition.
166namespace DataLayoutConventions {
167using namespace datalayout_conventions;
168}
169
170} // namespace vrs
For use within an AutoDataLayout class, to end the AutoDataLayout's construction.
Definition DataLayout.h:557
Specialized DataLayout class to declare a DataLayout in struct format.
Definition DataLayout.h:551
Specification of a VRS record content block.
Definition RecordFormat.h:474
static const size_t kSizeUnknown
Special value used to represent an unknown block size.
Definition RecordFormat.h:477
bool isMapped() const
Definition DataLayout.h:311
DataPieceValue specialization class to store enums more conveniently and safely.
Definition DataPieceValue.h:287
DataPiece for variable length string.
Definition DataPieceString.h:36
DataPiece for a single value of type T. The value is stored in DataLayout's fixed size buffer.
Definition DataPieceValue.h:37
bool isAvailable() const override
Definition DataPieceValue.h:223
Specification of an image content block.
Definition RecordFormat.h:137
DataLayout definitions use to describe what's in an audio content block.
Definition DataLayoutConventions.h:137
DataPieceEnum< AudioFormat, uint8_t > audioFormat
optional
Definition DataLayoutConventions.h:139
DataLayout definitions use to describe what's in an image content block.
Definition DataLayoutConventions.h:63
ContentBlock getImageContentBlock(const ImageContentBlockSpec &base, size_t blockSize=ContentBlock::kSizeUnknown)
Definition DataLayoutConventions.cpp:24
Optional values specifying the content block following the DataLayout.
Definition DataLayoutConventions.h:155
DataLayout definitions use to describe a video image content block.
Definition DataLayoutConventions.h:99
constexpr const char * kImageBytesPerPixel
Definition DataLayoutConventions.h:41
constexpr const char * kImageWidth
DataLayout convention name for the image width.
Definition DataLayoutConventions.h:30
uint32_t ImageSpecType
Data type to use for the kImageXXX fields above.
Definition DataLayoutConventions.h:48
constexpr const char * kAudioStereoPairCount
DataLayout convention name for a count of audio coupled stream count.
Definition DataLayoutConventions.h:125
constexpr const char * kAudioFormat
DataLayout convention name for the audio format (see vrs::AudioFormat).
Definition DataLayoutConventions.h:112
constexpr const char * kAudioChannelCount
DataLayout convention name for the audio channel count: mono = 1, stereo = 2, etc.
Definition DataLayoutConventions.h:119
constexpr const char * kImageKeyFrameIndex
Definition DataLayoutConventions.h:96
constexpr const char * kImageStride2
DataLayout convention name for the image stride for the other planes (not the first plane).
Definition DataLayoutConventions.h:36
constexpr const char * kImageHeight
DataLayout convention name for the image height.
Definition DataLayoutConventions.h:32
constexpr const char * kAudioSampleCount
DataLayout convention name for a count of audio sample frames.
Definition DataLayoutConventions.h:123
constexpr const char * kNextContentBlockSize
DataLayout convention to specify the size of the content block following.
Definition DataLayoutConventions.h:151
constexpr const char * kImagePixelFormat
DataLayout convention name for the pixel format specification (see vrs::ImageFormat).
Definition DataLayoutConventions.h:38
constexpr const char * kImageKeyFrameTimeStamp
DataLayout convention name for the stream's most recent video keyframe timestamp.
Definition DataLayoutConventions.h:93
constexpr const char * kImageCodecName
DataLayout convention name for video codec name.
Definition DataLayoutConventions.h:43
constexpr const char * kAudioSampleRate
DataLayout convention name for the sample rate (samples per seconde).
Definition DataLayoutConventions.h:121
constexpr const char * kAudioSampleFormat
DataLayout convention name for the audio sample format (see vrs::AudioSampleFormat).
Definition DataLayoutConventions.h:114
constexpr const char * kImageStride
DataLayout convention name for the image stride for the first plane.
Definition DataLayoutConventions.h:34
constexpr const char * kAudioSampleFrameStride
Definition DataLayoutConventions.h:117
constexpr const char * kImageCodecQuality
DataLayout convention video codec quality setting.
Definition DataLayoutConventions.h:45
Definition AsyncDiskFileChunk.hpp:49