Skip to content

Commit 708290a

Browse files
committed
upgrade to new buffer APIs
1 parent fff0b9c commit 708290a

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

src/mapnik_image.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -250,22 +250,36 @@ std::shared_ptr<image_any> fromstring(std::string const& str)
250250
{
251251
return std::make_shared<image_any>(reader->read(0,0,reader->width(), reader->height()));
252252
}
253-
throw mapnik::image_reader_exception("Failed to load image from buffer" );
253+
throw mapnik::image_reader_exception("Failed to load image from String" );
254+
}
255+
256+
namespace {
257+
struct view_release
258+
{
259+
view_release(Py_buffer & view)
260+
: view_(view) {}
261+
~view_release()
262+
{
263+
PyBuffer_Release(&view_);
264+
}
265+
Py_buffer & view_;
266+
};
254267
}
255268

256269
std::shared_ptr<image_any> frombuffer(PyObject * obj)
257270
{
258-
void const* buffer=0;
259-
Py_ssize_t buffer_len;
260-
if (PyObject_AsReadBuffer(obj, &buffer, &buffer_len) == 0)
271+
Py_buffer view;
272+
view_release helper(view);
273+
if (obj != nullptr && PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) == 0)
261274
{
262-
std::unique_ptr<image_reader> reader(get_image_reader(reinterpret_cast<char const*>(buffer),buffer_len));
275+
std::unique_ptr<image_reader> reader
276+
(get_image_reader(reinterpret_cast<char const*>(view.buf), view.len));
263277
if (reader.get())
264278
{
265279
return std::make_shared<image_any>(reader->read(0,0,reader->width(),reader->height()));
266280
}
267281
}
268-
throw mapnik::image_reader_exception("Failed to load image from buffer" );
282+
throw mapnik::image_reader_exception("Failed to load image from Buffer" );
269283
}
270284

271285
void set_grayscale_to_alpha(image_any & im)

0 commit comments

Comments
 (0)