내 질문에는 두 가지 측면이 있습니다. libav, ffmpeg, 3.1을 사용하고 있습니다.av_frame_get_buffer 후 정리
첫째, 당신은 어떻게 적절하게 그 버퍼 av_frame_get_buffer
할당 된 프레임을 처리합니까? 예컨대 :
AVFrame *frame = av_frame_alloc();
frame->width = ...;
frame->height = ...;
frame->format = ...;
av_frame_get_buffer(frame, ...);
어떤 버퍼가 av_frame_free(frame)
에 대한 호출을 넘어, 수동으로 해제해야합니까?documentation은 특별한 것은 언급하지 않지만 내 경험상 ffmpeg 문서는 종종 중요한 세부 사항을 생략하거나 명백한 장소에서 멀리 떨어진 곳에 숨 깁니다. 나는 av_frame_free
과 av_frame_unref
에 대한 코드를 살펴 보았지만 꽤 많은 부분이 나뉘어져 있었고 모든 것이 덮여 있는지를 판단 할 수 없었다.
둘째, av_frame_free
요구 사항을 넘어 경우 뭔가가 수행되어야하고 어떤 캐치 - 모든 당신의 데이터가 할당 된 방법를 모르는 경우 프레임을 청소하는 방법은? 예를 들어, someBuffer
가정 이미 적절한 크기로 할당 :
AVFrame *frame2 = av_frame_alloc();
frame2->width = ...;
frame2->height = ...;
frame2->format = ...;
av_image_fill_arrays(frame2->data, frame2->linesize, someBuffer,
frame2->format, frame2->width, frame2->height, 1);
동일한 코드를 사용하여 위의 예에서 모두 frame
및 frame2
을 확보 할 수있는 방법이 있나요? 즉, frame
이고 데이터는 해제해야하고 frame2
은 해제해야하지만 libav가 할당하지 않았으므로 someBuffer
이 아니라 해제해야합니다.