141 lines
2.6 KiB
Java
141 lines
2.6 KiB
Java
|
/*
|
||
|
* Msf.java
|
||
|
*
|
||
|
* Copyright (c) 2007 Vreixo Formoso
|
||
|
*
|
||
|
* This library is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
* See COPYING file for details.
|
||
|
*/
|
||
|
|
||
|
package org.pykix.libburnia.libburn;
|
||
|
|
||
|
/**
|
||
|
* Represent a minute-second-frame (MSF) address.
|
||
|
*
|
||
|
* @author Vreixo Formoso
|
||
|
* @since 0.1
|
||
|
*/
|
||
|
/*
|
||
|
* Due its simplicity, the functions here are implemented in pure Java,
|
||
|
* without really wrapping underlying libburn C functions.
|
||
|
*/
|
||
|
public class Msf {
|
||
|
|
||
|
/*
|
||
|
* I make this vars public, maybe a get/set would be a better option.
|
||
|
*/
|
||
|
|
||
|
/** Minute component. */
|
||
|
public int m;
|
||
|
|
||
|
/** Second component. */
|
||
|
public int s;
|
||
|
|
||
|
/** Frame component. */
|
||
|
public int f;
|
||
|
|
||
|
public Msf(int m, int s, int f) {
|
||
|
super();
|
||
|
this.m = m;
|
||
|
this.s = s;
|
||
|
this.f = f;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the sector count for this MSF.
|
||
|
*/
|
||
|
public int getSectors() {
|
||
|
return msf2Sectors(m, s, f);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the lba for this MSF.
|
||
|
*/
|
||
|
public int getLba() {
|
||
|
return msf2Lba(m, s, f);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Convert a minute-second-frame (MSF) value to sector count.
|
||
|
*
|
||
|
* @param m
|
||
|
* Minute component.
|
||
|
* @param s
|
||
|
* Second component.
|
||
|
* @param f
|
||
|
* Frame component.
|
||
|
* @return
|
||
|
* The sector count.
|
||
|
*/
|
||
|
public static int msf2Sectors(int m, int s, int f) {
|
||
|
return (m * 60 + s) * 75 + f;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Convert a sector count to minute-second-frame (MSF).
|
||
|
*
|
||
|
* @param sectors
|
||
|
* The sector count.
|
||
|
* @return
|
||
|
* The MSF.
|
||
|
*/
|
||
|
public static Msf sectors2Msf(int sectors) {
|
||
|
|
||
|
int m = sectors / (60 * 75);
|
||
|
int s = (sectors - m * 60 * 75) / 75;
|
||
|
int f = sectors - m * 60 * 75 - s * 75;
|
||
|
|
||
|
return new Msf(m, s, f);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Convert a minute-second-frame (MSF) value to a lba.
|
||
|
*
|
||
|
* @param m
|
||
|
* Minute component.
|
||
|
* @param s
|
||
|
* Second component.
|
||
|
* @param f
|
||
|
* Frame component.
|
||
|
* @return
|
||
|
* The lba.
|
||
|
*/
|
||
|
public static int msf2Lba(int m, int s, int f) {
|
||
|
if (m < 90)
|
||
|
return (m * 60 + s) * 75 + f - 150;
|
||
|
else
|
||
|
return (m * 60 + s) * 75 + f - 450150;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Convert an lba to minute-second-frame (MSF).
|
||
|
*
|
||
|
* @param lba
|
||
|
* The lba.
|
||
|
* @return
|
||
|
* The MSF.
|
||
|
*/
|
||
|
public static Msf lba2Msf(int lba) {
|
||
|
|
||
|
int m, s, f;
|
||
|
|
||
|
if (lba >= -150) {
|
||
|
m = (lba + 150) / (60 * 75);
|
||
|
s = (lba + 150 - m * 60 * 75) / 75;
|
||
|
f = lba + 150 - m * 60 * 75 - s * 75;
|
||
|
} else {
|
||
|
m = (lba + 450150) / (60 * 75);
|
||
|
s = (lba + 450150 - m * 60 * 75) / 75;
|
||
|
f = lba + 450150 - m * 60 * 75 - s * 75;
|
||
|
}
|
||
|
|
||
|
return new Msf(m, s, f);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
}
|