- pl_rearmed_cbs.flip_cnt++;
- convert(vout_buf, vout_width * vout_height * 2);
- video_cb(vout_buf, vout_width, vout_height, vout_width * 2);
+ unsigned short *dest = vout_buf;
+ const unsigned short *src = vram;
+ int dstride = vout_width, h1 = h;
+ int doffs;
+
+ if (vram == NULL) {
+ // blanking
+ memset(vout_buf, 0, dstride * h * 2);
+ goto out;
+ }
+
+ doffs = (vout_height - h) * dstride;
+ doffs += (dstride - w) / 2 & ~1;
+ if (doffs != vout_doffs_old) {
+ // clear borders
+ memset(vout_buf, 0, dstride * h * 2);
+ vout_doffs_old = doffs;
+ }
+ dest += doffs;
+
+ if (bgr24)
+ {
+ // XXX: could we switch to RETRO_PIXEL_FORMAT_XRGB8888 here?
+ for (; h1-- > 0; dest += dstride, src += stride)
+ {
+ bgr888_to_rgb565(dest, src, w * 3);
+ }
+ }
+ else
+ {
+ for (; h1-- > 0; dest += dstride, src += stride)
+ {
+ bgr555_to_rgb565(dest, src, w * 2);
+ }
+ }