LEADTOOLS Multimedia (Leadtools.Multimedia assembly)

SetMediaType Method (SampleSource)

Show in webframe
Example 



Reference to an MediaSample Object that contains the media type to set for the sample source object.
Sets the media type of the sample source object.
Syntax
'Declaration
 
Public Sub SetMediaType( _
   ByVal MediaType As MediaType _
) 
'Usage
 
Dim instance As SampleSource
Dim MediaType As MediaType
 
instance.SetMediaType(MediaType)
public void SetMediaType( 
   MediaType MediaType
)
public:
void SetMediaType( 
   MediaType^ MediaType
) 

Parameters

MediaType
Reference to an MediaSample Object that contains the media type to set for the sample source object.
Remarks
Sets the media type of the sample source object. Define the media type of the sample source object before adding the sample source object to any other multimedia object. If the method fails, an error is raised. For more information, refer to the Error Codes.
Example
Copy Code  
Imports Leadtools
Imports Leadtools.Multimedia
Imports LeadtoolsMultimediaExamples.Fixtures

Public _result As Boolean = False
Public _form As ConvertCtrlForm = New ConvertCtrlForm()
Public _convertctrl As ConvertCtrl
' input files and output file
     Private inFile1 As String = Path.Combine(LEAD_VARS.MediaDir, "ConvertCtrl_Source1.avi")
     Private inFile2 As String = Path.Combine(LEAD_VARS.MediaDir, "ConvertCtrl_Source2.avi")
     Private outFile As String = Path.Combine(LEAD_VARS.MediaDir, "ConvertCtrl_ConcatAVIFilesExample.avi")

Public Sub ConcatAVIFilesExample()
  Dim pConvert1 As ConvertCtrl
  Dim pConvert2 As ConvertCtrl
  Dim pMSSource As MultiStreamSource
  Dim pMSTarget As MultiStreamTarget
  Dim lStart As Int64

  Dim pmt As MediaType
  Dim pInsertedMediaType As MediaType

  pConvert1 = New ConvertCtrl(True)
  pConvert2 = New ConvertCtrl(True)

  pMSSource = New MultiStreamSource()
  pMSTarget = New MultiStreamTarget()

  ' set the start time to be 0
  lStart = 0

  ' set the input filename
  pConvert1.SourceFile = inFile1

  ' set the output sample to a target object
  pMSTarget.StreamCount = 2

  ' set the target media types for video and audio streams
  pmt = New MediaType()
     pmt.Type = Leadtools.Multimedia.Constants.MEDIATYPE_Video
     pMSTarget.SetAcceptedMediaType(0, pmt)

     pmt.Type = Leadtools.Multimedia.Constants.MEDIATYPE_Audio
  pMSTarget.SetAcceptedMediaType(1, pmt)

  pmt = Nothing

  ' get the inserted media type for the first stream
  pInsertedMediaType = pMSTarget.GetAcceptedMediaType(0)
  pInsertedMediaType = Nothing

  ' set convert 1 target object
  pConvert1.TargetObject = pMSTarget

  ' start the source conversion, so we can get the media sample format
  pConvert1.StartConvert()

  ' initialize convert 2
  ' get the output media sample format and put it into the source object
  pMSSource.StreamCount = 2
  pmt = pMSTarget.GetConnectedMediaType(0)
  pMSSource.SetMediaType(0, pmt)
  pmt = Nothing

  pmt = pMSTarget.GetConnectedMediaType(1)
  pMSSource.SetMediaType(1, pmt)
  pmt = Nothing

  ' get the inserted media type for the first stream
  pInsertedMediaType = pMSSource.GetMediaType(0)
  pInsertedMediaType = Nothing

  ' set the output filename
  pConvert2.TargetFile = outFile

  ' set the source for convert 2
  pConvert2.SourceObject = pMSSource

  ' start the dest conversion
  pConvert2.StartConvert()

  ' convert first file
  ConcateFile(pConvert1, pMSTarget, pMSSource, lStart)

  '
  'Restrict the output format to the media type of the source for the first file
  'That is because the two files must have the same media type for both video and audio
  'With video, you have to make sure the files have the same frame rate! Minor changes in
  'the frame rate might make the connection fail!
  'The control will tolerate differences in frame rate if you comment the next line
  '

  pmt = pMSTarget.GetConnectedMediaType(0)
  pMSTarget.SetAcceptedMediaType(0, pmt)
  pmt = Nothing

  pmt = pMSTarget.GetConnectedMediaType(1)
  pMSTarget.SetAcceptedMediaType(1, pmt)
  pmt = Nothing

  ' change the source file to second file
  pConvert1.SourceFile = inFile2

  ' start converting again
  pConvert1.StartConvert()

  ' convert second file
  ConcateFile(pConvert1, pMSTarget, pMSSource, lStart)

  ' deliver end of sample to stop the conversion
  pMSSource.DeliverEndOfStream(0, 1000)
  pMSSource.DeliverEndOfStream(1, 1000)

  If pConvert2.State = ConvertState.Running Then
     pConvert2.StopConvert()
  End If

  ' free the source and target objects
  pConvert2.ResetSource()
  pConvert1.ResetTarget()

  pConvert1.Dispose()
  pConvert2.Dispose()
  pMSSource.Dispose()
  pMSTarget.Dispose()

  _result = File.Exists(outFile)
