OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
frame.cpp
Go to the documentation of this file.
1#include "frame.h"
2
3#include <cstring>
4
5using namespace Bink;
6
7void Frame::Plane::setSize(uint32_t iw, uint32_t ih) {
8 uint32_t w16 = ((iw+15)/16)*16; // align to largest block size
9 uint32_t h16 = ((ih+15)/16)*16;
10
11 dat.resize(w16*h16);
12 w = iw;
13 h = ih;
14 strd = w16;
15 }
16
17void Frame::Plane::getPixels8x8(uint32_t rx, uint32_t ry, uint8_t* out) const {
18 const uint8_t* d = dat.data();
19
20 for(uint32_t y=0; y<8; ++y) {
21 for(uint32_t x=0; x<8; ++x) {
22 out[x+y*8] = d[(x+rx) + (y+ry)*strd];
23 }
24 }
25 }
26
27void Frame::Plane::getBlock8x8(uint32_t bx, uint32_t by, uint8_t* out) const {
28 getPixels8x8(bx*8,by*8,out);
29 }
30
31void Frame::Plane::putBlock8x8(uint32_t bx, uint32_t by, const uint8_t* in) {
32 uint8_t* d = dat.data();
33
34 for(uint32_t y=0; y<8; ++y) {
35 for(uint32_t x=0; x<8; ++x) {
36 d[(x+bx*8) + (y+by*8)*strd] = in[x+y*8];
37 }
38 }
39 }
40
41void Frame::Plane::putScaledBlock(uint32_t bx, uint32_t by, const uint8_t* in) {
42 uint8_t* d = dat.data();
43 for(uint32_t y=0; y<16; ++y) {
44 uint32_t y2 = y/2;
45 for(uint32_t x=0; x<16; ++x) {
46 d[(x+bx*8) + (y+by*8)*strd] = in[(x/2)+y2*8];
47 }
48 }
49 }
50
51void Frame::Plane::fill(uint8_t v) {
52 std::memset(dat.data(),v,dat.size());
53 }
54
55uint8_t Frame::Plane::at(uint32_t x, uint32_t y) const {
56 return dat[x + y*strd];
57 }
58
59
61 aud.reserve(4096);
62 }
63
64const Frame::Audio& Frame::audio(uint8_t id) const {
65 return aud[id];
66 }
67
68void Frame::setSize(uint32_t w, uint32_t h) {
69 planes[0].setSize(w,h);
70 planes[1].setSize(w/2,h/2);
71 planes[2].setSize(w/2,h/2);
72 planes[3].setSize(w,h);
73 }
74
75void Frame::setAudioChannels(uint8_t count) {
76 aud.resize(count);
77 }
void putScaledBlock(uint32_t x, uint32_t y, const uint8_t *in)
Definition frame.cpp:41
void getPixels8x8(uint32_t rx, uint32_t ry, uint8_t *out) const
Definition frame.cpp:17
void getBlock8x8(uint32_t x, uint32_t y, uint8_t *out) const
Definition frame.cpp:27
void putBlock8x8(uint32_t x, uint32_t y, const uint8_t *in)
Definition frame.cpp:31
uint8_t at(uint32_t x, uint32_t y) const
Definition frame.cpp:55
void fill(uint8_t v)
Definition frame.cpp:51
const Audio & audio(uint8_t id) const
Definition frame.cpp:64
Definition frame.h:7