hwc: Handle multiple videos with priority to secure
In video handling this patch makes sure:
1) Sufficient VG pipes are available, not just any pipes
2) If VG pipes are insufficient in multi-video scenarios
preference is given to secure videos
Change-Id: I170592463a1c28348108a1b12d60908cf3063d7d
diff --git a/libhwcomposer/hwc_mdpcomp.h b/libhwcomposer/hwc_mdpcomp.h
index da4b330..7fb0968 100644
--- a/libhwcomposer/hwc_mdpcomp.h
+++ b/libhwcomposer/hwc_mdpcomp.h
@@ -139,7 +139,8 @@
/* check if we can use layer cache to do at least partial MDP comp */
bool partialMDPComp(hwc_context_t *ctx, hwc_display_contents_1_t* list);
/* checks for conditions where only video can be bypassed */
- bool isOnlyVideoDoable(hwc_context_t *ctx, hwc_display_contents_1_t* list);
+ bool isOnlyVideoDoable(hwc_context_t *ctx, hwc_display_contents_1_t* list,
+ bool secureOnly);
/* checks for conditions where YUV layers cannot be bypassed */
bool isYUVDoable(hwc_context_t* ctx, hwc_layer_1_t* layer);
/* calcs bytes read by MDP for a given frame */
@@ -159,7 +160,8 @@
/* optimize layers for mdp comp*/
void batchLayers();
/* updates cache map with YUV info */
- void updateYUV(hwc_context_t* ctx, hwc_display_contents_1_t* list);
+ void updateYUV(hwc_context_t* ctx, hwc_display_contents_1_t* list,
+ bool secureOnly);
bool programMDP(hwc_context_t *ctx, hwc_display_contents_1_t* list);
bool programYUV(hwc_context_t *ctx, hwc_display_contents_1_t* list);
void reset(const int& numAppLayers, hwc_display_contents_1_t* list);
@@ -203,6 +205,10 @@
/* Checks for pipes needed versus pipes available */
virtual bool arePipesAvailable(hwc_context_t *ctx,
hwc_display_contents_1_t* list);
+
+ /* Checks for video pipes needed versus pipes available */
+ virtual bool areVGPipesAvailable(hwc_context_t *ctx,
+ hwc_display_contents_1_t* list);
};
class MDPCompSplit : public MDPComp {
@@ -232,6 +238,10 @@
virtual bool arePipesAvailable(hwc_context_t *ctx,
hwc_display_contents_1_t* list);
+ /* Checks for video pipes needed versus pipes available */
+ virtual bool areVGPipesAvailable(hwc_context_t *ctx,
+ hwc_display_contents_1_t* list);
+
int pipesNeeded(hwc_context_t *ctx, hwc_display_contents_1_t* list,
int mixer);
};