From 1011eac72061fe4a26f267d6a677633fa34b40b0 Mon Sep 17 00:00:00 2001 From: "Chris \"Koying\" Browet" Date: Sun, 2 Feb 2014 13:38:56 +0100 Subject: FIX: [mediacodec] Samsung h264 quirk --- .../dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp index b70ab916b4..a50daaff3d 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp @@ -917,6 +917,13 @@ void CDVDVideoCodecAndroidMediaCodec::OutputFormatChanged(void) else { // Android device quirks and fixes + + // Samsung Quirk: ignore width/height/stride/slice: http://code.google.com/p/android/issues/detail?id=37768#c3 + if (strstr(m_codecname.c_str(), "OMX.SEC.avc.dec") != NULL || strstr(m_codecname.c_str(), "OMX.SEC.avcdec") != NULL) + { + width = stride = m_hints.width; + height = slice_height = m_hints.height; + } if (stride <= width) stride = width; if (slice_height <= height) -- cgit v1.2.3 From cdc0fd075536074175f89b6e2b939d0c58c8366e Mon Sep 17 00:00:00 2001 From: "Chris \"Koying\" Browet" Date: Sun, 2 Feb 2014 15:21:58 +0100 Subject: FIX: [mediacodec] optimize soft buffer copy --- .../dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp index a50daaff3d..523685bab3 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp @@ -842,8 +842,11 @@ int CDVDVideoCodecAndroidMediaCodec::GetOutputPicture(void) if (i > 0) height = (m_videobuffer.iHeight + 1) / 2; - for (int j = 0; j < height; j++, src += src_stride, dst += dst_stride) - memcpy(dst, src, dst_stride); + if (src_stride == dst_stride) + memcpy(dst, src, dst_stride * height); + else + for (int j = 0; j < height; j++, src += src_stride, dst += dst_stride) + memcpy(dst, src, dst_stride); } } m_codec->releaseOutputBuffer(index, false); -- cgit v1.2.3 From cde794874b6d669d0a3f2ea16b636e64c1ffb2bf Mon Sep 17 00:00:00 2001 From: "Chris \"Koying\" Browet" Date: Sun, 2 Feb 2014 15:22:27 +0100 Subject: FIX: [mediacodec] Tegra 3 slice-height is mod 16 --- xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp index 523685bab3..967f6ab0f9 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp @@ -937,7 +937,7 @@ void CDVDVideoCodecAndroidMediaCodec::OutputFormatChanged(void) // NVidia Tegra 3 on Nexus 7 does not set slice_heights if (strstr(m_codecname.c_str(), "OMX.Nvidia.") != NULL) { - slice_height = (((height) + 31) & ~31); + slice_height = (((height) + 15) & ~15); CLog::Log(LOGDEBUG, "CDVDVideoCodecAndroidMediaCodec:: NVidia Tegra 3 quirk, slice_height(%d)", slice_height); } } -- cgit v1.2.3