IRC Logs

Log of #ghostscript at irc.freenode.net.

Search:
 <<<Back 1 day (to 2012/11/05)2012/11/06 
sebras is back.08:32.51 
kens Hi sebras08:34.50 
sebras kens: hey!08:47.57 
kens You were on holiday ?08:48.21 
sebras kens: yes -- icelandairwaves.is08:48.33 
kens THought so, did you have a good time ?08:48.44 
sebras kens: most of the time -- yes. :) unfortunately I got sick the last day so I missed the Sigur Rós concert that was the biggest reason for me going there. :-/08:49.31 
kens Oh, not so great :(08:49.45 
sebras kens: I'm still confused and half asleep, so be wary of any commits I make today. ;)08:50.16 
kens Not my problem, I don't think you commit to my area :-)08:50.31 
jaqwii Hey - Any hardcore gs'ers here that can help me understand why my rendering of pdf pages to tiff is non-deterministic? I need a lossless version of each page that is always rendered in the same way09:04.27 
kens That is how it should be, unless you have used (for example) the rand operator09:04.49 
tkamppeter Robin_Watts_, you wanted to tak with me yesterday?09:05.53 
jaqwii is that like a seed? 09:05.59 
kens jaqwii : Its an opertor in the PostScript language, its *highly* unlikely that your PostScript programs are using it09:06.28 
  And for PDF< I think its impossible09:06.49 
  But you haven't actually given us any ideas to work on.09:07.09 
  What version of GS, what kind of TIFF< what exactly is the nature of the non-deterministic behaviour (whats is the difference in teh output)09:07.36 
jaqwii so no matter what operators i do, a conversion from pdf to tiff will always have some random rendering behaviour09:07.49 
  ?09:07.51 
kens No. It most definitely should not09:08.09 
  But see above, I have no idea yet what your actualproblem is09:08.23 
chrisl jaqwii: how are you comparing the tiff output?09:08.23 
jaqwii gs (9.06) tiff24nc09:08.44 
  chrisl: yes09:08.49 
chrisl huh? *How* are you establishing the outputs are different?09:09.18 
jaqwii I do however also have parameters like TextAlphaBits, GraphicsAlphaBits, DOINTERPOLATE 09:09.22 
  I use imagemagick compare09:09.35 
  on the tiff files09:09.39 
kens OK so we can forget screening. So what exactly is the difference you are seeing09:09.39 
  ANd what does it show as the difference ?09:09.52 
  Is it comparing the metadata ?09:10.00 
jaqwii based on the diff ouput image, the entire image have small changes. around images and text09:10.23 
kens Well, if the input is identical, the output should also be identical, there ios no stochastic noise in a contone output09:10.59 
  Can you share an example ?09:11.06 
  PDF and TIFFs09:11.11 
jaqwii my guess was that one of the parameters i use have random behavior, if I just run the same command twice then they are equal, but if I run it again after some time it seems to differ09:11.11 
  the entire command (example): gs -r207.81818962097168 -dAutoRotatePages=/None -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dCOLORSCREEN -dDOINTERPOLATE -sFONTPATH=[path] -dUseCropBox -dNOPAUSE -dNOPAGEPROMPT -dBATCH -sDEVICE=tiff24nc -dFirstPage=19 -dLastPage=19 -sOutputFile=[outputfile] [inputfile]09:14.24 
kens -dCOLORSCREEN is pointless wiht contone output09:15.16 
  But shouldn't cause any harm09:15.30 
  We do have some known files which cause non-deterministic output, but these are unusual, it seems unlikely that you are encoutnering them regularly. But without seeing some examples its going to be hard to tell. Why do you care anyway ?09:17.28 
chrisl jaqwii: there are some things to check: which version of Ghostscript are you using? Did you build from source, or are you using a binary distribution, and from where? Eliminate the interpolation and alpha-bits params one at a time, and see if one of them is causing the problem. Finally, try a device other than tiff (ppmraw, for example) to see if the issue is specific to the tiff device, or in the "core".09:25.11 
jaqwii thanks guys - i'll give it a go with the format and parameters, since it seems to be a general issue for me. 09:28.18 
chrisl Hmm, not enough of a problem to actually impart any useful information, then.......09:33.12 
kens Apparently not...09:33.23 
  He did say he was using 9.06 though09:33.34 
chrisl Yes, so he did. But I certainly don't want to start stabbing in the dark to reproduce the issue :-(09:34.40 
kens exactly, I want to *see* it first09:35.09 
chrisl Hmm, I'm getting a crash in my fapi code, with ps2write - and I can't see how it's connected to FAPI.... :-(09:36.37 
kens I can look into it if you like09:36.53 
chrisl Well, it's not *in* the fapi code, it's on the fapi branch09:36.57 
kens Yeah I figured that, presumably its a public branch though ?09:37.16 
chrisl It's on my personal repository09:37.31 
kens Umm, does that mean I can't see it ?09:37.40 
  already venturing into unknown territory with Git...09:37.59 
chrisl kens: sorry, phone call. Yes you can see it. Let me run the thing with valgrind first, see if I have missed something obvious09:40.28 
kens OK, let me know if you want me to look at it09:40.40 
  I'm just messing about with colour stuff at the moment09:41.03 
chrisl Well, what's happening is that the device is missing (NULL) in gx_image_fill_masked(), having been called (eventually) via pdf_text_process()......09:42.48 
kens could be falling back to a type 309:43.49 
  Its about the only way you can get there from text_process09:44.35 
chrisl kens: so, it's going into gx_image_fill_masked() which then calls gx_image_fill_masked_start() and that doesn't set the device to use - which looks wrong....09:47.02 
kens Sort of sounds wrong, which test file is the culprit ?09:47.29 
chrisl Bug6901014_CImg_flyer.pdf09:48.13 
kens Oh good, a nice simple one :-(09:48.21 
  Give me a minute09:48.30 
  The case must be going into the pattern colour code ?09:50.07 
chrisl kens: if you look at gx_image_fill_masked_start(), there is a route through that code which doesn't set cdev, but doesn't return an error, either.09:50.22 
kens otherwise it sets *cdev=dev and returns09:50.24 
  chrisl if its a pattern colour but no spec_op yes09:50.47 
chrisl Yes, looks that way09:51.10 
kens For me we never hit that code09:51.22 
  But the PDF interpreter throws a warning about the file being unbalanced09:51.47 
chrisl Hmmm, strange. I can't see how the fapi code would influence that.....09:52.05 
kens Seems like gx_dc_is_pattern2_color or gx_dc_is_pattern1_color_clist_based are never true for me09:53.11 
  So I never get to the spec_op test09:53.35 
  Of course this is WIndows, not Linux09:53.48 
chrisl Again, shouldn't matter09:54.12 
kens Only if its some sort of odd memory thing09:54.29 
  Having sadi that, by inspection there *is* indeed a problem there as you noted09:54.46 
  You can probably fix it by putting an "else *cdev=dev;" in there, but I'd like to understand why its getting there for you09:55.25 
chrisl I did that, but the output isn't quite right, I think09:55.48 
kens TO be honest, I'm not totally surprised, since its is apparently processing a pattern colour space, that it 'shouldn't' be09:56.17 
chrisl So there is something else going on :-(09:56.25 
kens It kind of looks that way yes09:56.36 
  You sem to be prcoessing text in a pattern space, and I'm not09:56.50 
chrisl I guess I need to try to cut down the file - oh joy :-(09:57.39 
kens It could mean thst your code is falling bcak to a fill where mine does not (hence handling the pattern at a higher level)09:57.40 
  Reducing the file woudl help a lto, but....09:57.57 
  It may be transparency related....09:58.04 
  I admit I cna't see any text that looks like it should be in a pattern space, but its not possible to be sure from a visual inspection09:58.43 
chrisl Trouble is, I just can't see how the fapi code can be influencing the color space, or whether we fall back to bitmap glyphs in ps2write09:59.04 
kens Some fo the text lies on top of a shading though09:59.04 
  chrisl it could influence the fallback, possibly09:59.18 
  or rather, conceivably09:59.30 
  From what I see here it is indeed entrering the type 3 bitmap fallback case10:00.07 
chrisl On master?10:00.19 
kens Yes10:00.26 
  I get to the fill code several times, but never with a pattern colour space10:00.38 
chrisl Okay, I will see if I can fathom where the pattern is appearing from.....10:01.42 
kens You can catch it doing this by stopping at teh 'default_impl' goto label10:01.50 
  in pdf_text_process in gdevpdtt.c10:02.03 
  THis is, unfortunately, one of the hairiest areas in pdfwrite10:02.15 
  chrisl its a composite font (presumably CID) which we don't handle in ps2write, so it falls back10:06.26 
  pdfwrite of course will handle it as a CIDFont and so doesn't execute teh fallback code10:06.51 
  Just checked the original file and all the fonts are CIDFOnts, so all the text will end up going through here10:07.20 
chrisl Yeh, I see that. At least the first bunch of times through the deafult_impl code, it's not a pattern space set10:07.21 
kens Normally I put a count breakpoitn on the entrpoint (pdf_text_process) wiht a large value, run to the crash and see how many hits the breakpoitn got, then set the hit counter back to that value. Don't knwo if you cna do that with gdb10:08.23 
chrisl Yeh, I've just done that. The iteration before the crash, it's a "flat" color space, next time through, it's a pattern, and crashes10:09.11 
kens OK so how many times do you get to pdf_text_process ?10:09.31 
  Its hard to see how you can be getting here with a pattern colour though10:10.02 
chrisl Well, I'm breaking just below the default_impl label, it crashes on the 237th hit10:10.23 
kens Hmm, thats a lot, jutst a moment10:10.42 
  For me the 237th iteration doesn't even go through the fill code, which suggests that its using cached data10:12.49 
chrisl Hmm, odd.....10:13.54 
kens Just walking through show_proceed on the 237th iteration10:15.33 
  In this case is_pure_color is 010:16.26 
  and teh colour is a type 2 pattern (aha!)10:16.46 
  gx_lookup_cached_char returns 0 so it's not cached (IIRC)10:18.07 
chrisl Now I'm confused10:18.34 
kens Me too, somewhat10:18.41 
  I have an uncached glyph in a pattern space, and yet its not getting to the fill, give me a bit more time, I'mstill tracking it10:19.01 
  Its definitely gone to the 'no_cache' label in show_proceed10:19.30 
  ANd now I'm off to procs.build_char10:20.01 
  Oh which always returns 110:20.22 
  so we call show_cache_setup10:20.40 
  and return TEXT_PROCESS_RENDER10:20.59 
  back in ps2write we install the PS charproc acccumulator (ah ;-)10:21.31 
  Nope, looks like we decide we can't do outlines either10:22.12 
  Err, mayeb that's upside down in sense, just a moment10:22.27 
  Hmm, well that code confuses me, and I wrote it :-(10:23.22 
  But it looks like we've decided we need to render the glyph10:23.48 
  So now I'm in op_show_continue in zchar.c, executing the TEXT_PROCESS_RENDER case10:24.34 
  So it looks like we are pushing the font and glyph onto the stack and then executing BuildChar10:25.31 
Robin_Watts_ http://www.kickstarter.com/projects/1461411552/elite-dangerous10:26.00 
chrisl Which should be zFAPIBuilgGlyph10:26.07 
kens Saw it on the Register this morning10:26.11 
  chrisl, I hope so, just a moment10:26.25 
  yes, zFAPIBuildGlyph10:27.09 
  which onl ycalls FAPI_char10:27.20 
  I'm going to skip over that and look only at the return value10:27.42 
chrisl Okay, so FAPI decides it needs to create an outline - which is interesting.....10:27.58 
kens The return code is '5'10:28.00 
  From FAPI_do_char10:28.13 
chrisl So, there's a CDevProc10:28.15 
kens There always is with PDF files10:28.24 
chrisl Yes10:28.29 
kens The PDF interpreter uses it to positionh the glyphs IIRC10:28.34 
chrisl It does, yes10:28.59 
  So, in my code, FAPI decides it needs to produce an outline10:29.35 
kens Is that the return code of 5 ?10:29.55 
chrisl Yes10:30.17 
kens OK so that's waht I see too10:30.29 
chrisl Oh, No, the return code 5 is for teh CDevProc10:30.34 
kens OK then its the CDevProc I'm running10:30.48 
  I think I just reached the end10:31.17 
chrisl So it should call setcachedevice (or similar), and then the fapi "finish_char" thingy - can't remember the name10:32.15 
kens Not sure, still running this insanely ocmplex CDevProc10:32.38 
  Aha, now I'm in zsetcachedevice210:33.11 
  Which takes me through to pdf_text_set_cache10:33.47 
  And on to gs_text_set_cache10:34.26 
  eventually to gx_show_text_set_cache10:34.51 
chrisl When you get to fapi_finish_render() step through there, and check if you're got a bitmap or outline glyph10:35.04 
kens Still debugging :(10:35.14 
  about to go to set_cache_device10:35.26 
  never called the fapi code. I best rerun that10:36.09 
  Oh no, here we are10:36.22 
chrisl I think we're getting an outline glyph there, too10:36.43 
kens so, into fapi_finish_render_aux10:36.45 
  So I'm calling I->get_char_raster10:37.14 
  dive in or step over ?10:37.26 
chrisl step over10:37.34 
kens I->use_outline is 110:37.43 
chrisl Yes, that's what I expect.10:37.59 
kens OK about to go to gs_fill10:38.25 
  just loaded the colour and its still a type 2 pattern10:39.29 
  So now I'm in gdev_pdf_fill_path10:40.00 
  Ah, looks like we get a rangecheckerror which is a hideous hack that means 'high level pattern'10:41.00 
  So we go through convert_to_image10:41.23 
  Hmm, chrisl is 'convert_to_image' true or false for you here ?10:42.17 
chrisl I'm long past that just now, but.......10:42.42 
kens OK never mind10:42.52 
  Its just that things start to get really complex now because we (potentially) install the masked image converter10:43.18 
chrisl I've found the difference in the font world - when we get to show_update(), in the master code penum->width_status == sws_no_cache, but on the fapi branch is sws_cache10:43.34 
kens Well it will certainly take different pths through the code in that case10:44.06 
  I guess I'll leave it to you for now10:44.32 
chrisl With sws_no_cache we skip the "image_cached_char" call completely, and that's where teh crash happens.....10:45.17 
kens I htink I would expect it to be not cached if its filled with a pettern...10:45.44 
chrisl I'd have thought it was more to do with pdfwrite/ps2write, and the way it bypasses the normal glyph cache10:46.36 
kens I'm unsure about that, we *do* use the cache10:46.54 
  sometimes....10:47.09 
chrisl Bingo! I'd left some debug code in, and it was fouling up the decision whether to cache or not - it was, effectively, trying to switch to cached rendering part way through the process - phew!10:59.01 
kens Excellent, glad you found iot10:59.18 
chrisl I keep forgetting how places we actually "decide" whether to cache or not :-(10:59.52 
kens Its very democratic, everyone gets a chance to decide :-)11:00.30 
chrisl Except everyone also has to agree, or all hell breaks loose!11:00.51 
Robin_Watts_ tkamppeter: ping12:47.22 
  I was indeed looking for you yesterday.12:47.32 
  We have some code to generate dither patterns for inkjet printers that I'd like to be able to test.12:48.05 
  I have a Canon MX310 here, that is supposedly supported by Gutenprint.12:48.23 
  What I'd like to be able to do is to generate some dithered output (currently I'm making CMYK pams) and get that sent to my printer with as little transformation as possible (no redithering, no rescaling, no centreing etc)12:49.18 
  I was hoping there might be some way that I could generate a cups raster and then somehow inject that into the cups queue? Or call some cups2canon thing?12:50.10 
ray_laptop two kids home sick today :-(15:21.21 
Robin_Watts_ Thank heavens for having an office, eh? :)15:22.57 
henrys the politics was too much for them ;0(15:33.29 
  it's certainly getting me sick - glad it's over today.15:35.36 
Robin_Watts_ Yesterday we had a national celebration of a bloke who tried to burn parliament to the ground.15:36.15 
kens Still burning him in effigy. WHat do you have to do to be forgiven ?15:37.55 
Robin_Watts_ Succeed? :)15:38.13 
kens THat might work15:38.40 
Robin_Watts_ He could use their expenses forms as kindling.15:38.57 
kens THough it wasn't an unqualified success for Cromwell15:38.58 
henrys reads about fawkes15:39.30 
Robin_Watts_ Well, he was a papist, so he was never going be popular. It's not that we have long institutional memories in this country or anything, but the village church still puts a few pence away each year against the purchase of firewood for burning catholics.15:42.04 
kens err, I thought that was witches15:42.59 
Robin_Watts_ The vicar said catholics. Apparently he has been very close to pointing this out to the local catholic clergy at times :)15:43.41 
chrisl Robin_Watts_: I think that's utterly appalling - only a few pence?!?15:43.48 
henrys of 5 of the meeting15:55.41 
  paulgardiner:reading ...16:01.05 
paulgardiner ok. I'm here16:02.05 
henrys I wonder if we should post sample form stuff at the apk release site and ask folks to test them on their droid platforms. paulgardiner do you think that would be useful?16:04.16 
paulgardiner Yes, I reckon so. We'd probably want to frequently update it, but presumably that isn't a problem.16:05.24 
henrys is robin_watts_ managing the apk release?16:06.41 
Robin_Watts_ I'd assumed an apk would go up as part of the release.16:06.47 
  I can do an apk build, sure. It's usually tor8 that does releases though.16:07.31 
paulgardiner Or I can do the build, and Robin_Watts_ can upload it if that's easier16:08.09 
henrys I think an alpha apk with some form test files would be useful.16:08.12 
  I don't think a full blown release is needed.16:08.37 
  we do want to get this in the hands of droid users right?16:08.51 
Robin_Watts_ I thought a full release would be worthwhile to show that it works on windows/linux too.16:09.28 
paulgardiner I'd have thought so, unless we are worried that some of the current shortcomings might put some off for good.16:09.39 
henrys Robin_Watts_:I'd like that too, tor8?16:10.04 
paulgardiner The linux app is probably out of date with current features16:10.16 
tor8 my android environment is a bit old by now16:11.11 
  and I think the x11 viewer is quite far behind in terms of modifications you've done for the win32 viewer to support forms?16:11.41 
  I'd suggest just going with the .apk (and -maybe- a win32) release for this early forms demo.16:12.03 
paulgardiner tor8: I'd imagine so.16:12.07 
henrys I was hoping we could have a banner on the download page - "help us test forms - here are some files". that would serve the dual purpose of advertising and getting some testing?16:12.24 
tor8 henrys: also, "upload files that don't work here, with a description of what doesn't work" or do we expect them to go through bugzilla for all that?16:13.17 
Robin_Watts_ tor8: If you do the .zip (or the tagging), I'll do the builds.16:13.27 
henrys right if you do have forms that don't work please go to bugzilla16:13.48 
  I didn't really have anything to say about the report - looks like good progress as usual. Anybody else?16:14.42 
Robin_Watts_ I'll do the website banner etc too if no one else has a burning desire to do it.16:14.48 
  <blink><font="garish"><color="purple">....16:15.29 
paulgardiner Only thing I have to add is that there are a few commits building up on paulg/master that could do with reviewing.16:15.39 
henrys we could make them fill out a pdf form to do the download ;-)16:16.12 
paulgardiner :-)16:16.20 
chrisl It might be a good idea to make it clear there are other ways to get files to us than via bugzilla - PDFs with forms in them are a bit more likely to be private/confidential.16:17.03 
halabund Hello16:17.14 
ghostbot what's up, halabund16:17.14 
henrys tor8, Robin_Watts_:can you review paulgardiner's changes.16:17.50 
  I assume those changes should be in the release.16:18.07 
Robin_Watts_ sure. I'll look now, unless tor8 is wanting to.16:18.09 
halabund I'm looking for a tool to normalize the widths of pages. I converted a PDF from a DJVU which had pages with random widths. I simply need to rescale all pages so they have the same width relative to each other.16:18.53 
paulgardiner Actually, I think some have been reviewed, but just haven't been pushed yet.16:18.56 
halabund Does anyone here know of a tool that can do this?16:19.12 
Robin_Watts_ halabund: Not me, sorry.16:20.01 
henrys halabund:I'm not quite sure I completely understand what your asking but I'll hazard this will get you started: http://stackoverflow.com/questions/7446552/resizing-a-pdf-using-ghostscript16:23.28 
chrisl halabund: you could try Ghostscript with pdfwrite and use the -dFIXEDMEDIA and -dPDFFitPage options. Set the media size you want16:23.44 
Robin_Watts_ paulgardiner: http://git.ghostscript.com/?p=user/paulg/mupdf.git;a=commitdiff;h=12da2b4d0f1fdec7051b98bc63418b4a3ea2ea7916:23.49 
  In Java_com_artifex_mupdf_MuPDFCore_getWidgetAreasInternal should you also check for pc being NULL ?16:24.12 
  and in getPageLink16:24.46 
chrisl henrys: I'm about to head out - it's my intention to have the gs_fapi branch pulled onto master by the end of the week, if that sounds okay.16:25.16 
Robin_Watts_ Other than that, that one looks great.16:25.31 
henrys chrisl:sounds great! what about boldening?16:25.36 
chrisl henrys: it's done (at least a first pass), erm..... http://www.ghostscript.com/~chrisl/fapi_with_boldening.png16:26.29 
  FAPI image on the left again16:26.41 
henrys awesome!16:26.54 
chrisl It was *much* easier than I had expected - the image "munging" code is very self contained16:27.26 
paulgardiner Robin_Watts_: I think it's okay. gotoPageInternal always sets pc non-NULL, but the record it points to may have a NULL page if the load failed.16:28.04 
Robin_Watts_ fair enough.16:28.18 
chrisl Right, off now - bye!16:28.21 
Robin_Watts_ night chrisl.16:28.28 
paulgardiner Robin_Watts_: ... although I have to admit, how it works came as a surprise to me.16:29.14 
halabund thanks chrisl_away and henrys, I'll try that16:34.08 
Robin_Watts_ halabund: Be aware that a gs based solution will take your PDF file completely to bits and then rebuild it.16:35.40 
  so don't expect any non-display information to make it through.16:36.04 
halabund Robin_Watts_: it's just a scanned book. I already lost the searchability when converting from DJVU to PDF16:37.12 
  thanks for the warning though!16:37.18 
  I wish there were some usable DJVU viewers for OS X, then I wouldn't need to convert at all ...16:37.43 
henrys I use a browser plugin djvu plugin host16:39.32 
halabund actually I haven't tried the plugin viewer yet16:40.23 
tkamppeter Robin_Watts_, I think Gutenprint has some raw mode, so that you can print bitmaps without redithering. Simply post on the Gutenprint mailing list and they will help you. https://lists.sourceforge.net/lists/listinfo/gimp-print-devel16:45.42 
Robin_Watts_ tkamppeter: Thanks.16:49.50 
henrys and another meeting ... I got nothin'17:01.31 
mvrhel good morning17:02.02 
henrys I'll repeat that for mvrhel's benefit: and another meeting ... I got nothin'17:02.08 
mvrhel hehe17:02.16 
  is kens still here17:02.28 
kens yes17:02.39 
  meeting17:02.42 
mvrhel kens: I would think you would just want to use the ICC space that is already associated with the objects when they come to pdfwrite17:04.12 
  to answer you email question17:04.24 
  s/you/your/17:04.59 
marcosw sorry I'm late, did I miss the meeting?17:06.47 
henrys no you're good17:07.06 
  I didn't have much to say, what do you have?17:07.19 
  I do sort of think we should say "good enough" to your customer and move on, but whatever you think marcosw.17:07.58 
marcosw the latest email says they can't leave off the -IResource/Fonts option since their customers are adding fonts to the system.17:09.41 
henrys I know I requested this before, I'd like to do submit changes to the pxlcolor device and have it cluster tested - imho if a device isn't part of the cluster the behaviour should be to generate sums for the master when the job is submitted it'll just take 2x longer.17:10.19 
marcosw other than startup times why would reading fonts from Resource/Fonts instead of %rom%Resource be so much slower?17:10.31 
mvrhel kens: did what I said make sense?17:10.48 
kens one minute17:10.58 
mvrhel sorry17:11.02 
  another email from them marcosw...17:11.22 
alexcher marcosw: because the directoru\y is not cached.17:11.34 
henrys alexcher how is the soft mask stuff coming?17:12.48 
alexcher henrys: I'm still working.17:13.16 
Robin_Watts_ henrys: bug 693415: Is this in any way related to the hpgl path mode?17:13.34 
henrys Robin_Watts_:I don't think so. This is about HP adding another segment when filling.17:14.48 
  unless that is something expected in that model, I don't see why it would be though.17:15.56 
kens mvrhel I can use the ICCBased space as is if I want to embed an ICCBased space in theoutput, but how (if possible) can I use that to do a conversion to a device space ?17:16.13 
Robin_Watts_ his example looks exactly like what I'd expect in that model.17:16.21 
mvrhel kens: that is your source space to use in the conversion. 17:16.51 
kens Hmm let me read doc again17:17.05 
mvrhel kens: to create the link you will need a source color space and a destination color space17:17.27 
kens mvrhel right, so the ICCbased one is then the source space ?17:17.48 
mvrhel yes17:17.53 
  and the device profile will be used as the destination17:18.02 
kens OK what is the cost of creating a linkn in performance terms ?17:18.04 
  I have the device profile, but I may want to change it at startup is that legal ?17:18.22 
mvrhel kens: it is expensive. so it is cached in the link cache which is part of the imager state17:18.26 
kens ah, so I don't need to cache it myself :-)17:18.37 
mvrhel no17:18.42 
  and if you change the device profile, it will catch this17:18.57 
henrys Robin_Watts_:maybe I don't understand something. My example is much simpler, HP implicitly closes that path upon PM1 when filling and doesn't when stroking. What does that have to do with counting PU's as part of a fill path?17:19.08 
kens Oh, that's nice17:19.09 
mvrhel kens: ideally you don't have to do a thing except ask for a link and use it17:19.32 
kens So if I want a device colour I set up the deice profile and all is well. If I want ICCbased I havce it already, and if I want unchanged tehn I am17:19.37 
  done because I use the existing code17:19.49 
Robin_Watts_ henrys: it's possible I'm misunderstanding.17:19.58 
mvrhel kens: that sounds correct17:20.10 
kens OK good. Advanced question for extra credit: How do I handle the object based colour ?17:20.35 
mvrhel kens: is this using different destination profiles or different source profiles based upon objects? (we can do both)17:21.13 
kens mvrhel different destination profiles basded on object type17:21.29 
henrys Robin_Watts_:I guess it is sort of related. If the pen is down (lineto) the closepath is always added.17:22.00 
mvrhel kens: ok. so if you have specified object profiles on the command line, it should happen invisible to you. Now, we do still have the limitation that they all have to be the same color space17:22.35 
  I need to change that17:22.39 
  kens: oh one thing17:22.54 
kens mvrhel I see, then I will pass on this one for th emoment, and just bear it in mind17:22.57 
henrys Robin_Watts_:I think I can patch up the path after but I'd rather not introduce more mess to the chaos.17:23.12 
mvrhel kens: there have been a few minor changes since I wrote that note for you17:23.24 
  let me point you to some code17:23.32 
henrys sorry the stuff about the pxlcolor device was for marcosw - I left out his name.17:24.06 
mvrhel uhoh lost kens17:24.12 
kens Huh network dropout17:24.51 
  I think I need a new router17:24.56 
Robin_Watts_ henrys: We could introduce a new graphics primitive to paths (in the graphics lib), and treat that differently in fill/strokes.17:25.11 
mvrhel kens: I am going to show you a snippet of code17:25.18 
kens excellent, thanks17:25.25 
Robin_Watts_ That way no need to 'fixup'.17:25.32 
henrys Robin_Watts_:yup that would be the other alternative - I suppose you could just use the current boolean to trigger the closepath.17:26.10 
mvrhel i really dislike the default font in windows 8....17:26.29 
kens Another reason to avoid it....17:26.43 
marcosw henrys: I saw the pxlcolor/cluster request. You should open an enhancement request and assign it to me. :-)17:26.49 
henrys marcosw:yeah I'll make it P2 and use a customer number.17:27.27 
Robin_Watts_ tor8: I've pushed pauls commits, so when you're happy, tag, and then you can build and/or tell me, and i'll build.17:27.40 
henrys Nate Silver now has Obama at 90% chance to win.17:28.49 
Robin_Watts_ Didn't he have him at 97% earlier?17:29.05 
kens Who is Nate Silver ?17:29.16 
Robin_Watts_ http://politics.slashdot.org/story/12/11/05/1410233/nate-silvers-numbers-indicate-probable-obama-win-world-agrees17:29.55 
marcosw alexcher (et.al.): is there way to construct a Fontmap file and use a combination of -I%rom%Resource and -IResource/Fonts options on the command line so that the compiled in fonts are used preferentially? BTW, -I%rom%Resource fails in 8.64, but I assume there is a patch that I'll be able to find since it works in 9.00.17:30.06 
henrys I follow his blog: http://fivethirtyeight.blogs.nytimes.com/17:30.52 
kens aha17:30.59 
mvrhel kens: so if you look in gxcmap.c around line 1238 you can see that you will want to get the rendering intent structure filled up17:31.20 
  one of those will identify the object type17:31.35 
  so that the icc code will grab the correct profile for that object17:31.51 
henrys I am reading his new book signal and the noise - quite good.17:31.53 
kens mvrhel OK I see that17:32.11 
mvrhel oh I like that title17:32.12 
alexcher marcosw: AFAIK the file systems are searched in their order in the list.17:32.24 
mvrhel kens: so that changed since I wrote you the earlier note17:32.30 
kens OK not to worry, I have plenty to keep me busy until the staff meeting I think :-)17:32.54 
Robin_Watts_ mvrhel: Yell when you want to talk about ETS.17:33.19 
mvrhel kens: ok. and I still need to make the type 2 profiles17:33.20 
kens version 2 ? Yes, that would be good.17:33.33 
mvrhel version 2 17:33.38 
  yes17:33.40 
