libhevc-mirror/tests/common/BitsFile.cpp
Harish Mahendrakar 4a8c3163e3
Some checks failed
CMake / build (cmake, aarch64-linux-gnu-gcc, -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/aarch64_toolchain.cmake, aarch64-linux-gnu-g++, ubuntu-latest-cross-aarch64-cmake, ubuntu-latest) (push) Has been cancelled
CMake / build (cmake, arm-linux-gnueabihf-gcc, -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/aarch32_toolchain.cmake, arm-linux-gnueabihf-g++, ubuntu-latest-cross-aarch32-cmake, ubuntu-latest) (push) Has been cancelled
CMake / build (cmake, clang, , clang++, macos-latest-clang-cmake, macos-latest) (push) Has been cancelled
CMake / build (cmake, clang, , clang++, ubuntu-24.04-arm-clang-cmake, ubuntu-24.04-arm) (push) Has been cancelled
CMake / build (cmake, clang, , clang++, ubuntu-latest-clang-cmake, ubuntu-latest) (push) Has been cancelled
CMake / build (cmake, clang, -DSANITIZE=fuzzer-no-link,address, clang++, ubuntu-latest-clang-cmake-asan-fuzzer, ubuntu-latest) (push) Has been cancelled
CMake / build (cmake, clang, -G Ninja, clang++, ubuntu-latest-clang-cmake-ninja, ubuntu-latest) (push) Has been cancelled
CMake / build (cmake, gcc, , g++, ubuntu-latest-gcc-cmake, ubuntu-latest) (push) Has been cancelled
Add initial tests for decoder and encoder
Encoder tests currently do not dump recon as ihevce_plugin doesn't yet support recon dump.
This will be enabled once the recon dump is supported.

Decoder tests currently validate just a few files from big buck bunny.

Use "ctest" run all the tests when using cmake.
This downloads the required media files and uses them in the tests.

If running the tests directly using the test binaries, then download the media files
and export HEVC_TEST_DIR to the extracted folder before running the binaries directly.
2026-07-27 13:15:45 -07:00

72 lines
1.9 KiB
C++

/******************************************************************************
*
* Copyright (C) 2026 Ittiam Systems Pvt Ltd, Bangalore
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
#include "BitsFile.h"
#include <algorithm>
BitsFile::BitsFile() : mFile(nullptr), mReadMode(true) {}
BitsFile::~BitsFile() { close(); }
bool BitsFile::open(const std::string& path, bool readMode) {
close();
mReadMode = readMode;
mFile = fopen(path.c_str(), mReadMode ? "rb" : "wb");
return mFile != nullptr;
}
size_t BitsFile::seek(size_t offset) {
if (!mFile) {
return 0;
}
return fseek(mFile, offset, SEEK_SET);
}
void BitsFile::close() {
if (mFile) {
fclose(mFile);
mFile = nullptr;
}
}
size_t BitsFile::read(BitsBuf& buf, size_t bytesToRead) {
if (!mFile || !mReadMode) {
return 0;
}
size_t toRead = std::min(bytesToRead, buf.capacity());
size_t readBytes = fread(buf.data(), 1, toRead, mFile);
buf.setSize(readBytes);
buf.setOffset(0);
return readBytes;
}
size_t BitsFile::write(const BitsBuf& buf, size_t bytesToWrite) {
if (!mFile || mReadMode) {
return 0;
}
size_t toWrite = std::min(bytesToWrite, buf.size());
return fwrite(buf.data() + buf.offset(), 1, toWrite, mFile);
}
bool BitsFile::isEof() const {
if (!mFile) {
return true;
}
return feof(mFile) != 0;
}