diff --git a/CHANGELOG.md b/CHANGELOG.md index d538427..f45a0c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,10 +8,34 @@ and this project adheres to [Semantic Versioning](https://semver.org/). ## [Unreleased] ### Added -- Initial public release -- `VideoReader` with explicit color space control (BT.709/BT.601, full/limited range) -- `VideoWriter` with HDR10 support (HEVC 10-bit, BT.2020, PQ, mastering display metadata) -- Lossless encoding support (FFV1 RGB, H.264 qp=0 with 4:4:4) -- 10-bit SDR intermediates (HEVC Main10 with BT.709) -- QuickTime/Safari HDR compatibility (hvc1 codec tag) -- Example: `compare_readers` for comparing cvffmpeg vs OpenCV color handling +- `VideoReader`: explicit color space control (BT.709/BT.601, full/limited range) +- `VideoReader`: `readRef()` zero-copy frame access for performance-critical paths +- `VideoReader`: bidirectional `seek()` using keyframe seeking +- `VideoReader`: `getPixelFormat()` and `getCodecID()` accessors +- `VideoWriter`: HDR10 support (HEVC 10-bit, BT.2020, PQ, mastering display metadata) +- `VideoWriter`: configurable `HDR10Metadata` struct with `setHDR10Metadata()` +- `VideoWriter`: `VideoWriterOptions` struct for cleaner `open()` calls +- `VideoWriter`: lossless encoding (FFV1 RGB, H.264 qp=0 with 4:4:4) +- `VideoWriter`: 10-bit SDR intermediates (HEVC Main10 with BT.709) +- `VideoWriter`: QuickTime/Safari HDR compatibility (hvc1 codec tag) +- Configurable log level system (`LogLevel::Quiet/Error/Warning/Info`) +- Comprehensive test suite using Catch2 +- GitHub Actions CI for Linux and macOS +- Examples: `compare_readers`, `basic_read`, `basic_write`, `hdr_write` + +### Fixed +- Resource leaks in `VideoWriter::open()` error paths +- `VideoWriter::open()` called twice now safely releases previous state +- `sws_scale` return value checked in `VideoReader::read()` +- Frame dimension validation in `VideoWriter::write()` +- `VideoWriter` move constructor/assignment: added `noexcept`, `av_log_set_level` +- Replaced deprecated `av_init_packet()` with `av_packet_alloc()` +- `getFPS()` returns 0.0 instead of fabricating 30 FPS when metadata is missing +- `getFrameCount()` documents that it returns -1 when unknown +- Framerate validation in `VideoWriter::open()` rejects zero/negative values + +### Changed +- Default log level is `Error` (library is silent during normal operation) +- Minimum dependency versions enforced: OpenCV 4.0+, FFmpeg 4.2+ +- `VideoWriter` private members renamed to trailing underscore convention +- Removed unused `frame_pts_cache_` from `VideoReader` diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..5e5712f --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,41 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +## Our Standards + +Examples of behavior that contributes to a positive environment: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior: + +* The use of sexualized language or imagery, and sexual attention or advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the project maintainers. All complaints will be reviewed and +investigated and will result in a response that is deemed necessary and +appropriate to the circumstances. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), +version 2.1, available at +https://www.contributor-covenant.org/version/2/1/code_of_conduct.html. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7cbc9d9..96825aa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,7 +37,7 @@ ctest --output-on-failure - Use trailing underscores for private member variables (`width_`, `formatCtx_`). - Match the existing formatting (clang-format is not enforced yet, but keep it consistent). -- Error messages go to `std::cerr` with a `cvffmpeg::ClassName:` prefix. +- Log messages use `detail::log(LogLevel::Error/Warning/Info)` — never `std::cerr` directly. - Check return values from FFmpeg API calls. - Free resources on all error paths in `open()` methods.