Exemplo n.º 1
0
bool RDRenderer::renderToFile(const QString &outfile,RDLogEvent *log,
			      RDSettings *s,const QTime &start_time,
			      bool ignore_stops,QString *err_msg,
			      int first_line,int last_line,
			      const QTime &first_time,const QTime &last_time)
{
  QString temp_output_filename;
  char tempdir[PATH_MAX];
  bool ok=false;
  FILE *f=NULL;
  bool ret;

  //
  // Verify Destination
  //
  if((f=fopen(outfile,"w"))==NULL) {
    *err_msg=tr("unable to open output file")+" ["+QString(strerror(errno))+"]";
    return false;
  }
  fclose(f);

  if(((s->format()!=RDSettings::Pcm16)&&(s->format()!=RDSettings::Pcm24))||
     (s->normalizationLevel()!=0)) {
    ProgressMessage("Pass 1 of 2");
    render_total_passes=2;

    //
    // Get Temporary File
    //
    strncpy(tempdir,RDTempDirectory::basePath()+"/rdrenderXXXXXX",PATH_MAX);
    temp_output_filename=QString(mkdtemp(tempdir))+"/log.wav";
    ProgressMessage(tr("Using temporary file")+" \""+temp_output_filename+"\".");

    //
    // Render It
    //
    if(!Render(temp_output_filename,log,s,start_time,ignore_stops,err_msg,
	       first_line,last_line,first_time,last_time)) {
      return false;
    }

    //
    // Convert It
    //
    ProgressMessage(tr("Pass 2 of 2"));
    ProgressMessage(tr("Writing output file"));
    ok=ConvertAudio(temp_output_filename,outfile,s,err_msg);
    DeleteTempFile(temp_output_filename);
    emit lineStarted(log->size()+1,log->size()+1);
    if(!ok) {
      return false;
    }
  }
  else {
    ProgressMessage(tr("Pass 1 of 1"));
    render_total_passes=1;

    ret=Render(outfile,log,s,start_time,ignore_stops,err_msg,
	       first_line,last_line,first_time,last_time);
    emit lineStarted(log->size(),log->size());
    return ret;
  }
  return true;
}
Exemplo n.º 2
0
void *ConvertThread(void *ctxt)
{
    int nIsDir = 0;
    ENCODE_AUDIO_TYPE eAudioType;

    for(;;)
    {

        if(ConvertTask.nItemCount == 0)
         {
            break;
         }
        /*get encode item from the global var.*/

        if((ConvertTask.eItemStatus == ITEM_INIT)
            &&(ConvertTask.CurEncodeItem.objID)
            &&(ConvertTask.CurEncodeItem.ptrAudioFormat)
            &&(ConvertTask.CurEncodeItem.ptrFormatCfg)
            )
         {
            ZLock(&(ConvertTask.TaskItemLock));
            ConvertTask.eThreadStatus = THREAD_START;
            ConvertTask.eItemStatus = ITEM_ENCODING;

            /*get the track path throught check the loacal database.*/

            initMetaTrack(&(ConvertTask.TrackMeta));
		/* Updated by Ke tao 2008-12-12*/
            ZDBRipFindTrackMetadata(ConvertTask.ptrDBHandle, ConvertTask.CurEncodeItem.objID, &(ConvertTask.TrackMeta));

            if(!ZUtilIsFilePresent(ConvertTask.TrackMeta.path, &nIsDir) || nIsDir
				|| !checkExt(ConvertTask.TrackMeta.path, "wav"))   /*if the track path isn't exists, as the normal quit*/
            {
               DeletePendingTask(ENCPENDING, &ConvertTask.CurEncodeItem);
               ConvertTask.eItemStatus = ITEM_ENCODED;
               ConvertTask.eThreadStatus = THREAD_FINISHED;
               freeMetaTrack(&(ConvertTask.TrackMeta));
               ZUnlock(&(ConvertTask.TaskItemLock));
               continue;
            }
            ZFREE(ConvertTask.DiscAudioSrcPath);
            ZFREE(ConvertTask.DiscEncodePath);
            ConvertTask.DiscAudioSrcPath = strdup(ConvertTask.TrackMeta.path);
            ConvertTask.DiscEncodePath = calloc(sizeof(char), (strlen(ConvertTask.DiscAudioSrcPath)+BUF_64_BITS)); 
            freeMetaTrack(&(ConvertTask.TrackMeta));
            ZUnlock(&(ConvertTask.TaskItemLock));
         }
        else
         { 
            sleep(1);
            continue;
         }

        /*convert audio file to the eAudioType type.*/

        eAudioType = GetAudioType(ConvertTask.CurEncodeItem.ptrAudioFormat);
        ConvertTask.eThreadStatus = THREAD_RUNNING;

        if(ConvertAudio(eAudioType, &ConvertTask.CurEncodeItem, ConvertTask.DiscAudioSrcPath, ConvertTask.DiscEncodePath) == ZAPP_FAILED)
         {
            ZLock(&(ConvertTask.TaskItemLock));
            DeletePendingTask(ENCPENDING, &(ConvertTask.CurEncodeItem));
            ConvertTask.eItemStatus = ITEM_ENCODED; 
            ConvertTask.eThreadStatus = THREAD_FINISHED;
            ZFREE(ConvertTask.DiscAudioSrcPath);   
            ZFREE(ConvertTask.DiscEncodePath);  
            ZUnlock(&(ConvertTask.TaskItemLock));
            continue;
         }
        /*write ID3 tag according the database.*/  
        if((eAudioType == MP3_AUDIO)||(eAudioType == FLAC_AUDIO))
        {
            initMetaTrack(&(ConvertTask.TrackMeta));
		/* Updated by Ke Tao 2008-12-12 */
            ZDBRipFindTrackMetadata(ConvertTask.ptrDBHandle, ConvertTask.CurEncodeItem.objID, &(ConvertTask.TrackMeta));
            WriteID3Tag(ConvertTask.DiscEncodePath, &(ConvertTask.TrackMeta));
            freeMetaTrack(&(ConvertTask.TrackMeta));  
        }
        /*set update task to the zriptask database's updatapending table.*/
        ZLock(&(ConvertTask.TaskItemLock));		
        ZFREE(ConvertTask.UpdateItem.objID); 
        ZFREE(ConvertTask.UpdateItem.ptrAudioFormat);
        ZFREE(ConvertTask.UpdateItem.ptrWavPath);
        ZFREE(ConvertTask.UpdateItem.ptrEncPath);
        ConvertTask.UpdateItem.objID = strdup(ConvertTask.CurEncodeItem.objID);
        ConvertTask.UpdateItem.ptrAudioFormat = strdup(ConvertTask.CurEncodeItem.ptrAudioFormat);
        ConvertTask.UpdateItem.ptrWavPath = strdup(ConvertTask.DiscAudioSrcPath);
        ConvertTask.UpdateItem.ptrEncPath = strdup(ConvertTask.DiscEncodePath);

        InsertPendingTask(UPDATEPENDING, &(ConvertTask.UpdateItem)); 

        /*Delete task to the zriptask database's EncPending table.*/

        DeletePendingTask(ENCPENDING, &ConvertTask.CurEncodeItem);

        ConvertTask.eItemStatus = ITEM_ENCODED;
        ConvertTask.eThreadStatus = THREAD_FINISHED;
        ZUnlock(&(ConvertTask.TaskItemLock));

    }
    return NULL;
}