Wait for system event on display change
This commit is contained in:
parent
8242cf443f
commit
5d7ae5121e
2 changed files with 32 additions and 32 deletions
|
@ -93,12 +93,12 @@ static int hwc_setParameter(struct hwc_composer_device_1* dev, int cmd, int disp
|
|||
break;
|
||||
case DISPLAY_CMD_SETDISPLAYENHANCEDEMOMODE:
|
||||
ret = _hwc_device_set_enhancemode(disp, para0, 1);
|
||||
break;
|
||||
break;
|
||||
case DISPLAY_CMD_SETOUTPUTMODE:
|
||||
ret = _hwc_device_set_output_mode(disp, para0, para1);
|
||||
break;
|
||||
case DISPLAY_CMD_HDMIPERSENT:
|
||||
|
||||
|
||||
ret = _hwc_set_persent(disp, para0, para1);
|
||||
break;
|
||||
default:
|
||||
|
@ -149,13 +149,13 @@ static int hwc_eventControl(struct hwc_composer_device_1* dev, int disp,
|
|||
unsigned long arg[4]={0};
|
||||
|
||||
HWC_UNREFERENCED_PARAMETER(dev);
|
||||
|
||||
|
||||
if(disp == 0)
|
||||
{
|
||||
DisplayInfo *PsDisplayInfo = &Globctx->SunxiDisplay[disp];
|
||||
if(PsDisplayInfo->VirtualToHWDisplay != -EINVAL)
|
||||
{
|
||||
switch (event)
|
||||
switch (event)
|
||||
{
|
||||
case HWC_EVENT_VSYNC:
|
||||
arg[0] = PsDisplayInfo->VirtualToHWDisplay;
|
||||
|
@ -192,7 +192,7 @@ static int hwc_getDisplayConfigs(struct hwc_composer_device_1 *dev,
|
|||
*numConfigs = 1;
|
||||
*configs = 0;
|
||||
return PsDisplayInfo->VirtualToHWDisplay == -EINVAL;
|
||||
|
||||
|
||||
}
|
||||
|
||||
static int32_t hwc_get_attribute(const uint32_t attribute,
|
||||
|
@ -204,9 +204,9 @@ static int32_t hwc_get_attribute(const uint32_t attribute,
|
|||
if(PsDisplayInfo->VirtualToHWDisplay != -EINVAL)
|
||||
{
|
||||
switch(attribute) {
|
||||
case HWC_DISPLAY_VSYNC_PERIOD:
|
||||
case HWC_DISPLAY_VSYNC_PERIOD:
|
||||
return PsDisplayInfo->DisplayVsyncP;
|
||||
|
||||
|
||||
case HWC_DISPLAY_WIDTH:
|
||||
#ifdef FORCE_SET_RESOLUTION
|
||||
return FORCE_RESOLUTION_WIDTH;
|
||||
|
@ -247,13 +247,13 @@ static int hwc_getDisplayAttributes(struct hwc_composer_device_1 *dev,
|
|||
{
|
||||
HWC_UNREFERENCED_PARAMETER(dev);
|
||||
HWC_UNREFERENCED_PARAMETER(config);
|
||||
|
||||
for (int i = 0; attributes[i] != HWC_DISPLAY_NO_ATTRIBUTE; i++)
|
||||
|
||||
for (int i = 0; attributes[i] != HWC_DISPLAY_NO_ATTRIBUTE; i++)
|
||||
{
|
||||
if (disp <=2)
|
||||
{
|
||||
values[i]=hwc_get_attribute(attributes[i],disp);
|
||||
|
||||
|
||||
}else
|
||||
{
|
||||
ALOGE("unknown display type %u", disp);
|
||||
|
@ -312,12 +312,12 @@ static int hwc_device_open(const struct hw_module_t* module, const char* name,
|
|||
hwc_composer_device_1_t *psHwcDevice;
|
||||
hw_device_t *psHwDevice;
|
||||
int err = 0;
|
||||
|
||||
if (strcmp(name, HWC_HARDWARE_COMPOSER))
|
||||
|
||||
if (strcmp(name, HWC_HARDWARE_COMPOSER))
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
psHwcDevice = (hwc_composer_device_1_t *)malloc(sizeof(hwc_composer_device_1_t));
|
||||
if(!psHwcDevice)
|
||||
{
|
||||
|
@ -329,14 +329,14 @@ static int hwc_device_open(const struct hw_module_t* module, const char* name,
|
|||
psHwDevice = (hw_device_t *)psHwcDevice;
|
||||
|
||||
psHwcDevice->common.tag = HARDWARE_DEVICE_TAG;
|
||||
#ifdef HWC_1_3
|
||||
#ifdef HWC_1_3
|
||||
psHwcDevice->common.version = HWC_DEVICE_API_VERSION_1_3;
|
||||
#else
|
||||
psHwcDevice->common.version = HWC_DEVICE_API_VERSION_1_1;
|
||||
#endif
|
||||
psHwcDevice->common.module = const_cast<hw_module_t*>(module);
|
||||
psHwcDevice->common.close = hwc_device_close;
|
||||
|
||||
|
||||
psHwcDevice->prepare = hwc_prepare;
|
||||
psHwcDevice->set = hwc_set;
|
||||
psHwcDevice->setParameter = hwc_setParameter;
|
||||
|
@ -347,7 +347,7 @@ static int hwc_device_open(const struct hw_module_t* module, const char* name,
|
|||
psHwcDevice->getDisplayConfigs = hwc_getDisplayConfigs;
|
||||
psHwcDevice->getDisplayAttributes = hwc_getDisplayAttributes;
|
||||
/*
|
||||
open the hardware cursor ,you must modify the setIsCursorLayerHint() in Hwcomposer.cpp for
|
||||
open the hardware cursor ,you must modify the setIsCursorLayerHint() in Hwcomposer.cpp for
|
||||
HWC_DEVICE_API_VERSION_1_4 to HWC_DEVICE_API_VERSION_1_1
|
||||
*/
|
||||
psHwcDevice->setCursorPositionAsync = hwc_set_cursor_async;
|
||||
|
@ -356,7 +356,7 @@ static int hwc_device_open(const struct hw_module_t* module, const char* name,
|
|||
hwc_create_device();
|
||||
|
||||
android::add_sysprop_change_callback(hwc_sysprop_changed, 1000);
|
||||
hwc_sysprop_changed();
|
||||
//hwc_sysprop_changed();
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
#include "hwc.h"
|
||||
|
||||
SUNXI_hwcdev_context_t gSunxiHwcDevice;
|
||||
|
@ -28,14 +28,14 @@ static mem_speed_limit_t mem_speed_limit[3] =
|
|||
{432000, 20736000},
|
||||
};
|
||||
|
||||
static void reset_layer_type(HwcDisContext_t *Localctx, int hwctype)
|
||||
static void reset_layer_type(HwcDisContext_t *Localctx, int hwctype)
|
||||
{
|
||||
SUNXI_hwcdev_context_t *Globctx = &gSunxiHwcDevice;
|
||||
int j = 0;
|
||||
struct private_handle_t *handle = NULL;
|
||||
layer_info_t *psAllLayer = Localctx->psAllLayer;
|
||||
hwc_layer_1_t *psLayer = NULL;
|
||||
for(j = 0; j < Localctx->numberofLayer; j++)
|
||||
for(j = 0; j < Localctx->numberofLayer; j++)
|
||||
{
|
||||
psLayer = psAllLayer[j].psLayer;
|
||||
if(psLayer != NULL && psLayer->compositionType != HWC_FRAMEBUFFER_TARGET)
|
||||
|
@ -62,7 +62,7 @@ static void reset_layer_type(HwcDisContext_t *Localctx, int hwctype)
|
|||
static void calculate_factor(DisplayInfo *PsDisplayInfo,
|
||||
float *XWidthFactor, float *XHighetfactor)
|
||||
{
|
||||
|
||||
|
||||
float WidthFactor = (float)PsDisplayInfo->PersentWidth / 100;
|
||||
float Highetfactor = (float)PsDisplayInfo->PersentHeight / 100;
|
||||
if(PsDisplayInfo->InitDisplayWidth && PsDisplayInfo->InitDisplayHeight)
|
||||
|
@ -119,7 +119,7 @@ static bool reset_local(HwcDisContext_t *Localctx)
|
|||
while(j--)
|
||||
{
|
||||
Localctx->ChannelInfo[i].HwLayer[j] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -221,8 +221,8 @@ static bool reset_globle(SUNXI_hwcdev_context_t *Globctx,
|
|||
if(Localctx->psAllLayer != NULL)
|
||||
{
|
||||
psAllLayer = Localctx->psAllLayer;
|
||||
memset(psAllLayer, 0, sizeof(layer_info_t) * Localctx->malloc_layer);
|
||||
for(j = 0; j < psDisplay->numHwLayers; j++)
|
||||
memset(psAllLayer, 0, sizeof(layer_info_t) * Localctx->malloc_layer);
|
||||
for(j = 0; j < psDisplay->numHwLayers; j++)
|
||||
{
|
||||
psLayer = &psDisplay->hwLayers[j];
|
||||
psAllLayer[j].psLayer = psLayer;
|
||||
|
@ -241,7 +241,7 @@ static bool reset_globle(SUNXI_hwcdev_context_t *Globctx,
|
|||
if(handle != NULL && check_video(handle->format))
|
||||
{
|
||||
Localctx->video_mem += cal_layer_mem(&psAllLayer[j]);
|
||||
Localctx->video_cnt++;
|
||||
Localctx->video_cnt++;
|
||||
}
|
||||
if(handle != NULL
|
||||
&& psLayer->transform != 0
|
||||
|
@ -1094,7 +1094,7 @@ HwcAssignStatus hwc_try_assign_layer(HwcDisContext_t *Localctx, size_t singcout,
|
|||
dueto = D_CONTIG_MEM;
|
||||
goto assign_gpu;
|
||||
}
|
||||
|
||||
|
||||
if(check_usage_protected(handle) && !PsDisplayInfo->issecure)
|
||||
{
|
||||
ALOGV("%s:Video Protected", __func__);
|
||||
|
@ -1120,7 +1120,7 @@ HwcAssignStatus hwc_try_assign_layer(HwcDisContext_t *Localctx, size_t singcout,
|
|||
}
|
||||
|
||||
if( !is_cursor
|
||||
&& psLayer->transform != 0
|
||||
&& psLayer->transform != 0
|
||||
&& (Globctx->stop_rotate_hw || !check_fix_rotate(Globctx, psLayer)))
|
||||
{
|
||||
ALOGD("Many tr_mem[%d,%d,%d] stop[%d]", Globctx->tr_mem_limit,
|
||||
|
@ -1223,7 +1223,7 @@ HwcAssignStatus hwc_try_assign_layer(HwcDisContext_t *Localctx, size_t singcout,
|
|||
needchannel:
|
||||
if(needchannel)
|
||||
{
|
||||
/* here is a fix :UI has used video channel ,wether reasigend?
|
||||
/* here is a fix :UI has used video channel ,wether reasigend?
|
||||
could add check video before hwc_try_assign_layer()
|
||||
but must check_cross_list() between the videos
|
||||
*/
|
||||
|
@ -1438,7 +1438,7 @@ int hwc_setup_layer(hwc_dispc_data_t *DisplayData, HwcDisContext_t *Localctx)
|
|||
hw_layer_config->iscursor = psHwlayer_info->is_cursor;
|
||||
if(psHwlayer_info->is_cursor && !Localctx->fb_has_alpha)
|
||||
{
|
||||
/*
|
||||
/*
|
||||
if cursor,we must set it to the the biggest z-order,
|
||||
if there is nothing alpha in fb, higher than fb
|
||||
*/
|
||||
|
@ -1714,7 +1714,7 @@ bool sunxi_set(hwc_display_contents_1_t **displays, size_t numDisplays)
|
|||
close(mergfd);
|
||||
}
|
||||
}
|
||||
/* if miracast need tr we need sw_sync and merge the fence fd
|
||||
/* if miracast need tr we need sw_sync and merge the fence fd
|
||||
the disp0 releasefencefd is the wb over,so don't need wb timeline.
|
||||
*/
|
||||
deal_fence:
|
||||
|
@ -1803,7 +1803,7 @@ static int hwc_init_display(void)
|
|||
int arg[4] = {0};
|
||||
int DispCnt, outtype, permanentdisp, hasDispCnt = 0;
|
||||
|
||||
if (ioctl(Globctx->FBFd, FBIOGET_VSCREENINFO, &info) == -1)
|
||||
if (ioctl(Globctx->FBFd, FBIOGET_VSCREENINFO, &info) == -1)
|
||||
{
|
||||
ALOGE("FBIOGET_VSCREENINFO ioctl failed: %s", strerror(errno));
|
||||
return -1;
|
||||
|
@ -1939,7 +1939,7 @@ static int hwc_init_display(void)
|
|||
default:
|
||||
ALOGD("not support type");
|
||||
continue;
|
||||
|
||||
|
||||
}
|
||||
#ifdef FORCE_SET_RESOLUTION
|
||||
PsDisplayInfo->VarDisplayWidth = FORCE_RESOLUTION_WIDTH;
|
||||
|
|
Loading…
Reference in a new issue