End Sub

     Private Sub ConcateFile(ByVal pConvert1 As ConvertCtrl, _
                             ByVal pMSTarget As MultiStreamTarget, _
                             ByVal pMSSource As MultiStreamSource, _
                             ByRef lStart As Long)
         Dim pmsSrc As MediaSample = Nothing
         Dim pmsDst As MediaSample = Nothing
         Dim MediaTimeStart As Long
         Dim MediaTimeStop As Long
         Dim LastStart As Long
         Dim LastStop As Long
         Dim lSampleStream As Integer
         Dim lActualDataLength As Integer

         LastStop = 0

         Do
             ' get the sample, allowing 10 s for the operation to complete
             Try
                 lSampleStream = pMSTarget.WaitForSample(1000)
             Catch cex As COMException
                 If cex.ErrorCode = CInt(ErrorCode.VFW_E_TIMEOUT) Then
                     ' end of the stream
                     Exit Do
                 End If
                 _result = False
                 Exit Do
             End Try

             Try
                 ' get the target sample
                 pmsSrc = pMSTarget.GetSample(lSampleStream, 0)
                 ' get the source buffer
                 pmsDst = pMSSource.GetSampleBuffer(lSampleStream, 2000)
             Catch e1 As Exception
                 _result = False
                 Exit Do
             End Try

             ' get the media time
             pmsSrc.GetMediaTime(MediaTimeStart, MediaTimeStop)

             ' get the source sample time
             pmsSrc.GetTime(LastStart, LastStop)

             ' set the destination sample time
             pmsDst.SetTime(lStart + LastStart, lStart + LastStop)

             ' copy the data
             lActualDataLength = pmsSrc.ActualDataLength

             ' set the destination buffer 
             ' we could Marshal the unmanaged buffer here, but no need since we are mearly 
             ' setting the destination to the source buffer contents (unaltered data)
             pmsDst.SetData(lActualDataLength, pmsSrc.GetData(lActualDataLength))

             ' copy the other flags
             pmsDst.Discontinuity = pmsSrc.Discontinuity
             pmsDst.Preroll = pmsSrc.Preroll
             pmsDst.SyncPoint = pmsSrc.SyncPoint

             ' release the source sample
             pmsSrc = Nothing

             ' deliver the destination sample
             pMSSource.DeliverSample(lSampleStream, 1000, pmsDst)

             ' release the destination sample
             pmsDst = Nothing
         Loop While True

         pConvert1.StopConvert()
         lStart = LastStop
     End Sub

Public NotInheritable Class LEAD_VARS
Public Const MediaDir As String = "C:\Program Files (x86)\LEAD Technologies\LEADTOOLS 18\Media"
End Class
using Leadtools;
using Leadtools.Multimedia;
using LeadtoolsMultimediaExamples.Fixtures;

public bool _result = false;
public ConvertCtrlForm _form = new ConvertCtrlForm();
public ConvertCtrl _convertctrl;
// input files and output file
string inFile1 = Path.Combine(LEAD_VARS.MediaDir,"ConvertCtrl_Source1.avi");
string inFile2 =Path.Combine(LEAD_VARS.MediaDir,"ConvertCtrl_Source2.avi");
string outFile =Path.Combine(LEAD_VARS.MediaDir,"ConvertCtrl_ConcatAVIFilesExample.avi");

public void ConcatAVIFilesExample()
{
   ConvertCtrl pConvert1;
   ConvertCtrl pConvert2;
   MultiStreamSource pMSSource;
   MultiStreamTarget pMSTarget;
   Int64 lStart;

   MediaType   pmt;
   MediaType   pInsertedMediaType;

   pConvert1 = new ConvertCtrl(true);
   pConvert2 = new ConvertCtrl(true);

   pMSSource = new MultiStreamSource();
   pMSTarget = new MultiStreamTarget();

   // set the start time to be 0
   lStart = 0;

   // set the input filename
   pConvert1.SourceFile = inFile1;

   // set the output sample to a target object
   pMSTarget.StreamCount = 2;

   // set the target media types for video and audio streams
   pmt = new MediaType();
   pmt.Type = Constants.MEDIATYPE_Video;
   pMSTarget.SetAcceptedMediaType(0, pmt);

   pmt.Type = Constants.MEDIATYPE_Audio;
   pMSTarget.SetAcceptedMediaType(1, pmt);

   pmt = null;

   // get the inserted media type for the first stream
   pInsertedMediaType = pMSTarget.GetAcceptedMediaType(0);
   pInsertedMediaType = null;

   // set convert 1 target object
   pConvert1.TargetObject = pMSTarget;

   // start the source conversion, so we can get the media sample format
   pConvert1.StartConvert();

   // initialize convert 2
   // get the output media sample format and put it into the source object
   pMSSource.StreamCount = 2;
   pmt = pMSTarget.GetConnectedMediaType(0);
   pMSSource.SetMediaType(0, pmt);
   pmt = null;

   pmt = pMSTarget.GetConnectedMediaType(1);
   pMSSource.SetMediaType(1, pmt);
   pmt = null;

   // get the inserted media type for the first stream
   pInsertedMediaType = pMSSource.GetMediaType(0);
   pInsertedMediaType = null;

   // set the output filename
   pConvert2.TargetFile = outFile;

   // set the source for convert 2
   pConvert2.SourceObject = pMSSource;

   // start the dest conversion
   pConvert2.StartConvert();

   // convert first file
   ConcateFile(pConvert1, pMSTarget, pMSSource, ref lStart);

   /*
   Restrict the output format to the media type of the source for the first file
   That is because the two files must have the same media type for both video and audio
   With video, you have to make sure the files have the same frame rate! Minor changes in
   the frame rate might make the connection fail!
   The control will tolerate differences in frame rate if you comment the next line
   */

   pmt = pMSTarget.GetConnectedMediaType(0);
   pMSTarget.SetAcceptedMediaType(0, pmt);
   pmt = null;

   pmt = pMSTarget.GetConnectedMediaType(1);
   pMSTarget.SetAcceptedMediaType(1, pmt);
   pmt = null;

   // change the source file to second file
   pConvert1.SourceFile = inFile2;

   // start converting again
   pConvert1.StartConvert();

   // convert second file
   ConcateFile(pConvert1, pMSTarget, pMSSource, ref lStart);

   // deliver end of sample to stop the conversion
   pMSSource.DeliverEndOfStream(0, 1000);
   pMSSource.DeliverEndOfStream(1, 1000);

   if (pConvert2.State == ConvertState.Running)
      pConvert2.StopConvert();

   // free the source and target objects
   pConvert2.ResetSource();
   pConvert1.ResetTarget();

   pConvert1.Dispose();
   pConvert2.Dispose();
   pMSSource.Dispose();
   pMSTarget.Dispose();

   _result = File.Exists(outFile);
}

void ConcateFile(ConvertCtrl pConvert1, 
                 MultiStreamTarget pMSTarget, 
                 MultiStreamSource pMSSource, 
                 ref long lStart)
{
   MediaSample pmsSrc = null;
   MediaSample pmsDst = null;
   long MediaTimeStart;
   long MediaTimeStop;
   long LastStart;
   long LastStop;
   int lSampleStream;
   int lActualDataLength;

   LastStop = 0;

   do
   {
      // get the sample, allowing 10 s for the operation to complete
      try
      {
         lSampleStream = pMSTarget.WaitForSample(1000);
      }
      catch (COMException cex)
      {
         if (cex.ErrorCode == (int)ErrorCode.VFW_E_TIMEOUT)
         {
            // end of the stream
            break;
         }
         _result = false;
         break;
      }

      try
      {
         // get the target sample
         pmsSrc = pMSTarget.GetSample(lSampleStream, 0);
         // get the source buffer
         pmsDst = pMSSource.GetSampleBuffer(lSampleStream, 2000);
      }
      catch (Exception)
      {
         _result = false;
         break;
      }

      // get the media time
      pmsSrc.GetMediaTime(out MediaTimeStart, out MediaTimeStop);

      // get the source sample time
      pmsSrc.GetTime(out LastStart, out LastStop);

      // set the destination sample time
      pmsDst.SetTime(lStart + LastStart, lStart + LastStop);

      // copy the data
      lActualDataLength = pmsSrc.ActualDataLength;

      // set the destination buffer 
      // we could Marshal the unmanaged buffer here, but no need since we are mearly 
      // setting the destination to the source buffer contents (unaltered data)
      pmsDst.SetData(lActualDataLength, pmsSrc.GetData(lActualDataLength));

      // copy the other flags
      pmsDst.Discontinuity = pmsSrc.Discontinuity;
      pmsDst.Preroll = pmsSrc.Preroll;
      pmsDst.SyncPoint = pmsSrc.SyncPoint;

      // release the source sample
      pmsSrc = null;

      // deliver the destination sample
      pMSSource.DeliverSample(lSampleStream, 1000, pmsDst);

      // release the destination sample
      pmsDst = null;
   }
   while (true);

   pConvert1.StopConvert();
   lStart = LastStop;
}

static class LEAD_VARS
{
public const string MediaDir = @"C:\Program Files (x86)\LEAD Technologies\LEADTOOLS 18\Media";
}
Requirements

Target Platforms

See Also

Reference

SampleSource Class
SampleSource Members

 

 


Products | Support | Contact Us | Copyright Notices
© 2006-2014 All Rights Reserved. LEAD Technologies, Inc.

Leadtools.Multimedia requires a Multimedia or Multimedia Suite license and unlock key. For more information, refer to: LEADTOOLS Toolkit Features