- string ext = f.extension().string();
- transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
- return (
- ext == ".tif" || ext == ".tiff" || ext == ".jpg" || ext == ".jpeg" ||
- ext == ".png" || ext == ".bmp" || ext == ".tga" || ext == ".dpx" ||
- ext == ".j2c" || ext == ".j2k"
- );
+ /* XXX: this is rather inefficient; decoding the image just to get its size */
+ FFmpegImageProxy proxy (sub.png_image());
+ auto image = proxy.image(Image::Alignment::PADDED).image;
+ /* set up rect with height and width */
+ dcpomatic::Rect<double> rect(0, 0, image->size().width / double(size.width), image->size().height / double(size.height));
+
+ /* add in position */
+
+ switch (sub.h_align()) {
+ case dcp::HAlign::LEFT:
+ rect.x += sub.h_position();
+ break;
+ case dcp::HAlign::CENTER:
+ rect.x += 0.5 + sub.h_position() - rect.width / 2;
+ break;
+ case dcp::HAlign::RIGHT:
+ rect.x += 1 - sub.h_position() - rect.width;
+ break;
+ }
+
+ switch (sub.v_align()) {
+ case dcp::VAlign::TOP:
+ rect.y += sub.v_position();
+ break;
+ case dcp::VAlign::CENTER:
+ rect.y += 0.5 + sub.v_position() - rect.height / 2;
+ break;
+ case dcp::VAlign::BOTTOM:
+ rect.y += 1 - sub.v_position() - rect.height;
+ break;
+ }
+
+ decoder->emit_bitmap (period, image, rect);