

C++ zápis/načítání jednotlivých bitů
Zdravím. Chtěl bych se zeptat, jestli nejde použít lepší způsob práce s bity, než mám momentálně implementovaný. Pracuji s polem typu unsigned char. Při zápisu skládám bity za sebou do jednoho bajtu a až je plný, uložím jej do pole a skladám další bajt. Čtení probíhá tak, že načtu bajt, z něj čtu bity jeden po druhém a až jsem na konci, tak načtu další bajt.
Zápis:
void JKvideocodec::store_bit(unsigned char *data, bool bit)
{
bit ? complete_byte |= 1 << ind : complete_byte &= ~(1 << ind);
if (!ind)
{// zapsal se posledni bit
ind = 7; // inicializace indexu
data[data_i++] = complete_byte; // ulozeni hotoveho bajtu
}
else
ind--; // dalsi bit
}
Čtení:bool JKvideocodec::next_bit(unsigned char *data)
{
if (bit_index < 0)
{// Nacist dalsi byte
one_byte = data[data_index++];
bit_index = 7;
}
return one_byte & (1 << bit_index--);
}
Funguje to, ale jde mi o efektivitu. Jedná se o kodek pro bezeztrátovou kompresi videa a chtěl bych trochu zlepšit výkon, protože jsou trochu problémy s přehráváním. Video v SD rozlišení 25 fps jde v pohodě, ale např. 720p video jen okolo 15 fps, využití CPU je přitom jen kolem 15%. Někde je úzké hrdlo a rád bych přišel na to kde.Díky.