Imports Leadtools
Imports Leadtools.Multimedia
Imports LeadtoolsMultimediaExamples.Fixtures
Public _result As Boolean = False
Public _form As CaptureAndPlayCtrlForm = New CaptureAndPlayCtrlForm()
Public _captureTarget As SampleTarget
Public _playSource As SampleSource
Public Sub GetPortableTypeExample()
   ' reference the convert control
   Dim capturectrl As CaptureCtrl = _form.CaptureCtrl
   Dim playctrl As PlayCtrl = _form.PlayCtrl
   ' This example demonstrates how to play a capture stream 
   ' using a play control and portable media types.
   Try
      ' set the source device
      If capturectrl.VideoDevices("Analog") Is Nothing Then
         Throw New Exception("No Analog video devices available!")
      End If
      capturectrl.VideoDevices("Analog").Selected = True
      ' set the preview
      capturectrl.Preview = True
      ' create a sample target object for the capture control
      _captureTarget = New SampleTarget()
      ' set the capture target to our sample target created earlier
      capturectrl.TargetObject = _captureTarget
      ' create a new sample source object for the play control
      _playSource = New SampleSource()
      ' set the video compressor 
      capturectrl.VideoCompressors.MCmpMJpeg.Selected = True
      '// for this example we will only capture 120 seconds of video
      capturectrl.UseTimeLimit = True
      capturectrl.TimeLimit = 120
      ' start the capture
      capturectrl.StartCapture(CaptureMode.Video)
      ' we could just assign the media type from target to source
      ' however, let's use the portable type to simulate
      ' the needed steps for remote playback
      Dim portableMediaType As Byte() = _captureTarget.GetConnectedMediaType().GetPortableType()
      ' initialize a new media type object with the portable type
      Dim mt As MediaType = New MediaType()
      mt.SetPortableType(portableMediaType)
      ' set the sample source media type
      _playSource.SetMediaType(mt)
      ' set the play controls sample source object
      playctrl.SourceObject = _playSource
      ' create a timer to drive the sample delivery
      AddHandler _form.TestTimer.Tick, AddressOf SampleDeliver_Tick
      _form.TestTimer.Interval = 33
      _form.TestTimer.Start()
      ' we'll loop on the state and pump messages for this example.
      ' but you should not need to if running from a Windows Forms application.
      Do While capturectrl.State = CaptureState.Running _
       OrElse capturectrl.State = CaptureState.Paused OrElse capturectrl.State = CaptureState.Pending
         Application.DoEvents()
      Loop
   Catch e1 As Exception
      _result = False
   End Try
End Sub
Private Sub SampleDeliver_Tick(ByVal sender As Object, ByVal e As EventArgs)
   _form.TestTimer.Stop()
   Dim eos As Boolean = False
   Dim cs As MediaSample = Nothing
   Try
      cs = _captureTarget.GetSample(1000)
   Catch cex As COMException
      If cex.ErrorCode = CInt(ErrorCode.VFW_E_SAMPLE_REJECTED_EOS) Then
         eos = True
      Else
         Throw
      End If
   Catch ex As Exception
      Throw
   End Try
   If (Not eos) Then
      _playSource.DeliverSample(1000, cs)
      _form.TestTimer.Start()
   Else
      _playSource.DeliverEndOfStream(1000)
      _form.TestTimer.Stop()
      ' set the result
      _result = True
   End If
End Sub
             
   
     
            using Leadtools;
using Leadtools.Multimedia;
using LeadtoolsMultimediaExamples.Fixtures;
public bool _result = false;
public CaptureAndPlayCtrlForm _form = new CaptureAndPlayCtrlForm();
public SampleTarget _captureTarget;
public SampleSource _playSource;
public void GetPortableTypeExample()
{
   // reference the convert control
   CaptureCtrl capturectrl = _form.CaptureCtrl;
   PlayCtrl playctrl = _form.PlayCtrl;
   // This example demonstrates how to play a capture stream 
   // using a play control and portable media types.
   try
   {
      // set the source device
      if (capturectrl.VideoDevices["Analog"] == null)
         throw new Exception("No Analog video devices available!");
      capturectrl.VideoDevices["Analog"].Selected = true;
      // set the preview
      capturectrl.Preview = true;
      // create a sample target object for the capture control
      _captureTarget = new SampleTarget();
      // set the capture target to our sample target created earlier
      capturectrl.TargetObject = _captureTarget;
      // create a new sample source object for the play control
      _playSource = new SampleSource();
      // set the video compressor 
      capturectrl.VideoCompressors.MCmpMJpeg.Selected = true;
      //// for this example we will only capture 120 seconds of video
      capturectrl.UseTimeLimit = true;
      capturectrl.TimeLimit = 120;
      // start the capture
      capturectrl.StartCapture(CaptureMode.Video);
      // we could just assign the media type from target to source
      // however, let's use the portable type to simulate
      // the needed steps for remote playback
      Byte[] portableMediaType = _captureTarget.GetConnectedMediaType().GetPortableType();
      // initialize a new media type object with the portable type
      MediaType mt = new MediaType();
      mt.SetPortableType(portableMediaType);
      // set the sample source media type
      _playSource.SetMediaType(mt);
      // set the play controls sample source object
      playctrl.SourceObject = _playSource;
      // create a timer to drive the sample delivery
      _form.TestTimer.Tick += new EventHandler(SampleDeliver_Tick);
      _form.TestTimer.Interval = 33;
      _form.TestTimer.Start();
      // we'll loop on the state and pump messages for this example.
      // but you should not need to if running from a Windows Forms application.
      while (capturectrl.State == CaptureState.Running
         || capturectrl.State == CaptureState.Paused
         || capturectrl.State == CaptureState.Pending)
         Application.DoEvents();
   }
   catch (Exception)
   {
      _result = false;
   }
}
void SampleDeliver_Tick(object sender, EventArgs e)
{
   _form.TestTimer.Stop();
   bool eos = false;
   MediaSample cs = null;
   try
   {
      cs = _captureTarget.GetSample(1000);
   }
   catch (COMException cex)
   {
      if (cex.ErrorCode == (int)ErrorCode.VFW_E_SAMPLE_REJECTED_EOS)
         eos = true;
      else
         throw;
   }
   catch (Exception ex)
   {
      throw new Exception(ex.Message);
   }
   if (!eos)
   {
      _playSource.DeliverSample(1000, cs);
      _form.TestTimer.Start();
   }
   else
   {
      _playSource.DeliverEndOfStream(1000);
      _form.TestTimer.Stop();
      // set the result
      _result = true;
   }
}