![]() |
![]() |
![]() |
libMirage Reference Manual | ![]() |
---|---|---|---|---|
Top | Description | Object Hierarchy | Implemented Interfaces | Signals |
#include <mirage-fragment.h> MirageFragment; struct MirageFragmentClass; enum MirageMainDataFormat; enum MirageSubchannelDataFormat; gboolean mirage_fragment_contains_address (MirageFragment *self
,gint address
); gint mirage_fragment_get_address (MirageFragment *self
); gint mirage_fragment_get_length (MirageFragment *self
); gboolean mirage_fragment_is_writable (MirageFragment *self
); const gchar * mirage_fragment_main_data_get_filename (MirageFragment *self
); gint mirage_fragment_main_data_get_format (MirageFragment *self
); guint64 mirage_fragment_main_data_get_offset (MirageFragment *self
); gint mirage_fragment_main_data_get_size (MirageFragment *self
); void mirage_fragment_main_data_set_format (MirageFragment *self
,gint format
); void mirage_fragment_main_data_set_offset (MirageFragment *self
,guint64 offset
); void mirage_fragment_main_data_set_size (MirageFragment *self
,gint size
); void mirage_fragment_main_data_set_stream (MirageFragment *self
,MirageStream *stream
); gboolean mirage_fragment_read_main_data (MirageFragment *self
,gint address
,guint8 **buffer
,gint *length
,GError **error
); gboolean mirage_fragment_write_main_data (MirageFragment *self
,gint address
,const guint8 *buffer
,gint length
,GError **error
); gboolean mirage_fragment_read_subchannel_data (MirageFragment *self
,gint address
,guint8 **buffer
,gint *length
,GError **error
); gboolean mirage_fragment_write_subchannel_data (MirageFragment *self
,gint address
,const guint8 *buffer
,gint length
,GError **error
); void mirage_fragment_set_address (MirageFragment *self
,gint address
); void mirage_fragment_set_length (MirageFragment *self
,gint length
); const gchar * mirage_fragment_subchannel_data_get_filename (MirageFragment *self
); gint mirage_fragment_subchannel_data_get_format (MirageFragment *self
); guint64 mirage_fragment_subchannel_data_get_offset (MirageFragment *self
); gint mirage_fragment_subchannel_data_get_size (MirageFragment *self
); void mirage_fragment_subchannel_data_set_format (MirageFragment *self
,gint format
); void mirage_fragment_subchannel_data_set_offset (MirageFragment *self
,guint64 offset
); void mirage_fragment_subchannel_data_set_size (MirageFragment *self
,gint size
); void mirage_fragment_subchannel_data_set_stream (MirageFragment *self
,MirageStream *stream
); gboolean mirage_fragment_use_the_rest_of_file (MirageFragment *self
,GError **error
);
MirageFragment object represents an interface between a MirageTrack and I/O stream(s) containing the data. It allows tracks to read and/or write both sectors' main channel and subchannel data. When constructing a track, an image parser will typically create and append at least one fragment. Similarly, during image conversion and writing process, at least one fragment will be requested from image writer and written to.
A MirageFragment object is obtained using g_object_new()
function.
Both main channel and subchannel data I/O streams can be set
using mirage_fragment_main_data_set_stream()
and mirage_fragment_subchannel_data_set_stream()
functions. If no streams are set, the fragment acts as a "NULL" fragment,
and can be used to represent zero-filled pregaps and postgaps in
tracks.
typedef struct _MirageFragment MirageFragment;
All the fields in the MirageFragment structure are private to the MirageFragment implementation and should never be accessed directly.
struct MirageFragmentClass { MirageObjectClass parent_class; };
The class structure for the MirageFragment type.
MirageObjectClass |
the parent class |
typedef enum { MIRAGE_MAIN_DATA_FORMAT_DATA = 0x01, MIRAGE_MAIN_DATA_FORMAT_AUDIO = 0x02, MIRAGE_MAIN_DATA_FORMAT_AUDIO_SWAP = 0x04, } MirageMainDataFormat;
Track file data formats.
typedef enum { MIRAGE_SUBCHANNEL_DATA_FORMAT_INTERNAL = 0x01, MIRAGE_SUBCHANNEL_DATA_FORMAT_EXTERNAL = 0x02, MIRAGE_SUBCHANNEL_DATA_FORMAT_PW96_INTERLEAVED = 0x10, MIRAGE_SUBCHANNEL_DATA_FORMAT_PW96_LINEAR = 0x20, MIRAGE_SUBCHANNEL_DATA_FORMAT_RW96 = 0x40, MIRAGE_SUBCHANNEL_DATA_FORMAT_Q16 = 0x80, } MirageSubchannelDataFormat;
Subchannel file data formats.
internal subchannel (i.e. included in track file) | |
external subchannel (i.e. provided by separate file) | |
P-W subchannel, 96 bytes, interleaved | |
P-W subchannel, 96 bytes, linear | |
R-W subchannel, 96 bytes, cooked | |
Q subchannel, 16 bytes |
gboolean mirage_fragment_contains_address (MirageFragment *self
,gint address
);
Checks whether the fragment contains the given address or not.
|
a MirageFragment |
|
address to be checked |
Returns : |
TRUE if address falls inside fragment, FALSE if it does not |
gint mirage_fragment_get_address (MirageFragment *self
);
Retrieves fragment's start address. The address
is given in sectors.
|
a MirageFragment |
Returns : |
start address |
gint mirage_fragment_get_length (MirageFragment *self
);
Retrieves fragment's length. The returned length
is given in sectors.
|
a MirageFragment |
Returns : |
length |
gboolean mirage_fragment_is_writable (MirageFragment *self
);
Checks if fragment is writable, i.e., whether it has main channel data stream set and this stream is writable.
|
a MirageFragment |
Returns : |
TRUE if fragment is writable, FALSE if it is not. |
const gchar * mirage_fragment_main_data_get_filename
(MirageFragment *self
);
Retrieves filename of main channel data stream.
|
a MirageFragment |
Returns : |
pointer to main channel data file name string. The string belongs to object and should not be modified. [transfer none] |
gint mirage_fragment_main_data_get_format
(MirageFragment *self
);
Retrieves main data file format.
|
a MirageFragment |
Returns : |
main data file format |
guint64 mirage_fragment_main_data_get_offset
(MirageFragment *self
);
Retrieves main data file offset.
|
a MirageFragment |
Returns : |
main data file offset |
gint mirage_fragment_main_data_get_size (MirageFragment *self
);
Retrieves main data file sector size.
|
a MirageFragment |
Returns : |
main data file sector size |
void mirage_fragment_main_data_set_format (MirageFragment *self
,gint format
);
Sets main data file format. format
must be one of MirageMainDataFormat.
|
a MirageFragment |
|
main data file format. [in] |
void mirage_fragment_main_data_set_offset (MirageFragment *self
,guint64 offset
);
Sets main data file offset.
|
a MirageFragment |
|
main data file offset. [in] |
void mirage_fragment_main_data_set_size (MirageFragment *self
,gint size
);
Sets main data file sector size.
|
a MirageFragment |
|
main data file sector size. [in] |
void mirage_fragment_main_data_set_stream (MirageFragment *self
,MirageStream *stream
);
Sets main channel data stream.
|
a MirageFragment |
|
a MirageStream on main channel data file. [in][transfer full] |
gboolean mirage_fragment_read_main_data (MirageFragment *self
,gint address
,guint8 **buffer
,gint *length
,GError **error
);
Reads main channel data for sector at fragment-relative address
(given
in sectors). The buffer for reading data into is allocated by function
and should be freed using g_free()
when no longer needed. The pointer
to buffer is stored into buffer
and the length of read data is stored into
length
.
|
a MirageFragment |
|
address. [in] |
|
location to store pointer to buffer with read data, or NULL . [out][allow-none][array length=length]
|
|
location to store read data length. [out] |
|
location to store error, or NULL . [out][allow-none]
|
Returns : |
TRUE on success, FALSE on failure |
gboolean mirage_fragment_write_main_data (MirageFragment *self
,gint address
,const guint8 *buffer
,gint length
,GError **error
);
Writes main channel data for sector at fragment-relative address
(given
in sectors).
|
a MirageFragment |
|
address. [in] |
|
buffer with data to write, or NULL . [in][allow-none][array length=length]
|
|
length of data to write. [in] |
|
location to store error, or NULL . [out][allow-none]
|
Returns : |
TRUE on success, FALSE on failure |
gboolean mirage_fragment_read_subchannel_data (MirageFragment *self
,gint address
,guint8 **buffer
,gint *length
,GError **error
);
Writes subchannel data for sector at fragment-relative address
(given
in sectors).
|
a MirageFragment |
|
address. [in] |
|
buffer with data to write, or NULL . [in][allow-none][array length=length]
|
|
location to store read data length. [out] |
|
location to store error, or NULL . [out][allow-none]
|
Returns : |
TRUE on success, FALSE on failure |
gboolean mirage_fragment_write_subchannel_data (MirageFragment *self
,gint address
,const guint8 *buffer
,gint length
,GError **error
);
Reads subchannel data for sector at fragment-relative address
(given
in sectors). The buffer for reading data into is allocated by function
and should be freed using g_free()
when no longer needed. The pointer
to buffer is stored into buffer
and the length of read data is stored into
length
.
|
a MirageFragment |
|
address. [in] |
|
buffer with read data, or NULL . [in][allow-none][array length=length]
|
|
length of data to write. [in] |
|
location to store error, or NULL . [out][allow-none]
|
Returns : |
TRUE on success, FALSE on failure |
void mirage_fragment_set_address (MirageFragment *self
,gint address
);
Sets fragment's start address. The address
is given in sectors.
|
a MirageFragment |
|
start address. [in] |
void mirage_fragment_set_length (MirageFragment *self
,gint length
);
Sets fragment's length. The length
is given in sectors.
|
a MirageFragment |
|
length. [in] |
const gchar * mirage_fragment_subchannel_data_get_filename
(MirageFragment *self
);
Retrieves filename of subchannel data input stream.
|
a MirageFragment |
Returns : |
pointer to subchannel data file name string. The string belongs to object and should not be modified. [transfer none] |
gint mirage_fragment_subchannel_data_get_format
(MirageFragment *self
);
Retrieves subchannel data file format.
|
a MirageFragment |
Returns : |
subchannel data file format |
guint64 mirage_fragment_subchannel_data_get_offset
(MirageFragment *self
);
Retrieves subchannel data file offset.
|
a MirageFragment |
Returns : |
subchannel data file offset |
gint mirage_fragment_subchannel_data_get_size
(MirageFragment *self
);
Retrieves subchannel data file sector size.
|
a MirageFragment |
Returns : |
subchannel data file sector size |
void mirage_fragment_subchannel_data_set_format (MirageFragment *self
,gint format
);
Sets subchannel data file format. format
must be a combination of
MirageSubchannelDataFormat.
|
a MirageFragment |
|
subchannel data file format. [in] |
void mirage_fragment_subchannel_data_set_offset (MirageFragment *self
,guint64 offset
);
Sets subchannel data file offset.
|
a MirageFragment |
|
subchannel data file offset. [in] |
void mirage_fragment_subchannel_data_set_size (MirageFragment *self
,gint size
);
Sets subchannel data file sector size.
|
a MirageFragment |
|
subchannel data file sector size. [in] |
void mirage_fragment_subchannel_data_set_stream (MirageFragment *self
,MirageStream *stream
);
Sets subchannel data stream.
|
a MirageFragment |
|
a MirageStream on subchannel data file. [in][transfer full] |
gboolean mirage_fragment_use_the_rest_of_file (MirageFragment *self
,GError **error
);
Uses the rest of data file. It automatically calculates and sets fragment's length.
|
a MirageFragment |
|
location to store error, or NULL . [out][allow-none]
|
Returns : |
TRUE on success, FALSE on failure |
"layout-changed"
signalvoid user_function (MirageFragment *fragment,
gpointer user_data) : Run Last
Emitted when a layout of MirageFragment changed in a way that causes a bottom-up change.
|
a MirageFragment |
|
user data set when the signal handler was connected. |