From 9882fe9ab035785f19f9e5c3bcf50e4c8accb119 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 14 Dec 2010 19:07:50 +0000 Subject: Clean up libtimecode, make license of bbt_time.h LGPL. git-svn-id: svn://localhost/ardour2/branches/3.0@8272 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/timecode/src/time.cc | 198 +++++++++++++++++++++++----------------------- 1 file changed, 98 insertions(+), 100 deletions(-) (limited to 'libs/timecode/src/time.cc') diff --git a/libs/timecode/src/time.cc b/libs/timecode/src/time.cc index c87662a18c..92cede1d9d 100644 --- a/libs/timecode/src/time.cc +++ b/libs/timecode/src/time.cc @@ -1,23 +1,23 @@ /* - Copyright (C) 2006 Paul Davis + Copyright (C) 2006-2010 Paul Davis - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published - by the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 675 Mass Ave, Cambridge, MA 02139, USA. + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#define Timecode_IS_AROUND_ZERO( sm ) (!(sm).frames && !(sm).seconds && !(sm).minutes && !(sm).hours) -#define Timecode_IS_ZERO( sm ) (!(sm).frames && !(sm).seconds && !(sm).minutes && !(sm).hours && !(sm.subframes)) +#define Timecode_IS_AROUND_ZERO(sm) (!(sm).frames && !(sm).seconds && !(sm).minutes && !(sm).hours) +#define Timecode_IS_ZERO(sm) (!(sm).frames && !(sm).seconds && !(sm).minutes && !(sm).hours && !(sm.subframes)) #include @@ -33,12 +33,12 @@ float Time::default_rate = 30.0; * @return true if seconds wrap. */ Wrap -increment( Time& timecode, uint32_t subframes_per_frame ) +increment (Time& timecode, uint32_t subframes_per_frame) { Wrap wrap = NONE; if (timecode.negative) { - if (Timecode_IS_AROUND_ZERO(timecode) && timecode.subframes) { + if (Timecode_IS_AROUND_ZERO (timecode) && timecode.subframes) { // We have a zero transition involving only subframes timecode.subframes = subframes_per_frame - timecode.subframes; timecode.negative = false; @@ -46,14 +46,14 @@ increment( Time& timecode, uint32_t subframes_per_frame ) } timecode.negative = false; - wrap = decrement( timecode, subframes_per_frame ); - if (!Timecode_IS_ZERO( timecode )) { + wrap = decrement (timecode, subframes_per_frame); + if (!Timecode_IS_ZERO (timecode)) { timecode.negative = true; } return wrap; } - switch ((int)ceil(timecode.rate)) { + switch ((int)ceil (timecode.rate)) { case 24: if (timecode.frames == 23) { timecode.frames = 0; @@ -67,27 +67,27 @@ increment( Time& timecode, uint32_t subframes_per_frame ) } break; case 30: - if (timecode.drop) { - if (timecode.frames == 29) { - if ( ((timecode.minutes + 1) % 10) && (timecode.seconds == 59) ) { - timecode.frames = 2; - } - else { - timecode.frames = 0; - } - wrap = SECONDS; - } + if (timecode.drop) { + if (timecode.frames == 29) { + if (((timecode.minutes + 1) % 10) && (timecode.seconds == 59)) { + timecode.frames = 2; + } + else { + timecode.frames = 0; + } + wrap = SECONDS; + } } else { - if (timecode.frames == 29) { - timecode.frames = 0; - wrap = SECONDS; - } + if (timecode.frames == 29) { + timecode.frames = 0; + wrap = SECONDS; + } } break; case 60: - if (timecode.frames == 59) { - timecode.frames = 0; + if (timecode.frames == 59) { + timecode.frames = 0; wrap = SECONDS; } break; @@ -119,24 +119,23 @@ increment( Time& timecode, uint32_t subframes_per_frame ) * Realtime safe. * @return true if seconds wrap. */ Wrap -decrement( Time& timecode, uint32_t subframes_per_frame ) +decrement (Time& timecode, uint32_t subframes_per_frame) { Wrap wrap = NONE; - - if (timecode.negative || Timecode_IS_ZERO(timecode)) { + if (timecode.negative || Timecode_IS_ZERO (timecode)) { timecode.negative = false; - wrap = increment( timecode, subframes_per_frame ); + wrap = increment (timecode, subframes_per_frame); timecode.negative = true; return wrap; - } else if (Timecode_IS_AROUND_ZERO(timecode) && timecode.subframes) { + } else if (Timecode_IS_AROUND_ZERO (timecode) && timecode.subframes) { // We have a zero transition involving only subframes timecode.subframes = subframes_per_frame - timecode.subframes; timecode.negative = true; return SECONDS; } - switch ((int)ceil(timecode.rate)) { + switch ((int)ceil (timecode.rate)) { case 24: if (timecode.frames == 0) { timecode.frames = 23; @@ -150,27 +149,27 @@ decrement( Time& timecode, uint32_t subframes_per_frame ) } break; case 30: - if (timecode.drop) { - if ((timecode.minutes % 10) && (timecode.seconds == 0)) { - if (timecode.frames <= 2) { - timecode.frames = 29; + if (timecode.drop) { + if ((timecode.minutes % 10) && (timecode.seconds == 0)) { + if (timecode.frames <= 2) { + timecode.frames = 29; wrap = SECONDS; } } else if (timecode.frames == 0) { - timecode.frames = 29; + timecode.frames = 29; wrap = SECONDS; } } else { - if (timecode.frames == 0) { - timecode.frames = 29; + if (timecode.frames == 0) { + timecode.frames = 29; wrap = SECONDS; } } break; case 60: - if (timecode.frames == 0) { - timecode.frames = 59; + if (timecode.frames == 0) { + timecode.frames = 59; wrap = SECONDS; } break; @@ -195,7 +194,7 @@ decrement( Time& timecode, uint32_t subframes_per_frame ) timecode.frames--; } - if (Timecode_IS_ZERO( timecode )) { + if (Timecode_IS_ZERO (timecode)) { timecode.negative = false; } @@ -203,12 +202,12 @@ decrement( Time& timecode, uint32_t subframes_per_frame ) } -/** Go to lowest absolute subframe value in this frame (set to 0 :-) ) */ +/** Go to lowest absolute subframe value in this frame (set to 0 :-)) */ void -frames_floor( Time& timecode ) +frames_floor (Time& timecode) { timecode.subframes = 0; - if (Timecode_IS_ZERO(timecode)) { + if (Timecode_IS_ZERO (timecode)) { timecode.negative = false; } } @@ -216,14 +215,14 @@ frames_floor( Time& timecode ) /** Increment @a timecode by one subframe */ Wrap -increment_subframes( Time& timecode, uint32_t subframes_per_frame ) +increment_subframes (Time& timecode, uint32_t subframes_per_frame) { Wrap wrap = NONE; if (timecode.negative) { timecode.negative = false; - wrap = decrement_subframes( timecode, subframes_per_frame ); - if (!Timecode_IS_ZERO(timecode)) { + wrap = decrement_subframes (timecode, subframes_per_frame); + if (!Timecode_IS_ZERO (timecode)) { timecode.negative = true; } return wrap; @@ -232,7 +231,7 @@ increment_subframes( Time& timecode, uint32_t subframes_per_frame ) timecode.subframes++; if (timecode.subframes >= subframes_per_frame) { timecode.subframes = 0; - increment( timecode, subframes_per_frame ); + increment (timecode, subframes_per_frame); return FRAMES; } return NONE; @@ -241,31 +240,31 @@ increment_subframes( Time& timecode, uint32_t subframes_per_frame ) /** Decrement @a timecode by one subframe */ Wrap -decrement_subframes( Time& timecode, uint32_t subframes_per_frame ) +decrement_subframes (Time& timecode, uint32_t subframes_per_frame) { Wrap wrap = NONE; if (timecode.negative) { timecode.negative = false; - wrap = increment_subframes( timecode, subframes_per_frame ); + wrap = increment_subframes (timecode, subframes_per_frame); timecode.negative = true; return wrap; } if (timecode.subframes <= 0) { timecode.subframes = 0; - if (Timecode_IS_ZERO(timecode)) { + if (Timecode_IS_ZERO (timecode)) { timecode.negative = true; timecode.subframes = 1; return FRAMES; } else { - decrement( timecode, subframes_per_frame ); + decrement (timecode, subframes_per_frame); timecode.subframes = 79; return FRAMES; } } else { timecode.subframes--; - if (Timecode_IS_ZERO(timecode)) { + if (Timecode_IS_ZERO (timecode)) { timecode.negative = false; } return NONE; @@ -275,24 +274,24 @@ decrement_subframes( Time& timecode, uint32_t subframes_per_frame ) /** Go to next whole second (frames == 0 or frames == 2) */ Wrap -increment_seconds( Time& timecode, uint32_t subframes_per_frame ) +increment_seconds (Time& timecode, uint32_t subframes_per_frame) { Wrap wrap = NONE; // Clear subframes - frames_floor( timecode ); + frames_floor (timecode); if (timecode.negative) { // Wrap second if on second boundary - wrap = increment(timecode, subframes_per_frame); + wrap = increment (timecode, subframes_per_frame); // Go to lowest absolute frame value - seconds_floor( timecode ); - if (Timecode_IS_ZERO(timecode)) { + seconds_floor (timecode); + if (Timecode_IS_ZERO (timecode)) { timecode.negative = false; } } else { // Go to highest possible frame in this second - switch ((int)ceil(timecode.rate)) { + switch ((int)ceil (timecode.rate)) { case 24: timecode.frames = 23; break; @@ -308,7 +307,7 @@ increment_seconds( Time& timecode, uint32_t subframes_per_frame ) } // Increment by one frame - wrap = increment( timecode, subframes_per_frame ); + wrap = increment (timecode, subframes_per_frame); } return wrap; @@ -318,31 +317,30 @@ increment_seconds( Time& timecode, uint32_t subframes_per_frame ) /** Go to lowest (absolute) frame value in this second * Doesn't care about positive/negative */ void -seconds_floor( Time& timecode ) +seconds_floor (Time& timecode) { // Clear subframes - frames_floor( timecode ); + frames_floor (timecode); // Go to lowest possible frame in this second - switch ((int)ceil(timecode.rate)) { + switch ((int)ceil (timecode.rate)) { case 24: case 25: case 30: case 60: - if (!(timecode.drop)) { - timecode.frames = 0; + if (!(timecode.drop)) { + timecode.frames = 0; } else { - - if ((timecode.minutes % 10) && (timecode.seconds == 0)) { - timecode.frames = 2; + if ((timecode.minutes % 10) && (timecode.seconds == 0)) { + timecode.frames = 2; } else { - timecode.frames = 0; + timecode.frames = 0; } } break; } - if (Timecode_IS_ZERO(timecode)) { + if (Timecode_IS_ZERO (timecode)) { timecode.negative = false; } } @@ -350,23 +348,23 @@ seconds_floor( Time& timecode ) /** Go to next whole minute (seconds == 0, frames == 0 or frames == 2) */ Wrap -increment_minutes( Time& timecode, uint32_t subframes_per_frame ) +increment_minutes (Time& timecode, uint32_t subframes_per_frame) { Wrap wrap = NONE; // Clear subframes - frames_floor( timecode ); + frames_floor (timecode); if (timecode.negative) { // Wrap if on minute boundary - wrap = increment_seconds( timecode, subframes_per_frame ); + wrap = increment_seconds (timecode, subframes_per_frame); // Go to lowest possible value in this minute - minutes_floor( timecode ); + minutes_floor (timecode); } else { // Go to highest possible second timecode.seconds = 59; // Wrap minute by incrementing second - wrap = increment_seconds( timecode, subframes_per_frame ); + wrap = increment_seconds (timecode, subframes_per_frame); } return wrap; @@ -375,14 +373,14 @@ increment_minutes( Time& timecode, uint32_t subframes_per_frame ) /** Go to lowest absolute value in this minute */ void -minutes_floor( Time& timecode ) +minutes_floor (Time& timecode) { // Go to lowest possible second timecode.seconds = 0; // Go to lowest possible frame - seconds_floor( timecode ); + seconds_floor (timecode); - if (Timecode_IS_ZERO(timecode)) { + if (Timecode_IS_ZERO (timecode)) { timecode.negative = false; } } @@ -390,21 +388,21 @@ minutes_floor( Time& timecode ) /** Go to next whole hour (minute = 0, second = 0, frame = 0) */ Wrap -increment_hours( Time& timecode, uint32_t subframes_per_frame ) +increment_hours (Time& timecode, uint32_t subframes_per_frame) { Wrap wrap = NONE; // Clear subframes - frames_floor(timecode); + frames_floor (timecode); if (timecode.negative) { // Wrap if on hour boundary - wrap = increment_minutes( timecode, subframes_per_frame ); + wrap = increment_minutes (timecode, subframes_per_frame); // Go to lowest possible value in this hour - hours_floor( timecode ); + hours_floor(timecode); } else { timecode.minutes = 59; - wrap = increment_minutes( timecode, subframes_per_frame ); + wrap = increment_minutes (timecode, subframes_per_frame); } return wrap; @@ -413,14 +411,14 @@ increment_hours( Time& timecode, uint32_t subframes_per_frame ) /** Go to lowest absolute value in this hour */ void -hours_floor( Time& timecode ) +hours_floor(Time& timecode) { - timecode.minutes = 0; - timecode.seconds = 0; - timecode.frames = 0; + timecode.minutes = 0; + timecode.seconds = 0; + timecode.frames = 0; timecode.subframes = 0; - if (Timecode_IS_ZERO(timecode)) { + if (Timecode_IS_ZERO (timecode)) { timecode.negative = false; } } -- cgit v1.2.3