diff options
author | Marco Nelissen <marcone@google.com> | 2012-04-13 13:28:12 -0700 |
---|---|---|
committer | Marco Nelissen <marcone@google.com> | 2012-04-13 13:46:48 -0700 |
commit | a28976b04c70cef3c8e79137478b6a7bc05608ac (patch) | |
tree | 3b61bb606b73f705d58d05282aa73d672cbaa9e6 /media/libstagefright/StagefrightMediaScanner.cpp | |
parent | 1803c3ae573e5fa3f3a1abe24ae802e30e5d5495 (diff) | |
download | frameworks_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.cpp | 15 |
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; } |