Jump to content

Recommended Posts

Posted

 

 

 

Started a new thread for this, as it is an area (timecode!) in which the sound department overlaps with the camera department thus it might interest the camera geeks here as well.

 

Because I got to try out the NanoLockit for the first time, was impressed with its feature in how it can autodetect FPS

 

But Ultrasync ONEs remain my favorite! And the Tentacle Syncs are still handy for DSLR/mirrorless shoots that lack a TC input on the camera.

  • Premium Member
Posted

I'm not sure why it's considered new or interesting to automatically detect the frame rate of incoming code. I've written software that does that in an afternoon!

  • Premium Member
Posted

Here it is, for anyone who's interested!

void ltc_init_calibrated(uint32_t calibratedClockSpeed){
  ltc_bitperiod_longest = ((((calibratedClockSpeed/1000L)*1001L)/24L)/80L) + ltc_legal_period_wiggle;
  ltc_bitperiod_shortest = ((calibratedClockSpeed/60L)/160L) - ltc_legal_period_wiggle;
  ltc_fr_23976_min = (((calibratedClockSpeed/1000L)*1001L)/24L) - (uint32_t)ltc_frame_duration_wiggle;
  ltc_fr_23976_max = (((calibratedClockSpeed/1000L)*1001L)/24L) + (uint32_t)ltc_frame_duration_wiggle;
  ltc_fr_24_min = (calibratedClockSpeed/24) - ltc_frame_duration_wiggle;
  ltc_fr_24_max = (calibratedClockSpeed/24) + ltc_frame_duration_wiggle;
  ltc_fr_25_min = (calibratedClockSpeed/25) - ltc_frame_duration_wiggle;
  ltc_fr_25_max = (calibratedClockSpeed/25) + ltc_frame_duration_wiggle;
  ltc_fr_2997_min = (((calibratedClockSpeed/1000L)*1001L)/30L) - (uint32_t)ltc_frame_duration_wiggle;
  ltc_fr_2997_max = (((calibratedClockSpeed/1000L)*1001L)/30L) + (uint32_t)ltc_frame_duration_wiggle;
  ltc_fr_30_min = (calibratedClockSpeed/30) - ltc_frame_duration_wiggle;
  ltc_fr_30_max = (calibratedClockSpeed/30) + ltc_frame_duration_wiggle;
  ltc_fr_50_min = (calibratedClockSpeed/50) - ltc_frame_duration_wiggle;
  ltc_fr_50_max = (calibratedClockSpeed/50) + ltc_frame_duration_wiggle;
  ltc_fr_5994_min = (((calibratedClockSpeed/1000L)*1001L)/60L) - (uint32_t)ltc_frame_duration_wiggle;
  ltc_fr_5994_max = (((calibratedClockSpeed/1000L)*1001L)/60L) + (uint32_t)ltc_frame_duration_wiggle;
  ltc_fr_60_min = (calibratedClockSpeed/60) - ltc_frame_duration_wiggle;
  ltc_fr_60_max = (calibratedClockSpeed/60) + ltc_frame_duration_wiggle;
}

smpte_framerate ltc_get_framerate(uint32_t frame_duration){

  if(frame_duration > ltc_fr_23976_min && frame_duration < ltc_fr_23976_max){
    return R23976;
  } else if(frame_duration > ltc_fr_24_min && frame_duration < ltc_fr_24_max){
    return R24;
  } else if(frame_duration > ltc_fr_25_min && frame_duration < ltc_fr_25_max){
    return R25;
  } else if(frame_duration > ltc_fr_2997_min && frame_duration < ltc_fr_2997_max){
    return R2997;
  } else if(frame_duration > ltc_fr_30_min && frame_duration < ltc_fr_30_max){
    return R30;
  } else if(frame_duration > ltc_fr_50_min && frame_duration < ltc_fr_50_max){
    return R50;
  } else if(frame_duration > ltc_fr_5994_min && frame_duration < ltc_fr_5994_max){
    return R5994;
  } else if(frame_duration > ltc_fr_60_min && frame_duration < ltc_fr_60_max){
    return R60;
  } else {
    return UNKNOWN;
  }
}


  • Upvote 1
  • 3 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...