jirentabu / crashrpt

Automatically exported from code.google.com/p/crashrpt
0 stars 0 forks source link

Wrong screen video capture video with multi screen #215

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. Configure a secondary monitor screen on the left of the main, so that the 
virtual screen has the left coordinate negative. 
2. Active screen video capture. 
3. Generate the error report.

What is the expected output? What do you see instead?
In the error report I expected to have a video with with all screen of the 
virtual desktop, instead I can see in the video only the main screen which has 
positive coordinates) 

What version of CrashRpt are you using?
1.4.2

What is your version of Visual Studio?
Visual Studio 2008

What is your version of Windows operating system?
Windows 7 64bit

Please provide any additional information below.
Going inside the code seems that there is a a bug in the function:

BOOL CVideoRecorder::ComposeFrame(int nFrameId, th_ycbcr_buffer *pImage)

At lines 464 and 465:

int xDest = (int)ceil(ssi.m_aMonitors[i].m_rcMonitor.left*x_ratio-0.5);
int yDest = (int)ceil(ssi.m_aMonitors[i].m_rcMonitor.top*y_ratio-0.5);

Seems that the negative coordinates are not taken in account. The problem seems 
to be fixed substituting that lines with:

int xDest = (int)ceil( (ssi.m_aMonitors[i].m_rcMonitor.left +  
abs(ssi.m_rcVirtualScreen.left))*x_ratio-0.5);

int yDest = (int)ceil( (ssi.m_aMonitors[i].m_rcMonitor.top + 
abs(ssi.m_rcVirtualScreen.top))*y_ratio-0.5);

There is also a problem with video size (is not proportional)... the problem 
could be at the beginning of the function:

BOOL CVideoRecorder::EncodeVideo()

when calculating the screen size at line from 214 to 220... probably the 
problem could be fixed taken in account the Width and the Height (and non the 
right and bottom coordinate) of the screen, as follows:

if(ScreenSize.cx<ssi.m_rcVirtualScreen.Width() ||
  ScreenSize.cy<ssi.m_rcVirtualScreen.Height())
{
  ScreenSize.cx = ssi.m_rcVirtualScreen.Width();
  ScreenSize.cy = ssi.m_rcVirtualScreen.Height();
}

Original issue reported on code.google.com by m.geri1...@gmail.com on 16 Sep 2013 at 7:47

GoogleCodeExporter commented 9 years ago
Fixed in trunk

Original comment by zexspect...@gmail.com on 5 Oct 2013 at 4:08

GoogleCodeExporter commented 9 years ago
This issue was closed by revision r1633.

Original comment by zexspect...@gmail.com on 5 Oct 2013 at 4:08