IWMSyncReader::GetNextSample method (wmsdkidl.h)
[The feature associated with this page, Windows Media Format 11 SDK, is a legacy feature. It has been superseded by Source Reader and Sink Writer. Source Reader and Sink Writer have been optimized for Windows 10 and Windows 11. Microsoft strongly recommends that new code use Source Reader and Sink Writer instead of Windows Media Format 11 SDK, when possible. Microsoft suggests that existing code that uses the legacy APIs be rewritten to use the new APIs if possible.]
The GetNextSample method retrieves the next sample from the file.
Syntax
HRESULT GetNextSample(
[in] WORD wStreamNum,
[out] INSSBuffer **ppSample,
[out] QWORD *pcnsSampleTime,
[out] QWORD *pcnsDuration,
[out] DWORD *pdwFlags,
[out] DWORD *pdwOutputNum,
[out] WORD *pwStreamNum
);
Parameters
[in] wStreamNum
WORD containing the stream number for which you would like a sample. If you pass zero, the next sample in the file is returned, regardless of stream number.
[out] ppSample
Pointer to a buffer that receives the sample. Set to NULL to retrieve the sample time without getting the sample. If set to NULL, pcnsDuration and pdwFlags must both be set to NULL as well.
[out] pcnsSampleTime
Pointer to a QWORD variable that receives the sample time in 100-nanosecond units.
[out] pcnsDuration
Pointer to QWORD variable that receives the duration of the sample in 100-nanosecond units.
[out] pdwFlags
Pointer to a DWORD containing one or more of the following flags.
Flag | Description |
---|---|
No flag set | None of the conditions for the other flags applies. For example, a delta frame in most cases would not have any flags set for it. |
WM_SF_CLEANPOINT | Indicates that the sample does not require any other samples to be decompressed. All audio samples and all video samples that are key frames are cleanpoints. |
WM_SF_DISCONTINUITY | The data stream has a gap in it, which could be due to a seek, a network loss, or other reason. This can be useful extra information for an application such as a codec or renderer. The flag is set on the first piece of data following the gap. |
WM_SF_DATALOSS | Some data has been lost between the previous sample and the sample with this flag set. |
[out] pdwOutputNum
Pointer to a DWORD that receives the output number.
[out] pwStreamNum
Pointer to a WORD that receives the stream number.
Return value
The method returns an HRESULT. Possible values include, but are not limited to, those in the following table.
Return code | Description |
---|---|
|
The method succeeded. |
|
All the samples in the file have been read. |
|
A problem occurred with a call within the method. |
|
wStreamNum specifies a stream number that is not valid.
OR pcnsSampleTime is NULL OR ppSample, pcnsDuration, or pdwFlags is NULL, but one or both of the others are not. OR wStreamNum is 0 and both pdwOutputNum and pwStreamNum are NULL. |
|
No file is open and ready for reading by the synchronous reader.
OR wStreamNum specifies a stream number that is turned off (not selected for reading). |
Remarks
Both compressed and uncompressed samples are delivered by this method, depending upon whether you have called SetReadStreamSamples for the streams in the file. This is the only method to retrieve samples using the synchronous reader.
To begin receiving samples from anywhere in the file other than the beginning, you must first specify a range for playback. To specify a playback range based on presentation times, use the SetRange method. To set a range using frame numbers, use the SetRangeByFrame method. When you have received all of the samples in the file, or in the range if you specified one, the next call made to GetNextSample returns NS_E_NO_MORE_SAMPLES.
The timeline is presentation time if no output setting is specified. To get early delivery for a stream, use SetOutputSetting.
You can call GetNextSample in one of three ways:
- If you pass a non-zero value as wStreamNum, you will get the next sample for the specified stream number. In this case, you can pass NULL for both pdwOutputNum and pwStreamNum.
- If you pass zero as wStreamNum, and are using output numbers, you can pass NULL for pwStreamNum. In this case you must pass a valid address for pdwOutputNum.
- If you pass zero as wStreamNum, and are not using output numbers, you can pass NULL for pdwOutputNum. In this case you must pass a valid address for pwStreamNum.
Requirements
Requirement | Value |
---|---|
Minimum supported client | Windows 2000 Professional [desktop apps only],Windows Media Format 9 Series SDK, or later versions of the SDK |
Minimum supported server | Windows 2000 Server [desktop apps only] |
Target Platform | Windows |
Header | wmsdkidl.h (include Wmsdk.h) |
Library | Wmvcore.lib; WMStubDRM.lib (if you use DRM) |