static char *avt_GetMediaInfo(AVTransport *avt) { IXML_Document *in = NULL, *out = NULL; char *errorString = NULL, *value = NULL; char *result; GetMediaInfo(in, &out, &errorString); json_object *output = json_object_new_object(); value = UpnpUtil_GetFirstDocumentItem(out, "CurrentMediaDuration"); json_object_object_add(output, "CurrentMediaDuration", s_DmrYx_json_object_new_string(value)); if(value) free(value); value = UpnpUtil_GetFirstDocumentItem(out, "AVTransportURI"); json_object_object_add(output, "AVTransportURI", s_DmrYx_json_object_new_string(value)); if(value) free(value); value = UpnpUtil_GetFirstDocumentItem(out, "AVTransportURIMetaData"); json_object_object_add(output, "AVTransportURIMetaData", s_DmrYx_json_object_new_string(value)); if(value) free(value); result = (char *)json_object_to_json_string(output);//bug!!!! json_object_put(output); if(in) ixmlDocument_free(in); if(out) ixmlDocument_free(out); return result; }
LRESULT CMediaInfoDlg::OnDropFiles(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { HDROP hDropInfo = (HDROP)wParam; int iFileNumber; TCHAR szFileName[MAX_PATH*2]; iFileNumber = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0); if(iFileNumber > 0) { DragQueryFile(hDropInfo, 0, szFileName, MAX_PATH*2); GetMediaInfo(szFileName); } return 0; }
/** * @brief Interface for getting Audio/Video data between processes * * * @param field The operation field, the value should be AV_OP_XXX_XXX defined at Appro_interface.h * @param serial frame serial number , used when locking frame data * @param ptr frame information data structure defined at Appro_interface.h * * @return the value should be RET_XXXXX defined at Appro_interface.h * * @pre Must have called ApproDrvInit() and func_get_mem() * */ int GetAVData( unsigned int field, int serial, AV_DATA * ptr ) { int ret=RET_SUCCESS; if(virptr == NULL) return RET_ERROR_OP; switch(field){ case AV_OP_GET_MJPEG_SERIAL: if(serial != -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t curframe = GetCurrentFrame(FMT_MJPEG); if(curframe.serial_no < 0){ ret = RET_NO_VALID_DATA; } else { int cnt = 0; ptr->serial = curframe.serial_no; ptr->size = curframe.size; ptr->width = curframe.width; ptr->height = curframe.height; ptr->timestamp = curframe.timestamp; for (cnt = 0; cnt < FMT_MAX_NUM; cnt++ ) { ptr->ref_serial[cnt] = curframe.ref_serial[cnt]; } } } break; case AV_OP_WAIT_NEW_MJPEG_SERIAL: if(serial != -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t curframe = WaitNewFrame(FMT_MJPEG); if(curframe.serial_no < 0){ ret = RET_NO_VALID_DATA; } else { ptr->serial = curframe.serial_no; ptr->size = curframe.size; ptr->width = curframe.width; ptr->height = curframe.height; } } break; case AV_OP_LOCK_MJPEG: if(serial == -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t frame; if(serial < 0){ ret = RET_INVALID_PRM; } else { int cnt = 0; frame.serial_no = serial; frame.format = FMT_MJPEG; ret = LockFrame(&frame); switch(ret){ case -98: ret = RET_OVERWRTE; break; case -99: ret = RET_NO_MEM; break; case 0: ptr->serial = serial; ptr->size = frame.size; ptr->width = frame.width; ptr->height = frame.height; ptr->quality = frame.quality; ptr->flags = frame.flags; ptr->timestamp = frame.timestamp; for (cnt = 0; cnt < FMT_MAX_NUM; cnt++ ) { ptr->ref_serial[cnt] = frame.ref_serial[cnt]; } ptr->ptr = (unsigned char *)virptr + frame.offset; break; default: ret = RET_UNKNOWN_ERROR; break; } } } break; case AV_OP_UNLOCK_MJPEG: if(serial == -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t frame; if(serial < 0){ ret = RET_INVALID_PRM; } else { frame.serial_no = serial; frame.format = FMT_MJPEG; UnlockFrame(&frame); } } break; case AV_OP_GET_MPEG4_SERIAL: if(serial != -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t curframe = GetCurrentFrame(FMT_MPEG4); if(curframe.serial_no < 0){ ret = RET_NO_VALID_DATA; } else { int cnt = 0; ptr->serial = curframe.serial_no; ptr->size = curframe.size; ptr->width = curframe.width; ptr->height = curframe.height; ptr->flags = curframe.flags; ptr->timestamp = curframe.timestamp; ptr->temporalId = curframe.temporalId; for (cnt = 0; cnt < FMT_MAX_NUM; cnt++ ) { ptr->ref_serial[cnt] = curframe.ref_serial[cnt]; } } } break; case AV_OP_GET_MPEG4_CIF_SERIAL: if(serial != -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t curframe = GetCurrentFrame(FMT_MPEG4_EXT); if(curframe.serial_no < 0){ ret = RET_NO_VALID_DATA; } else { int cnt = 0; ptr->serial = curframe.serial_no; ptr->size = curframe.size; ptr->width = curframe.width; ptr->height = curframe.height; ptr->flags = curframe.flags; ptr->timestamp = curframe.timestamp; ptr->temporalId = curframe.temporalId; for (cnt = 0; cnt < FMT_MAX_NUM; cnt++ ) { ptr->ref_serial[cnt] = curframe.ref_serial[cnt]; } } } break; case AV_OP_WAIT_NEW_MPEG4_SERIAL: if(serial != -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t curframe = WaitNewFrame(FMT_MPEG4); if(curframe.serial_no < 0){ ret = RET_NO_VALID_DATA; } else { ptr->serial = curframe.serial_no; ptr->size = curframe.size; ptr->width = curframe.width; ptr->height = curframe.height; ptr->flags = curframe.flags; ptr->temporalId = curframe.temporalId; } } break; case AV_OP_WAIT_NEW_MPEG4_CIF_SERIAL: if(serial != -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t curframe = WaitNewFrame(FMT_MPEG4); if(curframe.serial_no < 0){ ret = RET_NO_VALID_DATA; } else { ptr->serial = curframe.serial_no; ptr->size = curframe.size; ptr->width = curframe.width; ptr->height = curframe.height; ptr->flags = curframe.flags; ptr->temporalId = curframe.temporalId; } } break; case AV_OP_LOCK_MP4: if(serial == -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t frame; if(serial < 0){ ret = RET_INVALID_PRM; } else { int cnt = 0; frame.serial_no = serial; frame.format = FMT_MPEG4; ret = LockFrame(&frame); switch(ret){ case -99: ret = RET_OVERWRTE; printf("RET_OVERWRTE\n"); break; case -100: ret = RET_NO_MEM; printf("RET_NO_MEM\n"); break; case -101: ret = RET_ERROR_OP; printf("RET_ERROR_OP: serial: %d\n",serial); break; case -98: ret = RET_NO_VALID_DATA; //printf("RET_NO_VALID_DATA\n"); break; case 0: ptr->serial = serial; ptr->size = frame.size; ptr->width = frame.width; ptr->height = frame.height; ptr->quality = frame.quality; ptr->flags = frame.flags; ptr->frameType = frame.frameType; ptr->timestamp = frame.timestamp; ptr->temporalId = frame.temporalId; for (cnt = 0; cnt < FMT_MAX_NUM; cnt++ ) { ptr->ref_serial[cnt] = frame.ref_serial[cnt]; } ptr->ptr = (unsigned char *)virptr + frame.offset; break; default: ret = RET_UNKNOWN_ERROR; printf("RET_UNKNOWN_ERROR\n"); break; } } } break; case AV_OP_LOCK_MP4_CIF: if(serial == -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t frame; if(serial < 0){ ret = RET_INVALID_PRM; } else { int cnt = 0; frame.serial_no = serial; frame.format = FMT_MPEG4_EXT; ret = LockFrame(&frame); switch(ret){ case -99: ret = RET_OVERWRTE; printf("RET_OVERWRTE\n"); break; case -100: ret = RET_NO_MEM; printf("RET_NO_MEM\n"); break; case -101: ret = RET_ERROR_OP; printf("RET_ERROR_OP: serial: %d\n",serial); break; case -98: ret = RET_NO_VALID_DATA; //printf("RET_NO_VALID_DATA\n"); break; case 0: ptr->serial = serial; ptr->size = frame.size; ptr->width = frame.width; ptr->height = frame.height; ptr->quality = frame.quality; ptr->flags = frame.flags; ptr->frameType = frame.frameType; ptr->timestamp = frame.timestamp; ptr->temporalId = frame.temporalId; for (cnt = 0; cnt < FMT_MAX_NUM; cnt++ ) { ptr->ref_serial[cnt] = frame.ref_serial[cnt]; } ptr->ptr = (unsigned char *)virptr + frame.offset; break; default: ret = RET_UNKNOWN_ERROR; printf("RET_UNKNOWN_ERROR\n"); break; } } } break; case AV_OP_UNLOCK_MP4: if(serial == -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t frame; if(serial < 0){ ret = RET_INVALID_PRM; } else { frame.serial_no = serial; frame.format = FMT_MPEG4; UnlockFrame(&frame); } } break; case AV_OP_UNLOCK_MP4_CIF: if(serial == -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t frame; if(serial < 0){ ret = RET_INVALID_PRM; } else { frame.serial_no = serial; frame.format = FMT_MPEG4_EXT; UnlockFrame(&frame); } } break; case AV_OP_LOCK_MP4_VOL: { FrameInfo_t frame; ret = GetVolInfo(&frame,FMT_MPEG4); if( ret > 0 ) { memcpy( VolInfo,((unsigned char *)virptr + frame.offset),ret); } ptr->ptr = VolInfo; ptr->size = ret; ret = RET_SUCCESS; break; } case AV_OP_GET_MEDIA_INFO: { FrameInfo_t frame; ptr->flags = GetMediaInfo(&frame); ret = RET_SUCCESS; break; } case AV_OP_LOCK_MP4_CIF_VOL: { FrameInfo_t frame; ret = GetVolInfo(&frame,FMT_MPEG4_EXT); if( ret > 0 ) { memcpy( VolInfo_cif,((unsigned char *)virptr + frame.offset),ret); } ptr->ptr = VolInfo_cif; ptr->size = ret; ret = RET_SUCCESS; break; } case AV_OP_UNLOCK_MP4_VOL: ret = RET_SUCCESS; break; case AV_OP_UNLOCK_MP4_CIF_VOL: ret = RET_SUCCESS; break; case AV_OP_LOCK_MP4_IFRAME: { FrameInfo_t curframe; LockMpeg4IFrame(&curframe, FMT_MPEG4); if(curframe.serial_no == -1){ ret = RET_NO_VALID_DATA; } else if(curframe.serial_no == -2){ ret = RET_NO_MEM; } else { int cnt = 0; ptr->serial = curframe.serial_no; ptr->size = curframe.size; ptr->width = curframe.width; ptr->height = curframe.height; ptr->quality = curframe.quality; ptr->flags = curframe.flags; ptr->frameType = curframe.frameType; ptr->timestamp = curframe.timestamp; ptr->temporalId = curframe.temporalId; for (cnt = 0; cnt < FMT_MAX_NUM; cnt++ ) { ptr->ref_serial[cnt] = curframe.ref_serial[cnt]; } ptr->ptr = (unsigned char *)virptr + curframe.offset; ret = RET_SUCCESS; } break; } case AV_OP_LOCK_MP4_CIF_IFRAME: { FrameInfo_t curframe; LockMpeg4IFrame(&curframe,FMT_MPEG4_EXT); if(curframe.serial_no == -1){ ret = RET_NO_VALID_DATA; } else if(curframe.serial_no == -2){ ret = RET_NO_MEM; } else { int cnt = 0; ptr->serial = curframe.serial_no; ptr->size = curframe.size; ptr->width = curframe.width; ptr->height = curframe.height; ptr->quality = curframe.quality; ptr->flags = curframe.flags; ptr->frameType = curframe.frameType; ptr->timestamp = curframe.timestamp; ptr->temporalId = curframe.temporalId; for (cnt = 0; cnt < FMT_MAX_NUM; cnt++ ) { ptr->ref_serial[cnt] = curframe.ref_serial[cnt]; } ptr->ptr = (unsigned char *)virptr + curframe.offset; ret = RET_SUCCESS; } break; } case AV_OP_LOCK_ULAW: if(serial == -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t frame; if(serial < 0){ ret = RET_INVALID_PRM; } else { int cnt = 0; frame.serial_no = serial; frame.format = FMT_AUDIO; ret = LockFrame(&frame); switch(ret){ case -97: case -98: ret = RET_NO_VALID_DATA; break; case -99: ret = RET_NO_MEM; break; case 0: ptr->serial = serial; ptr->size = frame.size; ptr->width = frame.width; ptr->height = frame.height; ptr->quality = frame.quality; ptr->flags = frame.flags; ptr->timestamp = frame.timestamp; ptr->temporalId = frame.temporalId; for (cnt = 0; cnt < FMT_MAX_NUM; cnt++ ) { ptr->ref_serial[cnt] = frame.ref_serial[cnt]; } ptr->ptr = (unsigned char *)virptr + frame.offset; break; default: ret = RET_UNKNOWN_ERROR; break; } } } break; case AV_OP_UNLOCK_ULAW: if(serial == -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t frame; if(serial < 0){ ret = RET_INVALID_PRM; } else { frame.serial_no = serial; frame.format = FMT_AUDIO; UnlockFrame(&frame); } } break; case AV_OP_GET_ULAW_SERIAL: if(serial != -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t curframe = GetCurrentFrame(FMT_AUDIO); if(curframe.serial_no < 0){ ret = RET_NO_VALID_DATA; } else { int cnt = 0; ptr->serial = curframe.serial_no; ptr->size = curframe.size; ptr->width = curframe.width; ptr->height = curframe.height; ptr->timestamp = curframe.timestamp; ptr->temporalId = curframe.temporalId; for (cnt = 0; cnt < FMT_MAX_NUM; cnt++ ) { ptr->ref_serial[cnt] = curframe.ref_serial[cnt]; } } } break; case AV_OP_WAIT_NEW_ULAW_SERIAL: if(serial != -1){ ret = RET_INVALID_PRM; } else { FrameInfo_t curframe = WaitNewFrame(FMT_AUDIO); if(curframe.serial_no < 0){ ret = RET_NO_VALID_DATA; } else { ptr->serial = curframe.serial_no; ptr->size = curframe.size; ptr->width = curframe.width; ptr->height = curframe.height; } } break; default: ret = RET_INVALID_COMMAND; dbg("Command field = %d\n", field); break; } return ret; }
EC_VOID EngGetMediaInfo(MediaEngineHandle handle, MediaInfo *pMediaInfo) { GetMediaInfo(handle, (MediaEngMediaInfo*)pMediaInfo); }
int MakeAudioCuts( CONVDATA *cn) { int pid,status,id,Qty; char Folder[500]; Dlink *L; MEDIAINFO *Mif; CONVDATA Cn; char *mpt; float opos,cpos,pos,duration,Mesec; Cn= *cn; Mif = GetMediaInfo(Cn.infile); Mesec= Mif->TotSec; free(Mif); if ((pid=fork())==0) { char command[10000],File[500],options[5000],Qstr[100]; void *Thds; sprintf(Folder,"%-s/%-d",getenv("HOME"),getpid()); if(FileStat(Folder)) kgCleanDir(Folder); mkdir(Folder,0700); if(pipe(Jpipe) < 0) exit(0); if(pipe(Jstat) < 0) exit(0); sprintf(GrabFileName,"Making : %-s\n",Cn.outfile); MonPipe = Jpipe[0]; if( fork()==0) { close(Jpipe[1]); close(Jstat[0]); RunMonitorJoin(NULL); exit(0); } close(Jpipe[0]); close(Jstat[1]); L = Cn.Cutlist; Resetlink(L); id=0; sprintf(options,"!c01" "Making audio cuts Pl. be patient...\n"); write(Jpipe[1],options,strlen(options)); // Thds = OpenThreads(0); cpos =0; opos =0; while( (mpt=(char *)Getrecord(L))!= NULL) { sscanf(mpt,"%f%f",&pos,&duration); if((pos - opos)> 0.001) { sprintf(command,"kgffmpeg -i \"%s\" -vn -aq 2 -ac 2 -ar 44100 " "-acodec pcm_s32le -y -ss %f -to %f %s/M%-4.4d.wav ", Cn.infile, opos, pos ,Folder,id); id++; runfunction(command,ProcessSkip,kgffmpeg); } opos = pos+duration; } if(opos< Mesec) { sprintf(command,"kgffmpeg -i \"%s\" -vn -aq 2 -ac 2 -ar 44100 " "-acodec pcm_s32le -y -ss %f %s/M%-4.4d.wav ", Cn.infile, opos, Folder,id); opos = pos; id++; runfunction(command,ProcessSkip,kgffmpeg); // printf("%s\n",command); } if(id==0) exit(0); sprintf(options,"Joining...%d\n",id); write(Jpipe[1],options,strlen(options)); sprintf(options,"Per: %f\n",0.0); write(Jpipe[1],options,strlen(options)); joinwav(Folder,id); { Esec= Cn.EndSec; sprintf(options,"Esec: %lf\n",Cn.EndSec); write(Jpipe[1],options,strlen(options)); sprintf(options,"Converting to Output...\n"); write(Jpipe[1],options,strlen(options)); Qstr[0]='\0'; if(kgSearchString(Cn.outfile,(char *)".aac")>=0) { sprintf(Qstr," -c:a libfdk_aac "); } if(kgSearchString(Cn.outfile,(char *)".mp3")>=0) { sprintf(Qstr," -c:a libmp3lame -aq 0 "); } sprintf(command,"kgffmpeg -i %-s/out.wav " " -ac 2 %s -y \"%-s\" ", Folder ,Qstr,Cn.outfile); // printf("%s\n",command); runfunction(command,ProcessToAudioPipe,kgffmpeg); kgCleanDir(Folder); strcpy(options,"Joinded Audio Files\n"); write(Jpipe[1],options,strlen(options)); close(Jpipe[1]); exit(0); } } else { waitpid(pid,&status,0); sprintf(Folder,"%-s/%-d",getenv("HOME"),pid); if(FileStat(Folder)) kgCleanDir(Folder); } }
int MakeCutssplbutton1callback(int butno,int i,void *Tmp) { /*********************************** butno : selected item (1 to max_item) i : Index of Widget (0 to max_widgets-1) Tmp : Pointer to DIALOG ***********************************/ char buff[5000]; DIALOG *D;DIL *B; int n,ret=1,Qty; float TotSec=0.0,pos,dur; char *Of; DIT *T; Dlink *L; char *mpt; MEDIAINFO *Mif; D = (DIALOG *)Tmp; B = (DIL *) kgGetWidget(Tmp,i); n = B->nx; T = (DIT *)kgGetNamedWidget(Tmp,"CutOutput"); Of = kgGetString(T,0); strcpy(cndata.outfile,Of); Mif = GetMediaInfo(cndata.infile); if((Mif->Video==0)&&(Mif->Audio==0)) return 1; TotSec = Mif->TotSec; free(Mif); L = (Dlink *)cndata.Cutlist; Resetlink(L); if((mpt=(char *)Getrecord(L))!= NULL) { Resetlink(L); Dsort((Dlink *)cndata.Cutlist,CutListCond); } Resetlink(L); n=0; while ((mpt=(char *)Getrecord(L))!= NULL) { n++; sscanf(mpt,"%f%f",&pos,&dur); // printf("%s\n",mpt); TotSec += dur; } // printf("fps = %f\n",cndata.fps); cndata.Fcount=n; cndata.EndSec=TotSec; cndata.code=10; cndata.Eol='\n'; sprintf(buff,"%d \"%-s\" \"%-s\" %d %f\n", cndata.code, cndata.infile,cndata.outfile,cndata.Fcount,TotSec); write(ToTools[1],buff,strlen(buff)); Resetlink(L); while ((mpt=(char *)Getrecord(L))!= NULL) { sprintf(buff,"%s \n",mpt); // printf("%s",buff); write(StatusTools[1],buff,strlen(buff)); } Dempty(L); cndata.Cutlist=NULL; switch(butno) { case 1: break; } return ret; }