HD - Games & Applications - Touch HD Themes and Apps

Note that there is already a list with all working games & applications on HTC Touch HD:
http://wiki.xda-developers.com/index...e=HTC_Software
This list will be updated as much as possible.
--------------------------------------------------------------------------------------------------------------------
Games WVGA:
"Pocket Uno v1.43"
-> resolution: 800x480 (WVGA) || Gsen: No
"Pocket Racko"
-> resolution: 800x480 (WVGA) || Gsen: No
"Spore Origins v1.0.4"
-> resolution: 800x480 (WVGA) || Gsen: No
"Resco Bubbles"
-> resolution: 800x480 (WVGA) || Gsen: Yes
"Software Spider"
-> resolution: 800x480 (WVGA) || Gsen: No
"Omniano"
-> resolution: 800x480 (WVGA) || Gsen: No
"Virtual Pool Mobile v1.74"
-> resolution: 800x480 (WVGA) || Gsen: No
Games ?VGA:
"Age Of Empires I"
-> resolution: 640x480 || Gsen: No
"Snails" (like: Worms)
-> resolution: 640x480 || Gsen: No
"Aces Omaha No Limit"
-> resolution: 640x480 || Gsen: No
Applications WVGA:
"G-Alarm"
-> resolution: 800x480 (WVGA) || Gsen: Yes
"Calc Pro v2.0.5"
-> resolution: 800x480 (WVGA) || Gsen: No
"gMeter"
-> resolution: 800x480 (WVGA) || Gsen: Yes
"MusicID"
-> resolution: 800x480 (WVGA) || Gsen: No
"Nero Mobile v1.4.3"
-> resolution: 800x480 (WVGA) || Gsen: no
"SPB Wireless Monitor v3.0"
-> resolution: 800x480 (WVGA) || Gsen: No
"SPB Finance"
-> resolution: 800x480 (WVGA) || Gsen: no
--------------------------------------------------------------------------------------------------------------------
You can always post new games. They will be added after testing them.
I Will try to put screenshot(s) for each game or application soon.

Related

Javascript coder wanted for help in the kitchen...

I (or rather, all of us...) need some code, and I've never really done any Javascript.
Could someone please code:
- Enable all controls on form 0 of a document.
- Walk through all the controls in order. For each control:
- Make a temporary string that holds the name of the control
- add a slash and the value of the control if it is a checkbox
- Walk through all the controls again
- Disable any controls:
- whose name is longer, but starts with the temp string above
- which are radiobuttons whose name is the temp-string
- done
This would disable any controls that do not apply when the user deselects a higher-level checkbox or radio-button, which would look much cleaner and cooler. I would have to spend most of today on this learning enough Javascript and fixing stupid beginner-bugs, and I would be disapointed if we don't have at least a few people here who can code this in 10 minutes.
Code can be tested by copying the form from the kitchen locally and creating a function to replace the submit placed at every checkbox or radiobutton control.
ok, consider this a beta
i did not follow your design in whole
but still i hope the functionality is the same
email me to [email protected] for any needed changes
my local time is 2:31 after midnight
uh uaah, good night
Code:
<html>
<head>
<script>
function setupDisable() {
var myForm = document.getElementById('myForm');
// enable all of them
for(var i=0; i<myForm.elements.length; i++) {
myForm.elements[i].disabled = false;
}
// foreach assign a tmpName
for(var i=0; i<myForm.elements.length; i++) {
var tmpName = myForm.elements[i].name;
if (myForm.elements[i].type == 'checkbox') {
// IMHO this is not needed and will break the functionality
// and this fact renders this whole cycle useless :)
// you can just use the name
// property in fuiction doDisable...
//tmpName += '/' + myForm.elements[i].value;
}
myForm.elements[i].tmpName = tmpName;
}
}
function doDisable(root) {
// disable all children
var myName = root.tmpName;
var myForm = document.getElementById('myForm');
if (!root.checked) {
alert('went off');
for(var i=0; i<myForm.elements.length; i++) {
var actName = myForm.elements[i].name;
if (actName.indexOf(myName) == 0 && actName != myName) {
myForm.elements[i].disabled = true;
}
}
} else {
alert('went on');
for(var i=0; i<myForm.elements.length; i++) {
var actName = myForm.elements[i].name;
if (actName.indexOf(myName) == 0 && actName != myName) {
myForm.elements[i].disabled = false;
}
}
}
}
</script>
</head>
<body onload="setupDisable()">
<form id="myForm">
<INPUT TYPE="checkbox" name="in1" onclick="doDisable(this)">in1
<INPUT TYPE="checkbox" name="in2" onclick="doDisable(this)">in2
<INPUT TYPE="radio" name="in2/1" value="1" onclick="doDisable(this)">in2/1
<INPUT TYPE="radio" name="in2/1" value="2" onclick="doDisable(this)">in2/1
<INPUT TYPE="radio" name="in2/1" value="3" onclick="doDisable(this)">in2/1
</form>
</body>
</html>

[How To] WM Dialer moding (tapres.dll.0xxx.mui)

