forked from KolibriOS/kolibrios
update 'exif.obj': library get more information
git-svn-id: svn://kolibrios.org@4995 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
d7cac76dad
commit
99a74843c7
@ -17,17 +17,18 @@ tag_format_ui1b equ 1 ;unsigned integer 1 byte
|
||||
tag_format_text equ 2 ;ascii string
|
||||
tag_format_ui2b equ 3 ;unsigned integer 2 byte
|
||||
tag_format_ui4b equ 4 ;unsigned integer 4 byte
|
||||
tag_format_ui8b equ 5 ;unsigned integer 8 byte
|
||||
tag_format_urb equ 5 ;unsigned integer 4/4 byte
|
||||
tag_format_si1b equ 6 ;signed integer 1 byte
|
||||
tag_format_undef equ 7 ;undefined
|
||||
tag_format_si2b equ 8 ;signed integer 2 byte
|
||||
tag_format_si4b equ 9 ;signed integer 4 byte
|
||||
tag_format_si8b equ 10 ;signed integer 8 byte
|
||||
tag_format_srb equ 10 ;signed integer 4/4 byte
|
||||
tag_format_f4b equ 11 ;float 4 byte
|
||||
tag_format_f8b equ 12 ;float 8 byte
|
||||
|
||||
align 4
|
||||
txt_dp db ': ',0
|
||||
txt_div db '/',0
|
||||
|
||||
;
|
||||
align 4
|
||||
@ -52,6 +53,36 @@ db 0x87,0x69,'Exif offset',0
|
||||
|
||||
db 0x88,0x25,'GPS Info',0
|
||||
|
||||
db 0xa4,0x01,'Custom rendered',0
|
||||
db 0xa4,0x02,'Exposure mode',0
|
||||
db 0xa4,0x03,'White balance',0
|
||||
db 0xa4,0x04,'Digital zoom ratio',0
|
||||
db 0xa4,0x05,'Focal length in 35mm format',0
|
||||
db 0xa4,0x06,'Scene capture type',0
|
||||
db 0xa4,0x07,'Gain control',0
|
||||
db 0xa4,0x08,'Contrast',0
|
||||
db 0xa4,0x09,'Saturation',0
|
||||
db 0xa4,0x0a,'Sharpness',0
|
||||
db 0xa4,0x0b,'Device setting description',0
|
||||
db 0xa4,0x0c,'Subject distance range',0
|
||||
db 0xa4,0x20,'Image unique ID',0
|
||||
db 0xa4,0x30,'Owner name',0
|
||||
db 0xa4,0x31,'Serial number',0
|
||||
db 0xa4,0x32,'Lens info',0
|
||||
db 0xa4,0x33,'Lens make',0
|
||||
db 0xa4,0x34,'Lens model',0
|
||||
db 0xa4,0x35,'Lens serial number',0
|
||||
db 0xa4,0x80,'GDAL metadata',0
|
||||
db 0xa4,0x81,'GDAL no data',0
|
||||
db 0xa5,0x00,'Gamma',0
|
||||
db 0xaf,0xc0,'Expand software',0
|
||||
db 0xaf,0xc1,'Expand lens',0
|
||||
db 0xaf,0xc2,'Expand film',0
|
||||
db 0xaf,0xc3,'Expand filterLens',0
|
||||
db 0xaf,0xc4,'Expand scanner',0
|
||||
db 0xaf,0xc5,'Expand flash lamp',0
|
||||
|
||||
db 0xea,0x1c,'Padding',0
|
||||
dw 0
|
||||
|
||||
|
||||
@ -158,6 +189,12 @@ pushad
|
||||
add esi,2
|
||||
stdcall str_n_cat,edi,esi,[t_max]
|
||||
|
||||
jmp @f
|
||||
.tag_unknown:
|
||||
mov dword[edi],'???'
|
||||
mov byte[edi+3],0
|
||||
@@:
|
||||
|
||||
;ç¨â ¥¬ ¨ä®à¬ æ¨î ¢ ⥣¥
|
||||
mov bx,tag_format_text
|
||||
bt edx,0
|
||||
@ -167,14 +204,7 @@ pushad
|
||||
cmp word[eax+2],bx
|
||||
jne .tag_02
|
||||
stdcall str_n_cat,edi,txt_dp,[t_max]
|
||||
;¯à®¢¥à塞 ¤«¨ã áâப¨
|
||||
mov ebx,dword[eax+4]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
ror ebx,16
|
||||
ror bx,8
|
||||
@@:
|
||||
call get_tag_data_size ;¯à®¢¥à塞 ¤«¨ã áâப¨
|
||||
cmp ebx,4
|
||||
jg @f
|
||||
;¥á«¨ áâப ¯®¬¥é ¥âáï ¢ 4 ᨬ¢®«
|
||||
@ -194,24 +224,129 @@ pushad
|
||||
add esi,offs_m_or_i
|
||||
add esi,[app1]
|
||||
stdcall str_n_cat,edi,esi,[t_max]
|
||||
;;;jmp .end_f
|
||||
jmp .end_f
|
||||
.tag_02:
|
||||
|
||||
mov bx,tag_format_ui2b
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
@@:
|
||||
cmp word[eax+2],bx
|
||||
jne .tag_03
|
||||
stdcall str_n_cat,edi,txt_dp,[t_max]
|
||||
call get_tag_data_size
|
||||
cmp ebx,1
|
||||
jg .over4b_03
|
||||
;¥á«¨ ®¤® 2 ¡ ©â®¢®¥ ç¨á«®
|
||||
movzx ebx,word[eax+8]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
@@:
|
||||
stdcall str_len,edi
|
||||
add edi,eax
|
||||
mov eax,ebx
|
||||
call convert_int_to_str ;[t_max]
|
||||
.over4b_03:
|
||||
;...
|
||||
jmp .end_f
|
||||
.tag_unknown:
|
||||
mov dword[edi],'???'
|
||||
mov byte[edi+3],0
|
||||
.tag_03:
|
||||
|
||||
mov bx,tag_format_ui4b
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
@@:
|
||||
cmp word[eax+2],bx
|
||||
jne .tag_04
|
||||
stdcall str_n_cat,edi,txt_dp,[t_max]
|
||||
call get_tag_data_size
|
||||
cmp ebx,1
|
||||
jg .over4b_04
|
||||
;¥á«¨ ®¤® 4 ¡ ©â®¢®¥ ç¨á«®
|
||||
mov ebx,dword[eax+8]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
ror ebx,16
|
||||
ror bx,8
|
||||
@@:
|
||||
stdcall str_len,edi
|
||||
add edi,eax
|
||||
mov eax,ebx
|
||||
call convert_int_to_str ;[t_max]
|
||||
.over4b_04:
|
||||
;...
|
||||
jmp .end_f
|
||||
.tag_04:
|
||||
|
||||
mov bx,tag_format_urb
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
@@:
|
||||
cmp word[eax+2],bx
|
||||
jne .tag_05
|
||||
stdcall str_n_cat,edi,txt_dp,[t_max]
|
||||
;call get_tag_data_size
|
||||
;cmp ebx,1
|
||||
;jg .over4b_05
|
||||
mov ebx,dword[eax+8]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
ror ebx,16
|
||||
ror bx,8
|
||||
@@:
|
||||
stdcall str_len,edi
|
||||
add edi,eax
|
||||
add ebx,offs_m_or_i
|
||||
add ebx,[app1]
|
||||
mov eax,[ebx]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror ax,8
|
||||
ror eax,16
|
||||
ror ax,8
|
||||
@@:
|
||||
call convert_int_to_str ;áâ ¢¨¬ 1-¥ ç¨á«®
|
||||
stdcall str_n_cat,edi,txt_div,[t_max] ;áâ ¢¨¬ § ª ¤¥«¥¨ï
|
||||
stdcall str_len,edi
|
||||
add edi,eax
|
||||
mov eax,[ebx+4]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror ax,8
|
||||
ror eax,16
|
||||
ror ax,8
|
||||
@@:
|
||||
call convert_int_to_str ;áâ ¢¨¬ 2-¥ ç¨á«®
|
||||
;.over4b_05:
|
||||
;...
|
||||
;jmp .end_f
|
||||
.tag_05:
|
||||
|
||||
.end_f:
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
|
||||
;input:
|
||||
; eax - tag pointer
|
||||
; edx - 1 if 'MM', 0 if 'II'
|
||||
;output:
|
||||
; ebx - data size
|
||||
align 4
|
||||
proc exif_get_image_160_120 uses edi, app1:dword
|
||||
mov edi,[app1]
|
||||
|
||||
get_tag_data_size:
|
||||
mov ebx,dword[eax+4]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
ror ebx,16
|
||||
ror bx,8
|
||||
@@:
|
||||
ret
|
||||
endp
|
||||
|
||||
align 4
|
||||
proc str_n_cat uses eax ecx edi esi, str1:dword, str2:dword, n:dword
|
||||
@ -241,13 +376,42 @@ proc str_len, str1:dword
|
||||
ret
|
||||
endp
|
||||
|
||||
;input:
|
||||
; eax = value
|
||||
; edi = string buffer
|
||||
;output:
|
||||
align 4
|
||||
convert_int_to_str:
|
||||
pushad
|
||||
mov dword[edi+1],0
|
||||
mov dword[edi+5],0
|
||||
call .str
|
||||
popad
|
||||
ret
|
||||
|
||||
align 4
|
||||
.str:
|
||||
mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬ áç¨á«¥¨ï ¨§¬¥ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤ë¥ ¯ à ¬¥âàë eax - ç¨á«®
|
||||
;¯à¥à¥¢®¤ ç¨á« ¢ ASCII áâப㠢§®¤ë¥ ¤ ë¥ ecx=á¨á⥬ áç¨á«¥ï edi ¤à¥á ªã¤ § ¯¨áë¢ âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®¥æ ¯¥à¥¬¥®©
|
||||
cmp eax,ecx ;áà ¢¨âì ¥á«¨ ¢ eax ¬¥ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ @@-1 â.¥. pop eax
|
||||
jb @f
|
||||
xor edx,edx ;®ç¨áâ¨âì edx
|
||||
div ecx ;à §¤¥«¨âì - ®áâ ⮪ ¢ edx
|
||||
push edx ;¯®«®¦¨âì ¢ á⥪
|
||||
;dec edi ;ᬥ饨¥ ¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®æ áâப¨
|
||||
call .str ;¯¥à¥©â¨ á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥â ¯®ª ¢ eax ¥ á⠥⠬¥ìè¥ ç¥¬ ¢ ecx
|
||||
pop eax
|
||||
@@: ;cmp al,10 ;¯à®¢¥à¨âì ¥ ¬¥ìè¥ «¨ § 票¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥ï 10 ¤ ï ª®¬ ¤ - «¨è ï))
|
||||
or al,0x30 ;¤ ï ª®¬ ¤ ª®à®ç¥ 祬 ¤¢¥ ¢ëè¥
|
||||
stosb ;§ ¯¨á âì í«¥¬¥â ¨§ ॣ¨áâà al ¢ ï祪㠯 ¬ï⨠es:edi
|
||||
ret ;¢¥àãâìáï ç¥ì ¨â¥à¥áë© å®¤ â.ª. ¯®ª ¢ á⥪¥ åà ¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
|
||||
|
||||
|
||||
|
||||
align 16
|
||||
EXPORTS:
|
||||
dd sz_exif_get_app1, exif_get_app1
|
||||
dd sz_exif_get_app1_tag, exif_get_app1_tag
|
||||
;dd sz_exif_get_image_160_120, exif_get_image_160_120
|
||||
dd 0,0
|
||||
sz_exif_get_app1 db 'exif_get_app1',0
|
||||
sz_exif_get_app1_tag db 'exif_get_app1_tag',0
|
||||
;sz_exif_get_image_160_120 db 'exif_get_image_160_120',0
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user