Added TI patches, generated from commit 04f9d72 of the following tree:
[ubuntu-omap:gst-plugins-bad1-0.git] / debian / patches / 0089-PATCH-29-33-kmssink-allow-automatic-selection-of-con.patch
1 From 208f27347c737288a55063e3ab07fffe59bfadbc Mon Sep 17 00:00:00 2001
2 From: Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
3 Date: Mon, 22 Oct 2012 12:20:43 +0100
4 Subject: [PATCH 089/100] [PATCH 29/33] kmssink: allow automatic selection of
5  connector
6
7 As valid connector values are 1-7, allow 0 for automatic selection.
8 Also make the property unsigned while we're here.
9 ---
10  sys/kms/gstdrmutils.c |   56 ++++++++++++++++++++++++++++++++++++++++++-------
11  sys/kms/gstkmssink.c  |    9 ++++----
12  sys/kms/gstkmssink.h  |    1 +
13  3 files changed, 54 insertions(+), 12 deletions(-)
14
15 diff --git a/sys/kms/gstdrmutils.c b/sys/kms/gstdrmutils.c
16 index d49731d..5704aff 100644
17 --- a/sys/kms/gstdrmutils.c
18 +++ b/sys/kms/gstdrmutils.c
19 @@ -45,8 +45,8 @@ gst_drm_connector_cleanup (int fd, struct connector * c)
20    }
21  }
22  
23 -gboolean
24 -gst_drm_connector_find_mode_and_plane (int fd,
25 +static gboolean
26 +gst_drm_connector_find_mode_and_plane_helper (int fd,
27      struct omap_device * dev, int width, int height,
28      drmModeRes * resources, drmModePlaneRes * plane_resources,
29      struct connector *c, drmModePlane ** out_plane)
30 @@ -54,8 +54,10 @@ gst_drm_connector_find_mode_and_plane (int fd,
31    int i, best_area = 0, ret;
32  
33    /* free old stuff: */
34 -  if (*out_plane) /* TODO maybe move into 'struct connector'?? */
35 +  if (*out_plane) {             /* TODO maybe move into 'struct connector'?? */
36      drmModeFreePlane (*out_plane);
37 +    *out_plane = NULL;
38 +  }
39    gst_drm_connector_cleanup (fd, c);
40  
41    /* First, find the connector & mode */
42 @@ -144,23 +146,61 @@ fail:
43    return FALSE;
44  
45  error_no_connector:
46 -  GST_ERROR ("could not get connector %s", strerror (errno));
47 +  GST_DEBUG ("could not get connector %s", strerror (errno));
48    goto fail;
49  
50  error_no_mode:
51 -  GST_ERROR ("could not find mode %dx%d (count_modes %d)",
52 +  GST_DEBUG ("could not find mode %dx%d (count_modes %d)",
53        width, height, c->connector->count_modes);
54    goto fail;
55  
56  error_no_encoder:
57 -  GST_ERROR ("could not get encoder: %s", strerror (errno));
58 +  GST_DEBUG ("could not get encoder: %s", strerror (errno));
59    goto fail;
60  
61  error_no_crtc:
62 -  GST_ERROR ("couldn't find a crtc");
63 +  GST_DEBUG ("couldn't find a crtc");
64    goto fail;
65  
66  error_no_plane:
67 -  GST_ERROR ("couldn't find a plane");
68 +  GST_DEBUG ("couldn't find a plane");
69    goto fail;
70  }
71 +
72 +gboolean
73 +gst_drm_connector_find_mode_and_plane (int fd,
74 +    struct omap_device *dev, int width, int height,
75 +    drmModeRes * resources, drmModePlaneRes * plane_resources,
76 +    struct connector *c, drmModePlane ** out_plane)
77 +{
78 +  int i;
79 +  gboolean found = FALSE;
80 +
81 +  /* First, find the connector & mode */
82 +  if (c->id == 0) {
83 +    /* Any connector */
84 +    GST_DEBUG ("Any connector, %d available", resources->count_connectors);
85 +    for (i = 0; i < resources->count_connectors; i++) {
86 +      GST_DEBUG ("  %d", resources->connectors[i]);
87 +    }
88 +    for (i = 0; i < resources->count_connectors; i++) {
89 +      GST_DEBUG ("Trying connector %d: %d", i, resources->connectors[i]);
90 +      c->id = resources->connectors[i];
91 +      if (gst_drm_connector_find_mode_and_plane_helper (fd, dev, width, height,
92 +              resources, plane_resources, c, out_plane)) {
93 +        GST_DEBUG ("Found suitable connector");
94 +        found = TRUE;
95 +        break;
96 +      }
97 +      GST_DEBUG ("Connector not suitable");
98 +    }
99 +  } else {
100 +    /* A specific connector */
101 +    GST_DEBUG ("Connector %d", c->id);
102 +    found =
103 +        gst_drm_connector_find_mode_and_plane_helper (fd, dev, width, height,
104 +        resources, plane_resources, c, out_plane);
105 +  }
106 +
107 +  return found;
108 +}
109 diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c
110 index 656c424..8477028 100644
111 --- a/sys/kms/gstkmssink.c
112 +++ b/sys/kms/gstkmssink.c
113 @@ -192,6 +192,7 @@ gst_kms_sink_show_frame (GstVideoSink * vsink, GstBuffer * inbuf)
114    if (sink->conn.crtc == -1) {
115      GstVideoRectangle dest = { 0 };
116  
117 +    sink->conn.id = sink->conn_id;
118      if (!gst_drm_connector_find_mode_and_plane (sink->fd,
119              sink->dev, sink->src_rect.w, sink->src_rect.h,
120              sink->resources, sink->plane_resources, &sink->conn, &sink->plane))
121 @@ -323,7 +324,7 @@ gst_kms_sink_set_property (GObject * object, guint prop_id,
122        sink->scale = g_value_get_boolean (value);
123        break;
124      case PROP_CONNECTOR:
125 -      sink->conn.id = g_value_get_int (value);
126 +      sink->conn_id = g_value_get_uint (value);
127        break;
128      case PROP_PIXEL_ASPECT_RATIO:
129      {
130 @@ -366,7 +367,7 @@ gst_kms_sink_get_property (GObject * object, guint prop_id,
131        g_value_set_boolean (value, sink->scale);
132        break;
133      case PROP_CONNECTOR:
134 -      g_value_set_int (value, sink->conn.id);
135 +      g_value_set_uint (value, sink->conn.id);
136        break;
137      case PROP_PIXEL_ASPECT_RATIO:
138      {
139 @@ -580,8 +581,8 @@ gst_kms_sink_class_init (GstKMSSinkClass * klass)
140            "When true, scale to render fullscreen", FALSE,
141            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
142    g_object_class_install_property (gobject_class, PROP_CONNECTOR,
143 -      g_param_spec_int ("connector", "Connector",
144 -          "DRM connector id", 1, G_MAXINT32, 7,
145 +      g_param_spec_uint ("connector", "Connector",
146 +          "DRM connector id (0 for automatic selection)", 0, G_MAXUINT32, 7,
147            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT));
148  
149    gst_element_class_set_details_simple (gstelement_class,
150 diff --git a/sys/kms/gstkmssink.h b/sys/kms/gstkmssink.h
151 index 6c0d26e..ef19a76 100644
152 --- a/sys/kms/gstkmssink.h
153 +++ b/sys/kms/gstkmssink.h
154 @@ -69,6 +69,7 @@ struct _GstKMSSink
155    drmModeRes *resources;
156    drmModePlaneRes *plane_resources;
157    struct connector conn;
158 +  uint32_t conn_id;
159    drmModePlane *plane;
160    GstDRMBufferPool *pool;
161    /* current displayed buffer and last displayed buffer: */
162 -- 
163 1.7.9.5
164