Merge "Make mediascanner use filedescriptors instead of paths"
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 Parcel;
class TimedTextPlayer;
class TimedTextSource;
+class DataSource;
class TimedTextDriver {
public:
@@ -48,7 +49,7 @@
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 @@
// -- 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 @@
}
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/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::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 @@
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 @@
for (iter = mTextSourceVector.begin();
iter != mTextSourceVector.end(); ++iter) {
sp<MetaData> meta = (*iter)->getFormat();
+
+ // There are two fields.
+ parcel->writeInt32(2);
+
+ // track type.
+ parcel->writeInt32(MEDIA_TRACK_TYPE_TIMEDTEXT);
+
+ const char *lang = "und";
if (meta != NULL) {
- // There are two fields.
- parcel->writeInt32(2);
-
- // track type.
- parcel->writeInt32(MEDIA_TRACK_TYPE_TIMEDTEXT);
-
- const char *lang = "und";
meta->findCString(kKeyMediaLanguage, &lang);
- parcel->writeString16(String16(lang));
- } else {
- parcel->writeInt32(0);
}
+ parcel->writeString16(String16(lang));
}
}