JVC.pm 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #------------------------------------------------------------------------------
  2. # File: JVC.pm
  3. #
  4. # Description: JVC EXIF maker notes tags
  5. #
  6. # Revisions: 12/21/2005 - P. Harvey Created
  7. #------------------------------------------------------------------------------
  8. package Image::ExifTool::JVC;
  9. use strict;
  10. use vars qw($VERSION);
  11. use Image::ExifTool qw(:DataAccess :Utils);
  12. use Image::ExifTool::Exif;
  13. $VERSION = '1.03';
  14. sub ProcessJVCText($$$);
  15. # JVC EXIF-based maker notes
  16. %Image::ExifTool::JVC::Main = (
  17. WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
  18. CHECK_PROC => \&Image::ExifTool::Exif::CheckExif,
  19. GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
  20. NOTES => 'JVC EXIF maker note tags.',
  21. #0x0001 - almost always '2', but '3' for GR-DV700 samples
  22. 0x0002 => { #PH
  23. Name => 'CPUVersions',
  24. # remove trailing nulls/spaces and split at remaining nulls/spaces
  25. ValueConv => '$_=$val; s/(\s*\0)+$//; s/(\s*\0)+/, /g; $_',
  26. },
  27. 0x0003 => { #PH
  28. Name => 'Quality',
  29. PrintConv => {
  30. 0 => 'Low',
  31. 1 => 'Normal',
  32. 2 => 'Fine',
  33. },
  34. },
  35. );
  36. # JVC text-based maker notes
  37. %Image::ExifTool::JVC::Text = (
  38. GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
  39. PROCESS_PROC => \&ProcessJVCText,
  40. NOTES => 'JVC/Victor text-based maker note tags.',
  41. VER => 'MakerNoteVersion', #PH
  42. QTY => { #PH
  43. Name => 'Quality',
  44. PrintConv => {
  45. STND => 'Normal',
  46. STD => 'Normal',
  47. FINE => 'Fine',
  48. },
  49. },
  50. );
  51. #------------------------------------------------------------------------------
  52. # Process JVC text-based maker notes
  53. # Inputs: 0) ExifTool object reference
  54. # 1) Reference to directory information hash
  55. # 2) Pointer to tag table for this directory
  56. # Returns: 1 on success, otherwise returns 0 and sets a Warning
  57. sub ProcessJVCText($$$)
  58. {
  59. my ($et, $dirInfo, $tagTablePtr) = @_;
  60. my $dataPt = $$dirInfo{DataPt};
  61. my $dirStart = $$dirInfo{DirStart} || 0;
  62. my $dataLen = $$dirInfo{DataLen};
  63. my $dirLen = $$dirInfo{DirLen} || $dataLen - $dirStart;
  64. my $verbose = $et->Options('Verbose');
  65. my $data = substr($$dataPt, $dirStart, $dirLen);
  66. # validate text maker notes
  67. unless ($data =~ /^VER:/) {
  68. $et->Warn('Bad JVC text maker notes');
  69. return 0;
  70. }
  71. while ($data =~ m/([A-Z]+):(.{3,4})/sg) {
  72. my ($tag, $val) = ($1, $2);
  73. my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
  74. $et->VerboseInfo($tag, $tagInfo,
  75. Table => $tagTablePtr,
  76. Value => $val,
  77. ) if $verbose;
  78. unless ($tagInfo) {
  79. next unless $$et{OPTIONS}{Unknown};
  80. $tagInfo = {
  81. Name => "JVC_Text_$tag",
  82. Unknown => 1,
  83. PrintConv => 'length($val) > 60 ? substr($val,0,55) . "[...]" : $val',
  84. };
  85. # add tag information to table
  86. AddTagToTable($tagTablePtr, $tag, $tagInfo);
  87. }
  88. $et->FoundTag($tagInfo, $val);
  89. }
  90. return 1;
  91. }
  92. 1; # end
  93. __END__
  94. =head1 NAME
  95. Image::ExifTool::JVC - JVC EXIF maker notes tags
  96. =head1 SYNOPSIS
  97. This module is loaded automatically by Image::ExifTool when required.
  98. =head1 DESCRIPTION
  99. This module contains routines used by Image::ExifTool to interpret JVC maker
  100. notes.
  101. =head1 AUTHOR
  102. Copyright 2003-2016, Phil Harvey (phil at owl.phy.queensu.ca)
  103. This library is free software; you can redistribute it and/or modify it
  104. under the same terms as Perl itself.
  105. =head1 SEE ALSO
  106. L<Image::ExifTool::TagNames/JVC Tags>,
  107. L<Image::ExifTool(3pm)|Image::ExifTool>
  108. =cut