Пример #1
0
        private void TestName()
        {
            StringBuilder sb = null;
            int           i  = 0;

            m_pProfile.SetName("moo");
            m_pProfile.GetName(sb, ref i);

            sb = new StringBuilder(i);
            m_pProfile.GetName(sb, ref i);
            Debug.Assert(sb.ToString() == "moo");
        }
Пример #2
0
 /// <summary>
 /// Return the name of a profile.
 /// </summary>
 /// <param name="profile"></param>
 /// <returns></returns>
 private static String GetProfileName(IWMProfile profile)
 {
     try
     {
         uint size = 0;
         profile.GetName(IntPtr.Zero, ref size);
         IntPtr buffer = Marshal.AllocCoTaskMem((int)(2 * (size + 1)));
         profile.GetName(buffer, ref size);
         String name = Marshal.PtrToStringAuto(buffer);
         Marshal.FreeCoTaskMem(buffer);
         return(name);
     }
     catch (Exception e)
     {
         Debug.WriteLine("Failed to get profile name: " + e.ToString());
         return("");
     }
 }
Пример #3
0
        private void TestProfile()
        {
            int    hr;
            IntPtr prof;

            hr = m_asfw.GetCurrentProfile(out prof);
            DsError.ThrowExceptionForHR(hr);

#if false
            IWMProfile    ipr = o as IWMProfile;
            int           s   = 255;
            StringBuilder sb  = new StringBuilder(s, s);
            ipr.GetName(sb, ref s);
            Debug.Assert(sb.ToString() == "Intranet - High Speed LAN Multiple Bit Rate Video", "GetProfile");
#endif

#if false
            IntPtr ip = Marshal.GetIUnknownForObject(o);
            IntPtr ip2;
            Guid   g = typeof(IWMProfile).GUID;
            Marshal.QueryInterface(ip, ref g, out ip2);
#endif

            hr = m_asfw.ConfigureFilterUsingProfile(prof);
            DsError.ThrowExceptionForHR(hr);

#if false
            Guid   g2 = new Guid("00000000-0000-0000-C000-000000000046");
            IntPtr ip3;
            Marshal.QueryInterface(ip, ref g2, out ip3);

            hr = m_asfw.ConfigureFilterUsingProfile(ip3);
            DsError.ThrowExceptionForHR(hr);
            Marshal.Release(ip3);
#endif
#if false
            Marshal.Release(ip);
            Marshal.Release(ip2);
#endif
        }
