2016-04-05 24 views
0

Zlib ve Qt ile unzipping yapmakta zorlanıyorum. Zlib ile sıkıştırılması gereken Asterix Cat 240 protokolü (radar video iletim verileri) tarafından sunulan video verilerim var. Ben QByteArray içindeki verileri saklanır ve bunu böyle ayıklamak için çalıştı: ayıklanması içinSıkıştırma Zlib

QByteArray compressedRawVideoDataBlock; 
QByteArray rawVideoDataBlock; 
QVector <QVector <quint8>> videoDataBlock; 
//Video Data 
resize(rawAsterix.videoDataBlockREP); 
for(int r = 0; r<videoDataBlockREP; r++)//index of Video Block 
{ 
    for(int b = 0; b<blockSize ; b++)//index of Video Byte 
    { 
     compressedRawVideoDataBlock.append(static_cast<quint8>(buffer->at(i))); 
     videoDataBlock[r].append(static_cast<quint8>(buffer->at(i))); 
     i++; 
    } 
} 
qDebug() << gzipDecompress(compressedRawVideoDataBlock, rawVideoDataBlock); 

, bu fonksiyonunu (Zlib QCompressor) denedik ama her zaman yanlış döndürür ve neden emin değilim.

Örnek Verileri:

videoDataBlockREP=1 
blockSize=64 
compressedRawVideoDataBlock.toHex() = 7801edd0010d000000c2a0f74f6d0e37884061c0800103060c183060c0800103060c183060c0800103060c183060c0800103060cbc0f0c200000010000000000 
+0

Döngüsünüzde ne var? – Ilya

+0

@Ilya benim tamponlu QByteArray için sadece bir sayaçtır çünkü arabam sadece sıkıştırılmış video verisinden daha fazla veri içeriyor – honiahaka10

cevap

2

Bir gzip açıcı bir zlib akışı sıkıştırmasını çalışıyoruz çünkü. Bunlar iki farklı şey. inflateInit2'un ikinci bağımsız değişkenini 15 (15 + 16 yerine) değiştirirseniz, o zaman çalışması gerekir.

Ayrıca, zlib akışının sonundan sonra beş sıfır sıfır baytınız var. Bu başarısızlığa neden olmaz, ancak bu beş bayt kullanılmaz kalır.

+0

Çalıştığınız için teşekkür ederim! Tabii ki şimdilik şimdilik söyleyemem ama en azından veri artık mantıklı geliyor. Whate, + 16’nın kodunda ne yapar? Kodun ne yaptığını anlayabileceğim bir bağlantınız veya bir şeyiniz var mı? Dışsal sıfır baytlar Asterix protokolü ile doldurulur, bu yüzden her zaman radardan ne kadar çığlık alacağımın aynı blok boyutuna sahip olurum. – honiahaka10

+2

'+ 16'' inflate() işlevini zlib paketleyicisi yerine gzip sarıcısını çözmesini söyleyen bir seçenektir. Şaşırtıcı olmayan bir şekilde, [zlib belgelerinde] belgelenmiştir (http://www.zlib.net/manual.html). –