OpenCVSharp Frame Buffer Pooling

OpenCVSharp을 사용해 비디오의 매 프레임을 가져오는 기능을 개발했다. private static void ReadEachFrame_Normal() { string path = "path/top/your/video.mp4"; VideoCapture capture = new VideoCapture(path); capture.Open(path); using Mat frame = new Mat(); while (capture.Read(frame)) { byte[] bytes = frame.ToBytes(); } } OpenCVSharp 라이브러리에는 내가 아는한 쉽게 프레임 버퍼를 입력한 버퍼로 가져오거나, 풀링이 적용된 형태로 가져올 수 있는 방법이 없다. Mat.ToBytes()로 새로 생성된 byte[] 객체를 반환받는 방법이 가장 일반적으로 보였다. 내가 사용하는 케이스에선 동시에 여러 비디오의 프레임을 가져오다보니...

December 28, 2023 · 2 min · 356 words · penspanic

C# 9.0 신기능 프리뷰

C# 9.0 써보기전 주관적 프리뷰 이번에 릴리즈된 C# 9.0의 기능을 살펴봤다. MS Docs 링크에 워낙 잘 설명돼있어서 기능에 대한 설명 자체는 자세히 다루지 않겠다. record type 새로운 Reference Type이 추가되었다. 몰랐는데, class 만 reference type 인줄 알았는데 익명 타입도 reference type에 포함된다고 한다. 어차피 C# 컴파일러가 익명 타입을 class로 변환할 것 같지만.. 역시 그렇다. 내부적으론 Tuple<,> 등과 비슷하게 구현됐다고 보면 될 것 같음. 내가 생각하는 도입 사유 기존의 class(reference type)으로 immutable type을 구현하기 좀 까다로웠다....

December 7, 2020 · 4 min · 661 words · penspanic

C# lock의 내부 구현

C# 프로그래밍을 하다보면 자연스레 멀티쓰레딩 환경에서 자원 획득 제한이 필요한 경우 lock을 사용했었다. 이 lock 키워드 및 블럭을 사용했을 때 내부적으로 어떻게 동작되는지 궁금해서 알아보았다. lock 문 lock statement(lock 문) Microsoft Docs lock은 공식 문서에 문이라고 한다. Language Reference Statement Keywords lock Statement 위와 같은 구조로 Document에 구성되어 있다. 이 것의 동작 방식을 까보려면 역시 Decompile. private void DoAdd(int value) { lock (_collection) { _collection.Add(value); } } 위 코드를 Decompile시 아래의 il로 해석된다....

October 10, 2020 · 2 min · 424 words · penspanic

개발중인 프로젝트 구성안 - 4

근래엔 Code 생성을 적극적으로 활용하고 있다. 반복 작업 최소화, 실수 방지 측면에서 효율적이라 생각한다. 그 부분들에 대해 소개하려 한다. MessagePack Code Generation MessagePack은 AOT Code Generation을 지원한다. Unity에서 MessagePack을 사용하기 때문에 AOT로 직접 생성된 Formatter를 사용한 결과가 더 좋기 때문에 AOT Code Generation을 사용한다. (mobile platform에선 il emit을 허용하지 않음 Unity documentation) 측정 결과가 다른 것을 경험하고 server에도 AOT 생성된 Formatter를 사용하는데.. 정확한 결과 비교는 해봐야 알 듯. 기억에 남는건 기본 MessagePack 의 Serialize 결과와 AOT Generated Formatter를 사용했을 때 결과가 달랐다....

October 5, 2020 · 3 min · 528 words · penspanic

개발중인 프로젝트 구성안 - 3

세번째 포스트는 프로젝트에서 사용중인 Library와 Package들에 대해 소개하려 한다. MessagePack GitHub 프로젝트 시작시 Serialization Library를 어떤 것을 사용할지 꽤 고민했었다. 이전 프로젝트에선 client <-> server 통신시 Protobuf를 사용했었는데, 이게 꽤나 불편했었다. -_- IDL을 수정하고, Compile하고, Compile된 결과물을 각각 project에 복사하고. (자동화 스크립트가 있다고 하더라도 꽤나 귀찮았다.) 이번 프로젝트에선 모든 Language를 C#으로 통일했기에, IDL을 사용할 필요가 없어져서 Protobuf은 후보 선상에서 제외. 또한 output에 meta-data 없이 payload 만 필요하기 때문에, 그 면에서도 MessagePack이 적합하다고 판단했다....

October 4, 2020 · 3 min · 484 words · penspanic