Kernel : AvSendTVEncoderOption expanded with all possible options

This commit is contained in:
PatrickvL 2017-02-24 11:50:40 +01:00
parent 7bd2e61d3e
commit 20e9cd0131
3 changed files with 117 additions and 13 deletions

View File

@ -12,8 +12,6 @@
#ifndef XBOX_H
#define XBOX_H
#define AV_FLAGS_60Hz 0x00400000
#define AV_FLAGS_50Hz 0x00800000
#define AV_PACK_NONE 0x00000000
#define AV_PACK_STANDARD 0x00000001
#define AV_PACK_RFU 0x00000002
@ -23,12 +21,55 @@
#define AV_PACK_SVIDEO 0x00000006
#define AV_PACK_MAX 0x00000007
#define AV_PACK_MASK 0x000000FF
#define AV_STANDARD_NTSC_M 0x00000100
#define AV_STANDARD_NTSC_J 0x00000200
#define AV_STANDARD_PAL_I 0x00000300
#define AV_STANDARD_PAL_M 0x00000400
#define AV_STANDARD_MAX 0x00000500
#define AV_QUERY_AV_CAPABILITIES 6
#define AV_STANDARD_MASK 0x00000F00
#define AV_STANDARD_SHIFT 8
#define AV_FLAGS_HDTV_480i 0x00000000 // Bogus 'flag'
#define AV_FLAGS_HDTV_720p 0x00020000
#define AV_FLAGS_HDTV_1080i 0x00040000
#define AV_FLAGS_HDTV_480p 0x00080000
#define AV_HDTV_MODE_MASK 0x000E0000 // Exclude AV_FLAGS_WIDESCREEN !
#define AV_FLAGS_WIDESCREEN 0x00010000
#define AV_FLAGS_LETTERBOX 0x00100000
#define AV_ASPECT_RATIO_MASK 0x00110000 // = AV_FLAGS_WIDESCREEN | AV_FLAGS_LETTERBOX
#define AV_FLAGS_INTERLACED 0x00200000
#define AV_FLAGS_60Hz 0x00400000
#define AV_FLAGS_50Hz 0x00800000
#define AV_REFRESH_MASK 0x00C00000 // = AV_FLAGS_60Hz | AV_FLAGS_50Hz
#define AV_FLAGS_FIELD 0x01000000
#define AV_FLAGS_10x11PAR 0x02000000
#define AV_USER_FLAGS_MASK (AV_HDTV_MODE_MASK | AV_ASPECT_RATIO_MASK | AV_REFRESH_MASK) // TODO : Should AV_REFRESH_MASK be AV_FLAGS_60Hz instead?
#define AV_USER_FLAGS_SHIFT 16
// Options to AvSendTVEncoderOption() :
#define AV_OPTION_MACROVISION_MODE 1
#define AV_OPTION_ENABLE_CC 2
#define AV_OPTION_DISABLE_CC 3
#define AV_OPTION_SEND_CC_DATA 4
#define AV_QUERY_CC_STATUS 5
#define AV_QUERY_AV_CAPABILITIES 6
#define AV_OPTION_BLANK_SCREEN 9
#define AV_OPTION_MACROVISION_COMMIT 10
#define AV_OPTION_FLICKER_FILTER 11
#define AV_OPTION_ZERO_MODE 12
#define AV_OPTION_QUERY_MODE 13
#define AV_OPTION_ENABLE_LUMA_FILTER 14
#define AV_OPTION_GUESS_FIELD 15
#define AV_QUERY_ENCODER_TYPE 16
#define AV_QUERY_MODE_TABLE_VERSION 17
#define AV_OPTION_CGMS 18
#define AV_OPTION_WIDESCREEN 19
// ******************************************************************
// * 0x0001 - AvGetSavedDataAddress()

View File

