1e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber/*
2e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Copyright (C) 2009 The Android Open Source Project
3e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *
4e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * you may not use this file except in compliance with the License.
6e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * You may obtain a copy of the License at
7e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *
8e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *
10e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Unless required by applicable law or agreed to in writing, software
11e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * See the License for the specific language governing permissions and
14e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * limitations under the License.
15e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber */
16e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
17e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#ifndef MEDIA_EXTRACTOR_H_
18e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
19e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#define MEDIA_EXTRACTOR_H_
20e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
21e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <utils/RefBase.h>
22e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
23e46b7be812d68e49710b34048662cbf18e2a6550Andreas Hubernamespace android {
24e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
25e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass DataSource;
26e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass MediaSource;
27e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass MetaData;
28e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
29be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huberclass MediaExtractor : public RefBase {
30e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic:
31be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber    static sp<MediaExtractor> Create(
32be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber            const sp<DataSource> &source, const char *mime = NULL);
33e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
34be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber    virtual size_t countTracks() = 0;
35be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber    virtual sp<MediaSource> getTrack(size_t index) = 0;
36e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber
37e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber    enum GetTrackMetaDataFlags {
38e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber        kIncludeExtensiveMetaData = 1
39e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber    };
40e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber    virtual sp<MetaData> getTrackMetaData(
41e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber            size_t index, uint32_t flags = 0) = 0;
42e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
43aee3c6394a367abf283936cb8b8bd85ed028c050Andreas Huber    // Return container specific meta-data. The default implementation
44aee3c6394a367abf283936cb8b8bd85ed028c050Andreas Huber    // returns an empty metadata object.
45aee3c6394a367abf283936cb8b8bd85ed028c050Andreas Huber    virtual sp<MetaData> getMetaData();
46aee3c6394a367abf283936cb8b8bd85ed028c050Andreas Huber
4762f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber    enum Flags {
4810b9b3f3fe47cea0833fe2c7d5ed08a1185f9006Andreas Huber        CAN_SEEK_BACKWARD  = 1,  // the "seek 10secs back button"
4910b9b3f3fe47cea0833fe2c7d5ed08a1185f9006Andreas Huber        CAN_SEEK_FORWARD   = 2,  // the "seek 10secs forward button"
5062f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber        CAN_PAUSE          = 4,
5110b9b3f3fe47cea0833fe2c7d5ed08a1185f9006Andreas Huber        CAN_SEEK           = 8,  // the "seek bar"
5262f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber    };
5362f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber
5462f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber    // If subclasses do _not_ override this, the default is
5510b9b3f3fe47cea0833fe2c7d5ed08a1185f9006Andreas Huber    // CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_SEEK | CAN_PAUSE
5662f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber    virtual uint32_t flags() const;
5762f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber
58d5770917a50a828cb4337c2a392b3e4a375624b9Gloria Wang    // for DRM
5982428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang    virtual void setDrmFlag(bool flag) {
6082428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang        mIsDrm = flag;
6182428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang    };
6282428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang    virtual bool getDrmFlag() {
6382428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang        return mIsDrm;
6482428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang    }
65d5770917a50a828cb4337c2a392b3e4a375624b9Gloria Wang    virtual char* getDrmTrackInfo(size_t trackID, int *len) {
66d5770917a50a828cb4337c2a392b3e4a375624b9Gloria Wang        return NULL;
67d5770917a50a828cb4337c2a392b3e4a375624b9Gloria Wang    }
68d5770917a50a828cb4337c2a392b3e4a375624b9Gloria Wang
69e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberprotected:
70e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    MediaExtractor() {}
71be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber    virtual ~MediaExtractor() {}
72e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
73e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberprivate:
7482428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang    bool mIsDrm;
7582428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang
76e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    MediaExtractor(const MediaExtractor &);
77e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    MediaExtractor &operator=(const MediaExtractor &);
78e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber};
79e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
80e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}  // namespace android
81e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
82e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#endif  // MEDIA_EXTRACTOR_H_
83