# Voxl-streamer rotation

Source: https://forum.modalai.com/topic/2422/voxl-streamer-rotation
Category: General Questions (https://forum.modalai.com/category/2/general-questions)
Posted: 2023-07-14 16:10:41 UTC by hmlow
Replies: 19 · Views: 3810

## hmlow · 2023-07-14 16:10:41 UTC

Hi devs

The rotation does not work if the video source is already h264/h265 encoded?

## Reply by Eric Katzfey (ModalAI staff) · 2023-07-14 16:12:11 UTC

@hmlow That is correct. When encoded data is coming in to voxl-streamer it pretty much just acts as an RTSP server and doesn't change the video data in any way.

## Reply by hmlow · 2023-07-14 16:21:08 UTC (in reply to Eric Katzfey)

@Eric-Katzfey 

Can the rotation be done in voxl-camera-server?

I noticed there is a "flip" parameter here:
https://docs.modalai.com/voxl-camera-server/

## Reply by hmlow · 2023-07-15 04:40:01 UTC

Are there any plans to make it rotatable in voxl-streamer or voxl-camera-server? 
I upgraded from SDK 0.9.5 to 1.0.0 and now im stuck with an inverted camera unless i make structural/hardware changes

## Reply by hmlow · 2023-07-15 10:44:46 UTC

I tried building a custom version of the voxl-camera-manager by playing around with the ROTATION_MODE definition (i have no idea what are the possible values, but i tried 0 and 1) within hal3_camera_mgr.cpp but it doesnt seem to do anything.

```
#elif QRB5165
    **#define ROTATION_MODE  2**
    #define OPERATION_MODE CAMERA3_STREAM_CONFIGURATION_NORMAL_MODE
    #define ENCODER_USAGE  GRALLOC_USAGE_HW_VIDEO_ENCODER
    #define SNAPSHOT_DS    HAL_DATASPACE_V0_JFIF
    #define NUM_STREAM_BUFFERS   16 // shouldn't need more than 10, if the buffer pool is empty then OMX should be dropping more frames
    #define NUM_RECORD_BUFFERS   16 // shouldn't need more than 10, if the buffer pool is empty then OMX should be dropping more frames

;
;

 if(en_small_video) {
        small_vid_stream.stream_type = CAMERA3_STREAM_OUTPUT;
        small_vid_stream.width       = small_video_width;
        small_vid_stream.height      = small_video_height;
        small_vid_stream.format      = vid_halfmt;
        small_vid_stream.data_space  = HAL_DATASPACE_UNKNOWN;
        small_vid_stream.usage       = ENCODER_USAGE;
        **small_vid_stream.rotation    = ROTATION_MODE;**
        small_vid_stream.max_buffers = NUM_STREAM_BUFFERS;
        small_vid_stream.priv        = 0;

        streams.push_back(&small_vid_stream);
        streamConfig.num_streams ++;
        M_VERBOSE("Adding small video stream for camera: %d\n", cameraId);

```

Is it still possible to rotate in software if the video is OMX hardware encoded now?

## Reply by hmlow · 2023-07-16 03:16:53 UTC (in reply to Eric Katzfey)

@Eric-Katzfey 

Was searching around for a solution and i stumbled upon this.

https://forum.modalai.com/topic/2043/hires-camera-rotation

I downloaded *libmmcamera_imx214_rot180.so* and renamed it into  *com.qti.sensor.imx214_**rot180**.so* but voxl-camera-server wasnt't happy. (i guess it is due to the new implementation on the SDK-1.0 :relaxed:)

Would you have a functional *com.qti.sensor.imx214_**rot180**.so*?
That would solve all my problems.

Thanks!

## Reply by Zachary Lowell 0 · 2023-07-17 17:23:41 UTC (in reply to hmlow)

@hmlow said in [Voxl\-streamer rotation](/post/11261):
> Would you have a functional com.qti.sensor.imx214_rot180.so?
> 

@hmlow all you need to do is change the pipe you are subscribing to in voxl-streamer. You cannot rotate an encoded stream, but you can to the raw stream. Change the pipe in the voxl-streamer.conf file to point towards `hires_small_color` and make sure the `rotation` parameter is filled and the next time you run voxl-streamer, the frame will have been rotated properly.

## Reply by hmlow · 2023-07-17 22:17:41 UTC (in reply to Zachary Lowell 0)

@Zachary-Lowell-0 

I am using the encoded stream so this approach does not work for me.

Can the rotation be achieved through the use of the rotated IMX214 driver similar to how it was done here? (@Alex-Kushleyev )
https://forum.modalai.com/topic/2043/hires-camera-rotation

## Reply by Alex Kushleyev (ModalAI staff) · 2023-07-18 13:55:02 UTC (in reply to hmlow)

@hmlow , the post you referenced was for VOXL1, unfortunately the camera drivers are not compatible with VOXL2. VOXL2 camera driver does not (yet) have an option to rotate the image on the camera, which is what was being done in the different IMX214 .so drivers.

Maybe I missed something, but I don't understand why @Zachary-Lowell-0 's suggestion would not work. Do you want to use both : rotated and not rotated images or something like that? If you just want the rotated encoded image, then it seems what Zachary said should work for you.

Alex

## Reply by hmlow · 2023-07-18 14:10:22 UTC (in reply to Alex Kushleyev)

@Alex-Kushleyev 

Is a VOXL2 camera driver with 180deg rotation in the works?
The alternative for us would be physically modify the structure on our fleet of aircrafts - which is not something i am very keen on.

With SDK1.0, voxl-camera-server sends OMX pre-encoded H265 streams to voxl-streamer. The encoding done by voxl-camera-server is way more efficient (keeps the VOXL2 nice and cool) than the encoding done by voxl-streamer in SDK0.9.5. @Zachary-Lowell-0 explained that pre-encoded streams cannot be rotated by voxl-streamer, which i have verified as well.

## Reply by hmlow · 2023-07-19 12:42:37 UTC (in reply to hmlow)

@Alex-Kushleyev appreciate your help with the drivers pls

## Reply by Alex Kushleyev (ModalAI staff) · 2023-07-19 15:18:22 UTC (in reply to hmlow)

@hmlow we are not yet working on a rotated version of the driver, although that could be a good option. I am checking if we can enable rotating in the ISP, which would also be very efficient..

## Reply by hmlow · 2023-07-19 16:12:28 UTC (in reply to Alex Kushleyev)

@Alex-Kushleyev thank you very much for the help.
looking forward

## Reply by hmlow · 2023-07-21 13:42:51 UTC (in reply to Alex Kushleyev)

@Alex-Kushleyev any luck with this?

## Reply by Alex Kushleyev (ModalAI staff) · 2023-07-21 18:27:53 UTC (in reply to hmlow)

@hmlow , one of our developers is out until Monday, so I will discuss then and get back to you. Sorry about the delay! @modaltb

## Reply by hmlow · 2023-07-25 12:52:36 UTC (in reply to Alex Kushleyev)

@Alex-Kushleyev 
any good news?

## Reply by Alex Kushleyev (ModalAI staff) · 2023-07-27 14:08:03 UTC (in reply to hmlow)

@hmlow , we built and tested the rotated camera driver, just need to see how quickly we can get it to you.. hang on!

## Reply by Guest · 2023-07-27 20:54:08 UTC (in reply to hmlow)

@hmlow Please use the following procedure to enable driver-level image rotation for the imx214:

1. Download the file [`com.qti.sensor.imx214_flip.so`](https://storage.googleapis.com/modalai_public/imx214_flip/com.qti.sensor.imx214_flip.so) and place it in `/usr/lib/camera` on VOXL2
2. Download the file [`com.qti.sensormodule.imx214_flip_3.bin`](https://storage.googleapis.com/modalai_public/imx214_flip/com.qti.sensormodule.imx214_flip_3.bin) and place it in `/usr/lib/camera` on VOXL2
3. Remove the file `/usr/lib/camera/com.qti.sensormodule.imx214_3.bin` on VOXL2. If this file does not exist on VOXL2, please let me know -- it will require a different procedure.

## Reply by hmlow · 2023-07-28 12:55:23 UTC (in reply to Guest)

@Ariel-Young it works! thank you very much!

## Reply by Guest · 2023-08-01 21:26:13 UTC (in reply to hmlow)

@hmlow Glad it worked! For future reference, the imx214_flip driver should be available internally from SDK 1.1 (system image 1.7) onwards. Rather than downloading from the above links, after SDK 1.1 is released the procedure will be as follows:

1. `rm /usr/lib/camera/com.qti.sensormodule.imx214_3.bin`
2. `cp /usr/share/modalai/chi-cdk/imx214-flip/com.qti.sensormodule.imx214_flip_3.bin /usr/lib/camera`