Пример #4
0
        private void SetCutomProfile(int vidbitrate, int audbitrate, int vidheight, int vidwidth, double fps)
        {
            //seperate method atm braindump for adjusting an existing profile (prx file)
            //method call is not enabled yet
            IWMProfileManager  profileManager  = null;
            IWMProfileManager2 profileManager2 = null;
            IWMProfile         profile         = null;
            IWMStreamConfig    streamConfig;
            //IWMInputMediaProps inputProps = null;
            IWMProfileManagerLanguage profileManagerLanguage = null;
            WMVersion     wmversion   = WMVersion.V8_0;
            int           nbrProfiles = 0;
            short         langID;
            StringBuilder profileName        = new StringBuilder(MAXLENPROFNAME);
            StringBuilder profileDescription = new StringBuilder(MAXLENPROFDESC);
            int           profileNameLen     = MAXLENPROFNAME;
            int           profileDescLen     = MAXLENPROFDESC;

            profileName.Length        = 0;
            profileDescription.Length = 0;
            double videoFps          = fps;
            long   singleFramePeriod = (long)((10000000L / fps));
            //Guid guidInputType;
            //int dwInputCount = 0;
            int           hr;
            int           videoBitrate        = vidbitrate;
            int           audioBitrate        = audbitrate;
            int           videoHeight         = vidheight;
            int           videoWidth          = vidwidth;
            double        videofps            = fps;
            int           streamCount         = 0;
            IWMMediaProps streamMediaProps    = null;
            IntPtr        mediaTypeBufferPtr  = IntPtr.Zero;
            uint          mediaTypeBufferSize = 0;
            Guid          streamType          = Guid.Empty;
            WmMediaType   videoMediaType      = new WmMediaType();
            //Set WMVIDEOHEADER
            WMVIDEOINFOHEADER videoInfoHeader = new WMVIDEOINFOHEADER();

            //Setup the profile manager
            hr = WMLib.WMCreateProfileManager(out profileManager);
            profileManager2 = (IWMProfileManager2)profileManager;
            //Set profile version - possibly not needed in this case.
            profileManager2.SetSystemProfileVersion(WMVersion.V8_0);
            //get the profile to modify
            string strprofileType = Config.GetFile(Config.Dir.Base, @"Profiles\MPCustom.prx");
            //read the profile contents
            string profileContents = "";

            using (StreamReader prx = new StreamReader(strprofileType))
            {
                profileContents = prx.ReadToEnd();
            }

            profileManager2        = profileManager as IWMProfileManager2;
            profileManagerLanguage = profileManager as IWMProfileManagerLanguage;
            hr = profileManager2.GetSystemProfileVersion(out wmversion);
            Log.Info("DVRMS2WMV: WM version=" + wmversion.ToString());
            hr = profileManagerLanguage.GetUserLanguageID(out langID);
            Log.Info("DVRMS2WMV: WM language ID=" + langID.ToString());
            hr = profileManager2.SetSystemProfileVersion(DefaultWMversion);
            hr = profileManager2.GetSystemProfileCount(out nbrProfiles);
            Log.Info("DVRMS2WMV: ProfileCount=" + nbrProfiles.ToString());
            //load the profile contents
            hr = profileManager.LoadProfileByData(profileContents, out profile);
            //get the profile name
            hr = profile.GetName(profileName, ref profileNameLen);
            Log.Info("DVRMS2WMV: profile name {0}", profileName.ToString());
            //get the profile description
            hr = profile.GetDescription(profileDescription, ref profileDescLen);
            Log.Info("DVRMS2WMV: profile description {0}", profileDescription.ToString());
            //get the stream count
            hr = profile.GetStreamCount(out streamCount);
            for (int i = 0; i < streamCount; i++)
            {
                profile.GetStream(i, out streamConfig);
                streamMediaProps = (IWMMediaProps)streamConfig;
                streamConfig.GetStreamType(out streamType);
                if (streamType == MediaType.Video)
                {
                    //adjust the video details based on the user input values.
                    streamConfig.SetBitrate(videoBitrate);
                    streamConfig.SetBufferWindow(-1); //3 or 5 seconds ???
                    streamMediaProps.GetMediaType(IntPtr.Zero, ref mediaTypeBufferSize);
                    mediaTypeBufferPtr = Marshal.AllocHGlobal((int)mediaTypeBufferSize);
                    streamMediaProps.GetMediaType(mediaTypeBufferPtr, ref mediaTypeBufferSize);
                    Marshal.PtrToStructure(mediaTypeBufferPtr, videoMediaType);
                    Marshal.FreeHGlobal(mediaTypeBufferPtr);
                    Marshal.PtrToStructure(videoMediaType.pbFormat, videoInfoHeader);
                    videoInfoHeader.TargetRect.right  = 0; // set to zero to take source size
                    videoInfoHeader.TargetRect.bottom = 0; // set to zero to take source size
                    videoInfoHeader.BmiHeader.Width   = videoWidth;
                    videoInfoHeader.BmiHeader.Height  = videoHeight;
                    videoInfoHeader.BitRate           = videoBitrate;
                    videoInfoHeader.AvgTimePerFrame   = singleFramePeriod; //Need to check how this is to be calculated
                    IntPtr vidInfoPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(WMVIDEOINFOHEADER)));
                    Marshal.StructureToPtr(videoInfoHeader, vidInfoPtr, false);
                    videoMediaType.pbFormat = vidInfoPtr;
                    hr = streamMediaProps.SetMediaType(videoMediaType);
                    Marshal.FreeHGlobal(vidInfoPtr);
                }
                if (streamType == MediaType.Audio)
                {
                    //adjust the audio details based on the user input
                    //audio is determined from bitrate selection and thus effects audio profile.
                    hr = streamConfig.SetBitrate(audioBitrate);
                    hr = streamConfig.SetBufferWindow(-1); //3 or 5 seconds ???
                    //TODO: set the WaveformatEx profile info etc
                }
                //recofigures the stream ready for saving
                hr = profile.ReconfigStream(streamConfig);
            }
            //save the profile
            //You should make two calls to SaveProfile.
            //On the first call, pass NULL as pwszProfile.
            int profileLength = 0;

            hr = profileManager2.SaveProfile(profile, null, ref profileLength);
            //On return, the value of pdwLength is set to the length required to hold the profile in string form.
            //TODO: set memory buffer to profileLength
            //Then you can allocate the required amount of memory for the buffer and pass a pointer to it as pwszProfile on the second call.
            hr = profileManager2.SaveProfile(profile, profileContents, ref profileLength);
        }
Пример #5
0
		/// <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;
		}
Пример #6
0
        /// <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;
                        }

                        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);
                            }

                            InnerList.Add(profileInfo);
                            return(true);
                        }
                    }
                }
            }
            catch
            {
                // Fatal error occured ...
            }
            return(false);
        }