summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Franzke <benjaminfranzke@googlemail.com>2011-04-29 14:05:07 +0200
committerBenjamin Franzke <benjaminfranzke@googlemail.com>2011-04-29 14:05:07 +0200
commit802e2398b721e08666c54a1abb13023bbbd15749 (patch)
tree8a1cbccffa221c4da93514f8c09d3810188e8d24
parent49fdeaaba798a255001108a5be5261fa0d0b3176 (diff)
wfdpipeline: Implement wfdGetPipelineAttribi
-rw-r--r--src/wfdapi.c20
-rw-r--r--src/wfdpipeline.c53
-rw-r--r--src/wfdpipeline.h10
-rw-r--r--src/wfdport.c1
4 files changed, 81 insertions, 3 deletions
diff --git a/src/wfdapi.c b/src/wfdapi.c
index 1b23c66..8e84e6b 100644
--- a/src/wfdapi.c
+++ b/src/wfdapi.c
@@ -1089,11 +1089,25 @@ wfdBindMaskToPipeline(WFDDevice device,
WFD_API_CALL WFDint WFD_APIENTRY
-wfdGetPipelineAttribi(WFDDevice device,
- WFDPipeline pipeline,
+wfdGetPipelineAttribi(WFDDevice device_handle,
+ WFDPipeline pipeline_handle,
WFDPipelineConfigAttrib attrib) WFD_APIEXIT
{
- return 0;
+ struct wfd_device *device;
+ struct wfd_pipeline *pipeline;
+
+ device = wf_handle_get_object(device_handle, DEVICE_HANDLE);
+ if (device == NULL)
+ return 0;
+ wfd_device_set_error(device, WFD_ERROR_NONE);
+
+ pipeline = wf_handle_get_object(pipeline_handle, PIPELINE_HANDLE);
+ if (pipeline == NULL) {
+ wfd_device_set_error(device, WFD_ERROR_BAD_HANDLE);
+ return 0;
+ }
+
+ return wfd_pipeline_get_attribi(device, pipeline, attrib);
}
diff --git a/src/wfdpipeline.c b/src/wfdpipeline.c
index c4b8296..3f270d8 100644
--- a/src/wfdpipeline.c
+++ b/src/wfdpipeline.c
@@ -48,6 +48,8 @@ struct wfd_pipeline {
int first_bind;
struct wfd_source *source;
int source_updated;
+
+ struct wfd_port *port;
};
WFDint
@@ -181,6 +183,50 @@ wfd_pipeline_get_id(struct wfd_pipeline *pipeline)
return pipeline->crtc->crtc_id;
}
+WFDint
+wfd_pipeline_get_attribi(struct wfd_device *device,
+ struct wfd_pipeline *pipeline,
+ WFDPipelineConfigAttrib attrib)
+{
+ switch (attrib) {
+ case WFD_PIPELINE_ID:
+ return wfd_pipeline_get_id(pipeline);
+ case WFD_PIPELINE_PORTID:
+ return pipeline->port == NULL ? WFD_INVALID_PORT_ID :
+ wfd_port_get_attribi(device, pipeline->port, WFD_PORT_ID);
+ case WFD_PIPELINE_LAYER:
+ return 0;
+
+ /* FIXME: will change */
+ case WFD_PIPELINE_SHAREABLE:
+ return WFD_FALSE;
+ case WFD_PIPELINE_DIRECT_REFRESH:
+ return WFD_TRUE;
+
+ /* FIXME: there is not PIPELINE_FLIP_MIRROR_SUPPORT? */
+ case WFD_PIPELINE_FLIP:
+ case WFD_PIPELINE_MIRROR:
+ return WFD_FALSE;
+
+ case WFD_PIPELINE_ROTATION_SUPPORT:
+ return WFD_ROTATION_SUPPORT_NONE;
+ case WFD_PIPELINE_ROTATION:
+ return 0;
+
+ case WFD_PIPELINE_SCALE_FILTER:
+ return WFD_SCALE_FILTER_NONE;
+ case WFD_PIPELINE_TRANSPARENCY_ENABLE:
+ return WFD_TRANSPARENCY_NONE;
+ break;
+ default:
+ wfd_device_set_error(device, WFD_ERROR_BAD_ATTRIBUTE);
+ break;
+ }
+
+ return 0;
+}
+
+
void
wfd_pipeline_set_attribiv(struct wfd_device *device,
struct wfd_pipeline *pipeline,
@@ -229,3 +275,10 @@ wfd_pipeline_get_attribiv(struct wfd_device *device,
}
}
+void
+wfd_pipeline_set_port(struct wfd_device *device,
+ struct wfd_pipeline *pipeline,
+ struct wfd_port *port)
+{
+ pipeline->port = port;
+}
diff --git a/src/wfdpipeline.h b/src/wfdpipeline.h
index c5131c8..1e7ce56 100644
--- a/src/wfdpipeline.h
+++ b/src/wfdpipeline.h
@@ -26,6 +26,7 @@
#include "WF/wfd.h"
#include "wfddevice.h"
#include "wfdsource.h"
+#include "wfdport.h"
struct wfd_pipeline;
@@ -60,6 +61,11 @@ wfd_pipeline_get_crtc_id(struct wfd_pipeline *pipeline);
uint32_t
wfd_pipeline_get_fb_id(struct wfd_pipeline *pipeline);
+WFDint
+wfd_pipeline_get_attribi(struct wfd_device *device,
+ struct wfd_pipeline *pipeline,
+ WFDPipelineConfigAttrib attrib);
+
void
wfd_pipeline_set_attribiv(struct wfd_device *device,
struct wfd_pipeline *pipeline,
@@ -72,6 +78,10 @@ wfd_pipeline_get_attribiv(struct wfd_device *device,
WFDPipelineConfigAttrib attrib,
WFDint count,
WFDint *value);
+void
+wfd_pipeline_set_port(struct wfd_device *device,
+ struct wfd_pipeline *pipeline,
+ struct wfd_port *port);
int
wfd_pipeline_commit(struct wfd_device *device,
diff --git a/src/wfdport.c b/src/wfdport.c
index da56552..03fce95 100644
--- a/src/wfdport.c
+++ b/src/wfdport.c
@@ -789,6 +789,7 @@ wfd_port_bind_pipeline(struct wfd_device *device,
struct wfd_pipeline *pipeline)
{
port->pipeline = pipeline;
+ wfd_pipeline_set_port(device, pipeline, port);
port->pipeline_updated = 1;
return 0;