mediametadataretriever.h revision d3e0d861aa68a7ef129fe228595bff734448ebc8
1e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/* 2e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Copyright (C) 2008 The Android Open Source Project 3e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 4e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Licensed under the Apache License, Version 2.0 (the "License"); 5e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * you may not use this file except in compliance with the License. 6e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * You may obtain a copy of the License at 7e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 8e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * http://www.apache.org/licenses/LICENSE-2.0 9e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 10e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Unless required by applicable law or agreed to in writing, software 11e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * distributed under the License is distributed on an "AS IS" BASIS, 12e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * See the License for the specific language governing permissions and 14e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * limitations under the License. 15e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */ 16e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 17e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 18e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#ifndef MEDIAMETADATARETRIEVER_H 19e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#define MEDIAMETADATARETRIEVER_H 20e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 21e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <utils/Errors.h> // for status_t 22e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <utils/threads.h> 23e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <binder/IMemory.h> 24e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/IMediaMetadataRetriever.h> 25e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 26e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace android { 27e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 28e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass IDataSource; 29e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstruct IMediaHTTPService; 30e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass IMediaPlayerService; 31e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass IMediaMetadataRetriever; 32e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 33e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// Keep these in synch with the constants defined in MediaMetadataRetriever.java 34e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// class. 35e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanenum { 36e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_CD_TRACK_NUMBER = 0, 37e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_ALBUM = 1, 38e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_ARTIST = 2, 39e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_AUTHOR = 3, 40e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_COMPOSER = 4, 41e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_DATE = 5, 42e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_GENRE = 6, 43e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_TITLE = 7, 44e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_YEAR = 8, 45e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_DURATION = 9, 46e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_NUM_TRACKS = 10, 47e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_WRITER = 11, 48e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_MIMETYPE = 12, 49e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_ALBUMARTIST = 13, 50e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_DISC_NUMBER = 14, 51e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_COMPILATION = 15, 52e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_HAS_AUDIO = 16, 53e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_HAS_VIDEO = 17, 54e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_VIDEO_WIDTH = 18, 55e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_VIDEO_HEIGHT = 19, 56e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_BITRATE = 20, 57e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_TIMED_TEXT_LANGUAGES = 21, 58e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_IS_DRM = 22, 59e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_LOCATION = 23, 60e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_VIDEO_ROTATION = 24, 61e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman METADATA_KEY_CAPTURE_FRAMERATE = 25, 62d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang METADATA_KEY_HAS_IMAGE = 26, 63d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang METADATA_KEY_IMAGE_COUNT = 27, 64d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang METADATA_KEY_IMAGE_PRIMARY = 28, 65d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang METADATA_KEY_IMAGE_WIDTH = 29, 66d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang METADATA_KEY_IMAGE_HEIGHT = 30, 67d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang METADATA_KEY_IMAGE_ROTATION = 31, 68d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang METADATA_KEY_VIDEO_FRAME_COUNT = 32, 69e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 70e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Add more here... 71e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 72e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 73e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass MediaMetadataRetriever: public RefBase 74e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman{ 75e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanpublic: 76e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman MediaMetadataRetriever(); 77e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman ~MediaMetadataRetriever(); 78e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman void disconnect(); 79e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 80e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setDataSource( 81e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const sp<IMediaHTTPService> &httpService, 82e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const char *dataSourceUrl, 83e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const KeyedVector<String8, String8> *headers = NULL); 84e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 85e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman status_t setDataSource(int fd, int64_t offset, int64_t length); 8624c15776247c46e34562100213035bb7aaffe013Chong Zhang status_t setDataSource( 8724c15776247c46e34562100213035bb7aaffe013Chong Zhang const sp<IDataSource>& dataSource, const char *mime = NULL); 8824c15776247c46e34562100213035bb7aaffe013Chong Zhang sp<IMemory> getFrameAtTime(int64_t timeUs, int option, 89b51ca280e6aaace44ec1d80837439b825c6fce82Chong Zhang int colorFormat = HAL_PIXEL_FORMAT_RGB_565, bool metaOnly = false); 90d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang sp<IMemory> getImageAtIndex(int index, 91d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang int colorFormat = HAL_PIXEL_FORMAT_RGB_565, bool metaOnly = false); 92d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang status_t getFrameAtIndex( 93d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang std::vector<sp<IMemory> > *frames, int frameIndex, int numFrames = 1, 94d3e0d861aa68a7ef129fe228595bff734448ebc8Chong Zhang int colorFormat = HAL_PIXEL_FORMAT_RGB_565, bool metaOnly = false); 95e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman sp<IMemory> extractAlbumArt(); 96e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const char* extractMetadata(int keyCode); 97e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 98e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanprivate: 99e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static const sp<IMediaPlayerService> getService(); 100e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 101e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman class DeathNotifier: public IBinder::DeathRecipient 102e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman { 103e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman public: 104e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman DeathNotifier() {} 105e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual ~DeathNotifier(); 106e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual void binderDied(const wp<IBinder>& who); 107e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman }; 108e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 109e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static sp<DeathNotifier> sDeathNotifier; 110e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static Mutex sServiceLock; 111e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static sp<IMediaPlayerService> sService; 112e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 113e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman Mutex mLock; 114e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman sp<IMediaMetadataRetriever> mRetriever; 115e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 116e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 117e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 118e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; // namespace android 119e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 120e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#endif // MEDIAMETADATARETRIEVER_H 121