전체 글113 `AVCodecParameters` 이해하기 - `probe.cpp`로 살펴보는 비디오·오디오 스트림 정보와 시간 단위의 함정 💡 한 줄 요약이 글에서는 AVCodecParameters가 미디어 타입에 따라 읽어야 할 필드가 달라진다는 점과, AVStream.time_base와 AVFormatContext.duration이 서로 다른 시간 단위를 쓰는 이유를 probe.cpp의 print_stream, print_format 코드를 바탕으로 설명한다.🚨 1. 문제 상황과 대상 독자AVCodecParameters를 다루다 보면 보통 두 지점에서 많이 헷갈린다.비디오 스트림과 오디오 스트림이 서로 다른 필드를 쓰는데, 타입을 확인하지 않고 접근했다가 의미 없는 값을 읽는 경우AVStream.duration과 AVFormatContext.duration을 같은 단위로 생각해 시간 계산이 틀어지는 경우⚠️ 자주 부딪히는 문제FFmp.. 2026. 9. 23. FFmpeg `AVFormatContext`, RAII로 감싸야 하는 이유 - `avformat_open_input`과 `avformat_find_stream_info` 제대로 이해하기 💡 한 줄 요약이 글에서는 avformat_open_input을 C API 그대로 사용할 때 생기기 쉬운 double free와 메모리 누수 문제를, RAII로 소유권을 관리해 해결하는 방법을 설명한다.이어서 avformat_find_stream_info의 비용이 컨테이너마다 왜 다른지도 함께 정리한다.🚨 1. 문제 상황FFmpeg의 AVFormatContext는 컨테이너를 열고 스트림 정보를 담는 핵심 구조체다.문제는 이 구조체의 수명 관리 방식이 생각보다 직관적이지 않다는 점이다.AVFormatContext *raw = nullptr;int ret = avformat_open_input(&raw, path, nullptr, nullptr);if (ret avformat_open_input이 실패.. 2026. 9. 23. Asio strand 완전 정복: 멀티스레드 동시성 직렬화와 CUDA Stream 비교 분석 💡 한 줄 요약이 글은 멀티스레드 io_context::run() 환경에서 발생하는 공유 자원 race condition 문제를 strand의 락-프리 직렬화 메커니즘을 통해 어떻게 해결하는지 다루고, 유사 개념인 CUDA Stream과 비교해 그 원리를 더 깊이 파고든다. 🚨 1. 문제 상황 및 대상 독자현상: io_context::run()을 여러 스레드에서 동시에 호출하면 처리량은 늘어나지만, 여러 핸들러가 공유 자원(카운터, 버퍼, 상태 머신 등)에 동시에 접근하면서 race condition이 발생한다. 뮤텍스로 막을 수는 있지만, 비동기 콜백 안에서 락을 오래 들고 있다가 다른 비동기 작업을 기다리게 되면 데드락 위험이 생기고, 락 경합 자체가 비동기 모델의 장점을 갉아먹는다.대상 독자: .. 2026. 9. 22. C++20 코루틴 + Asio 비동기 기초: io_context부터 concurrent_channel, executor 표기까지 💡 한 줄 요약이 글은 C++20 코루틴으로 Asio 비동기 파이프라인을 처음 짤 때 발생하는 io_context/awaitable/co_spawn/concurrent_channel이 어떻게 맞물리는지 감이 안 잡히는 문제를 각 요소의 역할과 실행 시점 분리를 통해 생산자-소비자 예제 코드로 해결하는 과정을 다룬다.🚨 1. 문제 상황 및 대상 독자현상: C++20 코루틴 문법(co_await, co_return)은 익숙한데, Asio로 넘어오면 io_context, asio::awaitable, asio::co_spawn, asio::experimental::concurrent_channel이 각각 뭘 담당하는지, 그리고 이 넷이 실행 시점에 어떤 순서로 맞물리는지 감이 안 잡혀서 막히는 경우가 많다.. 2026. 9. 22. SDL2 오디오 재생 기초: want/have 협상 구조와 SDL_QueueAudio로 사인파 큐잉하기 💡 한 줄 요약SDL_OpenAudioDevice가 want/have 두 스펙을 나눠서 다루는 이유를 협상(negotiation) 구조로 정리하고, have 값을 기준으로 사인파 버퍼를 계산해 SDL_QueueAudio로 재생하는 흐름을 정리한다.🚨 1. 문제 상황SDL2로 오디오를 재생하려고 SDL_OpenAudioDevice를 호출하면 인자로 want와 have(예제 변수명 기준) 두 개의 SDL_AudioSpec을 넘기게 된다.SDL_AudioSpec want{}, have{};want.freq = 48000; want.format = AUDIO_F32SYS; want.channels = 2; want.samples = 1024;SDL_AudioDeviceID dev = SDL_OpenAudio.. 2026. 9. 21. 이전 1 2 3 4 ··· 23 다음