diff options
author | James Zern <jzern@google.com> | 2024-05-06 15:20:36 -0700 |
---|---|---|
committer | James Zern <jzern@google.com> | 2024-05-06 15:22:25 -0700 |
commit | 75cff0674ecef25fb5457d6fdfa14ffeada19451 (patch) | |
tree | 7df7a217e6f78a2f184d0f83316e3b26116f1eae | |
parent | 2596d9b386b61c2cd1ef90aebc3514f41b268ddf (diff) | |
download | libwebm-upstream-main.tar.gz |
mkv{reader,writer}: port f{seek,tell}o fix from libvpxupstream-main
https://chromium-review.googlesource.com/c/webm/libvpx/+/5074786
bf0755418 Add the needed Android API level predicates.
Fixes armeabi-v7a Android builds targeting android api < 24.
Test: -DCMAKE_TOOLCHAIN_FILE=<ndk>/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=android-2{1,4} \
-DCMAKE_CXX_FLAGS='-D_FILE_OFFSET_BITS=64 -D_LIBCPP_HAS_NO_OFF_T_FUNCTIONS'
Bug: aomedia:3561
Change-Id: I30f2f204e8174222de387dc14c3c88c2e5e36741
-rw-r--r-- | mkvmuxer/mkvwriter.cc | 8 | ||||
-rw-r--r-- | mkvparser/mkvreader.cc | 8 |
2 files changed, 14 insertions, 2 deletions
diff --git a/mkvmuxer/mkvwriter.cc b/mkvmuxer/mkvwriter.cc index d668384..9b714a5 100644 --- a/mkvmuxer/mkvwriter.cc +++ b/mkvmuxer/mkvwriter.cc @@ -80,8 +80,14 @@ int32 MkvWriter::Position(int64 position) { return _fseeki64(file_, position, SEEK_SET); #elif defined(_WIN32) return fseeko64(file_, static_cast<off_t>(position), SEEK_SET); -#else +#elif !(defined(__ANDROID__) && __ANDROID_API__ < 24 && !defined(__LP64__) && \ + defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) + // POSIX.1 has fseeko and ftello. fseeko and ftello are not available before + // Android API level 24. See + // https://android.googlesource.com/platform/bionic/+/main/docs/32-bit-abi.md return fseeko(file_, static_cast<off_t>(position), SEEK_SET); +#else + return fseek(file_, static_cast<long>(position), SEEK_SET); #endif } diff --git a/mkvparser/mkvreader.cc b/mkvparser/mkvreader.cc index 9d19c1b..4672604 100644 --- a/mkvparser/mkvreader.cc +++ b/mkvparser/mkvreader.cc @@ -120,8 +120,14 @@ int MkvReader::Read(long long offset, long len, unsigned char* buffer) { return -1; // error #elif defined(_WIN32) fseeko64(m_file, static_cast<off_t>(offset), SEEK_SET); -#else +#elif !(defined(__ANDROID__) && __ANDROID_API__ < 24 && !defined(__LP64__) && \ + defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) + // POSIX.1 has fseeko and ftello. fseeko and ftello are not available before + // Android API level 24. See + // https://android.googlesource.com/platform/bionic/+/main/docs/32-bit-abi.md fseeko(m_file, static_cast<off_t>(offset), SEEK_SET); +#else + fseek(m_file, static_cast<long>(offset), SEEK_SET); #endif const size_t size = fread(buffer, 1, len, m_file); |