{"id":1131,"date":"2019-03-05T03:30:26","date_gmt":"2019-03-04T18:30:26","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=1131"},"modified":"2019-03-05T03:30:26","modified_gmt":"2019-03-04T18:30:26","slug":"opengl-12-glsurfaceview%ec%99%80-camera2%eb%a1%9c-%ec%b9%b4%eb%a9%94%eb%9d%bc-%ec%98%81%ec%83%81-%ea%b7%b8%eb%a6%ac%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=1131","title":{"rendered":"[OpenGL] 12. GLSurfaceView\uc640 Camera2\ub85c \uce74\uba54\ub77c \uc601\uc0c1 \uadf8\ub9ac\uae30"},"content":{"rendered":"<h1>GLSurfaceView with Camera2<\/h1>\n<p>GLSurfaceView\ub85c \uce74\uba54\ub77c \uc601\uc0c1\uc744 \ub098\ud0c0\ub0b4\ub294\uac83\uc740\u00a0<a href=\"https:\/\/www.charlezz.com\/?p=1023\">MediaPlayer\ub85c \ub3d9\uc601\uc0c1 \ud50c\ub808\uc774\uc5b4<\/a>\u00a0\ub9cc\ub4dc\ub294 \ubc95\uacfc \ube44\uc2b7\ud569\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc778 \ud750\ub984\uc740 \uc774\ub807\uc2b5\ub2c8\ub2e4.<\/p>\n<p><em>Note:\uce74\uba54\ub77c\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \uba54\ub2c8\ud398\uc2a4\ud2b8\uc5d0 \ud574\ub2f9 \ud37c\ubbf8\uc158 \uc0ac\uc6a9\uc744 \uc120\uc5b8\ud558\uace0,\u00a0 \ub7f0\ud0c0\uc784 \ud37c\ubbf8\uc158\uc744 \uccb4\ud06c\ud569\ub2c8\ub2e4.<\/em><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"671\" height=\"171\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/03\/drawit-diagram.png\" class=\"aligncenter wp-image-1132\" alt=\"\" title=\"drawit diagram\" srcset=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/03\/drawit-diagram.png 671w, https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/03\/drawit-diagram-300x76.png 300w\" sizes=\"(max-width: 671px) 100vw, 671px\" \/><\/p>\n<p>\uce74\uba54\ub77c\ub97c \uc5f4\uace0 \ud504\ub9ac\ubdf0\uc138\uc158\uc744 \ub9cc\ub4e4\uc5b4 \ucea1\uccd0\ub9ac\ud018\uc2a4\ud2b8\ub97c \ubc18\ubcf5\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294\uac83\uc740 <a href=\"https:\/\/www.charlezz.com\/?p=1118\">\uc774\uc804 \ud3ec\uc2a4\ud2b8\uc778 \uce74\uba54\ub77c2<\/a>\uc5d0\uc11c \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\ubc88 \ud3ec\uc2a4\ud2b8\uc758 \ud575\uc2ec\uc740 <strong>GLThread\uc5d0\uc11c \uc0dd\uc131\ud55c \ud14d\uc2a4\ucc98\ub97c \uc774\uc6a9\ud558\uc5ec Surface\ub97c \uc0dd\uc131<\/strong>\ud574\ub0b4\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800 Texture\ub97c \ub9cc\ub4e4\ub3c4\ub85d\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">int textures[] = new int[1];\r\nGLES20.glGenTextures(1, textures, 0);\r\n\r\nint textureId = textures[0];\r\nGLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textureId);\r\nGLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);\r\nGLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);\r\nGLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);\r\nGLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);<\/pre>\n<p>\uc774\ub807\uac8c \uc0dd\uc131\ud55c \ud14d\uc2a4\ucc98\ub97c \uc774\uc6a9\ud574 Surface\ub85c \ub9cc\ub4ed\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">SurfaceTexture surfaceTexture = new SurfaceTexture(textureId);\r\nSurface surface = new Surface(surfaceTexture);<\/pre>\n<p>\uc774\ub807\uac8c \ub9cc\ub4e4\uc5b4\uc9c4 surface\ub97c \uce74\uba54\ub77c\uc758 \ud0c0\uac9f\uc73c\ub85c \uc9c0\uc815\ud558\uc5ec \uc774\ubbf8\uc9c0 \ubc84\ud37c\ub97c \ubc1b\uc544 \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">mCameraDevice.createCaptureSession(Arrays.asList(surface),\r\n        new CameraCaptureSession.StateCallback() {\r\n            @Override\r\n            public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {\r\n               ...\r\n                CaptureRequest.Builder mPreviewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);\r\n                mPreviewRequestBuilder.addTarget(surface);\r\n                mPreviewRequest = mPreviewRequestBuilder.build();\r\n                mCaptureSession.setRepeatingRequest(mPreviewRequest, null, mBackgroundHandler);\r\n               ...\r\n            }\r\n        }, null\r\n);<\/pre>\n<p>\ubcf8 \ud504\ub85c\uc81d\ud2b8\uc758 \uc18c\uc2a4\ucf54\ub4dc\ub294 <a href=\"https:\/\/github.com\/charlezz\/openglstudy\">github<\/a>\uc5d0\uc11c \ud655\uc778 \ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GLSurfaceView with Camera2 GLSurfaceView\ub85c \uce74\uba54\ub77c \uc601\uc0c1\uc744 \ub098\ud0c0\ub0b4\ub294\uac83\uc740\u00a0MediaPlayer\ub85c \ub3d9\uc601\uc0c1 \ud50c\ub808\uc774\uc5b4\u00a0\ub9cc\ub4dc\ub294 \ubc95\uacfc \ube44\uc2b7\ud569\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc778 \ud750\ub984\uc740 \uc774\ub807\uc2b5\ub2c8\ub2e4. Note:\uce74\uba54\ub77c\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \uba54\ub2c8\ud398\uc2a4\ud2b8\uc5d0 \ud574\ub2f9 \ud37c\ubbf8\uc158 \uc0ac\uc6a9\uc744 \uc120\uc5b8\ud558\uace0,\u00a0 \ub7f0\ud0c0\uc784 \ud37c\ubbf8\uc158\uc744 \uccb4\ud06c\ud569\ub2c8\ub2e4. \uce74\uba54\ub77c\ub97c \uc5f4\uace0 \ud504\ub9ac\ubdf0\uc138\uc158\uc744 \ub9cc\ub4e4\uc5b4 \ucea1\uccd0\ub9ac\ud018\uc2a4\ud2b8\ub97c \ubc18\ubcf5\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294\uac83\uc740 \uc774\uc804 \ud3ec\uc2a4\ud2b8\uc778 \uce74\uba54\ub77c2\uc5d0\uc11c \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \ud3ec\uc2a4\ud2b8\uc758 \ud575\uc2ec\uc740 GLThread\uc5d0\uc11c \uc0dd\uc131\ud55c \ud14d\uc2a4\ucc98\ub97c \uc774\uc6a9\ud558\uc5ec Surface\ub97c \uc0dd\uc131\ud574\ub0b4\ub294 \uac83\uc785\ub2c8\ub2e4. \uba3c\uc800 Texture\ub97c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[24],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1131"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1131"}],"version-history":[{"count":1,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1131\/revisions"}],"predecessor-version":[{"id":1133,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1131\/revisions\/1133"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}