心胸决定格局,眼界决定境界...

C++调用java层类

java层已经内部实现了,所以无需用javah生成h头文件,因为这不是C/C++需要去实现。

因为C/C++需要通过JNIEnv调用java层,所以需要java层类的api的签名,这样通过Jni来调用java的api。

根据C/C++调用java层API的目的和业务,实现C++类的接口。

#include "jni.h"
#include "TTVideo.h"
#include "AVCDecoderTypes.h"
#include "M4a.h"

class CMediaCodecJava
{
public:

CMediaCodecJava(TTUint aCodecType);
virtual ~CMediaCodecJava();

public:
virtual TTInt initDecode(void *object);

virtual TTInt uninitDecode();

virtual TTInt start();

virtual TTInt stop();

virtual TTInt setInputBuffer(TTBuffer *InBuffer);

virtual TTInt getOutputBuffer(TTVideoBuffer* DstBuffer, TTVideoFormat* pOutInfo);

virtual TTInt setParam(TTInt aID, void* pValue);

virtual TTInt getParam(TTInt aID, void* pValue);

virtual TTInt renderOutputBuffer(TTVideoBuffer* DstBuffer, TTBool bRender);

private:
virtual TTInt updateMCJFunc();
virtual TTInt updateBuffers();
virtual TTInt setConfigData();
virtual TTInt setCSData();
virtual TTInt setCSDataJava(unsigned char *pBuf, int nLen, int index);

private:
TTUint mVideoCodec;
TTBool mEOS;
TTBool mStarted;
TTBool mAllocated;
TTBool mNewStart;
TTVideoFormat mVideoFormat;
unsigned char * mHeadBuffer;
int mHeadSize;
unsigned char * mHeadConfigBuffer;
int mHeadConfigSize;
TTInt mVideoIndex;

JavaVM* mJVM;
jobject mSurfaceObj;
jobject mMediaCodec;
jobject mBufferInfo;
jobject mVideoFormatObj;
jobjectArray mInputBuffers;
jobjectArray mOutputBuffers;


jclass mMediaCodecClass;
jclass mMediaFormatClass;
jclass mBufferInfoClass;
jclass mByteBufferClass;

jmethodID mToString;
jmethodID mCreateByCodecType;
jmethodID mConfigure;
jmethodID mStart;
jmethodID mStop;
jmethodID mFlush;
jmethodID mRelease;
jmethodID mGetOutputFormat;
jmethodID mGetInputBuffers;
jmethodID mGetOutputBuffers;
jmethodID mDequeueInputBuffer;
jmethodID mDequeueOutputBuffer;
jmethodID mQueueInputBuffer;
jmethodID mReleaseOutputBuffer;
jmethodID mCreateVideoFormat;
jmethodID mSetInteger;
jmethodID mSetByteBuffer;
jmethodID mGetInteger;
jmethodID mBufferInfoConstructor;
jfieldID mSizeField;
jfieldID mOffsetField;
jfieldID mPtsField;
};

#endif //__TTHWDECODER_H__

posted @ 2016-03-04 16:16  WELEN  阅读(510)  评论(0)    收藏  举报