[an error occurred while processing this directive]
спасибо всем за вчерашюю диск. насчет RLE и господину уни за полезную ссылку. вот, накатал тот алгоритм
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ы 26 апреля 2006 г. 15:41


u8_t data[29] =
// {0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x43,0x4F,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0xF0,0x70,0x70,0x70,0x70,0x70,0x70};
// {0x4F,0x4A,0x4F,0x4F,0x4F,0x4F,0x43,0x43,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0xF0,0x70,0x70,0x70,0x70,0x70,0xA0,0xA0};

{0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x43,0x4F};


u8_t RleBuf[40];

static u8_t* __PackByRLE(u8_t *_src) {
u32_t i = 29 ;
u8_t *src = _src ;
u8_t *dst = RleBuf;
u32_t cnt = -1 ;
u32_t b1 ;
u32_t b2 ;

///// initial read ////
*dst++ = (b1 = *src++);

///// try to pack /////
while(--i) {
b2 = *src++;
if (b2 == b1) {
if (cnt == -1) {
*dst++ = b2;
}
cnt++;
} else {
if (cnt != -1) {
*dst++ = cnt;
cnt = -1 ;
}
*dst++ = b2;
}
b1 = b2;
}
///////check pads /////
if (cnt != -1) {
*dst++ = cnt;
}
///////////////////////


}

void TEST_RLE(void) {

__PackByRLE(data);

}

вроде работает
правда я сжатый поток пишу в другой буфер

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru