Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
linuxrenderer: do not render if upload texture fails
  • Loading branch information
FernetMenta committed Aug 2, 2013
1 parent 3011fff commit ce970a9
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 24 deletions.
39 changes: 23 additions & 16 deletions xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
Expand Up @@ -517,14 +517,14 @@ void CLinuxRendererGL::LoadPlane( YUVPLANE& plane, int type, unsigned flipindex
plane.flipindex = flipindex;
}

void CLinuxRendererGL::UploadYV12Texture(int source)
bool CLinuxRendererGL::UploadYV12Texture(int source)
{
YUVBUFFER& buf = m_buffers[source];
YV12Image* im = &buf.image;
YUVFIELDS& fields = buf.fields;

if (!(im->flags&IMAGE_FLAG_READY))
return;
return false;
bool deinterlacing;
if (m_currentField == FIELD_FULL)
deinterlacing = false;
Expand Down Expand Up @@ -589,6 +589,7 @@ void CLinuxRendererGL::UploadYV12Texture(int source)
CalculateTextureSourceRects(source, 3);

glDisable(m_textureTarget);
return true;
}

void CLinuxRendererGL::Reset()
Expand Down Expand Up @@ -1185,7 +1186,8 @@ void CLinuxRendererGL::Render(DWORD flags, int renderBuffer)
m_currentField = FIELD_FULL;

// call texture load function
(this->*m_textureUpload)(renderBuffer);
if (!(this->*m_textureUpload)(renderBuffer))
return;

if (m_renderMethod & RENDER_GLSL)
{
Expand Down Expand Up @@ -2028,14 +2030,14 @@ bool CLinuxRendererGL::CreateYV12Texture(int index)
//********************************************************************************************************
// NV12 Texture loading, creation and deletion
//********************************************************************************************************
void CLinuxRendererGL::UploadNV12Texture(int source)
bool CLinuxRendererGL::UploadNV12Texture(int source)
{
YUVBUFFER& buf = m_buffers[source];
YV12Image* im = &buf.image;
YUVFIELDS& fields = buf.fields;

if (!(im->flags & IMAGE_FLAG_READY))
return;
return false;
bool deinterlacing;
if (m_currentField == FIELD_FULL)
deinterlacing = false;
Expand Down Expand Up @@ -2088,6 +2090,7 @@ void CLinuxRendererGL::UploadNV12Texture(int source)
CalculateTextureSourceRects(source, 3);

glDisable(m_textureTarget);
return true;
}

bool CLinuxRendererGL::CreateNV12Texture(int index)
Expand Down Expand Up @@ -2340,11 +2343,12 @@ bool CLinuxRendererGL::CreateVDPAUTexture(int index)
return true;
}

void CLinuxRendererGL::UploadVDPAUTexture(int index)
bool CLinuxRendererGL::UploadVDPAUTexture(int index)
{
#ifdef HAVE_LIBVDPAU
glPixelStorei(GL_UNPACK_ALIGNMENT,1); //what's this for?
#endif
return true;
}


Expand Down Expand Up @@ -2408,15 +2412,15 @@ bool CLinuxRendererGL::CreateVAAPITexture(int index)
return true;
}

void CLinuxRendererGL::UploadVAAPITexture(int index)
bool CLinuxRendererGL::UploadVAAPITexture(int index)
{
#ifdef HAVE_LIBVA
YUVPLANE &plane = m_buffers[index].fields[0][0];
VAAPI::CHolder &va = m_buffers[index].vaapi;
VAStatus status;

if(!va.surface)
return;
return false;

if(va.display && va.surface->m_display != va.display)
{
Expand All @@ -2428,7 +2432,7 @@ void CLinuxRendererGL::UploadVAAPITexture(int index)
CSingleLock lock(*va.display);

if(va.display->lost())
return;
return false;

if(!va.surfglx)
{
Expand All @@ -2441,7 +2445,7 @@ void CLinuxRendererGL::UploadVAAPITexture(int index)
if(status != VA_STATUS_SUCCESS)
{
CLog::Log(LOGERROR, "CLinuxRendererGL::UploadVAAPITexture - failed to create vaapi glx surface (%d)", status);
return;
return false;
}
va.surfglx = VAAPI::CSurfaceGLPtr(new VAAPI::CSurfaceGL(surface, va.display));
}
Expand Down Expand Up @@ -2489,12 +2493,13 @@ void CLinuxRendererGL::UploadVAAPITexture(int index)
CLog::Log(LOGERROR, "CLinuxRendererGL::UploadVAAPITexture - failed to copy surface to glx %d - %s", status, vaErrorStr(status));

#endif
return true;
}

//********************************************************************************************************
// CoreVideoRef Texture creation, deletion, copying + clearing
//********************************************************************************************************
void CLinuxRendererGL::UploadCVRefTexture(int index)
bool CLinuxRendererGL::UploadCVRefTexture(int index)
{
#ifdef TARGET_DARWIN
CVBufferRef cvBufferRef = m_buffers[index].cvBufferRef;
Expand Down Expand Up @@ -2556,6 +2561,7 @@ void CLinuxRendererGL::UploadCVRefTexture(int index)
glDisable(m_textureTarget);

#endif
return true;
}

void CLinuxRendererGL::DeleteCVRefTexture(int index)
Expand Down Expand Up @@ -2617,14 +2623,14 @@ bool CLinuxRendererGL::CreateCVRefTexture(int index)
return true;
}