Tuto: Modification of a Dialer​
Hello everyone,
This Tuto allowing to intervene directly on the resources of your dialer. Ie DLL.
Advantages: No additional resource, only those origins. So, not one gram of fat added. A Dialer 0%
The items made available or examples are from the rom of my LG KS20 QVGA (Rom KisS20 of Spocky), you've got to bring such changes to your devices.
1) Resources (DLL)
First you must know that your dialer is mainly used two resources:
The first is by "default" of WM. It tapres.dll.0xxx.mui nome. XXX is the language ID (FR = 040C -> tapres.dll.040C.mui).
The second is usually the manufacturer. It is here to provide additional functionality (type video calls), and / or skin.
The name of this DLL can be found here ->
[HKEY_LOCAL_MACHINE\Security\Phone\Skin] [HKEY_LOCAL_MACHINE \ Security \ Phone \ Skin]
"Enabled" = dword: 00000000
"ext" = "\ windows \ Your DLL.dll"
To activate one or the other DLLs just go "Enabled" = dword: 0000000 0 (DLL by default) to 1 (DLL constructor).
Every two are in the Windows directory on your PPC.
2) Images
Your default dialer is composed of the following images:
dlrback_land.png--------->Background dialer
dlrback_port.png
dlrbtndef_dwn_land.gif--> buttons for the functions call, speed dial, etc.
dlrbtndef_dwn_port.gif
dlrbtndef_up_land.gif
dlrbtndef_up_port.gif
dlrbtnend_up_land.gif----> button "Done"
dlrbtnend_up_port.gif
dlrbtntalk_up_land.gif----> button "Call"
dlrbtntalk_up_port.gif
dlrbtn_dwn_land.gif------> other keys (numbers / letters)
dlrbtn_dwn_port.gif
dlrbtn_up_land.gif
dlrbtn_up_port.gif
"Port" for the portrait, "Land" for landscape mode. "Up" for keys not pressed, "dwn" for keys pressed.
Note: The images used for the buttons' functions are identical to the keys "call status".
3) Tools
A resource editor (Restorator, Resource Tuner etc)
Unsigned MSigner and to sign your DLL amended
Drawing software (Photoshop and others)
The notepad ...
4) Modification of resources (DLL)
With the help of your editor and open your DLL go to the directory Dialog.
Resources 22500 (dialer, landscape mode), 22507 (call status landscape mode), 22509 (dialer, portrait mode) and 22510 (call status portrait) define your dialer.
Change the size and location of images of different elements. The keyboard, calling area, the SmartDial ....
Example using 0 to 9
CONTROL "", 23041, "MS_PHONE_BUTTON", 1, 122, 52, 36 ----> Size
CONTROL "", 23042, "MS_PHONE_BUTTON", 54, 122, 52, 36 ----> Implantation
CONTROL "", 23041, "MS_PHONE_BUTTON", 1 , 122 , 52 , 36 CONTROL "", 23041, "MS_PHONE_BUTTON", 1, 122, 52, 36
The first 2 values Y = X and X is the location left / right and Y up / down
Les 2 autres = taille de l'image, longueur / largeur The other 2 = image size, length / width
Save your new DLL, sign here and test.
5) Edit pictures
Nothing special ...
In my previous example the size of my images is increased to 52x36. So I created new images to this size. They replace the original (dlrbtndef_dwn_port.gif, dlrbtndef_up_land.gif, dlrbtndef_up_port.gif ...).
Open a simple image viewer, Edit -> resize -> Save 52x36
Go to the experts Edit -> change color -> Save.
6) Putting
I change my DLL tapres.dll.040C.mui as follows:
Dialog 22509
..... .....
CONTROL "", 23041, "MS_PHONE_BUTTON", 1, 122, 52, 36
CONTROL "", 23042, "MS_PHONE_BUTTON", 54, 122, 52, 36
CONTROL "", 23043, "MS_PHONE_BUTTON", 107, 122, 52, 36
CONTROL "", 23044, "MS_PHONE_BUTTON", 1, 159, 52, 36
CONTROL "", 23045, "MS_PHONE_BUTTON", 54, 159, 52, 36
CONTROL "", 23046, "MS_PHONE_BUTTON", 107, 159, 52, 36
CONTROL "", 23047, "MS_PHONE_BUTTON", 1, 196, 52, 36
CONTROL "", 23048, "MS_PHONE_BUTTON", 54, 196, 52, 36
CONTROL "", 23049, "MS_PHONE_BUTTON", 107, 196, 52, 36
CONTROL "", 23051, "MS_PHONE_BUTTON", 1, 233, 52, 36
CONTROL "", 23050, "MS_PHONE_BUTTON", 54, 233, 52, 36
CONTROL "", 23052, "MS_PHONE_BUTTON", 107, 233, 52, 36
CONTROL "", 23001, "MS_PHONE_BUTTON", 160, 122, 79, 36
CONTROL "", 23012, "MS_PHONE_BUTTON", 160, 159, 79, 36
CONTROL "", 23011, "MS_PHONE_BUTTON", 160, 196, 79, 36
CONTROL "", 23014, "MS_PHONE_BUTTON", 160, 233, 79, 36
..... .....
I also modified the original image and I let [HKEY_LOCAL_MACHINE \ Security \ Phone \ Skin]
"Enabled" = dword: 0000000 0 for do not call for anything else (DLL or manufacturer, or a skin external).
Here is the result
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
7) The base registry
From the registry you can almost touch any settings for your Skin, images, text, color etc..
In the example above you can see that the text is centered, the figures are white, the letters are gray. Here's how to proceed.
"Enabled" = dword: 0000000 1 ---> Skin Active
[HKEY_LOCAL_MACHINE\Security\Phone\Skin\Dialer\Landscape\dialbutton]
"MajorFlags" = dword: 00000005 -------> centered position of Figures dialer
"MinorFlags" = dword: 00000005 -------> centered position of Letters from the dialer
"MajorColor" = dword: 00ffffff -------> Color numbers (00ffffff = white)
"MinorColor" = dword: 00cccccc -------> Color Letters (00cccccc = gray)
[HKEY_LOCAL_MACHINE\Security\Phone\Skin\Dialer\Portrait\dialbutton]
"MinorFlags" = dword: 00000005
"MajorFlags" = dword: 00000005
"MajorColor" = dword: 00ffffff
"MinorColor" = dword: 00cccccc
It can also affect the style MajorRCMLStyle ...
For the "textFlags" position is defined as:
dword 0 : top left
dword 1 : top center
dword 2 : top right
dword 4 : middle left
dword 5 : middle center (default value)
dword 6 : middle right
dword 8 : bottom left
dword 9 : bottom center
dword A : bottom right
In my case I have 5, one centering vertically and horizontally (almost perfect because the numbers and letters are struggling a bit them secret ) )
"textLayoutFlags" : "textLayoutFlags":
dword 0: Numbers, then Letters
dword 1: Letters, Numbers then
dword 2: just numbers (no letters)
In my case I have 0 ...
Here are the keys to BDR that you can learn:
HKLM\Security\Phone\Skin\ =This is the main key for phone skins
DIALER = This is the main dial pad that you dial phone numbers on
LANDSCAPE and PORTRAIT = The orientation or the dialpad phone you should change the same key in both orientation to stay consistant
text = Text in the "Information Window" The one that shows last number dialed, contact info, etc.
textColor = Color of the text in the information window
dialbutton = Button that displays the numbers you dial
MajorColor = Color of the dial button digits
MinorColor = Color of the dial button text (abc, def)
MajorRCMLStyle = Size of the dial button digit, HEX values are smaller for the 1 through 20 for the largest (1a, 1b, 1c, etc.)
MinorRCMLStyle = Size of the dial button text, HEX values are smaller for the 1 through 20 for the largest (1a, 1b, 1c, etc.)
MajorFlags = Position of the number on the dial button, values are 1-13 (decimal), IE, Upperleft, bottomright, center, etc. (Hex 400 makes the text invisible)
MinorFlags = Position of the text on the dial button, values are 1-13 (decimal), IE, Upperleft, bottomright, center, etc. (Hex 400 makes the text invisible)
bmpNormal = Path to the Bitmap you see when you are not touching the keys
bmpPressed = Path to the Bitmap you see when you press a dial key
bmpFlags = Adjusts the alignment of the bitmap on the key, not commonly used
bmpTransparency = Transparency of the bitmap and ability to show through backgound image
bmpDisabled = Bitmap that displays if the button goes disabled, like "Hold" is disabled if you are not in call
erasebutton = Button that erases digits you typed (Usually the back arrow)
bmpNormal = Path to the Bitmap you see when you are not touching the keys
bmpPressed = Path to the Bitmap you see when you press a dial key
bmpFlags = Adjusts the alignment of the bitmap on the key, not commonly used
bmpTransparency = Transparency of the bitmap and ability to show through backgound image
bmpDisabled = Bitmap that displays if the button goes disabled, like "Hold" is disabled if you are not in call
VerbButton = Button (f0f0f special value will make the text invisible on the textFlags key)
textColor = Color of the "Call History" text
textRCMLStyle = Size of the "Call History" text, HEX values are smaller for the 1 through 20 for the largest (1a, 1b, 1c, etc.)
textFlags = Position of the "Call History" button on the text, values are 1-13 (decimal), IE, Upperleft, bottomright, center, etc.
bmpNormal = Path to the Bitmap you see when you are not touching the keys
bmpPressed = Path to the Bitmap you see when you press a dial key
bmpFlags = Adjusts the alignment of the bitmap on the key, not commonly used
bmpTransparency = Transparency of the bitmap and ability to show through backgound image
bmpDisabled = Bitmap that displays if the button goes disabled, like "Hold" is disabled if you are not in call
textDisabledColor = text of the disabled in the event a button goes disabled
other = Only used to define the page background
bmpNormal = Path to the image used in the background
TalkEndButton = The setting for the combined talk / end button
bmpDisabledEnd = Bitmap that displays when the End button goes disabled
bmpDisabledTalk = Bitmap that displays when the Talk button goes disabled
bmpFlagsEnd = Adjusts the alignment of the bitmap on the key, not commonly used
bmpFlagsTalk = Adjusts the alignment of the bitmap on the key, not commonly used
bmpNormalEnd = Path to the Bitmap you see when End is active
bmpNormalTalk = Path to the Bitmap you see when Talk is active
bmpPressedEnd = Path to the Bitmap you see when End is pressed
bmpPressedTalk = Path to the Bitmap you see when Talk is pressed
bmpTransparencyEnd = End of the bitmap and ability to show through backgound image
bmpTransparencyTalk = Transparency of the Talk bitmap and ability to show through backgound image Transparency
PROGRESS = This is the "In Call" page you see when on a call
VerbButton = Call History Button (special value f0f0f will make the text invisible on the textFlags key)
textColor = Color of the "Call History" text
textRCMLStyle = Size of the "Call History" text, values are HEX 1a for the smaller through 20 for the largest (1a,1b,1c, etc)
textFlags = Position of the "Call History" text on the button, values are 1-13 (decimal), IE, Upperleft, bottomright, center,etc
bmpNormal = Path to the Bitmap you see when you are not touching the keys
bmpPressed = Path to the Bitmap you see when you press a dial key
bmpFlags = Adjusts the alignment of the bitmap on the key, not commonly used
bmpTransparency = Transparency of the bitmap and ability to show through backgound image
bmpDisabled = Bitmap that displays if the button goes disabled, like "Hold" is disabled if you are not in call
other =Only used to define the background page
bmpNormal = Path to the image used in the background
TalkEndButton = The setting for the combined talk/end button
bmpDisabledEnd = Bitmap that displays when the End button goes disabled
bmpDisabledTalk = Bitmap that displays when the Talk button goes disabled
bmpFlagsEnd = Adjusts the alignment of the bitmap on the key, not commonly used
bmpFlagsTalk = Adjusts the alignment of the bitmap on the key, not commonly used
bmpNormalEnd = Path to the Bitmap you see when End is active
bmpNormalTalk = Path to the Bitmap you see when Talk is active
bmpPressedEnd = Path to the Bitmap you see when End is pressed
bmpPressedTalk = Path to the Bitmap you see when Talk is pressed
bmpTransparencyEnd = Transparency of the End bitmap and ability to show through backgound image
bmpTransparencyTalk = Transparency of the Talk bitmap and ability to show through backgound image
text =Text in the "Information Window" The one that shows last number dialed, contact info, etc
textColor = Color of the text in the information window
8) Problems
For those who have already installed a dialer skin you must delete all keys added to the registry.
HKEY_LOCAL_MACHINE \ Security \ Phone \ Skin \ DIALER (entire directory)
HKEY_LOCAL_MACHINE \ Security \ Phone \ Skin \ PROGRESS (entire directory)
For HTC but also look here, if problems in displaying and / or color persisted.
[HKEY_LOCAL_MACHINE\Software\HTC\PHONE]
[HKEY_LOCAL_MACHINE\SOFTWARE\HTC\SmartDialing]
You have to play.
Thank you to Mat for the Tuto clarification and all those involved in its improvement.
Rickou26 (Or Arthemus).
My File
@+ Rickou26
very nice tutorial
thanks a lot
Thank you sheennick123456.
Hi,
A new screnn
Thanks rickou26 , I'm gonna give it a try and make my own.
Hi,
Good, we look forward to the result
By.
tested the value for size of caracters for history call
not working on touch pro wm6.1
Hi,
Update new build 23028 or newer and VideoDialer for LG KS20.
To remove the scroll bar just to make the following change -> HKLM \ System \ GWE \ cxVScr = 0
By.
Hello,
For KS20 user :
change only this key to swap Videodialer/WmDialer
[HKEY_LOCAL_MACHINE\Security\Phone\Skin] [HKEY_LOCAL_MACHINE \ Security\ Phone\ Skin]
"ext" = "" -> Wm Dialer
"ext" = "\windows\LgePhoneExt.dll" Video Dialer
By
Good Tutorial but I have a little problem with DLL: I couldn't copy it on PC to change button size (I tried with Resco Explorer and PC Explorer).
I have a Touch HD with WM6.5 (see signature to specific ROM)
Thanks a lot ^^
D'rath
Hi,
The simplest is to retrieve the DLL directly in the source files of the ROM (OEM or SYS). WM files are identical regardless of the PPC so you can use packetages filed by Da_G.
For your problem is simply that these DLLs are identified as belonging to the ROM which sometimes blocks their copy ...
By.
Hello,
build 23420 update to MediaFire.
By.
Thank you for this tutorial, awesome work!
rickou26 said:
Hello,
build 23420 update to MediaFire.
By.
Click to expand...
Click to collapse
Your dialer is nice and slick with latest pureblack theme compatible with COM3/4 branch. Great combo
Great tuto!! I have been through this many times and have yet to have success! It seems though this tuto is pre WM6.5 so I'm wondering if the .dll that the dialer calls on has changed in WM6.5? Or maybe the .dll I need to edit is different as I have a Samsung Omnia. I made all of the changes in tapres.dll.0409.mui and changed the image sizes accordingly but the dialer does not change! Any help?? I noticed the dialog header is 0,0,320,240, in the resource, does this mean it is only for that resolution? Thanks.
Hi,
totalcommander (or resco explorer) used to copy the dll into windows and overwrite the original.
@+
rickou26 said:
Hi,
totalcommander (or resco explorer) used to copy the dll into windows and overwrite the original.
@+
Click to expand...
Click to collapse
I forgot to mention, I am a chef and I am just editing the .dll and then cooking it in. Maybe there is something I am missing there so I will try just adding the edited .dll to the windows directory. Thanks!
If the keyboard appears unchanged is that the original has not been replaced. No keyboard only appears if it is a problem signing the DLL. Also your kitchen must include this signature certificate ;-)
@ +

