1b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen/* 2b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * Copyright (C) 2013 The Android Open Source Project 3b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * 4b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * Licensed under the Apache License, Version 2.0 (the "License"); 5b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * you may not use this file except in compliance with the License. 6b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * You may obtain a copy of the License at 7b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * 8b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * http://www.apache.org/licenses/LICENSE-2.0 9b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * 10b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * Unless required by applicable law or agreed to in writing, software 11b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * distributed under the License is distributed on an "AS IS" BASIS, 12b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * See the License for the specific language governing permissions and 14b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * limitations under the License. 15b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen */ 16b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 17b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#define LOG_TAG "MediaExtractorService" 18b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen//#define LOG_NDEBUG 0 19b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <utils/Log.h> 20b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 21a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen#include <utils/Vector.h> 22a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen 23d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang#include <media/DataSource.h> 24d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang#include <media/MediaExtractor.h> 25d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang#include <media/stagefright/DataSourceFactory.h> 26d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang#include <media/stagefright/InterfaceUtils.h> 27d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang#include <media/stagefright/MediaExtractorFactory.h> 28d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hung#include <media/stagefright/RemoteDataSource.h> 29b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include "MediaExtractorService.h" 30b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 31b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissennamespace android { 32b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 33b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissensp<IMediaExtractor> MediaExtractorService::makeExtractor( 34b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen const sp<IDataSource> &remoteSource, const char *mime) { 35ebab3587f58316cdb488d44b9c17c35382fc8473Marco Nelissen ALOGV("@@@ MediaExtractorService::makeExtractor for %s", mime); 36b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 37d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang sp<DataSource> localSource = CreateDataSourceFromIDataSource(remoteSource); 38b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 395e1897bbd25d8353d9567b746ce50d4b80d30564Dongwon Kang sp<IMediaExtractor> extractor = MediaExtractorFactory::CreateFromService(localSource, mime); 40b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 41ebab3587f58316cdb488d44b9c17c35382fc8473Marco Nelissen ALOGV("extractor service created %p (%s)", 42ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang extractor.get(), 43ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang extractor == nullptr ? "" : extractor->name()); 44b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 45ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang if (extractor != nullptr) { 465e1897bbd25d8353d9567b746ce50d4b80d30564Dongwon Kang registerMediaExtractor(extractor, localSource, mime); 475e1897bbd25d8353d9567b746ce50d4b80d30564Dongwon Kang return extractor; 48a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen } 49ba8128f9db82da66f28c6e6740d4721d80da954eDongwon Kang return nullptr; 50b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen} 51b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 52d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hungsp<IDataSource> MediaExtractorService::makeIDataSource(int fd, int64_t offset, int64_t length) 53d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hung{ 54d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang sp<DataSource> source = DataSourceFactory::CreateFromFd(fd, offset, length); 55d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang return CreateIDataSourceFromDataSource(source); 56d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hung} 57d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hung 58a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissenstatus_t MediaExtractorService::dump(int fd, const Vector<String16>& args) { 59c96ca4397cca129afd6b111f61f98dcfc2c1e3a7Marco Nelissen return MediaExtractorFactory::dump(fd, args) || dumpExtractors(fd, args); 60a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen} 61a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen 62b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissenstatus_t MediaExtractorService::onTransact(uint32_t code, const Parcel& data, Parcel* reply, 63b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen uint32_t flags) 64b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen{ 65b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen return BnMediaExtractorService::onTransact(code, data, reply, flags); 66b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen} 67b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 68b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen} // namespace android 69