#define MAKE_MEDIA_PATH(pFileName) (TEXT("C:\\Program Files (x86)\\LEAD Technologies\\LEADTOOLS 19\\Media\\")TEXT(pFileName))LPOLESTR T2OLE(LPCTSTR lpt){static OLECHAR lpw[512];if(!lpt)return NULL;lpw[0] = L'\0';MultiByteToWideChar(CP_ACP, 0, lpt, -1, lpw, 512);return lpw;}void ConvertFile(IltmmConvert* pConvert1, IltmmMultiStreamTarget* pMSTarget, IltmmMultiStreamSource* pMSSource, long* plStartHi , long *plStartLo){IltmmMediaSampleDisp* pmsSrc = NULL;IltmmMediaSampleDisp* pmsDst = NULL;long LastStartHi;long LastStartLo;long LastStopHi;long LastStopLo;long lSampleStream;HRESULT hr;long lActualDataLength;VARIANT vBuffer;VARIANT_BOOL vBool;LastStopHi = 0;LastStopLo = 0;for(;;){// get the sample, allowing 10 seconds for the operation to completehr = IltmmMultiStreamTarget_WaitForSample(pMSTarget, 1000, &lSampleStream);if (FAILED(hr))break;hr = IltmmMultiStreamTarget_GetSample(pMSTarget, lSampleStream, 0, &pmsSrc);if (FAILED(hr))break;hr = IltmmMultiStreamSource_GetSampleBuffer(pMSSource, lSampleStream, 2000, &pmsDst);if (FAILED(hr))break;// set the sample timeIltmmMediaSampleDisp_GetTime(pmsSrc, &LastStartHi, &LastStartLo, &LastStopHi, &LastStopLo);// get the sample timeIltmmMediaSampleDisp_SetTime(pmsDst, *plStartHi + LastStartHi, *plStartLo + LastStartLo, *plStartHi + LastStopHi, *plStartLo + LastStopLo);// copy the dataIltmmMediaSampleDisp_get_ActualDataLength(pmsSrc, &lActualDataLength);IltmmMediaSampleDisp_GetData(pmsSrc, lActualDataLength, &vBuffer);IltmmMediaSampleDisp_SetData(pmsDst, lActualDataLength, vBuffer);// copy the other flagshr = IltmmMediaSampleDisp_get_Discontinuity(pmsSrc, &vBool);if (FAILED(hr))break;hr = IltmmMediaSampleDisp_put_Discontinuity(pmsDst, vBool);if (FAILED(hr))break;hr = IltmmMediaSampleDisp_get_Preroll(pmsSrc, &vBool);if (FAILED(hr))break;hr = IltmmMediaSampleDisp_put_Preroll(pmsDst, vBool);if (FAILED(hr))break;hr = IltmmMediaSampleDisp_get_SyncPoint(pmsSrc, &vBool);if (FAILED(hr))break;hr = IltmmMediaSampleDisp_put_SyncPoint(pmsDst, vBool);if (FAILED(hr))break;// release the source sampleIltmmMediaSampleDisp_Release(pmsSrc);pmsSrc = NULL;// deliver the destination sampleIltmmMultiStreamSource_DeliverSample(pMSSource, lSampleStream, 1000, pmsDst);// release the destination sampleIltmmMediaSampleDisp_Release(pmsDst);pmsDst = NULL;}IltmmConvert_StopConvert(pConvert1);*plStartHi = LastStopHi;*plStartLo = LastStopLo;}int ConcatenateTwoAVIfilesExample ( void ){IltmmConvert* pConvert1 = NULL;IltmmConvert* pConvert2 = NULL;IltmmMultiStreamTarget* pMSTarget = NULL;IltmmMultiStreamSource* pMSSource = NULL;long lStartLo, lStartHi;IltmmMediaTypeDisp* pmt = NULL;IltmmMediaTypeDisp* pInsertedMediaType;BSTR bstr;HRESULT hr;long lState;CoInitialize(NULL);hr = CoCreateInstance(&CLSID_ltmmConvert, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmConvert, (void**) &pConvert1);if(FAILED(hr)){MessageBox(0, "Cannot instantiate convert library", "Error", 0);return -1;}hr = CoCreateInstance(&CLSID_ltmmConvert, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmConvert, (void**) &pConvert2);if(FAILED(hr)){MessageBox(0, "Cannot instantiate convert library", "Error", 0);return -1;}hr = CoCreateInstance(&CLSID_ltmmMultiStreamTarget, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmMultiStreamTarget, (void**) &pMSTarget);if(FAILED(hr)){MessageBox(0, "Cannot instantiate convert library", "Error", 0);return -1;}hr = CoCreateInstance(&CLSID_ltmmMultiStreamSource, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmMultiStreamSource, (void**) &pMSSource);if(FAILED(hr)){MessageBox(0, "Cannot instantiate convert library", "Error", 0);return -1;}// set the start time to be 0lStartHi = 0;lStartLo = 0;// set the input filenamebstr = T2OLE(MAKE_MEDIA_PATH("Src1.avi"));IltmmConvert_put_SourceFile(pConvert1, bstr);SysFreeString(bstr);// set the output sample to a target objectIltmmMultiStreamTarget_put_StreamCount(pMSTarget, 2);hr = CoCreateInstance(&CLSID_ltmmMediaType, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmMediaTypeDisp, (void**) &pmt);if(FAILED(hr)){MessageBox(0, "Cannot instantiate convert library", "Error", 0);return -1;}IltmmMediaTypeDisp_put_Type(pmt, ltmmMEDIATYPE_Video);IltmmMultiStreamTarget_SetAcceptedMediaType(pMSTarget, 0, pmt);IltmmMediaTypeDisp_put_Type(pmt, ltmmMEDIATYPE_Audio);IltmmMultiStreamTarget_SetAcceptedMediaType(pMSTarget, 1, pmt);IltmmMediaTypeDisp_Release(pmt);pmt = NULL;// get the inserted media type for the first streamIltmmMultiStreamTarget_GetAcceptedMediaType(pMSTarget, 0, &pInsertedMediaType);IltmmMediaTypeDisp_Release(pInsertedMediaType);pInsertedMediaType = NULL;hr = IltmmConvert_put_TargetObject(pConvert1, pMSTarget);// START the source conversion, so we can get the media sample formathr = IltmmConvert_StartConvert(pConvert1);//INITIALIZE pConvert2// get the output media sample format and put it into the source objectIltmmMultiStreamSource_put_StreamCount(pMSSource, 2);hr = IltmmMultiStreamTarget_GetConnectedMediaType (pMSTarget, 0, &pmt);IltmmMultiStreamSource_SetMediaType(pMSSource, 0, pmt);IltmmMediaTypeDisp_Release(pmt);pmt = NULL;IltmmMultiStreamTarget_GetConnectedMediaType(pMSTarget, 1, &pmt);IltmmMultiStreamSource_SetMediaType(pMSSource, 1, pmt);IltmmMediaTypeDisp_Release(pmt);pmt = NULL;// get the inserted media type for the first streamIltmmMultiStreamSource_GetMediaType(pMSSource, 0, &pInsertedMediaType);IltmmMediaTypeDisp_Release(pInsertedMediaType);pInsertedMediaType = NULL;// set the output filenamebstr = T2OLE(MAKE_MEDIA_PATH("Dest.avi"));IltmmConvert_put_TargetFile(pConvert2, bstr);SysFreeString(bstr);IltmmConvert_put_SourceObject(pConvert2, pMSSource);// start the dest conversionIltmmConvert_StartConvert(pConvert2);// convert the first fileConvertFile(pConvert1, pMSTarget, pMSSource, &lStartHi, &lStartLo);/*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 inthe frame rate might make the connection fail!The control will tolerate differences in frame rate if you comment the next line.*/IltmmMultiStreamTarget_GetConnectedMediaType(pMSTarget, 0, &pmt);IltmmMultiStreamTarget_SetAcceptedMediaType(pMSTarget, 0, pmt);IltmmMediaTypeDisp_Release(pmt);pmt = NULL;IltmmMultiStreamTarget_GetConnectedMediaType(pMSTarget, 1, &pmt);IltmmMultiStreamTarget_SetAcceptedMediaType(pMSTarget, 1, pmt);IltmmMediaTypeDisp_Release(pmt);pmt = NULL;// change the source file to the second filebstr = T2OLE(MAKE_MEDIA_PATH("Src2.avi"));IltmmConvert_put_SourceFile(pConvert1, bstr);SysFreeString(bstr);// start converting againIltmmConvert_StartConvert(pConvert1);// convert the second fileConvertFile(pConvert1, pMSTarget, pMSSource, &lStartHi, &lStartLo);// deliver the end of the sample to stop the conversionIltmmMultiStreamSource_DeliverEndOfStream(pMSSource, 0, 1000);IltmmMultiStreamSource_DeliverEndOfStream(pMSSource, 1, 1000);IltmmConvert_get_State(pConvert2, &lState);if (lState == ltmmConvert_State_Running)IltmmConvert_StopConvert(pConvert2);// free the source and target objectsIltmmConvert_ResetTarget(pConvert1);IltmmConvert_ResetSource(pConvert2);if (pConvert1){IltmmConvert_Release(pConvert1);pConvert1 = NULL;}if (pConvert2){IltmmConvert_Release(pConvert2);pConvert2 = NULL;}if (pMSSource){IltmmMultiStreamSource_Release(pMSSource);pMSSource = NULL;}if (pMSTarget){IltmmMultiStreamTarget_Release(pMSTarget);pMSTarget = NULL;}CoUninitialize();return 0;}
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET
