summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/colorconversion/SoftwareRenderer.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-01-29 14:56:33 -0800
committerAndreas Huber <andih@google.com>2010-02-01 10:58:52 -0800
commit89e7fff6a5d7410815f42b4a55958a59d4463180 (patch)
tree12870c951d0beecf2f166a1976563ba4e6f4c420 /media/libstagefright/colorconversion/SoftwareRenderer.cpp
parent036a38099c9d339d77dc4a1a148db2907a618c2e (diff)
downloadframeworks_av-89e7fff6a5d7410815f42b4a55958a59d4463180.zip
frameworks_av-89e7fff6a5d7410815f42b4a55958a59d4463180.tar.gz
frameworks_av-89e7fff6a5d7410815f42b4a55958a59d4463180.tar.bz2
Use physical memory for software rendering to take a fast path through surface flinger if possible.
related-to-bug: 2386023
Diffstat (limited to 'media/libstagefright/colorconversion/SoftwareRenderer.cpp')
-rw-r--r--media/libstagefright/colorconversion/SoftwareRenderer.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/media/libstagefright/colorconversion/SoftwareRenderer.cpp b/media/libstagefright/colorconversion/SoftwareRenderer.cpp
index ef6ede0..ed91eea 100644
--- a/media/libstagefright/colorconversion/SoftwareRenderer.cpp
+++ b/media/libstagefright/colorconversion/SoftwareRenderer.cpp
@@ -20,6 +20,7 @@
#include "../include/SoftwareRenderer.h"
#include <binder/MemoryHeapBase.h>
+#include <binder/MemoryHeapPmem.h>
#include <media/stagefright/MediaDebug.h>
#include <ui/ISurface.h>
@@ -38,8 +39,16 @@ SoftwareRenderer::SoftwareRenderer(
mDecodedWidth(decodedWidth),
mDecodedHeight(decodedHeight),
mFrameSize(mDecodedWidth * mDecodedHeight * 2), // RGB565
- mMemoryHeap(new MemoryHeapBase(2 * mFrameSize)),
mIndex(0) {
+ // TODO: How do I allocate physical memory on Droid?
+ mMemoryHeap = new MemoryHeapBase("/dev/pmem_adsp", 2 * mFrameSize);
+ if (mMemoryHeap->heapID() < 0) {
+ LOGI("Creating physical memory heap failed, reverting to regular heap.");
+ mMemoryHeap = new MemoryHeapBase(2 * mFrameSize);
+ } else {
+ mMemoryHeap = new MemoryHeapPmem(mMemoryHeap);
+ }
+
CHECK(mISurface.get() != NULL);
CHECK(mDecodedWidth > 0);
CHECK(mDecodedHeight > 0);