projects/Cuboxi/patches/xbmc: update IMX6 support patch

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2014-04-24 13:14:39 +02:00
parent 3920d4e15d
commit 62716648d6

View File

@ -1,6 +1,6 @@
diff -Naur xbmc-13b3/configure.in xbmc-13b3-imx6/configure.in
--- xbmc-13b3/configure.in 2014-04-13 21:22:52.829923018 +0200
+++ xbmc-13b3-imx6/configure.in 2014-04-13 21:18:33.889476601 +0200
diff -Naur xbmc-13b4/configure.in xbmc-imx6-13b4/configure.in
--- xbmc-13b4/configure.in 2014-04-24 11:49:30.784354037 +0200
+++ xbmc-imx6-13b4/configure.in 2014-04-24 11:50:13.695216693 +0200
@@ -558,7 +558,7 @@
AC_ARG_ENABLE([codec],
@ -44,9 +44,9 @@ diff -Naur xbmc-13b3/configure.in xbmc-13b3-imx6/configure.in
*)
esac
done
diff -Naur xbmc-13b3/lib/ffmpeg/libavcodec/arm/dca.h xbmc-13b3-imx6/lib/ffmpeg/libavcodec/arm/dca.h
--- xbmc-13b3/lib/ffmpeg/libavcodec/arm/dca.h 2014-04-13 21:22:45.975925014 +0200
+++ xbmc-13b3-imx6/lib/ffmpeg/libavcodec/arm/dca.h 2014-04-13 21:18:34.191477295 +0200
diff -Naur xbmc-13b4/lib/ffmpeg/libavcodec/arm/dca.h xbmc-imx6-13b4/lib/ffmpeg/libavcodec/arm/dca.h
--- xbmc-13b4/lib/ffmpeg/libavcodec/arm/dca.h 2014-04-24 11:49:35.908218231 +0200
+++ xbmc-imx6-13b4/lib/ffmpeg/libavcodec/arm/dca.h 2014-04-24 11:50:13.827213196 +0200
@@ -30,9 +30,9 @@
#define decode_blockcodes decode_blockcodes
@ -64,9 +64,165 @@ diff -Naur xbmc-13b3/lib/ffmpeg/libavcodec/arm/dca.h xbmc-13b3-imx6/lib/ffmpeg/l
#endif /* AVCODEC_ARM_DCA_H */
+
diff -Naur xbmc-13b3/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp xbmc-13b3-imx6/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
--- xbmc-13b3/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp 2014-04-13 21:22:38.977937037 +0200
+++ xbmc-13b3-imx6/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp 2014-04-13 21:18:35.298479839 +0200
diff -Naur xbmc-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp xbmc-imx6-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp
--- xbmc-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp 2014-04-24 11:49:41.288075640 +0200
+++ xbmc-imx6-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAEResample.cpp 2014-04-24 11:50:14.007208425 +0200
@@ -279,14 +279,16 @@
if (format == AE_FMT_U8) return AV_SAMPLE_FMT_U8;
else if (format == AE_FMT_S16NE) return AV_SAMPLE_FMT_S16;
else if (format == AE_FMT_S32NE) return AV_SAMPLE_FMT_S32;
- else if (format == AE_FMT_S24NE4) return AV_SAMPLE_FMT_S32;
+ else if (format == AE_FMT_S24NE4H) return AV_SAMPLE_FMT_S32;
+ else if (format == AE_FMT_S24NE4L) return AV_SAMPLE_FMT_S32;
else if (format == AE_FMT_FLOAT) return AV_SAMPLE_FMT_FLT;
else if (format == AE_FMT_DOUBLE) return AV_SAMPLE_FMT_DBL;
else if (format == AE_FMT_U8P) return AV_SAMPLE_FMT_U8P;
else if (format == AE_FMT_S16NEP) return AV_SAMPLE_FMT_S16P;
else if (format == AE_FMT_S32NEP) return AV_SAMPLE_FMT_S32P;
- else if (format == AE_FMT_S24NE4P) return AV_SAMPLE_FMT_S32P;
+ else if (format == AE_FMT_S24NE4HP) return AV_SAMPLE_FMT_S32P;
+ else if (format == AE_FMT_S24NE4LP) return AV_SAMPLE_FMT_S32P;
else if (format == AE_FMT_FLOATP) return AV_SAMPLE_FMT_FLTP;
else if (format == AE_FMT_DOUBLEP) return AV_SAMPLE_FMT_DBLP;
@@ -298,14 +300,14 @@
if (format == AV_SAMPLE_FMT_U8) return AE_FMT_U8;
else if (format == AV_SAMPLE_FMT_S16) return AE_FMT_S16NE;
else if (format == AV_SAMPLE_FMT_S32 && bits == 32) return AE_FMT_S32NE;
- else if (format == AV_SAMPLE_FMT_S32 && bits == 24) return AE_FMT_S24NE4;
+ else if (format == AV_SAMPLE_FMT_S32 && bits == 24) return AE_FMT_S24NE4H;
else if (format == AV_SAMPLE_FMT_FLT) return AE_FMT_FLOAT;
else if (format == AV_SAMPLE_FMT_DBL) return AE_FMT_DOUBLE;
else if (format == AV_SAMPLE_FMT_U8P) return AE_FMT_U8P;
else if (format == AV_SAMPLE_FMT_S16P) return AE_FMT_S16NEP;
else if (format == AV_SAMPLE_FMT_S32P && bits == 32) return AE_FMT_S32NEP;
- else if (format == AV_SAMPLE_FMT_S32P && bits == 24) return AE_FMT_S24NE4P;
+ else if (format == AV_SAMPLE_FMT_S32P && bits == 24) return AE_FMT_S24NE4HP;
else if (format == AV_SAMPLE_FMT_FLTP) return AE_FMT_FLOATP;
else if (format == AV_SAMPLE_FMT_DBLP) return AE_FMT_DOUBLEP;
diff -Naur xbmc-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp xbmc-imx6-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp
--- xbmc-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp 2014-04-24 11:49:41.280075852 +0200
+++ xbmc-imx6-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp 2014-04-24 11:50:14.007208425 +0200
@@ -796,6 +796,12 @@
}
}
+static inline void RShift8_32_buf(uint32_t *src, uint32_t *dst, uint32_t count)
+{
+ while (count--)
+ *dst++ = *src++ >> 8;
+}
+
unsigned int CActiveAESink::OutputSamples(CSampleBuffer* samples)
{
uint8_t *buffer = samples->pkt->data[0];
@@ -816,14 +822,22 @@
case NEED_BYTESWAP:
Endian_Swap16_buf((uint16_t *)buffer, (uint16_t *)buffer, frames * samples->pkt->config.channels);
break;
+ case NEED_RSHIFT8:
+ RShift8_32_buf((uint32_t *)buffer, (uint32_t *)buffer, frames * samples->pkt->config.channels);
+ break;
case CHECK_CONVERT:
ConvertInit(samples);
if (m_convertState == NEED_CONVERT)
buffer = Convert(samples);
else if (m_convertState == NEED_BYTESWAP)
Endian_Swap16_buf((uint16_t *)buffer, (uint16_t *)buffer, frames * samples->pkt->config.channels);
+ else if (m_convertState == NEED_RSHIFT8)
+ RShift8_32_buf((uint32_t *)buffer, (uint32_t *)buffer, frames * samples->pkt->config.channels);
+ else if (m_convertState == SKIP_OUTPUT)
+ frames = 0;
break;
- default:
+ case SKIP_OUTPUT:
+ frames = 0;
break;
}
@@ -862,15 +876,38 @@
void CActiveAESink::ConvertInit(CSampleBuffer* samples)
{
- if (CActiveAEResample::GetAESampleFormat(samples->pkt->config.fmt, samples->pkt->config.bits_per_sample) != m_sinkFormat.m_dataFormat)
+ AEDataFormat srcFmt = CActiveAEResample::GetAESampleFormat(samples->pkt->config.fmt, samples->pkt->config.bits_per_sample);
+
+ if (srcFmt != m_sinkFormat.m_dataFormat)
{
- m_convertFn = CAEConvert::FrFloat(m_sinkFormat.m_dataFormat);
- if (m_convertBuffer)
- _aligned_free(m_convertBuffer);
- m_convertBufferSampleSize = samples->pkt->max_nb_samples;
- m_convertBuffer = (uint8_t*)_aligned_malloc(samples->pkt->max_nb_samples * m_sinkFormat.m_channelLayout.Count() * m_sinkFormat.m_frameSize, 16);
- memset(m_convertBuffer, 0, samples->pkt->max_nb_samples * m_sinkFormat.m_channelLayout.Count() * m_sinkFormat.m_frameSize);
- m_convertState = NEED_CONVERT;
+ switch (srcFmt)
+ {
+ case AE_FMT_FLOAT:
+ case AE_FMT_FLOATP:
+ m_convertFn = CAEConvert::FrFloat(m_sinkFormat.m_dataFormat);
+ if (m_convertBuffer)
+ _aligned_free(m_convertBuffer);
+ m_convertBufferSampleSize = samples->pkt->max_nb_samples;
+ m_convertBuffer = (uint8_t*)_aligned_malloc(samples->pkt->max_nb_samples * m_sinkFormat.m_channelLayout.Count() * m_sinkFormat.m_frameSize, 16);
+ memset(m_convertBuffer, 0, samples->pkt->max_nb_samples * m_sinkFormat.m_channelLayout.Count() * m_sinkFormat.m_frameSize);
+ m_convertState = NEED_CONVERT;
+ break;
+ case AE_FMT_S24NE4H:
+ m_convertState = (m_sinkFormat.m_dataFormat == AE_FMT_S24NE4L) ? NEED_RSHIFT8 : SKIP_OUTPUT;
+ break;
+ case AE_FMT_S24NE4HP:
+ m_convertState = (m_sinkFormat.m_dataFormat == AE_FMT_S24NE4LP) ? NEED_RSHIFT8 : SKIP_OUTPUT;
+ break;
+ default:
+ m_convertState = SKIP_OUTPUT;
+ break;
+ }
+
+ if (m_convertState == SKIP_OUTPUT)
+ {
+ CLog::Log(LOGERROR, "CActiveAESink::ConvertInit - cannot convert from %s to %s",
+ CAEUtil::DataFormatToStr(srcFmt), CAEUtil::DataFormatToStr(m_sinkFormat.m_dataFormat));
+ }
}
else if (AE_IS_RAW(m_requestedFormat.m_dataFormat) && CAEUtil::S16NeedsByteSwap(AE_FMT_S16NE, m_sinkFormat.m_dataFormat))
{
diff -Naur xbmc-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h xbmc-imx6-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h
--- xbmc-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h 2014-04-24 11:49:41.288075640 +0200
+++ xbmc-imx6-13b4/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.h 2014-04-24 11:50:14.007208425 +0200
@@ -139,6 +139,8 @@
NEED_CONVERT,
NEED_BYTESWAP,
SKIP_CONVERT,
+ NEED_RSHIFT8,
+ SKIP_OUTPUT
} m_convertState;
std::string m_deviceFriendlyName;
diff -Naur xbmc-13b4/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp xbmc-imx6-13b4/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp
--- xbmc-13b4/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp 2014-04-24 11:49:41.256076488 +0200
+++ xbmc-imx6-13b4/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp 2014-04-24 11:50:14.007208425 +0200
@@ -268,7 +268,7 @@
case AE_FMT_S16NE : return SND_PCM_FORMAT_S16;
case AE_FMT_S16LE : return SND_PCM_FORMAT_S16_LE;
case AE_FMT_S16BE : return SND_PCM_FORMAT_S16_BE;
- case AE_FMT_S24NE4: return SND_PCM_FORMAT_S24;
+ case AE_FMT_S24NE4L: return SND_PCM_FORMAT_S24;
#ifdef __BIG_ENDIAN__
case AE_FMT_S24NE3: return SND_PCM_FORMAT_S24_3BE;
#else
@@ -343,7 +343,7 @@
{
/* if we opened in 32bit and only have 24bits, pack into 24 */
if (fmtBits == 32 && bits == 24)
- i = AE_FMT_S24NE4;
+ i = AE_FMT_S24NE4L;
else
continue;
}
@@ -720,7 +720,10 @@
* will automatically add "@" instead to enable surroundXX mangling.
* We don't want to do that if "default" can handle multichannel
@ -112,21 +268,385 @@ diff -Naur xbmc-13b3/xbmc/cores/AudioEngine/Sinks/AESinkALSA.cpp xbmc-13b3-imx6/
if (name.substr(0, 4) == "hdmi")
return AE_DEVTYPE_HDMI;
else if (name.substr(0, 6) == "iec958" || name.substr(0, 5) == "spdif")
diff -Naur xbmc-13b3/xbmc/cores/AudioEngine/Utils/AEConvert.cpp xbmc-13b3-imx6/xbmc/cores/AudioEngine/Utils/AEConvert.cpp
--- xbmc-13b3/xbmc/cores/AudioEngine/Utils/AEConvert.cpp 2014-04-13 21:22:39.007936966 +0200
+++ xbmc-13b3-imx6/xbmc/cores/AudioEngine/Utils/AEConvert.cpp 2014-04-13 21:18:35.320479890 +0200
@@ -841,7 +841,7 @@
diff -Naur xbmc-13b4/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp xbmc-imx6-13b4/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp
--- xbmc-13b4/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp 2014-04-24 11:49:41.268076170 +0200
+++ xbmc-imx6-13b4/xbmc/cores/AudioEngine/Sinks/AESinkPULSE.cpp 2014-04-24 11:50:14.007208425 +0200
@@ -80,9 +80,9 @@
case AE_FMT_S24LE3: return PA_SAMPLE_S24LE;
case AE_FMT_S24BE3: return PA_SAMPLE_S24BE;
case AE_FMT_S24NE3: return PA_SAMPLE_S24NE;
- case AE_FMT_S24LE4: return PA_SAMPLE_S24_32LE;
- case AE_FMT_S24BE4: return PA_SAMPLE_S24_32BE;
- case AE_FMT_S24NE4: return PA_SAMPLE_S24_32NE;
+ case AE_FMT_S24LE4L: return PA_SAMPLE_S24_32LE;
+ case AE_FMT_S24BE4L: return PA_SAMPLE_S24_32BE;
+ case AE_FMT_S24NE4L: return PA_SAMPLE_S24_32NE;
case AE_FMT_S32BE : return PA_SAMPLE_S32BE;
case AE_FMT_S32LE : return PA_SAMPLE_S32LE;
case AE_FMT_S32NE : return PA_SAMPLE_S32NE;
@@ -119,9 +119,9 @@
AE_FMT_S24LE3,
AE_FMT_S24BE3,
AE_FMT_S24NE3,
- AE_FMT_S24LE4,
- AE_FMT_S24BE4,
- AE_FMT_S24NE4,
+ AE_FMT_S24LE4L,
+ AE_FMT_S24BE4L,
+ AE_FMT_S24NE4L,
AE_FMT_S32BE,
AE_FMT_S32LE,
AE_FMT_S32NE,
diff -Naur xbmc-13b4/xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.cpp xbmc-imx6-13b4/xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.cpp
--- xbmc-13b4/xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.cpp 2014-04-24 11:49:41.276075958 +0200
+++ xbmc-imx6-13b4/xbmc/cores/AudioEngine/Sinks/AESinkWASAPI.cpp 2014-04-24 11:50:14.007208425 +0200
@@ -111,7 +111,7 @@
/* Sample formats go from float -> 32 bit int -> 24 bit int (packed in 32) -> -> 24 bit int -> 16 bit int */
static const sampleFormat testFormats[] = { {KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, 32, 32, AE_FMT_FLOAT},
{KSDATAFORMAT_SUBTYPE_PCM, 32, 32, AE_FMT_S32NE},
- {KSDATAFORMAT_SUBTYPE_PCM, 32, 24, AE_FMT_S24NE4},
+ {KSDATAFORMAT_SUBTYPE_PCM, 32, 24, AE_FMT_S24NE4H},
{KSDATAFORMAT_SUBTYPE_PCM, 24, 24, AE_FMT_S24NE3},
{KSDATAFORMAT_SUBTYPE_PCM, 16, 16, AE_FMT_S16NE} };
@@ -758,7 +758,7 @@
wfxex.Format.wBitsPerSample = CAEUtil::DataFormatToBits((AEDataFormat) p);
wfxex.Format.nBlockAlign = wfxex.Format.nChannels * (wfxex.Format.wBitsPerSample >> 3);
wfxex.Format.nAvgBytesPerSec = wfxex.Format.nSamplesPerSec * wfxex.Format.nBlockAlign;
- if (p <= AE_FMT_S24NE4 && p >= AE_FMT_S24BE4)
+ if (p <= AE_FMT_S24NE4H && p >= AE_FMT_S24BE4H)
{
wfxex.Samples.wValidBitsPerSample = 24;
}
@@ -1149,7 +1149,7 @@
else if (wfxex.Samples.wValidBitsPerSample == 32)
format.m_dataFormat = AE_FMT_S32NE;
else
- format.m_dataFormat = AE_FMT_S24NE4;
+ format.m_dataFormat = AE_FMT_S24NE4H;
}
else if (wfxex.Format.wBitsPerSample == 24)
format.m_dataFormat = AE_FMT_S24NE3;
diff -Naur xbmc-13b4/xbmc/cores/AudioEngine/Utils/AEAudioFormat.h xbmc-imx6-13b4/xbmc/cores/AudioEngine/Utils/AEAudioFormat.h
--- xbmc-13b4/xbmc/cores/AudioEngine/Utils/AEAudioFormat.h 2014-04-24 11:49:41.296075428 +0200
+++ xbmc-imx6-13b4/xbmc/cores/AudioEngine/Utils/AEAudioFormat.h 2014-04-24 11:50:14.011208319 +0200
@@ -41,9 +41,13 @@
AE_FMT_S32LE,
AE_FMT_S32NE,
- AE_FMT_S24BE4,
- AE_FMT_S24LE4,
- AE_FMT_S24NE4, /* S24 in 4 bytes */
+ AE_FMT_S24BE4H,
+ AE_FMT_S24LE4H,
+ AE_FMT_S24NE4H, /* S24 in upper 4 bytes */
+
+ AE_FMT_S24BE4L,
+ AE_FMT_S24LE4L,
+ AE_FMT_S24NE4L, /* S24 in lower 4 bytes */
AE_FMT_S24BE3,
AE_FMT_S24LE3,
@@ -65,7 +69,8 @@
AE_FMT_U8P,
AE_FMT_S16NEP,
AE_FMT_S32NEP,
- AE_FMT_S24NE4P,
+ AE_FMT_S24NE4HP,
+ AE_FMT_S24NE4LP,
AE_FMT_S24NE3P,
AE_FMT_DOUBLEP,
AE_FMT_FLOATP,
diff -Naur xbmc-13b4/xbmc/cores/AudioEngine/Utils/AEConvert.cpp xbmc-imx6-13b4/xbmc/cores/AudioEngine/Utils/AEConvert.cpp
--- xbmc-13b4/xbmc/cores/AudioEngine/Utils/AEConvert.cpp 2014-04-24 11:49:41.292075533 +0200
+++ xbmc-imx6-13b4/xbmc/cores/AudioEngine/Utils/AEConvert.cpp 2014-04-24 11:50:14.007208425 +0200
@@ -69,18 +69,22 @@
#ifdef __BIG_ENDIAN__
case AE_FMT_S16NE : return &S16BE_Float;
case AE_FMT_S32NE : return &S32BE_Float;
- case AE_FMT_S24NE4: return &S24BE4_Float;
+ case AE_FMT_S24NE4H: return &S24BE4H_Float;
+ case AE_FMT_S24NE4L: return &S24BE4L_Float;
case AE_FMT_S24NE3: return &S24BE3_Float;
#else
case AE_FMT_S16NE : return &S16LE_Float;
case AE_FMT_S32NE : return &S32LE_Float;
- case AE_FMT_S24NE4: return &S24LE4_Float;
+ case AE_FMT_S24NE4H: return &S24LE4H_Float;
+ case AE_FMT_S24NE4L: return &S24LE4L_Float;
case AE_FMT_S24NE3: return &S24LE3_Float;
#endif
case AE_FMT_S16LE : return &S16LE_Float;
case AE_FMT_S16BE : return &S16BE_Float;
- case AE_FMT_S24LE4: return &S24LE4_Float;
- case AE_FMT_S24BE4: return &S24BE4_Float;
+ case AE_FMT_S24LE4H: return &S24LE4H_Float;
+ case AE_FMT_S24LE4L: return &S24LE4L_Float;
+ case AE_FMT_S24BE4H: return &S24BE4H_Float;
+ case AE_FMT_S24BE4L: return &S24BE4L_Float;
case AE_FMT_S24LE3: return &S24LE3_Float;
case AE_FMT_S24BE3: return &S24BE3_Float;
#if defined(__ARM_NEON__)
@@ -112,7 +116,8 @@
#endif
case AE_FMT_S16LE : return &Float_S16LE;
case AE_FMT_S16BE : return &Float_S16BE;
- case AE_FMT_S24NE4: return &Float_S24NE4;
+ case AE_FMT_S24NE4H: return &Float_S24NE4H;
+ case AE_FMT_S24NE4L: return &Float_S24NE4L;
case AE_FMT_S24NE3: return &Float_S24NE3;
#if defined(__ARM_NEON__)
case AE_FMT_S32LE : return &Float_S32LE_Neon;
@@ -210,7 +215,17 @@
return samples;
}
-unsigned int CAEConvert::S24LE4_Float(uint8_t *data, const unsigned int samples, float *dest)
+unsigned int CAEConvert::S24LE4H_Float(uint8_t *data, const unsigned int samples, float *dest)
+{
+ for (unsigned int i = 0; i < samples; ++i, data += 4)
+ {
+ int s = (data[3] << 24) | (data[2] << 16) | (data[1] << 8);
+ *dest++ = (float)s * INT32_SCALE;
+ }
+ return samples;
+}
+
+unsigned int CAEConvert::S24LE4L_Float(uint8_t *data, const unsigned int samples, float *dest)
{
for (unsigned int i = 0; i < samples; ++i, data += 4)
{
@@ -220,7 +235,7 @@
return samples;
}
-unsigned int CAEConvert::S24BE4_Float(uint8_t *data, const unsigned int samples, float *dest)
+unsigned int CAEConvert::S24BE4H_Float(uint8_t *data, const unsigned int samples, float *dest)
{
for (unsigned int i = 0; i < samples; ++i, data += 4)
{
@@ -230,6 +245,16 @@
return samples;
}
+unsigned int CAEConvert::S24BE4L_Float(uint8_t *data, const unsigned int samples, float *dest)
+{
+ for (unsigned int i = 0; i < samples; ++i, data += 4)
+ {
+ int s = (data[1] << 24) | (data[2] << 16) | (data[3] << 8);
+ *dest++ = (float)s * INT32_SCALE;
+ }
+ return samples;
+}
+
unsigned int CAEConvert::S24LE3_Float(uint8_t *data, const unsigned int samples, float *dest)
{
for (unsigned int i = 0; i < samples; ++i, data += 3)
@@ -244,7 +269,7 @@
{
for (unsigned int i = 0; i < samples; ++i, data += 3)
{
- int s = (data[1] << 24) | (data[2] << 16) | (data[3] << 8);
+ int s = (data[0] << 24) | (data[1] << 16) | (data[2] << 8);
*dest++ = (float)s * INT32_SCALE;
}
return samples;
@@ -786,7 +811,7 @@
return samples << 1;
}
-unsigned int CAEConvert::Float_S24NE4(float *data, const unsigned int samples, uint8_t *dest)
+unsigned int CAEConvert::Float_S24NE4H(float *data, const unsigned int samples, uint8_t *dest)
{
int32_t *dst = (int32_t*)dest;
#ifdef __SSE2__
@@ -797,7 +822,7 @@
/* work around invalid alignment */
while ((((uintptr_t)data & 0xF) || ((uintptr_t)dest & 0xF)) && count > 0)
{
- dst[0] = (safeRound(data[0] * ((float)INT24_MAX+.5f)) & 0xFFFFFF) << 8;
+ dst[0] = safeRound(data[0] * ((float)INT24_MAX+.5f)) << 8;
++data;
++dst;
--count;
@@ -816,7 +841,7 @@
{
const uint32_t odd = count - even;
if (odd == 1)
- dst[0] = (safeRound(data[0] * ((float)INT24_MAX+.5f)) & 0xFFFFFF) << 8;
+ dst[0] = safeRound(data[0] * ((float)INT24_MAX+.5f)) << 8;
else
{
__m128 in;
@@ -841,7 +866,69 @@
_mm_empty();
#else /* no SSE2 */
for (uint32_t i = 0; i < samples; ++i)
- *dst++ = (safeRound(*data++ * ((float)INT24_MAX+.5f)) & 0xFFFFFF) << 8;
+ *dst++ = safeRound(*data++ * ((float)INT24_MAX+.5f)) & 0x00FFFFFF;
+ *dst++ = safeRound(*data++ * ((float)INT24_MAX+.5f)) << 8;
+ #endif
+
+ return samples << 2;
+}
+
+unsigned int CAEConvert::Float_S24NE4L(float *data, const unsigned int samples, uint8_t *dest)
+{
+ int32_t *dst = (int32_t*)dest;
+ #ifdef __SSE2__
+
+ const __m128i msk = _mm_set1_epi32(0xFFFFFF);
+ const __m128 mul = _mm_set_ps1((float)INT24_MAX+.5f);
+ unsigned int count = samples;
+
+ /* work around invalid alignment */
+ while ((((uintptr_t)data & 0xF) || ((uintptr_t)dest & 0xF)) && count > 0)
+ {
+ dst[0] = safeRound(data[0] * ((float)INT24_MAX+.5f)) & 0xFFFFFF;
+ ++data;
+ ++dst;
+ --count;
+ }
+
+ const uint32_t even = count & ~0x3;
+ for (uint32_t i = 0; i < even; i += 4, data += 4, dst += 4)
+ {
+ __m128 in = _mm_mul_ps(_mm_load_ps(data), mul);
+ __m128i con = _mm_cvtps_epi32(in);
+ con = _mm_and_si128(con, msk);
+ memcpy(dst, &con, sizeof(int32_t) * 4);
+ }
+
+ if (count != even)
+ {
+ const uint32_t odd = count - even;
+ if (odd == 1)
+ dst[0] = safeRound(data[0] * ((float)INT24_MAX+.5f)) & 0xFFFFFF;
+ else
+ {
+ __m128 in;
+ if (odd == 2)
+ {
+ in = _mm_setr_ps(data[0], data[1], 0, 0);
+ in = _mm_mul_ps(in, mul);
+ __m128i con = _mm_cvtps_epi32(in);
+ con = _mm_and_si128(con, msk);
+ memcpy(dst, &con, sizeof(int32_t) * 2);
+ }
+ else
+ {
+ in = _mm_setr_ps(data[0], data[1], data[2], 0);
+ in = _mm_mul_ps(in, mul);
+ __m128i con = _mm_cvtps_epi32(in);
+ con = _mm_and_si128(con, msk);
+ memcpy(dst, &con, sizeof(int32_t) * 3);
+ }
+ }
+ }
+ _mm_empty();
+ #else /* no SSE2 */
+ for (uint32_t i = 0; i < samples; ++i)
+ *dst++ = safeRound(*data++ * ((float)INT24_MAX+.5f)) & 0xFFFFFF;
#endif
return samples << 2;
diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp
--- xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp 2014-04-13 21:22:38.682937885 +0200
+++ xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp 2014-04-13 21:18:35.416480110 +0200
diff -Naur xbmc-13b4/xbmc/cores/AudioEngine/Utils/AEConvert.h xbmc-imx6-13b4/xbmc/cores/AudioEngine/Utils/AEConvert.h
--- xbmc-13b4/xbmc/cores/AudioEngine/Utils/AEConvert.h 2014-04-24 11:49:41.292075533 +0200
+++ xbmc-imx6-13b4/xbmc/cores/AudioEngine/Utils/AEConvert.h 2014-04-24 11:50:14.007208425 +0200
@@ -28,8 +28,10 @@
static unsigned int S8_Float (uint8_t *data, const unsigned int samples, float *dest);
static unsigned int S16LE_Float (uint8_t *data, const unsigned int samples, float *dest);
static unsigned int S16BE_Float (uint8_t *data, const unsigned int samples, float *dest);
- static unsigned int S24LE4_Float(uint8_t *data, const unsigned int samples, float *dest);
- static unsigned int S24BE4_Float(uint8_t *data, const unsigned int samples, float *dest);
+ static unsigned int S24LE4H_Float(uint8_t *data, const unsigned int samples, float *dest);
+ static unsigned int S24LE4L_Float(uint8_t *data, const unsigned int samples, float *dest);
+ static unsigned int S24BE4H_Float(uint8_t *data, const unsigned int samples, float *dest);
+ static unsigned int S24BE4L_Float(uint8_t *data, const unsigned int samples, float *dest);
static unsigned int S24LE3_Float(uint8_t *data, const unsigned int samples, float *dest);
static unsigned int S24BE3_Float(uint8_t *data, const unsigned int samples, float *dest);
static unsigned int S32LE_Float (uint8_t *data, const unsigned int samples, float *dest);
@@ -41,7 +43,8 @@
static unsigned int Float_S8 (float *data, const unsigned int samples, uint8_t *dest);
static unsigned int Float_S16LE (float *data, const unsigned int samples, uint8_t *dest);
static unsigned int Float_S16BE (float *data, const unsigned int samples, uint8_t *dest);
- static unsigned int Float_S24NE4(float *data, const unsigned int samples, uint8_t *dest);
+ static unsigned int Float_S24NE4H(float *data, const unsigned int samples, uint8_t *dest);
+ static unsigned int Float_S24NE4L(float *data, const unsigned int samples, uint8_t *dest);
static unsigned int Float_S24NE3(float *data, const unsigned int samples, uint8_t *dest);
static unsigned int Float_S32LE (float *data, const unsigned int samples, uint8_t *dest);
static unsigned int Float_S32BE (float *data, const unsigned int samples, uint8_t *dest);
diff -Naur xbmc-13b4/xbmc/cores/AudioEngine/Utils/AEUtil.cpp xbmc-imx6-13b4/xbmc/cores/AudioEngine/Utils/AEUtil.cpp
--- xbmc-13b4/xbmc/cores/AudioEngine/Utils/AEUtil.cpp 2014-04-24 11:49:41.296075428 +0200
+++ xbmc-imx6-13b4/xbmc/cores/AudioEngine/Utils/AEUtil.cpp 2014-04-24 11:50:14.007208425 +0200
@@ -92,9 +92,13 @@
32, /* S32LE */
32, /* S32NE */
- 32, /* S24BE */
- 32, /* S24LE */
- 32, /* S24NE */
+ 32, /* S24BE4H */
+ 32, /* S24LE4H */
+ 32, /* S24NE4H */
+
+ 32, /* S24BE4L */
+ 32, /* S24LE4L */
+ 32, /* S24NE4L */
24, /* S24BE3 */
24, /* S24LE3 */
@@ -114,8 +118,9 @@
8, /* U8P */
16, /* S16NEP */
32, /* S32NEP */
- 32, /* S24NEP */
- 24, /* S24NE3P*/
+ 32, /* S24NE4HP */
+ 32, /* S24NE4LP */
+ 24, /* S24NE3P */
sizeof(double) << 3, /* DOUBLEP */
sizeof(float ) << 3 /* FLOATP */
};
@@ -125,7 +130,8 @@
const unsigned int CAEUtil::DataFormatToUsedBits(const enum AEDataFormat dataFormat)
{
- if (dataFormat == AE_FMT_S24BE4 || dataFormat == AE_FMT_S24LE4 || dataFormat == AE_FMT_S24NE4)
+ if (dataFormat == AE_FMT_S24BE4H || dataFormat == AE_FMT_S24LE4H || dataFormat == AE_FMT_S24NE4H ||
+ dataFormat == AE_FMT_S24BE4L || dataFormat == AE_FMT_S24LE4L || dataFormat == AE_FMT_S24NE4L)
return 24;
else
return DataFormatToBits(dataFormat);
@@ -149,9 +155,13 @@
"AE_FMT_S32LE",
"AE_FMT_S32NE",
- "AE_FMT_S24BE4",
- "AE_FMT_S24LE4",
- "AE_FMT_S24NE4", /* S24 in 4 bytes */
+ "AE_FMT_S24BE4H",
+ "AE_FMT_S24LE4H",
+ "AE_FMT_S24NE4H", /* S24 in upper 4 bytes */
+
+ "AE_FMT_S24BE4L",
+ "AE_FMT_S24LE4L",
+ "AE_FMT_S24NE4L", /* S24 in lower 4 bytes */
"AE_FMT_S24BE3",
"AE_FMT_S24LE3",
@@ -173,7 +183,8 @@
"AE_FMT_U8P",
"AE_FMT_S16NEP",
"AE_FMT_S32NEP",
- "AE_FMT_S24NE4P",
+ "AE_FMT_S24NE4HP",
+ "AE_FMT_S24NE4LP",
"AE_FMT_S24NE3P",
"AE_FMT_DOUBLEP",
"AE_FMT_FLOATP"
diff -Naur xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp
--- xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp 2014-04-24 11:49:41.204077867 +0200
+++ xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp 2014-04-24 11:50:14.007208425 +0200
@@ -35,6 +35,9 @@
#include "Video/DVDVideoCodecFFmpeg.h"
#include "Video/DVDVideoCodecOpenMax.h"
@ -166,9 +686,9 @@ diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp xbmc-13b
#if defined(TARGET_DARWIN_OSX)
if (!hint.software && CSettings::Get().GetBool("videoplayer.usevda"))
{
diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h
--- xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h 2014-04-13 21:22:38.733937740 +0200
+++ xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h 2014-04-13 21:18:35.424480129 +0200
diff -Naur xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h
--- xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h 2014-04-24 11:49:41.200077973 +0200
+++ xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h 2014-04-24 11:50:14.007208425 +0200
@@ -27,6 +27,7 @@
#include <vector>
#include <string>
@ -189,9 +709,9 @@ diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h xbmc-1
};
unsigned int iFlags;
diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
--- xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp 2014-04-13 21:18:35.425480131 +0200
diff -Naur xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp
--- xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp 2014-04-24 11:50:14.007208425 +0200
@@ -0,0 +1,1501 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
@ -1694,9 +2214,9 @@ diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.cpp x
+
+ return target;
+}
diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.h xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.h
--- xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.h 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.h 2014-04-13 21:18:35.425480131 +0200
diff -Naur xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.h xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.h
--- xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.h 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.h 2014-04-24 11:50:14.007208425 +0200
@@ -0,0 +1,215 @@
+#pragma once
+/*
@ -1913,9 +2433,9 @@ diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecIMX.h xbm
+ bool m_frameReported; // State whether the frame consumed event will be reported by libfslvpu
+ double m_dts; // Current dts
+};
diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecInfo.h xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecInfo.h
--- xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecInfo.h 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecInfo.h 2014-04-13 21:18:35.425480131 +0200
diff -Naur xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecInfo.h xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecInfo.h
--- xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecInfo.h 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecInfo.h 2014-04-24 11:50:14.007208425 +0200
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2010-2013 Team XBMC
@ -1955,9 +2475,9 @@ diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecInfo.h xb
+};
+
+#endif // DVDVIDEOCODECINFO_H
diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in
--- xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in 2014-04-13 21:22:38.706937819 +0200
+++ xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in 2014-04-13 21:18:35.427480135 +0200
diff -Naur xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in
--- xbmc-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in 2014-04-24 11:49:41.192078185 +0200
+++ xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in 2014-04-24 11:50:14.007208425 +0200
@@ -24,6 +24,9 @@
SRCS += OpenMaxVideo.cpp
SRCS += DVDVideoCodecOpenMax.cpp
@ -1968,9 +2488,9 @@ diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDCodecs/Video/Makefile.in xbmc-13b3-
ifeq (@USE_LIBAMCODEC@,1)
SRCS += AMLCodec.cpp
SRCS += DVDVideoCodecAmlogic.cpp
diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
--- xbmc-13b3/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp 2014-04-13 21:22:38.877937332 +0200
+++ xbmc-13b3-imx6/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp 2014-04-13 21:18:35.456480202 +0200
diff -Naur xbmc-13b4/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp
--- xbmc-13b4/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp 2014-04-24 11:49:41.128079881 +0200
+++ xbmc-imx6-13b4/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp 2014-04-24 11:50:14.003208531 +0200
@@ -995,6 +995,8 @@
case RENDER_FMT_EGLIMG: return "EGLIMG";
case RENDER_FMT_BYPASS: return "BYPASS";
@ -1980,10 +2500,10 @@ diff -Naur xbmc-13b3/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp xbmc-13b3-imx6/xbmc
case RENDER_FMT_NONE: return "NONE";
}
return "UNKNOWN";
diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-imx6/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
--- xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp 2014-04-13 21:22:38.630938033 +0200
+++ xbmc-13b3-imx6/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp 2014-04-13 21:18:35.391480053 +0200
@@ -76,6 +76,17 @@
diff -Naur xbmc-13b4/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-imx6-13b4/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp
--- xbmc-13b4/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp 2014-04-24 11:49:41.300075322 +0200
+++ xbmc-imx6-13b4/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp 2014-04-24 11:50:14.011208319 +0200
@@ -75,6 +75,17 @@
static PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES;
#endif
@ -2001,7 +2521,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
#if defined(TARGET_ANDROID)
#include "DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h"
#endif
@@ -100,6 +111,7 @@
@@ -99,6 +110,7 @@
#if defined(TARGET_ANDROID)
mediacodec = NULL;
#endif
@ -2009,7 +2529,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
}
CLinuxRendererGLES::YUVBUFFER::~YUVBUFFER()
@@ -151,6 +163,12 @@
@@ -150,6 +162,12 @@
if (!glEGLImageTargetTexture2DOES)
glEGLImageTargetTexture2DOES = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) CEGLWrapper::GetProcAddress("glEGLImageTargetTexture2DOES");
#endif
@ -2022,7 +2542,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
}
CLinuxRendererGLES::~CLinuxRendererGLES()
@@ -279,6 +297,10 @@
@@ -278,6 +296,10 @@
{
return source;
}
@ -2033,7 +2553,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
#ifdef HAVE_VIDEOTOOLBOXDECODER
if (m_renderMethod & RENDER_CVREF )
@@ -604,6 +626,10 @@
@@ -603,6 +625,10 @@
#if defined(TARGET_ANDROID)
m_formats.push_back(RENDER_FMT_MEDIACODEC);
#endif
@ -2044,7 +2564,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
// setup the background colour
m_clearColour = (float)(g_advancedSettings.m_videoBlackBarColour & 0xff) / 0xff;
@@ -715,6 +741,16 @@
@@ -713,6 +739,16 @@
m_renderMethod = RENDER_MEDIACODEC;
break;
}
@ -2061,7 +2581,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
else if (m_format == RENDER_FMT_BYPASS)
{
CLog::Log(LOGNOTICE, "GL: Using BYPASS render method");
@@ -807,6 +843,18 @@
@@ -805,6 +841,18 @@
m_textureCreate = &CLinuxRendererGLES::CreateNV12Texture;
m_textureDelete = &CLinuxRendererGLES::DeleteNV12Texture;
}
@ -2080,7 +2600,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
else
{
// default to YV12 texture handlers
@@ -952,6 +1000,10 @@
@@ -956,6 +1004,10 @@
{
RenderSurfaceTexture(index, m_currentField);
}
@ -2091,7 +2611,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
else
{
RenderSoftware(index, m_currentField);
@@ -1156,7 +1208,7 @@
@@ -1160,7 +1212,7 @@
// imgwidth *= planes[0].pixpertex_x;
// imgheight *= planes[0].pixpertex_y;
// }
@ -2100,7 +2620,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
// glBegin(GL_QUADS);
//
// glMultiTexCoord2fARB(GL_TEXTURE0, planes[0].rect.x1, planes[0].rect.y1);
@@ -1578,6 +1630,85 @@
@@ -1582,6 +1634,85 @@
#endif
}
@ -2186,7 +2706,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
bool CLinuxRendererGLES::RenderCapture(CRenderCapture* capture)
{
if (!m_bValidated)
@@ -2299,7 +2430,7 @@
@@ -2303,7 +2434,7 @@
glTexParameteri(m_textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(m_textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
@ -2195,7 +2715,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
glTexParameteri(m_textureTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(m_textureTarget, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
@@ -2405,7 +2536,7 @@
@@ -2409,7 +2540,7 @@
glTexParameteri(m_textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(m_textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
@ -2204,7 +2724,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
glTexParameteri(m_textureTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(m_textureTarget, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
@@ -2479,6 +2610,84 @@
@@ -2483,6 +2614,84 @@
return true;
}
@ -2289,7 +2809,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
void CLinuxRendererGLES::SetTextureFilter(GLenum method)
{
for (int i = 0 ; i<m_NumYV12Buffers ; i++)
@@ -2508,6 +2717,114 @@
@@ -2512,6 +2721,114 @@
}
}
@ -2404,7 +2924,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
bool CLinuxRendererGLES::Supports(ERENDERFEATURE feature)
{
// Player controls render, let it dictate available render features
@@ -2574,9 +2891,14 @@
@@ -2578,9 +2895,14 @@
if(m_renderMethod & RENDER_CVREF)
return false;
@ -2419,7 +2939,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
return false;
}
@@ -2605,6 +2927,15 @@
@@ -2609,6 +2931,15 @@
if(method == VS_INTERLACEMETHOD_AUTO)
return true;
@ -2435,7 +2955,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
#if defined(__i386__) || defined(__x86_64__)
if(method == VS_INTERLACEMETHOD_DEINTERLACE
|| method == VS_INTERLACEMETHOD_DEINTERLACE_HALF
@@ -2653,6 +2984,9 @@
@@ -2657,6 +2988,9 @@
if(m_renderMethod & RENDER_CVREF)
return VS_INTERLACEMETHOD_NONE;
@ -2445,7 +2965,7 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
#if defined(__i386__) || defined(__x86_64__)
return VS_INTERLACEMETHOD_DEINTERLACE_HALF;
#else
@@ -2737,5 +3071,16 @@
@@ -2741,5 +3075,16 @@
}
#endif
@ -2462,9 +2982,9 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.cpp xbmc-13b3-i
+
#endif
diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.h xbmc-13b3-imx6/xbmc/cores/VideoRenderers/LinuxRendererGLES.h
--- xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.h 2014-04-13 21:22:38.615938076 +0200
+++ xbmc-13b3-imx6/xbmc/cores/VideoRenderers/LinuxRendererGLES.h 2014-04-13 21:18:35.391480053 +0200
diff -Naur xbmc-13b4/xbmc/cores/VideoRenderers/LinuxRendererGLES.h xbmc-imx6-13b4/xbmc/cores/VideoRenderers/LinuxRendererGLES.h
--- xbmc-13b4/xbmc/cores/VideoRenderers/LinuxRendererGLES.h 2014-04-24 11:49:41.304075216 +0200
+++ xbmc-imx6-13b4/xbmc/cores/VideoRenderers/LinuxRendererGLES.h 2014-04-24 11:50:14.011208319 +0200
@@ -33,6 +33,7 @@
#include "guilib/GraphicContext.h"
#include "BaseRenderer.h"
@ -2520,9 +3040,9 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/LinuxRendererGLES.h xbmc-13b3-imx
};
typedef YUVBUFFER YUVBUFFERS[NUM_BUFFERS];
diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/RenderFormats.h xbmc-13b3-imx6/xbmc/cores/VideoRenderers/RenderFormats.h
--- xbmc-13b3/xbmc/cores/VideoRenderers/RenderFormats.h 2014-04-13 21:22:38.629938036 +0200
+++ xbmc-13b3-imx6/xbmc/cores/VideoRenderers/RenderFormats.h 2014-04-13 21:18:35.394480060 +0200
diff -Naur xbmc-13b4/xbmc/cores/VideoRenderers/RenderFormats.h xbmc-imx6-13b4/xbmc/cores/VideoRenderers/RenderFormats.h
--- xbmc-13b4/xbmc/cores/VideoRenderers/RenderFormats.h 2014-04-24 11:49:41.300075322 +0200
+++ xbmc-imx6-13b4/xbmc/cores/VideoRenderers/RenderFormats.h 2014-04-24 11:50:14.011208319 +0200
@@ -37,6 +37,8 @@
RENDER_FMT_BYPASS,
RENDER_FMT_EGLIMG,
@ -2532,9 +3052,9 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/RenderFormats.h xbmc-13b3-imx6/xb
};
#endif
diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/RenderManager.cpp xbmc-13b3-imx6/xbmc/cores/VideoRenderers/RenderManager.cpp
--- xbmc-13b3/xbmc/cores/VideoRenderers/RenderManager.cpp 2014-04-13 21:22:38.619938064 +0200
+++ xbmc-13b3-imx6/xbmc/cores/VideoRenderers/RenderManager.cpp 2014-04-13 21:18:35.394480060 +0200
diff -Naur xbmc-13b4/xbmc/cores/VideoRenderers/RenderManager.cpp xbmc-imx6-13b4/xbmc/cores/VideoRenderers/RenderManager.cpp
--- xbmc-13b4/xbmc/cores/VideoRenderers/RenderManager.cpp 2014-04-24 11:49:41.308075110 +0200
+++ xbmc-imx6-13b4/xbmc/cores/VideoRenderers/RenderManager.cpp 2014-04-24 11:50:14.011208319 +0200
@@ -928,6 +928,10 @@
else if(pic.format == RENDER_FMT_MEDIACODEC)
m_pRenderer->AddProcessor(pic.mediacodec, index);
@ -2546,9 +3066,9 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/RenderManager.cpp xbmc-13b3-imx6/
m_pRenderer->ReleaseImage(index, false);
diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/VideoShaders/YUV2RGBShader.cpp xbmc-13b3-imx6/xbmc/cores/VideoRenderers/VideoShaders/YUV2RGBShader.cpp
--- xbmc-13b3/xbmc/cores/VideoRenderers/VideoShaders/YUV2RGBShader.cpp 2014-04-13 21:22:38.593938138 +0200
+++ xbmc-13b3-imx6/xbmc/cores/VideoRenderers/VideoShaders/YUV2RGBShader.cpp 2014-04-13 21:18:35.395480062 +0200
diff -Naur xbmc-13b4/xbmc/cores/VideoRenderers/VideoShaders/YUV2RGBShader.cpp xbmc-imx6-13b4/xbmc/cores/VideoRenderers/VideoShaders/YUV2RGBShader.cpp
--- xbmc-13b4/xbmc/cores/VideoRenderers/VideoShaders/YUV2RGBShader.cpp 2014-04-24 11:49:41.304075216 +0200
+++ xbmc-imx6-13b4/xbmc/cores/VideoRenderers/VideoShaders/YUV2RGBShader.cpp 2014-04-24 11:50:14.011208319 +0200
@@ -39,12 +39,12 @@
//
// Transformation matrixes for different colorspaces.
@ -2605,11 +3125,11 @@ diff -Naur xbmc-13b3/xbmc/cores/VideoRenderers/VideoShaders/YUV2RGBShader.cpp xb
m_defines += "#define XBMC_YV12\n";
else if (m_format == RENDER_FMT_NV12)
m_defines += "#define XBMC_NV12\n";
diff -Naur xbmc-13b3/xbmc/input/linux/LinuxInputDevices.cpp xbmc-13b3-imx6/xbmc/input/linux/LinuxInputDevices.cpp
diff -Naur xbmc-13b3/xbmc/powermanagement/PowerManager.cpp xbmc-13b3-imx6/xbmc/powermanagement/PowerManager.cpp
diff -Naur xbmc-13b3/xbmc/windowing/egl/EGLNativeTypeIMX.cpp xbmc-13b3-imx6/xbmc/windowing/egl/EGLNativeTypeIMX.cpp
--- xbmc-13b3/xbmc/windowing/egl/EGLNativeTypeIMX.cpp 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-13b3-imx6/xbmc/windowing/egl/EGLNativeTypeIMX.cpp 2014-04-13 21:18:35.990481429 +0200
diff -Naur xbmc-13b4/xbmc/input/linux/LinuxInputDevices.cpp xbmc-imx6-13b4/xbmc/input/linux/LinuxInputDevices.cpp
diff -Naur xbmc-13b4/xbmc/powermanagement/PowerManager.cpp xbmc-imx6-13b4/xbmc/powermanagement/PowerManager.cpp
diff -Naur xbmc-13b4/xbmc/windowing/egl/EGLNativeTypeIMX.cpp xbmc-imx6-13b4/xbmc/windowing/egl/EGLNativeTypeIMX.cpp
--- xbmc-13b4/xbmc/windowing/egl/EGLNativeTypeIMX.cpp 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-imx6-13b4/xbmc/windowing/egl/EGLNativeTypeIMX.cpp 2014-04-24 11:50:14.019208107 +0200
@@ -0,0 +1,321 @@
+/*
+ * Copyright (C) 2011-2013 Team XBMC
@ -2932,9 +3452,9 @@ diff -Naur xbmc-13b3/xbmc/windowing/egl/EGLNativeTypeIMX.cpp xbmc-13b3-imx6/xbmc
+ return res->iWidth > 0 && res->iHeight> 0;
+}
+
diff -Naur xbmc-13b3/xbmc/windowing/egl/EGLNativeTypeIMX.h xbmc-13b3-imx6/xbmc/windowing/egl/EGLNativeTypeIMX.h
--- xbmc-13b3/xbmc/windowing/egl/EGLNativeTypeIMX.h 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-13b3-imx6/xbmc/windowing/egl/EGLNativeTypeIMX.h 2014-04-13 21:18:35.990481429 +0200
diff -Naur xbmc-13b4/xbmc/windowing/egl/EGLNativeTypeIMX.h xbmc-imx6-13b4/xbmc/windowing/egl/EGLNativeTypeIMX.h
--- xbmc-13b4/xbmc/windowing/egl/EGLNativeTypeIMX.h 1970-01-01 01:00:00.000000000 +0100
+++ xbmc-imx6-13b4/xbmc/windowing/egl/EGLNativeTypeIMX.h 2014-04-24 11:50:14.019208107 +0200
@@ -0,0 +1,60 @@
+#pragma once
+
@ -2996,9 +3516,9 @@ diff -Naur xbmc-13b3/xbmc/windowing/egl/EGLNativeTypeIMX.h xbmc-13b3-imx6/xbmc/w
+ EGLNativeDisplayType m_display;
+ EGLNativeWindowType m_window;
+};
diff -Naur xbmc-13b3/xbmc/windowing/egl/EGLWrapper.cpp xbmc-13b3-imx6/xbmc/windowing/egl/EGLWrapper.cpp
--- xbmc-13b3/xbmc/windowing/egl/EGLWrapper.cpp 2014-04-13 21:22:38.089939567 +0200
+++ xbmc-13b3-imx6/xbmc/windowing/egl/EGLWrapper.cpp 2014-04-13 21:18:35.990481429 +0200
diff -Naur xbmc-13b4/xbmc/windowing/egl/EGLWrapper.cpp xbmc-imx6-13b4/xbmc/windowing/egl/EGLWrapper.cpp
--- xbmc-13b4/xbmc/windowing/egl/EGLWrapper.cpp 2014-04-24 11:49:41.748063448 +0200
+++ xbmc-imx6-13b4/xbmc/windowing/egl/EGLWrapper.cpp 2014-04-24 11:50:14.019208107 +0200
@@ -17,16 +17,17 @@
* <http://www.gnu.org/licenses/>.
*
@ -3032,9 +3552,9 @@ diff -Naur xbmc-13b3/xbmc/windowing/egl/EGLWrapper.cpp xbmc-13b3-imx6/xbmc/windo
{
m_nativeTypes = nativeGuess;
diff -Naur xbmc-13b3/xbmc/windowing/egl/Makefile.in xbmc-13b3-imx6/xbmc/windowing/egl/Makefile.in
--- xbmc-13b3/xbmc/windowing/egl/Makefile.in 2014-04-13 21:22:38.063939640 +0200
+++ xbmc-13b3-imx6/xbmc/windowing/egl/Makefile.in 2014-04-13 21:18:35.990481429 +0200
diff -Naur xbmc-13b4/xbmc/windowing/egl/Makefile.in xbmc-imx6-13b4/xbmc/windowing/egl/Makefile.in
--- xbmc-13b4/xbmc/windowing/egl/Makefile.in 2014-04-24 11:49:41.736063766 +0200
+++ xbmc-imx6-13b4/xbmc/windowing/egl/Makefile.in 2014-04-24 11:50:14.019208107 +0200
@@ -24,6 +24,10 @@
wayland/XBMCSurface.cpp
endif