blob: b00631c158447887e3de3f2227aa1f6a4b8d63f5 [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 1998-2009 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.
* -------------------------------------------------------------------
*/
#ifndef PVMF_TRACK_LEVEL_INFO_EXTENSION_H_INCLUDED
#define PVMF_TRACK_LEVEL_INFO_EXTENSION_H_INCLUDED
#ifndef OSCL_BASE_H_INCLUDED
#include "oscl_base.h"
#endif
#ifndef PV_UUID_H_INCLUDED
#include "pv_uuid.h"
#endif
#ifndef PV_INTERFACE_H
#include "pv_interface.h"
#endif
#ifndef PVMF_MEDIA_PRESENTATION_INFO_H_INCLUDED
#include "pvmf_media_presentation_info.h"
#endif
struct PVMFSampleNumTS
{
int32 iSampleNumber;
PVMFTimestamp iTimestamp;
};
typedef Oscl_Vector<PVMFSampleNumTS, OsclMemAllocator> PVMFSampleNumTSList;
#define PVMF_TRACK_LEVEL_INFO_INTERFACE_MIMETYPE "pvxxx/pvmf/pvmftracklevelinfointerface"
#define PVMF_TRACK_LEVEL_INFO_INTERFACE_UUID PVUuid(0xb8a4c3ad,0x4c08,0x4962,0xbb,0x6b,0x0d,0x62,0x37,0x63,0xbd,0x22)
class PVMFTrackLevelInfoExtensionInterface : public PVInterface
{
public:
virtual void addRef() = 0;
virtual void removeRef() = 0;
virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface) = 0;
/**
* Retrieves the list of all available tracks from a source node as a list of track info. The returned
* track info list is needed to call other methods from this extension interface.
*
* @param aTracks, a reference to a vector of PVMFTrackInfo which will be filled in with track info
* of currently available tracks
* @return PVMFSuccess if successfully retrieved else PVMFFailure for errors.
*/
virtual PVMFStatus GetAvailableTracks(Oscl_Vector<PVMFTrackInfo, OsclMemAllocator>& aTracks) = 0;
/**
* Provides the timestamp for a specified sample number in a specific track
*
* @param aTrackInfo, a reference to a PVMFTrackInfo chosen from the list of PVMFTrackInfo returned
* by GetAvailableTracks() function. The sample number to timestamp conversion would be performed on the track
* specified by this parameter
* @param aSampleNum, the sample number in the specified track to return the timestamp. The sample number is
* in 0-based index.
* @param aTimestamp, a reference to PVMFTimestamp which will be filled with timestamp value for the specified sample
* number in the specified track if this function completes successfully
*
* @return PVMFSuccess if timestamp is returned for the specified sample number, PVMFErrInvalidState if the information
* is not available, else PVMFFailure for any other errors
*/
virtual PVMFStatus GetTimestampForSampleNumber(PVMFTrackInfo& aTrackInfo, uint32 aSampleNum, PVMFTimestamp& aTimestamp) = 0;
/**
* Provides the sample number that is closest and before the specified timestamp in a specific track
*
* @param aTrackInfo, a reference to a PVMFTrackInfo chosen from the PVMFMediaPresentationInfo returned
* by GetAvailableTracks() function. The timestamp to sample number conversion would be performed on the track
* specified by this parameter
* @param aTimestamp, the timestamp in the specified track to return the sample number for.
* in 0-based index.
* @param aSampleNum, a reference to an integer which will be filled with the sample number (0-based index) value closest but before
* the specified timestamp in the specified track if this function completes successfully. If the timestamp is greater than
* the duration of the specified track, then the number for the last sample in the track will be returned.
*
* @return PVMFSuccess if sample number is returned for the specified timestamp, PVMFErrInvalidState if the information
* is not available, else PVMFFailure for any other errors
*/
virtual PVMFStatus GetSampleNumberForTimestamp(PVMFTrackInfo& aTrackInfo, PVMFTimestamp aTimestamp, uint32& aSampleNum) = 0;
/**
* Returns the number of synchronization samples in a specific track
*
* @param aTrackInfo, a reference to a PVMFTrackInfo chosen from the PVMFMediaPresentationInfo returned
* by GetAvailableTracks() function. The number of synchronization samples would be returned for the track
* specified by this parameter
* @param aNumSyncSamples, a reference to an integer which will be filled with the number of synchronization samples
* in the specified track. If all the samples in the track are synchronizaton samples, then the integer would be set to -1.
*
* @return PVMFSuccess if the number of sync samples is returned for the specified track, PVMFErrInvalidState if the information
* is not available, else PVMFFailure for any other errors
*/
virtual PVMFStatus GetNumberOfSyncSamples(PVMFTrackInfo& aTrackInfo, int32& aNumSyncSamples) = 0;
/**
* Returns the list of synchronization sample information in a specific track
*
* @param aTrackInfo, a reference to a PVMFTrackInfo chosen from the PVMFMediaPresentationInfo returned
* by GetAvailableTracks() function. The synchronization sample info would be returned for the track
* specified by this parameter
* @param aList, a reference to a vector of PVMFSampleNumTS which will be filled with information about synchronization samples
* in the specified track.
* @param aStartIndex, the starting index in the synchronization sample list to fill aList with. (0-based index). If aStartIndex
* is not specified, aList will be filled from the first synchronization sample in the track
* @param aMaxEntries, the number of synchronization sample infos to fill in aList. If this parameter is not specified, this
* function will put info on all synchronization samples for the specified track in aList.
*
* @return PVMFSuccess if the number of sync samples is returned for the specified track, PVMFErrInvalidState if the information
* is not available, PVMFErrArgument if aStartIndex and/or aMaxEntries are invalid, PVMFErrNoMemory if memory allocation failure
* occurs else PVMFFailure for any other errors
*/
virtual PVMFStatus GetSyncSampleInfo(PVMFTrackInfo& aTrackInfo, PVMFSampleNumTSList& aList, uint32 aStartIndex = 0, int32 aMaxEntries = -1) = 0;
/**
* Returns the list of synchronization sample information in a specific track, based on a target timestamp.
* This API attemps to return closest sync sample information both before and after a given target time.
*
* @param aTrackInfo, a reference to a PVMFTrackInfo chosen from the PVMFMediaPresentationInfo returned
* by GetAvailableTracks() function. The synchronization sample info would be returned for the track
* specified by this parameter
* @param aTargetTimeInMS, a reference to a target time in ms. The closest synchronization samples to this time would
* be returned
* @param aList, a reference to a vector of PVMFSampleNumTS which will be filled with information about synchronization
* samples in the specified track. This list contains closest synchronization samples, to specified aTargetTimeInMS,
* both before and after. If the list contains just one element then it typically means there are no sync samples
* after the specified target time.
* @param aHowManySamples, the offset from base index in the synchronization sample list,if value is X then it will allow
* to return X previous and X next synchronization samples from base index. If aHowManySamples
* is not specified, aList will be filled from the one previous and one next synchronization sample from after base index in the track
*
* @return PVMFSuccess if the number of sync samples is returned for the specified track, PVMFErrInvalidState if the information
* is not available, PVMFErrArgument if aTargetTimeInMS is invalid, PVMFErrNoMemory if memory allocation failure
* occurs else PVMFFailure for any other errors
*/
virtual PVMFStatus GetSyncSampleInfo(PVMFSampleNumTSList& aList, PVMFTrackInfo& aTrackInfo, int32 aTargetTimeInMS, uint32 aHowManySamples = 1) = 0;
/**
* Provides the timestamp of a specific track for a specified data position
*
* @param aTrackInfo, a reference to a PVMFTrackInfo chosen from the list of PVMFTrackInfo returned
* by GetAvailableTracks() function. The data position to timestamp conversion would be performed on the track
* specified by this parameter
* @param aDataPosition, the data position in the source to return the timestamp for the specified track. The data
* position is number of bytes from beginning.
* @param aTimestamp, a reference to PVMFTimestamp which will be filled with timestamp value in the specified track
* for the specified data position if this function completes successfully
*
* @return PVMFSuccess if timestamp is returned for the specified data position, PVMFErrInvalidState if the information
* is not available, else PVMFFailure for any other errors
*/
virtual PVMFStatus GetTimestampForDataPosition(PVMFTrackInfo& aTrackInfo, uint32 aDataPosition, PVMFTimestamp& aTimestamp) = 0;
/**
* Provides the data position for the specified timestamp in a specific track
*
* @param aTrackInfo, a reference to a PVMFTrackInfo chosen from the PVMFMediaPresentationInfo returned
* by GetAvailableTracks() function. The timestamp to data position conversion would be performed on the track
* specified by this parameter
* @param aTimestamp, the timestamp in the specified track to return the data position.
* @param aDataPosition, a reference to an unsigned integer which will be filled with the data position
* (bytes from beginning) closest but before the specified timestamp in the specified track if this function
* completes successfully. If the timestamp is greater than the duration of the specified track, then the
* data position for the last sample in the track will be returned.
*
* @return PVMFSuccess if data position is returned for the specified timestamp, PVMFErrInvalidState if the information
* is not available, else PVMFFailure for any other errors
*/
virtual PVMFStatus GetDataPositionForTimestamp(PVMFTrackInfo& aTrackInfo, PVMFTimestamp aTimestamp, uint32& aDataPosition) = 0;
};
#endif // PVMF_TRACK_LEVEL_INFO_EXTENSION_H_INCLUDED