void kyocera1_offset_makervalue(FILE *inptr,unsigned short byteorder, struct ifd_entry *entry_ptr,unsigned long fileoffset_base, struct image_summary *summary_entry,char *parent_name,char *prefix, int indent,int make,int model,int at_offset) { unsigned long value_offset,count; char *nameoftag; char *fulldirname = NULL; int chpr = 0; if(entry_ptr) { nameoftag = maker_tagname(entry_ptr->tag,make,model); fulldirname = splice(parent_name,".",nameoftag); value_offset = fileoffset_base + entry_ptr->value; count = entry_ptr->count; switch(entry_ptr->tag) { case 0x0e00: /* PrintIM (Epson Print Image matching) */ if(!at_offset && (PRINT_VALUE)) { if(!(PRINT_OFFSET)) { chpr += printf("@%lu:%lu",value_offset,count); chpr = newline(chpr); } } process_pim(inptr,byteorder,entry_ptr->value,fileoffset_base, count,nameoftag,parent_name,prefix,indent); break; default: print_generic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base,fulldirname,prefix, indent,make,model,at_offset); break; } if(fulldirname) free(fulldirname); } setcharsprinted(chpr); }
void asahi2_offset_makervalue(FILE *inptr,unsigned short byteorder, struct ifd_entry *entry_ptr,unsigned long fileoffset_base, struct image_summary *summary_entry,char *parent_name, char *prefix,int indent,int make,int model,int at_offset) { static unsigned long jpegthumbnaillength = 0UL; unsigned long value_offset,max_offset; unsigned short marker; unsigned long count; char *nameoftag; char *fulldirname = CNULL; int status = 0; int chpr = 0; if(inptr && entry_ptr) { nameoftag = maker_tagname(entry_ptr->tag,make,model); fulldirname = splice(parent_name,".",nameoftag); value_offset = fileoffset_base + entry_ptr->value; count = entry_ptr->count; switch(entry_ptr->tag) { case 0x0003: /* JpegThumbnailLength */ /* Just record it */ jpegthumbnaillength = entry_ptr->value; break; case 0x0004: /* JpegThumbnailOffset */ if(jpegthumbnaillength) { count = jpegthumbnaillength; jpegthumbnaillength = 0; } if(at_offset && (PRINT_SECTION)) { print_tag_address(VALUE_AT_OFFSET,value_offset,indent,prefix); chpr += printf("# Start of JPEG Thumbnail from MakerNote"); chpr += printf(" length %ld",count); } else if(!at_offset && (PRINT_VALUE)) { if(!(PRINT_OFFSET)) chpr += printf("@%lu:%lu",value_offset,count); else chpr = printf("length %lu",count); } if((PRINT_SECTION) || (PRINT_SEGMENT)) chpr = newline(chpr); marker = read_ushort(inptr,TIFF_MOTOROLA,value_offset); max_offset = process_jpeg_segments(inptr,value_offset,marker, count,summary_entry,fulldirname, prefix,indent+SMALLINDENT); if(at_offset) { if((PRINT_SECTION)) { if((status = jpeg_status(0) == JPEG_EARLY_EOI)) chpr = newline(chpr); jpeg_status(status); print_tag_address(VALUE_AT_OFFSET,value_offset + count - 1, indent,"-"); chpr += printf("# End of JPEG Thumbnail from MakerNote"); if((PRINT_ENTRY) && !(PRINT_VALUE)) chpr = newline(chpr); } } print_jpeg_status(); if(marker && summary_entry) { /* The new one is on the end of the chain */ if((summary_entry = last_summary_entry(summary_entry))) { summary_entry->filesubformat |= FILESUBFMT_MNOTE; summary_entry->datatype = MAKER_IFD; summary_entry->subfiletype = THUMBNAIL_TYPE; } } /* make certain we're at the end */ clearerr(inptr); fseek(inptr,value_offset + count,SEEK_SET); break; case 0x0e00: /* PrintIM (Epson Print Image matching) */ if(!at_offset && (PRINT_VALUE)) { if(!(PRINT_OFFSET)) chpr += printf("@%lu",value_offset); } process_pim(inptr,byteorder,entry_ptr->value,fileoffset_base, count,nameoftag,parent_name,prefix,indent); break; default: print_generic_offset_makervalue(inptr,byteorder,entry_ptr, fileoffset_base, fulldirname,prefix,indent, make,model,at_offset); break; } } setcharsprinted(chpr); }