summaryrefslogtreecommitdiffstats
path: root/cmds
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2009-09-17 11:16:52 -0700
committerAndreas Huber <andih@google.com>2009-09-17 11:16:52 -0700
commit5228dd1b7468bfc86a807a299f515d33048f96ac (patch)
treef99062b9e6f0200a7e88a4a95f688018655455c3 /cmds
parent56a9496a8f4adf3bf27448e1f41757af513c2a40 (diff)
downloadframeworks_av-5228dd1b7468bfc86a807a299f515d33048f96ac.zip
frameworks_av-5228dd1b7468bfc86a807a299f515d33048f96ac.tar.gz
frameworks_av-5228dd1b7468bfc86a807a299f515d33048f96ac.tar.bz2
Another stagefright test-case and ignore end-of-stream notifications while we're flushing.
Diffstat (limited to 'cmds')
-rw-r--r--cmds/stagefright/stagefright.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp
index 73215d3..5397a69 100644
--- a/cmds/stagefright/stagefright.cpp
+++ b/cmds/stagefright/stagefright.cpp
@@ -61,6 +61,66 @@ static void playSource(OMXClient *client, const sp<MediaSource> &source) {
decoder->start();
+ if (gReproduceBug == 3) {
+ status_t err;
+ MediaBuffer *buffer;
+ MediaSource::ReadOptions options;
+ int64_t seekTimeUs = -1;
+ for (;;) {
+ err = decoder->read(&buffer, &options);
+ options.clearSeekTo();
+
+ bool shouldSeek = false;
+ if (err != OK) {
+ printf("reached EOF.\n");
+
+ shouldSeek = true;
+ } else {
+ int32_t units, scale;
+ CHECK(buffer->meta_data()->findInt32(kKeyTimeUnits, &units));
+ CHECK(buffer->meta_data()->findInt32(kKeyTimeScale, &scale));
+ int64_t timestamp = ((OMX_TICKS)units * 1000000) / scale;
+
+ bool failed = false;
+ if (seekTimeUs >= 0) {
+ int64_t diff = timestamp - seekTimeUs;
+
+ if (diff > 500000) {
+ printf("ERROR: ");
+ failed = true;
+ }
+ }
+
+ printf("buffer has timestamp %lld us (%.2f secs)\n",
+ timestamp, timestamp / 1E6);
+
+ buffer->release();
+ buffer = NULL;
+
+ if (failed) {
+ break;
+ }
+
+ shouldSeek = ((double)rand() / RAND_MAX) < 0.1;
+ shouldSeek = false;
+ }
+
+ seekTimeUs = -1;
+
+ if (shouldSeek) {
+ seekTimeUs = (rand() * 30E6) / RAND_MAX;
+ options.setSeekTo(seekTimeUs);
+
+ printf("seeking to %lld us (%.2f secs)\n",
+ seekTimeUs, seekTimeUs / 1E6);
+ }
+ }
+
+ decoder->stop();
+
+ return;
+ }
+
int n = 0;
int64_t startTime = getNowUs();