Throw an exception rather than asserting when unable to handle a pixel format (#65).
authorCarl Hetherington <cth@carlh.net>
Sat, 23 Feb 2013 21:35:44 +0000 (21:35 +0000)
committerCarl Hetherington <cth@carlh.net>
Sat, 23 Feb 2013 21:35:44 +0000 (21:35 +0000)
src/lib/exceptions.h
src/lib/image.cc

index 6de8806e4e8debc24eeef6100235a9a44498f96f..277355117ee097f86dce6d1d2c084436e8def4db 100644 (file)
@@ -28,6 +28,9 @@
 #include <cstring>
 #include <boost/exception/all.hpp>
 #include <boost/thread.hpp>
+extern "C" {
+#include <libavutil/pixfmt.h>
+}
 #include "compose.hpp"
 
 /** @class StringError
@@ -220,6 +223,14 @@ public:
        {}
 };
 
+class PixelFormatError : public StringError
+{
+public:
+       PixelFormatError (std::string o, AVPixelFormat f)
+               : StringError (String::compose ("Cannot handle pixel format %1 during %2", f, o))
+       {}
+};
+
 class ExceptionStore
 {
 public:
@@ -245,4 +256,6 @@ private:
        mutable boost::mutex _mutex;
 };
 
+       
+
 #endif
index 73d499fe825dc8d2ac99df776e8cff35b7ad118c..ae87304c256b7490b63804e7651d29fa110a7913 100644 (file)
@@ -70,7 +70,7 @@ Image::lines (int n) const
        case PIX_FMT_YUV422P:
                return size().height;
        default:
-               assert (false);
+               throw PixelFormatError ("lines()", _pixel_format);
        }
 
        return 0;
@@ -89,7 +89,7 @@ Image::components () const
        case PIX_FMT_RGBA:
                return 1;
        default:
-               assert (false);
+               throw PixelFormatError ("components()", _pixel_format);
        }
 
        return 0;
@@ -202,7 +202,7 @@ Image::post_process (string pp, bool aligned) const
                pp_format = PP_FORMAT_422;
                break;
        default:
-               assert (false);
+               throw PixelFormatError ("post_process", pixel_format());
        }
                
        pp_mode* mode = pp_get_mode_by_name_and_quality (pp.c_str (), PP_QUALITY_MAX);