[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Peculiarities of pygame.surfarray.blit_array



No, that doesn't look related to any of the blit_array bugs.

Lenard


René Dudfield wrote:
hi,

Here's an email Nick just sent me... which he sent to Marcus directly
rather than to the mailing list.

It's to do with sndarray... he found the error whilst we were making a
pyweek game... but in the rush forgot about it.

It could be a similar bug.


cu.


---------

I was recently using numpy via pygame.sndarray to build up some accurate loops
of a short stereo sound file.

I would get an error:

" array.shape = shape
ValueError: total size of new array must be unchanged "

I traced it back to the function _array_sample in _numpysndarray.py


    def _array_samples(sound, raw):
        ...

        fmtbytes = (abs (info[1]) & 0xff) >> 3

        ...

        shape = (len (data) / channels * fmtbytes, )


fmtbytes refers to the amount of bytes per sample?

So if we had 16 bit samples / 8bits per byte = 2 bytes per sample?

Stereo at 2 bytes per sample = 4 bytes each "frame"?

Assuming len returns the number of bytes?
(len(data) / 4, 2) would be the correct shape then?

I think there is an operator precedence typo:

    shape = (len (data) / channels * fmtbytes, )
    8 / 2 * 2   = 8

    shape = (len (data) / (channels * fmtbytes), )
    8 / (2 * 2) = 2


re:      fmtbytes = (abs (info[1]) & 0xff) >> 3

is that basically abs(info[1] / 8)?

But then I'm assuming fmtbytes refers to bytes per sample with possible
info[1] values of (-16, -8, 8, 16)

Anyway, I made the operator precedence change and my code worked, so I thought
I would bring it to your attention as there is a possibility there is a bug in
the function and it's not my misunderstanding.





On Tue, Jan 20, 2009 at 10:06 AM, René Dudfield <renesd@xxxxxxxxx> wrote:
I don't think it should be 0.  That means it's not visible, and
contradicts the convention as you say.

I'm not sure if it has always been like that, or if it changed with
the 1.8 changes to surfarray?

ps.  I think there might be a bug with 24bit numpy arrays with
surfarray in general?  I think I came across a bug the other day...
but not sure.  If I find the code where I thought it was happening,
I'll turn it into a test.

cu,


On Tue, Jan 20, 2009 at 9:49 AM, Lenard Lindstrom <len-l@xxxxxxxxx> wrote:
Hi,

I've been looking at bug 24 at http://pygame.motherhamster.org/bugzilla
regarding blit_array and I found something unusual. When blitting to a 32
bit SRCALPHA surface the alpha is set 0. This contradicts the convention of
a default alpha of 255. So what do I do? I can leave it that way for both
Numeric and NumPy arrays, change it for NumPy only or change it for both
array types. I'm inclined to change it for NumPy only. Is there any reason
alpha should be zero?


--
Lenard Lindstrom
<len-l@xxxxxxxxx>