Skip to content

Commit

Permalink
changed: use render formats enum in renderers
Browse files Browse the repository at this point in the history
  • Loading branch information
elupus committed Apr 23, 2012
1 parent a73a673 commit 80eb5ef
Show file tree
Hide file tree
Showing 17 changed files with 138 additions and 153 deletions.
47 changes: 25 additions & 22 deletions xbmc/cores/VideoRenderers/LinuxRendererGL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
#include "utils/log.h"
#include "utils/GLUtils.h"
#include "RenderCapture.h"
#include "RenderFormats.h"

#ifdef HAVE_LIBVDPAU
#include "cores/dvdplayer/DVDCodecs/Video/VDPAU.h"
Expand Down Expand Up @@ -139,6 +140,7 @@ CLinuxRendererGL::CLinuxRendererGL()
m_renderMethod = RENDER_GLSL;
m_renderQuality = RQ_SINGLEPASS;
m_iFlags = 0;
m_format = RENDER_FMT_NONE;

m_iYV12RenderBuffer = 0;
m_flipindex = 0;
Expand Down Expand Up @@ -253,14 +255,15 @@ bool CLinuxRendererGL::ValidateRenderTarget()
return false;
}

bool CLinuxRendererGL::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, unsigned int format)
bool CLinuxRendererGL::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format)
{
m_sourceWidth = width;
m_sourceHeight = height;
m_fps = fps;

// Save the flags.
m_iFlags = flags;
m_format = format;

// Calculate the input frame aspect ratio.
CalculateFrameAspectRatio(d_width, d_height);
Expand Down Expand Up @@ -890,12 +893,12 @@ void CLinuxRendererGL::UpdateVideoFilter()

void CLinuxRendererGL::LoadShaders(int field)
{
if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_VDPAU)
if (m_format == RENDER_FMT_VDPAU)
{
CLog::Log(LOGNOTICE, "GL: Using VDPAU render method");
m_renderMethod = RENDER_VDPAU;
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_VAAPI)
else if (m_format == RENDER_FMT_VAAPI)
{
CLog::Log(LOGNOTICE, "GL: Using VAAPI render method");
m_renderMethod = RENDER_VAAPI;
Expand Down Expand Up @@ -927,7 +930,7 @@ void CLinuxRendererGL::LoadShaders(int field)
if (glCreateProgram && tryGlsl)
{
// create regular progressive scan shader
m_pYUVShader = new YUV2RGBProgressiveShader(m_textureTarget==GL_TEXTURE_RECTANGLE_ARB, m_iFlags,
m_pYUVShader = new YUV2RGBProgressiveShader(m_textureTarget==GL_TEXTURE_RECTANGLE_ARB, m_iFlags, m_format,
m_nonLinStretch && m_renderQuality == RQ_SINGLEPASS);

CLog::Log(LOGNOTICE, "GL: Selecting Single Pass YUV 2 RGB shader");
Expand Down Expand Up @@ -955,7 +958,7 @@ void CLinuxRendererGL::LoadShaders(int field)
m_renderMethod = RENDER_ARB ;

// create regular progressive scan shader
m_pYUVShader = new YUV2RGBProgressiveShaderARB(m_textureTarget==GL_TEXTURE_RECTANGLE_ARB, m_iFlags);
m_pYUVShader = new YUV2RGBProgressiveShaderARB(m_textureTarget==GL_TEXTURE_RECTANGLE_ARB, m_iFlags, m_format);
CLog::Log(LOGNOTICE, "GL: Selecting Single Pass ARB YUV2RGB shader");

if (m_pYUVShader && m_pYUVShader->CompileAndLink())
Expand Down Expand Up @@ -1009,26 +1012,26 @@ void CLinuxRendererGL::LoadShaders(int field)
m_pboUsed = false;

// Now that we now the render method, setup texture function handlers
if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_NV12)
if (m_format == RENDER_FMT_NV12)
{
m_textureUpload = &CLinuxRendererGL::UploadNV12Texture;
m_textureCreate = &CLinuxRendererGL::CreateNV12Texture;
m_textureDelete = &CLinuxRendererGL::DeleteNV12Texture;
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_YUY2 ||
CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_UYVY)
else if (m_format == RENDER_FMT_YUYV422 ||
m_format == RENDER_FMT_UYVY422)
{
m_textureUpload = &CLinuxRendererGL::UploadYUV422PackedTexture;
m_textureCreate = &CLinuxRendererGL::CreateYUV422PackedTexture;
m_textureDelete = &CLinuxRendererGL::DeleteYUV422PackedTexture;
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_VDPAU)
else if (m_format == RENDER_FMT_VDPAU)
{
m_textureUpload = &CLinuxRendererGL::UploadVDPAUTexture;
m_textureCreate = &CLinuxRendererGL::CreateVDPAUTexture;
m_textureDelete = &CLinuxRendererGL::DeleteVDPAUTexture;
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_VAAPI)
else if (m_format == RENDER_FMT_VAAPI)
{
m_textureUpload = &CLinuxRendererGL::UploadVAAPITexture;
m_textureCreate = &CLinuxRendererGL::CreateVAAPITexture;
Expand Down Expand Up @@ -2609,7 +2612,7 @@ void CLinuxRendererGL::ToRGBFrame(YV12Image* im, unsigned flipIndexPlane, unsign
int srcStride[4] = {};
int srcFormat = -1;

if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_YV12)
if (m_format == RENDER_FMT_YUV420P)
{
srcFormat = PIX_FMT_YUV420P;
for (int i = 0; i < 3; i++)
Expand All @@ -2618,7 +2621,7 @@ void CLinuxRendererGL::ToRGBFrame(YV12Image* im, unsigned flipIndexPlane, unsign
srcStride[i] = im->stride[i];
}
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_NV12)
else if (m_format == RENDER_FMT_NV12)
{
srcFormat = PIX_FMT_NV12;
for (int i = 0; i < 2; i++)
Expand All @@ -2627,21 +2630,21 @@ void CLinuxRendererGL::ToRGBFrame(YV12Image* im, unsigned flipIndexPlane, unsign
srcStride[i] = im->stride[i];
}
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_YUY2)
else if (m_format == RENDER_FMT_YUYV422)
{
srcFormat = PIX_FMT_YUYV422;
src[0] = im->plane[0];
srcStride[0] = im->stride[0];
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_UYVY)
else if (m_format == RENDER_FMT_UYVY422)
{
srcFormat = PIX_FMT_UYVY422;
src[0] = im->plane[0];
srcStride[0] = im->stride[0];
}
else //should never happen
{
CLog::Log(LOGERROR, "CLinuxRendererGL::ToRGBFrame: called with unsupported format %i", CONF_FLAGS_FORMAT_MASK(m_iFlags));
CLog::Log(LOGERROR, "CLinuxRendererGL::ToRGBFrame: called with unsupported format %i", m_format);
return;
}

Expand Down Expand Up @@ -2680,7 +2683,7 @@ void CLinuxRendererGL::ToRGBFields(YV12Image* im, unsigned flipIndexPlaneTop, un
int srcStrideBot[4] = {};
int srcFormat = -1;

if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_YV12)
if (m_format == RENDER_FMT_YUV420P)
{
srcFormat = PIX_FMT_YUV420P;
for (int i = 0; i < 3; i++)
Expand All @@ -2691,7 +2694,7 @@ void CLinuxRendererGL::ToRGBFields(YV12Image* im, unsigned flipIndexPlaneTop, un
srcStrideBot[i] = im->stride[i] * 2;
}
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_NV12)
else if (m_format == RENDER_FMT_NV12)
{
srcFormat = PIX_FMT_NV12;
for (int i = 0; i < 2; i++)
Expand All @@ -2702,15 +2705,15 @@ void CLinuxRendererGL::ToRGBFields(YV12Image* im, unsigned flipIndexPlaneTop, un
srcStrideBot[i] = im->stride[i] * 2;
}
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_YUY2)
else if (m_format == RENDER_FMT_YUYV422)
{
srcFormat = PIX_FMT_YUYV422;
srcTop[0] = im->plane[0];
srcStrideTop[0] = im->stride[0] * 2;
srcBot[0] = im->plane[0] + im->stride[0];
srcStrideBot[0] = im->stride[0] * 2;
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_UYVY)
else if (m_format == RENDER_FMT_UYVY422)
{
srcFormat = PIX_FMT_UYVY422;
srcTop[0] = im->plane[0];
Expand All @@ -2720,7 +2723,7 @@ void CLinuxRendererGL::ToRGBFields(YV12Image* im, unsigned flipIndexPlaneTop, un
}
else //should never happen
{
CLog::Log(LOGERROR, "CLinuxRendererGL::ToRGBFields: called with unsupported format %i", CONF_FLAGS_FORMAT_MASK(m_iFlags));
CLog::Log(LOGERROR, "CLinuxRendererGL::ToRGBFields: called with unsupported format %i", m_format);
return;
}

Expand Down Expand Up @@ -3055,8 +3058,8 @@ bool CLinuxRendererGL::Supports(ESCALINGMETHOD method)
{
//nearest neighbor doesn't work on YUY2 and UYVY
if (method == VS_SCALINGMETHOD_NEAREST &&
CONF_FLAGS_FORMAT_MASK(m_iFlags) != CONF_FLAGS_FORMAT_YUY2 &&
CONF_FLAGS_FORMAT_MASK(m_iFlags) != CONF_FLAGS_FORMAT_UYVY)
m_format != RENDER_FMT_YUYV422 &&
m_format != RENDER_FMT_UYVY422)
return true;

if(method == VS_SCALINGMETHOD_LINEAR
Expand Down
4 changes: 3 additions & 1 deletion xbmc/cores/VideoRenderers/LinuxRendererGL.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include "RenderFlags.h"
#include "guilib/GraphicContext.h"
#include "BaseRenderer.h"
#include "RenderFormats.h"

#include "threads/Event.h"

Expand Down Expand Up @@ -132,7 +133,7 @@ class CLinuxRendererGL : public CBaseRenderer
bool RenderCapture(CRenderCapture* capture);

// Player functions
virtual bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, unsigned int format);
virtual bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format);
virtual bool IsConfigured() { return m_bConfigured; }
virtual int GetImage(YV12Image *image, int source = AUTOSOURCE, bool readonly = false);
virtual void ReleaseImage(int source, bool preserve = false);
Expand Down Expand Up @@ -222,6 +223,7 @@ class CLinuxRendererGL : public CBaseRenderer
bool m_bValidated;
bool m_bImageReady;
unsigned m_iFlags;
ERenderFormat m_format;
GLenum m_textureTarget;
unsigned short m_renderMethod;
RenderQuality m_renderQuality;
Expand Down
22 changes: 13 additions & 9 deletions xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@
#include "../dvdplayer/DVDCodecs/Video/OpenMaxVideo.h"
#include "threads/SingleLock.h"
#include "RenderCapture.h"
#include "RenderFormats.h"

#if defined(__ARM_NEON__)
#include "yuv2rgb.neon.h"
#endif
Expand Down Expand Up @@ -85,6 +87,7 @@ CLinuxRendererGLES::CLinuxRendererGLES()
m_renderMethod = RENDER_GLSL;
m_renderQuality = RQ_SINGLEPASS;
m_iFlags = 0;
m_format = RENDER_FMT_NONE;

m_iYV12RenderBuffer = 0;
m_flipindex = 0;
Expand Down Expand Up @@ -153,13 +156,14 @@ bool CLinuxRendererGLES::ValidateRenderTarget()
return false;
}

bool CLinuxRendererGLES::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, unsigned int format)
bool CLinuxRendererGLES::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format)
{
m_sourceWidth = width;
m_sourceHeight = height;

// Save the flags.
m_iFlags = flags;
m_format = format;

// Calculate the input frame aspect ratio.
CalculateFrameAspectRatio(d_width, d_height);
Expand Down Expand Up @@ -414,7 +418,7 @@ void CLinuxRendererGLES::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
int index = m_iYV12RenderBuffer;
YUVBUFFER& buf = m_buffers[index];

if (CONF_FLAGS_FORMAT_MASK(m_iFlags) != CONF_FLAGS_FORMAT_OMXEGL)
if (m_format != RENDER_FMT_OMXEGL)
{
if (!buf.fields[FIELD_FULL][0].id) return;
}
Expand Down Expand Up @@ -592,26 +596,26 @@ void CLinuxRendererGLES::LoadShaders(int field)
{
case RENDER_METHOD_AUTO:
case RENDER_METHOD_GLSL:
if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_OMXEGL)
if (m_format == RENDER_FMT_OMXEGL)
{
CLog::Log(LOGNOTICE, "GL: Using OMXEGL RGBA render method");
m_renderMethod = RENDER_OMXEGL;
break;
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_BYPASS)
else if (m_format == RENDER_FMT_BYPASS)
{
CLog::Log(LOGNOTICE, "GL: Using BYPASS render method");
m_renderMethod = RENDER_BYPASS;
break;
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_CVBREF)
else if (m_format == RENDER_FMT_CVBREF)
{
CLog::Log(LOGNOTICE, "GL: Using CoreVideoRef RGBA render method");
m_renderMethod = RENDER_CVREF;
break;
}
#if defined(TARGET_DARWIN_IOS)
else if (ios_version < 5.0 && CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_YV12)
else if (ios_version < 5.0 && m_format == RENDER_FMT_YUV420P)
{
CLog::Log(LOGNOTICE, "GL: Using software color conversion/RGBA render method");
m_renderMethod = RENDER_SW;
Expand All @@ -622,7 +626,7 @@ void CLinuxRendererGLES::LoadShaders(int field)
if (glCreateProgram)
{
// create regular progressive scan shader
m_pYUVShader = new YUV2RGBProgressiveShader(false, m_iFlags);
m_pYUVShader = new YUV2RGBProgressiveShader(false, m_iFlags, m_format);
CLog::Log(LOGNOTICE, "GL: Selecting Single Pass YUV 2 RGB shader");

if (m_pYUVShader && m_pYUVShader->CompileAndLink())
Expand Down Expand Up @@ -660,13 +664,13 @@ void CLinuxRendererGLES::LoadShaders(int field)
CLog::Log(LOGNOTICE, "GL: NPOT texture support detected");

// Now that we now the render method, setup texture function handlers
if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_CVBREF)
if (m_format == RENDER_FMT_CVBREF)
{
m_textureUpload = &CLinuxRendererGLES::UploadCVRefTexture;
m_textureCreate = &CLinuxRendererGLES::CreateCVRefTexture;
m_textureDelete = &CLinuxRendererGLES::DeleteCVRefTexture;
}
else if (CONF_FLAGS_FORMAT_MASK(m_iFlags) == CONF_FLAGS_FORMAT_BYPASS)
else if (m_format == RENDER_FMT_BYPASS)
{
m_textureUpload = &CLinuxRendererGLES::UploadBYPASSTexture;
m_textureCreate = &CLinuxRendererGLES::CreateBYPASSTexture;
Expand Down
3 changes: 2 additions & 1 deletion xbmc/cores/VideoRenderers/LinuxRendererGLES.h
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ class CLinuxRendererGLES : public CBaseRenderer
bool RenderCapture(CRenderCapture* capture);

// Player functions
virtual bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, unsigned int format);
virtual bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format);
virtual bool IsConfigured() { return m_bConfigured; }
virtual int GetImage(YV12Image *image, int source = AUTOSOURCE, bool readonly = false);
virtual void ReleaseImage(int source, bool preserve = false);
Expand Down Expand Up @@ -206,6 +206,7 @@ class CLinuxRendererGLES : public CBaseRenderer
bool m_bValidated;
bool m_bImageReady;
unsigned m_iFlags;
ERenderFormat m_format;
GLenum m_textureTarget;
unsigned short m_renderMethod;
RenderQuality m_renderQuality;
Expand Down
4 changes: 2 additions & 2 deletions xbmc/cores/VideoRenderers/RenderManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ CStdString CXBMCRenderManager::GetVSyncState()
return state;
}

bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, unsigned int format)
bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format)
{
/* make sure any queued frame was fully presented */
double timeout = m_presenttime + 0.1;
Expand All @@ -232,7 +232,7 @@ bool CXBMCRenderManager::Configure(unsigned int width, unsigned int height, unsi
return false;
}

bool result = m_pRenderer->Configure(width, height, d_width, d_height, fps, flags, format);
bool result = m_pRenderer->Configure(width, height, d_width, d_height, fps, flags, format, extended_format);
if(result)
{
if( flags & CONF_FLAGS_FULLSCREEN )
Expand Down
2 changes: 1 addition & 1 deletion xbmc/cores/VideoRenderers/RenderManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class CXBMCRenderManager
void SetViewMode(int iViewMode) { CSharedLock lock(m_sharedSection); if (m_pRenderer) m_pRenderer->SetViewMode(iViewMode); };

// Functions called from mplayer
bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, unsigned int format);
bool Configure(unsigned int width, unsigned int height, unsigned int d_width, unsigned int d_height, float fps, unsigned flags, ERenderFormat format, unsigned extended_format);
bool IsConfigured();

int AddVideoPicture(DVDVideoPicture& picture);
Expand Down
Loading

0 comments on commit 80eb5ef

Please sign in to comment.