Esempio n. 1
0
RDLogLine::State RDLogLine::setEvent(int mach,RDLogLine::TransType next_type,
				     bool timescale,int len)
{
  RDCart *cart;
  RDMacroEvent *rml_event;
  QString sql;
  RDSqlQuery *q;
  double time_ratio=1.0;

  switch(log_type) {
      case RDLogLine::Cart:
	cart=new RDCart(log_cart_number);
	if(!cart->exists()) {
	  delete cart;
#ifndef WIN32
	  syslog(LOG_USER|LOG_WARNING,"RDLogLine::setEvent(): no such cart, CART=%06u",log_cart_number);
#endif  // WIN32
	  log_state=RDLogLine::NoCart;
	  return RDLogLine::NoCart;
	}
	cart->selectCut(&log_cut_name);
	if(log_cut_name.isEmpty()) {
	  delete cart;
#ifndef WIN32
	  // syslog(LOG_USER|LOG_WARNING,"RDLogLine::setEvent(): RDCut::selectCut() failed, CART=%06u",log_cart_number);
#endif  // WIN32
	  log_state=RDLogLine::NoCut;
	  return RDLogLine::NoCut;
	}
	log_cut_number=log_cut_name.right(3).toInt();
	sql=QString().sprintf("select LENGTH,START_POINT,END_POINT,\
                               SEGUE_START_POINT,SEGUE_END_POINT,\
			       SEGUE_GAIN,\
                               TALK_START_POINT,TALK_END_POINT,\
                               HOOK_START_POINT,HOOK_END_POINT,\
                               OUTCUE,ISRC,ISCI,DESCRIPTION from CUTS\
                               where CUT_NAME=\"%s\"",
			      (const char *)log_cut_name);
	q=new RDSqlQuery(sql);
	if(!q->first()) {
	  delete q;
	  delete cart;
#ifndef WIN32
	  syslog(LOG_USER|LOG_WARNING,"RDLogLine::setEvent(): no cut record found, SQL=%s",(const char *)sql);
#endif  // WIN32
	  log_state=RDLogLine::NoCut;
	  return RDLogLine::NoCut;
	}
	if(q->value(0).toInt()==0) {
	  delete q;
	  delete cart;
#ifndef WIN32
	  syslog(LOG_USER|LOG_WARNING,"RDLogLine::setEvent(): zero length cut audio, SQL=%s",(const char *)sql);
#endif  // WIN32
	  log_state=RDLogLine::NoCut;
	  return RDLogLine::NoCut;
	}
	if(timescale) {
	  if(len>0) {
	    log_effective_length=len;
	    log_forced_length=len;
	  }
	  else {
	    if(log_hook_mode&&
	       (q->value(8).toInt()>=0)&&(q->value(9).toInt()>=0)) {
	      log_effective_length=q->value(9).toInt()-q->value(8).toInt();
	      log_forced_length=log_effective_length;
	      time_ratio=1.0;
	      timescale=false;
	    }
	    else {
	      log_effective_length=cart->forcedLength();
	      time_ratio=(double)log_forced_length/
		(q->value(2).toDouble()-q->value(1).toDouble());
	      if(((1.0/time_ratio)<RD_TIMESCALE_MIN)||
		 ((1.0/time_ratio)>RD_TIMESCALE_MAX)) {
		timescale=false;
	      }
	    }
	  }
	}
	if(timescale) {
	  log_start_point[0]=(int)(q->value(1).toDouble()*time_ratio);
	  log_end_point[0]=(int)(q->value(2).toDouble()*time_ratio);
	  if(q->value(3).toInt()>=0) {
	    log_segue_start_point[0]=(int)(q->value(3).toDouble()*time_ratio);
	    log_segue_end_point[0]=(int)(q->value(4).toDouble()*time_ratio);
	  }
	  else {
	    log_segue_start_point[0]=-1;
	    log_segue_end_point[0]=-1;
	  }
	  if(log_talk_start>=0) {
	    log_talk_start=(int)((double)log_talk_start*time_ratio);
	    log_talk_end=(int)(q->value(7).toDouble()*time_ratio);
	  }
	  else {
	    log_talk_start=-1;
	    log_talk_end=-1;
	  }
	  log_talk_length=log_talk_end-log_talk_start;
	}
	else {
	  if(log_hook_mode&&
	     (q->value(8).toInt()>=0)&&(q->value(9).toInt()>=0)) {
	    log_start_point[0]=q->value(8).toInt();
	    log_end_point[0]=q->value(9).toInt();
	    log_segue_start_point[0]=-1;
	    log_segue_end_point[0]=-1;
	    log_talk_start=-1;
	    log_talk_end=-1;
	  }
	  else {
	    log_start_point[0]=q->value(1).toInt();
	    log_end_point[0]=q->value(2).toInt();
	    if(log_start_point[RDLogLine::LogPointer]>=0 ||
	       log_end_point[RDLogLine::LogPointer]>=0) {
	      log_effective_length=log_end_point[RDLogLine::LogPointer]-
		log_start_point[RDLogLine::LogPointer];
	    }
	    else {
	      log_effective_length=q->value(0).toUInt();
	    }
	    log_segue_start_point[0]=q->value(3).toInt();
	    log_segue_end_point[0]=q->value(4).toInt();
	    log_talk_start=q->value(6).toInt();
	    log_talk_end=q->value(7).toInt();
	  }
	  log_hook_start=q->value(8).toInt();
	  log_hook_end=q->value(9).toInt();
          if(log_talk_end>log_end_point[RDLogLine::LogPointer] && 
             log_end_point[RDLogLine::LogPointer]>=0) {
            log_talk_end=log_end_point[RDLogLine::LogPointer];
          }
          if(log_talk_end<log_start_point[RDLogLine::LogPointer]) {
            log_talk_end=0;
            log_talk_start=0;
          }
          else {
            if(log_talk_start<log_start_point[RDLogLine::LogPointer]) {
              log_talk_start=0;
              log_talk_end-=log_start_point[RDLogLine::LogPointer];
            }
            if(log_talk_start>log_end_point[RDLogLine::LogPointer] &&
               log_end_point[RDLogLine::LogPointer]>=0) {
              log_talk_start=0;
              log_talk_end=0;
            }
          }
	  log_talk_length=log_talk_end-log_talk_start;
	}
	if(segueStartPoint(RDLogLine::AutoPointer)<0) {
	  log_average_segue_length=cart->averageSegueLength();
	}
	else {
	  log_average_segue_length=segueStartPoint(RDLogLine::AutoPointer)-
	    startPoint(RDLogLine::AutoPointer);
	}
	log_outcue=q->value(10).toString();
	log_isrc=q->value(11).toString();
	log_isci=q->value(12).toString();
	log_description=q->value(13).toString();
	log_segue_gain_cut=q->value(5).toInt();
	delete q;
	delete cart;
	break;

      case RDLogLine::Macro:
	cart=new RDCart(log_cart_number);
	log_effective_length=cart->forcedLength();
	log_average_segue_length=log_effective_length;
	log_forced_stop=false;
	rml_event=new RDMacroEvent();
	rml_event->load(cart->number());
	for(int i=0;i<rml_event->size();i++) {
	  if(rml_event->command(i)->command()==RDMacro::LL) {
	    if(rml_event->command(i)->arg(0).toInt()==mach) {
	      log_forced_stop=true;
	    }
	  }
	}
	log_start_point[0]=-1;
	log_end_point[0]=-1;
	log_segue_start_point[0]=-1;
	log_segue_end_point[0]=-1;
	log_talk_length=0;
	log_talk_start=-1;
	log_talk_end=-1;
	log_segue_gain_cut=0;
	delete rml_event;
	delete cart;
	break;

      case RDLogLine::Marker:
      case RDLogLine::Track:
	log_cut_number=0;
	log_cut_name="";
	log_effective_length=0;
	log_average_segue_length=0;
	log_forced_stop=false;
	log_start_point[0]=-1;
	log_end_point[0]=-1;
	log_segue_start_point[0]=-1;
	log_segue_end_point[0]=-1;
	log_talk_length=0;
	log_talk_start=-1;
	log_talk_end=-1;
	log_segue_gain_cut=0;
	break;

      default:
	break;
  }
  return RDLogLine::Ok;
}