#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <fstream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <webp/decode.h>
#include <webp/demux.h>
using namespace cv;
using namespace std;
#pragma comment( lib, "..\\3rd_party\\libwebp-master\\build\\Debug\\webp.lib" )
#pragma comment( lib, "..\\3rd_party\\libwebp-master\\build\\Debug\\webpdemux.lib" )
static std::vector<uchar> readFile(const char* filename)
{
std::vector<uchar> bytes;
std::ifstream input_file(filename, ios::binary);
if (!input_file.is_open()) {
return bytes;
}
//input_file.read()
char byte;
while (input_file.read(&byte, 1)) {
bytes.push_back(byte);
}
return bytes;
}
int main()
{
int ret = 0;
int w, h;
std::vector<uchar> bytes = readFile("./aaa.webp");
//std::vector<uchar> bytes = readFile("./0.webp")
WebPData wd = { bytes.data() , bytes.size()};
struct WebPDemuxer* dmuxer = WebPDemux(&wd);
int frame_idx = 0;
WebPIterator iter;
while (1) {
ret = WebPDemuxGetFrame(dmuxer, frame_idx, &iter);
uchar * decode_data = WebPDecodeBGRA(iter.fragment.bytes, iter.fragment.size, &w, &h);
if (decode_data == NULL)
break;
cv::Mat src(h, w, CV_8UC4, decode_data);
cv::imshow("dst", src);
cv::waitKey(100);
frame_idx++;
}
cv::waitKey(0);
WebPDemuxDelete(dmuxer);
getchar();
}