/* Initialization routine */
OMX_ERRORTYPE AvcDecoder_OMX::AvcDecInit_OMX()
{
#ifdef MFC_FPS
	time = 0;
	frame_cnt = 0;
	decode_cnt = 0;
	need_cnt = 0;
#endif

    iDisplay_Width = 0;
    iDisplay_Height = 0;

	delimiter_h264[0] = 0x00;
	delimiter_h264[1] = 0x00;
	delimiter_h264[2] = 0x00;
	delimiter_h264[3] = 0x01;

	if(ResetTimestamp() == OMX_FALSE)
	{
		LOGE("ResetTimestamp fail\n");
		return OMX_ErrorUndefined;
	}
	
	if(mfc_create() < 0)
	{
		LOGE("mfc_create fail\n");
		return OMX_ErrorUndefined;
	}

    return OMX_ErrorNone;
}
示例#2
0
文件: main.c 项目: ChangerR/learn
int main(int argc, char *argv[])
{
	struct options opts;

	struct io_dev *input;
	struct io_dev *mfc;
	struct io_dev *output;
	int i;

	struct io_dev *chain[3] = {};

	printf("mfc codec encoding example application\n"
	       "Andrzej Hajda <*****@*****.**>\n"
	       "Copyright 2012 Samsung Electronics Co., Ltd.\n\n");

	if (parse_args(&opts, argc, argv)) {
		print_usage(argv[0]);
		return 1;
	}

	if (opts.in_name)
		input = in_camera_create(opts.in_name);
	else
		input = in_demo_create(opts.width, opts.height);
	if (input == NULL)
		return 1;
	chain[0] = input;

	input->io[DIR_OUT].limit = opts.duration;

	mfc = mfc_create(opts.mfc_name);
	if (mfc == NULL)
		return 1;
	chain[1] = mfc;

	if (mfc_set_fmt(mfc, DIR_IN, opts.width, opts.height))
		return 1;

	if (mfc_set_codec(mfc, DIR_OUT, opts.codec))
		return 1;

	if (mfc_set_rate(mfc, opts.rate))
		return 1;

	for (i = 0; i < opts.nctrls; ++i)
		mfc_set_mpeg_control(mfc, opts.ctrls[i][0], opts.ctrls[i][1]);

	if (opts.in_name)
		if (v4l_copy_fmt(mfc, DIR_IN, input, DIR_OUT))
			return 1;

	output = out_file_create(opts.out_name);
	if (output == NULL)
		return 1;
	chain[2] = output;

	if (dev_bufs_create(input, mfc, MFC_ENC_IN_NBUF))
		return 1;

	if (dev_bufs_create(mfc, output, MFC_ENC_OUT_NBUF))
		return 1;

	if (process_chain(chain, array_len(chain)))
		return 1;

	for (i = 0; i < array_len(chain); ++i)
		chain[i]->ops->destroy(chain[i]);

	return 0;
}