From: Robert M. <mar...@us...> - 2003-02-24 07:09:47
|
Update of /cvsroot/jvcl/jvcl/source In directory sc8-pr-cvs1:/tmp/cvs-serv5691/source Modified Files: JvId3v2.pas JvId3v2Types.pas Log Message: removed assembler, cleaned Index: JvId3v2.pas =================================================================== RCS file: /cvsroot/jvcl/jvcl/source/JvId3v2.pas,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** JvId3v2.pas 23 Feb 2003 21:52:59 -0000 1.5 --- JvId3v2.pas 24 Feb 2003 07:09:44 -0000 1.6 *************** *** 69,72 **** --- 69,76 ---- JvId3v2Types, JvComponent; + const + cJvID3LowIndex = $00; + cJvID3HighIndex = $14; + type TJvID3FileType = *************** *** 246,250 **** TJvIdPictures = class(TPersistent) private ! FPictures: array[$00..$14] of TPicture; function GetPicture(const Index: Integer): TPicture; procedure DummyProcedure(const Index: Integer; const Value: TPicture); --- 250,254 ---- TJvIdPictures = class(TPersistent) private ! FPictures: array [cJvID3LowIndex..cJvID3HighIndex] of TPicture; function GetPicture(const Index: Integer): TPicture; procedure DummyProcedure(const Index: Integer; const Value: TPicture); *************** *** 253,257 **** destructor Destroy; override; published ! { TODO : Setters necessairy ?? } property Other: TPicture index $00 read GetPicture write DummyProcedure stored False; property FileIcon: TPicture index $01 read GetPicture write DummyProcedure stored False; --- 257,261 ---- destructor Destroy; override; published ! { TODO : Setters necessary ?? } property Other: TPicture index $00 read GetPicture write DummyProcedure stored False; property FileIcon: TPicture index $01 read GetPicture write DummyProcedure stored False; *************** *** 279,283 **** TJvIdPicturesDesc = class(TPersistent) private ! FStrings: array[$00..$14] of string; function GetDescription(const Index: Integer): string; procedure DummyProcedure(const Index: Integer; const Value: string); --- 283,287 ---- TJvIdPicturesDesc = class(TPersistent) private ! FStrings: array [cJvID3LowIndex..cJvID3HighIndex] of string; function GetDescription(const Index: Integer): string; procedure DummyProcedure(const Index: Integer; const Value: string); *************** *** 391,395 **** procedure StartFrame(const AFrameSize: Integer); procedure EndFrame; - function ReadDate(var ADate: TDateTime): Longint; function ReadLanguage(var Language: string): Longint; --- 395,398 ---- *************** *** 400,407 **** function ReadUserWideString(var SW1, SW2: WideString): Longint; function ReadIsWideString: Boolean; - procedure ReadFromStream(AStream: TStream; const ASize: Integer); function WriteBinaryDataToFile(const AFileName: string): Boolean; - property BytesToRead: Longint read GetBytesToRead; end; --- 403,408 ---- *************** *** 409,413 **** TJvID3v2 = class(TJvComponent) private ! FEvents: array[0..1000] of TJvID3Events; FEventsCount: Integer; FEventsTiming: Integer; --- 410,414 ---- TJvID3v2 = class(TJvComponent) private ! FEvents: array [0..1000] of TJvID3Events; FEventsCount: Integer; FEventsTiming: Integer; *************** *** 433,437 **** FCurrentFrame: TID3v2Frame; FCurrentFrameID: TJvID3FrameID; - // unuseful variables FDummyB: Boolean; --- 434,437 ---- *************** *** 443,447 **** protected procedure ReadAndUnsynchro(Source, Dest: TStream; BytesToRead: Integer); - procedure ReadText; procedure ReadWeb; --- 443,446 ---- *************** *** 456,471 **** procedure ReadTermsOfUse; procedure ReadGeneralObject; - { (rb) this must be a function, not a method } ! function Iso639ToName(Code: string): string; public ! MusicCDIdentifier: array[0..803] of Byte; MusicCDIdentifierLength: Integer; constructor Create(AOwner: TComponent); override; destructor Destroy; override; - procedure LoadFromStream(Stream: TStream); procedure LoadFromFile(FileName: string); - procedure CheckEvent(CurrentTime: Integer); published --- 455,468 ---- procedure ReadTermsOfUse; procedure ReadGeneralObject; { (rb) this must be a function, not a method } ! // (rom) class function as compromise ! class function Iso639ToName(Code: string): string; public ! MusicCDIdentifier: array [0..803] of Byte; MusicCDIdentifierLength: Integer; constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure LoadFromStream(Stream: TStream); procedure LoadFromFile(FileName: string); procedure CheckEvent(CurrentTime: Integer); published *************** *** 496,499 **** --- 493,541 ---- JclUnicode, JclFileUtils; + // (rom) avoid assembler if possible + + procedure ConvertHeaderSize(var P: Cardinal); + { Byte1 Byte2 Byte3 Byte4 + Pre : P = Xabcdefg-Xhijklmn-Xopqrstu-XvwxyzAB X = don't care; + Post: P = 0000vwxy-zABopqrs-tuhijklm-nabcdefg a..z,A,B = bits } + var + D: Cardinal; + begin + D := 0; + D := D or (P and $7F); + P := P shr 8; + D := D shl 7; + D := D or (P and $7F); + P := P shr 8; + D := D shl 7; + D := D or (P and $7F); + P := P shr 8; + D := D shl 7; + D := D or (P and $7F); + P := D; + end; + + procedure ConvertID3Cardinal(var P: Cardinal); + { Byte1 Byte2 Byte3 Byte4 + Pre : P = Xabcdefg-Xhijklmn-Xopqrstu-XvwxyzAB X = don't care; + Post: P = 0000vwxy-zABopqrs-tuhijklm-nabcdefg a..z,A,B = bits } + var + D: Cardinal; + begin + D := 0; + D := D or (P and $FF); + P := P shr 8; + D := D shl 8; + D := D or (P and $FF); + P := P shr 8; + D := D shl 8; + D := D or (P and $FF); + P := P shr 8; + D := D shl 8; + D := D or (P and $FF); + P := D; + end; + + (* procedure ConvertHeaderSize(var P); { Byte1 Byte2 Byte3 Byte4 *************** *** 501,533 **** Post: P = 0000vwxy-zABopqrs-tuhijklm-nabcdefg a..z,A,B = bits } asm ! MOV EDX, DWORD PTR [P] ; ! XOR ECX, ECX ; ! OR CL, DL ; ! SHL ECX, 7 ; ! OR CL, DH ; ! SHL ECX, 7 ; ! SHR EDX, 16 ; ! OR CL, DL ; ! SHL ECX, 7 ; ! OR CL, DH ; ! MOV DWORD PTR [P],ECX ; end; ! procedure ConvertID3Integer(var P); { Pre : P = B1-B2-B3-B4 B1,B2,B3,B4 = bytes Post: P = B4-B3-B2-B1 } asm ! MOV EDX, DWORD PTR [P] ; ! MOV CL, DL ; ! SHL ECX, 8 ; ! MOV CL, DH ; ! SHL ECX, 8 ; ! SHR EDX, 16 ; ! MOV CL, DL ; ! SHL ECX, 8 ; ! MOV CL, DH ; ! MOV DWORD PTR [P],ECX ; end; function ExtractStrings(Source: string; Strings: TStrings): Integer; --- 543,576 ---- Post: P = 0000vwxy-zABopqrs-tuhijklm-nabcdefg a..z,A,B = bits } asm ! MOV EDX, DWORD PTR [P] ! XOR ECX, ECX ! OR CL, DL ! SHL ECX, 7 ! OR CL, DH ! SHL ECX, 7 ! SHR EDX, 16 ! OR CL, DL ! SHL ECX, 7 ! OR CL, DH ! MOV DWORD PTR [P],ECX end; ! procedure ConvertID3Cardinal(var P); { Pre : P = B1-B2-B3-B4 B1,B2,B3,B4 = bytes Post: P = B4-B3-B2-B1 } asm ! MOV EDX, DWORD PTR [P] ! MOV CL, DL ! SHL ECX, 8 ! MOV CL, DH ! SHL ECX, 8 ! SHR EDX, 16 ! MOV CL, DL ! SHL ECX, 8 ! MOV CL, DH ! MOV DWORD PTR [P],ECX end; + *) function ExtractStrings(Source: string; Strings: TStrings): Integer; *************** *** 570,574 **** if not FInFrame then raise Exception.Create('Not reading frame'); - MoveToNextFrame; FInFrame := False; --- 613,616 ---- *************** *** 577,587 **** function TJvID3Stream.GetBytesToRead: Longint; begin ! if not FInFrame then ! begin Result := 0; - Exit; - end; - - Result := FEndMarker - PChar(Memory) - Position; end; --- 619,626 ---- function TJvID3Stream.GetBytesToRead: Longint; begin ! if FInFrame then ! Result := FEndMarker - PChar(Memory) - Position ! else Result := 0; end; *************** *** 647,651 **** begin Result := Read(AValue, 4); ! ConvertID3Integer(AValue); end else --- 686,690 ---- begin Result := Read(AValue, 4); ! ConvertID3Cardinal(AValue); end else *************** *** 785,795 **** if FInFrame then raise Exception.Create('Already reading frame'); - FEndMarker := PChar(Memory) + Position + AFrameSize; FInFrame := True; end; ! function TJvID3Stream.WriteBinaryDataToFile( ! const AFileName: string): Boolean; var FileStream: TFileStream; --- 824,832 ---- if FInFrame then raise Exception.Create('Already reading frame'); FEndMarker := PChar(Memory) + Position + AFrameSize; FInFrame := True; end; ! function TJvID3Stream.WriteBinaryDataToFile(const AFileName: string): Boolean; var FileStream: TFileStream; *************** *** 798,802 **** if not Result then Exit; - FileStream := TFileStream.Create(AFileName, fmCreate); try --- 835,838 ---- *************** *** 874,878 **** const ! cShortToLongNameTable: array[1..427] of TShortToLongName = ( (S: 'aar'; L: 'Afar'), --- 910,914 ---- const ! cShortToLongNameTable: array [1..427] of TShortToLongName = ( (S: 'aar'; L: 'Afar'), *************** *** 1305,1309 **** ); ! function TJvID3v2.Iso639ToName(Code: string): string; var I: Integer; --- 1341,1345 ---- ); ! class function TJvID3v2.Iso639ToName(Code: string): string; var I: Integer; *************** *** 1365,1369 **** including padding, excluding the header but not excluding the extended header } - FTagSize := Header.Size; --- 1401,1404 ---- *************** *** 1397,1404 **** begin FFrameStream.Read(FCurrentFrame, 10); ! ConvertID3Integer(FCurrentFrame.Size); { Not implemented: Flags } - FCurrentFrameID := ID3_TextToFrameID(FCurrentFrame.ID); --- 1432,1438 ---- begin FFrameStream.Read(FCurrentFrame, 10); ! ConvertID3Cardinal(FCurrentFrame.Size); { Not implemented: Flags } FCurrentFrameID := ID3_TextToFrameID(FCurrentFrame.ID); *************** *** 1413,1428 **** fiNetRadioStation, fiNetRadioOwner, fiSize, fiISRC, fiEncoderSettings, fiUserText, fiYear: - ReadText; - fiWWWCommercialInfo, fiWWWCopyright, fiWWWAudioFile, fiWWWArtist, fiWWWAudioSource, fiWWWRadioPage, fiWWWPayment, fiWWWPublisher, fiWWWUser: - ReadWeb; - fiInvolvedPeople: - ReadInvolvedPeople; - fiComment: { This frame is indended for any kind of full text information that --- 1447,1456 ---- *************** *** 1433,1439 **** comment frame in each tag, but only one with the same language and content descriptor. } - ReadComment; - fiCDID: { This frame is intended for music that comes from a CD, so that the CD --- 1461,1465 ---- *************** *** 1485,1489 **** BytesRead: Integer; SourcePtr, DestPtr: Integer; ! SourceBuf, DestBuf: array[0..CBufferSize - 1] of Byte; begin { Replace $FF 00 with $FF } --- 1511,1515 ---- BytesRead: Integer; SourcePtr, DestPtr: Integer; ! SourceBuf, DestBuf: array [0..CBufferSize - 1] of Byte; begin { Replace $FF 00 with $FF } *************** *** 1603,1607 **** The actual text <text string according to encoding> } - with FFrameStream do begin --- 1629,1632 ---- *************** *** 1656,1660 **** is inserted in front of the counter thus making the counter eight bits bigger. The counter must be at least 32-bits long to begin with. } - FFrameStream.ReadNumber(FPlayCounter); end; --- 1681,1684 ---- *************** *** 1674,1702 **** begin FFrameStream.Read(TypeOfEvent, 1); ! case TypeOfEvent of ! $00: FEvents[FEventsCount].EventType := etPADDING; ! $01: FEvents[FEventsCount].EventType := etEND_OF_INITIAL_SILENCE; ! $02: FEvents[FEventsCount].EventType := etINTRO_START; ! $03: FEvents[FEventsCount].EventType := etMAINPART_START; ! $04: FEvents[FEventsCount].EventType := etOUTRO_START; ! $05: FEvents[FEventsCount].EventType := etOUTRO_END; ! $06: FEvents[FEventsCount].EventType := etVERSE_START; ! $07: FEvents[FEventsCount].EventType := etREFRAIN_START; ! $08: FEvents[FEventsCount].EventType := etINTERLUDE_START; ! $09: FEvents[FEventsCount].EventType := etTHEME_START; ! $0A: FEvents[FEventsCount].EventType := etVARIATION_START; ! $0B: FEvents[FEventsCount].EventType := etKEY_CHANGE; ! $0C: FEvents[FEventsCount].EventType := eTTime_CHANGE; ! $0D: FEvents[FEventsCount].EventType := etUNWANTED_NOISE; ! $0E: FEvents[FEventsCount].EventType := etSUSTAINED_NOISE; ! $0F: FEvents[FEventsCount].EventType := etSUSTAINED_NOISE_END; ! $10: FEvents[FEventsCount].EventType := etINTRO_END; ! $11: FEvents[FEventsCount].EventType := etMAINPART_END; ! $12: FEvents[FEventsCount].EventType := etVERSE_END; ! $13: FEvents[FEventsCount].EventType := etREFRAIN_END; ! $14: FEvents[FEventsCount].EventType := etTHEME_END; ! $FD: FEvents[FEventsCount].EventType := etAUDIO_END; ! $FE: FEvents[FEventsCount].EventType := etFILE_END; ! end; FFrameStream.ReadNumber(TimeStamp); --- 1698,1750 ---- begin FFrameStream.Read(TypeOfEvent, 1); ! with FEvents[FEventsCount] do ! case TypeOfEvent of ! $00: ! EventType := etPADDING; ! $01: ! EventType := etEND_OF_INITIAL_SILENCE; ! $02: ! EventType := etINTRO_START; ! $03: ! EventType := etMAINPART_START; ! $04: ! EventType := etOUTRO_START; ! $05: ! EventType := etOUTRO_END; ! $06: ! EventType := etVERSE_START; ! $07: ! EventType := etREFRAIN_START; ! $08: ! EventType := etINTERLUDE_START; ! $09: ! EventType := etTHEME_START; ! $0A: ! EventType := etVARIATION_START; ! $0B: ! EventType := etKEY_CHANGE; ! $0C: ! EventType := eTTime_CHANGE; ! $0D: ! EventType := etUNWANTED_NOISE; ! $0E: ! EventType := etSUSTAINED_NOISE; ! $0F: ! EventType := etSUSTAINED_NOISE_END; ! $10: ! EventType := etINTRO_END; ! $11: ! EventType := etMAINPART_END; ! $12: ! EventType := etVERSE_END; ! $13: ! EventType := etREFRAIN_END; ! $14: ! EventType := etTHEME_END; ! $FD: ! EventType := etAUDIO_END; ! $FE: ! EventType := etFILE_END; ! end; FFrameStream.ReadNumber(TimeStamp); *************** *** 1736,1740 **** Picture data <binary data> } - with FFrameStream do begin --- 1784,1787 ---- *************** *** 1916,1920 **** ReadNumber(Counter); ! ConvertID3Integer(Counter); FPopularimeter.Counter := Counter; end; --- 1963,1967 ---- ReadNumber(Counter); ! ConvertID3Cardinal(Counter); FPopularimeter.Counter := Counter; end; *************** *** 2713,2717 **** begin inherited Create; ! for Index := $00 to $14 do FPictures[Index] := TPicture.Create; end; --- 2760,2764 ---- begin inherited Create; ! for Index := Low(FPictures) to High(FPictures) do FPictures[Index] := TPicture.Create; end; *************** *** 2721,2725 **** Index: Byte; begin ! for Index := $00 to $14 do FPictures[Index].Free; inherited Destroy; --- 2768,2772 ---- Index: Byte; begin ! for Index := Low(FPictures) to High(FPictures) do FPictures[Index].Free; inherited Destroy; *************** *** 2757,2761 **** Index: Integer; begin ! for Index := $00 to $14 do begin FPictures.GetPicture(Index).Assign(nil); --- 2804,2808 ---- Index: Integer; begin ! for Index := cJvID3LowIndex to cJvID3HighIndex do begin FPictures.GetPicture(Index).Assign(nil); *************** *** 2817,2820 **** --- 2864,2869 ---- FDatePurchased := EncodeDate(1900, 1, 1); end; + + //=== TJvID3Popularimeter ==================================================== procedure TJvID3Popularimeter.ResetFields; Index: JvId3v2Types.pas =================================================================== RCS file: /cvsroot/jvcl/jvcl/source/JvId3v2Types.pas,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** JvId3v2Types.pas 23 Feb 2003 21:17:04 -0000 1.4 --- JvId3v2Types.pas 24 Feb 2003 07:09:44 -0000 1.5 *************** *** 66,70 **** TId3v2Frame = packed record Id: array [0..3] of Char; ! Size: Integer; Flags: Word; end; --- 66,71 ---- TId3v2Frame = packed record Id: array [0..3] of Char; ! // (rom) changed to Cardinal sizes are usually unsigned ! Size: Cardinal; Flags: Word; end; *************** *** 181,185 **** TJvID3TermFinder = class private ! FLists: array[TJvListType] of TStringList; protected procedure BuildList_ID3LongText; --- 182,186 ---- TJvID3TermFinder = class private ! FLists: array [TJvListType] of TStringList; protected procedure BuildList_ID3LongText; *************** *** 188,194 **** constructor Create; virtual; destructor Destroy; override; - class function Instance: TJvID3TermFinder; - function ID3LongTextToFrameID(const S: string): TJvID3FrameID; function ID3ShortTextToFrameID(const S: string): TJvID3FrameID; --- 189,193 ---- *************** *** 203,207 **** if L = 3 then Result := ID3ShortTextToFrameID(S) ! else if L = 4 then Result := ID3LongTextToFrameID(S) else --- 202,207 ---- if L = 3 then Result := ID3ShortTextToFrameID(S) ! else ! if L = 4 then Result := ID3LongTextToFrameID(S) else *************** *** 211,220 **** type TJvID3FrameDef = packed record ! ShortTextID: array[0..2] of Char; ! LongTextID: array[0..3] of Char; end; const ! CID3FrameDefs: array[TJvID3FrameID] of TJvID3FrameDef = ( { Ver. 2 3 4 } (ShortTextID: ''; LongTextID: ''), { fiNoFrame - - - } (ShortTextID: 'CRA'; LongTextID: 'AENC'), { fiAudioCrypto X X X } --- 211,220 ---- type TJvID3FrameDef = packed record ! ShortTextID: array [0..2] of Char; ! LongTextID: array [0..3] of Char; end; const ! CID3FrameDefs: array [TJvID3FrameID] of TJvID3FrameDef = ( { Ver. 2 3 4 } (ShortTextID: ''; LongTextID: ''), { fiNoFrame - - - } (ShortTextID: 'CRA'; LongTextID: 'AENC'), { fiAudioCrypto X X X } *************** *** 316,319 **** --- 316,337 ---- // === TJvID3TermFinder ===================================================== + constructor TJvID3TermFinder.Create; + var + ListType: TJvListType; + begin + inherited Create; + for ListType := Low(TJvListType) to High(TJvListType) do + FLists[ListType] := nil; + end; + + destructor TJvID3TermFinder.Destroy; + var + ListType: TJvListType; + begin + for ListType := Low(TJvListType) to High(TJvListType) do + FLists[ListType].Free; + inherited Destroy; + end; + procedure TJvID3TermFinder.BuildList_ID3LongText; var *************** *** 357,379 **** end; ! constructor TJvID3TermFinder.Create; ! var ! ListType: TJvListType; ! begin ! for ListType := Low(TJvListType) to High(TJvListType) do ! FLists[ListType] := nil; ! end; ! ! destructor TJvID3TermFinder.Destroy; ! var ! ListType: TJvListType; ! begin ! for ListType := Low(TJvListType) to High(TJvListType) do ! FLists[ListType].Free; ! inherited; ! end; ! ! function TJvID3TermFinder.ID3LongTextToFrameID( ! const S: string): TJvID3FrameID; var I: Integer; --- 375,379 ---- end; ! function TJvID3TermFinder.ID3LongTextToFrameID(const S: string): TJvID3FrameID; var I: Integer; *************** *** 388,393 **** end; ! function TJvID3TermFinder.ID3ShortTextToFrameID( ! const S: string): TJvID3FrameID; var I: Integer; --- 388,392 ---- end; ! function TJvID3TermFinder.ID3ShortTextToFrameID(const S: string): TJvID3FrameID; var I: Integer; *************** *** 413,418 **** --- 412,419 ---- initialization + finalization GInstance.Free; + end. |