[poppler] Openjpeg2 patches: Why de-inline doGetChar?

Adam Reichold adam.reichold at t-online.de
Mon Jan 5 14:34:07 PST 2015


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hello,

Am 05.01.2015 um 23:02 schrieb Adam Reichold:
> Hello,
> 
> Am 05.01.2015 um 22:49 schrieb Albert Astals Cid:
>> El Dilluns, 5 de gener de 2015, a les 22:29:22, Adam Reichold va 
>> escriure:
>>> Hello again,
>>> 
>>> Am 05.01.2015 um 21:59 schrieb Albert Astals Cid:
>>>> El Dilluns, 5 de gener de 2015, a les 21:46:32, Adam
>>>> Reichold va
>>>> 
>>>> escriure:
>>>>> Hello again,
>>>>> 
>>>>> suggested changes attached as patch.
>>>> 
>>>> Doesn't compile, init() is not accessible from that static 
>>>> function.
>>> 
>>> Sorry about that, it seems CMake does not find OpenJPEG (1 or
>>> 2) at all on my system with the current master, the library is
>>> found alright but the includes are
>>> "LIBOPENJPEG_INCLUDE_DIR-NOTFOUND" so the file was not compiled
>>> at all. Autoconf on the other hand not problems finding at
>>> least the preferred OpenJPEG version 1.
> 
>> HAve you tried cleaning your cmake build dir? It works fine to
>> me.
> 
> It seems for some reason Arch Linux installs the OpenJPEG header
> only into "/usr/include/openjpeg-1.5/openjpeg.h" and "find_path"
> does not find that, symlinking "/usr/include/openjpeg.h" there
> works fine. (Possibly nobody noticed as the package is built using
> Autoconf?) (Also I have to correct myself, OpenJPEG version 2 is
> found correctly.)

It seems the difference is that "configure.ac" will try pkg-config for
OpenJPEG version 1 first and then fall back to heuristics whereas
"FindLIBOPENJPEG.cmake" does not try pkg-config at all?

Best regards, Adam.

> Best regards, Adam.
> 
>> Cheers, Albert
> 
>>> I also attached a fixed patch that moves the
>>> lazy-initialization into the entry points which also has the
>>> benefit of making the check only once for each call of
>>> 'getChars' but is admittedly uglier. (One solution would be to
>>> move the 'inited' flag into the class proper instead of the
>>> pimpl or even use "priv != NULL" as the initialization
>>> condition, but that felt unnecessarily intrusive.)
>>> 
>>> Best regards, Adam.
>>> 
>>>> Cheers, Albert
>>>> 
>>>>> Best regards, Adam.
>>>>> 
>>>>> Am 05.01.2015 um 21:24 schrieb Adam Reichold:
>>>>>> Hello,
>>>>>> 
>>>>>> Am 04.01.2015 um 23:44 schrieb Albert Astals Cid:
>>>>>>> El Dilluns, 5 de gener de 2015, a les 08:53:26, Adrian
>>>>>>>  Johnson
>>>>>>> 
>>>>>>> va escriure:
>>>>>>>> On 05/01/15 08:39, Albert Astals Cid wrote:
>>>>>>>>> Adrian, any reason you de-inlined doGetChar in the
>>>>>>>>>  patches for openjpeg2?
>>>>>>>>> 
>>>>>>>>> As far as i remember when i made this function
>>>>>>>>> inline it got us a not so bad free speed increase.
>>>>>>>> 
>>>>>>>> When I wrote the patch I moved all openjpeg specific 
>>>>>>>> types and code into the .cc file. I could not figure 
>>>>>>>> out how to make an inline function in the .h access 
>>>>>>>> the JPXStreamPrivate struct that is defined in the
>>>>>>>> .cc file.
>>>>>>> 
>>>>>>> I see :/
>>>>>>> 
>>>>>>> Cheers, Albert
>>>>>> 
>>>>>> Looking at the implemenation, both "doGetChar" and 
>>>>>> "doLookChar" will always be called inside 
>>>>>> "JPEG2000Stream.cc" via the virtual methods "getChar(s)" 
>>>>>> and "lookChar", so I'd say we could just mark the 
>>>>>> implemenations as "inline" as the compiler can still
>>>>>> inline within the compilation unit.
>>>>>> 
>>>>>> Actually, I think there is no compelling reason to have 
>>>>>> those present in the header at all, as they always seem
>>>>>> to access the data via the "priv" pointer anyway, so I'd
>>>>>> say the declarations like
>>>>>> 
>>>>>> static inline int doGetChar(JPXStreamPrivate* priv); 
>>>>>> static inline int doLookChar(JPXStreamPrivate* priv);
>>>>>> 
>>>>>> only within the source file could open even more 
>>>>>> possibilities for compiler optimizations. (You could 
>>>>>> probably also make them inline methods of 
>>>>>> "JPXStreamPrivate" as well, but then the compiler would 
>>>>>> have to infer the effective linkage. Maybe we could put
>>>>>> the whole definition of "JPXStreamPrivate" within the
>>>>>> anonymous namespace anyway?)
>>>>>> 
>>>>>> Best regards, Adam.
>>>>>> 
>>>>>>>>> Cheers,
>>>>>>>>> 
>>>>>>>>> Albert
>>>>>>>>> 
>>>>>>>>> _______________________________________________ 
>>>>>>>>> poppler mailing list poppler at lists.freedesktop.org
>>>>>>>>>  
>>>>>>>>> http://lists.freedesktop.org/mailman/listinfo/poppler
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>
>>>>>>>>> 
_______________________________________________ poppler
>>>>>>>> mailing list poppler at lists.freedesktop.org 
>>>>>>>> http://lists.freedesktop.org/mailman/listinfo/poppler
>>>>>>>
>>>>>>>
>>>>>>>> 
_______________________________________________ poppler
>>>>>>> mailing list poppler at lists.freedesktop.org 
>>>>>>> http://lists.freedesktop.org/mailman/listinfo/poppler
>>>>>> 
>>>>>> _______________________________________________ poppler 
>>>>>> mailing list poppler at lists.freedesktop.org 
>>>>>> http://lists.freedesktop.org/mailman/listinfo/poppler
> 
>> _______________________________________________ poppler mailing 
>> list poppler at lists.freedesktop.org 
>> http://lists.freedesktop.org/mailman/listinfo/poppler
> 
> _______________________________________________ poppler mailing
> list poppler at lists.freedesktop.org 
> http://lists.freedesktop.org/mailman/listinfo/poppler
> 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAEBCAAGBQJUqxFcAAoJEPSSjE3STU34hSkIAKcmRY5HVChurpo1UyzCGNfw
nASEqsrwmD0gMnztLSeKPR3wcoAfGyv3i12EaHZxFc9NBoFsOTWgJFL0vVFQpPWJ
0BfE5cqCC63Tfj42Gx33AkMKljz4cRY6HdeZgurwXVIPN1Hvwg+u9n+61tRCUax3
+MRkGWHnvsUDHfNdNZMJ/KHLWXKVZAaJhnNSQ+yMSF8mkyNkW6YiA59rsHFkPl5L
8WFcUPC5ddqGpyvv22EinL/Nl+A9HLGktcEaQd0jmcjq774AxeyA1X1JQcqUrdbm
74mjE90hIOjpcSk3nNfHbzCEF3UqnONzVA5QofzAZ1FlS6gg5hSr96OOzakPtIQ=
=XxTV
-----END PGP SIGNATURE-----


More information about the poppler mailing list