[pjsip] Android camera rotation

Сергей Митрофанов goretz.m at gmail.com
Sun Apr 3 10:25:48 EDT 2016


Hi!

I have found that pjsip does not respect initial camera rotation in android
devices.
Sure the android_dev.c itself extracts the rotation value from android
camera devices,
but for now this value is actually not used, resulting wrong capture video
orientation.
I made a simple patch (a little bit raw code style) that resolves this bug.
It takes the camera rotation value in the game and make PJSUA2 easier to
use - developer need no more think about camera initial rotation and tweak
the rotation value before giving it to PJSUA2 itself.

Here is the diff patch for the changes:

>From 1ea38ce9103f6fadd9812f635c83442994fd37ea Mon Sep 17 00:00:00 2001

From: Sergey Mitrofanov <GOretZ.M at gmail.com>

Date: Sun, 3 Apr 2016 17:21:48 +0300

Subject: [PATCH] Fixing to respect initial camera rotation in android
devices.


---

 pjmedia/src/pjmedia-videodev/android_dev.c | 36
++++++++++++++++++++++++++++++

 1 file changed, 36 insertions(+)


diff --git a/pjmedia/src/pjmedia-videodev/android_dev.c
b/pjmedia/src/pjmedia-videodev/android_dev.c

index 1da7261..fd6e61d 100644

--- a/pjmedia/src/pjmedia-videodev/android_dev.c

+++ b/pjmedia/src/pjmedia-videodev/android_dev.c

@@ -72,6 +72,7 @@ typedef struct and_dev_info

     pjmedia_vid_dev_info info; /**< Base info         */

     unsigned dev_idx; /**< Original dev ID   */

     pj_bool_t facing; /**< Front/back camera?*/

+    unsigned rotation; /**< initial camera rotation*/

     unsigned sup_size_cnt; /**< # of supp'd size  */

     pjmedia_rect_size *sup_size; /**< Supported size    */

     unsigned sup_fps_cnt; /**< # of supp'd FPS   */

@@ -532,6 +533,8 @@ static pj_status_t
and_factory_refresh(pjmedia_vid_dev_factory *ff)

  } else {

      pj_ansi_strncpy(vdi->name, "Front camera", sizeof(vdi->name));

  }

+ adi->rotation = (*jni_env)->GetIntField(jni_env, jdev_info,

+ jobjs.cam_info.f_orient);



  /* Get supported sizes */

  jtmp = (*jni_env)->GetObjectField(jni_env, jdev_info,

@@ -1001,6 +1004,39 @@ static pj_status_t
and_stream_set_cap(pjmedia_vid_dev_stream *s,

  else if (eff_ori == PJMEDIA_ORIENT_ROTATE_270DEG)

      eff_ori = PJMEDIA_ORIENT_ROTATE_90DEG;

      }

+     /* Normalize the orientation for rotated camera */

+     switch(adi->rotation){

+ case 90:

+ if (eff_ori == PJMEDIA_ORIENT_ROTATE_90DEG)

+     eff_ori = PJMEDIA_ORIENT_ROTATE_180DEG;

+ else if (eff_ori == PJMEDIA_ORIENT_ROTATE_180DEG)

+     eff_ori = PJMEDIA_ORIENT_ROTATE_270DEG;

+ else if (eff_ori == PJMEDIA_ORIENT_ROTATE_270DEG)

+     eff_ori = PJMEDIA_ORIENT_NATURAL;

+ else if (eff_ori == PJMEDIA_ORIENT_NATURAL)

+     eff_ori = PJMEDIA_ORIENT_ROTATE_90DEG;

+ break;

+ case 180:

+ if (eff_ori == PJMEDIA_ORIENT_ROTATE_90DEG)

+     eff_ori = PJMEDIA_ORIENT_ROTATE_270DEG;

+ else if (eff_ori == PJMEDIA_ORIENT_ROTATE_180DEG)

+     eff_ori = PJMEDIA_ORIENT_NATURAL;

+ else if (eff_ori == PJMEDIA_ORIENT_ROTATE_270DEG)

+     eff_ori = PJMEDIA_ORIENT_ROTATE_90DEG;

+ else if (eff_ori == PJMEDIA_ORIENT_NATURAL)

+     eff_ori = PJMEDIA_ORIENT_ROTATE_180DEG;

+ break;

+ case 270:

+ if (eff_ori == PJMEDIA_ORIENT_ROTATE_90DEG)

+     eff_ori = PJMEDIA_ORIENT_NATURAL;

+ else if (eff_ori == PJMEDIA_ORIENT_ROTATE_180DEG)

+     eff_ori = PJMEDIA_ORIENT_ROTATE_90DEG;

+ else if (eff_ori == PJMEDIA_ORIENT_ROTATE_270DEG)

+     eff_ori = PJMEDIA_ORIENT_ROTATE_180DEG;

+ else if (eff_ori == PJMEDIA_ORIENT_NATURAL)

+     eff_ori = PJMEDIA_ORIENT_ROTATE_270DEG;

+ break;

+     }

      pjmedia_vid_dev_conv_set_rotation(&strm->conv, eff_ori);



      PJ_LOG(4, (THIS_FILE, "Video capture orientation set to %d",

-- 

2.6.4 (Apple Git-63)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20160403/1d501b6e/attachment-0002.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Fixing-to-respect-initial-camera-rotation-in-android.patch
Type: application/octet-stream
Size: 3066 bytes
Desc: not available
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20160403/1d501b6e/attachment.patch>


More information about the pjsip mailing list