You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
3.6 KiB
152 lines
3.6 KiB
/*
|
|
*
|
|
* $Id: k3btrack.h 619556 2007-01-03 17:38:12Z trueg $
|
|
* Copyright (C) 2003-2007 Sebastian Trueg <trueg@k3b.org>
|
|
*
|
|
* This file is part of the K3b project.
|
|
* Copyright (C) 1998-2007 Sebastian Trueg <trueg@k3b.org>
|
|
*
|
|
* This program 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 the file "COPYING" for the exact licensing terms.
|
|
*/
|
|
|
|
|
|
|
|
#ifndef K3BTRACK_H
|
|
#define K3BTRACK_H
|
|
|
|
#include <qcstring.h>
|
|
#include <qvaluevector.h>
|
|
|
|
#include <k3bmsf.h>
|
|
#include "k3bdevice_export.h"
|
|
|
|
namespace K3bDevice
|
|
{
|
|
class LIBK3BDEVICE_EXPORT Track
|
|
{
|
|
friend class Device;
|
|
|
|
public:
|
|
enum TrackType {
|
|
AUDIO,
|
|
DATA
|
|
};
|
|
|
|
enum DataMode {
|
|
MODE1,
|
|
MODE2,
|
|
XA_FORM1,
|
|
XA_FORM2,
|
|
DVD,
|
|
UNKNOWN
|
|
};
|
|
|
|
Track();
|
|
Track( const Track& );
|
|
Track( const K3b::Msf& firstSector,
|
|
const K3b::Msf& lastSector,
|
|
int type,
|
|
int mode = UNKNOWN );
|
|
Track& operator=( const Track& );
|
|
|
|
int type() const { return m_type; }
|
|
|
|
/**
|
|
* Invalid for DVDs and Audio CDs
|
|
*/
|
|
int mode() const { return m_mode; }
|
|
|
|
/**
|
|
* Invalid for DVDs
|
|
*/
|
|
bool copyPermitted() const { return m_copyPermitted; }
|
|
void setCopyPermitted( bool b ) { m_copyPermitted = b; }
|
|
|
|
/**
|
|
* Only valid for audio tracks
|
|
*/
|
|
bool preEmphasis() const { return m_preEmphasis; }
|
|
void setPreEmphasis( bool b ) { m_preEmphasis = b; }
|
|
|
|
bool recordedIncremental() const { return m_preEmphasis; }
|
|
bool recordedUninterrupted() const { return !recordedIncremental(); }
|
|
|
|
const QCString& isrc() const { return m_isrc; }
|
|
void setIsrc( const QCString& s ) { m_isrc = s; }
|
|
|
|
const K3b::Msf& firstSector() const { return m_firstSector; }
|
|
const K3b::Msf& lastSector() const { return m_lastSector; }
|
|
void setFirstSector( const K3b::Msf& msf ) { m_firstSector = msf; }
|
|
void setLastSector( const K3b::Msf& msf ) { m_lastSector = msf; }
|
|
|
|
const K3b::Msf& nextWritableAddress() const { return m_nextWritableAddress; }
|
|
const K3b::Msf& freeBlocks() const { return m_freeBlocks; }
|
|
|
|
K3b::Msf length() const;
|
|
|
|
/**
|
|
* This takes index0 into account
|
|
*/
|
|
K3b::Msf realAudioLength() const;
|
|
|
|
/**
|
|
* 0 if unknown
|
|
*/
|
|
int session() const { return m_session; }
|
|
void setSession( int s ) { m_session = s; }
|
|
|
|
/**
|
|
* @return number of indices. This does not include index 0.
|
|
*/
|
|
int indexCount() const;
|
|
|
|
/**
|
|
* Returns the index relative to the track's start.
|
|
* If it is zero there is no index0.
|
|
*/
|
|
const K3b::Msf& index0() const { return m_index0; }
|
|
|
|
/**
|
|
* Set the track's index0 value.
|
|
* @param msf offset relative to track start.
|
|
*/
|
|
void setIndex0( const K3b::Msf& msf );
|
|
|
|
/**
|
|
* All indices. Normally this list is empty as indices are rarely used.
|
|
* Starts with index 2 (since index 1 are all other sectors FIXME)
|
|
*/
|
|
const QValueVector<K3b::Msf>& indices() const { return m_indices; }
|
|
|
|
bool operator==( const Track& ) const;
|
|
bool operator!=( const Track& ) const;
|
|
|
|
private:
|
|
K3b::Msf m_firstSector;
|
|
K3b::Msf m_lastSector;
|
|
K3b::Msf m_index0;
|
|
|
|
K3b::Msf m_nextWritableAddress;
|
|
K3b::Msf m_freeBlocks;
|
|
|
|
int m_type;
|
|
int m_mode;
|
|
bool m_copyPermitted;
|
|
bool m_preEmphasis;
|
|
|
|
int m_session;
|
|
|
|
QValueVector<K3b::Msf> m_indices;
|
|
|
|
QCString m_isrc;
|
|
};
|
|
}
|
|
|
|
typedef K3bDevice::Track K3bTrack;
|
|
|
|
#endif
|