void kr_compositor_subunit_destroy (kr_client_t *client, kr_address_t *address) { unsigned char *command; unsigned char *destroy; kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_COMPOSITOR_CMD, &command); kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_COMPOSITOR_CMD_REMOVE_SUBUNIT, &destroy); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_RADIO_SUBUNIT, address->path.subunit.compositor_subunit); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_RADIO_SUBUNIT, address->id.number); kr_ebml2_finish_element (client->ebml2, destroy); kr_ebml2_finish_element (client->ebml2, command); kr_client_push (client); }
static void kr_mkv_rebuild_header_for_streaming (kr_mkv_t *mkv) { size_t len; uint8_t *segment; uint8_t *segment_info; kr_mkv_t *shdr; char *title; len = mkv->e->pos; mkv->stream_hdr = malloc (len); shdr = kr_mkv_create_bufsize (len); kr_ebml2_set_buffer (shdr->e, shdr->io->buf, shdr->io->space); kr_ebml2_pack_header (shdr->e, "webm", 2, 2); kr_ebml2_start_element (shdr->e, MKV_SEGMENT, &segment); title = "A Krad Restream"; kr_ebml2_start_element (shdr->e, MKV_SEGMENT_INFO, &segment_info); kr_ebml2_pack_string (shdr->e, MKV_SEGMENT_TITLE, title); kr_ebml2_pack_int32 (shdr->e, MKV_SEGMENT_TIMECODESCALE, mkv->timecode_scale); kr_ebml2_pack_string (shdr->e, MKV_SEGMENT_MUXINGAPP, KRAD_MKV_VERSION); kr_ebml2_pack_string (shdr->e, MKV_SEGMENT_WRITINGAPP, KRAD_VERSION_STRING); kr_ebml2_finish_element (shdr->e, segment_info); kr_ebml2_pack_data (shdr->e, MKV_TRACKS, mkv->tracks_info_data, mkv->tracks_info_data_size); mkv->stream_hdr_len = shdr->e->pos; memcpy (mkv->stream_hdr, shdr->e->bufstart, mkv->stream_hdr_len); kr_mkv_destroy (&shdr); }
void kr_compositor_set_frame_rate (kr_client_t *client, int numerator, int denominator) { unsigned char *compositor_command; unsigned char *set_frame_rate; kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_COMPOSITOR_CMD, &compositor_command); kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_COMPOSITOR_CMD_SET_FRAME_RATE, &set_frame_rate); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_COMPOSITOR_FPS_NUMERATOR, numerator); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_COMPOSITOR_FPS_DENOMINATOR, denominator); kr_ebml2_finish_element (client->ebml2, set_frame_rate); kr_ebml2_finish_element (client->ebml2, compositor_command); kr_client_push (client); }
void kr_compositor_set_resolution (kr_client_t *client, int width, int height) { unsigned char *compositor_command; unsigned char *set_resolution; kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_COMPOSITOR_CMD, &compositor_command); kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_COMPOSITOR_CMD_SET_RESOLUTION, &set_resolution); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_COMPOSITOR_WIDTH, width); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_COMPOSITOR_HEIGHT, height); kr_ebml2_finish_element (client->ebml2, set_resolution); kr_ebml2_finish_element (client->ebml2, compositor_command); kr_client_push (client); }
void kr_mixer_update_portgroup_mixmap_channel (kr_client_t *client, char *portgroupname, int in_channel, int out_channel) { unsigned char *command; unsigned char *update; unsigned char *map; kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_MIXER_CMD, &command); kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_MIXER_CMD_UPDATE_PORTGROUP, &update); kr_ebml2_pack_string (client->ebml2, EBML_ID_KRAD_MIXER_PORTGROUP_NAME, portgroupname); kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_MIXER_MIXMAP_CHANNEL, &map); kr_ebml2_finish_element (client->ebml2, map); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_MIXER_PORTGROUP_CHANNEL, in_channel); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_MIXER_PORTGROUP_CHANNEL, out_channel); kr_ebml2_finish_element (client->ebml2, update); kr_ebml2_finish_element (client->ebml2, command); kr_client_push (client); }
void kr_mixer_set_effect_control (kr_client_t *client, char *portgroup_name, int effect_num, int control_id, char *control_name, float control_value, int duration, krad_ease_t ease) { unsigned char *mixer_command; unsigned char *set_control; kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_MIXER_CMD, &mixer_command); kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_MIXER_CMD_SET_EFFECT_CONTROL, &set_control); kr_ebml2_pack_string (client->ebml2, EBML_ID_KRAD_MIXER_PORTGROUP_NAME, portgroup_name); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_MIXER_PORTGROUP_EFFECT_NUM, effect_num); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_SUBUNIT, control_id); kr_ebml2_pack_string (client->ebml2, EBML_ID_KRAD_MIXER_CONTROL_NAME, control_name); kr_ebml2_pack_float (client->ebml2, EBML_ID_KRAD_MIXER_CONTROL_VALUE, control_value); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_MIXER_CONTROL_DURATION, duration); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_MIXER_CONTROL_DURATION, ease); kr_ebml2_finish_element (client->ebml2, set_control); kr_ebml2_finish_element (client->ebml2, mixer_command); kr_client_push (client); }
void kr_mixer_set_sample_rate (kr_client_t *client, int sample_rate) { unsigned char *mixer_command; unsigned char *set_sample_rate; kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_MIXER_CMD, &mixer_command); kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_MIXER_CMD_SET_SAMPLE_RATE, &set_sample_rate); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_MIXER_SAMPLE_RATE, sample_rate); kr_ebml2_finish_element (client->ebml2, set_sample_rate); kr_ebml2_finish_element (client->ebml2, mixer_command); kr_client_push (client); }
void kr_mixer_create_portgroup (kr_client_t *client, char *name, char *direction, int channels) { unsigned char *command; unsigned char *create; kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_MIXER_CMD, &command); kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_MIXER_CMD_CREATE_PORTGROUP, &create); kr_ebml2_pack_string (client->ebml2, EBML_ID_KRAD_MIXER_PORTGROUP_NAME, name); kr_ebml2_pack_string (client->ebml2, EBML_ID_KRAD_MIXER_PORTGROUP_DIRECTION, direction); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_MIXER_PORTGROUP_CHANNELS, channels); kr_ebml2_finish_element (client->ebml2, create); kr_ebml2_finish_element (client->ebml2, command); kr_client_push (client); }
int kr_compositor_subunit_create (kr_client_t *client, kr_compositor_subunit_t type, char *option, char *option2) { unsigned char *command; unsigned char *subunit; command = 0; subunit = 0; switch ( type ) { case KR_SPRITE: case KR_TEXT: case KR_VECTOR: case KR_VIDEOPORT: if ((option != NULL) && (strlen(option))) { break; } default: return 0; } if (option2 == NULL) { option2 = ""; } kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_COMPOSITOR_CMD, &command); kr_ebml2_start_element (client->ebml2, EBML_ID_KRAD_COMPOSITOR_CMD_ADD_SUBUNIT, &subunit); kr_ebml2_pack_int32 (client->ebml2, EBML_ID_KRAD_RADIO_SUBUNIT, type); kr_ebml2_pack_string (client->ebml2, EBML_ID_KRAD_RADIO_SUBUNIT, option); kr_ebml2_pack_string (client->ebml2, EBML_ID_KRAD_RADIO_SUBUNIT, option2); kr_ebml2_finish_element (client->ebml2, subunit); kr_ebml2_finish_element (client->ebml2, command); kr_client_push (client); return 1; }