📄 haljpeg.c
字号:
__bJPEGOperation = HAL_JPEG_OPERATION_FV;
break;
case HAL_JPEG_OPERATION_FH:
__bJPEGOperation = HAL_JPEG_OPERATION_RC;
break;
case HAL_JPEG_OPERATION_FV:
__bJPEGOperation = HAL_JPEG_OPERATION_RCC;
break;
default:
break; //__bJPEGOperation is the same as the previous.
}
}
break;
case HAL_JPEG_OPERATION_RCFV:
{
switch (bCurrentOperation)
{
case HAL_JPEG_OPERATION_RC:
__bJPEGOperation = HAL_JPEG_OPERATION_FV;
break;
case HAL_JPEG_OPERATION_RCC:
__bJPEGOperation = HAL_JPEG_OPERATION_FH;
break;
case HAL_JPEG_OPERATION_FH:
__bJPEGOperation = HAL_JPEG_OPERATION_RCC;
break;
case HAL_JPEG_OPERATION_FV:
__bJPEGOperation = HAL_JPEG_OPERATION_RC;
break;
default:
break; //__bJPEGOperation is the same as the previous.
}
}
break;
default:
break; //__bJPEGOperation is the same as the previous.
}
#endif
}
//***************************************************************************
// Function : HAL_JPEGOperation
// Abstract : Call this function for rotate and flip
// Arguments :
// Return : none.
// Side Effect : none.
// Notes : Should call HAL_JPEGTransformOperation before calling this function.
//***************************************************************************
void HAL_JPEGOperation(void)
{
#ifndef NO_PICTURECD
#ifdef SUPPORT_JPEG_3_FRAMES
HAL_Display(HAL_DISPLAY_VIDEO, FALSE);
//CoCo2.31, wait the "disable video" action OK before doing JPEG reset.
__dwCheckTime = UTL_GetSysTimer();
while ((UTL_GetSysTimer() - __dwCheckTime ) < COUNT_100_MSEC)
{
W99AV_ReadDRAMData (0xC1, &__dwTemp);
if (HIWORD(__dwTemp) == 0) //The "disable video" action is OK.
break;
}
#endif
_JPEGCalculateScaling(VIEW_ZOOM100);
_JPEGDecodeCmd(HAL_JPEG_NODECODE, VIEW_ZOOM100);
#endif
}
//***************************************************************************
// Function : _TransformPanAction
// Abstract : This function will transform the action of the pan according to
// : current operation.
// Arguments : bAction, the action of pan.
// Return : The action of pan.
// Side Effect : none.
// Notes : use __bJPEGOperation to judge which pan action should be transformed.
//***************************************************************************
BYTE _TransformPanAction(BYTE bAction)
{
#ifndef NO_PICTURECD
switch (__bJPEGOperation)
{
case HAL_JPEG_OPERATION_RC:
{
switch (bAction)
{
case VIEW_ZOOM_LEFT:
return VIEW_ZOOM_DOWN;
case VIEW_ZOOM_RIGHT:
return VIEW_ZOOM_UP;
case VIEW_ZOOM_UP:
return VIEW_ZOOM_LEFT;
case VIEW_ZOOM_DOWN:
return VIEW_ZOOM_RIGHT;
default:
break;
}
}
break;
case HAL_JPEG_OPERATION_FHFV:
{
switch (bAction)
{
case VIEW_ZOOM_LEFT:
return VIEW_ZOOM_RIGHT;
case VIEW_ZOOM_RIGHT:
return VIEW_ZOOM_LEFT;
case VIEW_ZOOM_UP:
return VIEW_ZOOM_DOWN;
case VIEW_ZOOM_DOWN:
return VIEW_ZOOM_UP;
default:
break;
}
}
break;
case HAL_JPEG_OPERATION_RCC:
{
switch (bAction)
{
case VIEW_ZOOM_LEFT:
return VIEW_ZOOM_UP;
case VIEW_ZOOM_RIGHT:
return VIEW_ZOOM_DOWN;
case VIEW_ZOOM_UP:
return VIEW_ZOOM_RIGHT;
case VIEW_ZOOM_DOWN:
return VIEW_ZOOM_LEFT;
default:
break;
}
}
break;
case HAL_JPEG_OPERATION_RCFH:
{
switch (bAction)
{
case VIEW_ZOOM_LEFT:
return VIEW_ZOOM_UP;
case VIEW_ZOOM_RIGHT:
return VIEW_ZOOM_DOWN;
case VIEW_ZOOM_UP:
return VIEW_ZOOM_LEFT;
case VIEW_ZOOM_DOWN:
return VIEW_ZOOM_RIGHT;
default:
break;
}
}
break;
case HAL_JPEG_OPERATION_FH:
{
switch (bAction)
{
case VIEW_ZOOM_LEFT:
return VIEW_ZOOM_RIGHT;
case VIEW_ZOOM_RIGHT:
return VIEW_ZOOM_LEFT;
default:
break;
}
}
break;
case HAL_JPEG_OPERATION_FV:
{
switch (bAction)
{
case VIEW_ZOOM_UP:
return VIEW_ZOOM_DOWN;
case VIEW_ZOOM_DOWN:
return VIEW_ZOOM_UP;
default:
break;
}
}
break;
case HAL_JPEG_OPERATION_RCFV:
{
switch (bAction)
{
case VIEW_ZOOM_LEFT:
return VIEW_ZOOM_DOWN;
case VIEW_ZOOM_RIGHT:
return VIEW_ZOOM_UP;
case VIEW_ZOOM_UP:
return VIEW_ZOOM_RIGHT;
case VIEW_ZOOM_DOWN:
return VIEW_ZOOM_LEFT;
default:
break;
}
}
break;
default:
break;
}
#endif
return bAction;
}
//***************************************************************************
// Function : _DoZoomPanDecode
// Abstract :
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes :
//***************************************************************************
void _DoZoomPanDecode(void)
{
#ifndef NO_PICTURECD
_JPEGDecodeCmd(HAL_JPEG_NODECODE, __bZoomFactor);
__dwCheckTime=UTL_GetSysTimer();
while((UTL_GetSysTimer()-__dwCheckTime) < COUNT_1_SEC)
{
if (HAL_QueryStatus(HAL_JPEG_DECODE_STATUS) == HAL_QUERY_RESULT_OK)
{
//HAL_Display(HAL_DISPLAY_JPEG, HAL_JPEG_DECODE);
_JPEGDisplay(HAL_JPEG_NODECODE);
#ifndef SUPPORT_JPEG_3_FRAMES
__btActiveFrame = !__btActiveFrame;
#endif
break;
}
}
#endif
}
//***************************************************************************
// Function : HAL_JPEGCanDoEffect
// Abstract : This function will judge current picture can do effect or not.
// Arguments :
// Return : TRUE==>Can do effect. FALSE==>Can't do effect.
// Side Effect : none.
// Notes :
//***************************************************************************
BYTE HAL_JPEGCanDoEffect(void)
{
#ifndef NO_PICTURECD
_JPEGGetFitWidthOrHeight();
if (_bJPEGfit == HAL_JPEG_DISPLAY_FIT_WIDTH)
{
if (_wJPEGRealWidth < __wWidth)
{
return FALSE;
}
}
else if (_bJPEGfit == HAL_JPEG_DISPLAY_FIT_HEIGHT)
{
if (_wJPEGRealHeight < __wHeight)
{
return FALSE;
}
}
return TRUE;
#endif
}
//CoCo.newJPEG
//***************************************************************************
// Function : _JPEGFirstScaling
// Abstract : Do the first scaling to tell RISC scaling 3 frame buffer(big original buffer)
// : to one frame buffer. (720x480) This function will save the result to
// : W99AV_DRAM_JPEG_SIZE for RISC before decoding.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes : Modify _wJPEGRealWidth and _wJPEGRealHeight.
//***************************************************************************
void _JPEGFirstScaling(void)
{
#ifndef NO_PICTURECD
//CT908 can get the real size of JPEG after parsing header.
_JPEGRealSize();
#ifdef SUPPORT_JPEG_KEEP_1X1_RATIO
if (__bDVDROM)
{
__wHALJPEGFirstScalingWidth = HAL_DISPLAY_DVD_JPEG_FIRST_SCALING_WIDTH;
__wHALJPEGFirstScalingHeight = HAL_DISPLAY_DVD_JPEG_FIRST_SCALING_HEIGHT;
}
else
{
__wHALJPEGFirstScalingWidth = HAL_DISPLAY_CD_JPEG_FIRST_SCALING_WIDTH;
__wHALJPEGFirstScalingHeight = HAL_DISPLAY_CD_JPEG_FIRST_SCALING_HEIGHT;
}
#else
__wHALJPEGFirstScalingWidth = __wHALJPEGDisplayBufWidth;
__wHALJPEGFirstScalingHeight = __wHALJPEGDisplayBufHeight;
#endif
// if (_wJPEGRealWidth/_wJPEGRealHeight < DisplayWidth/DisplayHeight)==>fit height
//fit height
if ((DWORD)((DWORD)_wJPEGRealWidth * (DWORD)__wHALJPEGFirstScalingHeight) <
(DWORD)((DWORD)_wJPEGRealHeight * (DWORD)__wHALJPEGFirstScalingWidth))
{
//fit height
if (_wJPEGRealHeight > __wHALJPEGFirstScalingHeight)
{
//Can't exchange the sequence of calculating the width and height
//Real width must be 8's multiple.
_wJPEGRealWidth = (WORD)((DWORD)_wJPEGRealWidth * (DWORD)__wHALJPEGFirstScalingHeight / (DWORD)_wJPEGRealHeight);
_ForceTo8Multiple(&_wJPEGRealWidth);
_wJPEGRealHeight = __wHALJPEGFirstScalingHeight;
}
}
else //fit width
{
if (_wJPEGRealWidth > __wHALJPEGFirstScalingWidth)
{
//Can't exchange the sequence of calculating the width and height
//Real height must be 2's multiple.
_wJPEGRealHeight = (WORD)((DWORD)_wJPEGRealHeight * (DWORD)__wHALJPEGFirstScalingWidth / (DWORD)_wJPEGRealWidth);
/*
if (_wJPEGRealHeight % 2)
_wJPEGRealHeight -= 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -