HRESULT GetGUIDName(const GUID& guid, WCHAR **ppwsz) { HRESULT hr = S_OK; WCHAR *pName = NULL; LPCWSTR pcwsz = GetGUIDNameConst(guid); if (pcwsz) { size_t cchLength = 0; hr = StringCchLength(pcwsz, STRSAFE_MAX_CCH, &cchLength); if (FAILED(hr)) { goto done; } pName = (WCHAR*)CoTaskMemAlloc((cchLength + 1) * sizeof(WCHAR)); if (pName == NULL) { hr = E_OUTOFMEMORY; goto done; } hr = StringCchCopy(pName, cchLength + 1, pcwsz); if (FAILED(hr)) { goto done; } } else { hr = StringFromCLSID(guid, &pName); } done: if (FAILED(hr)) { *ppwsz = NULL; CoTaskMemFree(pName); } else { *ppwsz = pName; } return hr; }
PCHAR CMediaTypePrinter::ToString() { // //Following are the important ones of Mediatype attributes // HRESULT hr = S_OK; PROPVARIANT var; LPSTR pTempBaseStr; MF_ATTRIBUTE_TYPE pType; GUID attrGuid; GUID impGuids[] = { MF_MT_SUBTYPE, MF_MT_FRAME_SIZE, MF_MT_SAMPLE_SIZE, MF_MT_FRAME_RATE, MF_MT_DEFAULT_STRIDE, MF_XVP_DISABLE_FRC }; if (pMediaType && !m_pBuffer) { buffLen = MEDIAPRINTER_STARTLEN; m_pBuffer = new char[buffLen]; m_pBuffer[0] = 0; for (UINT32 ulIndex = 0; ulIndex < ARRAYSIZE(impGuids); ulIndex++) { PropVariantInit(&var); checkAdjustBufferCap(m_pBuffer, buffLen); attrGuid = impGuids[ulIndex]; DMFTCHECKHR_GOTO(pMediaType->GetItemType(attrGuid, &pType), done); DMFTCHECKHR_GOTO(pMediaType->GetItem(attrGuid, &var), done); if (ulIndex > 0) strcat_s(m_pBuffer, MEDIAPRINTER_STARTLEN, " : "); strcat_s(m_pBuffer, buffLen, GetGUIDNameConst(attrGuid)); strcat_s(m_pBuffer, buffLen, "="); pTempBaseStr = DumpAttribute(pType, var); strcat_s(m_pBuffer, buffLen, pTempBaseStr); delete(pTempBaseStr); PropVariantClear(&var); } } done: return m_pBuffer; }
/*++ Description: Rudimentary function to print the complete Media type --*/ PCHAR CMediaTypePrinter::ToCompleteString( ) { HRESULT hr = S_OK; UINT32 attrCount = 0; GUID attrGuid = { 0 }; char *tempStore = nullptr; PROPVARIANT var; LPSTR pTempBaseStr; MF_ATTRIBUTE_TYPE pType; if ( pMediaType && !m_pBuffer ) { DMFTCHECKHR_GOTO(pMediaType->GetCount(&attrCount), done); buffLen = MEDIAPRINTER_STARTLEN; m_pBuffer = new char[buffLen]; m_pBuffer[0] = 0; for ( UINT32 ulIndex = 0; ulIndex < attrCount; ulIndex++ ) { PropVariantInit( &var ); checkAdjustBufferCap( m_pBuffer, buffLen ); DMFTCHECKHR_GOTO( pMediaType->GetItemByIndex( ulIndex, &attrGuid, &var ), done ); DMFTCHECKHR_GOTO( pMediaType->GetItemType( attrGuid, &pType ), done ); if ( ulIndex > 0 ) strcat_s(m_pBuffer, MEDIAPRINTER_STARTLEN, " : "); strcat_s( m_pBuffer, buffLen, GetGUIDNameConst( attrGuid ) ); strcat_s( m_pBuffer, buffLen, "=" ); pTempBaseStr = DumpAttribute( pType, var ); strcat_s( m_pBuffer, buffLen, pTempBaseStr ); delete( pTempBaseStr ); PropVariantClear( &var ); } done: if ( tempStore ) { delete( tempStore ); } } return m_pBuffer; }