AVFrame *frame = av_frame_alloc();int ret = av_image_alloc(frame->data, frame->linesize, 1920, 1080, AV_PIX_FMT_RGBA, 32);
av_frame_alloc() 에서는 AVFrame 크기의 메모리를 할당하고 기본값을 설정한다. 실제 sizeof(AVFrame) 을 통해서 크기를 알아보면 384 바이트이다.
av_image_alloc() 에서는 frame->data 가 가리키는 메모리 배열에 format 에 따라 영상 데이터 크기만큼 메모리를 할당한다. AV_PIX_FMT_RGBA 의 경우에는 data 의 메모리 배열에서 하나만 사용한다. 한 라인의 데이터 크기값은 linesize 배열에 data 메모리 배열에 매핑하여 저장된다. 현재 설정대로라면, 한 라인에 1920 pixel 에, RGBA 형태로 한 pixel 당 4 바이트를 차지하므로, 1920 x 4 = 7680 이 linesize[0] 에 저장될 것이다.
av_frame_free(&frame);
이 함수는 av_frame_alloc() 으로 할당된 부분만 해제 및 정리를 해준다. frame->data 를 같이 해제해주면 좋겠지만, 그렇지 않다. 해주지 않을 경우에는 당연히 memory leak이 발생한다.
av_freep(&frame->data[0]);
av_frame_free() 를 호출하기 전에 data 메모리 배열부터 해제해줘야 한다. av_frame_free() 는 data 메모리 배열을 해제하는 작업을 하지 않는다.
'잡(job)기술 > ffmpeg 라이브러리' 카테고리의 다른 글
명령 라인 처리 옮기기 (0) | 2022.04.01 |
---|---|
remuxing.c 를 c++로 wrapping하기 (0) | 2022.03.30 |
remuxing.c 빌드하기 (0) | 2022.03.28 |
Audio sample과 frame (0) | 2018.03.13 |
Live555 library를 이용한 디버깅 환경 구축 (0) | 2017.01.31 |