#include "livekit/video_frame_buffer.h"
#import <CoreVideo/CoreVideo.h>
#import <sdk/objc/components/video_frame_buffer/RTCCVPixelBuffer.h>
#include "sdk/objc/native/api/video_frame_buffer.h"
namespace livekit_ffi {
std::unique_ptr<VideoFrameBuffer> new_native_buffer_from_platform_image_buffer(
CVPixelBufferRef pixelBuffer
) {
RTCCVPixelBuffer *buffer = [[RTCCVPixelBuffer alloc] initWithPixelBuffer:pixelBuffer];
webrtc::scoped_refptr<webrtc::VideoFrameBuffer> frame_buffer = webrtc::ObjCToNativeVideoFrameBuffer(buffer);
[buffer release];
CVPixelBufferRelease(pixelBuffer);
return std::make_unique<VideoFrameBuffer>(frame_buffer);
}
CVPixelBufferRef native_buffer_to_platform_image_buffer(
const std::unique_ptr<VideoFrameBuffer> &buffer
) {
id<RTC_OBJC_TYPE(RTCVideoFrameBuffer)> rtc_pixel_buffer = webrtc::NativeToObjCVideoFrameBuffer(buffer->get());
if ([rtc_pixel_buffer isKindOfClass:[RTCCVPixelBuffer class]]) {
RTCCVPixelBuffer *cv_pixel_buffer = (RTCCVPixelBuffer *)rtc_pixel_buffer;
return [cv_pixel_buffer pixelBuffer];
} else {
return nullptr;
}
}
}