summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2014-05-30 06:13:24 +0000
committerNanang Izzuddin <nanang@teluu.com>2014-05-30 06:13:24 +0000
commitd5cb99f67a839f5cf25410057feb9f26f2cb9a11 (patch)
tree8aaa4e73c3fcc417eb7cc7ab116c21205f1f6f36
parent0cfe2331747cf982290ba9eb778d2b0cf8dc2c5a (diff)
Re #1762: Fixed native preview cannot be stopped.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4853 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia-videodev/ios_dev.m33
1 files changed, 27 insertions, 6 deletions
diff --git a/pjmedia/src/pjmedia-videodev/ios_dev.m b/pjmedia/src/pjmedia-videodev/ios_dev.m
index 8fe54437..50283bf9 100644
--- a/pjmedia/src/pjmedia-videodev/ios_dev.m
+++ b/pjmedia/src/pjmedia-videodev/ios_dev.m
@@ -723,13 +723,34 @@ static pj_status_t ios_stream_set_cap(pjmedia_vid_dev_stream *s,
{
pj_bool_t native_preview = *((pj_bool_t *)pval);
- if (!strm->cap_session) return PJ_EINVAL;
-
- if (!native_preview || strm->render_view)
+ /* Disable native preview */
+ if (!native_preview) {
+ if (strm->prev_layer) {
+ CALayer *prev_layer = strm->prev_layer;
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [prev_layer removeFromSuperlayer];
+ [prev_layer release];
+ });
+ strm->prev_layer = nil;
+ PJ_LOG(4, (THIS_FILE, "Native preview deinitialized"));
+ }
return PJ_SUCCESS;
+ }
- /* Create view */
- ios_init_view(strm);
+ /* Enable native preview */
+
+ /* Verify if it is already enabled */
+ if (strm->prev_layer)
+ return PJ_SUCCESS;
+
+ /* Verify capture session instance availability */
+ if (!strm->cap_session)
+ return PJ_EINVALIDOP;
+
+ /* Create view, if none */
+ if (!strm->render_view)
+ ios_init_view(strm);
+
/* Preview layer instantiation should be in main thread! */
dispatch_async(dispatch_get_main_queue(), ^{
@@ -743,8 +764,8 @@ static pj_status_t ios_stream_set_cap(pjmedia_vid_dev_stream *s,
prev_layer.frame = strm->render_view.bounds;
[strm->render_view.layer addSublayer:prev_layer];
strm->prev_layer = prev_layer;
- PJ_LOG(4, (THIS_FILE, "Native preview initialized"));
});
+ PJ_LOG(4, (THIS_FILE, "Native preview initialized"));
return PJ_SUCCESS;
}