1 #include "cd.h"
2
3 //---- Conversion functions --------------------------------------------------
4 unsigned
Time2Frame(int min,int sec,int frame)5 Time2Frame (int min, int sec, int frame)
6 {
7 return (unsigned)(min * 60 * 75 + sec * 75 + frame);
8 }
9
10 unsigned
Time2HSG(int min,int sec,int frame)11 Time2HSG (int min, int sec, int frame)
12 {
13 return Time2Frame (min, sec, frame) - 150;
14 }
15
16 unsigned
Time2Redbook(int min,int sec,int frame)17 Time2Redbook (int min, int sec, int frame)
18 {
19 return (unsigned)((min << 16) | (sec << 8) | (frame));
20 }
21
22 void
Frame2Time(unsigned frame,int * Min,int * Sec,int * Fra)23 Frame2Time (unsigned frame, int *Min, int *Sec, int *Fra)
24 {
25 *Min = (int)(frame / (60 * 75));
26 frame -= *Min * 60 * 75;
27 *Sec = (int)(frame / 75);
28 frame -= *Sec * 75;
29 *Fra = (int)frame;
30 }
31
32 void
Redbook2Time(unsigned redbook,int * Min,int * Sec,int * Fra)33 Redbook2Time (unsigned redbook, int *Min, int *Sec, int *Fra)
34 {
35 *Fra = (int)(redbook & 0xff);
36 *Sec = (int)((redbook >> 8) & 0xff);
37 *Min = (int)((redbook >> 16) & 0xff);
38 }
39
40 void
HSG2Time(unsigned hsg,int * Min,int * Sec,int * Fra)41 HSG2Time (unsigned hsg, int *Min, int *Sec, int *Fra)
42 {
43 Frame2Time (hsg + 150, Min, Sec, Fra);
44 }
45
46 unsigned
Redbook2HSG(unsigned redbook)47 Redbook2HSG (unsigned redbook)
48 {
49 int Min, Sec, Fra;
50 Redbook2Time (redbook, &Min, &Sec, &Fra);
51 return Time2HSG (Min, Sec, Fra);
52 }
53
54 unsigned
HSG2Redbook(unsigned HSG)55 HSG2Redbook (unsigned HSG)
56 {
57 int Min, Sec, Fra;
58 HSG2Time (HSG, &Min, &Sec, &Fra);
59 return Time2Redbook (Min, Sec, Fra);
60 }
61