Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
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);
}
Exemplo n.º 6
0
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);
}
Exemplo n.º 7
0
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);
}
Exemplo n.º 8
0
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);
}
Exemplo n.º 9
0
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;
}