Esempio n. 1
0
void mfc_destroy_inst(struct mfc_inst_ctx* ctx)
{
	struct mfc_dec_ctx *dec_ctx;
	struct mfc_enc_ctx *enc_ctx;
	struct mfc_pre_cfg *precfg;

	if (ctx) {
		if (ctx->state < INST_STATE_SETUP) {
			while (!list_empty(&ctx->presetcfgs)) {
				precfg = list_entry((&ctx->presetcfgs)->next,
						struct mfc_pre_cfg, list);

				mfc_dbg("remove unused preset config [0x%08x]\n",
					precfg->type);

				list_del(&precfg->list);
				kfree(precfg);
			}
		} else {
			/* free (decoder/encoder & context) private memory */
			if (ctx->type == DECODER) {
				dec_ctx = ctx->c_priv;
				if (dec_ctx->d_priv)
					kfree(dec_ctx->d_priv);

				kfree(dec_ctx);
			} else if (ctx->type == ENCODER) {
				enc_ctx = ctx->c_priv;
				if (enc_ctx->e_priv)
					kfree(enc_ctx->e_priv);

				kfree(enc_ctx);
			}
		}

		if (ctx->state >= INST_STATE_OPEN) {
			mfc_clock_on(ctx->dev);
			mfc_cmd_inst_close(ctx);
			mfc_clock_off(ctx->dev);
		}

		mfc_free_buf_inst(ctx->id);

		/* free instance context memory */
		kfree(ctx);
	}
Esempio n. 2
0
void mfc_destroy_inst(struct mfc_inst_ctx* ctx)
{
	int ret = 0;

	if (ctx) {
		if (ctx->state >= INST_STATE_OPENED) {
			mfc_clock_on();
			/* FIXME: meaningless return value */
			ret = mfc_cmd_inst_close(ctx);
			mfc_clock_off();
		}

		mfc_free_buf_inst(ctx->id);

		/* FIXME: free ctx->c_priv */

		kfree(ctx);
	}
}