summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Zern <jzern@google.com>2024-05-06 15:20:36 -0700
committerJames Zern <jzern@google.com>2024-05-06 15:22:25 -0700
commit75cff0674ecef25fb5457d6fdfa14ffeada19451 (patch)
tree7df7a217e6f78a2f184d0f83316e3b26116f1eae
parent2596d9b386b61c2cd1ef90aebc3514f41b268ddf (diff)
downloadlibwebm-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.cc8
-rw-r--r--mkvparser/mkvreader.cc8
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);