1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656 |
- #------------------------------------------------------------------------------
- # File: CanonCustom.pm
- #
- # Description: Read and write Canon Custom functions
- #
- # Revisions: 11/25/2003 - P. Harvey Created
- #
- # References: 1) http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html
- # 2) Christian Koller private communication (20D)
- # 3) Rainer Honle private communication (5D)
- # 4) David Pitcher private communication (1DmkIII firmware upgrade)
- #------------------------------------------------------------------------------
- package Image::ExifTool::CanonCustom;
- use strict;
- use vars qw($VERSION);
- use Image::ExifTool qw(:DataAccess);
- use Image::ExifTool::Canon;
- use Image::ExifTool::Exif;
- $VERSION = '1.52';
- sub ProcessCanonCustom($$$);
- sub ProcessCanonCustom2($$$);
- sub WriteCanonCustom($$$);
- sub WriteCanonCustom2($$$);
- sub CheckCanonCustom($$$);
- sub ConvertPFn($);
- sub ConvertPFnInv($);
- my %onOff = ( 0 => 'On', 1 => 'Off' );
- my %offOn = ( 0 => 'Off', 1 => 'On' );
- my %disableEnable = ( 0 => 'Disable', 1 => 'Enable' );
- my %enableDisable = ( 0 => 'Enable', 1 => 'Disable' );
- my %convPFn = ( PrintConv => \&ConvertPfn, PrintConvInv => \&ConvertPfnInv );
- #------------------------------------------------------------------------------
- # Custom functions for the 1D
- # CanonCustom (keys are custom function number)
- %Image::ExifTool::CanonCustom::Functions1D = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&ProcessCanonCustom,
- WRITE_PROC => \&WriteCanonCustom,
- CHECK_PROC => \&CheckCanonCustom,
- WRITABLE => 'int8u',
- NOTES => q{
- These custom functions are used by all 1D models up to but not including the
- Mark III.
- },
- 0 => {
- Name => 'FocusingScreen',
- PrintConv => {
- 0 => 'Ec-N, R',
- 1 => 'Ec-A,B,C,CII,CIII,D,H,I,L',
- },
- },
- 1 => {
- Name => 'FinderDisplayDuringExposure',
- PrintConv => \%offOn,
- },
- 2 => {
- Name => 'ShutterReleaseNoCFCard',
- Description => 'Shutter Release W/O CF Card',
- PrintConv => {
- 0 => 'Yes',
- 1 => 'No',
- },
- },
- 3 => {
- Name => 'ISOSpeedExpansion',
- Description => 'ISO Speed Expansion',
- PrintConv => {
- 0 => 'No',
- 1 => 'Yes',
- },
- },
- 4 => {
- Name => 'ShutterAELButton',
- Description => 'Shutter Button/AEL Button',
- PrintConv => {
- 0 => 'AF/AE lock stop',
- 1 => 'AE lock/AF',
- 2 => 'AF/AF lock, No AE lock',
- 3 => 'AE/AF, No AE lock',
- },
- },
- 5 => {
- Name => 'ManualTv',
- Description => 'Manual Tv/Av For M',
- PrintConv => {
- 0 => 'Tv=Main/Av=Control',
- 1 => 'Tv=Control/Av=Main',
- 2 => 'Tv=Main/Av=Main w/o lens',
- 3 => 'Tv=Control/Av=Main w/o lens',
- },
- },
- 6 => {
- Name => 'ExposureLevelIncrements',
- PrintConv => {
- 0 => '1/3-stop set, 1/3-stop comp.',
- 1 => '1-stop set, 1/3-stop comp.',
- 2 => '1/2-stop set, 1/2-stop comp.',
- },
- },
- 7 => {
- Name => 'USMLensElectronicMF',
- PrintConv => {
- 0 => 'Turns on after one-shot AF',
- 1 => 'Turns off after one-shot AF',
- 2 => 'Always turned off',
- },
- },
- 8 => {
- Name => 'LCDPanels',
- Description => 'Top/Back LCD Panels',
- PrintConv => {
- 0 => 'Remain. shots/File no.',
- 1 => 'ISO/Remain. shots',
- 2 => 'ISO/File no.',
- 3 => 'Shots in folder/Remain. shots',
- },
- },
- 9 => {
- Name => 'AEBSequenceAutoCancel',
- Description => 'AEB Sequence/Auto Cancel',
- PrintConv => {
- 0 => '0,-,+/Enabled',
- 1 => '0,-,+/Disabled',
- 2 => '-,0,+/Enabled',
- 3 => '-,0,+/Disabled',
- },
- },
- 10 => {
- Name => 'AFPointIllumination',
- PrintConv => {
- 0 => 'On',
- 1 => 'Off',
- 2 => 'On without dimming',
- 3 => 'Brighter',
- },
- },
- 11 => {
- Name => 'AFPointSelection',
- PrintConv => {
- 0 => 'H=AF+Main/V=AF+Command',
- 1 => 'H=Comp+Main/V=Comp+Command',
- 2 => 'H=Command only/V=Assist+Main',
- 3 => 'H=FEL+Main/V=FEL+Command',
- },
- },
- 12 => {
- Name => 'MirrorLockup',
- PrintConv => \%disableEnable,
- },
- 13 => {
- Name => 'AFPointSpotMetering',
- Description => 'No. AF Points/Spot Metering',
- PrintConv => {
- 0 => '45/Center AF point',
- 1 => '11/Active AF point',
- 2 => '11/Center AF point',
- 3 => '9/Active AF point',
- },
- },
- 14 => {
- Name => 'FillFlashAutoReduction',
- PrintConv => \%enableDisable,
- },
- 15 => {
- Name => 'ShutterCurtainSync',
- PrintConv => {
- 0 => '1st-curtain sync',
- 1 => '2nd-curtain sync',
- },
- },
- 16 => {
- Name => 'SafetyShiftInAvOrTv',
- PrintConv => \%disableEnable,
- },
- 17 => {
- Name => 'AFPointActivationArea',
- PrintConv => {
- 0 => 'Single AF point',
- 1 => 'Expanded (TTL. of 7 AF points)',
- 2 => 'Automatic expanded (max. 13)',
- },
- },
- 18 => {
- Name => 'SwitchToRegisteredAFPoint',
- PrintConv => {
- 0 => 'Assist + AF',
- 1 => 'Assist',
- 2 => 'Only while pressing assist',
- },
- },
- 19 => {
- Name => 'LensAFStopButton',
- PrintConv => {
- 0 => 'AF stop',
- 1 => 'AF start',
- 2 => 'AE lock while metering',
- 3 => 'AF point: M -> Auto / Auto -> Ctr.',
- 4 => 'AF mode: ONE SHOT <-> AI SERVO',
- 5 => 'IS start',
- },
- },
- 20 => {
- Name => 'AIServoTrackingSensitivity',
- PrintConv => {
- 0 => 'Standard',
- 1 => 'Slow',
- 2 => 'Moderately slow',
- 3 => 'Moderately fast',
- 4 => 'Fast',
- },
- },
- 21 => {
- Name => 'AIServoContinuousShooting',
- PrintConv => {
- 0 => 'Shooting not possible without focus',
- 1 => 'Shooting possible without focus',
- },
- },
- );
- # Custom functions for the 5D (ref 3)
- %Image::ExifTool::CanonCustom::Functions5D = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&ProcessCanonCustom,
- WRITE_PROC => \&WriteCanonCustom,
- CHECK_PROC => \&CheckCanonCustom,
- WRITABLE => 'int8u',
- 0 => {
- Name => 'FocusingScreen',
- PrintConv => {
- 0 => 'Ee-A',
- 1 => 'Ee-D',
- 2 => 'Ee-S',
- },
- },
- 1 => {
- Name => 'SetFunctionWhenShooting',
- PrintConv => {
- 0 => 'Default (no function)',
- 1 => 'Change quality',
- 2 => 'Change Parameters',
- 3 => 'Menu display',
- 4 => 'Image replay',
- },
- },
- 2 => {
- Name => 'LongExposureNoiseReduction',
- PrintConv => {
- 0 => 'Off',
- 1 => 'Auto',
- 2 => 'On',
- },
- },
- 3 => {
- Name => 'FlashSyncSpeedAv',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/200 Fixed',
- },
- },
- 4 => {
- Name => 'Shutter-AELock',
- PrintConv => {
- 0 => 'AF/AE lock',
- 1 => 'AE lock/AF',
- 2 => 'AF/AF lock, No AE lock',
- 3 => 'AE/AF, No AE lock',
- },
- },
- 5 => {
- Name => 'AFAssistBeam',
- PrintConv => {
- 0 => 'Emits',
- 1 => 'Does not emit',
- },
- },
- 6 => {
- Name => 'ExposureLevelIncrements',
- PrintConv => {
- 0 => '1/3 Stop',
- 1 => '1/2 Stop',
- },
- },
- 7 => {
- Name => 'FlashFiring',
- PrintConv => {
- 0 => 'Fires',
- 1 => 'Does not fire',
- },
- },
- 8 => {
- Name => 'ISOExpansion',
- PrintConv => \%offOn,
- },
- 9 => {
- Name => 'AEBSequenceAutoCancel',
- Description => 'AEB Sequence/Auto Cancel',
- PrintConv => {
- 0 => '0,-,+/Enabled',
- 1 => '0,-,+/Disabled',
- 2 => '-,0,+/Enabled',
- 3 => '-,0,+/Disabled',
- },
- },
- 10 => {
- Name => 'SuperimposedDisplay',
- PrintConv => \%onOff,
- },
- 11 => {
- Name => 'MenuButtonDisplayPosition',
- PrintConv => {
- 0 => 'Previous (top if power off)',
- 1 => 'Previous',
- 2 => 'Top',
- },
- },
- 12 => {
- Name => 'MirrorLockup',
- PrintConv => \%disableEnable,
- },
- 13 => {
- Name => 'AFPointSelectionMethod',
- PrintConv => {
- 0 => 'Normal',
- 1 => 'Multi-controller direct',
- 2 => 'Quick Control Dial direct',
- },
- },
- 14 => {
- Name => 'ETTLII',
- Description => 'E-TTL II',
- PrintConv => {
- 0 => 'Evaluative',
- 1 => 'Average',
- },
- },
- 15 => {
- Name => 'ShutterCurtainSync',
- PrintConv => {
- 0 => '1st-curtain sync',
- 1 => '2nd-curtain sync',
- },
- },
- 16 => {
- Name => 'SafetyShiftInAvOrTv',
- PrintConv => \%disableEnable,
- },
- 17 => {
- Name => 'AFPointActivationArea',
- PrintConv => {
- 0 => 'Standard',
- 1 => 'Expanded',
- },
- },
- 18 => {
- Name => 'LCDDisplayReturnToShoot',
- PrintConv => {
- 0 => 'With Shutter Button only',
- 1 => 'Also with * etc.',
- },
- },
- 19 => {
- Name => 'LensAFStopButton',
- PrintConv => {
- 0 => 'AF stop',
- 1 => 'AF start',
- 2 => 'AE lock while metering',
- 3 => 'AF point: M -> Auto / Auto -> Ctr.',
- 4 => 'ONE SHOT <-> AI SERVO',
- 5 => 'IS start',
- },
- },
- 20 => {
- Name => 'AddOriginalDecisionData',
- PrintConv => \%offOn,
- },
- );
- # Custom functions for 10D
- %Image::ExifTool::CanonCustom::Functions10D = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&ProcessCanonCustom,
- WRITE_PROC => \&WriteCanonCustom,
- CHECK_PROC => \&CheckCanonCustom,
- WRITABLE => 'int8u',
- 1 => {
- Name => 'SetButtonWhenShooting',
- PrintConv => {
- 0 => 'Normal (disabled)',
- 1 => 'Image quality',
- 2 => 'Change parameters',
- 3 => 'Menu display',
- 4 => 'Image playback',
- },
- },
- 2 => {
- Name => 'ShutterReleaseNoCFCard',
- Description => 'Shutter Release W/O CF Card',
- PrintConv => {
- 0 => 'Yes',
- 1 => 'No',
- },
- },
- 3 => {
- Name => 'FlashSyncSpeedAv',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/200 Fixed',
- },
- },
- 4 => {
- Name => 'Shutter-AELock',
- PrintConv => {
- 0 => 'AF/AE lock',
- 1 => 'AE lock/AF',
- 2 => 'AF/AF lock, No AE lock',
- 3 => 'AE/AF, No AE lock',
- },
- },
- 5 => {
- Name => 'AFAssist',
- Description => 'AF Assist/Flash Firing',
- PrintConv => {
- 0 => 'Emits/Fires',
- 1 => 'Does not emit/Fires',
- 2 => 'Only ext. flash emits/Fires',
- 3 => 'Emits/Does not fire',
- },
- },
- 6 => {
- Name => 'ExposureLevelIncrements',
- PrintConv => {
- 0 => '1/2 Stop',
- 1 => '1/3 Stop',
- },
- },
- 7 => {
- Name => 'AFPointRegistration',
- PrintConv => {
- 0 => 'Center',
- 1 => 'Bottom',
- 2 => 'Right',
- 3 => 'Extreme Right',
- 4 => 'Automatic',
- 5 => 'Extreme Left',
- 6 => 'Left',
- 7 => 'Top',
- },
- },
- 8 => {
- Name => 'RawAndJpgRecording',
- PrintConv => {
- 0 => 'RAW+Small/Normal',
- 1 => 'RAW+Small/Fine',
- 2 => 'RAW+Medium/Normal',
- 3 => 'RAW+Medium/Fine',
- 4 => 'RAW+Large/Normal',
- 5 => 'RAW+Large/Fine',
- },
- },
- 9 => {
- Name => 'AEBSequenceAutoCancel',
- Description => 'AEB Sequence/Auto Cancel',
- PrintConv => {
- 0 => '0,-,+/Enabled',
- 1 => '0,-,+/Disabled',
- 2 => '-,0,+/Enabled',
- 3 => '-,0,+/Disabled',
- },
- },
- 10 => {
- Name => 'SuperimposedDisplay',
- PrintConv => \%onOff,
- },
- 11 => {
- Name => 'MenuButtonDisplayPosition',
- PrintConv => {
- 0 => 'Previous (top if power off)',
- 1 => 'Previous',
- 2 => 'Top',
- },
- },
- 12 => {
- Name => 'MirrorLockup',
- PrintConv => \%disableEnable,
- },
- 13 => {
- Name => 'AssistButtonFunction',
- PrintConv => {
- 0 => 'Normal',
- 1 => 'Select Home Position',
- 2 => 'Select HP (while pressing)',
- 3 => 'Av+/- (AF point by QCD)',
- 4 => 'FE lock',
- },
- },
- 14 => {
- Name => 'FillFlashAutoReduction',
- PrintConv => \%enableDisable,
- },
- 15 => {
- Name => 'ShutterCurtainSync',
- PrintConv => {
- 0 => '1st-curtain sync',
- 1 => '2nd-curtain sync',
- },
- },
- 16 => {
- Name => 'SafetyShiftInAvOrTv',
- PrintConv => \%disableEnable,
- },
- 17 => {
- Name => 'LensAFStopButton',
- PrintConv => {
- 0 => 'AF stop',
- 1 => 'AF start',
- 2 => 'AE lock while metering',
- 3 => 'AF point: M->Auto/Auto->ctr',
- 4 => 'One Shot <-> AI servo',
- 5 => 'IS start',
- },
- },
- );
- # Custom functions for the 20D (ref 2)
- %Image::ExifTool::CanonCustom::Functions20D = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&ProcessCanonCustom,
- WRITE_PROC => \&WriteCanonCustom,
- CHECK_PROC => \&CheckCanonCustom,
- WRITABLE => 'int8u',
- 0 => {
- Name => 'SetFunctionWhenShooting',
- PrintConv => {
- 0 => 'Default (no function)',
- 1 => 'Change quality',
- 2 => 'Change Parameters',
- 3 => 'Menu display',
- 4 => 'Image replay',
- },
- },
- 1 => {
- Name => 'LongExposureNoiseReduction',
- PrintConv => \%offOn,
- },
- 2 => {
- Name => 'FlashSyncSpeedAv',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/250 Fixed',
- },
- },
- 3 => {
- Name => 'Shutter-AELock',
- PrintConv => {
- 0 => 'AF/AE lock',
- 1 => 'AE lock/AF',
- 2 => 'AF/AF lock, No AE lock',
- 3 => 'AE/AF, No AE lock',
- },
- },
- 4 => {
- Name => 'AFAssistBeam',
- PrintConv => {
- 0 => 'Emits',
- 1 => 'Does not emit',
- 2 => 'Only ext. flash emits',
- },
- },
- 5 => {
- Name => 'ExposureLevelIncrements',
- PrintConv => {
- 0 => '1/3 Stop',
- 1 => '1/2 Stop',
- },
- },
- 6 => {
- Name => 'FlashFiring',
- PrintConv => {
- 0 => 'Fires',
- 1 => 'Does not fire',
- },
- },
- 7 => {
- Name => 'ISOExpansion',
- PrintConv => \%offOn,
- },
- 8 => {
- Name => 'AEBSequenceAutoCancel',
- Description => 'AEB Sequence/Auto Cancel',
- PrintConv => {
- 0 => '0,-,+/Enabled',
- 1 => '0,-,+/Disabled',
- 2 => '-,0,+/Enabled',
- 3 => '-,0,+/Disabled',
- },
- },
- 9 => {
- Name => 'SuperimposedDisplay',
- PrintConv => \%onOff,
- },
- 10 => {
- Name => 'MenuButtonDisplayPosition',
- PrintConv => {
- 0 => 'Previous (top if power off)',
- 1 => 'Previous',
- 2 => 'Top',
- },
- },
- 11 => {
- Name => 'MirrorLockup',
- PrintConv => \%disableEnable,
- },
- 12 => {
- Name => 'AFPointSelectionMethod',
- PrintConv => {
- 0 => 'Normal',
- 1 => 'Multi-controller direct',
- 2 => 'Quick Control Dial direct',
- },
- },
- 13 => {
- Name => 'ETTLII',
- Description => 'E-TTL II',
- PrintConv => {
- 0 => 'Evaluative',
- 1 => 'Average',
- },
- },
- 14 => {
- Name => 'ShutterCurtainSync',
- PrintConv => {
- 0 => '1st-curtain sync',
- 1 => '2nd-curtain sync',
- },
- },
- 15 => {
- Name => 'SafetyShiftInAvOrTv',
- PrintConv => \%disableEnable,
- },
- 16 => {
- Name => 'LensAFStopButton',
- PrintConv => {
- 0 => 'AF stop',
- 1 => 'AF start',
- 2 => 'AE lock while metering',
- 3 => 'AF point: M -> Auto / Auto -> Ctr.',
- 4 => 'ONE SHOT <-> AI SERVO',
- 5 => 'IS start',
- },
- },
- 17 => {
- Name => 'AddOriginalDecisionData',
- PrintConv => \%offOn,
- },
- );
- # Custom functions for the 30D (PH)
- %Image::ExifTool::CanonCustom::Functions30D = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&ProcessCanonCustom,
- WRITE_PROC => \&WriteCanonCustom,
- CHECK_PROC => \&CheckCanonCustom,
- WRITABLE => 'int8u',
- 1 => {
- Name => 'SetFunctionWhenShooting',
- PrintConv => {
- 0 => 'Default (no function)',
- 1 => 'Change quality',
- 2 => 'Change Picture Style',
- 3 => 'Menu display',
- 4 => 'Image replay',
- },
- },
- 2 => {
- Name => 'LongExposureNoiseReduction',
- PrintConv => {
- 0 => 'Off',
- 1 => 'Auto',
- 2 => 'On',
- },
- },
- 3 => {
- Name => 'FlashSyncSpeedAv',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/250 Fixed',
- },
- },
- 4 => {
- Name => 'Shutter-AELock',
- PrintConv => {
- 0 => 'AF/AE lock',
- 1 => 'AE lock/AF',
- 2 => 'AF/AF lock, No AE lock',
- 3 => 'AE/AF, No AE lock',
- },
- },
- 5 => {
- Name => 'AFAssistBeam',
- PrintConv => {
- 0 => 'Emits',
- 1 => 'Does not emit',
- 2 => 'Only ext. flash emits',
- },
- },
- 6 => {
- Name => 'ExposureLevelIncrements',
- PrintConv => {
- 0 => '1/3 Stop',
- 1 => '1/2 Stop',
- },
- },
- 7 => {
- Name => 'FlashFiring',
- PrintConv => {
- 0 => 'Fires',
- 1 => 'Does not fire',
- },
- },
- 8 => {
- Name => 'ISOExpansion',
- PrintConv => \%offOn,
- },
- 9 => {
- Name => 'AEBSequenceAutoCancel',
- Description => 'AEB Sequence/Auto Cancel',
- PrintConv => {
- 0 => '0,-,+/Enabled',
- 1 => '0,-,+/Disabled',
- 2 => '-,0,+/Enabled',
- 3 => '-,0,+/Disabled',
- },
- },
- 10 => {
- Name => 'SuperimposedDisplay',
- PrintConv => \%onOff,
- },
- 11 => {
- Name => 'MenuButtonDisplayPosition',
- PrintConv => {
- 0 => 'Previous (top if power off)',
- 1 => 'Previous',
- 2 => 'Top',
- },
- },
- 12 => {
- Name => 'MirrorLockup',
- PrintConv => \%disableEnable,
- },
- 13 => {
- Name => 'AFPointSelectionMethod',
- PrintConv => {
- 0 => 'Normal',
- 1 => 'Multi-controller direct',
- 2 => 'Quick Control Dial direct',
- },
- },
- 14 => {
- Name => 'ETTLII',
- Description => 'E-TTL II',
- PrintConv => {
- 0 => 'Evaluative',
- 1 => 'Average',
- },
- },
- 15 => {
- Name => 'ShutterCurtainSync',
- PrintConv => {
- 0 => '1st-curtain sync',
- 1 => '2nd-curtain sync',
- },
- },
- 16 => {
- Name => 'SafetyShiftInAvOrTv',
- PrintConv => \%disableEnable,
- },
- 17 => {
- Name => 'MagnifiedView',
- PrintConv => {
- 0 => 'Image playback only',
- 1 => 'Image review and playback',
- },
- },
- 18 => {
- Name => 'LensAFStopButton',
- PrintConv => {
- 0 => 'AF stop',
- 1 => 'AF start',
- 2 => 'AE lock while metering',
- 3 => 'AF point: M -> Auto / Auto -> Ctr.',
- 4 => 'ONE SHOT <-> AI SERVO',
- 5 => 'IS start',
- },
- },
- 19 => {
- Name => 'AddOriginalDecisionData',
- PrintConv => \%offOn,
- },
- );
- # Custom functions for the 350D (PH)
- %Image::ExifTool::CanonCustom::Functions350D = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&ProcessCanonCustom,
- WRITE_PROC => \&WriteCanonCustom,
- CHECK_PROC => \&CheckCanonCustom,
- WRITABLE => 'int8u',
- 0 => {
- Name => 'SetButtonCrossKeysFunc',
- PrintConv => {
- 0 => 'Normal',
- 1 => 'Set: Quality',
- 2 => 'Set: Parameter',
- 3 => 'Set: Playback',
- 4 => 'Cross keys: AF point select',
- },
- },
- 1 => {
- Name => 'LongExposureNoiseReduction',
- PrintConv => \%offOn,
- },
- 2 => {
- Name => 'FlashSyncSpeedAv',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/200 Fixed',
- },
- },
- 3 => {
- Name => 'Shutter-AELock',
- PrintConv => {
- 0 => 'AF/AE lock',
- 1 => 'AE lock/AF',
- 2 => 'AF/AF lock, No AE lock',
- 3 => 'AE/AF, No AE lock',
- },
- },
- 4 => {
- Name => 'AFAssistBeam',
- PrintConv => {
- 0 => 'Emits',
- 1 => 'Does not emit',
- 2 => 'Only ext. flash emits',
- },
- },
- 5 => {
- Name => 'ExposureLevelIncrements',
- PrintConv => {
- 0 => '1/3 Stop',
- 1 => '1/2 Stop',
- },
- },
- 6 => {
- Name => 'MirrorLockup',
- PrintConv => \%disableEnable,
- },
- 7 => {
- Name => 'ETTLII',
- Description => 'E-TTL II',
- PrintConv => {
- 0 => 'Evaluative',
- 1 => 'Average',
- },
- },
- 8 => {
- Name => 'ShutterCurtainSync',
- PrintConv => {
- 0 => '1st-curtain sync',
- 1 => '2nd-curtain sync',
- },
- },
- );
- # Custom functions for the 400D (PH)
- %Image::ExifTool::CanonCustom::Functions400D = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&ProcessCanonCustom,
- WRITE_PROC => \&WriteCanonCustom,
- CHECK_PROC => \&CheckCanonCustom,
- WRITABLE => 'int8u',
- 0 => {
- Name => 'SetButtonCrossKeysFunc',
- PrintConv => {
- 0 => 'Set: Picture Style',
- 1 => 'Set: Quality',
- 2 => 'Set: Flash Exposure Comp',
- 3 => 'Set: Playback',
- 4 => 'Cross keys: AF point select',
- },
- },
- 1 => {
- Name => 'LongExposureNoiseReduction',
- PrintConv => {
- 0 => 'Off',
- 1 => 'Auto',
- 2 => 'On',
- },
- },
- 2 => {
- Name => 'FlashSyncSpeedAv',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/200 Fixed',
- },
- },
- 3 => {
- Name => 'Shutter-AELock',
- PrintConv => {
- 0 => 'AF/AE lock',
- 1 => 'AE lock/AF',
- 2 => 'AF/AF lock, No AE lock',
- 3 => 'AE/AF, No AE lock',
- },
- },
- 4 => {
- Name => 'AFAssistBeam',
- PrintConv => {
- 0 => 'Emits',
- 1 => 'Does not emit',
- 2 => 'Only ext. flash emits',
- },
- },
- 5 => {
- Name => 'ExposureLevelIncrements',
- PrintConv => {
- 0 => '1/3 Stop',
- 1 => '1/2 Stop',
- },
- },
- 6 => {
- Name => 'MirrorLockup',
- PrintConv => \%disableEnable,
- },
- 7 => {
- Name => 'ETTLII',
- Description => 'E-TTL II',
- PrintConv => {
- 0 => 'Evaluative',
- 1 => 'Average',
- },
- },
- 8 => {
- Name => 'ShutterCurtainSync',
- PrintConv => {
- 0 => '1st-curtain sync',
- 1 => '2nd-curtain sync',
- },
- },
- 9 => {
- Name => 'MagnifiedView',
- PrintConv => {
- 0 => 'Image playback only',
- 1 => 'Image review and playback',
- },
- },
- 10 => {
- Name => 'LCDDisplayAtPowerOn',
- PrintConv => {
- 0 => 'Display',
- 1 => 'Retain power off status',
- },
- },
- );
- # Custom functions for the D30/D60
- %Image::ExifTool::CanonCustom::FunctionsD30 = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&ProcessCanonCustom,
- WRITE_PROC => \&WriteCanonCustom,
- CHECK_PROC => \&CheckCanonCustom,
- NOTES => 'Custom functions for the EOS D30 and D60.',
- WRITABLE => 'int8u',
- 1 => {
- Name => 'LongExposureNoiseReduction',
- PrintConv => \%offOn,
- },
- 2 => {
- Name => 'Shutter-AELock',
- PrintConv => {
- 0 => 'AF/AE lock',
- 1 => 'AE lock/AF',
- 2 => 'AF/AF lock',
- 3 => 'AE+release/AE+AF',
- },
- },
- 3 => {
- Name => 'MirrorLockup',
- PrintConv => \%disableEnable,
- },
- 4 => {
- Name => 'ExposureLevelIncrements',
- PrintConv => {
- 0 => '1/2 Stop',
- 1 => '1/3 Stop',
- },
- },
- 5 => {
- Name => 'AFAssist',
- PrintConv => {
- 0 => 'Emits/Fires',
- 1 => 'Does not emit/Fires',
- 2 => 'Only ext. flash emits/Fires',
- 3 => 'Emits/Does not fire',
- },
- },
- 6 => {
- Name => 'FlashSyncSpeedAv',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/200 Fixed',
- },
- },
- 7 => {
- Name => 'AEBSequenceAutoCancel',
- Description => 'AEB Sequence/Auto Cancel',
- PrintConv => {
- 0 => '0,-,+/Enabled',
- 1 => '0,-,+/Disabled',
- 2 => '-,0,+/Enabled',
- 3 => '-,0,+/Disabled',
- },
- },
- 8 => {
- Name => 'ShutterCurtainSync',
- PrintConv => {
- 0 => '1st-curtain sync',
- 1 => '2nd-curtain sync',
- },
- },
- 9 => {
- Name => 'LensAFStopButton',
- PrintConv => {
- 0 => 'AF Stop',
- 1 => 'Operate AF',
- 2 => 'Lock AE and start timer',
- },
- },
- 10 => {
- Name => 'FillFlashAutoReduction',
- PrintConv => \%enableDisable,
- },
- 11 => {
- Name => 'MenuButtonReturn',
- PrintConv => {
- 0 => 'Top',
- 1 => 'Previous (volatile)',
- 2 => 'Previous',
- },
- },
- 12 => {
- Name => 'SetButtonWhenShooting',
- PrintConv => {
- 0 => 'Default (no function)',
- 1 => 'Image quality',
- 2 => 'Change ISO speed',
- 3 => 'Change parameters',
- },
- },
- 13 => {
- Name => 'SensorCleaning',
- PrintConv => \%disableEnable,
- },
- 14 => {
- Name => 'SuperimposedDisplay',
- PrintConv => \%onOff,
- },
- 15 => {
- Name => 'ShutterReleaseNoCFCard',
- Description => 'Shutter Release W/O CF Card',
- PrintConv => {
- 0 => 'Yes',
- 1 => 'No',
- },
- },
- );
- # Custom functions for unknown cameras
- %Image::ExifTool::CanonCustom::FuncsUnknown = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&ProcessCanonCustom,
- );
- # 1D personal function settings (ref PH)
- %Image::ExifTool::CanonCustom::PersonalFuncs = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
- CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
- WRITABLE => 1,
- NOTES => 'Personal function settings for the EOS-1D.',
- FORMAT => 'int16u',
- FIRST_ENTRY => 1,
- 1 => { Name => 'PF0CustomFuncRegistration', %convPFn },
- 2 => { Name => 'PF1DisableShootingModes', %convPFn },
- 3 => { Name => 'PF2DisableMeteringModes', %convPFn },
- 4 => { Name => 'PF3ManualExposureMetering', %convPFn },
- 5 => { Name => 'PF4ExposureTimeLimits', %convPFn },
- 6 => { Name => 'PF5ApertureLimits', %convPFn },
- 7 => { Name => 'PF6PresetShootingModes', %convPFn },
- 8 => { Name => 'PF7BracketContinuousShoot', %convPFn },
- 9 => { Name => 'PF8SetBracketShots', %convPFn },
- 10 => { Name => 'PF9ChangeBracketSequence', %convPFn },
- 11 => { Name => 'PF10RetainProgramShift', %convPFn },
- #12 => { Name => 'PF11Unused', %convPFn },
- #13 => { Name => 'PF12Unused', %convPFn },
- 14 => { Name => 'PF13DrivePriority', %convPFn },
- 15 => { Name => 'PF14DisableFocusSearch', %convPFn },
- 16 => { Name => 'PF15DisableAFAssistBeam', %convPFn },
- 17 => { Name => 'PF16AutoFocusPointShoot', %convPFn },
- 18 => { Name => 'PF17DisableAFPointSel', %convPFn },
- 19 => { Name => 'PF18EnableAutoAFPointSel', %convPFn },
- 20 => { Name => 'PF19ContinuousShootSpeed', %convPFn },
- 21 => { Name => 'PF20LimitContinousShots', %convPFn },
- 22 => { Name => 'PF21EnableQuietOperation', %convPFn },
- #23 => { Name => 'PF22Unused', %convPFn },
- 24 => { Name => 'PF23SetTimerLengths', %convPFn },
- 25 => { Name => 'PF24LightLCDDuringBulb', %convPFn },
- 26 => { Name => 'PF25DefaultClearSettings', %convPFn },
- 27 => { Name => 'PF26ShortenReleaseLag', %convPFn },
- 28 => { Name => 'PF27ReverseDialRotation', %convPFn },
- 29 => { Name => 'PF28NoQuickDialExpComp', %convPFn },
- 30 => { Name => 'PF29QuickDialSwitchOff', %convPFn },
- 31 => { Name => 'PF30EnlargementMode', %convPFn },
- 32 => { Name => 'PF31OriginalDecisionData', %convPFn },
- );
- # 1D personal function values (ref PH)
- %Image::ExifTool::CanonCustom::PersonalFuncValues = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
- WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
- CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
- WRITABLE => 1,
- FORMAT => 'int16u',
- FIRST_ENTRY => 1,
- 1 => 'PF1Value',
- 2 => 'PF2Value',
- 3 => 'PF3Value',
- 4 => {
- Name => 'PF4ExposureTimeMin',
- RawConv => '$val > 0 ? $val : 0',
- ValueConv => 'exp(-Image::ExifTool::Canon::CanonEv($val*4)*log(2))*1000/8',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(-log($val*8/1000)/log(2))/4',
- PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },
- 5 => {
- Name => 'PF4ExposureTimeMax',
- RawConv => '$val > 0 ? $val : 0',
- ValueConv => 'exp(-Image::ExifTool::Canon::CanonEv($val*4)*log(2))*1000/8',
- ValueConvInv => 'Image::ExifTool::Canon::CanonEvInv(-log($val*8/1000)/log(2))/4',
- PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
- PrintConvInv => 'Image::ExifTool::Exif::ConvertFraction($val)',
- },
- 6 => {
- Name => 'PF5ApertureMin',
- RawConv => '$val > 0 ? $val : 0',
- ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val*4-32)*log(2)/2)',
- ValueConvInv => '(Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))+32)/4',
- PrintConv => 'sprintf("%.2g",$val)',
- PrintConvInv => '$val',
- },
- 7 => {
- Name => 'PF5ApertureMax',
- RawConv => '$val > 0 ? $val : 0',
- ValueConv => 'exp(Image::ExifTool::Canon::CanonEv($val*4-32)*log(2)/2)',
- ValueConvInv => '(Image::ExifTool::Canon::CanonEvInv(log($val)*2/log(2))+32)/4',
- PrintConv => 'sprintf("%.2g",$val)',
- PrintConvInv => '$val',
- },
- 8 => 'PF8BracketShots',
- 9 => 'PF19ShootingSpeedLow',
- 10 => 'PF19ShootingSpeedHigh',
- 11 => 'PF20MaxContinousShots',
- 12 => 'PF23ShutterButtonTime',
- 13 => 'PF23FELockTime',
- 14 => 'PF23PostReleaseTime',
- 15 => 'PF25AEMode',
- 16 => 'PF25MeteringMode',
- 17 => 'PF25DriveMode',
- 18 => 'PF25AFMode',
- 19 => 'PF25AFPointSel',
- 20 => 'PF25ImageSize',
- 21 => 'PF25WBMode',
- 22 => 'PF25Parameters',
- 23 => 'PF25ColorMatrix',
- 24 => 'PF27Value',
- );
- # Custom functions used by the 1D Mark III and later models (ref PH)
- %Image::ExifTool::CanonCustom::Functions2 = (
- GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
- PROCESS_PROC => \&ProcessCanonCustom2,
- CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
- WRITE_PROC => \&WriteCanonCustom2,
- WRITABLE => 'int32s',
- NOTES => q{
- Beginning with the EOS 1D Mark III, Canon finally created a set of custom
- function tags which are (reasonably) consistent across models. The EOS 1D
- Mark III has 57 custom function tags divided into four main groups: 1.
- Exposure (0x0101-0x010f), 2. Image (0x0201-0x0203), Flash Exposure
- (0x0304-0x0306) and Display (0x0407-0x0409), 3. Auto Focus (0x0501-0x050e)
- and Drive (0x060f-0x0611), and 4. Operation (0x0701-0x070a) and Others
- (0x080b-0x0810). The table below lists tags used by the EOS 1D Mark III, as
- well as newer tags and values added by later models.
- },
- # grouped in 4 groups:
- # 1) Exposure
- 0x0101 => [
- {
- Name => 'ExposureLevelIncrements',
- Condition => '$$self{Model} =~ /\b1Ds?\b/',
- Notes => '1DmkIII and 1DmkIV',
- PrintConv => {
- 0 => '1/3-stop set, 1/3-stop comp.',
- 1 => '1-stop set, 1/3-stop comp.',
- 2 => '1/2-stop set, 1/2-stop comp.',
- },
- },
- {
- Name => 'ExposureLevelIncrements',
- Notes => 'other models',
- PrintConv => {
- 0 => '1/3 Stop',
- 1 => '1/2 Stop',
- },
- },
- ],
- 0x0102 => {
- Name => 'ISOSpeedIncrements',
- PrintConv => {
- 0 => '1/3 Stop',
- 1 => '1 Stop',
- },
- },
- 0x0103 => [
- {
- Name => 'ISOSpeedRange',
- Condition => '$$self{Model} =~ /\b1D/',
- Notes => '1DmkIII and 1DmkIV',
- Count => 3,
- # (this decoding may not be valid for CR2 images?)
- ValueConv => [
- undef,
- # this may also be set to "H" (Hi6400) -- is this the -1 value I see? - PH
- '$val < 2 ? $val : ($val < 1000 ? exp(($val/8-9)*log(2))*100 : 0)', # (educated guess)
- # this may also be set to "L" (Lo50) -- is this the 1 value I see? - PH
- '$val < 2 ? $val : ($val < 1000 ? exp(($val/8-9)*log(2))*100 : 0)', # (educated guess)
- ],
- ValueConvInv => [
- undef,
- '$val < 2 ? $val : int(8*(log($val/100)/log(2)+9) + 0.5)',
- '$val < 2 ? $val : int(8*(log($val/100)/log(2)+9) + 0.5)',
- ],
- PrintConv => [
- \%disableEnable,
- 'sprintf("Max %.0f",$val)',
- 'sprintf("Min %.0f",$val)',
- ],
- PrintConvInv => [
- undef,
- '$val=~/(-?[\d.]+)/ ? $1 : 0',
- '$val=~/(-?[\d.]+)/ ? $1 : 0',
- ],
- },
- {
- Name => 'ISOExpansion',
- Notes => 'other models',
- PrintConv => \%offOn,
- },
- ],
- 0x0104 => {
- Name => 'AEBAutoCancel',
- PrintConv => \%onOff,
- },
- 0x0105 => {
- Name => 'AEBSequence',
- Notes => 'value of 2 not used by 40D, 50D, 60D, 5DmkII and 7D',
- PrintConv => {
- 0 => '0,-,+',
- 1 => '-,0,+',
- 2 => '+,0,-',
- },
- },
- 0x0106 => [{
- Name => 'AEBShotCount',
- Condition => '$count == 1',
- Notes => 'one value for some models...',
- PrintConv => {
- 0 => '3 shots',
- 1 => '2 shots',
- 2 => '5 shots',
- 3 => '7 shots',
- },
- },{
- Name => 'AEBShotCount',
- Count => 2,
- Notes => 'two values for others',
- PrintConv => {
- '3 0' => '3 shots',
- '2 1' => '2 shots',
- '5 2' => '5 shots',
- '7 3' => '7 shots',
- },
- }],
- 0x0107 => {
- Name => 'SpotMeterLinkToAFPoint',
- PrintConv => {
- 0 => 'Disable (use center AF point)',
- 1 => 'Enable (use active AF point)',
- },
- },
- 0x0108 => {
- Name => 'SafetyShift',
- Notes => 'value of 2 not used by 40D, 50D, 60D, 5DmkII and 7D',
- PrintConv => {
- 0 => 'Disable',
- 1 => 'Enable (Tv/Av)',
- 2 => 'Enable (ISO speed)',
- },
- },
- 0x0109 => {
- Name => 'UsableShootingModes',
- Count => 2,
- PrintConv => [
- \%disableEnable,
- 'sprintf("Flags 0x%x",$val)', # (M, Tv, Av, P, Bulb)
- ],
- PrintConvInv => [
- undef,
- '$val=~/0x([\dA-F]+)/i ? hex($1) : undef',
- ],
- },
- 0x010a => {
- Name => 'UsableMeteringModes',
- Count => 2,
- PrintConv => [
- \%disableEnable,
- 'sprintf("Flags 0x%x",$val)', # (evaluative,partial,spot,center-weighted average)
- ],
- PrintConvInv => [
- undef,
- '$val=~/0x([\dA-F]+)/i ? hex($1) : undef',
- ],
- },
- 0x010b => {
- Name => 'ExposureModeInManual',
- PrintConv => {
- 0 => 'Specified metering mode',
- 1 => 'Evaluative metering',
- 2 => 'Partial metering',
- 3 => 'Spot metering',
- 4 => 'Center-weighted average',
- },
- },
- 0x010c => {
- Name => 'ShutterSpeedRange',
- Count => 3,
- ValueConv => [
- undef,
- 'exp(-($val/8-7)*log(2))',
- 'exp(-($val/8-7)*log(2))',
- ],
- ValueConvInv => [
- undef,
- 'int(-8*(log($val)/log(2)-7) + 0.5)',
- 'int(-8*(log($val)/log(2)-7) + 0.5)',
- ],
- PrintConv => [
- \%disableEnable,
- '"Hi " . Image::ExifTool::Exif::PrintExposureTime($val)',
- '"Lo " . Image::ExifTool::Exif::PrintExposureTime($val)',
- ],
- PrintConvInv => [
- undef,
- '$val=~m{([\d./]+)} ? eval $1 : 0',
- '$val=~m{([\d./]+)} ? eval $1 : 0',
- ],
- },
- 0x010d => {
- Name => 'ApertureRange',
- Count => 3,
- ValueConv => [
- undef,
- 'exp(($val/8-1)*log(2)/2)',
- 'exp(($val/8-1)*log(2)/2)',
- ],
- ValueConvInv => [
- undef,
- 'int(8*(log($val)*2/log(2)+1) + 0.5)',
- 'int(8*(log($val)*2/log(2)+1) + 0.5)',
- ],
- PrintConv => [
- \%disableEnable,
- 'sprintf("Closed %.2g",$val)',
- 'sprintf("Open %.2g",$val)',
- ],
- PrintConvInv => [
- undef,
- '$val=~/([\d.]+)/ ? $1 : 0',
- '$val=~/([\d.]+)/ ? $1 : 0',
- ],
- },
- 0x010e => {
- Name => 'ApplyShootingMeteringMode',
- Count => 8,
- PrintConv => [ \%disableEnable ],
- },
- 0x010f => [
- {
- Name => 'FlashSyncSpeedAv',
- Condition => '$$self{Model} =~ /\b(40D|1Ds Mark III)\b/',
- Notes => '40D and 1Ds Mark III',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/250 Fixed',
- },
- },
- {
- Name => 'FlashSyncSpeedAv',
- Condition => '$$self{Model} =~ /\b(50D|60D|7D)\b/',
- Notes => '50D, 60D and 7D',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/250-1/60 Auto',
- 2 => '1/250 Fixed',
- },
- },
- {
- Name => 'FlashSyncSpeedAv',
- Condition => '$$self{Model} =~ /\b(450D|XSi|Kiss X2|1000D|XS|Kiss F)\b/',
- Notes => '450D and 1000D',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/200 Fixed',
- },
- },
- {
- Name => 'FlashSyncSpeedAv',
- Condition => '$$self{Model} =~ /\bEOS-1Ds? Mark III\b/',
- Notes => '1D Mark III and 1Ds Mark III',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/300 Fixed',
- },
- },
- {
- Name => 'FlashSyncSpeedAv',
- Condition => '$$self{Model} =~ /\bEOS-1D Mark IV\b/',
- Notes => '1D Mark IV',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/300-1/60 Auto',
- 2 => '1/300 Fixed',
- },
- },
- {
- Name => 'FlashSyncSpeedAv',
- Notes => '5D Mark II, 5D Mark III, 500D, 550D, 600D and 1100D',
- PrintConv => {
- 0 => 'Auto',
- 1 => '1/200-1/60 Auto',
- 2 => '1/200 Fixed',
- },
- },
- ],
- 0x0110 => { # new for 1DmkIV
- Name => 'AEMicroadjustment',
- Count => 3,
- PrintConv => [ \%disableEnable ],
- },
- 0x0111 => { # new for 1DmkIV
- Name => 'FEMicroadjustment',
- Count => 3,
- PrintConv => [ \%disableEnable ],
- },
- 0x0112 => { # (5DS)
- Name => 'SameExposureForNewAperture',
- PrintConv => {
- 0 => 'Disable',
- 1 => 'ISO Speed',
- 2 => 'Shutter Speed',
- },
- },
- #### 2a) Image
- 0x0201 => {
- Name => 'LongExposureNoiseReduction',
- PrintConv => {
- 0 => 'Off',
- 1 => 'Auto',
- 2 => 'On',
- },
- },
- 0x0202 => [
- {
- Name => 'HighISONoiseReduction',
- Condition => q{
- $$self{Model} =~ /\b(50D|60D|5D Mark II|7D|500D|T1i|Kiss X3|550D|T2i|Kiss X4)\b/ or
- $$self{Model} =~ /\b(600D|T3i|Kiss X5|1100D|T3|Kiss X50)\b/
- },
- Notes => '50D, 60D, 500D, 550D, 600D, 1100D, 5DmkII and 7D',
- PrintConv => {
- 0 => 'Standard',
- 1 => 'Low',
- 2 => 'Strong',
- 3 => 'Off',
- },
- },
- {
- Name => 'HighISONoiseReduction',
- Notes => 'other models',
- PrintConv => \%offOn,
- },
- ],
- 0x0203 => {
- Name => 'HighlightTonePriority',
- PrintConv => \%disableEnable
- },
- 0x0204 => [
- {
- Name => 'AutoLightingOptimizer',
- Condition => '$$self{Model} =~ /\b(50D|5D Mark II|500D|T1i|Kiss X3|1D Mark IV)\b/',
- Notes => '50D, 500D, 5DmkII and 1DmkIV',
- PrintConv => {
- 0 => 'Standard',
- 1 => 'Low',
- 2 => 'Strong',
- 3 => 'Disable',
- },
- },
- {
- Name => 'AutoLightingOptimizer',
- Notes => 'other models',
- PrintConv => \%enableDisable,
- },
- ],
- # 0x0205 - Added in 5DmkII firmware update
- #### 2b) Flash exposure
- 0x0304 => {
- Name => 'ETTLII',
- Description => 'E-TTL II',
- PrintConv => {
- 0 => 'Evaluative',
- 1 => 'Average',
- },
- },
- 0x0305 => {
- Name => 'ShutterCurtainSync',
- PrintConv => {
- 0 => '1st-curtain sync',
- 1 => '2nd-curtain sync',
- },
- },
- 0x0306 => {
- Name => 'FlashFiring',
- PrintConv => {
- 0 => 'Fires',
- 1 => 'Does not fire',
- },
- },
- #### 2c) Display
- 0x0407 => {
- Name => 'ViewInfoDuringExposure',
- PrintConv => \%disableEnable,
- },
- 0x0408 => {
- Name => 'LCDIlluminationDuringBulb',
- PrintConv => \%offOn,
- },
- 0x0409 => [
- {
- Name => 'InfoButtonWhenShooting',
- Condition => '$$self{Model} =~ /\b1Ds? Mark III\b/',
- Notes => '1D Mark III',
- PrintConv => {
- 0 => 'Displays camera settings',
- 1 => 'Displays shooting functions',
- },
- },
- {
- Name => 'InfoButtonWhenShooting',
- Notes => '1D Mark IV',
- PrintConv => {
- # reversed from earlier models. grr...
- 0 => 'Displays shooting functions',
- 1 => 'Displays camera settings',
- },
- },
- ],
- 0x040a => { # new for 5DmkIII
- Name => 'ViewfinderWarnings',
- PrintConv => { BITMASK => { # (NC)
- 0 => 'Monochrome', # (have seen for: 5DmkII, 6D)
- 1 => 'WB corrected', # (have seen for: 5DmkII, 6D)
- 2 => 'One-touch image quality', # (have seen for: 5DmkII; doesn't exist for 6D)
- 3 => 'ISO expansion', # (have seen for: 5DmkII)
- 4 => 'Spot metering', # (have seen for: 5DmkII, 6D)
- }},
- },
- 0x040b => { # new for 5DmkIII
- Name => 'LVShootingAreaDisplay',
- PrintConv => {
- 0 => 'Masked',
- 1 => 'Outlined',
- },
- },
- 0x040c => { # (7DmkII)
- Name => 'LVShootingAreaDisplay',
- PrintConv => {
- 0 => 'Masked',
- 1 => 'Outlined',
- },
- },
- #### 3a) Auto focus
- 0x0501 => {
- Name => 'USMLensElectronicMF',
- PrintConv => {
- 0 => 'Enable after one-shot AF',
- 1 => 'Disable after one-shot AF',
- 2 => 'Disable in AF mode',
- },
- },
- 0x0502 => {
- Name => 'AIServoTrackingSensitivity',
- PrintConv => {
- -2 => 'Slow', # (Locked on -2 for 6D)
- -1 => 'Medium Slow', # (Locked on -1 for 6D)
- 0 => 'Standard',
- 1 => 'Medium Fast', # (Responsive +1 for 6D)
- 2 => 'Fast', # (Responsive +2 for 6D)
- },
- },
- 0x0503 => {
- Name => 'AIServoImagePriority',
- PrintConv => {
- 0 => '1: AF, 2: Tracking',
- 1 => '1: AF, 2: Drive speed',
- 2 => '1: Release, 2: Drive speed',
- 3 => '1: Release, 2: Tracking', # 7D/1DmkIV
- },
- },
- 0x0504 => {
- Name => 'AIServoTrackingMethod',
- PrintConv => {
- 0 => 'Main focus point priority',
- 1 => 'Continuous AF track priority',
- },
- },
- 0x0505 => {
- Name => 'LensDriveNoAF',
- PrintConv => {
- 0 => 'Focus search on',
- 1 => 'Focus search off',
- },
- },
- 0x0506 => {
- Name => 'LensAFStopButton',
- Notes => 'value of 6 not used by 40D, 50D and 5DmkII',
- PrintConv => {
- 0 => 'AF stop',
- 1 => 'AF start',
- 2 => 'AE lock',
- 3 => 'AF point: M->Auto/Auto->ctr',
- 4 => 'One Shot <-> AI servo',
- 5 => 'IS start',
- 6 => 'Switch to registered AF point',
- 7 => 'Spot AF', # 1DmkIV
- },
- },
- 0x0507 => {
- Name => 'AFMicroadjustment',
- Count => 5,
- PrintConv => [
- {
- 0 => 'Disable',
- 1 => 'Adjust all by same amount',
- 2 => 'Adjust by lens',
- },
- # DECODE OTHER VALUES
- ],
- },
- 0x0508 => [
- {
- Name => 'AFPointAreaExpansion',
- Condition => '$$self{Model} =~ /\b5D Mark II\b/',
- Notes => '5D Mark II',
- PrintConv => {
- 0 => 'Disable',
- 1 => 'Enable',
- },
- },
- {
- Name => 'AFPointAreaExpansion',
- Condition => '$$self{Model} =~ /\b1Ds Mark III\b/',
- Notes => '1Ds Mark III',
- PrintConv => {
- 0 => 'Disable',
- 1 => 'Enable (left/right Assist AF points)',
- 2 => 'Enable (surrounding Assist AF points)',
- },
- },
- {
- Name => 'AFPointAreaExpansion',
- Notes => 'other models',
- PrintConv => {
- 0 => 'Disable',
- 1 => 'Left/right AF points',
- 2 => 'Surrounding AF points',
- 3 => 'All 45 points area', # 1DmkIV
- },
- },
- ],
- 0x0509 => [
- {
- Name => 'SelectableAFPoint',
- Condition => '$$self{Model} =~ /\b1D Mark IV\b/',
- Notes => '1D Mark IV',
- PrintConv => {
- 0 => '45 points',
- 1 => '19 points',
- 2 => '11 points',
- 3 => 'Inner 9 points',
- 4 => 'Outer 9 points',
- },
- },
- {
- Name => 'SelectableAFPoint',
- Notes => 'other models',
- PrintConv => {
- 0 => '19 points',
- 1 => 'Inner 9 points',
- 2 => 'Outer 9 points',
- 3 => '19 Points, Multi-controller selectable', #4
- 4 => 'Inner 9 Points, Multi-controller selectable', #4
- 5 => 'Outer 9 Points, Multi-controller selectable', #4
- },
- },
- ],
- 0x050a => [
- {
- Name => 'SwitchToRegisteredAFPoint',
- Condition => '$$self{Model} =~ /\b1D Mark IV\b/',
- Notes => '1D Mark IV',
- PrintConv => {
- 0 => 'Disable',
- 1 => 'Switch with multi-controller',
- 2 => 'Only while AEL is pressed',
- },
- },
- {
- Name => 'SwitchToRegisteredAFPoint',
- Notes => 'other models',
- PrintConv => \%disableEnable,
- },
- ],
- 0x050b => {
- Name => 'AFPointAutoSelection',
- PrintConv => {
- 0 => 'Control-direct:disable/Main:enable',
- 1 => 'Control-direct:disable/Main:disable',
- 2 => 'Control-direct:enable/Main:enable',
- },
- },
- 0x050c => [
- {
- Name => 'AFPointDisplayDuringFocus',
- Condition => '$$self{Model} =~ /\b1D\b/',
- Notes => '1D models',
- PrintConv => {
- 0 => 'On',
- 1 => 'Off',
- 2 => 'On (when focus achieved)',
- },
- },
- {
- Name => 'AFPointDisplayDuringFocus',
- Notes => 'other models', # (7D, 70D, 750D, 760D)
- PrintConv => {
- 0 => 'Selected (constant)',
- 1 => 'All (constant)',
- 2 => 'Selected (pre-AF, focused)',
- 3 => 'Selected (focused)',
- 4 => 'Disable display',
- },
- },
- ],
- 0x050d => {
- Name => 'AFPointBrightness',
- PrintConv => {
- 0 => 'Normal',
- 1 => 'Brighter',
- },
- },
- 0x050e => [
- {
- Name => 'AFAssistBeam',
- Condition => '$$self{Model} =~ /\b(1D Mark IV|6D)\b/',
- Notes => '1D Mark IV and 6D',
- PrintConv => {
- 0 => 'Emits',
- 1 => 'Does not emit',
- 2 => 'IR AF assist beam only',
- },
- },
- {
- Name => 'AFAssistBeam',
- Notes => 'other models; values 2-3 not used by 1DmkIII or 5DmkII, value 3 new for 7D',
- PrintConv => {
- 0 => 'Emits',
- 1 => 'Does not emit',
- 2 => 'Only ext. flash emits',
- 3 => 'IR AF assist beam only', # new for 7D
- },
- },
- ],
- 0x050f => [ # new for 40D
- {
- Name => 'AFPointSelectionMethod',
- Condition => '$$self{Model} !~ /\b60D\b/',
- Notes => '40D, 50D and 5DmkII',
- PrintConv => {
- 0 => 'Normal',
- 1 => 'Multi-controller direct',
- 2 => 'Quick Control Dial direct',
- },
- },
- {
- Name => 'AFPointSelectionMethod',
- Notes => '60D',
- PrintConv => {
- 0 => 'AF point button: Activate AF Sel; Rear dial: Select AF points',
- 1 => 'AF point button: Auto selection; Rear dial: Manual selection',
- },
- },
- ],
- 0x0510 => [ # new for 40D
- {
- Name => 'VFDisplayIllumination', # (7D quirk, or decoded incorrectly?)
- Condition => '$$self{Model} =~ /\b7D\b/',
- Notes => '7D',
- PrintConv => {
- 0 => 'Auto',
- 1 => 'Enable',
- 2 => 'Disable',
- },
- },
- {
- Name => 'SuperimposedDisplay',
- Notes => 'other models',
- PrintConv => \%onOff,
- },
- ],
- 0x0511 => [ # new for 40D
- {
- Name => 'AFDuringLiveView',
- Condition => '$$self{Model} =~ /\b40D\b/',
- Notes => '40D',
- PrintConv => \%disableEnable,
- },
- {
- Name => 'AFDuringLiveView',
- Notes => '450D and 1000D',
- PrintConv => {
- 0 => 'Disable',
- 1 => 'Quick mode',
- 2 => 'Live mode',
- },
- },
- ],
- 0x0512 => { # new for 7D
- Name => 'SelectAFAreaSelectMode',
- PrintConv => [
- {
- 0 => 'Disable',
- 1 => 'Enable',
- 2 => 'Register',
- 3 => 'Select AF-modes',
- },
- 'sprintf("Flags 0x%x",$val)', # (70D=Manual 1pt,Manual zone,Auto 19pt)
- ],
- PrintConvInv => [
- undef,
- '$val=~/0x([\dA-F]+)/i ? hex($1) : undef',
- ],
- },
- 0x0513 => { # new for 7D
- Name => 'ManualAFPointSelectPattern',
- PrintConv => {
- 0 => 'Stops at AF area edges',
- 1 => 'Continuous',
- },
- },
- 0x0514 => { # new for 7D
- Name => 'DisplayAllAFPoints',
- PrintConv => \%enableDisable,
- },
- 0x0515 => { # new for 7D
- Name => 'FocusDisplayAIServoAndMF',
- PrintConv => \%enableDisable,
- },
- 0x0516 => { # new for 7D and 1DmkIV
- Name => 'OrientationLinkedAFPoint',
- PrintConv => {
- 0 => 'Same for vertical and horizontal',
- 1 => 'Select different AF points',
- },
- },
- 0x0517 => { # new for 1DmkIV
- Name => 'MultiControllerWhileMetering',
- PrintConv => {
- 0 => 'Off',
- 1 => 'AF point selection',
- },
- },
- 0x0518 => { # new for 6D
- Name => 'AccelerationTracking',
- },
- 0x0519 => { # new for 6D
- Name => 'AIServoFirstImagePriority',
- PrintConv => { # (NC)
- -1 => 'Release priority',
- 0 => 'Equal priority',
- 1 => 'Focus priority',
- },
- },
- 0x051a => { # new for 6D
- Name => 'AIServoSecondImagePriority',
- PrintConv => { # (NC)
- -1 => 'Shooting speed priority',
- 0 => 'Equal priority',
- 1 => 'Focus priority',
- },
- },
- 0x051b => { # (70D)
- Name => 'AFAreaSelectMethod',
- PrintConv => {
- 0 => 'AF area selection button',
- 1 => 'Main dial',
- },
- },
- 0x051c => { # (750D)
- Name => 'AutoAFPointColorTracking',
- PrintConv => {
- 0 => 'On-Shot AF only',
- 1 => 'Disable',
- },
- },
- 0x051d => { # (750D/760D)
- Name => 'VFDisplayIllumination',
- PrintConv => {
- 0 => 'Auto',
- 1 => 'Enable',
- 2 => 'Disable',
- },
- },
- #### 3b) Drive
- 0x060f => {
- Name => 'MirrorLockup',
- Notes => 'value of 2 not used by some models',
- PrintConv => {
- 0 => 'Disable',
- 1 => 'Enable',
- 2 => 'Enable: Down with Set',
- },
- },
- 0x0610 => {
- Name => 'ContinuousShootingSpeed',
- Count => 3,
- PrintConv => [
- \%disableEnable,
- '"Hi $val"',
- '"Lo $val"',
- ],
- PrintConvInv => [
- undef,
- '$val=~/(\d+)/ ? $1 : 0',
- '$val=~/(\d+)/ ? $1 : 0',
- ],
- },
- 0x0611 => {
- Name => 'ContinuousShotLimit',
- Count => 2,
- PrintConv => [
- \%disableEnable,
- '"$val shots"',
- ],
- PrintConvInv => [
- undef,
- '$val=~/(\d+)/ ? $1 : 0',
- ],
- },
- 0x0612 => { # (1DX)
- Name => 'RestrictDriveModes',
- Count => 2,
- PrintConv => [
- \%disableEnable,
- 'sprintf("Flags 0x%x",$val)', # (Single,Cont Hi,Cont Lo,Timer 10,Timer 2,Silent,Super Hi)
- ],
- PrintConvInv => [
- undef,
- '$val=~/0x([\dA-F]+)/i ? hex($1) : undef',
- ],
- },
- #### 4a) Operation
- 0x0701 => [
- {
- Name => 'Shutter-AELock',
- Condition => q{
- $$self{Model} =~ /\b(1000D|XS|Kiss F|500D|T1i|Kiss X3|550D|T2i|Kiss X4)\b/ or
- $$self{Model} =~ /\b(600D|T3i|Kiss X5|1100D|T3|Kiss X50)\b/
- },
- Notes => '500D, 550D, 600D, 1000D and 1100D',
- PrintConv => {
- 0 => 'AF/AE lock',
- 1 => 'AE lock/AF',
- 2 => 'AF/AF lock, No AE lock',
- 3 => 'AE/AF, No AE lock',
- },
- },
- {
- Name => 'AFAndMeteringButtons',
- Condition => '$$self{Model} =~ /\b60D\b/',
- Notes => '60D',
- PrintConv => {
- 0 => 'Metering start',
- 1 => 'Metering + AF start',
- 2 => 'AE lock',
- 3 => 'AF stop',
- 4 => 'No function',
- },
- },
- {
- Name => 'ShutterButtonAFOnButton',
- Notes => 'other models',
- PrintConv => {
- 0 => 'Metering + AF start',
- 1 => 'Metering + AF start/AF stop',
- 2 => 'Metering start/Meter + AF start',
- 3 => 'AE lock/Metering + AF start',
- 4 => 'Metering + AF start/disable',
- },
- },
- ],
- 0x0702 => {
- Name => 'AFOnAELockButtonSwitch',
- PrintConv => \%disableEnable,
- },
- 0x0703 => {
- Name => 'QuickControlDialInMeter',
- PrintConv => {
- 0 => 'Exposure comp/Aperture',
- 1 => 'AF point selection',
- 2 => 'ISO speed',
- 3 => 'AF point selection swapped with Exposure comp', #4
- 4 => 'ISO speed swapped with Exposure comp', #4
- },
- },
- 0x0704 => [
- {
- Name => 'SetButtonWhenShooting',
- Condition => '$$self{Model} =~ /\b(40D|50D|5D Mark II)\b/',
- Notes => '40D, 50D and 5DmkII; value of 5 is new for 50D, and 6 is new for 5DmkII',
- PrintConv => {
- 0 => 'Normal (disabled)',
- 1 => 'Image quality',
- 2 => 'Picture style',
- 3 => 'Menu display',
- 4 => 'Image playback',
- 5 => 'Quick control screen', #50D
- 6 => 'Record movie (Live View)', #5DmkII
- },
- },
- {
- Name => 'SetButtonWhenShooting',
- Condition => '$$self{Model} =~ /\b60D\b/',
- Notes => '60D',
- PrintConv => {
- 0 => 'Normal (disabled)',
- 1 => 'Image quality',
- 2 => 'Picture style',
- 3 => 'White balance',
- 4 => 'Flash exposure compensation',
- 5 => 'Viewfinder leveling gauge',
- },
- },
- {
- Name => 'SetButtonWhenShooting',
- Condition => '$$self{Model} =~ /\b(450D|XSi|Kiss X2|550D|T2i|Kiss X4|600D|T3i|Kiss X5)\b/',
- Notes => '450D, 550D and 600D; value of 5 is new for 550D',
- PrintConv => {
- 0 => 'Normal (disabled)',
- 1 => 'Image quality',
- 2 => 'Flash exposure compensation',
- 3 => 'LCD monitor On/Off',
- 4 => 'Menu display',
- 5 => 'ISO speed',
- },
- },
- {
- Name => 'SetButtonWhenShooting',
- Condition => '$$self{Model} =~ /\b(1100D|T3|Kiss X50)\b/',
- Notes => '1100D',
- PrintConv => {
- 0 => 'Normal (disabled)',
- 1 => 'Image quality',
- 2 => 'Flash exposure compensation',
- 3 => 'LCD monitor On/Off',
- 4 => 'Menu display',
- 5 => 'Depth-of-field preview',
- },
- },
- {
- Name => 'SetButtonWhenShooting',
- Condition => '$$self{Model} =~ /\b(1000D|XS|Kiss F)\b/',
- Notes => '1000D',
- PrintConv => {
- 0 => 'LCD monitor On/Off',
- 1 => 'Image quality',
- 2 => 'Flash exposure compensation',
- 3 => 'Menu display',
- 4 => 'Disabled',
- },
- },
- {
- Name => 'SetButtonWhenShooting',
- Condition => '$$self{Model} =~ /\b(500D|T1i|Kiss X3)\b/',
- Notes => '500D',
- PrintConv => {
- 0 => 'Quick control screen',
- 1 => 'Image quality',
- 2 => 'Flash exposure compensation',
- 3 => 'LCD monitor On/Off',
- 4 => 'Menu display',
- 5 => 'Disabled',
- },
- },
- {
- Name => 'SetButtonWhenShooting',
- Notes => '1DmkIII and 1DmkIV',
- PrintConv => {
- 0 => 'Normal (disabled)',
- 1 => 'White balance',
- 2 => 'Image size',
- 3 => 'ISO speed',
- 4 => 'Picture style',
- 5 => 'Record func. + media/folder',
- 6 => 'Menu display',
- 7 => 'Image playback',
- },
- },
- ],
- 0x0705 => {
- Name => 'ManualTv',
- Description => 'Manual Tv/Av For M',
- PrintConv => {
- 0 => 'Tv=Main/Av=Control',
- 1 => 'Tv=Control/Av=Main',
- },
- },
- 0x0706 => {
- Name => 'DialDirectionTvAv',
- PrintConv => {
- 0 => 'Normal',
- 1 => 'Reversed',
- },
- },
- 0x0707 => {
- Name => 'AvSettingWithoutLens',
- PrintConv => \%disableEnable,
- },
- 0x0708 => {
- Name => 'WBMediaImageSizeSetting',
- PrintConv => {
- 0 => 'Rear LCD panel',
- 1 => 'LCD monitor',
- 2 => 'Off (disable button)', # (1DX)
- },
- },
- 0x0709 => {
- Name => 'LockMicrophoneButton',
- PrintConv => [{
- # called "sound" in 1DmkIII manual, and "memo" in 1DmkIV manual
- 0 => 'Protect (hold:record memo)',
- 1 => 'Record memo (protect:disable)',
- 2 => 'Play memo (hold:record memo)', # new with 1DmkIV
- 3 => 'Rating (protect/memo:disable)', # new with 1DX
- }],
- # (not sure what the 2nd number is -- new for 1DX. Seen a value of 31.
- # Memo quality may be set to 48kHz or 8kHz through another option that
- # doesn't seem to be stored separately -- is this it?)
- },
- 0x070a => {
- Name => 'ButtonFunctionControlOff',
- PrintConv => {
- 0 => 'Normal (enable)',
- 1 => 'Disable main, Control, Multi-control',
- },
- },
- 0x070b => { # 50D (also, 5DmkII writes this but it isn't in user guide)
- Name => 'AssignFuncButton',
- PrintConv => {
- 0 => 'LCD brightness',
- 1 => 'Image quality',
- 2 => 'Exposure comp./AEB setting',
- 3 => 'Image jump with main dial',
- 4 => 'Live view function settings',
- },
- },
- 0x070c => { # new for 7D
- Name => 'CustomControls',
- # (too much stuff to decode)
- },
- 0x070d => { # new for 1DmkIV
- Name => 'StartMovieShooting',
- PrintConv => {
- 0 => 'Default (from LV)',
- 1 => 'Quick start (FEL button)',
- },
- },
- 0x070e => { # new for 1100D
- Name => 'FlashButtonFunction',
- PrintConv => {
- 0 => 'Raise built-in flash',
- 1 => 'ISO speed',
- },
- },
- 0x070f => { # new for 5DmkIII
- Name => 'MultiFunctionLock',
- PrintConv => [
- { # (NC)
- 0 => 'Off',
- 1 => 'On', # "On (main dial)" for 750D/760D?
- 2 => 'On (quick control dial)', # (NC)
- 3 => 'On (main dial and quick control dial)', # (NC)
- },
- { BITMASK => { # (NC)
- 0 => 'Main dial',
- 1 => 'Quick control dial',
- 2 => 'Multi-controller',
- }},
- ],
- },
- 0x710 => { # (M)
- Name => 'TrashButtonFunction',
- PrintConv => {
- 0 => 'Normal (set center AF point)',
- 1 => 'Depth-of-field preview',
- },
- },
- 0x711 => { # (M)
- Name => 'ShutterReleaseWithoutLens',
- PrintConv => \%disableEnable,
- },
- #### 4b) Others
- 0x080b => [
- {
- Name => 'FocusingScreen',
- Condition => '$$self{Model} =~ /\b(40D|50D|60D)\b/',
- Notes => '40D, 50D and 60D',
- PrintConv => {
- 0 => 'Ef-A',
- 1 => 'Ef-D',
- 2 => 'Ef-S',
- },
- },
- {
- Name => 'FocusingScreen',
- Condition => '$$self{Model} =~ /\b5D Mark II\b/',
- Notes => '5D Mark II',
- PrintConv => {
- 0 => 'Eg-A',
- 1 => 'Eg-D',
- 2 => 'Eg-S',
- },
- },
- {
- Name => 'FocusingScreen',
- Condition => '$$self{Model} =~ /\b6D\b/',
- Notes => '6D',
- PrintConv => {
- 0 => 'Eg-A II',
- 1 => 'Eg-D',
- 2 => 'Eg-S',
- },
- },
- {
- Name => 'FocusingScreen',
- Condition => '$$self{Model} =~ /\b7D Mark II\b/',
- Notes => '7D Mark II',
- PrintConv => {
- 0 => 'Eh-A',
- 1 => 'Eh-S',
- },
- },
- {
- Name => 'FocusingScreen',
- Condition => '$$self{Model} =~ /\b1D X\b/',
- Notes => '1DX',
- PrintConv => {
- 0 => 'Ec-CV',
- 1 => 'Ec-A,B,D,H,I,L',
- },
- },
- {
- Name => 'FocusingScreen',
- Notes => '1DmkIII, 1DSmkIII and 1DmkIV',
- PrintConv => {
- 0 => 'Ec-CIV',
- 1 => 'Ec-A,B,C,CII,CIII,D,H,I,L',
- 2 => 'Ec-S',
- 3 => 'Ec-N,R',
- },
- },
- ],
- 0x080c => {
- Name => 'TimerLength',
- Count => 4,
- PrintConv => [
- \%disableEnable,
- '"6 s: $val"',
- '"16 s: $val"',
- '"After release: $val"',
- ],
- PrintConvInv => [
- undef,
- '$val=~/(\d+)$/ ? $1 : 0',
- '$val=~/(\d+)$/ ? $1 : 0',
- '$val=~/(\d+)$/ ? $1 : 0',
- ],
- },
- 0x080d => {
- Name => 'ShortReleaseTimeLag',
- PrintConv => \%disableEnable,
- },
- 0x080e => {
- Name => 'AddAspectRatioInfo',
- PrintConv => {
- 0 => 'Off',
- 1 => '6:6',
- 2 => '3:4',
- 3 => '4:5',
- 4 => '6:7',
- 5 => '10:12',
- 6 => '5:7',
- },
- },
- 0x080f => {
- Name => 'AddOriginalDecisionData', # called ("image verification" in 1DmkIV manual)
- PrintConv => \%offOn,
- },
- 0x0810 => {
- Name => 'LiveViewExposureSimulation',
- PrintConv => {
- 0 => 'Disable (LCD auto adjust)',
- 1 => 'Enable (simulates exposure)',
- },
- },
- 0x0811 => {
- Name => 'LCDDisplayAtPowerOn',
- PrintConv => {
- 0 => 'Display',
- 1 => 'Retain power off status',
- },
- },
- 0x0812 => { # (1DX)
- Name => 'MemoAudioQuality',
- PrintConv => {
- 0 => 'High (48 kHz)',
- 1 => 'Low (8 kHz)',
- },
- },
- 0x0813 => { # (5DmkIII)
- Name => 'DefaultEraseOption',
- PrintConv => {
- 0 => 'Cancel selected',
- 1 => 'Erase selected',
- },
- },
- 0x0814 => { # (5DS)
- Name => 'RetractLensOnPowerOff',
- PrintConv => \%enableDisable,
- },
- );
- #------------------------------------------------------------------------------
- # Conversion routines
- # Inputs: 0) value to convert
- sub ConvertPfn($)
- {
- my $val = shift;
- return $val ? ($val==1 ? 'On' : "On ($val)") : "Off";
- }
- sub ConvertPfnInv($)
- {
- my $val = shift;
- return $1 if $val =~ /(\d+)/;
- return 1 if $val =~ /on/i;
- return 0 if $val =~ /off/i;
- return undef;
- }
- #------------------------------------------------------------------------------
- # Read/Write Canon custom 2 directory (new for 1D Mark III)
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
- # Returns: 1 on success
- sub ProcessCanonCustom2($$$)
- {
- my ($et, $dirInfo, $tagTablePtr) = @_;
- my $dataPt = $$dirInfo{DataPt};
- my $offset = $$dirInfo{DirStart};
- my $size = $$dirInfo{DirLen};
- my $write = $$dirInfo{Write};
- my $verbose = $et->Options('Verbose');
- my $newTags;
- return 0 if $size < 2;
- # first entry in array must be the size
- my $len = Get16u($dataPt, $offset);
- unless ($len == $size and $len >= 8) {
- $et->Warn('Invalid CanonCustom2 data');
- return 0;
- }
- # get group count
- my $count = Get32u($dataPt, $offset + 4);
- if ($write) {
- $newTags = $et->GetNewTagInfoHash($tagTablePtr);
- $et->VPrint(0, " Rewriting CanonCustom2\n");
- } elsif ($verbose) {
- $et->VerboseDir('CanonCustom2', $count);
- }
- my $pos = $offset + 8;
- my $end = $offset + $size;
- # loop through group records
- for (; $pos<$end; ) {
- last if $pos + 12 > $end;
- my $recNum = Get32u($dataPt, $pos);
- my $recLen = Get32u($dataPt, $pos + 4);
- my $recCount = Get32u($dataPt, $pos + 8);
- last if $recLen < 8; # must be at least 8 bytes for recNum and recLen
- $pos += 12;
- my $recPos = $pos;
- my $recEnd = $pos + $recLen - 8;
- if ($recEnd > $end) {
- $et->Warn('Corrupted CanonCustom2 group');
- return 0;
- }
- if ($verbose and not $write) {
- $et->VerboseDir("CanonCustom2 group $recNum", $recCount);
- }
- my ($i, $num, $tag);
- for ($i=0; $recPos + 8 < $recEnd; ++$i, $recPos+=4*$num) {
- $tag = Get32u($dataPt, $recPos);
- $num = Get32u($dataPt, $recPos + 4);
- $recPos += 8;
- last if $recPos + $num * 4 > $recEnd;
- my $val = ReadValue($dataPt, $recPos, 'int32s', $num, $num * 4);
- if ($write) {
- # write new value
- my $tagInfo = $$newTags{$tag};
- next unless $$newTags{$tag};
- $tagInfo = $et->GetTagInfo($tagTablePtr, $tag, \$val, undef, $num) or next;
- my $nvHash = $et->GetNewValueHash($tagInfo) or next;
- next unless $et->IsOverwriting($nvHash, $val);
- my $newVal = $et->GetNewValue($nvHash);
- next unless defined $newVal; # can't delete from a custom table
- WriteValue($newVal, 'int32s', $num, $dataPt, $recPos);
- $et->VerboseValue("- CanonCustom:$$tagInfo{Name}", $val);
- $et->VerboseValue("+ CanonCustom:$$tagInfo{Name}", $newVal);
- ++$$et{CHANGED};
- } else {
- # save extracted tag
- my $oldInfo = $$tagTablePtr{$tag};
- $et->HandleTag($tagTablePtr, $tag, $val,
- Index => $i,
- Format => 'int32u',
- Count => $num,
- Size => $num * 4,
- );
- my $tagInfo = $$tagTablePtr{$tag};
- # generate properly formatted description if we just added the tag
- if ($tagInfo and not $oldInfo) {
- ($$tagInfo{Description} = $$tagInfo{Name}) =~ tr/_/ /;
- $$tagInfo{Description} =~ s/CanonCustom Functions/Canon Custom Functions /;
- }
- }
- }
- $pos = $recEnd;
- }
- if ($pos != $end) {
- $et->Warn('Possibly corrupted CanonCustom2 data');
- return 0;
- }
- return 1;
- }
- #------------------------------------------------------------------------------
- # Write Canon custom 2 data
- # Inputs: 0) ExifTool object reference, 1) dirInfo hash ref, 2) tag table ref
- # Returns: New custom data block or undefined on error
- sub WriteCanonCustom2($$$)
- {
- my ($et, $dirInfo, $tagTablePtr) = @_;
- $et or return 1; # allow dummy access to autoload this package
- my $dataPt = $$dirInfo{DataPt};
- # edit a copy of the custom function 2 data
- my $buff = substr($$dataPt, $$dirInfo{DirStart}, $$dirInfo{DirLen});
- my %dirInfo = (
- DataPt => \$buff,
- DirStart => 0,
- DirLen => $$dirInfo{DirLen},
- Write => 1,
- );
- ProcessCanonCustom2($et, \%dirInfo, $tagTablePtr) or return undef;
- return $buff;
- }
- #------------------------------------------------------------------------------
- # Process Canon custom directory
- # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
- # Returns: 1 on success
- sub ProcessCanonCustom($$$)
- {
- my ($et, $dirInfo, $tagTablePtr) = @_;
- my $dataPt = $$dirInfo{DataPt};
- my $offset = $$dirInfo{DirStart};
- my $size = $$dirInfo{DirLen};
- my $verbose = $et->Options('Verbose');
- # first entry in array must be the size
- my $len = Get16u($dataPt,$offset);
- unless ($len == $size or ($$et{Model}=~/\bD60\b/ and $len+2 == $size)) {
- $et->Warn("Invalid CanonCustom data");
- return 0;
- }
- $verbose and $et->VerboseDir('CanonCustom', $size/2-1);
- my $pos;
- for ($pos=2; $pos<$size; $pos+=2) {
- # ($pos is position within custom directory)
- my $val = Get16u($dataPt,$offset+$pos);
- my $tag = ($val >> 8);
- $val = ($val & 0xff);
- $et->HandleTag($tagTablePtr, $tag, $val,
- Index => $pos/2-1,
- Format => 'int8u',
- Count => 1,
- Size => 1,
- );
- }
- return 1;
- }
- #------------------------------------------------------------------------------
- # Check new value for Canon custom data block
- # Inputs: 0) ExifTool object reference, 1) tagInfo hash ref, 2) raw value ref
- # Returns: error string or undef (and may modify value) on success
- sub CheckCanonCustom($$$)
- {
- my ($et, $tagInfo, $valPtr) = @_;
- return Image::ExifTool::CheckValue($valPtr, 'int8u');
- }
- #------------------------------------------------------------------------------
- # Write Canon custom data
- # Inputs: 0) ExifTool object reference, 1) dirInfo hash ref, 2) tag table ref
- # Returns: New custom data block or undefined on error
- sub WriteCanonCustom($$$)
- {
- my ($et, $dirInfo, $tagTablePtr) = @_;
- $et or return 1; # allow dummy access to autoload this package
- my $dataPt = $$dirInfo{DataPt};
- my $dirStart = $$dirInfo{DirStart} || 0;
- my $dirLen = $$dirInfo{DirLen} || length($$dataPt) - $dirStart;
- my $dirName = $$dirInfo{DirName};
- my $newData = substr($$dataPt, $dirStart, $dirLen) or return undef;
- $dataPt = \$newData;
- # first entry in array must be the size
- my $len = Get16u($dataPt, 0);
- unless ($len == $dirLen or ($$et{Model}=~/\bD60\b/ and $len+2 == $dirLen)) {
- $et->Warn("Invalid CanonCustom data");
- return undef;
- }
- my $newTags = $et->GetNewTagInfoHash($tagTablePtr);
- my $pos;
- for ($pos=2; $pos<$dirLen; $pos+=2) {
- my $val = Get16u($dataPt, $pos);
- my $tag = ($val >> 8);
- my $tagInfo = $$newTags{$tag};
- next unless $tagInfo;
- my $nvHash = $et->GetNewValueHash($tagInfo);
- $val = ($val & 0xff);
- next unless $et->IsOverwriting($nvHash, $val);
- my $newVal = $et->GetNewValue($nvHash);
- next unless defined $newVal; # can't delete from a custom table
- Set16u(($newVal & 0xff) + ($tag << 8), $dataPt, $pos);
- $et->VerboseValue("- $dirName:$$tagInfo{Name}", $val);
- $et->VerboseValue("+ $dirName:$$tagInfo{Name}", $newVal);
- ++$$et{CHANGED};
- }
- return $newData;
- }
- 1; # end
- __END__
- =head1 NAME
- Image::ExifTool::CanonCustom - Read and Write Canon custom functions
- =head1 SYNOPSIS
- This module is loaded automatically by Image::ExifTool when required.
- =head1 DESCRIPTION
- The Canon custom functions meta information is very specific to the
- camera model, and is found in both the EXIF maker notes and in the
- Canon RAW files. This module contains the definitions necessary for
- Image::ExifTool to read this information.
- =head1 AUTHOR
- Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca)
- This library is free software; you can redistribute it and/or modify it
- under the same terms as Perl itself.
- =head1 REFERENCES
- =over 4
- =item L<http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html>
- =back
- =head1 ACKNOWLEDGEMENTS
- Thanks to Christian Koller for his work in decoding the 20D custom
- functions, Rainer Honle for decoding the 5D custom functions and David
- Pitcher for adding a few undocumented 1DmkIII settings.
- =head1 SEE ALSO
- L<Image::ExifTool::TagNames/Canon Tags>,
- L<Image::ExifTool(3pm)|Image::ExifTool>
- =cut
|