189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/*
289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *
489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * you may not use this file except in compliance with the License.
689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * You may obtain a copy of the License at
789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *
889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *
1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * See the License for the specific language governing permissions and
1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * limitations under the License.
1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */
1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifndef MEDIAMETADATARETRIEVER_H
1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define MEDIAMETADATARETRIEVER_H
2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/Errors.h>  // for status_t
2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/threads.h>
237562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IMemory.h>
2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaMetadataRetriever.h>
2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android {
2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass IMediaPlayerService;
2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass IMediaMetadataRetriever;
3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// Keep these in synch with the constants defined in MediaMetadataRetriever.java
3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// class.
3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectenum {
3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    METADATA_KEY_CD_TRACK_NUMBER = 0,
3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    METADATA_KEY_ALBUM           = 1,
3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    METADATA_KEY_ARTIST          = 2,
3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    METADATA_KEY_AUTHOR          = 3,
3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    METADATA_KEY_COMPOSER        = 4,
3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    METADATA_KEY_DATE            = 5,
4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    METADATA_KEY_GENRE           = 6,
4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    METADATA_KEY_TITLE           = 7,
4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    METADATA_KEY_YEAR            = 8,
4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    METADATA_KEY_DURATION        = 9,
4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    METADATA_KEY_NUM_TRACKS      = 10,
457f7d52ac18dfc3c6d8f6267dad29306613e9bd0eJames Dong    METADATA_KEY_WRITER          = 11,
467f7d52ac18dfc3c6d8f6267dad29306613e9bd0eJames Dong    METADATA_KEY_MIMETYPE        = 12,
477f7d52ac18dfc3c6d8f6267dad29306613e9bd0eJames Dong    METADATA_KEY_ALBUMARTIST     = 13,
487f7d52ac18dfc3c6d8f6267dad29306613e9bd0eJames Dong    METADATA_KEY_DISC_NUMBER     = 14,
497f7d52ac18dfc3c6d8f6267dad29306613e9bd0eJames Dong    METADATA_KEY_COMPILATION     = 15,
502256d515e6fa1dd95b8fd0de05b56d8c83af8327Andreas Huber    METADATA_KEY_HAS_AUDIO       = 16,
512256d515e6fa1dd95b8fd0de05b56d8c83af8327Andreas Huber    METADATA_KEY_HAS_VIDEO       = 17,
522256d515e6fa1dd95b8fd0de05b56d8c83af8327Andreas Huber    METADATA_KEY_VIDEO_WIDTH     = 18,
532256d515e6fa1dd95b8fd0de05b56d8c83af8327Andreas Huber    METADATA_KEY_VIDEO_HEIGHT    = 19,
542256d515e6fa1dd95b8fd0de05b56d8c83af8327Andreas Huber    METADATA_KEY_BITRATE         = 20,
557a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3Gloria Wang    METADATA_KEY_TIMED_TEXT_LANGUAGES      = 21,
560d0edfb024f65f7e1097bf1814ae229ce9cb367dGloria Wang    METADATA_KEY_IS_DRM          = 22,
574948818cb91176df74c972ac27b2f392b5d148bcJames Dong    METADATA_KEY_LOCATION        = 23,
585a81ad893eada20c32596be53dabe203b99bec3cJames Dong    METADATA_KEY_VIDEO_ROTATION  = 24,
592256d515e6fa1dd95b8fd0de05b56d8c83af8327Andreas Huber
6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    // Add more here...
6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaMetadataRetriever: public RefBase
6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    MediaMetadataRetriever();
6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    ~MediaMetadataRetriever();
6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    void disconnect();
69af8791e112c8072452bd14ef3c43a47511d19542Andreas Huber
70af8791e112c8072452bd14ef3c43a47511d19542Andreas Huber    status_t setDataSource(
71af8791e112c8072452bd14ef3c43a47511d19542Andreas Huber            const char *dataSourceUrl,
72af8791e112c8072452bd14ef3c43a47511d19542Andreas Huber            const KeyedVector<String8, String8> *headers = NULL);
73af8791e112c8072452bd14ef3c43a47511d19542Andreas Huber
7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setDataSource(int fd, int64_t offset, int64_t length);
7516afe2fb439cab6125bb46a07a8078d4ce1c1ea5James Dong    sp<IMemory> getFrameAtTime(int64_t timeUs, int option);
7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    sp<IMemory> extractAlbumArt();
7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    const char* extractMetadata(int keyCode);
7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate:
8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    static const sp<IMediaPlayerService>& getService();
8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    class DeathNotifier: public IBinder::DeathRecipient
8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    public:
8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        DeathNotifier() {}
8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        virtual ~DeathNotifier();
8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        virtual void binderDied(const wp<IBinder>& who);
8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    };
8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    static sp<DeathNotifier>                  sDeathNotifier;
9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    static Mutex                              sServiceLock;
9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    static sp<IMediaPlayerService>            sService;
9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex                                     mLock;
9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    sp<IMediaMetadataRetriever>               mRetriever;
9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // MEDIAMETADATARETRIEVER_H
102