• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
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
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 /**
19  * @file pvmf_meta_data_extension.h
20  * @brief Extension interface to retrieve metadata
21  */
22 
23 #ifndef PVMF_META_DATA_EXTENSION_H_INCLUDED
24 #define PVMF_META_DATA_EXTENSION_H_INCLUDED
25 
26 #ifndef OSCL_BASE_H_INCLUDED
27 #include "oscl_base.h"
28 #endif
29 #ifndef PV_INTERFACE_H
30 #include "pv_interface.h"
31 #endif
32 #ifndef PV_UUID_H_INCLUDED
33 #include "pv_uuid.h"
34 #endif
35 #ifndef PVMF_FORMAT_TYPE_H_INCLUDED
36 #include "pvmf_event_handling.h"
37 #endif
38 #ifndef PVMF_META_DATA_TYPES_H_INCLUDED
39 #include "pvmf_meta_data_types.h"
40 #endif
41 #ifndef PVMI_KVP_H_INCLUDED
42 #include "pvmi_kvp.h"
43 #endif
44 
45 #define PVMF_META_DATA_EXTENSION_INTERFACE_MIMETYPE "pvxxx/pvmf/pvmfmetadataextensioninterface"
46 
47 // UUID for the extension interface
48 #define KPVMFMetadataExtensionUuid  PVUuid(0x7DBD6D8D,0xB4CC,0x4887,0xB1,0x0B,0x7E,0xE6,0x48,0x47,0xB2,0x05)
49 
50 /**
51  * PVMFMetadataExtensionInterface specifies the extension interface for metadata retrieval
52  */
53 class PVMFMetadataExtensionInterface : public PVInterface
54 {
55     public:
56         /**
57          * Synchronous method to return the number of metadata keys for the specified query key string
58          *
59          * @param aQueryKeyString A NULL terminated character string specifying a subset of metadata keys to count.
60          *                        If the string is NULL, total number of all keys will be returned
61          *
62          * @returns The number of metadata keys
63          **/
64         virtual uint32 GetNumMetadataKeys(char* aQueryKeyString = NULL) = 0;
65 
66         /**
67          * Synchronous method to return the number of metadata values for the specified list of key strings
68          *
69          * @param aKeyList A reference to a metadata key list to specifying the values of interest to count
70          *
71          * @returns The number of metadata values based on the provided key list
72          **/
73         virtual uint32 GetNumMetadataValues(PVMFMetadataList& aKeyList) = 0;
74 
75         /**
76          * Asynchronous method to retrieve a list of metadata keys. The subset of all available keys in the node can
77          * be specified by providing a combination of query key string, starting index, and maximum number of keys to retrieve
78          *
79          * @param aSessionId The assigned node session ID to use for this request
80          * @param aKeyList A reference to a metadata key list to add the metadata keys
81          * @param aStartingKeyIndex Index into the node's total key list that corresponds to the first key entry to retrieve
82          * @param aMaxKeyEntries The maximum number of key entries to add to aKeyList. If there is no maximum, set to -1.
83          * @param aQueryKeyString Optional NULL terminated character string to select a subset of keys
84          * @param aContext Optional opaque data to be passed back to user with the command response
85          *
86          * @returns A unique command ID for asynchronous completion
87          **/
88         virtual PVMFCommandId GetNodeMetadataKeys(PVMFSessionId aSessionId,
89                 PVMFMetadataList& aKeyList,
90                 uint32 aStartingKeyIndex,
91                 int32 aMaxKeyEntries = -1,
92                 char* aQueryKeyString = NULL,
93                 const OsclAny* aContextData = NULL) = 0;
94 
95         /**
96          * Asynchronous method to retrieve a list of metadata values. The subset of all available values in the node can
97          * be specified by providing a combination of key list, starting index, and maximum number of values to retrieve
98          *
99          * @param aSessionId The assigned node session ID to use for this request
100          * @param aKeyList A reference to a metadata key list specifying the metadata values to retrieve
101          * @param aValueList A reference to a metadata value list to add the metadata values
102          * @param aStartingValueIndex Index into the node's value list specified by the key list that corresponds to the first value entry to retrieve
103          * @param aMaxValueEntries The maximum number of value entries to add to aValueList. If there is no maximum, set to -1.
104          * @param aContext Optional opaque data to be passed back to user with the command response
105          *
106          * @returns A unique command ID for asynchronous completion
107          **/
108         virtual PVMFCommandId GetNodeMetadataValues(PVMFSessionId aSessionId,
109                 PVMFMetadataList& aKeyList,
110                 Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList,
111                 uint32 aStartingValueIndex,
112                 int32 aMaxValueEntries = -1,
113                 const OsclAny* aContextData = NULL) = 0;
114 
115         /**
116          * Synchronous method to free up the specified range of metadata keys in the list. It is assumed that caller of this function
117          * knows that start and end indices should correspond to metadata keys returned by this particular instance of the
118          * metadata extension interface using GetNodeMetadataKeys().
119          *
120          * @param aKeyList A reference to a metadata key list to free the key entries
121          * @param aStartingKeyIndex Index into aKeyList that corresponds to the first key entry to release
122          * @param aEndKeyIndex Index into aKeyList that corresponds to the last key entry to release
123          *
124          * @returns PVMFSuccess if the release of specified keys succeeded. PVMFErrArgument if indices are invalid or the list is empty.
125          *          PVMFFailure otherwise.
126          **/
127         virtual PVMFStatus ReleaseNodeMetadataKeys(PVMFMetadataList& aKeyList,
128                 uint32 aStartingKeyIndex,
129                 uint32 aEndKeyIndex) = 0;
130 
131         /**
132          * Synchronous method to free up the specified range of metadata values in the list. It is assumed that caller of this function
133          * knows that start and end indices should correspond to metadata values returned by this particular instance of the
134          * metadata extension interface using GetNodeMetadataValues().
135          *
136          * @param aValueList A reference to a metadata value list to free the value entries
137          * @param aStartingValueIndex Index into aValueList that corresponds to the first value entry to release
138          * @param aEndValueIndex Index into aValueList that corresponds to the last value entry to release
139          *
140          * @returns PVMFSuccess if the release of specified values succeeded. PVMFErrArgument if indices are invalid or the list is empty.
141          *          PVMFFailure otherwise.
142          **/
143         virtual PVMFStatus ReleaseNodeMetadataValues(Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList,
144                 uint32 aStartingValueIndex,
145                 uint32 aEndValueIndex) = 0;
146 
147         // From PVInterface
148         virtual void addRef() = 0;
149 
150         virtual void removeRef() = 0;
151 
152         virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface) = 0;
153 };
154 
155 #endif // PVMF_META_DATA_EXTENSION_H_INCLUDED
156