mediametadataretriever.h revision 7a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3
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,
562256d515e6fa1dd95b8fd0de05b56d8c83af8327Andreas Huber
5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    // Add more here...
5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
5989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaMetadataRetriever: public RefBase
6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
6289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    MediaMetadataRetriever();
6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    ~MediaMetadataRetriever();
6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    void disconnect();
66af8791e112c8072452bd14ef3c43a47511d19542Andreas Huber
67af8791e112c8072452bd14ef3c43a47511d19542Andreas Huber    status_t setDataSource(
68af8791e112c8072452bd14ef3c43a47511d19542Andreas Huber            const char *dataSourceUrl,
69af8791e112c8072452bd14ef3c43a47511d19542Andreas Huber            const KeyedVector<String8, String8> *headers = NULL);
70af8791e112c8072452bd14ef3c43a47511d19542Andreas Huber
7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    status_t setDataSource(int fd, int64_t offset, int64_t length);
7216afe2fb439cab6125bb46a07a8078d4ce1c1ea5James Dong    sp<IMemory> getFrameAtTime(int64_t timeUs, int option);
7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    sp<IMemory> extractAlbumArt();
7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    const char* extractMetadata(int keyCode);
7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate:
7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    static const sp<IMediaPlayerService>& getService();
7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    class DeathNotifier: public IBinder::DeathRecipient
8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    {
8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    public:
8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        DeathNotifier() {}
8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        virtual ~DeathNotifier();
8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project        virtual void binderDied(const wp<IBinder>& who);
8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    };
8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    static sp<DeathNotifier>                  sDeathNotifier;
8889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    static Mutex                              sServiceLock;
8989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    static sp<IMediaPlayerService>            sService;
9089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    Mutex                                     mLock;
9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    sp<IMediaMetadataRetriever>               mRetriever;
9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // MEDIAMETADATARETRIEVER_H
99