1e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/*
2e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Copyright (C) 2009 The Android Open Source Project
3e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman *
4e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Licensed under the Apache License, Version 2.0 (the "License");
5e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * you may not use this file except in compliance with the License.
6e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * You may obtain a copy of the License at
7e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman *
8e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman *      http://www.apache.org/licenses/LICENSE-2.0
9e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman *
10e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Unless required by applicable law or agreed to in writing, software
11e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * distributed under the License is distributed on an "AS IS" BASIS,
12e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * See the License for the specific language governing permissions and
14e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * limitations under the License.
15e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */
16e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
17e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#ifndef IMEDIA_EXTRACTOR_BASE_H_
18e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
19e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#define IMEDIA_EXTRACTOR_BASE_H_
20e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
21e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/IMediaSource.h>
22e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/stagefright/DataSource.h>
23e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
24e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace android {
25e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
26e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass MetaData;
27e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace media {
28e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass ICas;
29e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
30e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanusing namespace media;
31e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
32e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass IMediaExtractor : public IInterface {
33e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanpublic:
34e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    DECLARE_META_INTERFACE(MediaExtractor);
35e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
36e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual size_t countTracks() = 0;
37322db26b76f7511c6d73f34a92a4e54840fcb876Wei Jia    // This function could return NULL IMediaSource even when index is within the
38322db26b76f7511c6d73f34a92a4e54840fcb876Wei Jia    // track count returned by countTracks, since it's possible the track is malformed
39322db26b76f7511c6d73f34a92a4e54840fcb876Wei Jia    // and it's not detected during countTracks call.
40e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual sp<IMediaSource> getTrack(size_t index) = 0;
41e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
42e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    enum GetTrackMetaDataFlags {
43e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman        kIncludeExtensiveMetaData = 1
44e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    };
45e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual sp<MetaData> getTrackMetaData(
46e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman            size_t index, uint32_t flags = 0) = 0;
47e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
48e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // Return container specific meta-data. The default implementation
49e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // returns an empty metadata object.
50e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual sp<MetaData> getMetaData() = 0;
51e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
52e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t getMetrics(Parcel *reply) = 0;
53e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
54e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    enum Flags {
55e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman        CAN_SEEK_BACKWARD  = 1,  // the "seek 10secs back button"
56e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman        CAN_SEEK_FORWARD   = 2,  // the "seek 10secs forward button"
57e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman        CAN_PAUSE          = 4,
58e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman        CAN_SEEK           = 8,  // the "seek bar"
59e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    };
60e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
61e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // If subclasses do _not_ override this, the default is
62e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_SEEK | CAN_PAUSE
63e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual uint32_t flags() const = 0;
64e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
65e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    // for DRM
66e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual char* getDrmTrackInfo(size_t trackID, int *len)  = 0;
67e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
68e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t setMediaCas(const sp<ICas> &cas) = 0;
69e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
70e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual void setUID(uid_t uid)  = 0;
71e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
72e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual const char * name() = 0;
73e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
74e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
75e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
76e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass BnMediaExtractor: public BnInterface<IMediaExtractor>
77e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman{
78e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanpublic:
79e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman    virtual status_t    onTransact(uint32_t code, const Parcel& data, Parcel* reply,
80e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman                                uint32_t flags = 0);
81e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman};
82e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
83e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanvoid registerMediaExtractor(
84e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman        const sp<IMediaExtractor> &extractor,
85e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman        const sp<DataSource> &source,
86e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman        const char *mime);
87e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
88e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanvoid registerMediaSource(
89e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman        const sp<IMediaExtractor> &extractor,
90e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman        const sp<IMediaSource> &source);
91e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
92e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstatus_t dumpExtractors(int fd, const Vector<String16>& args);
93e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
94e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
95e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}  // namespace android
96e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman
97e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#endif  // IMEDIA_EXTRACTOR_BASE_H_
98