kens For now I intend to keep the old code and allow it as a fallback, like the UseFastCOlor stuff17:33.49 
mvrhel kens17:34.01 
  one thing that is cool 17:34.05 
  is that you can use the same logic to do the old conversions17:34.22 
  that is with getting a link etc17:34.27 
alexcher marcosw: -I pushes the directories to the list. We need either rebuild the whole list or add an append option.17:34.34 
kens mvrhel I want to throw the old code away as soon as I can17:34.45 
mvrhel by setting rendering_params.cmm = gsCMM_NONE17:35.01 
  then, you still apply the link17:35.07 
  but it will do old style conversions17:35.12 
kens Hmm, but not the old pdfwrite conversions ;-)17:35.22 
mvrhel how are those different?17:35.45 
  we can add another cmm type for that...17:36.04 
kens Well partly its the fact that device space conversions use the PLRM method, but its all code in pdfwrite, not the kernel17:36.16 
  And partly its the hideous mess that is the logic in pdfwrite at the moment17:36.38 
ray_laptop marcosw: you may be able to get the performance of %%rom by having BOTH -I%%romesource/Font AND -IResource/Font it generally will find the stuff in the %%rom.17:36.39 
mvrhel oh. well you could throw that out and just always use the CMM17:36.51 
kens mvrhel I don't wnat to keep the old code or method at all, I want to move over completely to the CMS17:36.59 
mvrhel and you would have PLRM and ICC17:37.01 
kens Indeed.17:37.07 
mvrhel kens: ok sounds good17:37.12 
ray_laptop marcosw: Also you may want to have them specify -sGenericResourceDir=%%rom/Resource/ 17:37.13 
kens THat is exactly what I want, but all done 'properly'17:37.21 
mvrhel right17:37.27 
kens mvrhel what is there right now for pdfwrite is obscure and horribly coded17:37.38 
  It will be much better when I am done (I hope!)17:37.54 
alexcher marcosw: How many failed searches their files generate?17:37.55 
mvrhel kens: right. I tried to follow the logic in there before17:38.01 
kens :-)17:38.13 
mvrhel Robin_Watts_: give me 15 minutes before we start ETS ok. brb17:38.17 
Robin_Watts_ ok.17:38.24 
kens OK thanks mvrhel I have a direction for tomorrow now17:38.36 
  TIMe for me to go though goodnight all17:38.44 
marcosw alexcher: I'm not sure I understand your question? Are you asking how many fonts are they using? It's three.17:38.48 
henrys we should wrap up the meeting, ray_laptop:hope the kids get better!17:39.12 
  soon17:39.13 
ray_laptop henrys: thanks17:39.29 
marcosw Robin_Watts_: are you the person to complain about the search function on git.ghostscript.com? 17:39.33 
Robin_Watts_ marcosw: I don't believe so.17:39.47 
alexcher marcosw: If the font cannot be found, multiple copies of the directory on the search path will be searched.17:40.06 
  marcosw: How important unsuccessful resource searches?17:41.20 
marcosw alexcher: I'm not sure if I'm just being dense today but I don't understand what that means either. 17:42.41 
alexcher marcosw: gs cannot remove directories from the search path.17:44.28 
marcosw alexcher: let me summarize the problem: there is a significant difference in 8.54 vs 8.64 performance with the customers file. 17:45.27 
alexcher marcosw: what does the profiler say?17:46.05 
marcosw If I remove the font directory from the -I command line option than 8.64 is nearly as fast as 8.54, but the customer has users who are installing their own fonts so needs the -I option to find these additional fonts.17:46.41 
ray_laptop marcosw: I just put my suggestions in an email (in case they were hard to decipher here).17:47.12 
marcosw Furthermore 8.54 is compiled with COMPILE_INITS=0, so is loading fonts from disk. I suppose I could try compiling 8.64 with COMPILE_INITS=0 and see if that makes its performance better. Seems counterintuitive but nothing about this problem makes sense.17:48.16 
ray_laptop having the -I%rom%Resource/Font BEFORE the -IResource/Font should only look on the disk if it can't find the font in the %rom% file system17:48.20 
alexcher marcosw: let's find the exact revision that's slow.17:48.26 
marcosw I've done that, let me find the commit hash17:48.42 
henrys bbiaw17:49.37 
marcosw 7a31db6d4142087d29c17e875ef2de1727b9f8b2 is fast17:49.41 
  62b66eb67bda44d5becebc709b565d45bf70c585 is slow17:49.49 
  there is a rev between them but it doesn't compile/run17:50.00 
alexcher marcosw: Yow fast is the current version with COMPILE_INITS=0 ?17:54.18 
marcosw alexcher: haven't tried that yet. Running that test now.17:54.48 
alexcher marcosw: How fast is the current version with COMPILE_INITS=0 ?17:54.49 
  marcosw: It's a big commit. Is there a bug report to thack the findings?17:55.49 
marcosw alexcher: http://bugs.ghostscript.com/show_bug.cgi?id=69338717:56.21 
mvrhel Robin_Watts_: I am back. let me get the ETS project on my desktop 17:59.19 
alexcher marcosw: Where's the sample file?17:59.33 
marcosw oops, i'll attach it now.17:59.46 
ray_laptop the 34f0b7f06 commit just moved files from 'lib/' to Resource/Init17:59.56 
alexcher marcosw: I'll try to reproduce the problem on Linux.18:01.10 
Robin_Watts_ mvrhel: ok. how do you want to do this - shall we walk through the C version?18:01.32 
mvrhel Robin_Watts_: yes that sounds fine18:01.51 
  hold on though18:02.00 
marcosw ray_laptop: yup, and increased the run time significantly. From 27 seconds to 83 seconds for the first 1000 pages of the customer's file.18:02.15 
ray_laptop marcosw: are those timings with COMPILE_INITS=0 ?18:03.11 
marcosw they are with the default options. (i.e. ./autogen.sh ; make )18:03.33 
ray_laptop marcosw: do you know what the defaults were back then ?18:04.10 
ray_laptop goes to look at the logs for when we made COMPILE_INITS=1 the default18:04.29 
marcosw other than 8.54 had compile_inits=0 and 8.64 =1 no.18:04.42 
  ray_laptop: it may well have changed with the directory reorg that you did.18:05.15 
