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:
IgorA 2014-07-22 20:43:05 +00:00
parent aca533427d
commit 9adefdc190
3 changed files with 165 additions and 20 deletions

View File

@ -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

View File

@ -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 для взятия значения этих тегов. С помощью этой функции мы как бы переходим внутрь некой &quot;папки&quot; с тегами, которые сразу достать не можем.</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>

View File

@ -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