コード例 #1
0
ファイル: daala.c プロジェクト: 9034725985/vlc
static void CloseEncoder( vlc_object_t *p_this )
{
    encoder_t *p_enc = (encoder_t *)p_this;
    encoder_sys_t *p_sys = p_enc->p_sys;

    daala_info_clear(&p_sys->di);
    daala_comment_clear(&p_sys->dc);
    daala_encode_free(p_sys->dcx);
    free( p_sys );
}
コード例 #2
0
ファイル: encode.c プロジェクト: GGGO/baresip
static void destructor(void *arg)
{
	struct videnc_state *ves = arg;

	if (ves->stats.valid)
		dump_stats(ves);

	if (ves->enc)
		daala_encode_free(ves->enc);
}
コード例 #3
0
ファイル: encode.c プロジェクト: GGGO/baresip
int daala_encode_update(struct videnc_state **vesp, const struct vidcodec *vc,
			struct videnc_param *prm, const char *fmtp,
			videnc_packet_h *pkth, void *arg)
{
	struct videnc_state *ves;
	(void)fmtp;

	if (!vesp || !vc || !prm || prm->pktsize < 3 || !pkth)
		return EINVAL;

	ves = *vesp;

	if (!ves) {

		ves = mem_zalloc(sizeof(*ves), destructor);
		if (!ves)
			return ENOMEM;

		*vesp = ves;
	}
	else {
		if (ves->enc && (ves->bitrate != prm->bitrate ||
				 ves->pktsize != prm->pktsize ||
				 ves->fps     != prm->fps)) {

			info("daala: encoder: params changed\n");

			daala_encode_free(ves->enc);
			ves->enc = NULL;
		}
	}

	ves->bitrate = prm->bitrate;
	ves->pktsize = prm->pktsize;
	ves->fps     = prm->fps;
	ves->pkth    = pkth;
	ves->arg     = arg;

	return 0;
}
コード例 #4
0
ファイル: headerencode_test.c プロジェクト: mbebenita/daala
void teardown(void) {
  daala_encode_free(dd);
}
コード例 #5
0
ファイル: encode.c プロジェクト: GGGO/baresip
static int open_encoder(struct videnc_state *ves, const struct vidsz *size)
{
	daala_info di;
	daala_comment dc;
	daala_packet dp;
	int err = 0;
	int complexity = 7;
	int video_q = 30;
	int bitrate = ves->bitrate;

	info("daala: open encoder (%d x %d, %d bps)\n",
	     size->w, size->h, bitrate);

	if (ves->enc) {
		debug("daala: re-opening encoder\n");
		daala_encode_free(ves->enc);
	}

	daala_info_init(&di);
	daala_comment_init(&dc);

	di.pic_width = size->w;
	di.pic_height = size->h;
	di.timebase_numerator = 1;
	di.timebase_denominator = ves->fps;
	di.frame_duration = 1;
	di.pixel_aspect_numerator = -1;
	di.pixel_aspect_denominator = -1;
	di.nplanes = 3;
	di.plane_info[0].xdec = 0;  /* YUV420P */
	di.plane_info[0].ydec = 0;
	di.plane_info[1].xdec = 1;
	di.plane_info[1].ydec = 1;
	di.plane_info[2].xdec = 1;
	di.plane_info[2].ydec = 1;

	di.keyframe_rate = 100;

	info("daala: open encoder with bitstream version %u.%u.%u\n",
	     di.version_major, di.version_minor, di.version_sub);

	ves->enc = daala_encode_create(&di);
	if (!ves->enc) {
		warning("daala: failed to open DAALA encoder\n");
		return ENOMEM;
	}

	daala_encode_ctl(ves->enc, OD_SET_QUANT,
			 &video_q, sizeof(video_q));

	daala_encode_ctl(ves->enc, OD_SET_COMPLEXITY,
			 &complexity, sizeof(complexity));

	daala_encode_ctl(ves->enc, OD_SET_BITRATE,
			 &bitrate, sizeof(bitrate));

	for (;;) {
		int r;

		r = daala_encode_flush_header(ves->enc, &dc, &dp);
		if (r < 0) {
			warning("daala: flush_header returned %d\n", r);
			break;
		}
		else if (r == 0)
			break;

		debug("daala: header: %lld bytes header=%d key=%d\n",
			  dp.bytes,
			  daala_packet_isheader(&dp),
			  daala_packet_iskeyframe(&dp));

#if 0
		re_printf("bos=%lld, eos=%lld, granule=%lld, packetno=%lld\n",
			  dp.b_o_s,
			  dp.e_o_s,
			  dp.granulepos,
			  dp.packetno);
#endif

		err = send_packet(ves, dp.b_o_s, dp.packet, dp.bytes);
		if (err)
			break;
	}

	daala_info_clear(&di);
	daala_comment_clear(&dc);

	return err;
}