#include <inttypes.h>
#include <math.h>
-#include <limits.h>
-#include <signal.h>
#include <limits.h> /* INT_MAX */
#include "config.h"
#include "libavutil/parseutils.h"
#include "libavutil/samplefmt.h"
#include "libavutil/avassert.h"
-#include "libavutil/intreadwrite.h"
#include "libavformat/avformat.h"
#include "libavdevice/avdevice.h"
#include "libswscale/swscale.h"
-#include "libavcodec/audioconvert.h"
#include "libavutil/opt.h"
#include "libavutil/internal.h"
#include "libavcodec/avfft.h"
#include "libswresample/swresample.h"
-#include "cmdutils.h"
-
-#include <SDL.h>
-#include <SDL_thread.h>
-
#ifdef __cplusplus
}
#endif
private:
enum {
+ kInputPortIndex = 0,
+ kOutputPortIndex = 1,
kNumInputBuffers = 5,
kNumOutputBuffers = 2,
};
enum {
- MODE_H264,
- MODE_MPEG4,
+ MODE_NONE,
MODE_MPEG2,
MODE_H263,
- MODE_VC1
+ MODE_MPEG4,
+ MODE_WMV,
+ MODE_RV,
+ MODE_H264,
+ MODE_VPX,
+ MODE_VC1,
+ MODE_FLV1,
+ MODE_DIVX,
+ MODE_HEVC,
+ MODE_TRIAL
} mMode;
+ enum EOSStatus {
+ INPUT_DATA_AVAILABLE,
+ INPUT_EOS_SEEN,
+ OUTPUT_FRAMES_FLUSHED
+ };
+
enum {
- kPortIndexInput = 0,
- kPortIndexOutput = 1,
+ ERR_NO_FRM = 2,
+ ERR_FLUSHED = 1,
+ ERR_OK = 0, //No errors
+ ERR_OOM = -1, //Out of memmory
+ ERR_CODEC_NOT_FOUND = -2,
+ ERR_DECODER_OPEN_FAILED = -2,
+ ERR_SWS_FAILED = -3,
};
+ bool mFFmpegAlreadyInited;
+ bool mCodecAlreadyOpened;
+ bool mPendingFrameAsSettingChanged;
AVCodecContext *mCtx;
struct SwsContext *mImgConvertCtx;
+ AVFrame *mFrame;
+
+ EOSStatus mEOSStatus;
bool mExtradataReady;
bool mIgnoreExtradata;
bool mSignalledError;
+ bool mDoDeinterlace;
int32_t mWidth, mHeight, mStride;
enum {
AWAITING_ENABLED
} mOutputPortSettingsChange;
-
- status_t initFFmpeg();
- void deInitFFmpeg();
- void setAVCtxToDefault(AVCodecContext *avctx, const AVCodec *codec);
+ void setMode(const char *name);
+ void initInputFormat(uint32_t mode, OMX_PARAM_PORTDEFINITIONTYPE &def);
+ void getInputFormat(uint32_t mode, OMX_VIDEO_PARAM_PORTFORMATTYPE *formatParams);
+ void setDefaultCtx(AVCodecContext *avctx, const AVCodec *codec);
+ OMX_ERRORTYPE isRoleSupported(const OMX_PARAM_COMPONENTROLETYPE *roleParams);
void initPorts();
status_t initDecoder();
void deInitDecoder();
+ bool handlePortSettingChangeEvent();
+ int32_t handleExtradata();
+ int32_t openDecoder();
+ void initPacket(AVPacket *pkt, OMX_BUFFERHEADERTYPE *inHeader);
+ int32_t decodeVideo();
+ int32_t preProcessVideoFrame(AVPicture *picture, void **bufp);
+ int32_t drainOneOutputBuffer();
+ void drainEOSOutputBuffer();
+ void drainAllOutputBuffers();
+
void updatePortDefinitions();
DISALLOW_EVIL_CONSTRUCTORS(SoftFFmpegVideo);