JSBool ADM_JSAvidemuxVideo::CodecConf(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin CodecConf *rval = BOOLEAN_TO_JSVAL(false); if(argc != 1) return JS_FALSE; if(JSVAL_IS_STRING(argv[0]) == false) return JS_FALSE; char *pTempStr = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); printf("Codec Conf Video \"%s\"\n",pTempStr); enterLock(); *rval = INT_TO_JSVAL(loadVideoCodecConf(pTempStr)); leaveLock(); return JS_TRUE; }// end CodecConf
JSBool ADM_JSAvidemuxAudio::ScanVBR(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin ScanVBR ADM_JSAvidemuxAudio *p = (ADM_JSAvidemuxAudio *)JS_GetPrivate(cx, obj); // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 0) return JS_FALSE; printf("Scaning Audio... \n"); enterLock(); HandleAction(ACT_AudioMap); leaveLock() *rval = BOOLEAN_TO_JSVAL(true); return JS_TRUE; }// end ScanVBR
AndroidDebugBridge* commandManager::getAdb(void) { if(getSize() <= 0) return NULL; AndroidDebugBridge * result = NULL; enterLock(); result = *adbList.begin(); if(result) adbList.pop_front(); leaveLock(); return result; }
JSBool ADM_JSAvidemuxVideo::hasGmc(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin PostProcess uint32_t info; if(argc != 0) return JS_FALSE; enterLock(); info=video_body->getSpecificMpeg4Info(); leaveLock(); // default return value *rval=JS_FALSE; if(info & ADM_GMC_ON) *rval=JS_TRUE; return JS_TRUE; }// end PostProcess
JSBool ADM_JSAvidemuxVideo::SaveJPEG(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin SaveJPG // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 1) return JS_FALSE; if(JSVAL_IS_STRING(argv[0]) == false) return JS_FALSE; char *pTempStr = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); printf("Saving JPEG \"%s\"\n",pTempStr); enterLock(); *rval = INT_TO_JSVAL(A_saveJpg(pTempStr)); leaveLock(); return JS_TRUE; }// end SaveJPG
JSBool ADM_JSAvidemux::rebuildIndex(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin GoToTime ADM_JSAvidemux *p = (ADM_JSAvidemux *)JS_GetPrivate(cx, obj); // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 0) return JS_FALSE; enterLock(); if(!video_body->isReordered(0)) // already done { video_body->rebuildFrameType(); } leaveLock(); return JS_TRUE; }// end GoToTime
JSBool ADM_JSAvidemux::smartcopyMode(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { ADM_JSAvidemux *p = (ADM_JSAvidemux *)JS_GetPrivate(cx, obj); // default return value printf("[JS]Setting smart copy mode(1)\n"); *rval = BOOLEAN_TO_JSVAL(false); if(argc != 0) return JS_FALSE; printf("[JS]Setting smart copy mode (2)\n"); enterLock(); video_body->setEnv(ENV_EDITOR_SMART); *rval = BOOLEAN_TO_JSVAL( true); leaveLock(); return JS_TRUE; }
JSBool ADM_JSAvidemuxVideo::Add(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin Add ADM_JSAvidemuxVideo *p = (ADM_JSAvidemuxVideo *)JS_GetPrivate(cx, obj); // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 3) return JS_FALSE; if(JSVAL_IS_INT(argv[0]) == false || JSVAL_IS_INT(argv[1]) == false || JSVAL_IS_INT(argv[2]) == false) return JS_FALSE; printf("Adding Video... \n"); enterLock(); *rval = BOOLEAN_TO_JSVAL(video_body->addSegment(JSVAL_TO_INT(argv[0]),JSVAL_TO_INT(argv[1]),JSVAL_TO_INT(argv[2]))); leaveLock(); return JS_TRUE; }// end Add
JSBool ADM_JSAvidemux::Save(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin Save ADM_JSAvidemux *p = (ADM_JSAvidemux *)JS_GetPrivate(cx, obj); // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 1) return JS_FALSE; if(JSVAL_IS_STRING(argv[0]) == false) return JS_FALSE; char *pTempStr = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); printf("Saving \"%s\"\n",pTempStr); enterLock(); *rval = BOOLEAN_TO_JSVAL(A_Save(pTempStr)); leaveLock(); return JS_TRUE; }// end Save
JSBool ADM_JSAvidemuxVideo::ListBlackFrames(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin ListBlackFrames // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 1) return JS_FALSE; if(JSVAL_IS_STRING(argv[0]) == false) return JS_FALSE; enterLock(); A_ListAllBlackFrames(JS_GetStringBytes(JSVAL_TO_STRING(argv[0]))); leaveLock(); *rval = BOOLEAN_TO_JSVAL(true); return JS_TRUE; }// end ListBlackFrames
JSBool ADM_JSAvidemux::setContainer(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { ADM_JSAvidemux *p = (ADM_JSAvidemux *)JS_GetPrivate(cx, obj); // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 1) return JS_FALSE; if(JSVAL_IS_STRING(argv[0]) == false) return JS_FALSE; char *str = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); enterLock(); if(A_setContainer(str)) *rval = BOOLEAN_TO_JSVAL( true); leaveLock(); return JS_TRUE; }
JSBool ADM_JSAvidemuxVideo::PostProcess(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin PostProcess // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 3) return JS_FALSE; if(JSVAL_IS_INT(argv[0]) == false || JSVAL_IS_INT(argv[1]) == false || JSVAL_IS_INT(argv[2]) == false) return JS_FALSE; enterLock(); int rtn =video_body->setPostProc( JSVAL_TO_INT(argv[0]),JSVAL_TO_INT(argv[1]),JSVAL_TO_INT(argv[2])); leaveLock(); *rval = BOOLEAN_TO_JSVAL(rtn); return JS_TRUE; }// end PostProcess
JSBool ADM_JSAvidemux::Delete(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin Delete ADM_JSAvidemux *p = (ADM_JSAvidemux *)JS_GetPrivate(cx, obj); // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 2) return JS_FALSE; if(JSVAL_IS_INT(argv[0]) == false || JSVAL_IS_INT(argv[1]) == false) return JS_FALSE; int a = JSVAL_TO_INT(argv[0]); int b = JSVAL_TO_INT(argv[1]); aprintf("Deleting %d-%d\n",a,b); enterLock(); *rval = BOOLEAN_TO_JSVAL(A_delete(a,b)); leaveLock(); return JS_TRUE; }// end Delete
void LinkedDouble::insert(LinkedDouble& obj, InsertMode position) { LinkedDouble *node; enterLock(); obj.detach(); switch ( position ) { case modeAtFirst : node = firstObject(); obj.nextObject = node; node->prevObject = &obj; break; case modeBefore : obj.nextObject = this; obj.prevObject = this->prevObject; this->prevObject = &obj; if (obj.prevObject) obj.prevObject->nextObject = &obj; break; case modeAfter : obj.nextObject = this->nextObject; obj.prevObject = this; this->nextObject = &obj; if (obj.nextObject) obj.nextObject->prevObject = &obj; break; case modeAtLast : default : node = lastObject(); obj.nextObject = node->nextObject; obj.prevObject = node; node->nextObject = &obj; if(obj.nextObject) obj.nextObject->prevObject = &obj; break; } leaveLock(); }
JSBool ADM_JSAvidemuxVideo::Codec(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin Codec *rval = BOOLEAN_TO_JSVAL(false); if(argc > 3) return JS_FALSE; printf("Codec ... \n"); if(JSVAL_IS_STRING(argv[0]) == false || JSVAL_IS_STRING(argv[1]) == false || JSVAL_IS_STRING(argv[2]) == false) return JS_FALSE; printf("Valid codec conf %s found.\n",JS_GetStringBytes(JSVAL_TO_STRING(argv[2]))); char *codec,*conf,*codecConfString; codec = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); conf = JS_GetStringBytes(JSVAL_TO_STRING(argv[1])); codecConfString = JS_GetStringBytes(JSVAL_TO_STRING(argv[2])); enterLock(); if(!videoCodecSelectByName(codec)) *rval = BOOLEAN_TO_JSVAL(false); else {// begin conf // now do the conf // format CBR=bitrate in kbits // CQ=Q // 2 Pass=size // We have to replace if(!videoCodecConfigure(conf,0,NULL)) *rval = BOOLEAN_TO_JSVAL(false); else { *rval = BOOLEAN_TO_JSVAL(true); if(!loadVideoCodecConfString(codecConfString)) *rval = BOOLEAN_TO_JSVAL(false); else *rval = BOOLEAN_TO_JSVAL(true); } }// end conf leaveLock(); return JS_TRUE; }// end Codec
/* add a segment. addsegment(source video,startframe, nbframes)", */ JSBool ADM_JSAvidemux::AddSegment(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin AddSegment ADM_JSAvidemux *p = (ADM_JSAvidemux *)JS_GetPrivate(cx, obj); // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 3) return JS_FALSE; if(JSVAL_IS_INT(argv[0]) == false || JSVAL_IS_INT(argv[1]) == false || JSVAL_IS_INT(argv[2]) == false) return JS_FALSE; int a = JSVAL_TO_INT(argv[0]); int b = JSVAL_TO_INT(argv[1]); int c = JSVAL_TO_INT(argv[2]); aprintf("adding segment :%d %d %d\n",a,b,c); enterLock(); *rval = BOOLEAN_TO_JSVAL( video_body->addSegment(a,b,c)); leaveLock(); updateAll(); return JS_TRUE; }// end AddSegment
JSBool ADM_JSAvidemuxVideo::AddFilter(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin AddFilter VF_FILTERS filter; // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc == 0) return JS_FALSE; filter = filterGetTagFromName(JS_GetStringBytes(JSVAL_TO_STRING(argv[0]))); printf("Adding Filter \"%d\"... \n",filter); Arg args[argc]; char *v; for(int i=0;i<argc;i++) { args[i].type=APM_STRING; if(JSVAL_IS_STRING(argv[i]) == false) { return JS_FALSE; } v=ADM_strdup(JS_GetStringBytes(JSVAL_TO_STRING(argv[i]))); args[i].arg.string=v; } enterLock(); *rval= BOOLEAN_TO_JSVAL(filterAddScript(filter,argc,args)); leaveLock(); for(int i=0;i<argc;i++) { ADM_dealloc(args[i].arg.string); } return JS_TRUE; }// end AddFilter
JSBool ADM_JSAvidemuxAudio::JSSetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) { if (JSVAL_IS_INT(id)) { ADM_JSAvidemuxAudio *priv = (ADM_JSAvidemuxAudio *) JS_GetPrivate(cx, obj); switch(JSVAL_TO_INT(id)) { case audioprocess_prop: { if(JSVAL_IS_BOOLEAN(*vp) == false) break; priv->getObject()->m_bNormalize = JSVAL_TO_BOOLEAN(*vp); enterLock(); UI_setAProcessToggleStatus(priv->getObject()->m_bAudioProcess); leaveLock(); break; } case resample_prop: { if(JSVAL_IS_INT(*vp) == false) break; priv->getObject()->m_nResample = JSVAL_TO_INT(*vp); enterLock(); audioFilterResample(priv->getObject()->m_nResample); leaveLock(); break; } case delay_prop: { if(JSVAL_IS_INT(*vp) == false) break; priv->getObject()->m_nDelay = JSVAL_TO_INT(*vp); //audioFilterDelay(priv->getObject()->m_nDelay); enterLock(); UI_setTimeShift(1, priv->getObject()->m_nDelay); leaveLock(); break; } case film2pal_prop: { if(JSVAL_IS_BOOLEAN(*vp) == false) break; priv->getObject()->m_bFilm2PAL = JSVAL_TO_BOOLEAN(*vp); enterLock(); audioFilterFilm2Pal(priv->getObject()->m_bFilm2PAL); leaveLock(); break; } case pal2film_prop: { if(JSVAL_IS_BOOLEAN(*vp) == false) break; priv->getObject()->m_bPAL2Film = JSVAL_TO_BOOLEAN(*vp); enterLock(); audioFilterFilm2Pal(priv->getObject()->m_bPAL2Film); leaveLock(); break; } case normalizemode_prop: { enterLock(); priv->getObject()->m_nNormalizeMode = JSVAL_TO_INT(*vp); audioFilterNormalizeMode(priv->getObject()->m_nNormalizeMode); leaveLock(); break; } case normalizevalue_prop: { priv->getObject()->m_nNormalizeValue = JSVAL_TO_INT(*vp); enterLock(); audioFilterNormalizeValue(priv->getObject()->m_nNormalizeValue); leaveLock(); break; } default : printf("UNKNOWN AUDIO PROP\n"); return JS_FALSE; } } return JS_TRUE; }
JSBool systemExecute(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin systemExecute // default return value *rval = INT_TO_JSVAL(-1); if(argc != 3) return JS_FALSE; if(JSVAL_IS_STRING(argv[0]) == false || JSVAL_IS_OBJECT(argv[1]) == false || JSVAL_IS_BOOLEAN(argv[2]) == false) return JS_FALSE; char *pExecutable = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); JSObject *pArgs = JSVAL_TO_OBJECT(argv[1]); bool bWait = JSVAL_TO_BOOLEAN(argv[2]); int status = 0; jsuint nArgsLength = 0; jsval jsValue; struct stat sbFileInfo; if(JS_IsArrayObject(cx, pArgs) == false) return JS_FALSE; JS_GetArrayLength(cx,pArgs,&nArgsLength); char **args = new char *[JSVAL_TO_INT(nArgsLength)+2]; args[0] = pExecutable; args[JSVAL_TO_INT(nArgsLength)+1] = NULL; for(jsuint i = 1;i <= nArgsLength;i++) { if(JS_GetElement(cx, pArgs, i, &jsValue) == JS_FALSE) {// begin failure to get item JS_ReportError(cx, "exec() JS_GetElement failed to get an array item."); return JS_FALSE; }// end failure to get item args[JSVAL_TO_INT(i)] = JS_GetStringBytes(JSVAL_TO_STRING(jsValue)); } if(getuid() == 0) {// begin running as root JS_ReportError(cx, "exec() disallowed while running as root."); return JS_FALSE; }// end running as root if(stat(pExecutable , &sbFileInfo) != 0) {// begin can't stat file JS_ReportError(cx, "exec() Can't stat \"%s\" errno(%i).", pExecutable, errno); return JS_FALSE; }// end can't stat file if((sbFileInfo.st_mode & S_ISUID) == S_ISUID || (sbFileInfo.st_mode & S_ISGID) == S_ISGID) {// begin setuid/setgid files disallowed JS_ReportError(cx, "exec() disallowed execution of \"%s\" since it is a setuid/setgid file.", pExecutable); return JS_FALSE; }// end setuid/setgid files disallowed enterLock(); // clear file descriptor table of forked process and fork #ifdef __linux__ pid_t pidRtn = fork(); #elif __FreeBSD__ pid_t pidRtn = rfork(RFPROC|RFCFDG); #endif if(pidRtn == 0) {// begin child process #ifdef __linux__ close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); #endif char **pEnv = environ; //char *pEnv[] = {NULL}; execve(pExecutable,args,pEnv); printf("Error: execve failure errno(%d)\n",errno); _exit(errno); }// end child process else if(bWait && pidRtn != -1) {// begin wait for execution to finish printf("Waiting on pid %d...",pidRtn); do {// begin wait for child waitpid(pidRtn,&status,WUNTRACED); }// end wait for child while(WIFEXITED(status) == false && WIFSIGNALED(status) == false); printf("Done...\n"); }// end wait for execution to finish else if(pidRtn == -1) {// begin rfork failure printf("Error: execve failure errno(%d)\n",errno); }// end rfork failure leaveLock(); // cleanup delete []args; if(pidRtn != -1) *rval = INT_TO_JSVAL(WEXITSTATUS(status)); // success return child's exit status else *rval = INT_TO_JSVAL(-1); // failure return JS_TRUE; }// end systemExecute
void commandManager::insertAdb(AndroidDebugBridge* unit) { enterLock(); adbList.push_front(unit); leaveLock(); }
JSBool ADM_JSAvidemux::JSSetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) { if (JSVAL_IS_INT(id)) { ADM_JSAvidemux *priv = (ADM_JSAvidemux *) JS_GetPrivate(cx, obj); switch(JSVAL_TO_INT(id)) { case markerA_prop: if(JSVAL_IS_INT(*vp) == false) break; { int f=JSVAL_TO_INT(*vp); if (!avifileinfo) { return JS_FALSE; } if(f==-1) f=avifileinfo->nb_frames-1; if(f<0 || f>avifileinfo->nb_frames-1) return JS_FALSE; frameStart=f; } break; case markerB_prop: if(JSVAL_IS_INT(*vp) == false) break; { int f=JSVAL_TO_INT(*vp); if (!avifileinfo) { return JS_FALSE; } if(f==-1) f=avifileinfo->nb_frames-1; if(f<0 || f>avifileinfo->nb_frames-1) return JS_FALSE; frameEnd=f; } break; case audio_prop: return JS_FALSE; break; case video_prop: return JS_FALSE; break; case container_prop: if(JSVAL_IS_STRING(*vp) == false) break; { priv->getObject()->m_pContainer = JSVAL_TO_STRING(*vp); char *pContainer = JS_GetStringBytes(priv->getObject()->m_pContainer); aprintf("Setting container format \"%s\"\n",pContainer); if(A_setContainer(pContainer)) return JS_TRUE; return JS_FALSE; return JS_FALSE; } break; case currentframe_prop: if(JSVAL_IS_INT(*vp) == false) break; { int frameno; if (!avifileinfo) return JS_FALSE; frameno = JSVAL_TO_INT(*vp); if( frameno<0) { aviInfo info; video_body->getVideoInfo(&info); frameno=-frameno; if(frameno>info.nb_frames) return JS_FALSE; frameno = info.nb_frames-frameno; } enterLock(); if(GUI_GoToFrame( frameno )) { leaveLock(); return JS_TRUE; } leaveLock(); return JS_FALSE; } break; case fps_prop: if(JSVAL_IS_DOUBLE(*vp) == false) break; { priv->getObject()->m_dFPS = *JSVAL_TO_DOUBLE(*vp); aviInfo info; if (avifileinfo) { video_body->getVideoInfo(&info); info.fps1000 = (uint32_t)floor(priv->getObject()->m_dFPS*1000.f); video_body->updateVideoInfo (&info); video_body->getVideoInfo (avifileinfo); return JS_TRUE; } else { return JS_FALSE; } } break; } } return JS_TRUE; }