| 642 | } |
| 643 | |
| 644 | HRESULT GetMediaMetadata(const TCHAR *szFileName,const TCHAR *szAttribute,BYTE **pszOutput) |
| 645 | { |
| 646 | typedef HRESULT (WINAPI *WMCREATEEDITOR_PROC)(IWMMetadataEditor **); |
| 647 | WMCREATEEDITOR_PROC pWMCreateEditor = NULL; |
| 648 | HMODULE hWMVCore; |
| 649 | IWMMetadataEditor *pEditor = NULL; |
| 650 | IWMHeaderInfo *pWMHeaderInfo = NULL; |
| 651 | HRESULT hr = E_FAIL; |
| 652 | |
| 653 | hWMVCore = LoadLibrary(_T("wmvcore.dll")); |
| 654 | |
| 655 | if(hWMVCore != NULL) |
| 656 | { |
| 657 | pWMCreateEditor = (WMCREATEEDITOR_PROC)GetProcAddress(hWMVCore,"WMCreateEditor"); |
| 658 | |
| 659 | if(pWMCreateEditor != NULL) |
| 660 | { |
| 661 | hr = pWMCreateEditor(&pEditor); |
| 662 | |
| 663 | if(SUCCEEDED(hr)) |
| 664 | { |
| 665 | hr = pEditor->Open(szFileName); |
| 666 | |
| 667 | if(SUCCEEDED(hr)) |
| 668 | { |
| 669 | hr = pEditor->QueryInterface(IID_PPV_ARGS(&pWMHeaderInfo)); |
| 670 | |
| 671 | if(SUCCEEDED(hr)) |
| 672 | { |
| 673 | WORD wStreamNum; |
| 674 | WMT_ATTR_DATATYPE type; |
| 675 | WORD cbLength; |
| 676 | |
| 677 | /* Any stream. Should be zero for MP3 files. */ |
| 678 | wStreamNum = 0; |
| 679 | |
| 680 | hr = pWMHeaderInfo->GetAttributeByName(&wStreamNum,szAttribute,&type,NULL,&cbLength); |
| 681 | |
| 682 | if(SUCCEEDED(hr)) |
| 683 | { |
| 684 | *pszOutput = (BYTE *)malloc(cbLength); |
| 685 | |
| 686 | if(*pszOutput != NULL) |
| 687 | { |
| 688 | hr = pWMHeaderInfo->GetAttributeByName(&wStreamNum,szAttribute,&type, |
| 689 | *pszOutput,&cbLength); |
| 690 | } |
| 691 | } |
| 692 | |
| 693 | pWMHeaderInfo->Release(); |
| 694 | } |
| 695 | } |
| 696 | |
| 697 | pEditor->Release(); |
| 698 | } |
| 699 | } |
| 700 | |
| 701 | FreeLibrary(hWMVCore); |
no test coverage detected