void CLinuxRendererGL::UploadYUV422PackedTexture(int source)
bool CLinuxRendererGL::UploadYUV422PackedTexture(int source)
{
YUVBUFFER& buf = m_buffers[source];
YV12Image* im = &buf.image;
YUVFIELDS& fields = buf.fields;

if (!(im->flags & IMAGE_FLAG_READY))
return;
return false;

bool deinterlacing;
if (m_currentField == FIELD_FULL)
Expand Down Expand Up @@ -2661,7 +2667,7 @@ void CLinuxRendererGL::UploadYUV422PackedTexture(int source)
CalculateTextureSourceRects(source, 3);

glDisable(m_textureTarget);

return true;
}

void CLinuxRendererGL::DeleteYUV422PackedTexture(int index)
Expand Down Expand Up @@ -3047,14 +3053,14 @@ void CLinuxRendererGL::SetupRGBBuffer()
m_rgbBuffer = new BYTE[m_rgbBufferSize];
}

void CLinuxRendererGL::UploadRGBTexture(int source)
bool CLinuxRendererGL::UploadRGBTexture(int source)
{
YUVBUFFER& buf = m_buffers[source];
YV12Image* im = &buf.image;
YUVFIELDS& fields = buf.fields;

if (!(im->flags&IMAGE_FLAG_READY))
return;
return false;

bool deinterlacing;
if (m_currentField == FIELD_FULL)
Expand Down Expand Up @@ -3157,6 +3163,7 @@ void CLinuxRendererGL::UploadRGBTexture(int source)
CalculateTextureSourceRects(source, 3);

glDisable(m_textureTarget);
return true;
}

void CLinuxRendererGL::SetTextureFilter(GLenum method)
Expand Down
16 changes: 8 additions & 8 deletions xbmc/cores/VideoRenderers/LinuxRendererGL.h
Expand Up @@ -178,35 +178,35 @@ class CLinuxRendererGL : public CBaseRenderer
void UpdateVideoFilter();

// textures
void (CLinuxRendererGL::*m_textureUpload)(int index);
bool (CLinuxRendererGL::*m_textureUpload)(int index);
void (CLinuxRendererGL::*m_textureDelete)(int index);
bool (CLinuxRendererGL::*m_textureCreate)(int index);

void UploadYV12Texture(int index);
bool UploadYV12Texture(int index);
void DeleteYV12Texture(int index);
bool CreateYV12Texture(int index);

void UploadNV12Texture(int index);
bool UploadNV12Texture(int index);
void DeleteNV12Texture(int index);
bool CreateNV12Texture(int index);

void UploadVDPAUTexture(int index);
bool UploadVDPAUTexture(int index);
void DeleteVDPAUTexture(int index);
bool CreateVDPAUTexture(int index);

void UploadVAAPITexture(int index);
bool UploadVAAPITexture(int index);
void DeleteVAAPITexture(int index);
bool CreateVAAPITexture(int index);

void UploadCVRefTexture(int index);
bool UploadCVRefTexture(int index);
void DeleteCVRefTexture(int index);
bool CreateCVRefTexture(int index);

void UploadYUV422PackedTexture(int index);
bool UploadYUV422PackedTexture(int index);
void DeleteYUV422PackedTexture(int index);
bool CreateYUV422PackedTexture(int index);

void UploadRGBTexture(int index);
bool UploadRGBTexture(int index);
void ToRGBFrame(YV12Image* im, unsigned flipIndexPlane, unsigned flipIndexBuf);
void ToRGBFields(YV12Image* im, unsigned flipIndexPlaneTop, unsigned flipIndexPlaneBot, unsigned flipIndexBuf);
void SetupRGBBuffer();
Expand Down

0 comments on commit ce970a9

Please sign in to comment.