DirectShow: Video-Preview and taking photo (with working code)

Questions
As mentioned in the text below the TakePicture() method is not working properly on the HTC HD 2 device. It would be nice if someone could look at the code below and tell me if it is right or wrong what I'm doing.
Introduction
I recently asked a question on another forum about displaying a video preview and taking camera image with DirectShow. The tricky thing about the topic is, that it's very hard to find good examples and the documentation and the framework itself is very hard to understand for someone who is new to windows programming and C++ in general.
Nevertheless I managed to create a class that implements most of this features and probably works with most mobile devices. Probably because as far as I know the DirectShow implementation depends a lot on the device itself. I could only test it with the HTC HD and HTC HD2, which are known as quite incompatible.
HTC HD
- Working: Video preview, writing photo to file
- Not working: Set video resolution (CRASH), set photo resolution (LOW quality)
HTC HD 2
- Working: Set video resolution, set photo resolution
- Problematic: Video Preview rotated
- Not working: Writing photo to file
To make it easier for others by providing a working example, I decided to share everything I have got so far below. I removed all of the error handling for the sake of simplicity. As far as documentation goes, I can recommend you to read the MSDN documentation about the topic. After that the code below is pretty straight forward.
Code:
void Camera::Init()
{
CreateComObjects();
_captureGraphBuilder->SetFiltergraph(_filterGraph);
InitializeVideoFilter();
InitializeStillImageFilter();
}
Dipslay a video preview (working with any tested handheld):
Code:
void Camera::DisplayVideoPreview(HWND windowHandle)
{
IVideoWindow *_vidWin;
_filterGraph->QueryInterface(IID_IMediaControl,(void **) &_mediaControl);
_filterGraph->QueryInterface(IID_IVideoWindow, (void **) &_vidWin);
_videoCaptureFilter->QueryInterface(IID_IAMVideoControl,
(void**) &_videoControl);
_captureGraphBuilder->RenderStream(&PIN_CATEGORY_PREVIEW,
&MEDIATYPE_Video, _videoCaptureFilter, NULL, NULL);
CRect rect;
long width, height;
GetClientRect(windowHandle, &rect);
_vidWin->put_Owner((OAHWND)windowHandle);
_vidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);
_vidWin->get_Width(&width);
_vidWin->get_Height(&height);
height = rect.Height();
_vidWin->put_Height(height);
_vidWin->put_Width(rect.Width());
_vidWin->SetWindowPosition(0,0, rect.Width(), height);
_mediaControl->Run();
}
HTC HD2: If set SetPhotoResolution() is called FindPin will return E_FAIL. If not, it will create a file full of null bytes. HTC HD: Works
void Camera::TakePicture(WCHAR *fileName)
{
CComPtr<IFileSinkFilter> fileSink;
CComPtr<IPin> stillPin;
CComPtr<IUnknown> unknownCaptureFilter;
CComPtr<IAMVideoControl> videoControl;
_imageSinkFilter.QueryInterface(&fileSink);
fileSink->SetFileName(fileName, NULL);
_videoCaptureFilter.QueryInterface(&unknownCaptureFilter);
_captureGraphBuilder->FindPin(unknownCaptureFilter, PINDIR_OUTPUT,
&PIN_CATEGORY_STILL, &MEDIATYPE_Video, FALSE, 0, &stillPin);
_videoCaptureFilter.QueryInterface(&videoControl);
videoControl->SetMode(stillPin, VideoControlFlag_Trigger);
}
Set resolution: Works great on HTC HD2. HTC HD won't allow SetVideoResolution() and only offers one low resolution photo resolution:
Code:
void Camera::SetVideoResolution(int width, int height)
{
SetResolution(true, width, height);
}
void Camera::SetPhotoResolution(int width, int height)
{
SetResolution(false, width, height);
}
void Camera::SetResolution(bool video, int width, int height)
{
IAMStreamConfig *config;
config = NULL;
if (video)
{
_captureGraphBuilder->FindInterface(&PIN_CATEGORY_PREVIEW,
&MEDIATYPE_Video, _videoCaptureFilter, IID_IAMStreamConfig,
(void**) &config);
}
else
{
_captureGraphBuilder->FindInterface(&PIN_CATEGORY_STILL,
&MEDIATYPE_Video, _videoCaptureFilter, IID_IAMStreamConfig,
(void**) &config);
}
int resolutions, size;
VIDEO_STREAM_CONFIG_CAPS caps;
config->GetNumberOfCapabilities(&resolutions, &size);
for (int i = 0; i < resolutions; i++)
{
AM_MEDIA_TYPE *mediaType;
if (config->GetStreamCaps(i, &mediaType,
reinterpret_cast<BYTE*>(&caps)) == S_OK )
{
int maxWidth = caps.MaxOutputSize.cx;
int maxHeigth = caps.MaxOutputSize.cy;
if(maxWidth == width && maxHeigth == height)
{
VIDEOINFOHEADER *info =
reinterpret_cast<VIDEOINFOHEADER*>(mediaType->pbFormat);
info->bmiHeader.biWidth = maxWidth;
info->bmiHeader.biHeight = maxHeigth;
info->bmiHeader.biSizeImage = DIBSIZE(info->bmiHeader);
config->SetFormat(mediaType);
DeleteMediaType(mediaType);
break;
}
DeleteMediaType(mediaType);
}
}
}
Other methods used to build the filter graph and create the COM objects:
v
Code:
oid Camera::CreateComObjects()
{
CoInitialize(NULL);
CoCreateInstance(CLSID_CaptureGraphBuilder, NULL, CLSCTX_INPROC_SERVER,
IID_ICaptureGraphBuilder2, (void **) &_captureGraphBuilder);
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **) &_filterGraph);
CoCreateInstance(CLSID_VideoCapture, NULL, CLSCTX_INPROC,
IID_IBaseFilter, (void**) &_videoCaptureFilter);
CoCreateInstance(CLSID_IMGSinkFilter, NULL, CLSCTX_INPROC,
IID_IBaseFilter, (void**) &_imageSinkFilter);
}
void Camera::InitializeVideoFilter()
{
_videoCaptureFilter->QueryInterface(&_propertyBag);
wchar_t deviceName[MAX_PATH] = L"\0";
GetDeviceName(deviceName);
CComVariant comName = deviceName;
CPropertyBag propertyBag;
propertyBag.Write(L"VCapName", &comName);
_propertyBag->Load(&propertyBag, NULL);
_filterGraph->AddFilter(_videoCaptureFilter,
L"Video Capture Filter Source");
}
void Camera::InitializeStillImageFilter()
{
_filterGraph->AddFilter(_imageSinkFilter, L"Still image filter");
_captureGraphBuilder->RenderStream(&PIN_CATEGORY_STILL,
&MEDIATYPE_Video, _videoCaptureFilter, NULL, _imageSinkFilter);
}
void Camera::GetDeviceName(WCHAR *deviceName)
{
HRESULT hr = S_OK;
HANDLE handle = NULL;
DEVMGR_DEVICE_INFORMATION di;
GUID guidCamera = { 0xCB998A05, 0x122C, 0x4166, 0x84, 0x6A, 0x93, 0x3E,
0x4D, 0x7E, 0x3C, 0x86 };
di.dwSize = sizeof(di);
handle = FindFirstDevice(DeviceSearchByGuid, &guidCamera, &di);
StringCchCopy(deviceName, MAX_PATH, di.szLegacyName);
}
Full header file:
Code:
#ifndef __CAMERA_H__
#define __CAMERA_H__
class Camera
{
public:
void Init();
void DisplayVideoPreview(HWND windowHandle);
void TakePicture(WCHAR *fileName);
void SetVideoResolution(int width, int height);
void SetPhotoResolution(int width, int height);
private:
CComPtr<ICaptureGraphBuilder2> _captureGraphBuilder;
CComPtr<IGraphBuilder> _filterGraph;
CComPtr<IBaseFilter> _videoCaptureFilter;
CComPtr<IPersistPropertyBag> _propertyBag;
CComPtr<IMediaControl> _mediaControl;
CComPtr<IAMVideoControl> _videoControl;
CComPtr<IBaseFilter> _imageSinkFilter;
void GetDeviceName(WCHAR *deviceName);
void InitializeVideoFilter();
void InitializeStillImageFilter();
void CreateComObjects();
void SetResolution(bool video, int width, int height);
};
#endif
Hey, in the FindInterface for the you're not checking the return code, which has to be S_OK; if not, the config is NULL and using config-> will cause your crash. If FindInterface for PIN_CATEGORY_PREVIEW is failing, try FindInterface for PIN_CATEGORY_CAPTURE.

