summaryrefslogtreecommitdiffstats
path: root/src/itdb_device.h
blob: 7a37177e83924d5fc2f5713da7cc25fc92d72c66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*
|  Copyright (C) 2002-2007 Jorg Schuler <jcsjcs at users sourceforge net>
|  Part of the gtkpod project.
|
|  URL: http://www.gtkpod.org/
|  URL: http://gtkpod.sourceforge.net/
|
|  Most of the code in this file has been ported from the perl
|  script "mktunes.pl" (part of the gnupod-tools collection) written
|  by Adrian Ulrich <pab at blinkenlights.ch>.
|
|  gnupod-tools: http://www.blinkenlights.ch/cgi-bin/fm.pl?get=ipod
|
|  The code contained in this file 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.1 of the License, or (at your option) any later version.
|
|  This file 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 code; if not, write to the Free Software
|  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
|
|  iTunes and iPod are trademarks of Apple
|
|  This product is not supported/written/published by Apple!
|
|  $Id$
*/

#ifndef __ITDB_DEVICE_H__
#define __ITDB_DEVICE_H__

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include "itdb.h"
#include "itdb_sysinfo_extended_parser.h"

#include <glib.h>

G_BEGIN_DECLS

typedef enum _ItdbThumbFormat ItdbThumbFormat;

enum _ItdbThumbFormat
{
    THUMB_FORMAT_UYVY_LE,
    THUMB_FORMAT_UYVY_BE,
    THUMB_FORMAT_I420_LE,
    THUMB_FORMAT_I420_BE,
    THUMB_FORMAT_RGB565_LE,
    THUMB_FORMAT_RGB565_LE_90,
    THUMB_FORMAT_RGB565_BE,
    THUMB_FORMAT_RGB565_BE_90,
    THUMB_FORMAT_RGB555_LE,
    THUMB_FORMAT_RGB555_LE_90,
    THUMB_FORMAT_RGB555_BE,
    THUMB_FORMAT_RGB555_BE_90,
    THUMB_FORMAT_REC_RGB555_LE,
    THUMB_FORMAT_REC_RGB555_LE_90,
    THUMB_FORMAT_REC_RGB555_BE,
    THUMB_FORMAT_REC_RGB555_BE_90,
    THUMB_FORMAT_RGB888_LE,
    THUMB_FORMAT_RGB888_LE_90,
    THUMB_FORMAT_RGB888_BE,
    THUMB_FORMAT_RGB888_BE_90,
    THUMB_FORMAT_EXPERIMENTAL_LE,
    THUMB_FORMAT_EXPERIMENTAL_BE,
};

/**
 * Itdb_Device:
 * @mountpoint:         The mountpoint of the iPod
 * @musicdirs:          The number of /iPod_Control/Music/F.. dirs
 * @byte_order:         G_LITTLE_ENDIAN "regular" endianness G_BIG_ENDIAN
 *                      "reversed" endianness (e.g. mobile phone iTunesDBs)
 * @sysinfo:            A hash with key/value pairs of all entries in
 *                      Device/SysInfo
 * @sysinfo_extended:   The parsed content of SysInfoExtended, which can be NULL
 * @sysinfo_changed:    True if the sysinfo hash been changed by the user, false
 *                      otherwise.  (see itdb_set_sysinfo())
 * @timezone_shift:     The difference in seconds between the current timezone
 *                      and UTC
 *
 * Structure representing an iPod device
 *
 * Since: 0.4.0
 */
struct _Itdb_Device
{
    gchar *mountpoint;
    gint   musicdirs;
    guint  byte_order;
    GHashTable *sysinfo;
    SysInfoIpodProperties *sysinfo_extended;
    gboolean sysinfo_changed;
    gint timezone_shift;
};

/**
 * Itdb_ArtworkFormat:
 * @format_id:          Unique ID for the format (generally a 4 digit int)
 * @width:              Width of the thumbnail
 * @height:             Height of the thumbnail
 * @format:             Pixel format of the thumbnail (RGB, YUV, ...)
 * @padding:            Number of bytes of padding to add after the thumbnail
 *                      (not found in SysInfoExtended -- added for
 *                      compatibility with hardcoded artwork formats)
 * @crop:               Indicates if the thumbnail is to be cropped
 * @rotation:           Degrees to rotate the thumbnail
 * @back_color:         Background color for the thumbnail
 * @display_width:      Width at which the thumbnail will be displayed
 *                      (not currently used)
 * @interlaced:         If TRUE, the thumbnails are interlaced
 *                      (not currently used)
 * @align_row_bytes:    If TRUE, each pixel row must be aligned a 2-byte boundary
 * @color_adjustment:   Color adjustment for the thumbnails
 *                      (not currently used)
 * @gamma:              Gamma value for the thumbails
 *                      (not currently used)
 * @associated_format:  Unknown (not currently used)
 *
 * Structure representing the characteristics of the thumbnails to
 * write to a given .ithmb file. The format of the structure is based
 * on the way artwork formats are written to SysInfoExtended.
 */
struct _Itdb_ArtworkFormat {
        gint format_id;
        gint width;
        gint height;
        ItdbThumbFormat format;
        gint32 padding;
        gboolean crop;
        gint rotation;
        guchar back_color[4];

        gint display_width;
        gboolean interlaced;
        gboolean align_row_bytes;
        gint color_adjustment;
        gdouble gamma;
        gint associated_format;
};

/* Error domain */
#define ITDB_DEVICE_ERROR itdb_device_error_quark ()
GQuark     itdb_device_error_quark      (void);

G_GNUC_INTERNAL GList *itdb_device_get_photo_formats (const Itdb_Device *device);
G_GNUC_INTERNAL GList *itdb_device_get_cover_art_formats (const Itdb_Device *device);
G_GNUC_INTERNAL gint itdb_device_musicdirs_number (Itdb_Device *device);
G_GNUC_INTERNAL void itdb_device_autodetect_endianess (Itdb_Device *device);
G_GNUC_INTERNAL guint64 itdb_device_get_firewire_id (const Itdb_Device *device);
G_GNUC_INTERNAL gboolean itdb_device_supports_sparse_artwork (const Itdb_Device *device);
G_GNUC_INTERNAL gboolean itdb_device_get_storage_info (Itdb_Device *device, guint64 *capacity, guint64 *free);
G_END_DECLS

#endif