goedesmiddags,
Ik was wat aan het expirimenteren met de ffmpeg library in combinatie met SDL. Nu heb ik de volgende situatie.
een SDL_Surface bewaart de pixels in een Uint32 pointer array. (of in een Uint8 voor 8bits kleur)
24bits waardes worden gewoon in 32bits integers gestopt. Als ik SDL een surface laat maken uit een 24bits array, dan gaat dat op een of andere manier prima. Als ik vervolgens echter per-pixel door deze verzameling heen wil lopen dan springt ie logischerwijs met stappen van 32bits, omdat ik 'm cast naar een Uint32 type.
Voor zover ik weet is er echter geen 24bits datatype.
Ik ben nu dan ook opzoek naar een simpele manier om toch de pixels te kunnen lezen. Ik neem aan dat het wel mogelijk is om dmv een datastream steeds 3bytes te lezen en deze te shiften naar hun juiste plek binnen de integer, maar ivm performance hoop ik dat er een simpelere manier is
Ik was wat aan het expirimenteren met de ffmpeg library in combinatie met SDL. Nu heb ik de volgende situatie.
een SDL_Surface bewaart de pixels in een Uint32 pointer array. (of in een Uint8 voor 8bits kleur)
24bits waardes worden gewoon in 32bits integers gestopt. Als ik SDL een surface laat maken uit een 24bits array, dan gaat dat op een of andere manier prima. Als ik vervolgens echter per-pixel door deze verzameling heen wil lopen dan springt ie logischerwijs met stappen van 32bits, omdat ik 'm cast naar een Uint32 type.
C++:
1
2
3
| for(int i=0; i<frame->h*frame->pitch/4; i++) { ( (Uint32_t*)frame->pixels )[i] = 0xFF0000; } |
Voor zover ik weet is er echter geen 24bits datatype.
Ik ben nu dan ook opzoek naar een simpele manier om toch de pixels te kunnen lezen. Ik neem aan dat het wel mogelijk is om dmv een datastream steeds 3bytes te lezen en deze te shiften naar hun juiste plek binnen de integer, maar ivm performance hoop ik dat er een simpelere manier is
oprecht vertrouwen wordt nooit geschaad