[Guide] Floating in circular boundary (or rectangular) with accelerometer sensor

This guide is about floating, moving a point in coordinate system.
It may be useful to make spirit level (bubble level) or magic 8 ball and so on
Just use device's accelerometer sensor to moving a center point.
I wrote android custom view which implements SensorEventListener.
Do some initialization (measuring screen size, set boundary size, assign values...) first.
Draw the x, y axis and boundary and little circle.
In end of the onDraw(), invalidate() makes little circle keep moving.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Important formula to make little circle inside circular boundary is below.
Code:
private void calc(){
//for simulating object floating on water
//against gravity
xCon += mSensorX;
yCon -= mSensorY;
/*
//for simulating object rolling on ground
//adjust to gravity
xCon -= mSensorX;
yCon += mSensorY;
*/
//for circular boundary
if(Math.pow(xCon, 2) + Math.pow(yCon, 2) >= boundarySquare){
isBoundaryOut = true;
[COLOR="SeaGreen"] if(xCon != 0 && yCon != 0){
radian = (float) Math.atan2(yCon, xCon);
}[/COLOR]
[COLOR="RoyalBlue"] xCon = (float) (Math.cos(radian) * boundary);
yCon = (float) (Math.sin(radian) * boundary);[/COLOR]
}
else{
isBoundaryOut = false;
}
}
add the sensor's value to x, y coordinate (xCon, yCon) and check it is out of the circular boundary.
If it is change the value with the Formula
x = cos(atan2(y, x)) * CIRCULAR_BOUDNARY_RADIUS
y = sin(atan2(y, x)) * CIRCULAR_BOUDNARY_RADIUS
You can select the circle to float on water or roll on ground just change addition <-> subtraction.
- For simulating object floating on water, against gravity
xCon += mSensorX;
yCon -= mSensorY;
- For simulating object rolling on ground, adjust to gravity
xCon -= mSensorX;
yCon += mSensorY;
Also you can change boundary shape easily
For rectangle boundary
if(xCon > horizontalBound){
xCon = horizontalBound;
}
else if(xCon < -horizontalBound){
xCon = -horizontalBound;
}
if(yCon > verticalBound){
yCon = verticalBound;
}
else if(yCon < -verticalBound){
yCon = -verticalBound;
}
Code:
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
return;
mSensorX = sensor_weight * event.values[0];
mSensorY = sensor_weight * event.values[1];
}
onSensorChanged() I just add sensor values(weighted) to center point x, y and it seems to be quite enough to do rough simulation.
Whole source code of my custom view is like below.
Code:
package net.gerosyab.circularboundary;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.AttributeSet;
import android.view.Display;
import android.view.Surface;
import android.view.View;
import android.view.WindowManager;
public class MyView extends View implements SensorEventListener{
Context context;
//weight for calculating speed of floating image
//multiplied with accelrometer sensor value
//faster if it is more than 1
//slower if it is less than 1
float sensor_weight = 2.15f;
float width;
float height;
float cx;
float cy;
float x;
float y;
float xCon, yCon;
float boundary;
float boundarySquare;
float dotRadius = 15;
float radian;
Paint linePaint, circlePaint, dotPaint, textPaint;
float horizontalBound;
float verticalBound;
boolean isBoundaryOut = false;
private float mSensorX;
private float mSensorY;
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private WindowManager mWindowManager;
private Display mDisplay;
public MyView(Context context) {
super(context);
this.context = context;
init();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
init();
}
public MyView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
init();
}
private void init(){
linePaint = new Paint();
circlePaint = new Paint();
dotPaint = new Paint();
textPaint = new Paint();
linePaint.setColor(Color.WHITE );
linePaint.setAntiAlias(true);
linePaint.setStrokeWidth(2);
linePaint.setStyle(Paint.Style.STROKE);
circlePaint.setColor(Color.YELLOW);
circlePaint.setAntiAlias(true);
circlePaint.setStrokeWidth(2);
circlePaint.setStyle(Paint.Style.STROKE);
dotPaint.setColor(Color.RED);
dotPaint.setAntiAlias(true);
dotPaint.setStrokeWidth(5);
dotPaint.setStyle(Paint.Style.FILL);
textPaint.setColor(Color.WHITE);
textPaint.setAntiAlias(true);
textPaint.setStyle(Paint.Style.FILL_AND_STROKE);
textPaint.setTextSize(40);
x = cx;
y = cy;
xCon = 0;
yCon = 0;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//draw x, y axis
canvas.drawLine(cx, 0, cx, height, linePaint);
canvas.drawLine(0, cy, width, cy, linePaint);
//draw circular boundary
canvas.drawCircle(cx, cy, boundary, circlePaint);
canvas.drawRect(cx - horizontalBound, cy - verticalBound, cx + horizontalBound, cy + verticalBound, circlePaint);
calc();
//draw dot
canvas.drawCircle(xCon + cx, yCon + cy, dotRadius, dotPaint);
//draw text
canvas.drawText("isBoundaryOut : " + isBoundaryOut, 100, 50, textPaint);
canvas.drawText("sensorX : " + mSensorX, 100, 100, textPaint);
canvas.drawText("sensorY : " + mSensorY, 100, 150, textPaint);
canvas.drawText("xCon : " + xCon, 100, 200, textPaint);
canvas.drawText("yCon : " + yCon, 100, 250, textPaint);
canvas.drawText("cx : " + cx, 100, 300, textPaint);
canvas.drawText("cy : " + cy, 100, 350, textPaint);
canvas.drawText("horizontalBound : " + horizontalBound, 100, 400, textPaint);
canvas.drawText("verticalBound : " + verticalBound, 100, 450, textPaint);
invalidate();
}
private void calc(){
//for simulating object floating on water
//against gravity
xCon += mSensorX;
yCon -= mSensorY;
/*
//for simulating object rolling on ground
//adjust to gravity
xCon -= mSensorX;
yCon += mSensorY;
*/
/*
//for rectangle boundary
if(xCon > horizontalBound){
xCon = horizontalBound;
}
else if(xCon < -horizontalBound){
xCon = -horizontalBound;
}
if(yCon > verticalBound){
yCon = verticalBound;
}
else if(yCon < -verticalBound){
yCon = -verticalBound;
}
*/
//for circular boundary
if(Math.pow(xCon, 2) + Math.pow(yCon, 2) >= boundarySquare){
isBoundaryOut = true;
if(xCon != 0 && yCon != 0){
radian = (float) Math.atan2(yCon, xCon);
}
xCon = (float) (Math.cos(radian) * boundary);
yCon = (float) (Math.sin(radian) * boundary);
}
else{
isBoundaryOut = false;
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = getWidth();
height = getHeight();
cx = width / 2;
cy = height / 2;
boundary = width * 0.15f;
horizontalBound = boundary;
verticalBound = boundary;
boundarySquare = boundary * boundary;
mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
// Get an instance of the WindowManager
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mDisplay = mWindowManager.getDefaultDisplay();
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_UI);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
return;
switch (mDisplay.getRotation()) {
case Surface.ROTATION_0:
mSensorX = sensor_weight * event.values[0];
mSensorY = sensor_weight * event.values[1];
break;
case Surface.ROTATION_90:
mSensorX = sensor_weight * -event.values[1];
mSensorY = sensor_weight * event.values[0];
break;
case Surface.ROTATION_180:
mSensorX = sensor_weight * -event.values[0];
mSensorY = sensor_weight * -event.values[1];
break;
case Surface.ROTATION_270:
mSensorX = sensor_weight * event.values[1];
mSensorY = sensor_weight * -event.values[0];
break;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mSensorManager.unregisterListener(this);
}
}
Hope this is helpful!
Thanks

How to force 4K EDID on 4K TV?

Hi, I have 58PUS8505 connected to PC with RX6950 XT GPU. Gpu recognize tv as fhd, I can't use amd rsr in 4k becouse of that. How to force 4k edid on tv to make it handshake with gpu as 4k?
EDIT:
I found this patch with custom 4k60hz EDID but author says it's only for apple. How to make it work with windows PC?
Philips 55PUS6262 EDID fix
Philips 55PUS6262 EDID fix. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
Hi,
try to set up the HDMI ports on TV to "OPTIMAL"
[email protected]
I already did it, it only activates HDR, pc still see tv as fhd. Problem is 100% edid. I don't have skills to compilate proper files with 4k edid info.
Hi,
EnTech Taiwan | Utilities | Monitor Asset Manager
with this tool you can read and safe the EDID values. First check all HDMI ports, maybe also changing the cable. Maybe also your graphic card drivers are old.
[email protected]
I bought HDMI 2.1 cable https://www.amazon.nl/gp/product/B0919GTQS9/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1
I tried many drivers for GPU, before every installation I cleand PC with Display Driver Uninstaller in Windows safe mode. Problem still here.
Spoiler: Report from Monitor Asset Manager:
Code:
Monitor
Model name............... Philips FTV
Manufacturer............. Philips
Plug and Play ID......... PHL04C3
Serial number............ n/a
Manufacture date......... 2019, ISO week 19
Filter driver............ None
-------------------------
EDID revision............ 1.3
Input signal type........ Digital
Color bit depth.......... Undefined
Display type............. RGB color
Screen size.............. 1440 x 810 mm (65,0 in)
Power management......... Not supported
Extension blocs.......... 1 (CEA/CTA-EXT)
-------------------------
DDC/CI................... Not supported
Color characteristics
Default color space...... Non-sRGB
Display gamma............ 2,20
Red chromaticity......... Rx 0,640 - Ry 0,330
Green chromaticity....... Gx 0,290 - Gy 0,600
Blue chromaticity........ Bx 0,150 - By 0,060
White point (default).... Wx 0,289 - Wy 0,299
Additional descriptors... None
Timing characteristics
Horizontal scan range.... 15-70kHz
Vertical scan range...... 48-62Hz
Video bandwidth.......... 600MHz
CVT standard............. Not supported
GTF standard............. Not supported
Additional descriptors... None
Preferred timing......... Yes
Native/preferred timing.. 1920x1080p at 60Hz (16:9)
Modeline............... "1920x1080" 148,500 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
Detailed timing #1....... 1920x1080p at 50Hz (16:9)
Modeline............... "1920x1080" 148,500 1920 2448 2492 2640 1080 1084 1089 1125 +hsync +vsync
Standard timings supported
640 x 480p at 60Hz - IBM VGA
800 x 600p at 60Hz - VESA
1024 x 768p at 60Hz - VESA
1680 x 1050p at 60Hz - VESA STD
1440 x 900p at 60Hz - VESA STD
1600 x 1200p at 60Hz - VESA STD
1400 x 1050p at 60Hz - VESA STD
1280 x 800p at 60Hz - VESA STD
1280 x 1024p at 60Hz - VESA STD
1280 x 960p at 60Hz - VESA STD
EIA/CEA/CTA-861 Information
Revision number.......... 3
IT underscan............. Supported
Basic audio.............. Supported
YCbCr 4:4:4.............. Supported
YCbCr 4:2:2.............. Supported
Native formats........... 1
CE video identifiers (VICs) - timing/formats supported
Supported
Supported
Supported
Supported
Supported
1920 x 1080p at 60Hz - HDTV (16:9, 1:1)
1920 x 1080p at 50Hz - HDTV (16:9, 1:1)
1920 x 1080p at 24Hz - HDTV (16:9, 1:1)
1920 x 1080p at 30Hz - HDTV (16:9, 1:1)
1920 x 1080p at 25Hz - HDTV (16:9, 1:1)
1920 x 1080i at 60Hz - HDTV (16:9, 1:1)
1920 x 1080i at 50Hz - HDTV (16:9, 1:1)
1280 x 720p at 60Hz - HDTV (16:9, 1:1)
1280 x 720p at 50Hz - HDTV (16:9, 1:1)
720 x 576p at 50Hz - EDTV (16:9, 64:45)
720 x 480p at 60Hz - EDTV (16:9, 32:27)
720 x 576p at 50Hz - EDTV (4:3, 16:15)
720 x 480p at 60Hz - EDTV (4:3, 8:9)
720 x 576i at 50Hz - Doublescan (16:9, 64:45)
720 x 480i at 60Hz - Doublescan (16:9, 32:27)
720 x 576i at 50Hz - Doublescan (4:3, 16:15)
720 x 480i at 60Hz - Doublescan (4:3, 8:9)
640 x 480p at 60Hz - Default (4:3, 1:1)
1920 x 1080p at 100Hz - HDTV (16:9, 1:1)
1920 x 1080p at 120Hz - HDTV (16:9, 1:1)
1280 x 720p at 100Hz - HDTV (16:9, 1:1)
1280 x 720p at 120Hz - HDTV (16:9, 1:1)
NB: NTSC refresh rate = (Hz*1000)/1001
CE audio data (formats supported)
LPCM 2-channel, 16/20/24 bit depths at 32/44/48/88/96 kHz
AC-3 6-channel, 640k max. bit rate at 32/44/48 kHz
DTS 6-channel, 1536k max. bit rate at 32/44/48 kHz
DD+ 8-channel, 16-bit at 44/48 kHz
DTS-HD 6-channel, 16-bit at 32/44/48/88/96 kHz
DVD-A 8-channel, 16/20 bit depths at 48 kHz
CE speaker allocation data
Channel configuration.... 2.0
Front left/right......... Yes
Front LFE................ No
Front center............. No
Rear left/right.......... No
Rear center.............. No
Front left/right center.. No
Rear left/right center... No
Rear LFE................. No
CE vendor specific data (VSDB)
IEEE registration number. 0x000C03
CEC physical address..... 3.0.0.0
Supports AI (ACP, ISRC).. No
Supports 48bpp........... No
Supports 36bpp........... Yes
Supports 30bpp........... Yes
Supports YCbCr 4:4:4..... Yes
Supports dual-link DVI... No
Maximum TMDS clock....... 300MHz
Audio/video latency (p).. n/a
Audio/video latency (i).. n/a
HDMI video capabilities.. Yes
EDID screen size......... Correct aspect ratio, but approximate size
3D formats supported..... Not supported
Data payload............. 030C003000383C280860010203
CE vendor specific data (VSDB)
IEEE registration number. 0xC45DD8
CEC physical address..... 0.1.7.8
Supports AI (ACP, ISRC).. Yes
Supports 48bpp........... No
Supports 36bpp........... No
Supports 30bpp........... No
Supports YCbCr 4:4:4..... No
Supports dual-link DVI... No
Maximum TMDS clock....... 15MHz
Audio/video latency (p).. n/a
Audio/video latency (i).. n/a
HDMI video capabilities.. No
Data payload............. D85DC40178800302
CE video capability data
CE scan behavior......... Always overscanned
IT scan behavior......... Always underscanned
PT scan behavior......... Not supported
RGB quantization range... Selectable (via AVI YQ)
YCC quantization range... Not supported
YCbCr 4:2:0 capability map data
Data payload............. 0F03
CE colorimetry data
xvYCC601 support......... No
xvYCC709 support......... No
sYCC601 support.......... No
AdobeYCC601 support...... No
AdobeRGB support......... No
BT2020CYCC support....... No
BT2020YCC support........ Yes
BT2020RGB support........ Yes
Metadata profile flags... 0x00
HDR static metadata
SDR luminance............ Yes
HDR luminance............ No
SMPTE ST2084............. Yes
Hybrid log............... Yes
Data payload............. 060D01
CE vendor-specific video data
Data payload............. 0146D000444F3B884B4F6A
CE vendor-specific video data
Data payload............. 018B849001
CEA/CTA vendor-specific audio data
Data payload............. 1146D0007000
Report information
Date generated........... 07/12/2022
Software revision........ 2.91.0.1043
Data source.............. Real-time 0x0100 - NB: improperly installed
Operating system......... 10.0.17763.2
Raw data
00,FF,FF,FF,FF,FF,FF,00,41,0C,C3,04,01,01,01,01,13,1D,01,03,80,90,51,78,0A,E6,92,A3,54,4A,99,26,
0F,4A,4C,21,08,00,B3,00,95,00,A9,40,90,40,81,00,81,80,81,40,01,01,02,3A,80,18,71,38,2D,40,58,2C,
45,00,A0,2A,53,00,00,1E,02,3A,80,D0,72,38,2D,40,10,2C,45,80,A0,2A,53,00,00,1E,00,00,00,FC,00,50,
68,69,6C,69,70,73,20,46,54,56,0A,20,00,00,00,FD,00,30,3E,0F,46,3C,00,0A,20,20,20,20,20,20,01,A8,
02,03,75,F1,5B,61,60,5D,5F,5E,10,1F,20,22,21,05,14,04,13,12,03,11,02,16,07,15,06,01,40,3F,29,2F,
32,09,1F,07,15,07,50,3D,07,C0,57,06,01,5D,1F,01,67,04,03,83,01,00,00,6D,03,0C,00,30,00,38,3C,28,
08,60,01,02,03,68,D8,5D,C4,01,78,80,03,02,E2,00,49,E2,0F,03,E3,05,C0,00,E3,06,0D,01,EB,01,46,D0,
00,44,4F,3B,88,4B,4F,6A,E5,01,8B,84,90,01,E6,11,46,D0,00,70,00,00,00,00,00,00,00,00,00,00,00,95
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Hi,
that is really strange - the EDID shows only FHD data...
[email protected]
I kind of fixed it. I installed Custom Resolution Utility on Windows and added 4k resolution to EDID, this app tricks system by changing received EDID info. Of course TV still sends FHD EDID. Curse you PHILIPS for not optimizing software correctly!

Categories

Resources