summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/StagefrightMediaScanner.cpp
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2012-04-13 13:28:12 -0700
committerMarco Nelissen <marcone@google.com>2012-04-13 13:46:48 -0700
commita28976b04c70cef3c8e79137478b6a7bc05608ac (patch)
tree3b61bb606b73f705d58d05282aa73d672cbaa9e6 /media/libstagefright/StagefrightMediaScanner.cpp
parent1803c3ae573e5fa3f3a1abe24ae802e30e5d5495 (diff)
downloadframeworks_av-a28976b04c70cef3c8e79137478b6a7bc05608ac.zip
frameworks_av-a28976b04c70cef3c8e79137478b6a7bc05608ac.tar.gz
frameworks_av-a28976b04c70cef3c8e79137478b6a7bc05608ac.tar.bz2
Make mediascanner use filedescriptors instead of paths
Media scanner needs to open the files now, because media server doesn't have the required permission. b/6330061 Change-Id: I2364d93dcc0530c15676664fc4a8c306351dde08
Diffstat (limited to 'media/libstagefright/StagefrightMediaScanner.cpp')
-rw-r--r--media/libstagefright/StagefrightMediaScanner.cpp15
1 files changed, 14 insertions, 1 deletions
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;
}