github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/image/rawp/librawp/src/rawp_test.cc (about)

     1  // Copyright 2014 <chaishushan{AT}gmail.com>. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  #include "rawp.h"
     6  #include "test.h"
     7  
     8  TEST(RawP, Simple) {
     9  	int width = 800;
    10  	int height = 600;
    11  	int channels = 3;
    12  	int depth = 8;
    13  	int data_type = kRawPDataType_UInt;
    14  	RawPEncodeOptions* opt = NULL;
    15  
    16  	uint8_t* rgb = new uint8_t[width*height*channels*depth/8];
    17  	for(int i = 0; i < width*height*channels*depth/8; ++i) {
    18  		rgb[i] = i&0xFF;
    19  	}
    20  
    21  	RawPEncodeContext ctx;
    22  	int rv = rawpEncodeInit(
    23  		rgb, width, height,
    24  		channels, depth, data_type,
    25  		opt,
    26  		&ctx
    27  	);
    28  	ASSERT_TRUE(rv != 0);
    29  
    30  	uint8_t* output = new uint8_t[ctx.MaxEncodedLength];
    31  	size_t output_size = rawpEncode(&ctx, output);
    32  	ASSERT_TRUE(output_size > 0);
    33  
    34  	RawPHeader hdr;
    35  	memset(&hdr, 0, sizeof(hdr));
    36  	rv = rawpDecodeHeader(output, output_size, &hdr);
    37  	ASSERT_TRUE(rv != 0);
    38  	ASSERT_TRUE(hdr.Width == width);
    39  	ASSERT_TRUE(hdr.Height == height);
    40  	ASSERT_TRUE(hdr.Channels == channels);
    41  	ASSERT_TRUE(hdr.Depth == depth);
    42  	ASSERT_TRUE(hdr.DataType == data_type);
    43  
    44  	uint8_t* rgb2 = new uint8_t[width*height*channels*depth/8];
    45  	memset(rgb2, 0, width*height*channels*depth/8);
    46  
    47  	
    48  	memset(&hdr, 0, sizeof(hdr));
    49  	rv = rawpDecode(
    50  		output, output_size,
    51  		rgb2, width*height*channels*depth/8,
    52  		&hdr
    53  	);
    54  	ASSERT_TRUE(rv != 0);
    55  	ASSERT_TRUE(hdr.Width == width);
    56  	ASSERT_TRUE(hdr.Height == height);
    57  	ASSERT_TRUE(hdr.Channels == channels);
    58  	ASSERT_TRUE(hdr.Depth == depth);
    59  	ASSERT_TRUE(hdr.DataType == data_type);
    60  
    61  	for(int i = 0; i < width*height*channels*depth/8; ++i) {
    62  		if(rgb[i] != rgb2[i]) {
    63  			ASSERT_TRUE_MSG(false, "i = %d", i);
    64  		}
    65  	}
    66  }
    67  
    68  TEST(RawP, Snappy) {
    69  	int width = 800;
    70  	int height = 600;
    71  	int channels = 3;
    72  	int depth = 8;
    73  	int data_type = kRawPDataType_UInt;
    74  	RawPEncodeOptions* opt = new RawPEncodeOptions;
    75  	opt->UseSnappy = 1;
    76  
    77  	uint8_t* rgb = new uint8_t[width*height*channels*depth/8];
    78  	for(int i = 0; i < width*height*channels*depth/8; ++i) {
    79  		rgb[i] = i&0xFF;
    80  	}
    81  
    82  	RawPEncodeContext ctx;
    83  	int rv = rawpEncodeInit(
    84  		rgb, width, height,
    85  		channels, depth, data_type,
    86  		opt,
    87  		&ctx
    88  	);
    89  	ASSERT_TRUE(rv != 0);
    90  
    91  	uint8_t* output = new uint8_t[ctx.MaxEncodedLength];
    92  	size_t output_size = rawpEncode(&ctx, output);
    93  	ASSERT_TRUE(output_size > 0);
    94  
    95  	RawPHeader hdr;
    96  	memset(&hdr, 0, sizeof(hdr));
    97  	rv = rawpDecodeHeader(output, output_size, &hdr);
    98  	ASSERT_TRUE(rv != 0);
    99  	ASSERT_TRUE(hdr.Width == width);
   100  	ASSERT_TRUE(hdr.Height == height);
   101  	ASSERT_TRUE(hdr.Channels == channels);
   102  	ASSERT_TRUE(hdr.Depth == depth);
   103  	ASSERT_TRUE(hdr.DataType == data_type);
   104  
   105  	ASSERT_TRUE(hdr.UseSnappy == 1);
   106  
   107  	uint8_t* rgb2 = new uint8_t[width*height*channels*depth/8];
   108  	memset(rgb2, 0, width*height*channels*depth/8);
   109  
   110  	
   111  	memset(&hdr, 0, sizeof(hdr));
   112  	rv = rawpDecode(
   113  		output, output_size,
   114  		rgb2, width*height*channels*depth/8,
   115  		&hdr
   116  	);
   117  	ASSERT_TRUE(rv != 0);
   118  	ASSERT_TRUE(hdr.Width == width);
   119  	ASSERT_TRUE(hdr.Height == height);
   120  	ASSERT_TRUE(hdr.Channels == channels);
   121  	ASSERT_TRUE(hdr.Depth == depth);
   122  	ASSERT_TRUE(hdr.DataType == data_type);
   123  
   124  	for(int i = 0; i < width*height*channels*depth/8; ++i) {
   125  		if(rgb[i] != rgb2[i]) {
   126  			ASSERT_TRUE_MSG(false, "i = %d", i);
   127  		}
   128  	}
   129  }
   130