Skip to content

Commit 9fcd5e1

Browse files
committed
Add new signature
1 parent 64b9308 commit 9fcd5e1

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

src/components/camera/camera.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,16 @@ export interface Properties {
1717
frameRate?: number;
1818
}
1919

20+
export interface NamedImage {
21+
sourceName: string;
22+
image: Uint8Array;
23+
mimeType: string;
24+
}
25+
2026
export type MimeType =
2127
| ''
2228
| 'image/vnd.viam.rgba'
29+
| 'image/vnd.viam.depth'
2330
| 'image/jpeg'
2431
| 'image/png'
2532
| 'pointcloud/pcd'
@@ -64,6 +71,28 @@ export interface Camera extends Resource {
6471
*/
6572
getImage: (mimeType?: MimeType, extra?: Struct) => Promise<Uint8Array>;
6673

74+
/**
75+
* Return a frame from a camera.
76+
*
77+
* @example
78+
*
79+
* ```ts
80+
* const camera = new VIAM.CameraClient(machine, 'my_camera');
81+
* const images = await camera.getImages();
82+
* ```
83+
*
84+
*
85+
*
86+
* TODO(docs): include docs link for get images TS example
87+
* @param filterSourceNames - A list of source names to filter the images by.
88+
* If empty or undefined, all images will be returned.
89+
* @param extra - Extra parameters to pass to the camera.
90+
*/
91+
getImages: (
92+
filterSourceNames?: string[],
93+
extra?: Struct
94+
) => Promise<NamedImage[]>;
95+
6796
/**
6897
* Render a frame from a camera to an HTTP response.
6998
*

src/components/camera/client.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import type { CallOptions, PromiseClient } from '@connectrpc/connect';
33
import { GetPropertiesRequest } from '../../gen/component/base/v1/base_pb';
44
import { CameraService } from '../../gen/component/camera/v1/camera_connect';
55
import {
6+
Format,
67
GetImageRequest,
8+
GetImagesRequest,
79
GetPointCloudRequest,
810
RenderFrameRequest,
911
} from '../../gen/component/camera/v1/camera_pb';
@@ -15,6 +17,27 @@ import { GetGeometriesRequest } from '../../gen/common/v1/common_pb';
1517

1618
const PointCloudPCD: MimeType = 'pointcloud/pcd';
1719

20+
// TODO(RSDK-11729): remove helper and format field once removed from proto
21+
const formatToMimeType = (format: Format): MimeType => {
22+
switch (format) {
23+
case Format.RAW_RGBA: {
24+
return 'image/vnd.viam.rgba';
25+
}
26+
case Format.JPEG: {
27+
return 'image/jpeg';
28+
}
29+
case Format.PNG: {
30+
return 'image/png';
31+
}
32+
case Format.RAW_DEPTH: {
33+
return 'image/vnd.viam.depth';
34+
}
35+
case Format.UNSPECIFIED: {
36+
return '';
37+
}
38+
}
39+
}
40+
1841
/**
1942
* A gRPC-web client for the Camera component.
2043
*
@@ -59,6 +82,28 @@ export class CameraClient implements Camera {
5982
return resp.image;
6083
}
6184

85+
async getImages(
86+
filterSourceNames: string[] = [],
87+
extra = {},
88+
callOptions = this.callOptions
89+
) {
90+
const request = new GetImagesRequest({
91+
name: this.name,
92+
filterSourceNames,
93+
extra: Struct.fromJson(extra),
94+
});
95+
96+
this.options.requestLogger?.(request);
97+
98+
const resp = await this.client.getImages(request, callOptions);
99+
100+
return resp.images.map((image) => ({
101+
sourceName: image.sourceName,
102+
image: image.image,
103+
mimeType: image.mimeType || formatToMimeType(image.format),
104+
}));
105+
}
106+
62107
async renderFrame(
63108
mimeType: MimeType = '',
64109
extra = {},

0 commit comments

Comments
 (0)