Home | History | Annotate | Download | only in media
      1 /*
      2 **
      3 ** Copyright (C) 2008 The Android Open Source Project
      4 **
      5 ** Licensed under the Apache License, Version 2.0 (the "License");
      6 ** you may not use this file except in compliance with the License.
      7 ** You may obtain a copy of the License at
      8 **
      9 **     http://www.apache.org/licenses/LICENSE-2.0
     10 **
     11 ** Unless required by applicable law or agreed to in writing, software
     12 ** distributed under the License is distributed on an "AS IS" BASIS,
     13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 ** See the License for the specific language governing permissions and
     15 ** limitations under the License.
     16 */
     17 
     18 #ifndef ANDROID_MEDIAMETADATARETRIEVERINTERFACE_H
     19 #define ANDROID_MEDIAMETADATARETRIEVERINTERFACE_H
     20 
     21 #include <utils/RefBase.h>
     22 #include <media/mediametadataretriever.h>
     23 #include <private/media/VideoFrame.h>
     24 
     25 namespace android {
     26 
     27 // Abstract base class
     28 class MediaMetadataRetrieverBase : public RefBase
     29 {
     30 public:
     31                         MediaMetadataRetrieverBase() {}
     32     virtual             ~MediaMetadataRetrieverBase() {}
     33     virtual status_t    setDataSource(const char *url) = 0;
     34     virtual status_t    setDataSource(int fd, int64_t offset, int64_t length) = 0;
     35     virtual status_t    setMode(int mode) = 0;
     36     virtual status_t    getMode(int* mode) const = 0;
     37     virtual VideoFrame* captureFrame() = 0;
     38     virtual MediaAlbumArt* extractAlbumArt() = 0;
     39     virtual const char* extractMetadata(int keyCode) = 0;
     40 };
     41 
     42 // MediaMetadataRetrieverInterface
     43 class MediaMetadataRetrieverInterface : public MediaMetadataRetrieverBase
     44 {
     45 public:
     46     MediaMetadataRetrieverInterface()
     47         : mMode(0) {
     48     }
     49 
     50     virtual             ~MediaMetadataRetrieverInterface() {}
     51 
     52     // @param mode The intended mode of operations:
     53     // can be any of the following:
     54     // METADATA_MODE_NOOP: Experimental - just add and remove data source.
     55     // METADATA_MODE_FRAME_CAPTURE_ONLY: For capture frame/thumbnail only.
     56     // METADATA_MODE_METADATA_RETRIEVAL_ONLY: For meta data retrieval only.
     57     // METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL: For both frame
     58     //     capture and meta data retrieval.
     59     virtual status_t    setMode(int mode) {
     60                             if (mode < METADATA_MODE_NOOP ||
     61                                 mode > METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL) {
     62                                 return BAD_VALUE;
     63                             }
     64 
     65                             mMode = mode;
     66                             return NO_ERROR;
     67                         }
     68 
     69     virtual status_t    getMode(int* mode) const { *mode = mMode; return NO_ERROR; }
     70     virtual VideoFrame* captureFrame() { return NULL; }
     71     virtual MediaAlbumArt* extractAlbumArt() { return NULL; }
     72     virtual const char* extractMetadata(int keyCode) { return NULL; }
     73 
     74     uint32_t mMode;
     75 };
     76 
     77 }; // namespace android
     78 
     79 #endif // ANDROID_MEDIAMETADATARETRIEVERINTERFACE_H
     80 
     81