2016-04-05 24 views
0

zlibとQtで解凍するのに問題があります。 私は、zlibで圧縮するべきAsterix Cat 240プロトコル(レーダービデオ送信データ)によって提出されたビデオデータを持っています。 私はQByteArray内のデータを保存し、そのようにそれを抽出しようとした:抽出するための圧縮解除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); 

、私は(Zlib QCompressor)この機能を試してみましたが、それは常にfalseを返し、私はなぜわかりません。

例データ:

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

あなたのループには何がありますか? – Ilya

+0

@Ilya私のバッファには、圧縮されたビデオデータより多くのデータが含まれているので、私の元のQByteArrayのカウンタです。 – honiahaka10

答えて

2

あなたはgzipで圧縮解除とはzlibストリームを解凍しようとしているので。それらは2つの異なるものです。 inflateInit2の第2引数をの代わりに15に変更すると、正常に動作するはずです。

また、zlibストリームの終了後に5つの無関係なゼロバイトがあります。これは失敗を引き起こすことはありませんが、5バイトは未使用のままです。

+0

ありがとうございました!もちろん、私は今は実際には分かりませんが、少なくとも今のデータは意味をなさないようです。 Whateはそのコードで '+ 16'ですか?コードの詳細を理解できるリンクなどがありますか? 無関係なゼロバイトはAsterixプロトコルで満たされていますので、私はいつもレーダーからどの程度のレンゲセルを取得したのか、同じブロックサイズのものを持っています。 – honiahaka10

+2

'+ 16'は' inflate() 'にzlibラッパーの代わりにgzipラッパーをデコードするよう指示するオプションです。驚くことではないが、[zlib documentation](http://www.zlib.net/manual.html)に記載されています。 –

関連する問題