From f2e9097ed631379681eae5d827b0d68d1fd06dfd Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Tue, 23 Dec 2025 13:13:38 -0800 Subject: [PATCH] Change `mjsCamera.resolution` type from float to int. Resolution is inherently an integer quantity (pixels). PiperOrigin-RevId: 848276456 Change-Id: I92ee1aa88fd552fd42cb3871442f020f26d6fa6a --- doc/includes/references.h | 4 ++-- include/mujoco/mjspec.h | 4 ++-- python/mujoco/introspect/structs.py | 18 +++++++++--------- src/user/user_api.cc | 3 +-- wasm/codegen/generated/bindings.cc | 6 +++--- 5 files changed, 17 insertions(+), 18 deletions(-) diff --git a/doc/includes/references.h b/doc/includes/references.h index 3369e9b0..28902f55 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -2106,11 +2106,11 @@ typedef struct mjsCamera_ { // camera specification // intrinsics mjtProjection proj; // camera projection type + int resolution[2]; // resolution (pixel) double fovy; // y-field of view - double ipd; // inter-pupilary distance + double ipd; // inter-pupillary distance float intrinsic[4]; // camera intrinsics (length) float sensor_size[2]; // sensor size (length) - float resolution[2]; // resolution (pixel) float focal_length[2]; // focal length (length) float focal_pixel[2]; // focal length (pixel) float principal_length[2]; // principal point (length) diff --git a/include/mujoco/mjspec.h b/include/mujoco/mjspec.h index 299f95e9..70a0c403 100644 --- a/include/mujoco/mjspec.h +++ b/include/mujoco/mjspec.h @@ -374,11 +374,11 @@ typedef struct mjsCamera_ { // camera specification // intrinsics mjtProjection proj; // camera projection type + int resolution[2]; // resolution (pixel) double fovy; // y-field of view - double ipd; // inter-pupilary distance + double ipd; // inter-pupillary distance float intrinsic[4]; // camera intrinsics (length) float sensor_size[2]; // sensor size (length) - float resolution[2]; // resolution (pixel) float focal_length[2]; // focal length (length) float focal_pixel[2]; // focal length (pixel) float principal_length[2]; // principal point (length) diff --git a/python/mujoco/introspect/structs.py b/python/mujoco/introspect/structs.py index 61786b45..d45c7582 100644 --- a/python/mujoco/introspect/structs.py +++ b/python/mujoco/introspect/structs.py @@ -7570,6 +7570,14 @@ STRUCTS: Mapping[str, StructDecl] = dict([ type=ValueType(name='mjtProjection'), doc='camera projection type', ), + StructFieldDecl( + name='resolution', + type=ArrayType( + inner_type=ValueType(name='int'), + extents=(2,), + ), + doc='resolution (pixel)', + ), StructFieldDecl( name='fovy', type=ValueType(name='double'), @@ -7578,7 +7586,7 @@ STRUCTS: Mapping[str, StructDecl] = dict([ StructFieldDecl( name='ipd', type=ValueType(name='double'), - doc='inter-pupilary distance', + doc='inter-pupillary distance', ), StructFieldDecl( name='intrinsic', @@ -7596,14 +7604,6 @@ STRUCTS: Mapping[str, StructDecl] = dict([ ), doc='sensor size (length)', ), - StructFieldDecl( - name='resolution', - type=ArrayType( - inner_type=ValueType(name='float'), - extents=(2,), - ), - doc='resolution (pixel)', - ), StructFieldDecl( name='focal_length', type=ArrayType( diff --git a/src/user/user_api.cc b/src/user/user_api.cc index 5baa520b..4d5a529a 100644 --- a/src/user/user_api.cc +++ b/src/user/user_api.cc @@ -1278,8 +1278,7 @@ int mjs_sensorDim(const mjsSensor* sensor) { if (sensor->objtype == mjOBJ_CAMERA) { const mjCCamera* camera = static_cast( static_cast(sensor->element)->get_obj()); - return static_cast(camera->spec.resolution[0]) * - static_cast(camera->spec.resolution[1]); + return camera->spec.resolution[0] * camera->spec.resolution[1]; } return 1; // site-attached: single ray diff --git a/wasm/codegen/generated/bindings.cc b/wasm/codegen/generated/bindings.cc index da048b38..43fdbdd3 100644 --- a/wasm/codegen/generated/bindings.cc +++ b/wasm/codegen/generated/bindings.cc @@ -3135,6 +3135,9 @@ struct MjsCamera { void set_proj(mjtProjection value) { ptr_->proj = value; } + emscripten::val resolution() const { + return emscripten::val(emscripten::typed_memory_view(2, ptr_->resolution)); + } double fovy() const { return ptr_->fovy; } @@ -3153,9 +3156,6 @@ struct MjsCamera { emscripten::val sensor_size() const { return emscripten::val(emscripten::typed_memory_view(2, ptr_->sensor_size)); } - emscripten::val resolution() const { - return emscripten::val(emscripten::typed_memory_view(2, ptr_->resolution)); - } emscripten::val focal_length() const { return emscripten::val(emscripten::typed_memory_view(2, ptr_->focal_length)); }