diff --git a/src/torchcodec/_core/custom_ops.cpp b/src/torchcodec/_core/custom_ops.cpp index daec2010..0e446a24 100644 --- a/src/torchcodec/_core/custom_ops.cpp +++ b/src/torchcodec/_core/custom_ops.cpp @@ -656,6 +656,10 @@ std::string get_stream_json_metadata( // Returns version information about the various FFMPEG libraries that are // loaded in the program's address space. +// TODO: ideally we'd have a more robust way of getting the ffmpeg version, +// we're using av_version_info() which is not standardized and shouldn't be +// parsed by code (which we do!). See +// https://github.com/pytorch/torchcodec/issues/100 std::string _get_json_ffmpeg_library_versions() { std::stringstream ss; ss << "{\n"; diff --git a/test/test_metadata.py b/test/test_metadata.py index 9f6b91ca..bf1419a0 100644 --- a/test/test_metadata.py +++ b/test/test_metadata.py @@ -15,7 +15,6 @@ create_from_file, get_container_metadata, get_container_metadata_from_header, - get_ffmpeg_library_versions, VideoStreamMetadata, ) from torchcodec.decoders import AudioDecoder, VideoDecoder @@ -78,9 +77,7 @@ def test_get_metadata(metadata_getter): with pytest.raises(NotImplementedError, match="Decide on logic"): metadata.bit_rate - ffmpeg_major_version = int( - get_ffmpeg_library_versions()["ffmpeg_version"].split(".")[0] - ) + ffmpeg_major_version = get_ffmpeg_major_version() if ffmpeg_major_version <= 5: expected_duration_seconds_from_header = 16.57 expected_bit_rate_from_header = 324915 diff --git a/test/utils.py b/test/utils.py index be9eb847..c258ac44 100644 --- a/test/utils.py +++ b/test/utils.py @@ -28,7 +28,13 @@ def cpu_and_cuda(): def get_ffmpeg_major_version(): - return int(get_ffmpeg_library_versions()["ffmpeg_version"].split(".")[0]) + ffmpeg_version = get_ffmpeg_library_versions()["ffmpeg_version"] + # When building FFmpeg from source there can be a `n` prefix in the version + # string. This is quite brittle as we're using av_version_info(), which has + # no stable format. See https://github.com/pytorch/torchcodec/issues/100 + if ffmpeg_version.startswith("n"): + ffmpeg_version = ffmpeg_version.removeprefix("n") + return int(ffmpeg_version.split(".")[0]) # For use with decoded data frames. On CPU Linux, we expect exact, bit-for-bit