mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 01:47:47 +03:00 
			
		
		
		
	Added get_codec_version() (#29)
Co-authored-by: Andrew Murray <radarhere@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									0732554e5a
								
							
						
					
					
						commit
						fca6df2c10
					
				| 
						 | 
					@ -94,7 +94,20 @@ class TestFileAvif:
 | 
				
			||||||
    def test_version(self) -> None:
 | 
					    def test_version(self) -> None:
 | 
				
			||||||
        version = features.version_module("avif")
 | 
					        version = features.version_module("avif")
 | 
				
			||||||
        assert version is not None
 | 
					        assert version is not None
 | 
				
			||||||
        assert re.search(r"\d+\.\d+\.\d+$", version)
 | 
					        assert re.search(r"^\d+\.\d+\.\d+$", version)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_codec_version(self) -> None:
 | 
				
			||||||
 | 
					        assert AvifImagePlugin.get_codec_version("unknown") is None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for codec_name in ("aom", "dav1d", "rav1e", "svt"):
 | 
				
			||||||
 | 
					            codec_version = AvifImagePlugin.get_codec_version(codec_name)
 | 
				
			||||||
 | 
					            if _avif.decoder_codec_available(
 | 
				
			||||||
 | 
					                codec_name
 | 
				
			||||||
 | 
					            ) or _avif.encoder_codec_available(codec_name):
 | 
				
			||||||
 | 
					                assert codec_version is not None
 | 
				
			||||||
 | 
					                assert re.search(r"^v?\d+\.\d+\.\d+(-([a-z\d])+)*$", codec_version)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                assert codec_version is None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_read(self) -> None:
 | 
					    def test_read(self) -> None:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,14 @@ DECODE_CODEC_CHOICE = "auto"
 | 
				
			||||||
DEFAULT_MAX_THREADS = 0
 | 
					DEFAULT_MAX_THREADS = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def get_codec_version(codec_name: str) -> str | None:
 | 
				
			||||||
 | 
					    versions = _avif.codec_versions()
 | 
				
			||||||
 | 
					    for version in versions.split(", "):
 | 
				
			||||||
 | 
					        if version.split(" [")[0] == codec_name:
 | 
				
			||||||
 | 
					            return version.split(":")[-1].split(" ")[0]
 | 
				
			||||||
 | 
					    return None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _accept(prefix: bytes) -> bool | str:
 | 
					def _accept(prefix: bytes) -> bool | str:
 | 
				
			||||||
    if prefix[4:8] != b"ftyp":
 | 
					    if prefix[4:8] != b"ftyp":
 | 
				
			||||||
        return False
 | 
					        return False
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -182,6 +182,13 @@ _encoder_codec_available(PyObject *self, PyObject *args) {
 | 
				
			||||||
    return PyBool_FromLong(is_available);
 | 
					    return PyBool_FromLong(is_available);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PyObject *
 | 
				
			||||||
 | 
					_codec_versions(PyObject *self, PyObject *args) {
 | 
				
			||||||
 | 
					    char buffer[256];
 | 
				
			||||||
 | 
					    avifCodecVersions(buffer);
 | 
				
			||||||
 | 
					    return PyUnicode_FromString(buffer);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if AVIF_VERSION >= 80200  // 0.8.2
 | 
					#if AVIF_VERSION >= 80200  // 0.8.2
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
_add_codec_specific_options(avifEncoder *encoder, PyObject *opts) {
 | 
					_add_codec_specific_options(avifEncoder *encoder, PyObject *opts) {
 | 
				
			||||||
| 
						 | 
					@ -910,6 +917,7 @@ static PyMethodDef avifMethods[] = {
 | 
				
			||||||
    {"AvifEncoder", AvifEncoderNew, METH_VARARGS},
 | 
					    {"AvifEncoder", AvifEncoderNew, METH_VARARGS},
 | 
				
			||||||
    {"decoder_codec_available", _decoder_codec_available, METH_VARARGS},
 | 
					    {"decoder_codec_available", _decoder_codec_available, METH_VARARGS},
 | 
				
			||||||
    {"encoder_codec_available", _encoder_codec_available, METH_VARARGS},
 | 
					    {"encoder_codec_available", _encoder_codec_available, METH_VARARGS},
 | 
				
			||||||
 | 
					    {"codec_versions", _codec_versions, METH_NOARGS},
 | 
				
			||||||
    {NULL, NULL}
 | 
					    {NULL, NULL}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user