Merge "Add a seek test to the stagefright commandline tool." into gingerbread
This commit is contained in:
committed by
Android (Google) Code Review
commit
ff0ab64ca4
@@ -278,6 +278,62 @@ static void writeSourceToMP4(const sp<MediaSource> &source) {
|
|||||||
writer->stop();
|
writer->stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void performSeekTest(const sp<MediaSource> &source) {
|
||||||
|
CHECK_EQ(OK, source->start());
|
||||||
|
|
||||||
|
int64_t durationUs;
|
||||||
|
CHECK(source->getFormat()->findInt64(kKeyDuration, &durationUs));
|
||||||
|
|
||||||
|
for (int64_t seekTimeUs = 0; seekTimeUs <= durationUs;
|
||||||
|
seekTimeUs += 60000ll) {
|
||||||
|
MediaSource::ReadOptions options;
|
||||||
|
options.setSeekTo(
|
||||||
|
seekTimeUs, MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC);
|
||||||
|
|
||||||
|
MediaBuffer *buffer;
|
||||||
|
status_t err;
|
||||||
|
for (;;) {
|
||||||
|
err = source->read(&buffer, &options);
|
||||||
|
|
||||||
|
options.clearSeekTo();
|
||||||
|
|
||||||
|
if (err == INFO_FORMAT_CHANGED) {
|
||||||
|
CHECK(buffer == NULL);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err != OK) {
|
||||||
|
CHECK(buffer == NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer->range_length() > 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK(buffer != NULL);
|
||||||
|
|
||||||
|
buffer->release();
|
||||||
|
buffer = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err == OK) {
|
||||||
|
int64_t timeUs;
|
||||||
|
CHECK(buffer->meta_data()->findInt64(kKeyTime, &timeUs));
|
||||||
|
|
||||||
|
printf("%lld\t%lld\t%lld\n", seekTimeUs, timeUs, seekTimeUs - timeUs);
|
||||||
|
|
||||||
|
buffer->release();
|
||||||
|
buffer = NULL;
|
||||||
|
} else {
|
||||||
|
printf("ERROR\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CHECK_EQ(OK, source->stop());
|
||||||
|
}
|
||||||
|
|
||||||
static void usage(const char *me) {
|
static void usage(const char *me) {
|
||||||
fprintf(stderr, "usage: %s\n", me);
|
fprintf(stderr, "usage: %s\n", me);
|
||||||
fprintf(stderr, " -h(elp)\n");
|
fprintf(stderr, " -h(elp)\n");
|
||||||
@@ -291,6 +347,7 @@ static void usage(const char *me) {
|
|||||||
fprintf(stderr, " -s(oftware) prefer software codec\n");
|
fprintf(stderr, " -s(oftware) prefer software codec\n");
|
||||||
fprintf(stderr, " -o playback audio\n");
|
fprintf(stderr, " -o playback audio\n");
|
||||||
fprintf(stderr, " -w(rite) filename (write to .mp4 file)\n");
|
fprintf(stderr, " -w(rite) filename (write to .mp4 file)\n");
|
||||||
|
fprintf(stderr, " -k seek test\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
@@ -300,6 +357,7 @@ int main(int argc, char **argv) {
|
|||||||
bool listComponents = false;
|
bool listComponents = false;
|
||||||
bool dumpProfiles = false;
|
bool dumpProfiles = false;
|
||||||
bool extractThumbnail = false;
|
bool extractThumbnail = false;
|
||||||
|
bool seekTest = false;
|
||||||
gNumRepetitions = 1;
|
gNumRepetitions = 1;
|
||||||
gMaxNumFrames = 0;
|
gMaxNumFrames = 0;
|
||||||
gReproduceBug = -1;
|
gReproduceBug = -1;
|
||||||
@@ -308,7 +366,7 @@ int main(int argc, char **argv) {
|
|||||||
gWriteMP4 = false;
|
gWriteMP4 = false;
|
||||||
|
|
||||||
int res;
|
int res;
|
||||||
while ((res = getopt(argc, argv, "han:lm:b:ptsow:")) >= 0) {
|
while ((res = getopt(argc, argv, "han:lm:b:ptsow:k")) >= 0) {
|
||||||
switch (res) {
|
switch (res) {
|
||||||
case 'a':
|
case 'a':
|
||||||
{
|
{
|
||||||
@@ -375,6 +433,12 @@ int main(int argc, char **argv) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'k':
|
||||||
|
{
|
||||||
|
seekTest = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case '?':
|
case '?':
|
||||||
case 'h':
|
case 'h':
|
||||||
default:
|
default:
|
||||||
@@ -585,6 +649,8 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
if (gWriteMP4) {
|
if (gWriteMP4) {
|
||||||
writeSourceToMP4(mediaSource);
|
writeSourceToMP4(mediaSource);
|
||||||
|
} else if (seekTest) {
|
||||||
|
performSeekTest(mediaSource);
|
||||||
} else {
|
} else {
|
||||||
playSource(&client, mediaSource);
|
playSource(&client, mediaSource);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user