blob: 4b3a530edf0be53e06d47df7efb164c8ecaf9a05 [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 2008 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
/**
* @file pvmf_meta_data_extension.h
* @brief Extension interface to retrieve metadata
*/
#ifndef PVMF_META_DATA_EXTENSION_H_INCLUDED
#define PVMF_META_DATA_EXTENSION_H_INCLUDED
#ifndef OSCL_BASE_H_INCLUDED
#include "oscl_base.h"
#endif
#ifndef PV_INTERFACE_H
#include "pv_interface.h"
#endif
#ifndef PV_UUID_H_INCLUDED
#include "pv_uuid.h"
#endif
#ifndef PVMF_FORMAT_TYPE_H_INCLUDED
#include "pvmf_event_handling.h"
#endif
#ifndef PVMF_META_DATA_TYPES_H_INCLUDED
#include "pvmf_meta_data_types.h"
#endif
#ifndef PVMI_KVP_H_INCLUDED
#include "pvmi_kvp.h"
#endif
#define PVMF_META_DATA_EXTENSION_INTERFACE_MIMETYPE "pvxxx/pvmf/pvmfmetadataextensioninterface"
// UUID for the extension interface
#define KPVMFMetadataExtensionUuid PVUuid(0x7DBD6D8D,0xB4CC,0x4887,0xB1,0x0B,0x7E,0xE6,0x48,0x47,0xB2,0x05)
/**
* PVMFMetadataExtensionInterface specifies the extension interface for metadata retrieval
*/
class PVMFMetadataExtensionInterface : public PVInterface
{
public:
/**
* Synchronous method to return the number of metadata keys for the specified query key string
*
* @param aQueryKeyString A NULL terminated character string specifying a subset of metadata keys to count.
* If the string is NULL, total number of all keys will be returned
*
* @returns The number of metadata keys
**/
virtual uint32 GetNumMetadataKeys(char* aQueryKeyString = NULL) = 0;
/**
* Synchronous method to return the number of metadata values for the specified list of key strings
*
* @param aKeyList A reference to a metadata key list to specifying the values of interest to count
*
* @returns The number of metadata values based on the provided key list
**/
virtual uint32 GetNumMetadataValues(PVMFMetadataList& aKeyList) = 0;
/**
* Asynchronous method to retrieve a list of metadata keys. The subset of all available keys in the node can
* be specified by providing a combination of query key string, starting index, and maximum number of keys to retrieve
*
* @param aSessionId The assigned node session ID to use for this request
* @param aKeyList A reference to a metadata key list to add the metadata keys
* @param aStartingKeyIndex Index into the node's total key list that corresponds to the first key entry to retrieve
* @param aMaxKeyEntries The maximum number of key entries to add to aKeyList. If there is no maximum, set to -1.
* @param aQueryKeyString Optional NULL terminated character string to select a subset of keys
* @param aContext Optional opaque data to be passed back to user with the command response
*
* @returns A unique command ID for asynchronous completion
**/
virtual PVMFCommandId GetNodeMetadataKeys(PVMFSessionId aSessionId,
PVMFMetadataList& aKeyList,
uint32 aStartingKeyIndex,
int32 aMaxKeyEntries = -1,
char* aQueryKeyString = NULL,
const OsclAny* aContextData = NULL) = 0;
/**
* Asynchronous method to retrieve a list of metadata values. The subset of all available values in the node can
* be specified by providing a combination of key list, starting index, and maximum number of values to retrieve
*
* @param aSessionId The assigned node session ID to use for this request
* @param aKeyList A reference to a metadata key list specifying the metadata values to retrieve
* @param aValueList A reference to a metadata value list to add the metadata values
* @param aStartingValueIndex Index into the node's value list specified by the key list that corresponds to the first value entry to retrieve
* @param aMaxValueEntries The maximum number of value entries to add to aValueList. If there is no maximum, set to -1.
* @param aContext Optional opaque data to be passed back to user with the command response
*
* @returns A unique command ID for asynchronous completion
**/
virtual PVMFCommandId GetNodeMetadataValues(PVMFSessionId aSessionId,
PVMFMetadataList& aKeyList,
Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList,
uint32 aStartingValueIndex,
int32 aMaxValueEntries = -1,
const OsclAny* aContextData = NULL) = 0;
/**
* Synchronous method to free up the specified range of metadata keys in the list. It is assumed that caller of this function
* knows that start and end indices should correspond to metadata keys returned by this particular instance of the
* metadata extension interface using GetNodeMetadataKeys().
*
* @param aKeyList A reference to a metadata key list to free the key entries
* @param aStartingKeyIndex Index into aKeyList that corresponds to the first key entry to release
* @param aEndKeyIndex Index into aKeyList that corresponds to the last key entry to release
*
* @returns PVMFSuccess if the release of specified keys succeeded. PVMFErrArgument if indices are invalid or the list is empty.
* PVMFFailure otherwise.
**/
virtual PVMFStatus ReleaseNodeMetadataKeys(PVMFMetadataList& aKeyList,
uint32 aStartingKeyIndex,
uint32 aEndKeyIndex) = 0;
/**
* Synchronous method to free up the specified range of metadata values in the list. It is assumed that caller of this function
* knows that start and end indices should correspond to metadata values returned by this particular instance of the
* metadata extension interface using GetNodeMetadataValues().
*
* @param aValueList A reference to a metadata value list to free the value entries
* @param aStartingValueIndex Index into aValueList that corresponds to the first value entry to release
* @param aEndValueIndex Index into aValueList that corresponds to the last value entry to release
*
* @returns PVMFSuccess if the release of specified values succeeded. PVMFErrArgument if indices are invalid or the list is empty.
* PVMFFailure otherwise.
**/
virtual PVMFStatus ReleaseNodeMetadataValues(Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList,
uint32 aStartingValueIndex,
uint32 aEndValueIndex) = 0;
// From PVInterface
virtual void addRef() = 0;
virtual void removeRef() = 0;
virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface) = 0;
};
#endif // PVMF_META_DATA_EXTENSION_H_INCLUDED