Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gibt eine Liste von Sprachbezeichnern an, die die Sprachen angibt, die in einer ASF-Datei (Advanced Systems Format) enthalten sind. Dieses Attribut entspricht dem Language List-Objekt, das in der ASF-Spezifikation definiert ist.
Datentyp
Bytearray
Bemerkungen
Dieses Attribut gilt für Präsentationsdeskriptoren für ASF-Inhalte.
Die IMFASFContentInfo::GeneratePresentationDescriptor-Methode erstellt den Präsentationsdeskriptor und generiert dieses Attribut aus dem Header Language List Object. Die folgende Tabelle zeigt das Format des Blobs:
| Feld "Language List Object" | Datentyp | Size | BESCHREIBUNG |
|---|---|---|---|
| Anzahl der Sprach-ID-Datensätze | DWORD | 4 Byte | Anzahl der Sprachen |
| Sprach-ID-Datensätze | BYTE[] | Varies | Array von Sprachzeichenfolgen (siehe unten). |
Das erste DWORD ist die Anzahl der Sprachen, gefolgt von einem Array von Sprachbezeichnerzeichenfolgen. Jede Zeichenfolge hat das folgende Format:
| Feld "Language List Object" | Datentyp | Size | BESCHREIBUNG |
|---|---|---|---|
| Länge der Sprach-ID | DWORD | 4 Byte | Die Länge der Zeichenfolge in Bytes, einschließlich der Größe des nachfolgenden NULL-Zeichens . |
| Sprach-ID | WCHAR[] | Varies | Eine NULL-endende Zeichenfolge, die den Rfc 1766-Sprachnamen enthält. |
Jede Zeichenfolge ist ein Sprachtag, das mit RFC 1766 kompatibel ist.
Um das Sprachtag für einen bestimmten Stream in der ASF-Datei abzurufen, fragen Sie den Streamdeskriptor nach dem MF_SD_ASF_EXTSTRMPROP_LANGUAGE_ID_INDEX-Attribut ab.
Beispiele
Im folgenden Beispiel wird gezeigt, wie die Sprachliste analysiert wird.
class LanguageList
{
private:
UINT8 *pRawList; // Unparsed blob
UINT32 cbList; // Size of the blob, in bytes
DWORD cLangs; // Number of languages
WCHAR **ppszLanguages; // Array of pointers to strings.
// These are pointers into pRawList.
public:
LanguageList() :
pRawList(NULL), cbList(0), ppszLanguages(NULL), cLangs(0)
{
}
~LanguageList()
{
Clear();
}
// Clear: Clears the list.
void Clear()
{
CoTaskMemFree(pRawList);
cbList = 0;
cLangs = 0;
delete [] ppszLanguages;
ppszLanguages = NULL;
}
// GetCount: Returns the number of languages.
DWORD GetCount() const { return cLangs; }
// GetLanguage: Return the i'th string in the list.
const WCHAR* GetLanguage(DWORD i)
{
if (i >= cLangs)
{
return NULL;
}
return ppszLanguages[i];
}
// Initialize: Get the language list, if specified, and parse it.
HRESULT Initialize(IMFPresentationDescriptor *pPD)
{
if (pPD == NULL)
{
return E_POINTER;
}
Clear();
HRESULT hr = pPD->GetAllocatedBlob(
MF_PD_ASF_LANGLIST, &pRawList, &cbList);
if (FAILED(hr))
{
goto done;
}
// Parse the language blob.
// Record count.
if (cbList < sizeof(DWORD))
{
hr = E_FAIL;
goto done;
}
cLangs = ((DWORD*)pRawList)[0];
// Allocate an array of pointers to language strings.
ppszLanguages = new (std::nothrow) WCHAR*[cLangs];
if (ppszLanguages == NULL)
{
hr = E_OUTOFMEMORY;
goto done;
}
ZeroMemory(ppszLanguages, cLangs * sizeof(WCHAR*));
BYTE *pNext = pRawList + sizeof(DWORD); // Next byte.
BYTE *pEnd = pRawList + cbList; // End of the blob.
for (DWORD i = 0; i < cLangs; i++)
{
if (pNext > pEnd - sizeof(DWORD))
{
hr = E_FAIL;
goto done;
}
// Language ID length
DWORD cbStr = ((DWORD*)pNext)[0];
pNext += sizeof(DWORD);
// Calculate the pointer to the language ID string.
if ((cbStr > (size_t)(pEnd - pNext)) ||
(cbStr < sizeof(WCHAR)) ||
(cbStr % sizeof(WCHAR) != 0))
{
hr = E_FAIL;
goto done;
}
ppszLanguages[i] = (WCHAR*)pNext;
// Verify the string is NULL-terminated.
if (ppszLanguages[i][(cbStr / sizeof(WCHAR)) - 1] != L'\0')
{
hr = E_FAIL;
goto done;
}
pNext += cbStr;
}
done:
if (FAILED(hr))
{
Clear();
}
if (hr == MF_E_ATTRIBUTENOTFOUND)
{
// There was no language list attribute in the PD.
// This is not a failure case.
hr = S_OK;
}
return hr;
}
private:
LanguageList(const LanguageList& lang);
LanguageList& operator=(const LanguageList& lang);
};
Anforderungen
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows Vista [nur Desktop-Apps] |
| Unterstützte Mindestversion (Server) |
Windows Server 2008 [nur Desktop-Apps] |
| Header |
|
Siehe auch
-
ASF-Headerobjekt