diff options
author | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2011-04-29 14:05:07 +0200 |
---|---|---|
committer | Benjamin Franzke <benjaminfranzke@googlemail.com> | 2011-04-29 14:05:07 +0200 |
commit | 802e2398b721e08666c54a1abb13023bbbd15749 (patch) | |
tree | 8a1cbccffa221c4da93514f8c09d3810188e8d24 | |
parent | 49fdeaaba798a255001108a5be5261fa0d0b3176 (diff) |
wfdpipeline: Implement wfdGetPipelineAttribi
-rw-r--r-- | src/wfdapi.c | 20 | ||||
-rw-r--r-- | src/wfdpipeline.c | 53 | ||||
-rw-r--r-- | src/wfdpipeline.h | 10 | ||||
-rw-r--r-- | src/wfdport.c | 1 |
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; |