diff --git a/projects/Cuboxi/patches/xbmc/xbmc-001-imx6_support.patch b/projects/Cuboxi/patches/xbmc/xbmc-001-imx6_support.patch index 2bd44b602a..2c7a4f0daa 100644 --- a/projects/Cuboxi/patches/xbmc/xbmc-001-imx6_support.patch +++ b/projects/Cuboxi/patches/xbmc/xbmc-001-imx6_support.patch @@ -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 #include @@ -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 ; iAddProcessor(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 @@ * . * @@ -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