Home | History | Annotate | Download | only in media
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 
     18 #ifndef MEDIAMETADATARETRIEVER_H
     19 #define MEDIAMETADATARETRIEVER_H
     20 
     21 #include <utils/Errors.h>  // for status_t
     22 #include <utils/threads.h>
     23 #include <binder/IMemory.h>
     24 #include <media/IMediaMetadataRetriever.h>
     25 
     26 namespace android {
     27 
     28 class IMediaPlayerService;
     29 class IMediaMetadataRetriever;
     30 
     31 // Keep these in synch with the constants defined in MediaMetadataRetriever.java
     32 // class.
     33 enum {
     34     METADATA_KEY_CD_TRACK_NUMBER = 0,
     35     METADATA_KEY_ALBUM           = 1,
     36     METADATA_KEY_ARTIST          = 2,
     37     METADATA_KEY_AUTHOR          = 3,
     38     METADATA_KEY_COMPOSER        = 4,
     39     METADATA_KEY_DATE            = 5,
     40     METADATA_KEY_GENRE           = 6,
     41     METADATA_KEY_TITLE           = 7,
     42     METADATA_KEY_YEAR            = 8,
     43     METADATA_KEY_DURATION        = 9,
     44     METADATA_KEY_NUM_TRACKS      = 10,
     45     METADATA_KEY_IS_DRM_CRIPPLED = 11,
     46     METADATA_KEY_CODEC           = 12,
     47     METADATA_KEY_RATING          = 13,
     48     METADATA_KEY_COMMENT         = 14,
     49     METADATA_KEY_COPYRIGHT       = 15,
     50     METADATA_KEY_BIT_RATE        = 16,
     51     METADATA_KEY_FRAME_RATE      = 17,
     52     METADATA_KEY_VIDEO_FORMAT    = 18,
     53     METADATA_KEY_VIDEO_HEIGHT    = 19,
     54     METADATA_KEY_VIDEO_WIDTH     = 20,
     55     METADATA_KEY_WRITER          = 21,
     56     METADATA_KEY_MIMETYPE        = 22,
     57     METADATA_KEY_DISC_NUMBER     = 23,
     58     METADATA_KEY_ALBUMARTIST     = 24,
     59     // Add more here...
     60 };
     61 
     62 // The intended mode of operations:$
     63 // METADATA_MODE_NOOP: Experimental - just add and remove data source.$
     64 // METADATA_MODE_FRAME_CAPTURE_ONLY: For capture frame/thumbnail only.$
     65 // METADATA_MODE_METADATA_RETRIEVAL_ONLY: For meta data retrieval only.$
     66 // METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL: For both frame capture
     67 //   and meta data retrieval.$
     68 enum {
     69     METADATA_MODE_NOOP                                 = 0x00,
     70     METADATA_MODE_METADATA_RETRIEVAL_ONLY              = 0x01,
     71     METADATA_MODE_FRAME_CAPTURE_ONLY                   = 0x02,
     72     METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL = 0x03
     73 };
     74 
     75 class MediaMetadataRetriever: public RefBase
     76 {
     77 public:
     78     MediaMetadataRetriever();
     79     ~MediaMetadataRetriever();
     80     void disconnect();
     81     status_t setDataSource(const char* dataSourceUrl);
     82     status_t setDataSource(int fd, int64_t offset, int64_t length);
     83     status_t setMode(int mode);
     84     status_t getMode(int* mode);
     85     sp<IMemory> captureFrame();
     86     sp<IMemory> extractAlbumArt();
     87     const char* extractMetadata(int keyCode);
     88 
     89 private:
     90     static const sp<IMediaPlayerService>& getService();
     91 
     92     class DeathNotifier: public IBinder::DeathRecipient
     93     {
     94     public:
     95         DeathNotifier() {}
     96         virtual ~DeathNotifier();
     97         virtual void binderDied(const wp<IBinder>& who);
     98     };
     99 
    100     static sp<DeathNotifier>                  sDeathNotifier;
    101     static Mutex                              sServiceLock;
    102     static sp<IMediaPlayerService>            sService;
    103 
    104     Mutex                                     mLock;
    105     sp<IMediaMetadataRetriever>               mRetriever;
    106 
    107 };
    108 
    109 }; // namespace android
    110 
    111 #endif // MEDIAMETADATARETRIEVER_H
    112