]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/omapdrmtest.git/blobdiff - util/display-kms.c
display-kms: Removed unnecessary include of libdce
[glsdk/omapdrmtest.git] / util / display-kms.c
index 74b59fd28b955e56cf6a3579fa9efb09b37a975e..b892dbc4a4e3aa34252946c9d7f5cc817fb26b6a 100644 (file)
@@ -20,7 +20,6 @@
 #endif
 
 #include "util.h"
-#include <libdce.h>
 
 #include <xf86drmMode.h>
 
@@ -195,8 +194,10 @@ free_buffers(struct display *disp, uint32_t n)
        uint32_t i;
        for (i = 0; i < n; i++) {
                 if (disp->buf[i]) {
+                       close(disp->buf[i]->fd[0]);
                        omap_bo_del(disp->buf[i]->bo[0]);
                        if(disp->multiplanar){
+                               close(disp->buf[i]->fd[1]);
                                omap_bo_del(disp->buf[i]->bo[1]);
                        }
                 }
@@ -333,6 +334,29 @@ post_buffer(struct display *disp, struct buffer *buf)
        return last_err;
 }
 
+int
+get_overlay_plane(struct display *disp, struct buffer *buf)
+{
+       struct display_kms *disp_kms = to_display_kms(disp);
+       uint32_t i, ret;
+
+       for (i = 0; i < disp_kms->connectors_count; i++) {
+               struct connector *connector = &disp_kms->connector[i];
+               drmModeModeInfo *mode = connector->mode;
+
+               disp_kms->ovr[i] = drmModeGetPlane(disp->fd,
+                                       disp_kms->plane_resources->planes[1]);
+
+               ret = drmModeObjectSetProperty(disp->fd,
+                       disp_kms->ovr[i]->plane_id, DRM_MODE_OBJECT_PLANE, 7, 3);
+               if (ret < 0) {
+                       MSG("Could not set Z order for plane");
+                       return ret;
+               }
+       }
+       return 0;
+}
+
 static int
 post_vid_buffer(struct display *disp, struct buffer *buf,
                uint32_t x, uint32_t y, uint32_t w, uint32_t h)
@@ -374,12 +398,21 @@ post_vid_buffer(struct display *disp, struct buffer *buf,
                        continue;
                }
 
-               ret = drmModeSetPlane(disp->fd, disp_kms->ovr[i]->plane_id,
+               if(buf->noScale) {
+                       ret = drmModeSetPlane(disp->fd, disp_kms->ovr[i]->plane_id,
+                               connector->crtc, buf_kms->fb_id, 0,
+                               /* Use x and y as co-ordinates of overlay */
+                               x, y, buf->width, buf->height,
+                               /* Consider source x and y is 0 always */
+                               0, 0, w << 16, h << 16);
+               } else {
+                       ret = drmModeSetPlane(disp->fd, disp_kms->ovr[i]->plane_id,
                                connector->crtc, buf_kms->fb_id, 0,
                                /* make video fullscreen: */
                                0, 0, mode->hdisplay, mode->vdisplay,
                                /* source/cropping coordinates are given in Q16 */
                                x << 16, y << 16, w << 16, h << 16);
+               }
                if (ret) {
                        ERROR("failed to enable plane %d: %s",
                                        disp_kms->ovr[i]->plane_id, strerror(errno));