mvrhel Robin_Watts_: ok got project and built in VS 2012...18:05.40 
Robin_Watts_ ok.18:05.52 
  So test_evenbetter.c has been expanded a bit to have some more flags etc and to cope with pams as well as pgms.18:06.16 
mvrhel yes. I see that. that is nicew18:06.29 
Robin_Watts_ but there is nothing earthshaking in there.18:06.32 
ray_laptop marcosw: the reason that 34f0b7f06 didn't run is that I missed a file in the 'mv' (pdf_draw.ps)18:06.50 
Robin_Watts_ Do you want to start with even_better_new, or with the actual core loop even_better_line_hi ?18:07.44 
mvrhel lets go in to the new18:08.46 
  that wont take long18:09.01 
  so the even_ehi and even_elo parameters18:09.39 
Robin_Watts_ ok. First 'interesting' thing in here I reckon is the even_ehi and even_elo...18:09.42 
  :)18:09.44 
mvrhel yes exactly18:09.55 
Robin_Watts_ Firstly, why do they have 'even' in their names? Isn't that implied?18:10.00 
  Essentially, I think this corresponds to the mention of 0.55 in the paper.18:10.17 
  In section 6.18:10.32 
mvrhel that was what I was wondering. So it is a empirical fudge factor18:10.43 
  hold on let me open the paper18:10.54 
Robin_Watts_ 'We address this by clamping the error and threshold modulation to. +/-0.55 of one quantization level."18:11.16 
  yeah, it seems a pretty arbitrary fudge to me.18:11.25 
  As such I vaguely feel that we should expose that to the user.18:11.43 
mvrhel I agree18:11.54 
Robin_Watts_ ok.18:12.09 
  eb_style and r_style are mine.18:12.24 
  You'll see what they are about in a mo.18:12.39 
mvrhel ok what is the do_shadows?18:12.48 
  strengths is obviously the correlation between planes18:13.12 
Robin_Watts_ yeah, strengths is the correlation between planes.18:13.24 
  Ignore do_shadows for now, because it's not in the vanilla C version.18:13.39 
ray_laptop do_shadows is described in the README (and doesn't work)18:13.41 
mvrhel is does come in eb_compute_randshift18:14.44 
  and even_better_line_rll18:15.03 
marcosw ray_laptop and alexcher: thanks for your suggestions and help. I'll update the bug with the information that I've found regarding 8.64 and compile_inits options. I'll add both of you the bug cc list as well.18:15.13 
Robin_Watts_ even_better_line_rll either calls out to blah_hi or blah_both, right?18:15.46 
mvrhel yes18:16.06 
Robin_Watts_ blah_both does not work. It's all commented out with a big #if 0. If we change that to a #if 1 it doesn't compile.18:16.07 
mvrhel ah ok18:16.14 
  so lets move on from that.18:16.21 
Robin_Watts_ Hence, for now, ignore do_shadows - we can try to reconstruct what it does later.18:16.27 
mvrhel maybe a comment for now that it is disabled18:16.41 
  or not used18:16.44 
  or not working18:16.47 
Robin_Watts_ even_better_plane_new gets called for each plane, then it sets up the 'tm' stuff.18:17.04 
ray_laptop AIUI, do_shadows is _supposed_ to make the extra dot_distribution pass when there are only a few white dots, to make the white dots more evenly distributed and "eliminate" worms or other problems. But since individual white dots are rarely visible (except on the screen) we really don't need do_shadows18:17.10 
Robin_Watts_ tm is one of the 2 built in styles of generating random noise. Ignore it for now.18:17.30 
ray_laptop I think we (RobinWatts) should just rip it out18:17.39 
Robin_Watts_ ray_laptop: I'm not averse to that idea, but I'd like to understand it a bit better first - I don't think it's hugely hard to resurrect.18:18.22 
mvrhel yes. lets just make a comment on it and move on for now18:18.35 
Robin_Watts_ mvrhel: Do you want to look at even_better_plane_new ?18:18.43 
mvrhel Robin_Watts_: yes lets go in there for a sec18:18.56 
Robin_Watts_ OK. log2_levels is obvious enough. (levels = 2 for a black and white image or higher if we have multiple sizes of ink droplet available to us)18:20.00 
mvrhel ok. this is getting the randome stuff set up18:20.04 
Robin_Watts_ The even_c1 is a magic constant used to effect the shifts which certain tables are stored with.18:20.44 
mvrhel ah ok18:20.59 
  I was wondering about the log of the aspect. Is this the aspect ratio18:21.19 
Robin_Watts_ and the even_rlimit is a limit used later on to check that the error hasn't overflowed the bounds where it will cause calculations to go wrong.18:21.36 
  Yes.18:21.38 
  So, the first for loop sets up a table that maps from input value to 'amount of ink' in the plane.18:22.43 
mvrhel ugh. I need to get rock and scroll installed to vs201218:22.47 
Robin_Watts_ For pams and pgms, FF = white, so the code here calulates a scaled version in nli, and then puts 65536-nli into the table.18:24.03 
mvrhel Robin_Watts_: ok. that makes sense. How does he adjust for ink amounts for the different dots?18:24.21 
  is that done here?18:24.31 
Robin_Watts_ so white comes out as 0, and full ink coverage comes out as 65536.18:24.33 
  I'm not sure what you mean, but I am fairly sure the answer is no :)18:25.03 
mvrhel "maps from input value to 'amount of ink' in the plane." are we just talking about a gamma correction?18:25.41 
  and there is some random term going on in here...18:26.02 
Robin_Watts_ mvrhel: Ah, right.18:26.18 
  The code can take an input 'lut' table. (Confusingly he reuses names)18:26.39 
  IF supplied, then that is assumed to map input values to 24bit fixed point values.18:27.10 
  So if you want to do gamma correction, you supply a lut with the required curve in for each plane.18:27.28 
  If you don't supply such a lut (see "if (lut == NULL)") then he assumes a linear mapping.18:27.53 
mvrhel ok. So I guess I am still not clear what is getting set up in even_better_plane_new18:27.57 
Robin_Watts_ That was just the first for loop.18:28.10 
mvrhel ok. I am not clear in the first for loop... :)18:28.25 
  oh that is the gamma18:28.39 
  but linear if not supplied18:28.50 
  right?18:28.52 
Robin_Watts_ Yes.18:28.55 
  with an inbuilt 'inversion' from 'amount of light' to 'amount of ink'.18:29.08 
mvrhel ok. sorry for being slow...18:29.10 
  gotcha. a comment here would be nice18:29.24 
