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'
|
include '../../../../dll.inc'
|
||||||
|
|
||||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
@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
|
struct FileInfoBlock
|
||||||
Function dd ?
|
Function dd ?
|
||||||
@ -421,14 +421,10 @@ pushad
|
|||||||
jne .cycle_0
|
jne .cycle_0
|
||||||
|
|
||||||
;áç¨âë˘ ĽŹ ¤ŽçĽŕ¨Ľ ⼣¨ ¤Ťď 0x8769
|
;áç¨âë˘ ĽŹ ¤ŽçĽŕ¨Ľ ⼣¨ ¤Ťď 0x8769
|
||||||
stdcall [exif_get_app1_child], h_app1,h_child,0x8769
|
stdcall [exif_get_app2], h_app1,h_child
|
||||||
cmp dword[h_child],0
|
cmp dword[h_child],0
|
||||||
je .no_found_child
|
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
|
mov eax,1
|
||||||
sub ebx,5
|
sub ebx,5
|
||||||
.cycle_1:
|
.cycle_1:
|
||||||
@ -652,10 +648,12 @@ import_exif: ;
|
|||||||
exif_get_app1 dd sz_exif_get_app1
|
exif_get_app1 dd sz_exif_get_app1
|
||||||
exif_get_app1_tag dd sz_exif_get_app1_tag
|
exif_get_app1_tag dd sz_exif_get_app1_tag
|
||||||
exif_get_app1_child dd sz_exif_get_app1_child
|
exif_get_app1_child dd sz_exif_get_app1_child
|
||||||
|
exif_get_app2 dd sz_exif_get_app2
|
||||||
dd 0,0
|
dd 0,0
|
||||||
sz_exif_get_app1 db 'exif_get_app1',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_tag db 'exif_get_app1_tag',0
|
||||||
sz_exif_get_app1_child db 'exif_get_app1_child',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
|
;exif_get_image_160_120
|
||||||
|
|
||||||
sc system_colors
|
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_1">exif_get_app1</a></li>
|
||||||
<li><a href="#f_2">exif_get_app1_tag</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_3">exif_get_app1_child</a></li>
|
||||||
|
<li><a href="#f_4">exif_get_app2</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#const">Константы для функции exif_get_app1_child</a></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>.
|
<p>Документация к свободной библиотеке <b>exif.obj</b>, для <b>ОС Колибри</b>.
|
||||||
Эта библиотека создана для просмотра информации находящейся в изображениях в формате Exif. Информация эта создается цифровыми фотокамерами и содержит разные параметры например такие как: название фирмы производителя, модель камеры, и т.д.</p>
|
Эта библиотека создана для просмотра информации находящейся в изображениях в формате Exif. Информация эта создается цифровыми фотокамерами и содержит разные параметры например такие как: название фирмы производителя, модель камеры, и т.д.</p>
|
||||||
|
|
||||||
<p>Последнее обновление библиотеки 22.07.14.</p>
|
<p>Последнее обновление библиотеки 23.07.14.</p>
|
||||||
|
|
||||||
<h1><a name="fun">Функции</a></h1>
|
<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), который является указателем на список других дочерних тегов.</p>
|
||||||
<p>В даном примере функция берет тег 0x8769 и пытается найти его в списке h_app1, если находит то заполняет по нему значения в структуре h_child. Далее к списку h_child можно применять функцию exif_get_app1_tag для взятия значения этих тегов. С помощью этой функции мы как бы переходим внутрь некой "папки" с тегами, которые сразу достать не можем.</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>
|
<h1><a name="const">Константы для функции exif_get_app1_child</a></h1>
|
||||||
<p>Здесь приведены некоторые константы, которые могут использоватся как 3-й параметр для функции exif_get_app1_child. Эти константы обозначают специальные теги, которые содержат смещение на дочерние параметры, которые находятся в Exif.</p>
|
<p>Здесь приведены некоторые константы, которые могут использоватся как 3-й параметр для функции exif_get_app1_child. Эти константы обозначают специальные теги, которые содержат смещение на дочерние параметры, которые находятся в Exif.</p>
|
||||||
<h4>0x8769</h4>
|
<h4>0x8769</h4>
|
||||||
@ -122,12 +131,15 @@ import_exif:
|
|||||||
exif_get_app1 dd sz_exif_get_app1
|
exif_get_app1 dd sz_exif_get_app1
|
||||||
exif_get_app1_tag dd sz_exif_get_app1_tag
|
exif_get_app1_tag dd sz_exif_get_app1_tag
|
||||||
exif_get_app1_child dd sz_exif_get_app1_child
|
exif_get_app1_child dd sz_exif_get_app1_child
|
||||||
|
exif_get_app2 dd sz_exif_get_app2
|
||||||
dd 0,0
|
dd 0,0
|
||||||
sz_exif_get_app1 db 'exif_get_app1',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_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>
|
<h1><a name="hist">История</a></h1>
|
||||||
<p>15.07.14 - первая версия библиотеки, пример использования.</p>
|
<p>15.07.14 - первая версия библиотеки, пример использования.</p>
|
||||||
|
<p>23.07.14 - добавлена функция exif_get_app2.</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
@ -28,6 +28,7 @@ tag_format_f8b equ 12 ;float 8 byte
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
txt_dp db ': ',0
|
txt_dp db ': ',0
|
||||||
|
txt_zap db ', ',0
|
||||||
txt_div 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,0xaf,'Geo tiff directory',0
|
||||||
db 0x87,0xb0,'Geo tiff double params',0
|
db 0x87,0xb0,'Geo tiff double params',0
|
||||||
db 0x87,0xb1,'Geo tiff ascii 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,0x28,'Opto-Electric conv factor',0
|
||||||
db 0x88,0x29,'Interlace',0
|
db 0x88,0x29,'Interlace',0
|
||||||
db 0x88,0x5c,'Fax recv params',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 0x82,0x9d,'F number',0
|
||||||
db 0x88,0x22,'Exposure program',0
|
db 0x88,0x22,'Exposure program',0
|
||||||
db 0x88,0x24,'Spectral sensitivity',0
|
db 0x88,0x24,'Spectral sensitivity',0
|
||||||
db 0x88,0x25,'GPS info',0
|
|
||||||
db 0x88,0x27,'ISO',0
|
db 0x88,0x27,'ISO',0
|
||||||
db 0x88,0x2a,'Time zone offset',0
|
db 0x88,0x2a,'Time zone offset',0
|
||||||
db 0x88,0x2b,'Self timer mode',0
|
db 0x88,0x2b,'Self timer mode',0
|
||||||
@ -681,6 +682,102 @@ popad
|
|||||||
ret
|
ret
|
||||||
endp
|
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:
|
;description:
|
||||||
; ¢á¯®¬®£ ⥫ì ï äãªæ¨ï ¤«ï çâ¥¨ï § 票© ⥣®¢
|
; ¢á¯®¬®£ ⥫ì ï äãªæ¨ï ¤«ï çâ¥¨ï § 票© ⥣®¢
|
||||||
;input:
|
;input:
|
||||||
@ -732,13 +829,17 @@ proc read_tag_value, app1:dword, t_max:dword
|
|||||||
add esi,2
|
add esi,2
|
||||||
stdcall str_n_cat,edi,esi,[t_max]
|
stdcall str_n_cat,edi,esi,[t_max]
|
||||||
|
|
||||||
jmp @f
|
jmp .start_read
|
||||||
.tag_unknown:
|
.tag_unknown:
|
||||||
;¥á«¨ ⥣ ¥ ©¤¥ áâ ¢¨¬ ¥£® ª®¤ ¢¬¥áâ® §¢ ¨ï
|
;¥á«¨ ⥣ ¥ ©¤¥ áâ ¢¨¬ ¥£® ª®¤ ¢¬¥áâ® §¢ ¨ï
|
||||||
movzx ebx,word[eax]
|
movzx ebx,word[eax]
|
||||||
|
bt edx,0
|
||||||
|
jnc @f
|
||||||
|
ror bx,8
|
||||||
|
@@:
|
||||||
stdcall hex_in_str, edi, ebx,4
|
stdcall hex_in_str, edi, ebx,4
|
||||||
mov byte[edi+4],0
|
mov byte[edi+4],0
|
||||||
@@:
|
.start_read:
|
||||||
|
|
||||||
;ç¨â ¥¬ ¨ä®à¬ æ¨î ¢ ⥣¥
|
;ç¨â ¥¬ ¨ä®à¬ æ¨î ¢ ⥣¥
|
||||||
mov bx,tag_format_ui1b
|
mov bx,tag_format_ui1b
|
||||||
@ -750,18 +851,34 @@ proc read_tag_value, app1:dword, t_max:dword
|
|||||||
jne .tag_01
|
jne .tag_01
|
||||||
stdcall str_n_cat,edi,txt_dp,[t_max]
|
stdcall str_n_cat,edi,txt_dp,[t_max]
|
||||||
call get_tag_data_size
|
call get_tag_data_size
|
||||||
cmp ebx,1
|
cmp ebx,4
|
||||||
jg .over4b_01
|
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]
|
movzx ebx,byte[eax+8]
|
||||||
;bt edx,0
|
|
||||||
;jnc @f
|
|
||||||
; ror bx,8
|
|
||||||
;@@:
|
|
||||||
stdcall str_len,edi
|
stdcall str_len,edi
|
||||||
add edi,eax
|
add edi,eax
|
||||||
mov eax,ebx
|
mov eax,ebx
|
||||||
call convert_int_to_str ;[t_max]
|
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:
|
.over4b_01:
|
||||||
;...
|
;...
|
||||||
jmp .end_f
|
jmp .end_f
|
||||||
@ -808,8 +925,16 @@ proc read_tag_value, app1:dword, t_max:dword
|
|||||||
jne .tag_03
|
jne .tag_03
|
||||||
stdcall str_n_cat,edi,txt_dp,[t_max]
|
stdcall str_n_cat,edi,txt_dp,[t_max]
|
||||||
call get_tag_data_size
|
call get_tag_data_size
|
||||||
cmp ebx,1
|
cmp ebx,2
|
||||||
jg .over4b_03
|
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 ¡ ©â®¢®¥ ç¨á«®
|
;¥á«¨ ®¤® 2 ¡ ©â®¢®¥ ç¨á«®
|
||||||
movzx ebx,word[eax+8]
|
movzx ebx,word[eax+8]
|
||||||
bt edx,0
|
bt edx,0
|
||||||
@ -820,6 +945,14 @@ proc read_tag_value, app1:dword, t_max:dword
|
|||||||
add edi,eax
|
add edi,eax
|
||||||
mov eax,ebx
|
mov eax,ebx
|
||||||
call convert_int_to_str ;[t_max]
|
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:
|
.over4b_03:
|
||||||
;...
|
;...
|
||||||
jmp .end_f
|
jmp .end_f
|
||||||
@ -1079,7 +1212,9 @@ EXPORTS:
|
|||||||
dd sz_exif_get_app1, exif_get_app1
|
dd sz_exif_get_app1, exif_get_app1
|
||||||
dd sz_exif_get_app1_tag, exif_get_app1_tag
|
dd sz_exif_get_app1_tag, exif_get_app1_tag
|
||||||
dd sz_exif_get_app1_child, exif_get_app1_child
|
dd sz_exif_get_app1_child, exif_get_app1_child
|
||||||
|
dd sz_exif_get_app2, exif_get_app2
|
||||||
dd 0,0
|
dd 0,0
|
||||||
sz_exif_get_app1 db 'exif_get_app1',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_tag db 'exif_get_app1_tag',0
|
||||||
sz_exif_get_app1_child db 'exif_get_app1_child',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