#include <gtest/gtest.h>#include "codec_api.h"#include <stddef.h> static void CheckFunctionOrder (int expect, int actual, const char* name) { EXPECT_EQ (expect, actual) << "Wrong function order: " << name;} typedef void (*CheckFunc) (int, int, const char*);extern "C" void CheckEncoderInterface (ISVCEncoder* p, CheckFunc);extern "C" void CheckDecoderInterface (ISVCDecoder* p, CheckFunc);extern "C" size_t GetBoolSize (void);extern "C" size_t GetBoolOffset (void);extern "C" size_t GetBoolStructSize (void); // Store the 'this' pointer to verify 'this' is received as expected from C code.static void* gThis; /** * Return a unique number for each virtual function so that we are able to * check if the order of functions in the virtual table is as expected. */struct SVCEncoderImpl : public ISVCEncoder { virtual ~SVCEncoderImpl() {} virtual int EXTAPI Initialize (const SEncParamBase* pParam) { EXPECT_TRUE (gThis == this); return 1; } virtual int EXTAPI InitializeExt (const SEncParamExt* pParam) { EXPECT_TRUE (gThis == this); return 2; } virtual int EXTAPI GetDefaultParams (SEncParamExt* pParam) { EXPECT_TRUE (gThis == this); return 3; } virtual int EXTAPI Uninitialize() { EXPECT_TRUE (gThis == this); return 4; } virtual int EXTAPI EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) { EXPECT_TRUE (gThis == this); return 5; } virtual int EXTAPI EncodeParameterSets (SFrameBSInfo* pBsInfo) { EXPECT_TRUE (gThis == this); return 6; } virtual int EXTAPI ForceIntraFrame (bool bIDR) { EXPECT_TRUE (gThis == this); return 7; } virtual int EXTAPI SetOption (ENCODER_OPTION eOptionId, void* pOption) { EXPECT_TRUE (gThis == this); return 8; } virtual int EXTAPI GetOption (ENCODER_OPTION eOptionId, void* pOption) { EXPECT_TRUE (gThis == this); return 9; }}; struct SVCDecoderImpl : public ISVCDecoder { virtual ~SVCDecoderImpl() {} virtual long EXTAPI Initialize (const SDecodingParam* pParam) { EXPECT_TRUE (gThis == this); return 1; } virtual long EXTAPI Uninitialize() { EXPECT_TRUE (gThis == this); return 2; } virtual DECODING_STATE EXTAPI DecodeFrame (const unsigned char* pSrc, const int iSrcLen, unsigned char** ppDst, int* pStride, int& iWidth, int& iHeight) { EXPECT_TRUE (gThis == this); return static_cast<DECODING_STATE> (3); } virtual DECODING_STATE EXTAPI DecodeFrame2 (const unsigned char* pSrc, const int iSrcLen, unsigned char** ppDst, SBufferInfo* pDstInfo) { EXPECT_TRUE (gThis == this); return static_cast<DECODING_STATE> (4); } virtual DECODING_STATE EXTAPI DecodeFrameEx (const unsigned char* pSrc, const int iSrcLen, unsigned char* pDst, int iDstStride, int& iDstLen, int& iWidth, int& iHeight, int& iColorFormat) { EXPECT_TRUE (gThis == this); return static_cast<DECODING_STATE> (5); } virtual long EXTAPI SetOption (DECODER_OPTION eOptionId, void* pOption) { EXPECT_TRUE (gThis == this); return 6; } virtual long EXTAPI GetOption (DECODER_OPTION eOptionId, void* pOption) { EXPECT_TRUE (gThis == this); return 7; }}; TEST (ISVCEncoderTest, CheckFunctionOrder) { SVCEncoderImpl* p = new SVCEncoderImpl; gThis = p; CheckEncoderInterface (p, CheckFunctionOrder); delete p;} TEST (ISVCDecoderTest, CheckFunctionOrder) { SVCDecoderImpl* p = new SVCDecoderImpl; gThis = p; CheckDecoderInterface (p, CheckFunctionOrder); delete p;} struct bool_test_struct { char c; bool b;}; TEST (ISVCDecoderEncoderTest, CheckCAbi) { EXPECT_EQ (sizeof (bool), GetBoolSize()) << "Wrong size of bool type"; EXPECT_EQ (offsetof (bool_test_struct, b), GetBoolOffset()) << "Wrong alignment of bool in a struct"; EXPECT_EQ (sizeof (bool_test_struct), GetBoolStructSize()) << "Wrong size of struct with a bool";}
#include <gtest/gtest.h>
#include "codec_api.h"
#include <stddef.h>
static void CheckFunctionOrder (int expect, int actual, const char* name) {
EXPECT_EQ (expect, actual) << "Wrong function order: " << name;
}
typedef void (*CheckFunc) (int, int, const char*);
extern "C" void CheckEncoderInterface (ISVCEncoder* p, CheckFunc);
extern "C" void CheckDecoderInterface (ISVCDecoder* p, CheckFunc);
extern "C" size_t GetBoolSize (void);
extern "C" size_t GetBoolOffset (void);
extern "C" size_t GetBoolStructSize (void);
// Store the 'this' pointer to verify 'this' is received as expected from C code.
static void* gThis;
/**
* Return a unique number for each virtual function so that we are able to
* check if the order of functions in the virtual table is as expected.
*/
struct SVCEncoderImpl : public ISVCEncoder {
virtual ~SVCEncoderImpl() {}
virtual int EXTAPI Initialize (const SEncParamBase* pParam) {
EXPECT_TRUE (gThis == this);
return 1;
}
virtual int EXTAPI InitializeExt (const SEncParamExt* pParam) {
EXPECT_TRUE (gThis == this);
return 2;
}
virtual int EXTAPI GetDefaultParams (SEncParamExt* pParam) {
EXPECT_TRUE (gThis == this);
return 3;
}
virtual int EXTAPI Uninitialize() {
EXPECT_TRUE (gThis == this);
return 4;
}
virtual int EXTAPI EncodeFrame (const SSourcePicture* kpSrcPic,
SFrameBSInfo* pBsInfo) {
EXPECT_TRUE (gThis == this);
return 5;
}
virtual int EXTAPI EncodeParameterSets (SFrameBSInfo* pBsInfo) {
EXPECT_TRUE (gThis == this);
return 6;
}
virtual int EXTAPI ForceIntraFrame (bool bIDR) {
EXPECT_TRUE (gThis == this);
return 7;
}
virtual int EXTAPI SetOption (ENCODER_OPTION eOptionId, void* pOption) {
EXPECT_TRUE (gThis == this);
return 8;
}
virtual int EXTAPI GetOption (ENCODER_OPTION eOptionId, void* pOption) {
EXPECT_TRUE (gThis == this);
return 9;
}
};
struct SVCDecoderImpl : public ISVCDecoder {
virtual ~SVCDecoderImpl() {}
virtual long EXTAPI Initialize (const SDecodingParam* pParam) {
EXPECT_TRUE (gThis == this);
return 1;
}
virtual long EXTAPI Uninitialize() {
EXPECT_TRUE (gThis == this);
return 2;
}
virtual DECODING_STATE EXTAPI DecodeFrame (const unsigned char* pSrc,
const int iSrcLen, unsigned char** ppDst, int* pStride,
int& iWidth, int& iHeight) {
EXPECT_TRUE (gThis == this);
return static_cast<DECODING_STATE> (3);
}
virtual DECODING_STATE EXTAPI DecodeFrame2 (const unsigned char* pSrc,
const int iSrcLen, unsigned char** ppDst, SBufferInfo* pDstInfo) {
EXPECT_TRUE (gThis == this);
return static_cast<DECODING_STATE> (4);
}
virtual DECODING_STATE EXTAPI DecodeFrameEx (const unsigned char* pSrc,
const int iSrcLen, unsigned char* pDst, int iDstStride,
int& iDstLen, int& iWidth, int& iHeight, int& iColorFormat) {
EXPECT_TRUE (gThis == this);
return static_cast<DECODING_STATE> (5);
}
virtual long EXTAPI SetOption (DECODER_OPTION eOptionId, void* pOption) {
EXPECT_TRUE (gThis == this);
return 6;
}
virtual long EXTAPI GetOption (DECODER_OPTION eOptionId, void* pOption) {
EXPECT_TRUE (gThis == this);
return 7;
}
};
TEST (ISVCEncoderTest, CheckFunctionOrder) {
SVCEncoderImpl* p = new SVCEncoderImpl;
gThis = p;
CheckEncoderInterface (p, CheckFunctionOrder);
delete p;
}
TEST (ISVCDecoderTest, CheckFunctionOrder) {
SVCDecoderImpl* p = new SVCDecoderImpl;
gThis = p;
CheckDecoderInterface (p, CheckFunctionOrder);
delete p;
}
struct bool_test_struct {
char c;
bool b;
};
TEST (ISVCDecoderEncoderTest, CheckCAbi) {
EXPECT_EQ (sizeof (bool), GetBoolSize()) << "Wrong size of bool type";
EXPECT_EQ (offsetof (bool_test_struct, b), GetBoolOffset()) << "Wrong alignment of bool in a struct";
EXPECT_EQ (sizeof (bool_test_struct), GetBoolStructSize()) << "Wrong size of struct with a bool";
}