//--------------------------------------------------------------------------- tTJSBinaryStream * TVPCreateBinaryStreamForWrite(const ttstr & name, const ttstr & modestr) { tTJSBinaryStream* stream; // check o mode const tjs_char * o_ofs; o_ofs = TJS_strchr(modestr.c_str(), TJS_W('o')); if(o_ofs != NULL) { // seek to offset o_ofs++; tjs_char buf[256]; int i; for(i = 0; i < 255; i++) { if(o_ofs[i] >= TJS_W('0') && o_ofs[i] <= TJS_W('9')) buf[i] = o_ofs[i]; else break; } buf[i] = 0; tjs_uint64 ofs = ttstr(buf).AsInteger(); stream = TVPCreateStream(name, TJS_BS_UPDATE); stream->SetPosition(ofs); } else { stream = TVPCreateStream(name, TJS_BS_WRITE); } return stream; }
static ttstr TVPParseCommandLineOne(const ttstr &i) { // value is specified const tjs_char *p, *o; p = o = i.c_str(); p = TJS_strchr(p, '='); if(p == NULL) { return i + TJS_W("=yes"); } p++; ttstr optname(o, p - o); if(*p == TJS_W('\'') || *p == TJS_W('\"')) { // as an escaped string tTJSVariant v; TJSParseString(v, &p); return optname + ttstr(v); } else { // as a string return optname + p; } }
//--------------------------------------------------------------------------- static void PushAllCommandlineArguments() { // store arguments given by commandline to "TVPProgramArguments" bool acceptfilenameargument = GetSystemSecurityOption("acceptfilenameargument") != 0; bool argument_stopped = false; if(acceptfilenameargument) argument_stopped = true; int file_argument_count = 0; for(tjs_int i = 1; i<_argc; i++) { if(argument_stopped) { ttstr arg_name_and_value = TJS_W("-arg") + ttstr(file_argument_count) + TJS_W("=") + ttstr(_argv[i]); file_argument_count++; TVPProgramArguments.push_back(arg_name_and_value); } else { if(_argv[i][0] == '-') { if(_argv[i][1] == '-' && _argv[i][2] == 0) { // argument stopper argument_stopped = true; } else { ttstr value(_argv[i]); if(!TJS_strchr(value.c_str(), TJS_W('='))) value += TJS_W("=yes"); TVPProgramArguments.push_back(TVPParseCommandLineOne(value)); } } } } }
//--------------------------------------------------------------------------- void tTJSNI_VideoOverlay::Open(const ttstr &_name) { // open // first, close Close(); // check window if(!Window) TVPThrowExceptionMessage(TVPWindowAlreadyMissing); // open target storage ttstr name(_name); ttstr param; const tjs_char * param_pos; int param_pos_ind; param_pos = TJS_strchr(name.c_str(), TJS_W('?')); param_pos_ind = (int)(param_pos - name.c_str()); if(param_pos != NULL) { param = param_pos; name = ttstr(name, param_pos_ind); } IStream *istream = NULL; long size; ttstr ext = TVPExtractStorageExt(name).c_str(); ext.ToLowerCase(); { // prepate IStream tTJSBinaryStream *stream0 = NULL; try { stream0 = TVPCreateStream(name); size = (long)stream0->GetSize(); } catch(...) { if(stream0) delete stream0; throw; } istream = new tTVPIStreamAdapter(stream0); } // 'istream' is an IStream instance at this point // create video overlay object try { { if(Mode == vomLayer) GetVideoLayerObject(EventQueue.GetOwner(), istream, name.c_str(), ext.c_str(), size, &VideoOverlay); else if(Mode == vomMixer) GetMixingVideoOverlayObject(EventQueue.GetOwner(), istream, name.c_str(), ext.c_str(), size, &VideoOverlay); else if(Mode == vomMFEVR) GetMFVideoOverlayObject(EventQueue.GetOwner(), istream, name.c_str(), ext.c_str(), size, &VideoOverlay); else GetVideoOverlayObject(EventQueue.GetOwner(), istream, name.c_str(), ext.c_str(), size, &VideoOverlay); } if( (Mode == vomOverlay) || (Mode == vomMixer) || (Mode == vomMFEVR) ) { ResetOverlayParams(); } else { // set font and back buffer to layerVideo long width, height; long size; VideoOverlay->GetVideoSize( &width, &height ); if( width <= 0 || height <= 0 ) TVPThrowExceptionMessage(TVPErrorInKrMovieDLL, (const tjs_char*)TVPInvalidVideoSize); size = width * height * 4; if( Bitmap[0] != NULL ) delete Bitmap[0]; if( Bitmap[1] != NULL ) delete Bitmap[1]; Bitmap[0] = new tTVPBaseBitmap( width, height, 32 ); Bitmap[1] = new tTVPBaseBitmap( width, height, 32 ); BmpBits[0] = static_cast<BYTE*>(Bitmap[0]->GetBitmap()->GetScanLine( Bitmap[0]->GetBitmap()->GetHeight()-1 )); BmpBits[1] = static_cast<BYTE*>(Bitmap[1]->GetBitmap()->GetScanLine( Bitmap[1]->GetBitmap()->GetHeight()-1 )); VideoOverlay->SetVideoBuffer( BmpBits[0], BmpBits[1], size ); } } catch(...) { if(istream) istream->Release(); Close(); throw; } if(istream) istream->Release(); // set Status ClearWndProcMessages(); SetStatus(ssStop); }