{"id":1025,"date":"2019-02-03T23:52:58","date_gmt":"2019-02-03T14:52:58","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=1025"},"modified":"2019-02-03T23:52:58","modified_gmt":"2019-02-03T14:52:58","slug":"%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c-%ea%b7%b8%eb%9e%98%ed%94%bd-%ec%8b%9c%ec%8a%a4%ed%85%9cbufferqueue-and-gralloc","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=1025","title":{"rendered":"\uc548\ub4dc\ub85c\uc774\ub4dc \uadf8\ub798\ud53d \uc2dc\uc2a4\ud15c(BufferQueue and gralloc)"},"content":{"rendered":"<h1>BufferQueue\uc640 gralloc<\/h1>\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc \uadf8\ub798\ud53d \uc2dc\uc2a4\ud15c\uc744 \uc774\ud574\ud558\ub294 \uac83\uc740 BufferQueue\uc640 gralloc HAL\ub85c \uc2dc\uc791\ub429\ub2c8\ub2e4.<\/p>\n<p>BufferQueue \ud074\ub798\uc2a4\ub294 Android\uc758 \ubaa8\ub4e0 \uadf8\ub798\ud53d \uc911\uc2ec\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. BufferQueue\uc758 \uc5ed\ud560\uc740 \uac04\ub2e8\ud569\ub2c8\ub2e4. \uadf8\ub798\ud53d \ub370\uc774\ud130 \ubc84\ud37c\ub97c \uc0dd\uc131\ud558\ub294 \uc0dd\uc131\uc790(Producer)\ub85c\ubd80\ud130 \ud574\ub2f9 \ubc84\ud37c\ub97c \ucc98\ub9ac \ud558\uac70\ub098 \ud654\uba74\uc5d0 \ud45c\ud604\ud560 \uc218 \uc788\ub294 \uc18c\ube44\uc790(Consumer)\uc5d0 \uc5f0\uacb0\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc2dc\uc2a4\ud15c\uc744 \ud1b5\ud574 \uadf8\ub798\ud53d \ub370\uc774\ud130\uc758 \ubc84\ud37c\ub97c \uc774\ub3d9\uc2dc\ud0a4\ub294 \uac70\uc758 \ubaa8\ub4e0 \uac83\uc774 BufferQueue\uc5d0 \uc758\uc874\ud569\ub2c8\ub2e4.<\/p>\n<p>gralloc \uba54\ubaa8\ub9ac \ud560\ub2f9\uc790\ub294 \ubc84\ud37c \ud560\ub2f9\uc744 \uc218\ud589\ud558\uba70 \ubca4\ub354 \uace0\uc720\uc758 HAL(Hardware Abstractraction Layer) \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud1b5\ud574 \uad6c\ud604\ub429\ub2c8\ub2e4 (hardware \/ libhardware \/ include \/ hardware \/ gralloc.h \ucc38\uc870). alloc () \ud568\uc218\ub294 \uc608\uc0c1\ub418\ub294 \uc778\uc218\uc778 \uac00\ub85c, \uc138\ub85c, \ud53d\uc140 \ud615\uc2dd, \ud50c\ub808\uadf8 \ub4f1\uc744 \ucde8\ud569\ub2c8\ub2e4.<\/p>\n<h2>BufferQueue Producer \uc640 Consumer<\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"571\" height=\"217\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/02\/BufferQueue-Flow.png\" class=\"aligncenter wp-image-1026\" alt=\"\" title=\"BufferQueue Flow\" srcset=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/02\/BufferQueue-Flow.png 571w, https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/02\/BufferQueue-Flow-300x114.png 300w\" sizes=\"(max-width: 571px) 100vw, 571px\" \/><\/p>\n<p>\uae30\ubcf8 \uc0ac\uc6a9\ubc95\uc740 \uac04\ub2e8\ud569\ub2c8\ub2e4. \uc81c\uc791\uc790\ub294 \ub108\ube44, \ub192\uc774, \ud53d\uc140 \ud615\uc2dd \ubc0f \uc0ac\uc6a9 \ud50c\ub798\uadf8\ub97c \ud3ec\ud568\ud558\ub294 \uc77c\ub828\uc758 \ud2b9\uc131\uc744 \uc9c0\uc815\ud558\ub294 \uc0ac\uc6a9 \uac00\ub2a5\ud55c \ubc84\ud37c (dequeueBuffer ())\ub97c \uc694\uccad\ud569\ub2c8\ub2e4. \uc0dd\uc131\uc790\ub294 \ubc84\ud37c\ub97c \ucc44\uc6b0\uace0 \ud050\uc5d0 \ubc18\ud658\ud569\ub2c8\ub2e4 (queueBuffer ()). \ub098\uc911\uc5d0 Consumer\ub294 \ubc84\ud37c (acquireBuffer ())\ub97c \ud68d\ub4dd\ud558\uace0 \ubc84\ud37c \ub0b4\uc6a9\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. Consumer\uac00 \uc644\ub8cc\ub418\uba74 \ubc84\ud37c\ub97c \ub300\uae30\uc5f4\ub85c \ubc18\ud658\ud569\ub2c8\ub2e4 (releaseBuffer ()).<\/p>\n<p>\ucd5c\uadfc Android \uae30\uae30\ub294 \ub3d9\uae30\ud654 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc9c0\uc6d0\ud558\ubbc0\ub85c \uadf8\ub798\ud53d \ub370\uc774\ud130\ub97c \ube44\ub3d9\uae30 \uc801\uc73c\ub85c \uc870\uc791 \ud560 \uc218\uc788\ub294 \ud558\ub4dc\uc6e8\uc5b4 \uad6c\uc131 \uc694\uc18c\uc640 \uacb0\ud569 \ud560 \ub54c \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uba4b\uc9c4 \uc791\uc5c5\uc744 \uc218\ud589 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 Producer\ub294 \uc77c\ub828\uc758 OpenGL ES \ub4dc\ub85c\uc789 \uba85\ub839\uc744 \uc81c\ucd9c \ud55c \ub2e4\uc74c \ub80c\ub354\ub9c1\uc774 \uc644\ub8cc\ub418\uae30 \uc804\uc5d0 \ucd9c\ub825 \ubc84\ud37c\ub97c \ub300\uae30\uc5f4\uc5d0 \ucd94\uac00 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubc84\ud37c\uc5d0\ub294 \ub0b4\uc6a9 \uc900\ube44\uac00\ub418\uc5c8\uc744 \ub54c \uc2e0\ud638\ub97c \ubcf4\ub0b4\ub294 \ud39c\uc2a4(fence)\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ub450 \ubc88\uc9f8 \ud39c\uc2a4\uac00 free list\ub85c \ubc18\ud658 \ub420 \ub54c \ubc84\ud37c\ub97c \ub530\ub77c \uac00\uba70, Consumer\ub294 \ub0b4\uc6a9\uc774 \uc544\uc9c1 \uc0ac\uc6a9 \uc911\uc77c \ub54c \ubc84\ud37c\ub97c \ub9b4\ub9ac\uc988 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ubc29\ubc95\uc740 \ubc84\ud37c\uac00 \uc2dc\uc2a4\ud15c\uc744 \ud1b5\uacfc \ud560 \ub54c \ub300\uae30 \uc2dc\uac04\uacfc \ucc98\ub9ac\ub7c9\uc744 \ud5a5\uc0c1\uc2dc\ud0b5\ub2c8\ub2e4.<\/p>\n<p>\ud050\uc758 \ucd5c\ub300 \ud2b9\uc131 (\uc608 : \ubcf4\uc720 \ud560 \uc218\uc788\ub294 \ucd5c\ub300 \ubc84\ud37c \uc218)\uc740 Producer\uc640 Consumer\uac00 \uacf5\ub3d9\uc73c\ub85c \uacb0\uc815\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098 BufferQueue\ub294 \ud544\uc694\uc5d0 \ub530\ub77c \ubc84\ud37c\ub97c \ud560\ub2f9\ud569\ub2c8\ub2e4. \ud2b9\uc131\uc774 \ubcc0\uacbd\ub418\uc9c0 \uc54a\uc73c\uba74 \ubc84\ud37c\uac00 \uc720\uc9c0\ub429\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 Producer\uac00 \ub2e4\ub978 \ud06c\uae30\uc758 \ubc84\ud37c\ub97c \uc694\uccad\ud558\uba74 \uc774\uc804 \ubc84\ud37c\uac00 \ud574\uc81c\ub418\uace0 \ud544\uc694\uc5d0 \ub530\ub77c \uc0c8 \ubc84\ud37c\uac00 \ud560\ub2f9\ub429\ub2c8\ub2e4.<\/p>\n<p>Producer\uc640 Consumer\ub294 \uc11c\ub85c \ub2e4\ub978 \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \uc874\uc7ac \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud604\uc7ac Consumer\ub294 \ud56d\uc0c1 \ub370\uc774\ud130 \uad6c\uc870\ub97c \ub9cc\ub4e4\uace0 \uc18c\uc720\ud569\ub2c8\ub2e4. \uc774\uc804 \ubc84\uc804\uc758 Android\uc5d0\uc11c\ub294 Producer \uce21\ub9cc \ubc14\uc778\ub354 \ub418\uc5c8\uc5c8\uc2b5\ub2c8\ub2e4 (\uc989, Producer\ub294 \uc6d0\uaca9 \ud504\ub85c\uc138\uc2a4\uc5d0 \uc788\uc9c0\ub9cc Consumer\ub294 \ub300\uae30\uc5f4\uc774 \uc0dd\uc131 \ub41c \ud504\ub85c\uc138\uc2a4\uc5d0 \uc788\uc5b4\uc57c\ud588\uc2b5\ub2c8\ub2e4). Android 4.4 \uc774\uc0c1 \ubc84\uc804\uc740 \uc880 \ub354 \uc77c\ubc18\uc801\uc778 \uad6c\ud604\uc73c\ub85c \uc62e\uaca8\uc84c\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ubc84\ud37c \ub0b4\uc6a9\uc740 BufferQueue\uc5d0 \uc758\ud574 \uc808\ub300\ub85c \ubcf5\uc0ac\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4 (\ub9ce\uc740 \ub370\uc774\ud130\ub97c \uc774\ub3d9\ud558\ub294 \uac83\uc740 \ub9e4\uc6b0 \ube44\ud6a8\uc728\uc801\uc785\ub2c8\ub2e4). \ub300\uc2e0 \ubc84\ud37c\ub294 \ud56d\uc0c1 \ud578\ub4e4\uc5d0 \uc758\ud574 \uc804\ub2ec\ub429\ub2c8\ub2e4.<\/p>\n<h2>gralloc HAL usage flags<\/h2>\n<p>gralloc \ud560\ub2f9\uc790\ub294 \ub2e8\uc9c0 \ub124\uc774\ud2f0\ube0c \ud799\uc5d0 \uba54\ubaa8\ub9ac\ub97c \ud560\ub2f9\ud558\ub294 \ubc29\ubc95\uc774 \uc544\ub2d9\ub2c8\ub2e4. \uc77c\ubd80 \uc0c1\ud669\uc5d0\uc11c\ub294 \ud560\ub2f9 \ub41c \uba54\ubaa8\ub9ac\uac00 \uce90\uc2dc \uc77c\uad00\uc131\uc774 \uc5c6\uac70\ub098 \uc0ac\uc6a9\uc790 \uacf5\uac04\uc5d0\uc11c \uc644\uc804\ud788 \uc561\uc138\uc2a4 \ud560 \uc218\uc5c6\ub294 \uacbd\uc6b0\uac00 \uc788\uc2b5\ub2c8\ub2e4. \ud560\ub2f9\uc758 \uc131\uaca9\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uc18d\uc131\uc744 \ud3ec\ud568\ud558\ub294 \uc0ac\uc6a9 \ud50c\ub798\uadf8\uc5d0 \uc758\ud574 \uacb0\uc815\ub429\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\uc18c\ud504\ud2b8\uc6e8\uc5b4 (CPU)\uc5d0\uc11c \uba54\ubaa8\ub9ac\uc5d0 \uc561\uc138\uc2a4\ud558\ub294 \ube48\ub3c4<\/li>\n<li>\ud558\ub4dc\uc6e8\uc5b4 (GPU)\uc5d0\uc11c \uba54\ubaa8\ub9ac\uc5d0 \uc561\uc138\uc2a4\ud558\ub294 \ube48\ub3c4<\/li>\n<li>\uba54\ubaa8\ub9ac\uac00 OpenGL ES (GLES) \ud14d\uc2a4\ucc98\ub85c \uc0ac\uc6a9\ub418\ub294\uc9c0 \uc5ec\ubd80<\/li>\n<li>\ube44\ub514\uc624 \uc5d4\ucf54\ub354\uc5d0\uc11c \uba54\ubaa8\ub9ac\ub97c \uc0ac\uc6a9\ud560 \uc9c0 \uc5ec\ubd80<\/li>\n<\/ul>\n<p>\uc608\ub97c \ub4e4\uc5b4, \ud615\uc2dd\uc774 RGBA 8888 \ud53d\uc140\uc744 \uc9c0\uc815\ud558\uace0 \ubc84\ud37c\uac00 \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc5d0\uc11c \uc561\uc138\uc2a4 \ud560 \uac83\uc774\ub77c\ub294 \uac83\uc744 \ub098\ud0c0\ub0b4\uba74 (\uc989, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc774 \ud53d\uc140\uc744 \uc9c1\uc811 \ub2e4\ub8ec\ub2e4\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4) \ud560\ub2f9\uc790\ub294 R-G-B-A \uc21c\uc11c\ub85c \ud53d\uc140 \ub2f9 4 \ubc14\uc774\ud2b8\uc758 \ubc84\ud37c\ub97c \ub9cc\ub4e4\uc5b4\uc57c\ud569\ub2c8\ub2e4. \ub300\uc2e0\uc5d0 \ubc84\ud37c\uac00 \ud558\ub4dc\uc6e8\uc5b4\uc640 GLES \ud14d\uc2a4\uccd0\ub85c\ub9cc \uc561\uc138\uc2a4\ub41c\ub2e4\uba74, \ud560\ub2f9\uc790\ub294 GLES \ub4dc\ub77c\uc774\ubc84\uac00 \uc6d0\ud558\ub294 \uac83, BGRA \uc815\ub82c, \ube44\uc120\ud615 swizzled \ub808\uc774\uc544\uc6c3, \ub2e4\ub978 \uc0c9 \ud3ec\ub9f7 \ub4f1\uc744 \ud560 \uc218 \uc788\ub2e4\uace0 \ub9d0\ud569\ub2c8\ub2e4. \uae30\ubcf8 \ud615\uc2dd\uc740 \uc131\ub2a5\uc744 \ud5a5\uc0c1\uc2dc\ud0ac \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc77c\ubd80 \uac12\uc740 \ud2b9\uc815 \ud50c\ub7ab\ud3fc\uc5d0\uc11c \uacb0\ud569 \ub420 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \ube44\ub514\uc624 \uc5d4\ucf54\ub354 \ud50c\ub798\uadf8\uc5d0 YUV \ud53d\uc140\uc774 \ud544\uc694\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc561\uc138\uc2a4\ub97c \ucd94\uac00\ud558\uace0 RGBA 8888\uc744 \uc9c0\uc815\ud558\uba74 \uc2e4\ud328\ud569\ub2c8\ub2e4.<\/p>\n<p>gralloc \ud560\ub2f9 \uc790\uc5d0 \uc758\ud574 \ubc18\ud658 \ub41c \ud578\ub4e4\uc740 Binder\ub97c \ud1b5\ud574 \ud504\ub85c\uc138\uc2a4\uac04\uc5d0 \uc804\ub2ec \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>systrace\ub97c \ud1b5\ud55c BufferQueue \ucd94\uc801<\/h2>\n<p>\uadf8\ub798\ud53d \ubc84\ud37c\uac00 \uc5b4\ub5bb\uac8c \uc6c0\uc9c1\uc774\ub294\uc9c0\ub97c \uc774\ud574\ud558\ub824\uba74 systrace\ub97c \uc0ac\uc6a9\ud558\uc2ed\uc2dc\uc624. \uad00\ub828 \uc2dc\uc2a4\ud15c \ud504\ub808\uc784 \uc6cc\ud06c \ucf54\ub4dc\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c \uc2dc\uc2a4\ud15c \uc218\uc900\uc758 \uadf8\ub798\ud53d \ucf54\ub4dc\ub3c4 \uc798 \uad6c\ud604\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>systrace\ub97c \ud6a8\uacfc\uc801\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc124\uba85\uc740 \ub2e4\uc18c \ubb38\uc11c\uac00 \uae41\ub2c8\ub2e4. gfx, view \ubc0f sched \ud0dc\uadf8\ub97c \ud65c\uc131\ud654\ud558\uc5ec \uc2dc\uc791\ud558\uc2ed\uc2dc\uc624. \ub610\ud55c \ucd94\uc801\uc5d0 BufferQueues\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4.\u00a0 <a href=\"https:\/\/github.com\/google\/grafika\">GRAFIKA<\/a>\uc758 &#8220;Play video (SurfaceView)&#8221;\uc744 \uc2e4\ud589\ud558\ub294 \ub3d9\uc548 \ucd94\uc801\uc744 \ud560 \uacbd\uc6b0, SurfaceView \ud45c\uc2dc\ub41c \ud589\uc740 \uc8fc\uc5b4\uc9c4 \uc2dc\uac04\uc5d0 \ub300\uae30\ud558\uace0 \uc5bc\ub9c8\ub098 \ub9ce\uc740 \ubc84\ud37c\ub97c \uc54c\ub824\uc90d\ub2c8\ub2e4.<\/p>\n<p>\uc571\uc774 \ud65c\uc131\ud654\ub418\uc5b4\uc788\ub294 \ub3d9\uc548 \uac12\uc774 \uc99d\uac00\ud558\uc5ec MediaCodec \ub514\ucf54\ub354\uc5d0 \uc758\ud574 \ud504\ub808\uc784 \ub80c\ub354\ub9c1\uc774 \ud2b8\ub9ac\uac70\ub418\uace0 SurfaceFlinger\uac00 \uc791\uc5c5\uc744 \uc218\ud589\ud558\uba74\uc11c \ubc84\ud37c\ub97c \uc18c\ube44\ud558\uba74\uc11c \uac12\uc774 \uac10\uc18c\ud569\ub2c8\ub2e4. 30fps\ub85c \ube44\ub514\uc624\ub97c \ubcf4\uc5ec\uc904 \ub54c ~ 60fps \ub514\uc2a4\ud50c\ub808\uc774\uac00 \uc18c\uc2a4\ub97c \uc27d\uac8c \ub530\ub77c\uac08 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 \ud050\uc758 \uac12\uc740 0\uc5d0\uc11c 1\uae4c\uc9c0 \ub2e4\uc591\ud569\ub2c8\ub2e4. (SurfaceFlinger\ub294 \ucd08\ub2f9 60 \ud68c\uac00 \uc544\ub2c8\ub77c \uc791\uc5c5\uc774 \ub05d\ub09c \ud6c4\uc5d0 \ub9cc \uae68\uc5b4\ub0a9\ub2c8\ub2e4. \uc2dc\uc2a4\ud15c\uc740 \uc791\uc5c5\uc744\ud558\uc9c0 \uc54a\uc73c\ub824 \uace0\ud558\uba70 \ud654\uba74\uc744 \uc5c5\ub370\uc774\ud2b8\ud558\ub294 \uac83\uc774 \uc5c6\uc73c\uba74 VSYNC\ub97c \uc644\uc804\ud788 \ube44\ud65c\uc131\ud654\ud569\ub2c8\ub2e4.)<\/p>\n<p>Grafika\uc758 &#8220;Play video (TextureView)&#8221;\ub85c \uc804\ud658\ud558\uace0 \uc0c8\ub85c\uc6b4 \ucd94\uc801\uc744 \ub9cc\ub4e4\uba74, com.android.grafika \/ com.android.grafika.PlayMovieActivity\ub77c\ub294 \ud589\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4. \uc774\uac83\uc774 \ubc14\ub85c \ub610 \ub2e4\ub978 BufferQueue \uc778 \uba54\uc778 UI \ub808\uc774\uc5b4\uc785\ub2c8\ub2e4. TextureView\ub294 (\ubcc4\ub3c4\uc758 \ub808\uc774\uc5b4\uac00 \uc544\ub2cc) UI \ub808\uc774\uc5b4\ub85c \ub80c\ub354\ub9c1\ub418\uae30 \ub54c\ubb38\uc5d0 \uc5ec\uae30\uc5d0 \ubaa8\ub4e0 \ube44\ub514\uc624 \uad6c\ub3d9 \uc5c5\ub370\uc774\ud2b8\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4.<\/p>\n<p>systrace \ub3c4\uad6c\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/developer.android.com\/studio\/profile\/systrace-commandline.html\">Systrace \uc124\uba85\uc11c<\/a>\ub97c \ucc38\uc870\ud558\uc2ed\uc2dc\uc624.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>BufferQueue\uc640 gralloc \uc548\ub4dc\ub85c\uc774\ub4dc \uadf8\ub798\ud53d \uc2dc\uc2a4\ud15c\uc744 \uc774\ud574\ud558\ub294 \uac83\uc740 BufferQueue\uc640 gralloc HAL\ub85c \uc2dc\uc791\ub429\ub2c8\ub2e4. BufferQueue \ud074\ub798\uc2a4\ub294 Android\uc758 \ubaa8\ub4e0 \uadf8\ub798\ud53d \uc911\uc2ec\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. BufferQueue\uc758 \uc5ed\ud560\uc740 \uac04\ub2e8\ud569\ub2c8\ub2e4. \uadf8\ub798\ud53d \ub370\uc774\ud130 \ubc84\ud37c\ub97c \uc0dd\uc131\ud558\ub294 \uc0dd\uc131\uc790(Producer)\ub85c\ubd80\ud130 \ud574\ub2f9 \ubc84\ud37c\ub97c \ucc98\ub9ac \ud558\uac70\ub098 \ud654\uba74\uc5d0 \ud45c\ud604\ud560 \uc218 \uc788\ub294 \uc18c\ube44\uc790(Consumer)\uc5d0 \uc5f0\uacb0\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc2dc\uc2a4\ud15c\uc744 \ud1b5\ud574 \uadf8\ub798\ud53d \ub370\uc774\ud130\uc758 \ubc84\ud37c\ub97c \uc774\ub3d9\uc2dc\ud0a4\ub294 \uac70\uc758 \ubaa8\ub4e0 \uac83\uc774 BufferQueue\uc5d0 \uc758\uc874\ud569\ub2c8\ub2e4. gralloc \uba54\ubaa8\ub9ac [&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\/1025"}],"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=1025"}],"version-history":[{"count":1,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1025\/revisions"}],"predecessor-version":[{"id":1027,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1025\/revisions\/1027"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1025"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1025"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}