@ -58,6 +58,21 @@ namespace NtDll
// Global Variable(s)
PVOID g_pPersistedData = NULL;
ULONG AvQueryAvCapabilities()
{
// This is the only AV mode we currently emulate, so we can hardcode the return value
// TODO: Once we allow the user to configure the connected AV pack, we should implement this proper
// This function should first query the AV Pack type, read the user's EEPROM settings and
// return the correct flags based on this.
//
// For the AV Pack, read SMC_COMMAND_VIDEO_MODE (or HalBootSMCVideoMode) and convert it to a AV_PACK_*
//
// To read the EEPROM, call ExQueryNonVolatileSetting() with these config flags :
// XC_FACTORY_AV_REGION; if that fails, fallback on AV_STANDARD_NTSC_M | AV_FLAGS_60Hz
// XC_VIDEO_FLAGS; if that fails, fallback on 0
return AV_PACK_HDTV | AV_STANDARD_NTSC_M | AV_FLAGS_60Hz;
}
// ******************************************************************
// * 0x0001 - AvGetSavedDataAddress()
// ******************************************************************
@ -126,16 +141,64 @@ XBSYSAPI EXPORTNUM(2) xboxkrnl::VOID NTAPI xboxkrnl::AvSendTVEncoderOption
LOG_FUNC_ARG_OUT(Result)
LOG_FUNC_END;
//if (RegisterBase == NULL)
// RegisterBase = (void *)NV20_REG_BASE_KERNEL;
switch (Option) {
case AV_QUERY_AV_CAPABILITIES:
// This is the only AV mode we currently emulate, so we can hardcode the return value
// TODO: Once we allow the user to configure the connected AV pack, we should implement this proper
// This function should first query the AV Pack type, read the user's EEPROM settings and
// return the correct flags based on this.
*Result = AV_PACK_HDTV | AV_STANDARD_NTSC_M | AV_FLAGS_60Hz;
break;
default:
LOG_UNIMPLEMENTED();
case AV_OPTION_MACROVISION_MODE:
LOG_UNIMPLEMENTED();
break;
case AV_OPTION_ENABLE_CC:
LOG_UNIMPLEMENTED();
break;
case AV_OPTION_DISABLE_CC:
LOG_UNIMPLEMENTED();
break;
case AV_OPTION_SEND_CC_DATA:
LOG_UNIMPLEMENTED();
break;
case AV_QUERY_CC_STATUS:
LOG_UNIMPLEMENTED();
break;
case AV_QUERY_AV_CAPABILITIES:
*Result = AvQueryAvCapabilities();
break;
case AV_OPTION_BLANK_SCREEN:
LOG_UNIMPLEMENTED();
break;
case AV_OPTION_MACROVISION_COMMIT:
LOG_UNIMPLEMENTED();
break;
case AV_OPTION_FLICKER_FILTER:
LOG_UNIMPLEMENTED();
break;
case AV_OPTION_ZERO_MODE:
LOG_UNIMPLEMENTED();
break;
case AV_OPTION_QUERY_MODE:
LOG_UNIMPLEMENTED();
break;
case AV_OPTION_ENABLE_LUMA_FILTER:
LOG_UNIMPLEMENTED();
break;
case AV_OPTION_GUESS_FIELD:
LOG_UNIMPLEMENTED();
break;
case AV_QUERY_ENCODER_TYPE:
LOG_UNIMPLEMENTED();
break;
case AV_QUERY_MODE_TABLE_VERSION:
LOG_UNIMPLEMENTED();
break;
case AV_OPTION_CGMS:
LOG_UNIMPLEMENTED();
break;
case AV_OPTION_WIDESCREEN:
LOG_UNIMPLEMENTED();
break;
default:
// do nothing
break;
}
}

View File

@ -563,7 +563,7 @@ XBSYSAPI EXPORTNUM(334) xboxkrnl::VOID NTAPI xboxkrnl::WRITE_PORT_BUFFER_ULONG
// * 0x0164 - HalBootSMCVideoMode
// ******************************************************************
// TODO: Verify this!
XBSYSAPI EXPORTNUM(356) xboxkrnl::DWORD xboxkrnl::HalBootSMCVideoMode = 1;
XBSYSAPI EXPORTNUM(356) xboxkrnl::DWORD xboxkrnl::HalBootSMCVideoMode = 1; // TODO : AV_PACK_STANDARD?
// ******************************************************************
// * 0x0166 - HalIsResetOrShutdownPending()