Robin_Watts_ No problem at all. It took me all last week staring at this code.18:29.26 
  mvrhel: That is true of pretty much everywhere in this code :(18:29.38 
  Ok, so the next for loop... That sets up 2 more luts. rb_lut and rs_lut.18:30.11 
mvrhel ok. Robin_Watts_ are you doing that then?18:30.12 
Robin_Watts_ I will do, sure.18:30.21 
mvrhel ok18:30.24 
  ok next loop18:30.35 
  which could clearly use a comment...18:30.52 
  as you said it is setting up rb_lut and rs_lut18:31.44 
  looks like these are used in the distance calculation18:33.01 
Robin_Watts_ Right, comment writted.18:33.09 
  rb_lut is the EvilToadScreaming distance bias amount.18:33.36 
mvrhel hehe18:33.45 
Robin_Watts_ or rather, it's the 'expected distance between dots for a given ink level'.18:34.04 
mvrhel now that is an interesting value18:34.24 
  and this is where some randomness is introduced18:35.52 
  I would think that the dot size would be important somewhere here18:36.08 
Robin_Watts_ careful.18:36.28 
  The code is confusing here as he's conflated 2 independent loops.18:36.40 
  rb_lut is the expected distance value.18:36.53 
mvrhel I see and I don't see any random stuff except in the names18:37.03 
Robin_Watts_ rs_lut is the scale factor for the random noise.18:37.13 
mvrhel ah ok18:37.19 
  gotcha18:37.24 
Robin_Watts_ hence no actual random stuff in here.18:37.29 
  and rb_lut is completely independent of the rand_scale stuff.18:37.46 
  Then we create the line buffers, and initialise them with sane values.18:38.20 
mvrhel right18:38.35 
  ok. so with a few comments I think we are ok18:38.46 
  I am still fuzzy though18:39.01 
Robin_Watts_ OK, so let's move on to... even_better_line18:39.10 
mvrhel about how dot size would come into play here18:39.12 
  one quick thing18:39.36 
  about rb_lut 18:39.37 
Robin_Watts_ As I understand it, dot size isn't considered at all.18:39.51 
mvrhel wouldn't that be important in the expected distance?18:40.14 
  or at least weighting the error?18:40.38 
  anyway I will not worry about that now18:40.45 
Robin_Watts_ mvrhel: Yes.18:40.45 
mvrhel we can move on18:40.55 
  even_better_line18:41.11 
Robin_Watts_ You'd expect the calculation of rb_lut to take into consideration the number of levels around.18:41.27 
mvrhel right18:41.36 
  maybe a comment about that here would be good18:41.47 
Robin_Watts_ but I don't believe he does. (I've been working with levels=2 for now, so not been worrying about that).18:42.04 
mvrhel right. we can worry about multilevel stuff later18:42.37 
  so we really need to push into even_better_compress_rll18:43.25 
Robin_Watts_ Ok, so even_better_line18:43.28 
  Well, yes and no.18:43.36 
  Let's take a high level view to start with.18:43.43 
mvrhel ok18:43.47 
Robin_Watts_ When he originally wrote this code, I think he wrote it without the runlength encoding crap.18:44.02 
mvrhel oh I see18:44.09 
Robin_Watts_ and he added that to allow people to change the width as they dithered.18:44.29 
  (You can generate a 1000 pixel wide image and then scale it up to 2500 or something).18:44.59 
  1) This seems like a bonkers thing to do to me.18:45.13 
  2) This seems like a bonkers thing to do to me.18:45.21 
mvrhel yes. I have to agree with you18:45.29 
Robin_Watts_ I know that technically that's only 1 objection, but it's such a big one, I thought it was worth stating twice.18:45.39 
mvrhel well hold on one sec18:45.49 
ray_laptop Robin_Watts_: not entirely -- since each input pixel gets dithered with several dots on paper, you may not really ever need the full resolution contone18:46.33 
mvrhel are you saying that this is used for the case where I have a NxN contone image and want to HT it to MN by MN?18:46.38 
Robin_Watts_ Yes.18:46.48 
mvrhel that is ok18:46.51 
  and very common18:46.53 
Robin_Watts_ I'm not saying that scaling is a bad idea.18:46.58 
  I'm saying that scaling using run length encoding is bonkers.18:47.09 
mvrhel that I agree with18:47.15 
ray_laptop it's sort of the inverse of limiting image interpolation to NxN device pixels18:47.23 
mvrhel So is the rll there just so that the output is run length encoded?18:47.55 
Robin_Watts_ when I first saw it, I thought "ah, I bet he's gaining something by having runlengths to work with - generating multiple pixels at once or something".18:47.57 
  but no, he gains nothing from it except complexity.18:48.07 
ray_laptop Robin_Watts_: I also misunderstood you (that run length was your objection)18:48.12 
mvrhel he has run lengths as input?18:48.13 
Robin_Watts_ And he has no scope in the code for scaling vertically either.18:48.22 
  mvrhel: No. The input to even_better_line is not run length coded.18:48.42 
  So he calls even_better_compress_rll to runlength encode it.18:48.57 
mvrhel he is compressing the input?18:49.16 
Robin_Watts_ Yes.18:49.28 
mvrhel ugh18:49.31 
Robin_Watts_ Yes.18:49.35 
  And then guess what he does in even_better_line_rll ? :)18:49.52 
mvrhel ok. that is only going to lead to confusion and headaches18:49.52 
  uncompress it18:50.04 
Robin_Watts_ yes!18:50.08 
mvrhel ok. that should be removed18:50.19 
Robin_Watts_ I reckon so. UNLESS of course the SSE or VEC code makes use of it - but I don't see how.18:50.51 
mvrhel That would be impressive18:51.13 
Robin_Watts_ I have been reluctant to hack and slay too much through this code until I'd talked it through with you.18:51.16 
mvrhel but I can't imagine coding something like that, much less maintaining it18:51.29 
Robin_Watts_ but yes, I'd favour stripping it back to something we understand.18:51.31 
ray_laptop at one point Raph had a rendering lib that he developed that rendered to RLL instead of a bitmap. He probably developed the ETS using the output from that graphics lib18:51.42 
mvrhel Robin_Watts_: ok so on to even_better_line_rll?18:52.59 
Robin_Watts_ sorry, phone went.18:53.18 
  yeah, onto that.18:53.24 
ray_laptop so he probably added the 'compress' code later to accept uncompressed input18:53.40 
Robin_Watts_ and immediately onto even_better_line_hi18:53.41 
mvrhel Robin_Watts_: right18:53.51 
  this is the main working function18:54.13 
Robin_Watts_ It is.18:54.17 
  Ignore all the variable defs, we'll deal with 'em as we come to them.18:54.31 
  So, I added a comment to explain the variables we keep around.18:54.55 
  and the first little for loop just sets the initial conditions.18:55.41 
mvrhel yes. ok.18:55.54 
Robin_Watts_ The coupling stuff; this is the multiplane optimisations.18:56.09 
  He has 2 versions in here. The one described in the paper, plus a modified version 'FANCY_COUPLING'. I don't claim to entirely understand FANCY_COUPLING.18:56.49 
mvrhel ok only used if FANCY_COUPLING18:56.52 
  hey its fancy18:57.09 
Robin_Watts_ No, coupling is used both with and without FANCY_COUPLING.18:57.25 
mvrhel what more do you need to know about it18:57.26 
  ok18:57.31 
Robin_Watts_ yeah :)18:57.34 
  So, our outer loop is for i from 0 to xd.18:58.07 
mvrhel right18:58.12 
Robin_Watts_ So i is the output pixel.18:58.13 
  He does some wacky stuff that had me confused for ages to try and skip multiple blank pixels.18:58.41 
  and I'm sure it's very clever.18:58.45 
  and I'm fairly sure it doesn't work.18:58.52 
mvrhel oh that is the comment around 84818:59.17 
Robin_Watts_ I am tempted to say we should ignore it and skip over it for now.18:59.22 
  yes.18:59.42 
  oh, god.19:00.18 
mvrhel Robin_Watts_: yes you are probably correct about white19:00.28 
Robin_Watts_ I think I've spotted the flaw in my understanding.19:00.33 
  but even so I'm still suspicious. Let's skip it and come back to it later.19:00.55 
  So line 901.19:01.11 
mvrhel Robin_Watts_: so right now, you have this disabled19:01.15 
  with n_work19:01.23 
Robin_Watts_ mvrhel: No, it's enabled.19:01.28 
mvrhel oh ok19:01.38 
  I see19:01.41 
Robin_Watts_ I am just suspicious that it's never firing. (or not firing often enough).19:01.59 
mvrhel oh n_work is locally defined and used outside the loop19:02.12 
Robin_Watts_ n_work is defined to be 0, then increments by 1 for each plane that has a non-zero pixel in it.19:02.38 
mvrhel oh never mind19:02.39 
Robin_Watts_ If n_work ends up being 0, then we can skip all the hard work.19:02.52 
mvrhel right19:03.09 
  ok line 90119:03.16 
Robin_Watts_ The top loop basically checked to see if the next 'jmax' pixels were all white, and if not, we come through here.19:03.53 
mvrhel right19:04.02 
Robin_Watts_ jmax = 16, or the number of pixels left to do if less than 16.19:04.08 
  So the contents of these loops can be thought of as being "for each pixel in each plane..."19:04.41 
  count is the number of pixels left in the current run. It's initially zero, so we start by runlength decoding the first runlength entry to get src_pixel.19:05.40 
mvrhel Robin_Watts_: so jmax is the loop across the planes?19:05.41 
Robin_Watts_ No. for j = 0 to jmax is the loop across output pixels.19:06.11 
mvrhel or a loop across 16 pixels19:06.15 
Robin_Watts_ yes.19:06.19 
mvrhel ah 19:06.19 
  ok19:06.20 
  a comment there would be nice19:06.49 
Robin_Watts_ Any comment I put there will depend on my understanding of the earlier skipping code.19:07.21 
  but yes.19:07.34 
mvrhel well at minimum a note that it is running across output indices19:08.12 
  now work_idx is running across non-white planes19:08.31 
Robin_Watts_ So, for each src_pixel we read, we lookup in our luts, to get: iml (the image level), rbl (the expected distance)19:08.31 
  yes.19:08.45 
  and rs (the random noise shift level)19:09.06 
mvrhel Robin_Watts_: right19:09.33 
Robin_Watts_ count-- <- that's one pixel from this runlength run done.19:09.53 
  So we're into the real routine now.19:09.59 
mvrhel if (count[plane_idx] == 0)19:10.00 
  the comment about that19:10.21 
Robin_Watts_ That's the runlength decode. Go on.19:10.28 
mvrhel so why does it not get the lut stuff if if (count[plane_idx] !=0)19:11.30 
  I am confused by the comment vs. the code19:11.44 
Robin_Watts_ mvrhel: The first time we enter this routine, count = 0, so we read the next token.19:11.45 
  That sets count to be the length of the run.19:12.06 
  and we decrement that by 1 each time around the loop.19:12.15 
  "Decode the next runlength entry if required." <- it's required if count == 0.19:13.01 
  Otherwise we know that we decoded it last time around, and the iml, rbl, rs values are all still valid.19:13.23 
mvrhel oh ok19:13.31 
Robin_Watts_ Ok, so the next bit of code is for equation 2 from the paper.19:14.18 
  That's obvious enough I think?19:14.28 
mvrhel yes. a pretty good match actually19:14.56 
Robin_Watts_ Then we get the guts of ets.19:15.09 
mvrhel other than pr is not clear to me19:15.16 
  but I can assume that is r''19:15.29 
Robin_Watts_ Raph uses 'p' to mean 'pointer to' I think.19:15.43 
mvrhel I did not like the use of '' in the paper19:16.12 
Robin_Watts_ so 'pr[i]' = the r value for i.19:16.16 
  Me either.19:16.18 
  It was just wrong.19:16.24 
mvrhel ok. so I agree that is equation 219:16.49 
  the forward error19:16.53 
Robin_Watts_ The forward distance.19:17.03 
mvrhel yes distance I mean19:17.09 
Robin_Watts_ right.19:17.15 
  So, if the pixel is white, the expected distance is infinite.19:18.26 
mvrhel now I do agree that the test for the white pixel matches the case where g is zero in (5)19:18.31 
Robin_Watts_ OK. so into the second part of that if.19:18.47 
mvrhel yes. this looks like where the fun really starts19:19.02 
Robin_Watts_ new_r = the current calculated distance.19:19.11 
  and just in case it's too huge, clip that to rlimit.19:19.25 
  (Would you be happy with me removing the even_ prefixes from these things?)19:19.48 
mvrhel and where was even_rlimit set?19:19.52 
Robin_Watts_ in _new19:19.56 
mvrhel thats right19:20.00 
  Robin_Watts_: yes19:20.07 
Robin_Watts_ cool.19:20.11 
mvrhel when I see even I exepect to see an odd someplace...19:20.21 
Robin_Watts_ So the paper says "and use the difference between the actual and estimate distance as the threshold modulation term"19:20.46 
  yeah, me too. drives me bonkers.19:20.57 
  but that seems a bit vague to me.19:21.09 
mvrhel Robin_Watts_: yes. I was confused when I read that19:21.20 
  that says that if I have a great estimate, then I don't adjust the threashold19:21.46 
Robin_Watts_ rg = new_r converted to the same fixed point representation as the rbl values.19:21.49 
mvrhel is that due to the fact that the estimate is already built in19:22.06 
Robin_Watts_ sorry?19:22.18 
mvrhel and so we are simply adjusting for any error that we had in a previous calculation19:22.23 
Robin_Watts_ No.19:22.29 
  The idea here, is that if the current ink level suggests I should have a pixel set every 10th pixel, and I'm 40 pixels away from the nearest one, I'm overdue a dot.19:23.50 
  So it biases us towards having a dot.19:24.00 
  And if the current ink level suggests that I should have a pixel set every 10th pixel, and I'm only 3 away from the last one, I should probably bias us away from having a dot.19:24.38 
  So rg = The measured distance from the last dot.19:25.15 
  rbl = The actual distance from the last dot.19:25.31 
mvrhel ok. I guess I am confused by the wording "estimate distance "19:25.51 
  I understand what you said19:25.55 
  but not "estimate distance"19:26.05 
Robin_Watts_ For estimate distance read "expected distance"19:26.20 
  "Thus, we estimate the average inter-dot distance, and use the difference between the actual and estimated distance as the threshold modulation term."19:27.14 
mvrhel ok. I do like expected distance with what you said19:27.18 
Robin_Watts_ I reckon that could be more helpfully put as:19:27.27 
  "Thus, we calculate the expected inter-dot distance, and use the difference between the actual and expected distance as the threshold modulation term."19:27.52 
mvrhel yes. that to me is much clearer. estimated has a certain meaning to me19:28.07 
Robin_Watts_ yeah.19:28.13 
  So then we get to a bit of the code where I've been fiddling.19:28.27 
mvrhel implying that at some point I did something to compute it19:28.31 
  ok so r_tmp19:28.48 
Robin_Watts_ r_tmp is 'munged' a bit here, then stored back into r_scratch19:28.56 
  The paper gives no hint at all as to what this munging is about.19:29.14 
mvrhel I like your comments :)19:29.17 
  and what you did here for testing19:29.44 
  and this is where the paper is not clear19:30.03 
  I have trouble relating equation 5 to the distance terms19:30.20 
Robin_Watts_ yeah. So I reckon we move on for now, and come back later when we want to experiment a bit.19:30.21 
  Most of equation 5 is in _new.19:30.38 
  rbl[g] = 0.95/(g^2)19:31.14 
mvrhel ok. so in any event r_scratch contains r_tmp19:31.14 
  where is that?19:31.43 
Robin_Watts_ That calculation is done in _new.19:31.58 
  eb_compute_rbscale returns 0.95 (for square aspect ratios)19:32.53 
  so rbscale = 0.95 in _new19:33.13 
mvrhel ok I see19:33.26 
  ok back to where we were19:33.34 
Robin_Watts_ actually, I read that as 0.95/g19:33.49 
  not g^2.19:33.53 
  but anyway, back to where we were.19:35.02 
mvrhel you mean in rb = (rbscale * (1 << (2 * EVEN_SHIFT - even_c1))) / nl;19:35.07 
Robin_Watts_ yeah.19:35.13 
mvrhel is there some log aspect to this?19:35.23 
  I dont guess so19:35.42 
  I would have to look at this 19:35.47 
  maybe add a comment to come back19:36.01 
  ok so we are on /* Dither each plane. */19:36.43 
Robin_Watts_ Yes.19:36.51 
mvrhel with r_scratch as our threshold?19:37.03 
Robin_Watts_ Note that we have calculated r_scratch for each plane at this point.19:37.13 
mvrhel or no that is the biase19:37.17 
  on the error19:37.27 
Robin_Watts_ We'll get to the error in a mo.19:37.33 
mvrhel ok so again we are looping over the nonzero planes19:37.52 
Robin_Watts_ Right. And for each plane we are holding the error values from surrounding pixels in e_1_1, e_m1_1 etc19:38.11 
  e_m1_1 is the one above and to the right.19:38.27 
  So the first thing we do is shuffle all those errors along to the left by one, and read the next one from the line store (piir)19:39.04 
mvrhel ok and there are the FS weight19:39.13 
Robin_Watts_ Indeed.19:39.17 
  Now, when I came to this code, Raph had those weights wrong.19:39.28 
