diff --git a/Libraries/LibMedia/CMakeLists.txt b/Libraries/LibMedia/CMakeLists.txt index 0fb840e4e26..77d4569cb75 100644 --- a/Libraries/LibMedia/CMakeLists.txt +++ b/Libraries/LibMedia/CMakeLists.txt @@ -1,6 +1,6 @@ include(audio) -if (NOT ANDROID AND NOT WIN32) +if (NOT ANDROID) include(ffmpeg) endif() @@ -20,7 +20,7 @@ set(SOURCES serenity_lib(LibMedia media) target_link_libraries(LibMedia PRIVATE LibCore LibCrypto LibRIFF LibIPC LibGfx LibThreading LibUnicode) -if (NOT ANDROID AND NOT WIN32) +if (NOT ANDROID) target_sources(LibMedia PRIVATE Audio/FFmpegLoader.cpp FFmpeg/FFmpegVideoDecoder.cpp diff --git a/Libraries/LibMedia/VideoFrame.cpp b/Libraries/LibMedia/VideoFrame.cpp index c27a81c42a0..bca87cbf4d1 100644 --- a/Libraries/LibMedia/VideoFrame.cpp +++ b/Libraries/LibMedia/VideoFrame.cpp @@ -10,6 +10,13 @@ #include "VideoFrame.h" +#ifdef AK_OS_WINDOWS +# define aligned_alloc(alignment, size) _aligned_malloc(size, alignment) +# define aligned_free _aligned_free +#else +# define aligned_free free +#endif + namespace Media { ErrorOr> SubsampledYUVFrame::try_create( @@ -23,10 +30,9 @@ ErrorOr> SubsampledYUVFrame::try_create( size_t alignment_size = max(bit_depth > 8 ? sizeof(u16) : sizeof(u8), sizeof(void*)); auto alloc_buffer = [&](size_t size) -> ErrorOr { - void* buffer = nullptr; - auto result = posix_memalign(&buffer, alignment_size, size); - if (result != 0) - return Error::from_errno(result); + void* buffer = aligned_alloc(alignment_size, round_up_to_power_of_two(size, alignment_size)); + if (!buffer) + return Error::from_errno(ENOMEM); return reinterpret_cast(buffer); }; @@ -64,9 +70,9 @@ ErrorOr> SubsampledYUVFrame::try_create_from_d SubsampledYUVFrame::~SubsampledYUVFrame() { - free(m_y_buffer); - free(m_u_buffer); - free(m_v_buffer); + aligned_free(m_y_buffer); + aligned_free(m_u_buffer); + aligned_free(m_v_buffer); } template