Determinando o estado de sincronização da playlist
[O recurso associado a esta página, Reprodutor Multimídia do Windows SDK, é um recurso herdado. Foi substituído pelo MediaPlayer. O MediaPlayer foi otimizado para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o MediaPlayer em vez de Reprodutor Multimídia do Windows SDK, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
Reprodutor Multimídia do Windows 10 ou posterior usa o atributo SyncState para conter informações sobre se um arquivo de mídia digital específico foi copiado para um dispositivo portátil e, no caso de uma falha, se a cópia falhou porque o dispositivo não tinha memória suficiente.
O código de exemplo a seguir cria uma função que recupera essas informações de um arquivo de mídia digital. A função usa os seguintes parâmetros:
- pMedia. Ponteiro para uma interface IWMPMedia que representa o arquivo de mídia digital a ser inspecionado.
- lPsIndex. Índice de parceria do dispositivo atual.
- pulOnDevice. Ponteiro para uma variável longa que recebe o valor que indica se o arquivo de mídia digital foi copiado para o dispositivo.
- pulDidNotFit. Ponteiro para uma variável longa que recebe o valor que indica se a operação de cópia falhou porque o dispositivo não tinha memória suficiente.
As informações contidas no atributo SyncState são codificadas de maneira bit a bit. Você pode ver como essa função é usada no código de exemplo em Enumerando os Itens de Mídia.
STDMETHODIMP CSyncSettings::GetPartnershipSyncState(IWMPMedia* pMedia, long lPsIndex, ULONG *pulOnDevice, ULONG *pulDidNotFit)
{
ATLASSERT(pMedia);
ATLASSERT(lPsIndex > 0 &&
lPsIndex < 17);
ATLASSERT(pulOnDevice);
ATLASSERT(pulDidNotFit);
CComVariant varSyncStateVal;
CComPtr<IWMPMedia> spMedia(pMedia);
CComPtr<IWMPMedia3> spMedia3;
HRESULT hr = spMedia.QueryInterface(&spMedia3);
ULONG ulSyncState = 0; // Stores the ulVal member of varSyncStateVal.
ULONG lLSB = 0; // Represents least significant bit: Did the media fail to copy because it would not fit?
ULONG lMSB = 0; // Represents most significant bit: Is the media on the device?
// Calculate the bit shift required to isolate the partnership bit
// pair from the SyncState attribute.
const int iRshift = (lPsIndex - 1) * 2;
if(SUCCEEDED(hr) && spMedia3)
{
hr = spMedia3->getItemInfoByType(CComBSTR("SyncState"), CComBSTR(""), 0, &varSyncStateVal);
}
if(SUCCEEDED(hr) && varSyncStateVal.vt == VT_UI4)
{
// Get the value.
ulSyncState = varSyncStateVal.ulVal;
// Shift the bit pair to the rightmost position.
ulSyncState >>= iRshift;
// Mask the rightmost bit pair.
ulSyncState &= 3;
// Get the LSB
lLSB = ulSyncState & ~2; // Sets the 2E1 bit to zero.
// Get the MSB
ulSyncState >>= 1;
lMSB = ulSyncState;
}
// Return the bits.
*pulOnDevice = lMSB;
*pulDidNotFit = lLSB;
return hr;
}
Tópicos relacionados
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de