/// <summary> /// Add profile item to the list /// </summary> /// <param name="avformat"></param> /// <param name="profile"></param> /// <param name="guid"></param> /// <param name="filename"></param> /// <returns></returns> public bool AddProfileItem(AsfFormatSelection avformat, IWMProfile profile, Guid guid, string filename) { if(profile == null) { return false; } try { StringBuilder profileName = new StringBuilder(MAXLENPROFNAME); StringBuilder profileDescription = new StringBuilder(MAXLENPROFDESC); int profileNameLen = MAXLENPROFNAME; int profileDescLen = MAXLENPROFDESC; int streamCount = 0; bool audio = false; bool video = false; int audioBitrate = 0; int videoBitrate = 0; profileName.Length = 0; profileDescription.Length = 0; int hr = profile.GetName(profileName, ref profileNameLen); #if DEBUG if(hr < 0) { Debug.WriteLine("GetName failed"); } #endif if(hr >= 0) { hr = profile.GetDescription(profileDescription, ref profileDescLen); #if DEBUG if(hr < 0) { Debug.WriteLine("GetDescription failed"); } #endif } if(hr >= 0) { hr = profile.GetStreamCount(out streamCount); #if DEBUG if(hr < 0) { Debug.WriteLine("GetStreamCount failed"); } #endif } if((streamCount > 0)&&(hr >= 0)) { IWMStreamConfig streamConfig = null; Guid streamGuid = Guid.Empty; audio = false; video = false; audioBitrate = 0; videoBitrate = 0; for(short i = 1;(i <= streamCount)&&(hr >= 0); i++) { hr = profile.GetStreamByNumber(i, out streamConfig); if((hr >= 0)&&(streamConfig != null)) { hr = streamConfig.GetStreamType(out streamGuid); if(hr >= 0) { if(streamGuid == MediaType.Video) { video = true; hr = streamConfig.GetBitrate(out videoBitrate); if(hr < 0) { videoBitrate = 0; } } else if(streamGuid == MediaType.Audio) { audio = true; hr = streamConfig.GetBitrate(out audioBitrate); if(hr < 0) { audioBitrate = 0; } } hr = 0; // Allow possible unreadable bitrates } #if DEBUG else { Debug.WriteLine("GetStreamByNumber failed"); } #endif } // for i } // Create profile format item if(hr >= 0) { WMProfileData profileInfo = new WMProfileData( guid, profileName.ToString(), profileDescription.ToString(), audioBitrate, videoBitrate, audio, video); bool StoreInfo = false; // Check if all profiles are allowed switch(avformat) { case AsfFormatSelection.AllFormats: StoreInfo = true; break; case AsfFormatSelection.AudioOnly: if((profileInfo.Audio)&&(!profileInfo.Video)) { StoreInfo = true; } break; case AsfFormatSelection.Video: if(profileInfo.Video) { StoreInfo = true; } break; case AsfFormatSelection.VideoOnly: if((profileInfo.Video)&&(!profileInfo.Audio)) { StoreInfo = true; } break; default: break; } if(StoreInfo) { if((guid == Guid.Empty)&&(filename != null)&&(filename.Length > 0)) { // Store filename profileInfo.Filename = filename; } else if(guid != Guid.Empty) { profileInfo.Filename = ""; } else { // Either a filename or guid must be supplied profileInfo.Dispose(); return false; } this.InnerList.Add(profileInfo); return true; } } } } catch { // Fatal error occured ... } return false; }