From 2cdc71e2da0891ba9a1baa21fc58aff4cba46168 Mon Sep 17 00:00:00 2001 From: Andre Anjos <andre.dos.anjos@gmail.com> Date: Tue, 12 Nov 2013 14:37:45 +0100 Subject: [PATCH] Fix supported vs available format descriptions --- xbob/io/externals.cpp | 47 ++++++++++++++++++++++-------------- xbob/io/script/video_test.py | 2 ++ xbob/io/utils.py | 2 +- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/xbob/io/externals.cpp b/xbob/io/externals.cpp index 0f71821..73fb7ce 100644 --- a/xbob/io/externals.cpp +++ b/xbob/io/externals.cpp @@ -677,10 +677,11 @@ built-in input formats for videos that are available, but **not\n\ necessarily supported** by this library.\n\ "); -static PyObject* get_video_oformats(void (*f)(std::map<std::string, AVOutputFormat*>&)) { +static PyObject* get_video_oformats(bool supported) { std::map<std::string, AVOutputFormat*> m; - f(m); + if (supported) bob::io::detail::ffmpeg::oformats_supported(m); + else bob::io::detail::ffmpeg::oformats_installed(m); PyObject* retval = PyDict_New(); if (!retval) return 0; @@ -723,6 +724,7 @@ static PyObject* get_video_oformats(void (*f)(std::map<std::string, AVOutputForm } for (auto ext=exts.begin(); ext!=exts.end(); ++ext) { + if (!list_append(ext_list, ext->c_str())) { Py_DECREF(ext_list); Py_DECREF(property); @@ -763,30 +765,39 @@ static PyObject* get_video_oformats(void (*f)(std::map<std::string, AVOutputForm } /** get supported codec list **/ - std::vector<const AVCodec*> codecs; - bob::io::detail::ffmpeg::oformat_supported_codecs(k->second->name, codecs); - PyObject* supported_codecs = PyDict_New(); - for (auto c=codecs.begin(); c!=codecs.end(); ++c) { - PyObject* codec_descr = describe_codec(*c); - if (!codec_descr) { - Py_DECREF(supported_codecs); + if (supported) { + std::vector<const AVCodec*> codecs; + bob::io::detail::ffmpeg::oformat_supported_codecs(k->second->name, codecs); + + PyObject* supported_codecs = PyDict_New(); + if (!supported_codecs) { Py_DECREF(property); Py_DECREF(retval); return 0; } - if (!dict_steal(supported_codecs, (*c)->name, codec_descr)) { + + for (auto c=codecs.begin(); c!=codecs.end(); ++c) { + PyObject* codec_descr = describe_codec(*c); + if (!codec_descr) { + Py_DECREF(supported_codecs); + Py_DECREF(property); + Py_DECREF(retval); + return 0; + } + if (!dict_steal(supported_codecs, (*c)->name, codec_descr)) { + Py_DECREF(property); + Py_DECREF(retval); + return 0; + } + } + + if (!dict_steal(property, "supported_codecs", supported_codecs)) { Py_DECREF(property); Py_DECREF(retval); return 0; } } - if (!dict_steal(property, "supported_codecs", supported_codecs)) { - Py_DECREF(property); - Py_DECREF(retval); - return 0; - } - if (!dict_steal(retval, k->first.c_str(), property)) { Py_DECREF(retval); return 0; @@ -799,11 +810,11 @@ static PyObject* get_video_oformats(void (*f)(std::map<std::string, AVOutputForm } static PyObject* PyBobIo_SupportedOutputFormats(PyObject*) { - return get_video_oformats(&bob::io::detail::ffmpeg::oformats_supported); + return get_video_oformats(true); } static PyObject* PyBobIo_AvailableOutputFormats(PyObject*) { - return get_video_oformats(&bob::io::detail::ffmpeg::oformats_installed); + return get_video_oformats(false); } PyDoc_STRVAR(s_supported_oformats_str, "supported_videowriter_formats"); diff --git a/xbob/io/script/video_test.py b/xbob/io/script/video_test.py index b2f1008..f90bdeb 100644 --- a/xbob/io/script/video_test.py +++ b/xbob/io/script/video_test.py @@ -44,6 +44,8 @@ def list_codecs(*args, **kwargs): def list_all_codecs(*args, **kwargs): + from .._externals import supported_video_codecs, available_video_codecs + CODECS = supported_video_codecs() ALL_CODECS = available_video_codecs() diff --git a/xbob/io/utils.py b/xbob/io/utils.py index 09fc461..9e3d67b 100644 --- a/xbob/io/utils.py +++ b/xbob/io/utils.py @@ -61,7 +61,7 @@ def print_numbers(frame, counter, format, fontsize): img = Image.fromstring('RGB', (frame.shape[1], frame.shape[2]), frame.transpose(1,2,0).tostring()) draw = ImageDraw.Draw(img) draw.text((x_pos, y_pos), text, font=font, fill=(255,255,255)) - return numpy.asarray(img).transpose(2,0,1).copy() + return numpy.asarray(img).transpose(2,0,1) def generate_colors(height, width, shift): """Generates an image that serves as a test pattern for encoding/decoding and -- GitLab