bool UBWindowsMediaFile::close() { bool result = true; if (mWMWriter) { if (FAILED(mWMWriter->EndWriting())) { result = false; } } if (mPushSink) { mPushSink->Disconnect(); mPushSink->EndSession(); mPushSink->Release(); } if(mChapters.length() > 0) { IWMMetadataEditor *editor = 0; IWMHeaderInfo *headerInfo = 0; WMCreateEditor(&editor); editor->Open((LPCTSTR) mVideoFileName.utf16()); editor->QueryInterface(IID_IWMHeaderInfo, (void**)&headerInfo); foreach(MarkerInfo mi, mChapters) { headerInfo->AddMarker((LPWSTR)mi.label.utf16(), msToSampleTime(mi.timestamp)); }
//------------------------------------------------------------------------------ // Name: EditorOpenFile() // Desc: Creates metadata editor, opens file, and gets header info interface. //------------------------------------------------------------------------------ HRESULT EditorOpenFile( __in LPWSTR pwszInFile, IWMMetadataEditor ** ppEditor, IWMHeaderInfo ** ppHeaderInfo, IWMHeaderInfo3 ** ppHeaderInfo3 ) { if( ( NULL == pwszInFile ) || ( NULL == ppEditor ) ) { return( E_INVALIDARG ); } HRESULT hr = S_OK; do { hr = WMCreateEditor( ppEditor ); if( FAILED( hr ) ) { _tprintf( _T( "Could not create Metadata Editor ( hr=0x%08x ).\n" ), hr ); break; } hr = ( *ppEditor )->Open( pwszInFile ); if( FAILED ( hr ) ) { _tprintf( _T( "Could not open the file %ws ( hr=0x%08x ).\n" ), pwszInFile, hr ); break; } if( NULL != ppHeaderInfo ) { hr = ( *ppEditor )->QueryInterface( IID_IWMHeaderInfo, (void **)ppHeaderInfo ); if( FAILED( hr ) ) { _tprintf( _T( "Could not QI for IWMHeaderInfo ( hr=0x%08x ).\n" ), hr ); break; } } if( NULL != ppHeaderInfo3 ) { hr = ( *ppEditor )->QueryInterface( IID_IWMHeaderInfo3, (void **)ppHeaderInfo3 ); if( FAILED( hr ) ) { _tprintf( _T( "Could not QI for IWMHeaderInfo3 ( hr=0x%08x ).\n" ), hr ); break; } } } while( FALSE ); return( hr ); }
HRESULT SetContentDistributor(WCHAR *pszFilename, WCHAR *pszProvider) { CComPtr<IWMMetadataEditor> spEditor; HRESULT hr = WMCreateEditor(&spEditor); if (SUCCEEDED(hr)) { hr = spEditor->Open(pszFilename); if (SUCCEEDED(hr)) { CComPtr<IWMHeaderInfo> spHeaderInfo; hr = spEditor->QueryInterface(__uuidof(IWMHeaderInfo), reinterpret_cast<void**>(&spHeaderInfo)); if (SUCCEEDED(hr)) { WORD wLength = sizeof(WCHAR)*(wcslen(pszProvider) + 1); hr = spHeaderInfo->SetAttribute(0, g_wszWMContentDistributor, WMT_TYPE_STRING, (const BYTE*)pszProvider, wLength); } spEditor->Flush(); spEditor->Close(); } } return hr; }
int tagwrite(const string fname, struct fennec_audiotag *wtag) { HRESULT hres; IWMHeaderInfo* wminfo; WORD wmistream = 0; BOOL sdef = 1; IWMMetadataEditor *pEdit = 0; IWMHeaderInfo *pInfo = 0; int twrote = 1; if(!wtag)return 0; CoInitialize(0); hres = WMCreateEditor(&pEdit); hres = pEdit->Open(fname); pEdit->QueryInterface(IID_IWMHeaderInfo, (VOID **)(&wminfo)); if(wtag->tag_title.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMTitle ,wtag->tag_title.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMTitle , 0); } if(wtag->tag_album.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMAlbumTitle ,wtag->tag_album.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMAlbumTitle , 0); } if(wtag->tag_artist.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMAuthor ,wtag->tag_artist.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMAuthor , 0); } if(wtag->tag_origartist.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMOriginalArtist ,wtag->tag_origartist.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMOriginalArtist , 0); } if(wtag->tag_composer.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMComposer ,wtag->tag_composer.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMComposer , 0); } if(wtag->tag_lyricist.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMLyrics ,wtag->tag_lyricist.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMWriter , 0); } /* band: not used */ if(wtag->tag_copyright.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMCopyright ,wtag->tag_copyright.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMCopyright , 0); } if(wtag->tag_publish.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMPublisher ,wtag->tag_publish.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMPublisher , 0); } if(wtag->tag_encodedby.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMEncodedBy ,wtag->tag_encodedby.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMEncodedBy , 0); } if(wtag->tag_genre.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMGenre ,wtag->tag_genre.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMGenre , 0); } if(wtag->tag_year.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMYear ,wtag->tag_year.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMYear , 0); } if(wtag->tag_url.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMUserWebURL ,wtag->tag_url.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMUserWebURL , 0); } if(wtag->tag_offiartisturl.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMAuthorURL ,wtag->tag_offiartisturl.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMAuthorURL , 0); } if(wtag->tag_comments.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMDescription ,wtag->tag_comments.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMDescription , 0); } if(wtag->tag_lyric.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMLyrics ,wtag->tag_lyric.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMLyrics , 0); } if(wtag->tag_bpm.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMBeatsPerMinute ,wtag->tag_bpm.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMBeatsPerMinute , 0); } if(wtag->tag_tracknum.tsize ){ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMTrack ,wtag->tag_tracknum.tdata ); } else{ twrote = WM_SetTagString(wminfo, &wmistream, g_wszWMTrack , 0); } if(!twrote) { MessageBox(0, uni("Couldn't set tag(s), if you're setting tags on currently playing media, try stopping it."), uni("Error on tagging"), MB_ICONQUESTION); } pEdit->Flush(); pEdit->Close(); wminfo->Release(); pEdit->Release(); return 1; }