summaryrefslogtreecommitdiffstats
path: root/media/libstagefright
diff options
context:
space:
mode:
authorLajos Molnar <lajos@google.com>2014-05-07 15:30:51 -0700
committerLajos Molnar <lajos@google.com>2014-05-07 20:27:36 -0700
commit908ea6603c64e29e40277a74c9fb0e776c097830 (patch)
tree3ee1bf42b18a95fc15d4ab589a74f7f4ce327fb6 /media/libstagefright
parentcdedf74e34117f9834055973880ee728f11d97cd (diff)
downloadframeworks_av-908ea6603c64e29e40277a74c9fb0e776c097830.zip
frameworks_av-908ea6603c64e29e40277a74c9fb0e776c097830.tar.gz
frameworks_av-908ea6603c64e29e40277a74c9fb0e776c097830.tar.bz2
stagefright: set PTS for SoftwareRenderer
Change-Id: I08661a9eae09f919149aa5a58aa514d848de50a1
Diffstat (limited to 'media/libstagefright')
-rw-r--r--media/libstagefright/AwesomePlayer.cpp9
-rw-r--r--media/libstagefright/colorconversion/SoftwareRenderer.cpp7
-rw-r--r--media/libstagefright/include/SoftwareRenderer.h2
3 files changed, 13 insertions, 5 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 8d3032b..d679be1 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -106,12 +106,15 @@ struct AwesomeLocalRenderer : public AwesomeRenderer {
}
virtual void render(MediaBuffer *buffer) {
+ int64_t timeUs;
+ CHECK(buffer->meta_data()->findInt64(kKeyTime, &timeUs));
+
render((const uint8_t *)buffer->data() + buffer->range_offset(),
- buffer->range_length());
+ buffer->range_length(), timeUs * 1000);
}
- void render(const void *data, size_t size) {
- mTarget->render(data, size, NULL);
+ void render(const void *data, size_t size, int64_t timestampNs) {
+ mTarget->render(data, size, timestampNs, NULL);
}
protected:
diff --git a/media/libstagefright/colorconversion/SoftwareRenderer.cpp b/media/libstagefright/colorconversion/SoftwareRenderer.cpp
index 77f21b7..67dfcd2 100644
--- a/media/libstagefright/colorconversion/SoftwareRenderer.cpp
+++ b/media/libstagefright/colorconversion/SoftwareRenderer.cpp
@@ -138,7 +138,7 @@ static int ALIGN(int x, int y) {
}
void SoftwareRenderer::render(
- const void *data, size_t size, void *platformPrivate) {
+ const void *data, size_t size, int64_t timestampNs, void *platformPrivate) {
ANativeWindowBuffer *buf;
int err;
if ((err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(),
@@ -230,6 +230,11 @@ void SoftwareRenderer::render(
CHECK_EQ(0, mapper.unlock(buf->handle));
+ if ((err = native_window_set_buffers_timestamp(mNativeWindow.get(),
+ timestampNs)) != 0) {
+ ALOGW("Surface::set_buffers_timestamp returned error %d", err);
+ }
+
if ((err = mNativeWindow->queueBuffer(mNativeWindow.get(), buf,
-1)) != 0) {
ALOGW("Surface::queueBuffer returned error %d", err);
diff --git a/media/libstagefright/include/SoftwareRenderer.h b/media/libstagefright/include/SoftwareRenderer.h
index 7ab0042..0ba670c 100644
--- a/media/libstagefright/include/SoftwareRenderer.h
+++ b/media/libstagefright/include/SoftwareRenderer.h
@@ -34,7 +34,7 @@ public:
~SoftwareRenderer();
void render(
- const void *data, size_t size, void *platformPrivate);
+ const void *data, size_t size, int64_t timestampNs, void *platformPrivate);
private:
enum YUVMode {