mvrhel oh really19:39.55 
Robin_Watts_ he had the 3 and 1 reversed.19:39.57 
mvrhel oops19:40.02 
Robin_Watts_ Not a huge difference, but it might be worth someone double checking me there.19:40.34 
mvrhel ok19:40.45 
Robin_Watts_ just in case I've got it wrong.19:40.48 
  (or quite possibly, that I've made 2 changes that cancel each other out or something)19:41.04 
  So he adds in the weights and new_e_1_0 is the total error passed into this pixel from the surrounding pixels.19:41.43 
  ok?19:43.21 
mvrhel right. this is a little different than I have usually seen this coded. usually. I see an error buffer that is for the next line with all the contributions form the previous line but I understand19:43.53 
Robin_Watts_ He has it hardwired here so that white pixels always stay white. I can't help feeling that if we're doing that, we should set the error to 0.19:44.02 
  Yes, me too.19:44.06 
mvrhel Robin_Watts_: I agree with you comment about the white pixel19:44.34 
  something should occur error wise19:44.48 
  i.e. no error19:45.00 
  or some adjustment19:45.17 
Robin_Watts_ His way is quite smart in that he's not reading repeatedly from the line buffer, but it does have the potential to accumulate errors.19:45.18 
mvrhel right. I believe one has to be much more careful when doing it this way (or rather is is easier to goof up)19:46.09 
Robin_Watts_ (i.e. when I've seen it done before, care is taken so that the propagated errors from a given pixel always add up exactly.)19:46.11 
mvrhel right19:46.22 
Robin_Watts_ wheras here, rounding errors can occur.19:46.27 
mvrhel oh yes. since you are coming from multiple sources and adding19:46.47 
  rather than propagating19:46.53 
Robin_Watts_ BUT... I think he's working in 16bit accuracy here, so the errors are probably piddlingly small and always round down anyway.19:47.01 
mvrhel ok19:47.07 
Robin_Watts_ OK, so now he calculates an 'err' value. This is the 'biased error' value, I reckon.19:47.49 
mvrhel so down to the non-white case19:47.50 
Robin_Watts_ It starts off with new_e_1_0 (the error values passed in).19:48.08 
  He adds r_scratch19:48.16 
  then seasons with some random noise.19:48.28 
mvrhel ok so new_e_1_0 is the standard error19:48.35 
Robin_Watts_ Yes.19:48.46 
mvrhel r_scratch[plane_idx] is the stuff from the distance calculation19:48.48 
  and then the random19:49.10 
Robin_Watts_ right.19:49.19 
mvrhel and then some more even clamping....19:49.31 
Robin_Watts_ So then he clamps the error.19:49.32 
  Actually... that comment is wrong.19:49.40 
  It's not for overflows.19:49.43 
mvrhel under flow19:49.51 
Robin_Watts_ It's for the 0.55 thing.19:49.58 
mvrhel ok19:50.01 
  explain that one again19:50.16 
Robin_Watts_ See section 6 of the paper :)19:50.43 
  It's voodoo.19:50.55 
mvrhel right let me skim that quick19:50.56 
  ok that is not so clear all at19:51.43 
  so the error has some minimum value19:52.00 
  trying to think about what that does19:52.33 
  hold on phone19:52.38 
Robin_Watts_ holding; I am tempted to put a "FIXME: Understand this" in there, and keep moving for now.19:54.12 
mvrhel Robin_Watts_: that sounds good19:54.22 
Robin_Watts_ you off the phone?19:54.32 
mvrhel I am now19:54.44 
  that was my wife19:54.48 
Robin_Watts_ ok, so then we have the coupling thing.19:54.53 
mvrhel I have about 10 more minutes19:54.54 
Robin_Watts_ ah, ok.19:55.01 
mvrhel ok so yes coupling19:55.16 
Robin_Watts_ The coupling gets mixed in with the unclamped error. We'll get on to how that's calculated in a mo.19:55.30 
  with the clamped error. (the coupling is not subject to clamping I mean).19:55.46 
mvrhel looks like its getting added to the clamped error19:55.50 
  right19:55.54 
  I wonder if it should19:56.01 
  It would seem like it19:56.16 
Robin_Watts_ The code is true to the paper, but I wondered the same.19:56.17 
mvrhel ok. another note to make in the code19:56.40 
Robin_Watts_ I thought I SHOULD be clamped when I thought the clamping was to do with avoiding over/underflows.19:56.45 
mvrhel I hope you are writing these down :)19:56.50 
Robin_Watts_ I am annotating the code as we go.19:56.59 
mvrhel good deal19:57.03 
Robin_Watts_ Then we calculate the quantised value.19:57.24 
mvrhel so where was coupling computed?19:57.35 
Robin_Watts_ we'll get there in a mo.19:57.50 
mvrhel ok19:57.53 
Robin_Watts_ For the first plane it's 0.19:57.55 
mvrhel ok19:58.00 
Robin_Watts_ imo should be in the range 0 to levels-1.19:58.22 
  IF it's not clamp it there.19:58.27 
mvrhel line 1096 is not all that clear to me but I will assume it is thresholding19:59.09 
Robin_Watts_ Then coupling_contribution (another nasty confusing variable name) is the classic FS error outbound from this pixel.19:59.14 
  mvrhel: Can you paste the line? My line numbers don't match up now :)_19:59.46 
mvrhel imo = ((err + im) * dith_mul + (1 << (EVEN_SHIFT + 7))) >> (EVEN_SHIFT + 8);19:59.53 
ray_laptop Robin_Watts_: did you get rid of all of that 'seed*' and 'sum' (or is it actually used somewhere ?)19:59.54 
Robin_Watts_ ray_laptop: That's part of the random noise stuff.20:00.20 
ray_laptop doesn't have Robin_Watts's code.20:00.23 
Robin_Watts_ The code has 2 different ways of calculating random noise, and that particular one was commented out in the code as it came to me.20:00.47 
  It's now in a switch so we can experiment.20:00.56 
mvrhel Robin_Watts_: so lets keep moving forward20:01.08 
  looking at coupling_contribution20:01.12 
Robin_Watts_ mvrhel: That is, I believe equation 7.20:01.20 
ray_laptop Robin_Watts_: I see. so calculating the seed and sum if we are not going to use it should be in the switch, too ?20:01.41 
Robin_Watts_ ray_laptop: It is.20:01.58 
  Or at least the per pixel work is.20:02.06 
mvrhel Robin_Watts_: ok 20:02.08 
  can you add in the comment that this is equation 720:02.21 
  that makes sense to me20:02.24 
Robin_Watts_ done.20:02.37 
mvrhel where are the plane weights used in coupling_contribution = im - ((imo * imo_mul) >> IMO_SHIFT);20:02.50 
Robin_Watts_ not yet...20:03.00 
ray_laptop mvrhel: that's the 'strengths'20:03.14 
mvrhel ok weights strenghts20:03.25 
  Robin_Watts_: what is that line doing 20:03.42 
Robin_Watts_ Then coupling_contribution (another nasty confusing variable name) is the classic FS error outbound from this pixel.20:03.55 
mvrhel oh20:04.07 
Robin_Watts_ im = desired output pixel.20:04.10 
  (imo * imo_mul) >> IMO_SHIFT) = achieved output pixel.20:04.23 
mvrhel yes. poorly named for this algorithm20:04.30 
  ok20:04.41 
Robin_Watts_ Right, but the reason for that will become clear.20:04.45 
mvrhel I see below that20:04.46 
Robin_Watts_ So then we update the error passed in to get the error passed out.20:04.56 
mvrhel right20:05.10 
Robin_Watts_ new_e_1_0 += coupling_contribution;20:05.10 
  Then we get the actual coupling calculation.20:05.17 
mvrhel right20:05.43 
  oh Robin_Watts_ I need to go for a bit20:06.11 
  like 30 minutes20:06.20 
Robin_Watts_ mvrhel: OK20:06.25 
mvrhel are you going to be around20:06.29 
Robin_Watts_ I may be having dinner when you get back. I'll try and check back in afterwards, but otherwise we can pick this up again tomorrow?20:06.52 
mvrhel Robin_Watts_: lets do that20:07.01 
Robin_Watts_ cool.20:07.07 
mvrhel I will also skim the rest my self20:07.12 
  if we don't meet up before tomorrow20:07.30 
Robin_Watts_ If you could check my commit about correcting the weights, that would be good.20:07.35 
mvrhel ok will do20:08.10 
  bbiaw20:08.12 
dave5 Hi. I need to know if a given EPS file uses RGB colors or CMYK colors.21:01.04 
  i have a method that uses pswrite and pstoedit that works21:01.25 
  but is there a way i can use gs directly to give me the info?21:01.41 
  (I have been told to stop using pswrite, and move to ps2write... but i don't get the info i need using ps2write)21:02.18 
Robin_Watts_ mvrhel: Changes pushed.21:13.56 
 Forward 1 day (to 2012/11/07)>>> 
ghostscript.com
Search: