Пример #1
0
static int kr_mkv_check_ebml_header (kr_mkv_t *mkv) {

  char doctype[64];
  uint32_t version;
  uint32_t read_version;
  

  if (0 > kr_ebml2_unpack_header (mkv->e, doctype, 64,
                                  &version, &read_version)) {
    printke ("Could not read EBML header");
    return -1;                            
  }

  if ((strncmp(doctype, "webm", 4) != 0) &&
      (strncmp(doctype, "matroska", 8) != 0)) {
    printke ("Invalid Doctype: %s", doctype);
    return -1;      
  }
  
  if ((version < 2) || (version > 4) ||
      (read_version < 2) || (read_version > 4)) {
    printke ("Crazy Version Number: %u - %u",
              version, read_version);
    return -1;
  }

  printk ("Got EBML doctype: %s Version %u Read Version %u",
          doctype, version, read_version);

  return 0;
}
Пример #2
0
void *kr_audioport_process_thread (void *arg) {

  kr_audioport_t *kr_audioport = (kr_audioport_t *)arg;
  int ret;
  char buf[1];
  
  krad_system_set_thread_name ("krc_audioport");

  while (kr_audioport->active == 1) {
  
    // wait for socket to have a byte
    ret = read (kr_audioport->sd, buf, 1);
    if (ret != 1) {
      printke ("krad mixer client: unexpected read return value %d in kr_audioport_process_thread", ret);
    }
    //kr_audioport->callback (kr_audioport->kr_shm->buffer, kr_audioport->pointer);
    kr_audioport->callback (1600, kr_audioport->pointer);

    // write a byte to socket
    ret = write (kr_audioport->sd, buf, 1);
    if (ret != 1) {
      printke ("krad mixer client: unexpected write return value %d in kr_audioport_process_thread", ret);
    }

  }

  return NULL;
}
Пример #3
0
static int kr_mkv_parse_tracks (kr_mkv_t *mkv, uint64_t max_pos) {

  int ret;
  uint32_t id;
  uint64_t size;

  while (1) {
    if (mkv->e->pos >= max_pos) {
      printk ("Got to end of tracks info");
      break;
    }  
    ret = kr_ebml2_unpack_id (mkv->e, &id, &size);
    if (ret < 0) {
      printke ("Read error...");
      return -1;
    }
    if ((id == MKV_CLUSTER) || (id == EID_VOID) ||
        (id == EID_CRC32) || (id == MKV_TAGS) || (id == MKV_CUES) ||
        (id == MKV_ATTACHMENTS) || (id == MKV_CHAPTERS)) {
      printk ("Done with tracks. Got %d", mkv->track_count);
      return 0;
    }
    if (id != MKV_TRACK) {
      printke ("No Track :/");
      return -1;
    }
    printk ("Got Track!");
    ret = kr_mkv_parse_track (mkv, mkv->e->pos + size);
    if (ret < 0) {
      printke ("Track parse error...");
      return -1;
    }
  }
  return 0;
}
Пример #4
0
int32_t kr_vorbis_encode (krad_vorbis_t *vorbis,
                          kr_codeme_t *codeme,
                          kr_medium_t *medium) {
  int32_t bo_ret;
  int32_t ret;
  int c;
  float **pcm;
  ogg_packet op;

  if (medium != NULL) {
    if (medium->a.count > 0) {
      pcm = vorbis_analysis_buffer (&vorbis->vdsp, medium->a.count);
      for (c = 0; c < vorbis->channels; c++) {
        memcpy (pcm[c], medium->a.samples[c], medium->a.count * 4);
      }
    } else {
      printk ("KR Vorbis Encoder: Got finish notice");
    }
    ret = vorbis_analysis_wrote (&vorbis->vdsp, medium->a.count);
    if (ret < 0) {
      vorbis->error = ret;
      vorbis->state_str = "Krad Vorbis Encoder: vorbis_analysis_wrote fail";
      printke (vorbis->state_str);
      return -1;
    }
    //printk ("KR Vorbis Encoder: wrote %d samples", medium->a.count);
  }

  bo_ret = vorbis_analysis_blockout (&vorbis->vdsp, &vorbis->vblock);
  if (bo_ret < 0) {
    vorbis->error = bo_ret;
    vorbis->state_str = "Krad Vorbis Encoder: vorbis_analysis_blockout fail";
    printke (vorbis->state_str);
    return -1;
  }
  if (bo_ret == 1) {
    ret = vorbis_analysis (&vorbis->vblock, &op);
    if (ret < 0) {
      vorbis->error = ret;
      vorbis->state_str = "Krad Vorbis Encoder: vorbis_analysis fail";
      printke (vorbis->state_str);
      return -1;
    }
    //printk ("KR Vorbis Encoder: op gpos: %"PRIi64" size %ld",
    //        op.granulepos, op.bytes);
    codeme->sz = op.bytes;
    codeme->count = op.granulepos - vorbis->frames;
    vorbis->frames = op.granulepos;

    memcpy (codeme->data, op.packet, codeme->sz);

    //printk ("KR Vorbis Encoder: codeme size: %zu Count: %d",
    //        codeme->sz, codeme->count);
  }

  return bo_ret;
}
Пример #5
0
int krad_transmitter_transmission_transmit_header (krad_transmission_t *krad_transmission,
											krad_transmission_receiver_t *krad_transmission_receiver) {

  int wrote;

  wrote = 0;

  while (krad_transmission_receiver->wrote_http_header == 0) {
	  wrote = write (krad_transmission_receiver->fd,
				   krad_transmission->http_header + krad_transmission_receiver->http_header_position,
				   krad_transmission->http_header_len - krad_transmission_receiver->http_header_position);

    if (wrote > 0) {
      krad_transmission_receiver->http_header_position += wrote;
	    if (krad_transmission_receiver->http_header_position == krad_transmission->http_header_len) {
		    krad_transmission_receiver->wrote_http_header = 1;
	    } else {
        return 0;
      }
    } else {
		  if (wrote == -1) {
			  if (errno != EAGAIN) {
				  printke ("Krad Transmitter: transmission error writing to socket");
				  krad_transmitter_receiver_destroy (krad_transmission_receiver);
			  }
      }
      return 0;
    }
  }

  while (krad_transmission_receiver->wrote_header == 0) {
	  wrote = write (krad_transmission_receiver->fd,
				   krad_transmission->header + krad_transmission_receiver->header_position,
				   krad_transmission->header_len - krad_transmission_receiver->header_position);

    if (wrote > 0) {
      krad_transmission_receiver->header_position += wrote;
	    if (krad_transmission_receiver->header_position == krad_transmission->header_len) {
		    krad_transmission_receiver->wrote_header = 1;
	    } else {
        return 0;
      }
    } else {
		  if (wrote == -1) {
			  if (errno != EAGAIN) {
				  printke ("Krad Transmitter: transmission error writing to socket");
				  krad_transmitter_receiver_destroy (krad_transmission_receiver);
			  }
      }
      return 0;
    }
  }

  krad_transmission_receiver->position = krad_transmission->sync_point;
  return 1;

}
Пример #6
0
static void krad_vpx_fail (vpx_codec_ctx_t *ctx, const char *s) {
    
    const char *detail = vpx_codec_error_detail(ctx);
    
    printke ("%s: %s\n", s, vpx_codec_error(ctx));

	if (detail) {
    	printke ("%s\n", detail);
	}

    failfast ("");
}
Пример #7
0
int marlin_priv_cmd(struct net_device *ndev, struct ifreq *ifr)
{
	struct wlan_vif_t *vif;
	struct android_wifi_priv_cmd priv_cmd;
	char *command = NULL;
	u8 addr[ETH_ALEN] = {0};
	int bytes_written = 0;
	int ret = 0;

	vif =  ndev_to_vif(ndev);
	if (!ifr->ifr_data)
		return -EINVAL;
	if (copy_from_user(&priv_cmd, ifr->ifr_data,
			   sizeof(struct android_wifi_priv_cmd)))
		return -EFAULT;

	command = kmalloc(priv_cmd.total_len, GFP_KERNEL);
	if (!command) {
		printke("%s: Failed to allocate command!\n", __func__);
		return -ENOMEM;
	}
	if (copy_from_user(command, priv_cmd.buf, priv_cmd.total_len)) {
		ret = -EFAULT;
		goto exit;
	}

	if (strnicmp(command, CMD_BLACKLIST_ENABLE,
		     strlen(CMD_BLACKLIST_ENABLE)) == 0) {
		int skip = strlen(CMD_BLACKLIST_ENABLE) + 1;

		printke("%s, Received regular blacklist enable command\n",
			 __func__);
		sscanf(command + skip, "" MACSTR "", STR2MAC(addr));
		bytes_written = wlan_cmd_add_blacklist(vif, addr);
	} else if (strnicmp(command, CMD_BLACKLIST_DISABLE,
			    strlen(CMD_BLACKLIST_DISABLE)) == 0) {
		int skip = strlen(CMD_BLACKLIST_DISABLE) + 1;

		printke("%s, Received regular blacklist disable command\n",
			   __func__);
		sscanf(command + skip, "" MACSTR "", STR2MAC(addr));
		bytes_written = wlan_cmd_del_blacklist(vif, addr);
	}

	if (bytes_written < 0)
		ret = bytes_written;

exit:
	kfree(command);

	return ret;
}
Пример #8
0
static int wlan_rx_process(unsigned char *buf, unsigned int max_len)
{
	static unsigned int cnt;
	static unsigned int skb;
	unsigned int p = 0;
	r_msg_hdr_t *msg = NULL;
	unsigned char vif_id;
	unsigned char *pData = NULL;
	unsigned short len;
	unsigned char event;
	if ((NULL == buf) || (0 == max_len)) {
		printke("[%s][ERROR]\n", __func__);
		return OK;
	}
	buf = buf + 8;
	msg = (r_msg_hdr_t *) (buf);
	max_len = max_len - 8;
	while (p < max_len) {

		vif_id = msg->mode;
		pData = (unsigned char *)(msg + 1);
		len = msg->len;

		if ((0xFF == msg->type) || (0xFF == msg->subtype))
			break;
		if (HOST_SC2331_PKT == msg->type) {
			pData = pData + msg->subtype;
			len = len - msg->subtype;
			wlan_rx_skb_process(vif_id, pData, len);
		} else if (HOST_SC2331_WAPI == msg->type) {
			wlan_rx_wapi_process(vif_id, pData, len);
		} else if (SC2331_HOST_RSP == msg->type) {
			wlan_rx_rsp_process(vif_id, msg);
		} else if (HOST_SC2331_CMD == msg->type) {
			event = msg->subtype;
			wlan_rx_event_process(vif_id, event, pData, len);
		} else {
			printke("[%s][RX DATA ERR]\n", __func__);
			break;
		}
		p = p + sizeof(t_msg_hdr_t) + ALIGN_4BYTE(msg->len);
		msg = (r_msg_hdr_t *) (buf + p);
		skb++;
	}
	cnt++;
	if (1000 == cnt) {
		printkd("r%d\n", skb);
		cnt = 0;
		skb = 0;
	}
	return OK;
}
Пример #9
0
static int kr_interweb_server_socket_setup(char *interface, int port) {

    char port_string[6];
    struct addrinfo hints;
    struct addrinfo *result, *rp;
    int s;
    int sfd = 0;
    char *interface_actual;

    interface_actual = interface;

    printk ("Krad Interweb Server: interface: %s port %d", interface, port);
    snprintf (port_string, 6, "%d", port);
    memset (&hints, 0, sizeof (struct addrinfo));
    hints.ai_family = AF_UNSPEC;     /* Return IPv4 and IPv6 choices */
    hints.ai_socktype = SOCK_STREAM; /* We want a TCP socket */
    hints.ai_flags = AI_PASSIVE;     /* All interfaces */
    if ((strlen(interface) == 7) && (strncmp(interface, "0.0.0.0", 7) == 0)) {
        hints.ai_family = AF_INET;
        interface_actual = NULL;
    }
    if ((strlen(interface) == 4) && (strncmp(interface, "[::]", 4) == 0)) {
        hints.ai_family = AF_INET6;
        interface_actual = NULL;
    }
    s = getaddrinfo (interface_actual, port_string, &hints, &result);
    if (s != 0) {
        printke ("getaddrinfo: %s\n", gai_strerror (s));
        return -1;
    }
    for (rp = result; rp != NULL; rp = rp->ai_next) {
        sfd = socket (rp->ai_family, rp->ai_socktype, rp->ai_protocol);
        if (sfd == -1) {
            continue;
        }
        set_socket_reuseaddr(sfd);
        s = bind (sfd, rp->ai_addr, rp->ai_addrlen);
        if (s == 0) {
            /* We managed to bind successfully! */
            break;
        }
        close (sfd);
    }
    if (rp == NULL) {
        printke ("Could not bind %d\n", port);
        return -1;
    }
    freeaddrinfo (result);

    return sfd;
}
Пример #10
0
static int kr_mkv_parse_segment_header (kr_mkv_t *mkv) {

  int ret;
  uint32_t id;
  uint64_t size;

  ret = kr_ebml2_unpack_id (mkv->e, &id, &size);
  if (ret < 0) {
    printke ("Read error...");
    return -1;
  }
  if (id != MKV_SEGMENT) {
    printke ("No Segment :/");
    return -1;
  }
  
  printk ("Got Segment");

  while (1) {
  
    ret = kr_ebml2_unpack_id (mkv->e, &id, &size);
    if (ret < 0) {
      printke ("Read error..");
      return -1;
    }

    switch (id) {
      case MKV_TRACKS:
        mkv->tracks_info_data = mkv->e->bufstart + mkv->e->pos;
        mkv->tracks_info_data_size = size;
        if (kr_mkv_parse_tracks (mkv, mkv->e->pos + size) < 0) {
          return -1;
        } else {
          return 0;
        }
      case MKV_SEGMENT_INFO:
        mkv->segment_info_data = mkv->e->bufstart + mkv->e->pos;
        mkv->segment_info_data_size = size;
        printk ("Got Segment Info: %"PRIu64" bytes", size);
        if (kr_mkv_parse_segment_info (mkv, mkv->e->pos + size) < 0) {
          return -1;
        }
        break;        
      default:
        printk ("Skipping unknown element: %"PRIu64" bytes", size);
        kr_ebml2_advance (mkv->e, size);
        break;
    }
  }
  return 0;
}
Пример #11
0
int krad_ipc_server_tcp_socket_create (int port) {

	char port_string[6];
	struct addrinfo hints;
	struct addrinfo *result, *rp;
	int s;
	int sfd = 0;

	snprintf (port_string, 6, "%d", port);

	memset (&hints, 0, sizeof (struct addrinfo));
	hints.ai_family = AF_UNSPEC;     /* Return IPv4 and IPv6 choices */
	hints.ai_socktype = SOCK_STREAM; /* We want a TCP socket */
	hints.ai_flags = AI_PASSIVE;     /* All interfaces */

	s = getaddrinfo (NULL, port_string, &hints, &result);
	if (s != 0) {
		printke ("getaddrinfo: %s\n", gai_strerror (s));
		return -1;
	}

	for (rp = result; rp != NULL; rp = rp->ai_next) {
		
		sfd = socket (rp->ai_family, rp->ai_socktype, rp->ai_protocol);
		
		if (sfd == -1) {
			continue;
		}

		s = bind (sfd, rp->ai_addr, rp->ai_addrlen);
		
		if (s == 0) {
			/* We managed to bind successfully! */
			break;
		}

		close (sfd);
	}

	if (rp == NULL) {
		printke ("Could not bind %d\n", port);
		return -1;
	}

	freeaddrinfo (result);

	return sfd;
}
Пример #12
0
static int hw_tx(const unsigned short chn, unsigned char *buf, unsigned int len)
{
	int ret;
	static unsigned int cnt;
	static unsigned int skb;
	tx_big_hdr_t *big_hdr;

	big_hdr = (tx_big_hdr_t *) buf;
	if ((PKT_AGGR_NUM < big_hdr->msg_num) || (0 == big_hdr->msg_num)) {
		ASSERT();
		return ERROR;
	}
	big_hdr->tx_cnt = g_wlan.hw.tx_cnt;
	printkp("[tx][%d][%d]\n", big_hdr->tx_cnt, chn);
	len = (len + 1023) & 0xFC00;
	wlan_tx_buf_decode(buf, len);
	ret = sdio_dev_write(chn, buf, len);
	if (0 != ret) {
		printke("call sdio_dev_write err:%d\n", ret);
		return HW_WRITE_ERROR;
	}
	skb = skb + big_hdr->msg_num;
	cnt++;
	if (1000 == cnt) {
		printkd("w%d\n", skb);
		cnt = 0;
		skb = 0;
	}
	g_wlan.hw.tx_cnt++;
	return OK;
}
Пример #13
0
int kr_io2_output(kr_io2_t *io) {

  ssize_t ret;

  if (!kr_io2_want_out(io)) {
    return 0;
  }
  ret = kr_io2_write(io);

  //printk("kr_io2_output wrote: %zu old len: %zu new len: %zu",
  //       ret, io->len, io->len - ret);


  if (ret != io->len) {
	  if (ret < 1) {
      	printke("its bad we should certainly fail, ret %zu len %zu",
         ret, io->len);
      	return ret;
	  } else {
	    io->len -= ret;
	    io->wr_buf += ret;		
	  }
	  return 0;
  }
  kr_io2_restart(io);
  return 0;
}
Пример #14
0
int krad_opus_decoder_write (krad_opus_t *krad_opus,
                             uint8_t *buffer,
                             int length) {

  int i;
  int frames_decoded;

  frames_decoded = 0;

  krad_opus->opus_decoder_error = opus_multistream_decode_float (krad_opus->decoder,
                                  buffer,
                                  length,
                                  krad_opus->interleaved_samples,
                                  2880 * 2,
                                  0);

  if (krad_opus->opus_decoder_error < 0) {
    printke ("Krad Opus decoder error: %s\n",
              opus_strerror (krad_opus->opus_decoder_error));
  } else {
    frames_decoded = krad_opus->opus_decoder_error;
  }

  for (i = 0; i < frames_decoded; i++) {
    krad_opus->samples[0][i] = krad_opus->interleaved_samples[i * 2 + 0];
    krad_opus->samples[1][i] = krad_opus->interleaved_samples[i * 2 + 1];
  }

  krad_ringbuffer_write (krad_opus->ringbuf[0], (char *)krad_opus->samples[0], (frames_decoded * 4) );
  krad_ringbuffer_write (krad_opus->ringbuf[1], (char *)krad_opus->samples[1], (frames_decoded * 4) );

  return 0;
}
Пример #15
0
kr_app_client *kr_app_connect(char *sysname, int timeout_ms) {
  kr_app_client *client;
  client = calloc(1, sizeof(kr_app_client));
  if (client == NULL) {
    failfast("Krad APP Client mem alloc fail");
    return NULL;
  }
  uname (&client->unixname);
  if (krad_valid_host_and_port (sysname)) {
    krad_get_host_and_port (sysname, client->host, &client->tcp_port);
  } else {
    strncpy (client->sysname, sysname, sizeof (client->sysname));
    if (strncmp(client->unixname.sysname, "Linux", 5) == 0) {
      client->on_linux = 1;
      client->api_path_pos = sprintf(client->api_path, "@krad_radio_%s_api", sysname);
    } else {
      client->api_path_pos = sprintf(client->api_path, "%s/krad_radio_%s_api", "/tmp", sysname);
    }
    if (!client->on_linux) {
      if(stat(client->api_path, &client->info) != 0) {
        kr_app_disconnect(client);
        failfast ("Krad APP Client: API PATH Failure\n");
        return NULL;
      }
    }
  }
  if (kr_app_client_init(client, timeout_ms) == 0) {
    printke ("Krad APP Client: Failed to init!");
    kr_app_disconnect(client);
    return NULL;
  }
  return client;
}
Пример #16
0
int krad_decklink_cpp_detect_devices () {

	IDeckLinkIterator *deckLinkIterator;
	IDeckLink *deckLink;
	int device_count;
	//HRESULT result;
	
	device_count = 0;
	
	deckLinkIterator = CreateDeckLinkIteratorInstance();
	
	if (deckLinkIterator == NULL) {
		printke ("krad_decklink_detect_devices: The DeckLink drivers may not be installed.");
		return 0;
	}
	
	while (deckLinkIterator->Next(&deckLink) == S_OK) {

		device_count++;
		
		deckLink->Release();
	}
	
	deckLinkIterator->Release();
	
	return device_count;

}
Пример #17
0
static void krad_transmission_remove_ready (krad_transmission_t *krad_transmission, krad_transmission_receiver_t *krad_transmission_receiver) {

    if (krad_transmission_receiver->ready != 1) {
        printke ("Krad Transmitter: receiver was not ready!");
        return;
    }

    krad_transmission_receiver->ready = 0;
    /*
    while (1) {
      if ((krad_transmission_receiver->prev == NULL) && (krad_transmission_receiver->next == NULL)) {
        krad_transmission->ready_receivers = NULL;
        break;
      }
      if ((krad_transmission_receiver->prev == NULL) && (krad_transmission_receiver->next != NULL)) {
        krad_transmission->ready_receivers = krad_transmission_receiver->next;
        krad_transmission_receiver->next->prev = NULL;
        break;
      }
      if ((krad_transmission_receiver->prev != NULL) && (krad_transmission_receiver->next == NULL)) {
        krad_transmission_receiver->prev->next = NULL;
        break;
      }
      if ((krad_transmission_receiver->prev != NULL) && (krad_transmission_receiver->next != NULL)) {
        krad_transmission_receiver->prev->next = krad_transmission_receiver->next;
        krad_transmission_receiver->next->prev = krad_transmission_receiver->prev;
        break;
      }
    }

    krad_transmission_receiver->prev = NULL;
    krad_transmission_receiver->next = NULL;
    */
    krad_transmission->ready_receiver_count--;
}
Пример #18
0
static int wlan_hw_init(hw_info_t *hw)
{
	struct device_node *np;

	memset(hw, 0, sizeof(hw_info_t));

	hw->sdio_tx_chn.num = 3;
	hw->sdio_tx_chn.chn[0] = 0;
	hw->sdio_tx_chn.chn[1] = 1;
	hw->sdio_tx_chn.chn[2] = 2;
	hw->sdio_tx_chn.bit_map = 0x0007;
	hw->sdio_tx_chn.timeout_time = 600;
	hw->sdio_tx_chn.timeout_flag = false;

	hw->sdio_rx_chn.num = 6;
	hw->sdio_rx_chn.chn[0] = 8;
	hw->sdio_rx_chn.chn[1] = 9;
	hw->sdio_rx_chn.chn[2] = 14;
	hw->sdio_rx_chn.chn[3] = 11;
	hw->sdio_rx_chn.chn[4] = 15;
	hw->sdio_rx_chn.chn[5] = 13;
	hw->sdio_rx_chn.bit_map = 0xeb00;
	hw->sdio_rx_chn.gpio_high = false;
	hw->sdio_rx_chn.timeout_time = 600;
	hw->sdio_rx_chn.timeout_flag = false;

	np = of_find_node_by_name(NULL, "sprd-marlin");
	if (!np) {
		printke("sprd-marlin not found");
		return -1;
	}
	hw->rx_gpio = of_get_gpio(np, 1);

	printke("[SDIO_TX_CHN][0x%x][0x%x]\n", hw->sdio_tx_chn.bit_map,
		HW_TX_SIZE);
	printke("[SDIO_RX_CHN][0x%x][0x%x]\n", hw->sdio_rx_chn.bit_map,
		HW_RX_SIZE);

	hw->wakeup = 0;
	spin_lock_init(&(hw->sdio_rx_chn.lock));
	wake_lock_init(&g_wlan.hw.wlan_lock, WAKE_LOCK_SUSPEND,
		       "wlan_sc2331_lock");
	init_timer(&g_wlan.hw.wakeup_timer);
	g_wlan.hw.wakeup_timer.function = wakeup_timer_func;
	g_wlan.hw.wakeup_time = 500;
	return OK;
}
Пример #19
0
void krad_mixer_crossfade_group_create (krad_mixer_t *krad_mixer, krad_mixer_portgroup_t *portgroup1, krad_mixer_portgroup_t *portgroup2) {

  int x;
  krad_mixer_crossfade_group_t *crossfade_group;

  if ((portgroup1 == NULL) || ((portgroup1->active != 1) && (portgroup1->active != 2)) ||
      (portgroup2 == NULL) || ((portgroup2->active != 1) && (portgroup2->active != 2))) {
    printke ("Invalid portgroup for crossfade!");
    return;
  }

  if (!(((portgroup1->direction == INPUT) || (portgroup1->direction == MIX)) &&
      ((portgroup1->direction == INPUT) || (portgroup2->direction == MIX)) &&
      (((portgroup1->io_type == MIXBUS) && (portgroup2->io_type == MIXBUS)) ||
       ((portgroup1->io_type != MIXBUS) && (portgroup2->io_type != MIXBUS))))) {
    printke ("Invalid crossfade group!");
    return;
  }
    
  if (portgroup1->crossfade_group != NULL) {
    krad_mixer_crossfade_group_destroy (krad_mixer, portgroup1->crossfade_group);
  }

  if (portgroup2->crossfade_group != NULL) {
    krad_mixer_crossfade_group_destroy (krad_mixer, portgroup2->crossfade_group);
  }

  for (x = 0; x < KRAD_MIXER_MAX_PORTGROUPS / 2; x++) {
    crossfade_group = &krad_mixer->crossfade_group[x];
    if ((crossfade_group != NULL) && ((crossfade_group->portgroup[0] == NULL) && (crossfade_group->portgroup[1] == NULL))) {
      break;
    }
  }

  crossfade_group->portgroup[0] = portgroup1;
  crossfade_group->portgroup[1] = portgroup2;
  
  portgroup1->crossfade_group = crossfade_group;
  portgroup2->crossfade_group = crossfade_group;

  krad_radio_broadcast_subunit_update ( krad_mixer->krad_ipc->ipc_broadcaster, &portgroup1->address, KR_CROSSFADE_GROUP, 
                                        KR_STRING, portgroup2->sysname, NULL );

  krad_mixer_set_portgroup_control (krad_mixer, portgroup1->sysname, "crossfade", -100.0f, 0, NULL );
}
Пример #20
0
int krad_control_init (krad_control_t *krad_control) {
  if (socketpair(AF_UNIX, SOCK_STREAM, 0, krad_control->sockets)) {
    printke ("Krad System: can't socketpair errno: %d", errno);
    krad_control->sockets[0] = 0;
    krad_control->sockets[1] = 0;
    return -1;
  }
  return 0;
}
Пример #21
0
void krad_decklink_capture_stop(krad_decklink_capture_t *krad_decklink_capture) {

    if (krad_decklink_capture->deckLinkInput != NULL) {
    
		krad_decklink_capture->result = krad_decklink_capture->deckLinkInput->StopStreams ();
		if (krad_decklink_capture->result != S_OK) {
			printke ("Krad Decklink: Fail StopStreams\n");
		}		
		krad_decklink_capture->result = krad_decklink_capture->deckLinkInput->DisableVideoInput ();
		if (krad_decklink_capture->result != S_OK) {
			printke ("Krad Decklink: Fail DisableVideoInput\n");
		}
		krad_decklink_capture->result = krad_decklink_capture->deckLinkInput->DisableAudioInput ();
		if (krad_decklink_capture->result != S_OK) {
			printke ("Krad Decklink: Fail DisableAudioInput\n");
		}
		
		krad_decklink_capture->result = krad_decklink_capture->deckLinkConfiguration->Release();
		if (krad_decklink_capture->result != S_OK) {
			printke ("Krad Decklink: Fail to Release deckLinkConfiguration\n");
		}
		krad_decklink_capture->deckLinkConfiguration = NULL;
		
		krad_decklink_capture->result = krad_decklink_capture->deckLinkInput->Release();
		if (krad_decklink_capture->result != S_OK) {
			printke ("Krad Decklink: Fail Release\n");
		}
        krad_decklink_capture->deckLinkInput = NULL;
    }

    if (krad_decklink_capture->deckLink != NULL) {
        krad_decklink_capture->deckLink->Release();
        krad_decklink_capture->deckLink = NULL;
    }

	if (krad_decklink_capture->deckLinkIterator != NULL) {
		krad_decklink_capture->deckLinkIterator->Release();
	}
	
	//printf("\n");

	free(krad_decklink_capture);

}
Пример #22
0
void krad_ipc_server_read_tag ( krad_ipc_server_t *krad_ipc_server, char **tag_item, char **tag_name, char **tag_value ) {

	uint32_t ebml_id;
	uint64_t ebml_data_size;

	krad_ebml_read_element (krad_ipc_server->current_client->krad_ebml, &ebml_id, &ebml_data_size);
	
	if (ebml_id != EBML_ID_KRAD_RADIO_TAG) {
		printke ("hrm wtf\n");
	} else {
		//printf("tag size %zu\n", ebml_data_size);
	}
	
	krad_ebml_read_element (krad_ipc_server->current_client->krad_ebml, &ebml_id, &ebml_data_size);	

	if (ebml_id != EBML_ID_KRAD_RADIO_TAG_ITEM) {
		printke ("hrm wtf2\n");
	} else {
		//printf("tag name size %zu\n", ebml_data_size);
	}

	krad_ebml_read_string (krad_ipc_server->current_client->krad_ebml, *tag_item, ebml_data_size);	
	
	krad_ebml_read_element (krad_ipc_server->current_client->krad_ebml, &ebml_id, &ebml_data_size);	

	if (ebml_id != EBML_ID_KRAD_RADIO_TAG_NAME) {
		printke ("hrm wtf2\n");
	} else {
		//printf("tag name size %zu\n", ebml_data_size);
	}

	krad_ebml_read_string (krad_ipc_server->current_client->krad_ebml, *tag_name, ebml_data_size);
	
	krad_ebml_read_element (krad_ipc_server->current_client->krad_ebml, &ebml_id, &ebml_data_size);	

	if (ebml_id != EBML_ID_KRAD_RADIO_TAG_VALUE) {
		printke ("hrm wtf3\n");
	} else {
		//printf("tag value size %zu\n", ebml_data_size);
	}

	krad_ebml_read_string (krad_ipc_server->current_client->krad_ebml, *tag_value, ebml_data_size);
	
}
Пример #23
0
void krad_vpx_encoder_config_set (krad_vpx_encoder_t *vpx,
                                  vpx_codec_enc_cfg_t *cfg) {
  int ret;

  ret = vpx_codec_enc_config_set (&vpx->encoder, cfg);

  if (ret != VPX_CODEC_OK) {
    printke ("VPX Config problem: %s\n", vpx_codec_err_to_string (ret));
  }
}
Пример #24
0
int kr_mkv_read_packet (kr_mkv_t *mkv, uint32_t *track,
                        uint64_t *timecode, uint8_t *flags, uint8_t *buffer) {

  int ret;
  uint32_t id;
  uint64_t size;

  //printk ("kr_mkv_read_packet");

  while (1) {
    ret = kr_ebml2_unpack_id (mkv->e, &id, &size);
    if (ret < 0) {
      printke ("Read error..");
      return -1;
    }

    switch (id) {
      case MKV_CLUSTER:
        break;
      case EID_VOID:
      case EID_CRC32:
      case MKV_TAGS:
      case MKV_CUES:
      case MKV_ATTACHMENTS:
      case MKV_CHAPTERS:
        kr_ebml2_advance (mkv->e, size);
        break;
      case MKV_CLUSTER_TIMECODE:
        kr_ebml2_unpack_uint64 (mkv->e, &mkv->cluster_timecode, size);
        break;
      case MKV_SIMPLEBLOCK:
        kr_mkv_parse_simpleblock (mkv, size, track, timecode, flags);
        kr_ebml2_unpack_data ( mkv->e, buffer, size - 4 );
        return size - 4;
      default:
        printke ("Err! Unknown element: %"PRIu64" bytes", size);
        return -1;
        break;
    }
  }
  return 0;      
}
Пример #25
0
void kr_io2_pack(kr_io2_t *io, void *buffer, size_t len) {

  if (len > io->space) {
    printk("io2_pack len: %zu buf len: %zu new len: %zu size: %zu space: %zu",
            len, io->len, len + io->len, io->size, io->space);
    printke("buffer overpack cancelling!");
    return;
  }
  memcpy (io->buf, buffer, len);
  kr_io2_advance (io, len);
}
Пример #26
0
static int kr_mkv_parse_segment_info (kr_mkv_t *mkv, uint64_t max_pos) {

  int ret;
  uint32_t id;
  uint64_t size;

  while (1) {
    if (mkv->e->pos >= max_pos) {
      printk ("Got to end of segment info");
      break;
    }  
    ret = kr_ebml2_unpack_id (mkv->e, &id, &size);
    if (ret < 0) {
      printke ("Read error..");
      return -1;
    }

    switch (id) {
      case MKV_SEGMENT_TITLE:
        //kr_ebml2_unpack_uint64 (mkv->e, &mkv->timecode_scale, size);
        //break;
        printk ("Skipping TITLE: %"PRIu64" bytes",
                size);
        kr_ebml2_advance (mkv->e, size);
        break;
      case MKV_SEGMENT_TIMECODESCALE:
        kr_ebml2_unpack_uint64 (mkv->e, &mkv->timecode_scale, size);
        break;
      case MKV_SEGMENT_DURATION:
        kr_ebml2_unpack_double (mkv->e, &mkv->duration, size);
        break;
      case MKV_SEGMENT_UID:
      case MKV_SEGMENT_FILENAME:
      case MKV_SEGMENT_PREVUID:
      case MKV_SEGMENT_PREVFILENAME:
      case MKV_SEGMENT_NEXTUID:
      case MKV_SEGMENT_NEXTFILENAME:
      case MKV_SEGMENT_FAMILY:
      case MKV_SEGMENT_CHAPTERTRANSLATE:
      case MKV_SEGMENT_DATEUTC:
      case MKV_SEGMENT_MUXINGAPP:
      case MKV_SEGMENT_WRITINGAPP:
        kr_ebml2_advance (mkv->e, size);
        break;
      default:
        printk ("Skipping unknown element in segment info: %"PRIu64" bytes",
                size);
        kr_ebml2_advance (mkv->e, size);
        break;
    }
  }

  return 0;
}
Пример #27
0
krad_x11_t *krad_x11_create () {

  krad_x11_t *krad_x11;
  
  if ((krad_x11 = calloc (1, sizeof (krad_x11_t))) == NULL) {
    failfast ("krad_x11 mem alloc fail");
  }
  printke ("x11 is disabled and fake");
  return krad_x11;

}
Пример #28
0
void krad_system_monitor_cpu_on () {

  if (krad_system.kcm.on == 0) {
    if (krad_control_init (&krad_system.kcm.control)) {
      printke ("Krad System: can't socketpair errno: %d", errno);
      return;
    }
    krad_system.kcm.on = 1;
    pthread_create (&krad_system.kcm.monitor_thread, NULL, krad_system_monitor_cpu_thread, NULL);
  }
}
Пример #29
0
int set_socket_nodelay(int sd) {

    int ret;
    const int val = 1;

    ret = setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (const void *)&val,
                     (socklen_t)sizeof(int));

    if (ret != 0) {
        printke("Could not set socket to TCP_NODELAY");
    }
    return ret;
}
Пример #30
0
int set_socket_reuseaddr(int sd) {

    int ret;
    const int val = 1;

    ret = setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (const void *)&val,
                     (socklen_t)sizeof(int));

    if (ret != 0) {
        printke("Could not set socket to SO_REUSEADDR");
    }
    return ret;
}