Android에서 애플리케이션을 실행하여 생성된 프로세스는 메인 스레드를 가지게 됩니다. 그리고 일반적으로 이 스레드는 UI 스레드로서, Android UI와 관련된 구성 요소(android.view, android.widget 패키지)가 작동하는 스레드입니다. 즉 이 스레드에서 UI의 상태를 변경하고, 사용자의 입력과 같은 이벤트를 받습니다. 따라서...
[CS] 비동기 프로그래밍 (2) - 리눅스의 프로세스, 스레드, 태스크
Android의 스레드 사용 방법을 알기 전에, 리눅스의 스레드와 프로세스는 어떤 원리로 작동되는 것인지, 코어가 여러 개인 CPU에서 실제로 여러 프로세스나 스레드가 병렬적으로 작동하는지 알고 싶어 이 포스트로 정리하게 되었습니다. 운영체제라는 과목에서 일반적으로 배우는 프로세스, 스레드의 개념과 리눅스에서의 프로세스, 스레드는 유사하지만 약간의 차...
[CS] 비동기 프로그래밍 (1) - 캐시 메모리
비동기 프로그래밍에 대해 공부를 하다보니 굉장히 멀리 오게 되었고, 그래서 하나씩 정리를 하려고 합니다. bottom-up 방식으로 작성하여 첫 게시글인 캐시 메모리에서부터 가장 고단위인 코루틴까지 작성할 예정입니다. 캐시 메모리 캐시 메모리에 대해 모든 내용을 작성하기 보다는, 비동기 프로그래밍을 이해하는 것에 필요한 내용 위주로 정리하였습니...
[Android] 동영상에 그림 그리기 (10) - 개선 리스트
이번 포스트에서는 boomerang 앱을 완성한 이후 수정, 개선한 부분들에 대해 작성하겠습니다. 이 포스트의 내용은 코드의 수정사항이 생기면 계속 추가하겠습니다. Vertex Buffer Object 지난 포스트에서 Vertex Buffer에 대해 작성하면서, java.nio 패키지의 ByteBuffer를 사용하는 방법(Client-side bu...
[Android] 동영상에 그림 그리기 (9) - SurfaceView로 화면 표시
지난 포스트에서는 MediaCodec에서 생성한 Surface에 비디오 버퍼를 전달하여 동영상을 저장하였습니다. 이번 포스트에서는 동영상을 사용자에게 표시하는 방법에 대해 작성하겠습니다. SurfaceView 사용자는 스스로가 그리고 있는 그림을 계속 확인하여야 하기 때문에, 화면에 표시될 것은 원본 동영상이 아닌 그림이 그려진 동영상의 각 이미지...
[Android] 동영상에 그림 그리기 (8) - BufferQueue, WindowManager, SurfaceFlinger
이전 포스트들에서 SurfaceTexture, Surface, MediaCodec 등 미디어, 그래픽에 쓰이는 API들에 대해 다루었습니다.. 이러한 API들의 역할과 사용 방법에 대해서는 다루었지만, 작동 방식에 대해 조금 더 깊이 알아보고 싶어서 Google I/O ‘18의 Drawn out: How Android renders 라는 주제의 발표와...
[Android] 동영상에 그림 그리기 (7) - MediaCodec으로 인코딩
이번 포스트에서는 MediaCodec과 MediaMuxer를 사용하여 렌더링된 그래픽들을 동영상으로 합성하는 내용에 대해 작성하도록 하겠습니다. MediaCodec MediaCodec은 인코딩, 디코딩 기능을 하는 클래스입니다. MediaCodec 클래스에서 사용하는 데이터는 ByteBuffer로도 가능하지만, 비디오 데이터는 지난 포스트들에서 ...
[Android] 동영상에 그림 그리기 (6) - Framebuffer 전달 및 복사
OpenGL ES의 렌더링 과정을 모두 마치면, EGLSurface에 Framebuffer가 들어가게 됩니다. 그런데 이 앱에서 Framebuffer가 필요한 Surface는 두 곳이 있습니다. 하나는 화면에 표시하기 위한 SurfaceView이고, 다른 하나는 동영상 저장을 위한 MediaCodec 입니다. 이 과정에서 제가 구현한 방법과 각 방법에...
[Android] 동영상에 그림 그리기 (5) - OpenGL ES의 Shader, 그림 그리기
렌더링을 위해서는 Shader가 필요합니다. 이번 포스트에서는 Shader에 대해 작성하도록 하겠습니다. Shader 렌더링 파이프라인에서 Vertex Shader와 Fragment Shader는 필수적으로 사용자가 직접 구현해야 하는 부분입니다. GLSL이라는 언어를 사용하여 구현하여야 합니다. Vertex Shader 입력되는 점마다 하나씩...
[Android] 동영상에 그림 그리기 (4) - OpenGL ES의 Texture
이제 그림을 그릴 시간입니다. Android에서 OpenGL ES 렌더링 과정, 특히 SurfaceTexture를 사용하여 이미지를 텍스처로 사용하는 과정에 대해 정리하겠습니다. SurfaceTexture Texture 초기화 지난 글에서 onFrameAvailableListener를 통해 새로운 이미지 프레임을 받은 것을 알 수 있다고 하였습니...