Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable rotate frames for RGB camera #13733

Open
wants to merge 2 commits into
base: development
Choose a base branch
from

Conversation

noacoohen
Copy link
Contributor

@noacoohen noacoohen commented Feb 3, 2025

Tracked on RSDSO-19999

@noacoohen noacoohen requested review from Nir-Az and OhadMeir February 3, 2025 06:46
@Nir-Az
Copy link
Collaborator

Nir-Az commented Feb 3, 2025

Please check CI failures

auto src = f.as< rs2::video_frame >();
rs2::stream_profile profile = f.get_profile();
auto format = f.get_profile().format();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We already have the profile from 1 line above, you can do profile.format() here right?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

if( ! frame || frame.is< rs2::frameset >() )
return false;
auto type = frame.get_profile().stream_type();
/// change extrinsics
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this comment for?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed

return false;
auto type = frame.get_profile().stream_type();
/// change extrinsics
for( auto & stream_type : _streams_to_rotate ){
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need for { } for one line if/for. Where you are using, { should be placed on a new line.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

@@ -52,32 +53,51 @@ namespace librealsense {
register_option( RS2_OPTION_ROTATION, rotation_control );
}

rotation_filter::rotation_filter( std::vector< rs2_stream > streams_to_rotate )
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code duplication. Is default constructor needed? If so have it call the other constructor with an empty vector {}.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

if( ! strong_rotation_control )
return;

std::lock_guard< std::mutex > lock( _mutex );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lock after validating if valid value.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


register_option( RS2_OPTION_ROTATION, rotation_control );
}

rs2::frame rotation_filter::process_frame(const rs2::frame_source& source, const rs2::frame& f)
{
if( _value == rotation_default_val )
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should lock _mutex or place _value in a local variable and use it all over this function.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same for update_output_profile and rotate_frame.

{
if( _value == 90 || _value == -90 )
{
LOG_ERROR( "Rotating YUYV format is disabled for 90 or -90 degrees" );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we intend to support this at a future PR?

Copy link
Contributor Author

@noacoohen noacoohen Feb 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No support for 90 and 270 degrees rotation for YUYV format

@@ -220,6 +279,38 @@ namespace librealsense {
}
}
}


void rotation_filter::rotate_YUYV_frame(uint8_t* const out, const uint8_t* source, int width, int height) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use formatter. Spaces, { at new line, etc...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

break;
}
case 3: {
rotate_frame< 3 >( static_cast< uint8_t * >( const_cast< void * >( tgt.get_data() ) ),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems that using bpp as a normal function parameter instead of template will reduce code duplication.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants