Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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.

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny