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 23b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <media/stagefright/DataSource.h> 24b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <media/stagefright/MediaExtractor.h> 25d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hung#include <media/stagefright/RemoteDataSource.h> 26b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include "MediaExtractorService.h" 27b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 28b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissennamespace android { 29b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 30b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissensp<IMediaExtractor> MediaExtractorService::makeExtractor( 31b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen const sp<IDataSource> &remoteSource, const char *mime) { 32ebab3587f58316cdb488d44b9c17c35382fc8473Marco Nelissen ALOGV("@@@ MediaExtractorService::makeExtractor for %s", mime); 33b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 34b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen sp<DataSource> localSource = DataSource::CreateFromIDataSource(remoteSource); 35b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 3669d3d8a9540b0da787ea0beccad2517f057dd54dMarco Nelissen sp<IMediaExtractor> ret = MediaExtractor::CreateFromService(localSource, mime); 37b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 38ebab3587f58316cdb488d44b9c17c35382fc8473Marco Nelissen ALOGV("extractor service created %p (%s)", 39b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen ret.get(), 40b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen ret == NULL ? "" : ret->name()); 41b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 42a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen if (ret != NULL) { 43a321469104536544d1cf0c0098d14bbf14186e88Marco Nelissen registerMediaExtractor(ret, localSource, mime); 44a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen } 45a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen 46b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen return ret; 47b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen} 48b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 49d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hungsp<IDataSource> MediaExtractorService::makeIDataSource(int fd, int64_t offset, int64_t length) 50d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hung{ 51d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hung sp<DataSource> source = DataSource::CreateFromFd(fd, offset, length); 52d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hung return source.get() != nullptr ? source->asIDataSource() : nullptr; 53d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hung} 54d49dbd6b625cddb82f3f7bbeac62d48ef338ef0fAndy Hung 55a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissenstatus_t MediaExtractorService::dump(int fd, const Vector<String16>& args) { 5669d3d8a9540b0da787ea0beccad2517f057dd54dMarco Nelissen return dumpExtractors(fd, args); 57a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen} 58a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen 59b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissenstatus_t MediaExtractorService::onTransact(uint32_t code, const Parcel& data, Parcel* reply, 60b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen uint32_t flags) 61b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen{ 62b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen return BnMediaExtractorService::onTransact(code, data, reply, flags); 63b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen} 64b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 65b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen} // namespace android 66