forked from KolibriOS/kolibrios
update 'exif.obj':
1) add new function exif_get_app2 (found maker from cameras: Nikon, Canon, Panasonic) 2) small fixes git-svn-id: svn://kolibrios.org@5009 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
aca533427d
commit
9adefdc190
@ -16,7 +16,7 @@ include '../../../../develop/libraries/box_lib/trunk/box_lib.mac'
|
||||
include '../../../../dll.inc'
|
||||
|
||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||
caption db '<EFBFBD>à®á¬®âà ¨ä®à¬ 樨 Exif 18.07.14',0 ;¯®¤¯¨áì ®ª
|
||||
caption db 'Źŕ®á¬®âŕ ¨ä®ŕ¬ 樨 Exif 23.07.14',0 ;Ż®¤Ż¨áě ®Ş
|
||||
|
||||
struct FileInfoBlock
|
||||
Function dd ?
|
||||
@ -421,14 +421,10 @@ pushad
|
||||
jne .cycle_0
|
||||
|
||||
;áç¨âë˘ ĽŹ ¤ŽçĽŕ¨Ľ ⼣¨ ¤Ťď 0x8769
|
||||
stdcall [exif_get_app1_child], h_app1,h_child,0x8769
|
||||
stdcall [exif_get_app2], h_app1,h_child
|
||||
cmp dword[h_child],0
|
||||
je .no_found_child
|
||||
;áç¨âë¢ ¥¬ ¤®ç¥à¨¥ ⥣¨ ¤«ï 0xa005
|
||||
stdcall [exif_get_app1_child], h_child,h_child,0xa005
|
||||
cmp dword[h_child],0
|
||||
je .no_found_child
|
||||
|
||||
|
||||
mov eax,1
|
||||
sub ebx,5
|
||||
.cycle_1:
|
||||
@ -652,10 +648,12 @@ import_exif: ;
|
||||
exif_get_app1 dd sz_exif_get_app1
|
||||
exif_get_app1_tag dd sz_exif_get_app1_tag
|
||||
exif_get_app1_child dd sz_exif_get_app1_child
|
||||
exif_get_app2 dd sz_exif_get_app2
|
||||
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_app1_child db 'exif_get_app1_child',0
|
||||
sz_exif_get_app2 db 'exif_get_app2',0
|
||||
;exif_get_image_160_120
|
||||
|
||||
sc system_colors
|
||||
|
@ -54,7 +54,7 @@ table { font-size: 15px; }
|
||||
<li><a href="#f_1">exif_get_app1</a></li>
|
||||
<li><a href="#f_2">exif_get_app1_tag</a></li>
|
||||
<li><a href="#f_3">exif_get_app1_child</a></li>
|
||||
|
||||
<li><a href="#f_4">exif_get_app2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#const">Константы для функции exif_get_app1_child</a></li>
|
||||
@ -66,7 +66,7 @@ table { font-size: 15px; }
|
||||
<p>Документация к свободной библиотеке <b>exif.obj</b>, для <b>ОС Колибри</b>.
|
||||
Эта библиотека создана для просмотра информации находящейся в изображениях в формате Exif. Информация эта создается цифровыми фотокамерами и содержит разные параметры например такие как: название фирмы производителя, модель камеры, и т.д.</p>
|
||||
|
||||
<p>Последнее обновление библиотеки 22.07.14.</p>
|
||||
<p>Последнее обновление библиотеки 23.07.14.</p>
|
||||
|
||||
<h1><a name="fun">Функции</a></h1>
|
||||
|
||||
@ -108,6 +108,15 @@ h_child dd 0,0,0</pre>
|
||||
<p>0x8769 - код тега (находящегося в списке тегов h_app1), который является указателем на список других дочерних тегов.</p>
|
||||
<p>В даном примере функция берет тег 0x8769 и пытается найти его в списке h_app1, если находит то заполняет по нему значения в структуре h_child. Далее к списку h_child можно применять функцию exif_get_app1_tag для взятия значения этих тегов. С помощью этой функции мы как бы переходим внутрь некой "папки" с тегами, которые сразу достать не можем.</p>
|
||||
|
||||
<h4><a name="f_4">exif_get_app2</a></h4>
|
||||
<p>Эта функция ищет начало данных Exif.app2. Если они найдены то заполняется структура app2. Если не найдены, то первый параметр в структуре делается равным 0. Пример:</p>
|
||||
<pre>stdcall [exif_get_app2], h_app1,h_app2
|
||||
...
|
||||
h_app1 dd 0,0,0
|
||||
h_app2 dd 0,0,0</pre>
|
||||
<p>где h_app1 - структура c данными Exif.app1, предварительно заполненная функцией exif_get_app1.</p>
|
||||
<p>h_app2 - структура для запоминания начала данных Exif.app2.</p>
|
||||
|
||||
<h1><a name="const">Константы для функции exif_get_app1_child</a></h1>
|
||||
<p>Здесь приведены некоторые константы, которые могут использоватся как 3-й параметр для функции exif_get_app1_child. Эти константы обозначают специальные теги, которые содержат смещение на дочерние параметры, которые находятся в Exif.</p>
|
||||
<h4>0x8769</h4>
|
||||
@ -122,12 +131,15 @@ import_exif:
|
||||
exif_get_app1 dd sz_exif_get_app1
|
||||
exif_get_app1_tag dd sz_exif_get_app1_tag
|
||||
exif_get_app1_child dd sz_exif_get_app1_child
|
||||
exif_get_app2 dd sz_exif_get_app2
|
||||
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_app1_child db 'exif_get_app1_child',0</pre>
|
||||
sz_exif_get_app1_child db 'exif_get_app1_child',0
|
||||
sz_exif_get_app2 db 'exif_get_app2',0</pre>
|
||||
|
||||
<h1><a name="hist">История</a></h1>
|
||||
<p>15.07.14 - первая версия библиотеки, пример использования.</p>
|
||||
<p>23.07.14 - добавлена функция exif_get_app2.</p>
|
||||
</body>
|
||||
</html>
|
@ -28,6 +28,7 @@ tag_format_f8b equ 12 ;float 8 byte
|
||||
|
||||
align 4
|
||||
txt_dp db ': ',0
|
||||
txt_zap db ', ',0
|
||||
txt_div db '/',0
|
||||
|
||||
;
|
||||
@ -212,6 +213,7 @@ db 0x87,0xac,'Image layer',0
|
||||
db 0x87,0xaf,'Geo tiff directory',0
|
||||
db 0x87,0xb0,'Geo tiff double params',0
|
||||
db 0x87,0xb1,'Geo tiff ascii params',0
|
||||
db 0x88,0x25,'GPS info',0
|
||||
db 0x88,0x28,'Opto-Electric conv factor',0
|
||||
db 0x88,0x29,'Interlace',0
|
||||
db 0x88,0x5c,'Fax recv params',0
|
||||
@ -385,7 +387,6 @@ db 0x82,0x9a,'Exposure time',0
|
||||
db 0x82,0x9d,'F number',0
|
||||
db 0x88,0x22,'Exposure program',0
|
||||
db 0x88,0x24,'Spectral sensitivity',0
|
||||
db 0x88,0x25,'GPS info',0
|
||||
db 0x88,0x27,'ISO',0
|
||||
db 0x88,0x2a,'Time zone offset',0
|
||||
db 0x88,0x2b,'Self timer mode',0
|
||||
@ -681,6 +682,102 @@ popad
|
||||
ret
|
||||
endp
|
||||
|
||||
;output:
|
||||
; app2 - 㪠§ ⥫ì ç «® exif.app2 (¨«¨ 0 ¥á«¨ ¥ ©¤¥® ¨«¨ ä®à¬ â ä ©« ¥ ¯®¤¤¥à¦¨¢ ¥âáï)
|
||||
align 4
|
||||
proc exif_get_app2, app1:dword, app2:dword
|
||||
pushad
|
||||
mov eax,[app1]
|
||||
cmp [eax],edx
|
||||
je .no_suport ;¥á«¨ ¥ ©¤¥ 㪠§ ⥫ì ç «® exif.app1
|
||||
|
||||
mov edi,[app2]
|
||||
movzx edx,word[eax+offs_m_or_i] ;if 'MM' edx=1
|
||||
|
||||
; ç «® ¯®¨áª ¯à®¨§¢®¤¨â¥«ï ª ¬¥àë
|
||||
mov ebx,0x010f
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
@@:
|
||||
|
||||
;¯à®¢¥à塞 ç¨á«® ⥣®¢
|
||||
mov eax,[eax]
|
||||
movzx ecx,word[eax]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror cx,8
|
||||
@@:
|
||||
cmp ecx,1
|
||||
jl .no_suport ;¥á«¨ ç¨á«® ⥣®¢ <1
|
||||
|
||||
;¯¥à¥å®¤¨¬ 1-© ⥣
|
||||
add eax,offs_tag_0
|
||||
@@:
|
||||
cmp word[eax],bx
|
||||
je @f
|
||||
add eax,tag_size
|
||||
loop @b
|
||||
jmp .no_suport ;¥á«¨ ¥ ©¤¥®
|
||||
@@: ;¥á«¨ ©¤¥®
|
||||
mov ebx,dword[eax+4]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
ror ebx,16
|
||||
ror bx,8
|
||||
@@:
|
||||
cmp ebx,4
|
||||
jle .no_suport ; §¢ ¨¥ ¯à®¨§¢®¤¨â¥«ï ¬¥ìè¥ 4 ᨬ¢®«®¢, ¥ ¯®¤¤¥à¦¨ ¢ ¥âáï
|
||||
|
||||
mov ebx,dword[eax+8]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
ror ebx,16
|
||||
ror bx,8
|
||||
@@:
|
||||
|
||||
;¯à®¢¥àª ¯®¤¤¥à¦¨¢ ¥¬ëå ¯à®¨§¢®¤¨â¥«¥©
|
||||
mov eax,[app1]
|
||||
add ebx,[eax+4]
|
||||
cmp dword[ebx],'Cano'
|
||||
je .suport
|
||||
cmp dword[ebx],'NIKO'
|
||||
je .suport
|
||||
cmp dword[ebx],'Pana'
|
||||
je .suport
|
||||
|
||||
;¢á¥ ®áâ «ìë¥ ¥ ¯®¤¤¥à¦¨¢ îâáï
|
||||
jmp .no_suport
|
||||
|
||||
.suport:
|
||||
; 室¨¬ ⥣ 0x8769 (à áè¨à¥ë¥ ¤ ë¥ ¯® Exif)
|
||||
stdcall exif_get_app1_child, eax,edi,0x8769
|
||||
cmp dword[edi],0
|
||||
je .no_suport
|
||||
; 室¨¬ ⥣ 0xa005 (¤ ë¥ Maker ¯® ª ¬¥à¥)
|
||||
stdcall exif_get_app1_child, edi,edi, 0x927c
|
||||
cmp dword[edi],0
|
||||
je .no_suport
|
||||
|
||||
cmp dword[ebx],'NIKO'
|
||||
jne @f
|
||||
add dword[edi],18 ;for Nikon
|
||||
@@:
|
||||
cmp dword[ebx],'Pana'
|
||||
jne @f
|
||||
add dword[edi],12 ;for Panasonic
|
||||
@@:
|
||||
|
||||
jmp @f
|
||||
.no_suport:
|
||||
mov dword[edi],0
|
||||
@@:
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
|
||||
;description:
|
||||
; ¢á¯®¬®£ ⥫ì ï äãªæ¨ï ¤«ï çâ¥¨ï § 票© ⥣®¢
|
||||
;input:
|
||||
@ -732,13 +829,17 @@ proc read_tag_value, app1:dword, t_max:dword
|
||||
add esi,2
|
||||
stdcall str_n_cat,edi,esi,[t_max]
|
||||
|
||||
jmp @f
|
||||
jmp .start_read
|
||||
.tag_unknown:
|
||||
;¥á«¨ ⥣ ¥ ©¤¥ áâ ¢¨¬ ¥£® ª®¤ ¢¬¥áâ® §¢ ¨ï
|
||||
movzx ebx,word[eax]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror bx,8
|
||||
@@:
|
||||
stdcall hex_in_str, edi, ebx,4
|
||||
mov byte[edi+4],0
|
||||
@@:
|
||||
.start_read:
|
||||
|
||||
;ç¨â ¥¬ ¨ä®à¬ æ¨î ¢ ⥣¥
|
||||
mov bx,tag_format_ui1b
|
||||
@ -750,18 +851,34 @@ proc read_tag_value, app1:dword, t_max:dword
|
||||
jne .tag_01
|
||||
stdcall str_n_cat,edi,txt_dp,[t_max]
|
||||
call get_tag_data_size
|
||||
cmp ebx,1
|
||||
cmp ebx,4
|
||||
jg .over4b_01
|
||||
;・皚ィ ョ、ュョ 1 。<>ゥ箘「ョ・ 遞皚ョ
|
||||
cmp ebx,1
|
||||
je @f
|
||||
or edx,2 ;array data
|
||||
mov ecx,dword[eax+8]
|
||||
mov dh,bl
|
||||
@@:
|
||||
;¥á«¨ 1 ®¤® ¡ ©â®¢®¥ ç¨á«®
|
||||
movzx ebx,byte[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]
|
||||
bt edx,1
|
||||
jnc .end_f
|
||||
@@:
|
||||
;¥á«¨ ®â 2 ¤® 4 ®¤® ¡ ©â®¢ëå ç¨á¥«
|
||||
dec dh
|
||||
cmp dh,0
|
||||
je .end_f
|
||||
shr ecx,8
|
||||
stdcall str_n_cat,edi,txt_zap,[t_max]
|
||||
stdcall str_len,edi
|
||||
add edi,eax
|
||||
movzx eax,cl
|
||||
call convert_int_to_str ;[t_max]
|
||||
jmp @b
|
||||
.over4b_01:
|
||||
;...
|
||||
jmp .end_f
|
||||
@ -808,8 +925,16 @@ proc read_tag_value, app1:dword, t_max:dword
|
||||
jne .tag_03
|
||||
stdcall str_n_cat,edi,txt_dp,[t_max]
|
||||
call get_tag_data_size
|
||||
cmp ebx,1
|
||||
cmp ebx,2
|
||||
jg .over4b_03
|
||||
jne @f
|
||||
;¥á«¨ ¤¢ 2 ¡ ©â®¢ëå ç¨á«
|
||||
or edx,2 ;array data
|
||||
movzx ecx,word[eax+10]
|
||||
bt edx,0
|
||||
jnc @f
|
||||
ror cx,8
|
||||
@@:
|
||||
;¥á«¨ ®¤® 2 ¡ ©â®¢®¥ ç¨á«®
|
||||
movzx ebx,word[eax+8]
|
||||
bt edx,0
|
||||
@ -820,6 +945,14 @@ proc read_tag_value, app1:dword, t_max:dword
|
||||
add edi,eax
|
||||
mov eax,ebx
|
||||
call convert_int_to_str ;[t_max]
|
||||
bt edx,1 ;array ?
|
||||
jnc .end_f
|
||||
;¤®¡ ¢«ï¥¬ 2-¥ ç¨á«®
|
||||
stdcall str_n_cat,edi,txt_zap,[t_max]
|
||||
stdcall str_len,edi
|
||||
add edi,eax
|
||||
mov eax,ecx
|
||||
call convert_int_to_str ;[t_max]
|
||||
.over4b_03:
|
||||
;...
|
||||
jmp .end_f
|
||||
@ -1079,7 +1212,9 @@ EXPORTS:
|
||||
dd sz_exif_get_app1, exif_get_app1
|
||||
dd sz_exif_get_app1_tag, exif_get_app1_tag
|
||||
dd sz_exif_get_app1_child, exif_get_app1_child
|
||||
dd sz_exif_get_app2, exif_get_app2
|
||||
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_app1_child db 'exif_get_app1_child',0
|
||||
sz_exif_get_app2 db 'exif_get_app2',0
|
||||
|
Loading…
Reference in New Issue
Block a user