summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia-videodev/android_dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjmedia/src/pjmedia-videodev/android_dev.c')
-rw-r--r--pjmedia/src/pjmedia-videodev/android_dev.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/pjmedia/src/pjmedia-videodev/android_dev.c b/pjmedia/src/pjmedia-videodev/android_dev.c
index dca0d338..1da72610 100644
--- a/pjmedia/src/pjmedia-videodev/android_dev.c
+++ b/pjmedia/src/pjmedia-videodev/android_dev.c
@@ -71,6 +71,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 sup_size_cnt; /**< # of supp'd size */
pjmedia_rect_size *sup_size; /**< Supported size */
unsigned sup_fps_cnt; /**< # of supp'd FPS */
@@ -525,6 +526,7 @@ static pj_status_t and_factory_refresh(pjmedia_vid_dev_factory *ff)
/* Set driver & name info */
pj_ansi_strncpy(vdi->driver, "Android", sizeof(vdi->driver));
+ adi->facing = facing;
if (facing == 0) {
pj_ansi_strncpy(vdi->name, "Back camera", sizeof(vdi->name));
} else {
@@ -953,6 +955,10 @@ static pj_status_t and_stream_set_cap(pjmedia_vid_dev_stream *s,
status = PJMEDIA_EVID_SYSERR;
} else {
strm->param.cap_id = p->target_id;
+
+ /* If successful, set the orientation as well */
+ and_stream_set_cap(s, PJMEDIA_VID_DEV_CAP_ORIENTATION,
+ &strm->param.orient);
}
jni_detach_env(with_attach);
break;
@@ -961,6 +967,8 @@ static pj_status_t and_stream_set_cap(pjmedia_vid_dev_stream *s,
case PJMEDIA_VID_DEV_CAP_ORIENTATION:
{
pjmedia_orient orient = *(pjmedia_orient *)pval;
+ pjmedia_orient eff_ori;
+ and_dev_info *adi;
pj_assert(orient >= PJMEDIA_ORIENT_UNKNOWN &&
orient <= PJMEDIA_ORIENT_ROTATE_270DEG);
@@ -984,7 +992,16 @@ static pj_status_t and_stream_set_cap(pjmedia_vid_dev_stream *s,
return status;
}
- pjmedia_vid_dev_conv_set_rotation(&strm->conv, strm->param.orient);
+ eff_ori = strm->param.orient;
+ adi = &strm->factory->dev_info[strm->param.cap_id];
+ /* Normalize the orientation for back-facing camera */
+ if (!adi->facing) {
+ if (eff_ori == PJMEDIA_ORIENT_ROTATE_90DEG)
+ eff_ori = PJMEDIA_ORIENT_ROTATE_270DEG;
+ else if (eff_ori == PJMEDIA_ORIENT_ROTATE_270DEG)
+ eff_ori = PJMEDIA_ORIENT_ROTATE_90DEG;
+ }
+ pjmedia_vid_dev_conv_set_rotation(&strm->conv, eff_ori);
PJ_LOG(4, (THIS_FILE, "Video capture orientation set to %d",
strm->param.orient));