Merge "overlay: Handle new request cases in comparing pipe priorities"
diff --git a/liboverlay/overlay.cpp b/liboverlay/overlay.cpp
index 96c057f..3a96b71 100644
--- a/liboverlay/overlay.cpp
+++ b/liboverlay/overlay.cpp
@@ -279,8 +279,29 @@
uint8_t pipe2Prio = mPipeBook[(int)pipe2Index].mPipe->getPriority();
if(pipe1Prio > pipe2Prio)
return -1;
- if(pipe1Prio < pipe2Prio)
+ else if(pipe1Prio < pipe2Prio)
return 1;
+ else {
+ // If we are here, Source Split is enabled and both pipes are
+ // new requests. In this case left type should be of higher prio
+ // than right type
+ utils::eMdpPipeType leftType = PipeBook::getPipeType(pipe1Index);
+ utils::eMdpPipeType rightType = PipeBook::getPipeType(pipe2Index);
+
+ if(leftType == rightType) {
+ //Safe. Onus on driver to assign correct pipes within same type
+ return 1;
+ } else if(leftType == OV_MDP_PIPE_DMA or rightType == OV_MDP_PIPE_VG) {
+ //If we are here, right is definitely a higher prio type.
+ //This check takes advantage of having only 3 types and avoids 3
+ //different failure combination checks.
+ return -1;
+ } else {
+ //Types are correct priority-wise
+ return 1;
+ }
+ }
+
return 0;
}