rendered paste bodyvoid launchffmpeg_video(struct convparam *param,gint pass,gint fatherpid)
{
pid_t pid;
int fd[2];
pipe(fd);
pid=fork();
if(pid==0)
{ // fils
int shmid;
close(fd[0]);
dup2(fd[1],1);
dup2(fd[1],2);
shmid=shmget((int)fatherpid,sizeof(struct convparam),0600);
if(shmid>0)
{
struct convparam *cparam;
gint argc,ret,i;
gchar *args[100],logtxt[4096];;
cparam=shmat(shmid,NULL,SHM_RND);
argc=0;
args[argc++]=g_strdup(PACKAGE_DATA_DIR"/pspvc/bin/ffmpeg");
args[argc++]=g_strdup("-y");
args[argc++]=g_strdup("-i");
args[argc++]=g_strdup_printf("%s",cparam->filename);
args[argc++]=g_strdup("-b");
args[argc++]=g_strdup_printf("%d",cparam->vb);
if(cparam->vb > 768)
{
args[argc++]=g_strdup("-muxvb");
args[argc++]=g_strdup("768");
}
args[argc++]=g_strdup("-r");
args[argc++]=g_strdup("29.970030");
args[argc++]=g_strdup("-ab");
args[argc++]=g_strdup_printf("%d",cparam->ab/2);
if(cparam->ab > 128)
{
args[argc++]=g_strdup("-muxab");
args[argc++]=g_strdup("128");
}
args[argc++]=g_strdup("-title");
args[argc++]=g_strdup_printf("%s",cparam->title);
args[argc++]=g_strdup("-f");
args[argc++]=g_strdup("psp");
if(cparam->codec==0)
{
args[argc++]=g_strdup("-bufsize");
args[argc++]=g_strdup_printf("%d",cparam->vb);
args[argc++]=g_strdup("-ar");
args[argc++]=g_strdup("48000");
args[argc++]=g_strdup("-bitexact");
args[argc++]=g_strdup("-vcodec");
args[argc++]=g_strdup("h264");
args[argc++]=g_strdup("-coder");
args[argc++]=g_strdup("1");
args[argc++]=g_strdup("-g");
args[argc++]=g_strdup("250");
}
else
{
args[argc++]=g_strdup("-vcodec");
args[argc++]=g_strdup("xvid");
args[argc++]=g_strdup("-ar");
args[argc++]=g_strdup("24000");
}
// resolution
args[argc++]=g_strdup("-s");
if(cparam->aspect==1)
args[argc++]=g_strdup("320x240");
else
args[argc++]=g_strdup("368x208");
/* args[argc++]=g_strdup("-padtop");
args[argc++]=g_strdup_printf("%d",cparam->cf);
args[argc++]=g_strdup("-padbottom");
args[argc++]=g_strdup_printf("%d",cparam->cf);*/
//
if(cparam->pass>1)
{
args[argc++]=g_strdup("-pass");
args[argc++]=g_strdup_printf("%d",pass);
args[argc++]=g_strdup("-passlogfile");
args[argc++]=g_strdup_printf("%s-%d",cparam->filename,fatherpid);
}
args[argc++]=g_strdup("-vol");
args[argc++]=g_strdup_printf("%d",cparam->volume);
/* args[argc++]=g_strdup("-acodec");
args[argc++]=g_strdup("aac");*/
args[argc++]=g_strdup("-ac");
args[argc++]=g_strdup("2");
if(((pass==2)&&(cparam->pass==2))||(cparam->pass==1))
{
if(cparam->codec==0)
args[argc++]=g_strdup_printf("%s/MAQ%05d.MP4",cparam->currentpath,cparam->pspnum);
else
args[argc++]=g_strdup_printf("%s/M4V%05d.MP4",cparam->currentpath,cparam->pspnum);
}
else
args[argc++]=g_strdup("/dev/null");
args[argc++]=NULL;
sprintf(logtxt,"-COMMAND:\n");
pspvc_log(logtxt,0);
logtxt[0]=0;
for(i=0;i<argc;i++)
sprintf(logtxt,"%s %s",logtxt,args[i]);
pspvc_log(logtxt,0);
pspvc_log("\n",0);
while(!cparam->ffmpeg_conv_tokill[pass])
sleep(1);
shmdt(cparam);
ret=execvp(*args,args);
if(ret==-1)
printf("Error=%d\n",errno);
}
else
{
printf("[launchffmpeg_video] shmid not OK\n");
}
}
if(pid>0)
{ // Pere
gint h,m,s,ds,eof=0;
gchar *cfps;
gchar cPoub1[4096];
param->ffmpeg_conv_tokill[pass]=pid;
close(fd[1]);
dup2(fd[0],0);
while((strcmp(cPoub1,"Duration:"))&&(eof!= EOF))
{
eof=scanf("%s",cPoub1);
pspvc_log(cPoub1,0);
}
scanf("%02d:%02d:%02d.%d",&h,&m,&s,&ds);
param->duration=(double)h*3600.0+(double)m*60.0+(double)s+(double)ds/10.0;
param->fps_target=(int)(param->duration*29.97003);
while((eof!= EOF)&&(!param->killme))
{
eof=scanf("%s",cPoub1);
pspvc_log(cPoub1,0);
if(strstr(cPoub1,"frame=")!=NULL)
{
if(!strcmp("frame=",cPoub1))
eof=scanf("%d",&(param->fps_reached[param->pass_current-1]));
else
{
cfps=strchr(cPoub1,'=')+1;
param->fps_reached[param->pass_current-1]=atoi(cfps);
}
}
}
}
}