src/field.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
#include "field_impl.h"
00030
#include "id3/utils.h"
00031
#include "field_def.h"
00032
#include "frame_def.h"
00033
#include "readers.h"
00034
#include <assert.h>
00035
00036
using namespace dami;
00037
00038
00039
00040
static ID3_FieldDef ID3FD_Unimplemented[] =
00041 {
00042 {
00043
ID3FN_DATA,
00044
ID3FTY_BINARY,
00045 0,
00046
ID3V2_EARLIEST,
00047
ID3V2_LATEST,
00048
ID3FF_NONE,
00049
ID3FN_NOFIELD
00050 },
00051 {
ID3FN_NOFIELD }
00052 };
00053
00054 const ID3_FieldDef*
ID3_FieldDef::DEFAULT = ID3FD_Unimplemented;
00055
00056
static ID3_FieldDef ID3FD_URL[] =
00057 {
00058 {
00059
ID3FN_URL,
00060
ID3FTY_TEXTSTRING,
00061 0,
00062
ID3V2_EARLIEST,
00063
ID3V2_LATEST,
00064
ID3FF_NONE,
00065
ID3FN_NOFIELD
00066 },
00067 {
ID3FN_NOFIELD }
00068 };
00069
00070
static ID3_FieldDef ID3FD_UserURL[] =
00071 {
00072 {
00073
ID3FN_TEXTENC,
00074
ID3FTY_INTEGER,
00075 1,
00076
ID3V2_EARLIEST,
00077
ID3V2_LATEST,
00078
ID3FF_NONE,
00079
ID3FN_NOFIELD
00080 },
00081 {
00082
ID3FN_DESCRIPTION,
00083
ID3FTY_TEXTSTRING,
00084 0,
00085
ID3V2_EARLIEST,
00086
ID3V2_LATEST,
00087
ID3FF_CSTR |
ID3FF_ENCODABLE,
00088
ID3FN_NOFIELD
00089 },
00090 {
00091
ID3FN_URL,
00092
ID3FTY_TEXTSTRING,
00093 0,
00094
ID3V2_EARLIEST,
00095
ID3V2_LATEST,
00096
ID3FF_NONE,
00097
ID3FN_NOFIELD
00098 },
00099 {
ID3FN_NOFIELD }
00100 };
00101
00102
static ID3_FieldDef ID3FD_Text[] =
00103 {
00104 {
00105
ID3FN_TEXTENC,
00106
ID3FTY_INTEGER,
00107 1,
00108
ID3V2_EARLIEST,
00109
ID3V2_LATEST,
00110
ID3FF_NONE,
00111
ID3FN_NOFIELD
00112 },
00113 {
00114
ID3FN_TEXT,
00115
ID3FTY_TEXTSTRING,
00116 0,
00117
ID3V2_EARLIEST,
00118
ID3V2_LATEST,
00119
ID3FF_ENCODABLE,
00120
ID3FN_NOFIELD
00121 },
00122 {
ID3FN_NOFIELD }
00123 };
00124
00125
00126
static ID3_FieldDef ID3FD_UserText[] =
00127 {
00128 {
00129
ID3FN_TEXTENC,
00130
ID3FTY_INTEGER,
00131 1,
00132
ID3V2_EARLIEST,
00133
ID3V2_LATEST,
00134
ID3FF_NONE,
00135
ID3FN_NOFIELD
00136 },
00137 {
00138
ID3FN_DESCRIPTION,
00139
ID3FTY_TEXTSTRING,
00140 0,
00141
ID3V2_EARLIEST,
00142
ID3V2_LATEST,
00143
ID3FF_CSTR |
ID3FF_ENCODABLE,
00144
ID3FN_NOFIELD
00145 },
00146 {
00147
ID3FN_TEXT,
00148
ID3FTY_TEXTSTRING,
00149 0,
00150
ID3V2_EARLIEST,
00151
ID3V2_LATEST,
00152
ID3FF_ENCODABLE,
00153
ID3FN_NOFIELD
00154 },
00155 {
ID3FN_NOFIELD }
00156 };
00157
00158
00159
static ID3_FieldDef ID3FD_GeneralText[] =
00160 {
00161 {
00162
ID3FN_TEXTENC,
00163
ID3FTY_INTEGER,
00164 1,
00165
ID3V2_EARLIEST,
00166
ID3V2_LATEST,
00167
ID3FF_NONE,
00168
ID3FN_NOFIELD
00169 },
00170 {
00171
ID3FN_LANGUAGE,
00172
ID3FTY_TEXTSTRING,
00173 3,
00174
ID3V2_EARLIEST,
00175
ID3V2_LATEST,
00176
ID3FF_NONE,
00177
ID3FN_NOFIELD
00178 },
00179 {
00180
ID3FN_DESCRIPTION,
00181
ID3FTY_TEXTSTRING,
00182 0,
00183
ID3V2_EARLIEST,
00184
ID3V2_LATEST,
00185
ID3FF_CSTR |
ID3FF_ENCODABLE,
00186
ID3FN_NOFIELD
00187 },
00188 {
00189
ID3FN_TEXT,
00190
ID3FTY_TEXTSTRING,
00191 0,
00192
ID3V2_EARLIEST,
00193
ID3V2_LATEST,
00194
ID3FF_ENCODABLE,
00195
ID3FN_NOFIELD
00196 },
00197 {
ID3FN_NOFIELD }
00198 };
00199
00200
static ID3_FieldDef ID3FD_TermsOfUse[] =
00201 {
00202 {
00203
ID3FN_TEXTENC,
00204
ID3FTY_INTEGER,
00205 1,
00206
ID3V2_3_0,
00207
ID3V2_LATEST,
00208
ID3FF_NONE,
00209
ID3FN_NOFIELD
00210 },
00211 {
00212
ID3FN_LANGUAGE,
00213
ID3FTY_TEXTSTRING,
00214 3,
00215
ID3V2_3_0,
00216
ID3V2_LATEST,
00217
ID3FF_NONE,
00218
ID3FN_NOFIELD
00219 },
00220 {
00221
ID3FN_TEXT,
00222
ID3FTY_TEXTSTRING,
00223 0,
00224
ID3V2_3_0,
00225
ID3V2_LATEST,
00226
ID3FF_ENCODABLE,
00227
ID3FN_NOFIELD
00228 },
00229 {
ID3FN_NOFIELD }
00230 };
00231
00232
static ID3_FieldDef ID3FD_LinkedInfo[] =
00233 {
00234 {
00235
ID3FN_ID,
00236
ID3FTY_TEXTSTRING,
00237 3,
00238
ID3V2_EARLIEST,
00239
ID3V2_2_1,
00240
ID3FF_NONE,
00241
ID3FN_NOFIELD
00242 },
00243 {
00244
ID3FN_ID,
00245
ID3FTY_TEXTSTRING,
00246 4,
00247
ID3V2_3_0,
00248
ID3V2_LATEST,
00249
ID3FF_NONE,
00250
ID3FN_NOFIELD
00251 },
00252 {
00253
ID3FN_URL,
00254
ID3FTY_TEXTSTRING,
00255 0,
00256
ID3V2_EARLIEST,
00257
ID3V2_LATEST,
00258
ID3FF_CSTR,
00259
ID3FN_NOFIELD
00260 },
00261 {
00262
ID3FN_TEXT,
00263
ID3FTY_TEXTSTRING,
00264 0,
00265
ID3V2_EARLIEST,
00266
ID3V2_LATEST,
00267
ID3FF_NONE,
00268
ID3FN_NOFIELD
00269 },
00270 {
ID3FN_NOFIELD }
00271 };
00272
00273
static ID3_FieldDef ID3FD_Picture[] =
00274 {
00275 {
00276
ID3FN_TEXTENC,
00277
ID3FTY_INTEGER,
00278 1,
00279
ID3V2_EARLIEST,
00280
ID3V2_LATEST,
00281
ID3FF_NONE,
00282
ID3FN_NOFIELD
00283 },
00284 {
00285
ID3FN_IMAGEFORMAT,
00286
ID3FTY_TEXTSTRING,
00287 3,
00288
ID3V2_EARLIEST,
00289
ID3V2_2_1,
00290
ID3FF_NONE,
00291
ID3FN_NOFIELD
00292 },
00293 {
00294
ID3FN_MIMETYPE,
00295
ID3FTY_TEXTSTRING,
00296 0,
00297
ID3V2_3_0,
00298
ID3V2_LATEST,
00299
ID3FF_CSTR,
00300
ID3FN_NOFIELD
00301 },
00302 {
00303
ID3FN_PICTURETYPE,
00304
ID3FTY_INTEGER,
00305 1,
00306
ID3V2_EARLIEST,
00307
ID3V2_LATEST,
00308
ID3FF_NONE,
00309
ID3FN_NOFIELD
00310 },
00311 {
00312
ID3FN_DESCRIPTION,
00313
ID3FTY_TEXTSTRING,
00314 0,
00315
ID3V2_EARLIEST,
00316
ID3V2_LATEST,
00317
ID3FF_CSTR |
ID3FF_ENCODABLE,
00318
ID3FN_NOFIELD
00319 },
00320 {
00321
ID3FN_DATA,
00322
ID3FTY_BINARY,
00323 0,
00324
ID3V2_EARLIEST,
00325
ID3V2_LATEST,
00326
ID3FF_NONE,
00327
ID3FN_NOFIELD
00328 },
00329 {
ID3FN_NOFIELD }
00330 };
00331
00332
static ID3_FieldDef ID3FD_GEO[] =
00333 {
00334 {
00335
ID3FN_TEXTENC,
00336
ID3FTY_INTEGER,
00337 1,
00338
ID3V2_EARLIEST,
00339
ID3V2_LATEST,
00340
ID3FF_NONE,
00341
ID3FN_NOFIELD
00342 },
00343 {
00344
ID3FN_MIMETYPE,
00345
ID3FTY_TEXTSTRING,
00346 0,
00347
ID3V2_EARLIEST,
00348
ID3V2_LATEST,
00349
ID3FF_CSTR,
00350
ID3FN_NOFIELD
00351 },
00352 {
00353
ID3FN_FILENAME,
00354
ID3FTY_TEXTSTRING,
00355 0,
00356
ID3V2_EARLIEST,
00357
ID3V2_LATEST,
00358
ID3FF_CSTR |
ID3FF_ENCODABLE,
00359
ID3FN_NOFIELD
00360 },
00361 {
00362
ID3FN_DESCRIPTION,
00363
ID3FTY_TEXTSTRING,
00364 0,
00365
ID3V2_EARLIEST,
00366
ID3V2_LATEST,
00367
ID3FF_CSTR |
ID3FF_ENCODABLE,
00368
ID3FN_NOFIELD
00369 },
00370 {
00371
ID3FN_DATA,
00372
ID3FTY_BINARY,
00373 0,
00374
ID3V2_EARLIEST,
00375
ID3V2_LATEST,
00376
ID3FF_NONE,
00377
ID3FN_NOFIELD
00378 },
00379 {
ID3FN_NOFIELD }
00380 };
00381
00382
static ID3_FieldDef ID3FD_UFI[] =
00383 {
00384 {
00385
ID3FN_OWNER,
00386
ID3FTY_TEXTSTRING,
00387 0,
00388
ID3V2_EARLIEST,
00389
ID3V2_LATEST,
00390
ID3FF_CSTR,
00391
ID3FN_NOFIELD
00392 },
00393 {
00394
ID3FN_DATA,
00395
ID3FTY_BINARY,
00396 0,
00397
ID3V2_EARLIEST,
00398
ID3V2_LATEST,
00399
ID3FF_NONE,
00400
ID3FN_NOFIELD
00401 },
00402 {
ID3FN_NOFIELD }
00403 };
00404
00405
static ID3_FieldDef ID3FD_PlayCounter[] =
00406 {
00407 {
00408
ID3FN_COUNTER,
00409
ID3FTY_INTEGER,
00410 4,
00411
ID3V2_EARLIEST,
00412
ID3V2_LATEST,
00413
ID3FF_NONE,
00414
ID3FN_NOFIELD
00415 },
00416 {
ID3FN_NOFIELD }
00417 };
00418
00419
static ID3_FieldDef ID3FD_Popularimeter[] =
00420 {
00421 {
00422
ID3FN_EMAIL,
00423
ID3FTY_TEXTSTRING,
00424 0,
00425
ID3V2_EARLIEST,
00426
ID3V2_LATEST,
00427
ID3FF_CSTR,
00428
ID3FN_NOFIELD
00429 },
00430 {
00431
ID3FN_RATING,
00432
ID3FTY_INTEGER,
00433 1,
00434
ID3V2_EARLIEST,
00435
ID3V2_LATEST,
00436
ID3FF_NONE,
00437
ID3FN_NOFIELD
00438 },
00439 {
00440
ID3FN_COUNTER,
00441
ID3FTY_INTEGER,
00442 4,
00443
ID3V2_EARLIEST,
00444
ID3V2_LATEST,
00445
ID3FF_NONE,
00446
ID3FN_NOFIELD
00447 },
00448 {
ID3FN_NOFIELD }
00449 };
00450
00451
static ID3_FieldDef ID3FD_Private[] =
00452 {
00453 {
00454
ID3FN_OWNER,
00455
ID3FTY_TEXTSTRING,
00456 0,
00457
ID3V2_3_0,
00458
ID3V2_LATEST,
00459
ID3FF_CSTR,
00460
ID3FN_NOFIELD
00461 },
00462 {
00463
ID3FN_DATA,
00464
ID3FTY_BINARY,
00465 0,
00466
ID3V2_3_0,
00467
ID3V2_LATEST,
00468
ID3FF_NONE,
00469
ID3FN_NOFIELD
00470 },
00471 {
ID3FN_NOFIELD }
00472 };
00473
00474
00475
static ID3_FieldDef ID3FD_Registration[] =
00476 {
00477 {
00478
ID3FN_OWNER,
00479
ID3FTY_TEXTSTRING,
00480 0,
00481
ID3V2_3_0,
00482
ID3V2_LATEST,
00483
ID3FF_CSTR,
00484
ID3FN_NOFIELD
00485 },
00486 {
00487
ID3FN_ID,
00488
ID3FTY_INTEGER,
00489 1,
00490
ID3V2_3_0,
00491
ID3V2_LATEST,
00492
ID3FF_NONE,
00493
ID3FN_NOFIELD
00494 },
00495 {
00496
ID3FN_DATA,
00497
ID3FTY_BINARY,
00498 0,
00499
ID3V2_3_0,
00500
ID3V2_LATEST,
00501
ID3FF_NONE,
00502
ID3FN_NOFIELD
00503 },
00504 {
ID3FN_NOFIELD }
00505 };
00506
00507
static ID3_FieldDef ID3FD_InvolvedPeople[] =
00508 {
00509 {
00510
ID3FN_TEXTENC,
00511
ID3FTY_INTEGER,
00512 1,
00513
ID3V2_EARLIEST,
00514
ID3V2_LATEST,
00515
ID3FF_NONE,
00516
ID3FN_NOFIELD
00517 },
00518 {
00519
ID3FN_TEXT,
00520
ID3FTY_TEXTSTRING,
00521 0,
00522
ID3V2_EARLIEST,
00523
ID3V2_LATEST,
00524
ID3FF_TEXTLIST,
00525
ID3FN_NOFIELD
00526 },
00527 {
ID3FN_NOFIELD }
00528 };
00529
00530
static ID3_FieldDef ID3FD_CDM[] =
00531 {
00532 {
00533
ID3FN_DATA,
00534
ID3FTY_BINARY,
00535 0,
00536
ID3V2_2_1,
00537
ID3V2_2_1,
00538
ID3FF_NONE,
00539
ID3FN_NOFIELD
00540 }
00541 };
00542
00543
static ID3_FieldDef ID3FD_SyncLyrics[] =
00544 {
00545 {
00546
ID3FN_TEXTENC,
00547
ID3FTY_INTEGER,
00548 1,
00549
ID3V2_EARLIEST,
00550
ID3V2_LATEST,
00551
ID3FF_NONE,
00552
ID3FN_NOFIELD
00553 },
00554 {
00555
ID3FN_LANGUAGE,
00556
ID3FTY_TEXTSTRING,
00557 3,
00558
ID3V2_EARLIEST,
00559
ID3V2_LATEST,
00560
ID3FF_NONE,
00561
ID3FN_NOFIELD
00562 },
00563 {
00564
ID3FN_TIMESTAMPFORMAT,
00565
ID3FTY_INTEGER,
00566 1,
00567
ID3V2_EARLIEST,
00568
ID3V2_LATEST,
00569
ID3FF_NONE,
00570
ID3FN_NOFIELD
00571 },
00572 {
00573
ID3FN_CONTENTTYPE,
00574
ID3FTY_INTEGER,
00575 1,
00576
ID3V2_EARLIEST,
00577
ID3V2_LATEST,
00578
ID3FF_NONE,
00579
ID3FN_NOFIELD
00580 },
00581 {
00582
ID3FN_DESCRIPTION,
00583
ID3FTY_TEXTSTRING,
00584 0,
00585
ID3V2_EARLIEST,
00586
ID3V2_LATEST,
00587
ID3FF_CSTR |
ID3FF_ENCODABLE,
00588
ID3FN_NOFIELD
00589 },
00590 {
00591
ID3FN_DATA,
00592
ID3FTY_BINARY,
00593 0,
00594
ID3V2_EARLIEST,
00595
ID3V2_LATEST,
00596
ID3FF_NONE,
00597
ID3FN_NOFIELD
00598 },
00599 {
ID3FN_NOFIELD }
00600 };
00601
00602
00603
00604
00605
00606
#if defined _UNDEFINED_
00607
static ID3_FieldDef ID3FD_Volume[] =
00608 {
00609 {
00610
ID3FN_VOLUMEADJ,
00611
ID3FTY_INTEGER,
00612 1,
00613
ID3V2_EARLIEST,
00614
ID3V2_LATEST,
00615
ID3FF_NONE,
00616
ID3FN_NOFIELD
00617 },
00618 {
00619
ID3FN_NUMBITS,
00620
ID3FTY_INTEGER,
00621 1,
00622
ID3V2_EARLIEST,
00623
ID3V2_LATEST,
00624
ID3FF_NONE,
00625
ID3FN_NOFIELD
00626 },
00627 {
00628
ID3FN_VOLCHGRIGHT,
00629 ID3FTY_BITFIELD,
00630 0,
00631
ID3V2_EARLIEST,
00632
ID3V2_LATEST,
00633 ID3FF_ADJUSTEDBY,
00634
ID3FN_NUMBITS
00635 },
00636 {
00637
ID3FN_VOLCHGLEFT,
00638 ID3FTY_BITFIELD,
00639 0,
00640
ID3V2_EARLIEST,
00641
ID3V2_LATEST,
00642 ID3FF_ADJUSTEDBY,
00643
ID3FN_NUMBITS
00644 },
00645 {
00646
ID3FN_PEAKVOLRIGHT,
00647 ID3FTY_BITFIELD,
00648 0,
00649
ID3V2_EARLIEST,
00650
ID3V2_LATEST,
00651 ID3FF_ADJUSTEDBY,
00652
ID3FN_NUMBITS
00653 },
00654 {
00655
ID3FN_PEAKVOLLEFT,
00656 ID3FTY_BITFIELD,
00657 0,
00658
ID3V2_EARLIEST,
00659
ID3V2_LATEST,
00660 ID3FF_ADJUSTEDBY,
00661
ID3FN_NUMBITS
00662 },
00663 {
ID3FN_NOFIELD }
00664 };
00665
#endif
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
static ID3_FrameDef ID3_FrameDefs[] =
00747 {
00748
00749
00750 {
ID3FID_AUDIOCRYPTO,
"CRA",
"AENC",
false,
false, ID3FD_Unimplemented,
"Audio encryption"},
00751 {
ID3FID_PICTURE,
"PIC",
"APIC",
false,
false, ID3FD_Picture,
"Attached picture"},
00752 {
ID3FID_COMMENT,
"COM",
"COMM",
false,
false, ID3FD_GeneralText,
"Comments"},
00753 {
ID3FID_COMMERCIAL,
"" ,
"COMR",
false,
false, ID3FD_Unimplemented,
"Commercial"},
00754 {
ID3FID_CRYPTOREG,
"" ,
"ENCR",
false,
false, ID3FD_Registration,
"Encryption method registration"},
00755 {
ID3FID_EQUALIZATION,
"EQU",
"EQUA",
false,
true, ID3FD_Unimplemented,
"Equalization"},
00756 {
ID3FID_EVENTTIMING,
"ETC",
"ETCO",
false,
true, ID3FD_Unimplemented,
"Event timing codes"},
00757 {
ID3FID_GENERALOBJECT,
"GEO",
"GEOB",
false,
false, ID3FD_GEO,
"General encapsulated object"},
00758 {
ID3FID_GROUPINGREG,
"" ,
"GRID",
false,
false, ID3FD_Registration,
"Group identification registration"},
00759 {
ID3FID_INVOLVEDPEOPLE,
"IPL",
"IPLS",
false,
false, ID3FD_InvolvedPeople,
"Involved people list"},
00760 {
ID3FID_LINKEDINFO,
"LNK",
"LINK",
false,
false, ID3FD_LinkedInfo,
"Linked information"},
00761 {
ID3FID_CDID,
"MCI",
"MCDI",
false,
false, ID3FD_Unimplemented,
"Music CD identifier"},
00762 {
ID3FID_MPEGLOOKUP,
"MLL",
"MLLT",
false,
true, ID3FD_Unimplemented,
"MPEG location lookup table"},
00763 {
ID3FID_OWNERSHIP,
"" ,
"OWNE",
false,
false, ID3FD_Unimplemented,
"Ownership frame"},
00764 {
ID3FID_PRIVATE,
"" ,
"PRIV",
false,
false, ID3FD_Private,
"Private frame"},
00765 {
ID3FID_PLAYCOUNTER,
"CNT",
"PCNT",
false,
false, ID3FD_PlayCounter,
"Play counter"},
00766 {
ID3FID_POPULARIMETER,
"POP",
"POPM",
false,
false, ID3FD_Popularimeter,
"Popularimeter"},
00767 {
ID3FID_POSITIONSYNC,
"" ,
"POSS",
false,
true, ID3FD_Unimplemented,
"Position synchronisation frame"},
00768 {
ID3FID_BUFFERSIZE,
"BUF",
"RBUF",
false,
false, ID3FD_Unimplemented,
"Recommended buffer size"},
00769 {
ID3FID_VOLUMEADJ,
"RVA",
"RVAD",
false,
true, ID3FD_Unimplemented,
"Relative volume adjustment"},
00770 {
ID3FID_REVERB,
"REV",
"RVRB",
false,
false, ID3FD_Unimplemented,
"Reverb"},
00771 {
ID3FID_SYNCEDLYRICS,
"SLT",
"SYLT",
false,
false, ID3FD_SyncLyrics,
"Synchronized lyric/text"},
00772 {
ID3FID_SYNCEDTEMPO,
"STC",
"SYTC",
false,
true, ID3FD_Unimplemented,
"Synchronized tempo codes"},
00773 {
ID3FID_ALBUM,
"TAL",
"TALB",
false,
false, ID3FD_Text,
"Album/Movie/Show title"},
00774 {
ID3FID_BPM,
"TBP",
"TBPM",
false,
false, ID3FD_Text,
"BPM (beats per minute)"},
00775 {
ID3FID_COMPOSER,
"TCM",
"TCOM",
false,
false, ID3FD_Text,
"Composer"},
00776 {
ID3FID_CONTENTTYPE,
"TCO",
"TCON",
false,
false, ID3FD_Text,
"Content type"},
00777 {
ID3FID_COPYRIGHT,
"TCR",
"TCOP",
false,
false, ID3FD_Text,
"Copyright message"},
00778 {
ID3FID_DATE,
"TDA",
"TDAT",
false,
false, ID3FD_Text,
"Date"},
00779 {
ID3FID_PLAYLISTDELAY,
"TDY",
"TDLY",
false,
false, ID3FD_Text,
"Playlist delay"},
00780 {
ID3FID_ENCODEDBY,
"TEN",
"TENC",
false,
true, ID3FD_Text,
"Encoded by"},
00781 {
ID3FID_LYRICIST,
"TXT",
"TEXT",
false,
false, ID3FD_Text,
"Lyricist/Text writer"},
00782 {
ID3FID_FILETYPE,
"TFT",
"TFLT",
false,
false, ID3FD_Text,
"File type"},
00783 {
ID3FID_TIME,
"TIM",
"TIME",
false,
false, ID3FD_Text,
"Time"},
00784 {
ID3FID_CONTENTGROUP,
"TT1",
"TIT1",
false,
false, ID3FD_Text,
"Content group description"},
00785 {
ID3FID_TITLE,
"TT2",
"TIT2",
false,
false, ID3FD_Text,
"Title/songname/content description"},
00786 {
ID3FID_SUBTITLE,
"TT3",
"TIT3",
false,
false, ID3FD_Text,
"Subtitle/Description refinement"},
00787 {
ID3FID_INITIALKEY,
"TKE",
"TKEY",
false,
false, ID3FD_Text,
"Initial key"},
00788 {
ID3FID_LANGUAGE,
"TLA",
"TLAN",
false,
false, ID3FD_Text,
"Language(s)"},
00789 {
ID3FID_SONGLEN,
"TLE",
"TLEN",
false,
true, ID3FD_Text,
"Length"},
00790 {
ID3FID_MEDIATYPE,
"TMT",
"TMED",
false,
false, ID3FD_Text,
"Media type"},
00791 {
ID3FID_ORIGALBUM,
"TOT",
"TOAL",
false,
false, ID3FD_Text,
"Original album/movie/show title"},
00792 {
ID3FID_ORIGFILENAME,
"TOF",
"TOFN",
false,
false, ID3FD_Text,
"Original filename"},
00793 {
ID3FID_ORIGLYRICIST,
"TOL",
"TOLY",
false,
false, ID3FD_Text,
"Original lyricist(s)/text writer(s)"},
00794 {
ID3FID_ORIGARTIST,
"TOA",
"TOPE",
false,
false, ID3FD_Text,
"Original artist(s)/performer(s)"},
00795 {
ID3FID_ORIGYEAR,
"TOR",
"TORY",
false,
false, ID3FD_Text,
"Original release year"},
00796 {
ID3FID_FILEOWNER,
"" ,
"TOWN",
false,
false, ID3FD_Text,
"File owner/licensee"},
00797 {
ID3FID_LEADARTIST,
"TP1",
"TPE1",
false,
false, ID3FD_Text,
"Lead performer(s)/Soloist(s)"},
00798 {
ID3FID_BAND,
"TP2",
"TPE2",
false,
false, ID3FD_Text,
"Band/orchestra/accompaniment"},
00799 {
ID3FID_CONDUCTOR,
"TP3",
"TPE3",
false,
false, ID3FD_Text,
"Conductor/performer refinement"},
00800 {
ID3FID_MIXARTIST,
"TP4",
"TPE4",
false,
false, ID3FD_Text,
"Interpreted, remixed, or otherwise modified by"},
00801 {
ID3FID_PARTINSET,
"TPA",
"TPOS",
false,
false, ID3FD_Text,
"Part of a set"},
00802 {
ID3FID_PUBLISHER,
"TPB",
"TPUB",
false,
false, ID3FD_Text,
"Publisher"},
00803 {
ID3FID_TRACKNUM,
"TRK",
"TRCK",
false,
false, ID3FD_Text,
"Track number/Position in set"},
00804 {
ID3FID_RECORDINGDATES,
"TRD",
"TRDA",
false,
false, ID3FD_Text,
"Recording dates"},
00805 {
ID3FID_NETRADIOSTATION,
"TRN",
"TRSN",
false,
false, ID3FD_Text,
"Internet radio station name"},
00806 {
ID3FID_NETRADIOOWNER,
"TRO",
"TRSO",
false,
false, ID3FD_Text,
"Internet radio station owner"},
00807 {
ID3FID_SIZE,
"TSI",
"TSIZ",
false,
true, ID3FD_Text,
"Size"},
00808 {
ID3FID_ISRC,
"TRC",
"TSRC",
false,
false, ID3FD_Text,
"ISRC (international standard recording code)"},
00809 {
ID3FID_ENCODERSETTINGS,
"TSS",
"TSSE",
false,
false, ID3FD_Text,
"Software/Hardware and settings used for encoding"},
00810 {
ID3FID_USERTEXT,
"TXX",
"TXXX",
false,
false, ID3FD_UserText,
"User defined text information"},
00811 {
ID3FID_YEAR,
"TYE",
"TYER",
false,
false, ID3FD_Text,
"Year"},
00812 {
ID3FID_UNIQUEFILEID,
"UFI",
"UFID",
false,
false, ID3FD_UFI,
"Unique file identifier"},
00813 {
ID3FID_TERMSOFUSE,
"" ,
"USER",
false,
false, ID3FD_TermsOfUse,
"Terms of use"},
00814 {
ID3FID_UNSYNCEDLYRICS,
"ULT",
"USLT",
false,
false, ID3FD_GeneralText,
"Unsynchronized lyric/text transcription"},
00815 {
ID3FID_WWWCOMMERCIALINFO,
"WCM",
"WCOM",
false,
false, ID3FD_URL,
"Commercial information"},
00816 {
ID3FID_WWWCOPYRIGHT,
"WCP",
"WCOP",
false,
false, ID3FD_URL,
"Copyright/Legal infromation"},
00817 {
ID3FID_WWWAUDIOFILE,
"WAF",
"WOAF",
false,
false, ID3FD_URL,
"Official audio file webpage"},
00818 {
ID3FID_WWWARTIST,
"WAR",
"WOAR",
false,
false, ID3FD_URL,
"Official artist/performer webpage"},
00819 {
ID3FID_WWWAUDIOSOURCE,
"WAS",
"WOAS",
false,
false, ID3FD_URL,
"Official audio source webpage"},
00820 {
ID3FID_WWWRADIOPAGE,
"WRA",
"WORS",
false,
false, ID3FD_URL,
"Official internet radio station homepage"},
00821 {
ID3FID_WWWPAYMENT,
"WPY",
"WPAY",
false,
false, ID3FD_URL,
"Payment"},
00822 {
ID3FID_WWWPUBLISHER,
"WPB",
"WPUB",
false,
false, ID3FD_URL,
"Official publisher webpage"},
00823 {
ID3FID_WWWUSER,
"WXX",
"WXXX",
false,
false, ID3FD_UserURL,
"User defined URL link"},
00824 {
ID3FID_METACRYPTO,
"CRM",
"" ,
false,
false, ID3FD_Unimplemented,
"Encrypted meta frame"},
00825 {
ID3FID_METACOMPRESSION,
"CDM",
"" ,
false,
false, ID3FD_CDM,
"Compressed data meta frame"},
00826 {
ID3FID_NOFRAME}
00827 };
00828
00886 ID3_FieldImpl::ID3_FieldImpl()
00887 : _id(
ID3FN_NOFIELD),
00888 _type(
ID3FTY_INTEGER),
00889 _spec_begin(
ID3V2_EARLIEST),
00890 _spec_end(
ID3V2_LATEST),
00891 _flags(0),
00892 _changed(false),
00893 _fixed_size(0),
00894 _num_items(0),
00895 _enc(
ID3TE_NONE)
00896 {
00897 this->Clear();
00898 }
00899
00900 ID3_FieldImpl::ID3_FieldImpl(
const ID3_FieldDef& def)
00901 : _id(def._id),
00902 _type(def._type),
00903 _spec_begin(def._spec_begin),
00904 _spec_end(def._spec_end),
00905 _flags(def._flags),
00906 _changed(false),
00907 _fixed_size(def._fixed_size),
00908 _num_items(0),
00909 _enc((_type ==
ID3FTY_TEXTSTRING) ?
ID3TE_ASCII :
ID3TE_NONE)
00910 {
00911 this->Clear();
00912 }
00913
00914 ID3_FieldImpl::~ID3_FieldImpl()
00915 {
00916 }
00917
00923 void ID3_FieldImpl::Clear()
00924 {
00925
switch (_type)
00926 {
00927
case ID3FTY_INTEGER:
00928 {
00929 _integer = 0;
00930
break;
00931 }
00932
case ID3FTY_BINARY:
00933 {
00934 _binary.erase();
00935
if (_fixed_size > 0)
00936 {
00937 _binary.assign(_fixed_size,
'\0');
00938 }
00939
break;
00940 }
00941
case ID3FTY_TEXTSTRING:
00942 {
00943 _text.erase();
00944
if (_fixed_size > 0)
00945 {
00946
if (this->
GetEncoding() ==
ID3TE_UNICODE)
00947 {
00948 _text.assign(_fixed_size * 2,
'\0');
00949 }
00950
else if (this->
GetEncoding() ==
ID3TE_ASCII)
00951 {
00952 _text.assign(_fixed_size,
'\0');
00953 }
00954 }
00955
break;
00956 }
00957
default:
00958 {
00959
break;
00960 }
00961 }
00962 _changed =
true;
00963
00964
return ;
00965 }
00966
00967
bool
00968 ID3_FieldImpl::HasChanged()
const
00969
{
00970
return _changed;
00971 }
00972
00992 size_t
ID3_FieldImpl::BinSize()
const
00993
{
00994
if (_fixed_size > 0)
00995 {
00996
return _fixed_size;
00997 }
00998 size_t size = this->
Size();
00999
if (_type ==
ID3FTY_TEXTSTRING)
01000 {
01001
ID3_TextEnc enc = this->
GetEncoding();
01002
if (enc ==
ID3TE_UNICODE && size > 0)
01003 {
01004 size++;
01005 }
01006
if (_flags &
ID3FF_CSTR)
01007 {
01008 size++;
01009 }
01010
if (enc ==
ID3TE_UNICODE)
01011 {
01012 size *= 2;
01013 }
01014 }
01015
return size;
01016 }
01017
01018 size_t
ID3_FieldImpl::Size()
const
01019
{
01020 size_t size = 0;
01021
01022
01023
if (_fixed_size > 0)
01024 {
01025 size = _fixed_size;
01026 }
01027
else if (_type ==
ID3FTY_INTEGER)
01028 {
01029 size =
sizeof(uint32);
01030 }
01031
else if (_type ==
ID3FTY_TEXTSTRING)
01032 {
01033 size = _text.size();
01034 }
01035
else
01036 {
01037 size = _binary.size();
01038 }
01039
01040
return size;
01041 }
01042
01043 bool ID3_FieldImpl::Parse(
ID3_Reader& reader)
01044 {
01045
bool success =
false;
01046
switch (this->
GetType())
01047 {
01048
case ID3FTY_INTEGER:
01049 {
01050 success = this->
ParseInteger(reader);
01051
break;
01052 }
01053
01054
case ID3FTY_BINARY:
01055 {
01056 success = this->
ParseBinary(reader);
01057
break;
01058 }
01059
01060
case ID3FTY_TEXTSTRING:
01061 {
01062 success = this->
ParseText(reader);
01063
break;
01064 }
01065
01066
default:
01067 {
01068 ID3D_WARNING(
"ID3_FieldImpl::Parse(): unknown field type" );
01069
break;
01070 }
01071 }
01072
return success;
01073 }
01074
01075 ID3_FrameDef*
ID3_FindFrameDef(ID3_FrameID
id)
01076 {
01077
ID3_FrameDef *info =
NULL;
01078
01079
for (size_t cur = 0; ID3_FrameDefs[cur].
eID !=
ID3FID_NOFRAME; ++cur)
01080 {
01081
if (ID3_FrameDefs[cur].
eID ==
id)
01082 {
01083 info = &ID3_FrameDefs[cur];
01084
break;
01085 }
01086 }
01087
01088
return info;
01089 }
01090
01091
ID3_FrameID
01092 ID3_FindFrameID(
const char *
id)
01093 {
01094
ID3_FrameID fid =
ID3FID_NOFRAME;
01095
const int slen = strlen(
id);
01096
01097
for (size_t cur = 0; ID3_FrameDefs[cur].
eID !=
ID3FID_NOFRAME; ++cur)
01098 {
01099
if (((strcmp(ID3_FrameDefs[cur].sShortTextID,
id) == 0) &&
01100 slen == 3) ||
01101 ((strcmp(ID3_FrameDefs[cur].sLongTextID,
id) == 0) &&
01102 slen == 4))
01103 {
01104 fid = ID3_FrameDefs[cur].
eID;
01105
break;
01106 }
01107 }
01108
01109
return fid;
01110 }
01111
01112 void ID3_FieldImpl::Render(
ID3_Writer& writer)
const
01113
{
01114
switch (this->
GetType())
01115 {
01116
case ID3FTY_INTEGER:
01117 {
01118
RenderInteger(writer);
01119
break;
01120 }
01121
01122
case ID3FTY_BINARY:
01123 {
01124
RenderBinary(writer);
01125
break;
01126 }
01127
01128
case ID3FTY_TEXTSTRING:
01129 {
01130
RenderText(writer);
01131
break;
01132 }
01133
01134
default:
01135 {
01136 ID3D_WARNING (
"ID3D_FieldImpl::Render(): unknown field type" );
01137
break;
01138 }
01139 }
01140 }
01141
01142
ID3_Field &
01143 ID3_FieldImpl::operator=(
const ID3_Field &rhs )
01144 {
01145
const ID3_FieldImpl* fld = (
const ID3_FieldImpl*) &rhs;
01146
if (
this != &rhs && this->
GetType() == fld->
GetType())
01147 {
01148
switch (fld->
GetType())
01149 {
01150
case ID3FTY_INTEGER:
01151 {
01152 this->
SetInteger(fld->
GetInteger());
01153
break;
01154 }
01155
case ID3FTY_TEXTSTRING:
01156 {
01157 this->
SetEncoding(fld->
GetEncoding());
01158 this->
SetText(fld->
GetText());
01159
break;
01160 }
01161
case ID3FTY_BINARY:
01162 {
01163 this->
SetBinary(fld->
GetBinary());
01164
break;
01165 }
01166
default:
01167 {
01168
break;
01169 }
01170 }
01171 }
01172
return *
this;
01173 }
01174
01175 bool ID3_FieldImpl::SetEncoding(ID3_TextEnc enc)
01176 {
01177
bool changed = this->
IsEncodable() && (enc != this->
GetEncoding()) &&
01178 (
ID3TE_NONE < enc && enc <
ID3TE_NUMENCODINGS);
01179
if (changed)
01180 {
01181 _text = convert(_text, _enc, enc);
01182 _enc = enc;
01183 _changed =
true;
01184 }
01185
return changed;
01186 }
01187
01242 char *
ID3_FrameInfo::ShortName(ID3_FrameID frameID)
01243 {
01244
ID3_FrameDef *pFD =
ID3_FindFrameDef(frameID);
01245
if (pFD!=
NULL)
01246
return pFD->
sShortTextID;
01247
else
01248
return NULL;
01249 }
01250
01251 char *
ID3_FrameInfo::LongName(ID3_FrameID frameID)
01252 {
01253
ID3_FrameDef *pFD =
ID3_FindFrameDef(frameID);
01254
if (pFD!=
NULL)
01255
return pFD->
sLongTextID;
01256
else
01257
return NULL;
01258 }
01259
01260 const char *
ID3_FrameInfo::Description(ID3_FrameID frameID)
01261 {
01262
ID3_FrameDef *pFD =
ID3_FindFrameDef(frameID);
01263
if (pFD!=
NULL)
01264
return pFD->
sDescription;
01265
else
01266
return NULL;
01267 }
01268
01269 int ID3_FrameInfo::MaxFrameID()
01270 {
01271
return ID3FID_LASTFRAMEID-1;
01272 }
01273
01274 int ID3_FrameInfo::NumFields(ID3_FrameID frameID)
01275 {
01276
int fieldnum=0;
01277
ID3_FrameDef *pFD =
ID3_FindFrameDef(frameID);
01278
if (pFD!=
NULL)
01279 {
01280
while (pFD->
aeFieldDefs[fieldnum].
_id !=
ID3FN_NOFIELD)
01281 {
01282 ++fieldnum;
01283 }
01284 }
01285
return fieldnum;
01286 }
01287
01288 ID3_FieldType ID3_FrameInfo::FieldType(ID3_FrameID frameID,
int fieldnum)
01289 {
01290
ID3_FrameDef *pFD =
ID3_FindFrameDef(frameID);
01291
if (pFD!=
NULL)
01292
return (pFD->
aeFieldDefs[fieldnum].
_type);
01293
else
01294
return ID3FTY_NONE;
01295 }
01296
01297 size_t
ID3_FrameInfo::FieldSize(ID3_FrameID frameID,
int fieldnum)
01298 {
01299
ID3_FrameDef *pFD =
ID3_FindFrameDef(frameID);
01300
if (pFD!=
NULL)
01301
return (pFD->
aeFieldDefs[fieldnum].
_fixed_size);
01302
else
01303
return 0;
01304 }
01305
01306 flags_t ID3_FrameInfo::FieldFlags(ID3_FrameID frameID,
int fieldnum)
01307 {
01308
ID3_FrameDef *pFD =
ID3_FindFrameDef(frameID);
01309
if (pFD!=
NULL)
01310
return (pFD->
aeFieldDefs[fieldnum].
_flags);
01311
else
01312
return 0;
01313 }
01314
Generated on Thu Jun 3 16:57:08 2004 for id3lib by
1.3.7