summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/media/stagefright/timedtext/TimedTextDriver.h5
-rw-r--r--media/libstagefright/AwesomePlayer.cpp2
-rw-r--r--media/libstagefright/StagefrightMediaScanner.cpp15
-rw-r--r--media/libstagefright/timedtext/TimedTextDriver.cpp48
-rw-r--r--services/audioflinger/AudioFlinger.cpp4
5 files changed, 50 insertions, 24 deletions
diff --git a/include/media/stagefright/timedtext/TimedTextDriver.h b/include/media/stagefright/timedtext/TimedTextDriver.h
index b9752df..e3ca536 100644
--- a/include/media/stagefright/timedtext/TimedTextDriver.h
+++ b/include/media/stagefright/timedtext/TimedTextDriver.h
@@ -30,6 +30,7 @@ class MediaSource;
class Parcel;
class TimedTextPlayer;
class TimedTextSource;
+class DataSource;
class TimedTextDriver {
public:
@@ -48,7 +49,7 @@ public:
status_t addOutOfBandTextSource(const char *uri, const char *mimeType);
// Caller owns the file desriptor and caller is responsible for closing it.
status_t addOutOfBandTextSource(
- int fd, off64_t offset, size_t length, const char *mimeType);
+ int fd, off64_t offset, off64_t length, const char *mimeType);
void getTrackInfo(Parcel *parcel);
@@ -72,6 +73,8 @@ private:
// -- End of variables to be guarded by mLock
status_t selectTrack_l(int32_t index);
+ status_t createOutOfBandTextSource(
+ const char *mimeType, const sp<DataSource>& dataSource);
DISALLOW_EVIL_CONSTRUCTORS(TimedTextDriver);
};
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index f96a4df..120a410 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -2292,7 +2292,7 @@ status_t AwesomePlayer::invoke(const Parcel &request, Parcel *reply) {
}
int fd = request.readFileDescriptor();
off64_t offset = request.readInt64();
- size_t length = request.readInt64();
+ off64_t length = request.readInt64();
String8 mimeType(request.readString16());
return mTextDriver->addOutOfBandTextSource(
fd, offset, length, mimeType);
diff --git a/media/libstagefright/StagefrightMediaScanner.cpp b/media/libstagefright/StagefrightMediaScanner.cpp
index 711a8cd..b7cf96e 100644
--- a/media/libstagefright/StagefrightMediaScanner.cpp
+++ b/media/libstagefright/StagefrightMediaScanner.cpp
@@ -18,6 +18,10 @@
#define LOG_TAG "StagefrightMediaScanner"
#include <utils/Log.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
#include <media/stagefright/StagefrightMediaScanner.h>
#include <media/mediametadataretriever.h>
@@ -139,7 +143,16 @@ MediaScanResult StagefrightMediaScanner::processFileInternal(
sp<MediaMetadataRetriever> mRetriever(new MediaMetadataRetriever);
- status_t status = mRetriever->setDataSource(path);
+ int fd = open(path, O_RDONLY | O_LARGEFILE);
+ status_t status;
+ if (fd < 0) {
+ // couldn't open it locally, maybe the media server can?
+ status = mRetriever->setDataSource(path);
+ } else {
+ status = mRetriever->setDataSource(fd, 0, 0x7ffffffffffffffL);
+ close(fd);
+ }
+
if (status) {
return MEDIA_SCAN_RESULT_ERROR;
}
diff --git a/media/libstagefright/timedtext/TimedTextDriver.cpp b/media/libstagefright/timedtext/TimedTextDriver.cpp
index 8ee15f8..a99d882 100644
--- a/media/libstagefright/timedtext/TimedTextDriver.cpp
+++ b/media/libstagefright/timedtext/TimedTextDriver.cpp
@@ -23,6 +23,7 @@
#include <media/mediaplayer.h>
#include <media/MediaPlayerInterface.h>
#include <media/stagefright/DataSource.h>
+#include <media/stagefright/FileSource.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
#include <media/stagefright/MediaSource.h>
@@ -161,15 +162,32 @@ status_t TimedTextDriver::addInBandTextSource(
status_t TimedTextDriver::addOutOfBandTextSource(
const char *uri, const char *mimeType) {
- // TODO: Define "TimedTextSource::CreateFromURI(uri)"
- // and move below lines there..?
-
// To support local subtitle file only for now
if (strncasecmp("file://", uri, 7)) {
+ ALOGE("uri('%s') is not a file", uri);
return ERROR_UNSUPPORTED;
}
+
sp<DataSource> dataSource =
DataSource::CreateFromURI(uri);
+ return createOutOfBandTextSource(mimeType, dataSource);
+}
+
+status_t TimedTextDriver::addOutOfBandTextSource(
+ int fd, off64_t offset, off64_t length, const char *mimeType) {
+
+ if (fd < 0) {
+ ALOGE("Invalid file descriptor: %d", fd);
+ return ERROR_UNSUPPORTED;
+ }
+
+ sp<DataSource> dataSource = new FileSource(dup(fd), offset, length);
+ return createOutOfBandTextSource(mimeType, dataSource);
+}
+
+status_t TimedTextDriver::createOutOfBandTextSource(
+ const char *mimeType, const sp<DataSource>& dataSource) {
+
if (dataSource == NULL) {
return ERROR_UNSUPPORTED;
}
@@ -189,13 +207,6 @@ status_t TimedTextDriver::addOutOfBandTextSource(
return OK;
}
-status_t TimedTextDriver::addOutOfBandTextSource(
- int fd, off64_t offset, size_t length, const char *mimeType) {
- // Not supported yet. This requires DataSource::sniff to detect various text
- // formats such as srt/smi/ttml.
- return ERROR_UNSUPPORTED;
-}
-
void TimedTextDriver::getTrackInfo(Parcel *parcel) {
Mutex::Autolock autoLock(mLock);
Vector<sp<TimedTextSource> >::const_iterator iter;
@@ -203,19 +214,18 @@ void TimedTextDriver::getTrackInfo(Parcel *parcel) {
for (iter = mTextSourceVector.begin();
iter != mTextSourceVector.end(); ++iter) {
sp<MetaData> meta = (*iter)->getFormat();
- if (meta != NULL) {
- // There are two fields.
- parcel->writeInt32(2);
- // track type.
- parcel->writeInt32(MEDIA_TRACK_TYPE_TIMEDTEXT);
+ // There are two fields.
+ parcel->writeInt32(2);
- const char *lang = "und";
+ // track type.
+ parcel->writeInt32(MEDIA_TRACK_TYPE_TIMEDTEXT);
+
+ const char *lang = "und";
+ if (meta != NULL) {
meta->findCString(kKeyMediaLanguage, &lang);
- parcel->writeString16(String16(lang));
- } else {
- parcel->writeInt32(0);
}
+ parcel->writeString16(String16(lang));
}
}
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 9b4fb7a..d0611b0 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -4045,11 +4045,11 @@ void AudioFlinger::PlaybackThread::TimedTrack::updateFramesPendingAfterTrim_l(
uint32_t bufBytes = buf.buffer()->size();
uint32_t consumedAlready = buf.position();
- ALOG_ASSERT(consumedAlready <= bufFrames,
+ ALOG_ASSERT(consumedAlready <= bufBytes,
"Bad bookkeeping while updating frames pending. Timed buffer is"
" only %u bytes long, but claims to have consumed %u"
" bytes. (update reason: \"%s\")",
- bufFrames, consumedAlready, logTag);
+ bufBytes, consumedAlready, logTag);
uint32_t bufFrames = (bufBytes - consumedAlready) / mCblk->frameSize;
ALOG_ASSERT(mFramesPendingInQueue >= bufFrames,