Example #1
0
void
dvr_rec_subscribe(dvr_entry_t *de)
{
  char buf[100];
  int weight;
  dvr_config_t *cfg = dvr_config_find_by_name_default(de->de_config_name);
  int matroska = strcmp(cfg->dvr_format, "matroska") == 0;

  assert(de->de_s == NULL);

  snprintf(buf, sizeof(buf), "DVR: %s", de->de_title);

  streaming_queue_init(&de->de_sq,
                        matroska ? 0 : SMT_TO_MASK(SMT_PACKET));

  pthread_create(&de->de_thread, NULL, dvr_thread, de);

  if(de->de_pri < 5)
    weight = prio2weight[de->de_pri];
  else
    weight = 300;

  tvhlog(LOG_DEBUG, "dvr", "Use %s container", cfg->dvr_format);
  if(matroska) {
    de->de_gh = globalheaders_create(&de->de_sq.sq_st);
    de->de_tsfix = tsfix_create(de->de_gh);
    de->de_s = subscription_create_from_channel(de->de_channel, weight,
					      buf, de->de_tsfix, 0);
  // } else if { (Other containers)
  // mpegts works like rawts
  } else {
	de->de_s = subscription_create_from_channel(de->de_channel, weight,
					      buf, &de->de_sq.sq_st, SUBSCRIPTION_RAW_MPEGTS);
  }
}
Example #2
0
void
dvr_rec_subscribe(dvr_entry_t *de)
{
  char buf[100];
  int weight;
  profile_t *pro;
  profile_chain_t *prch;

  assert(de->de_s == NULL);
  assert(de->de_chain == NULL);

  if(de->de_pri < ARRAY_SIZE(prio2weight))
    weight = prio2weight[de->de_pri];
  else
    weight = 300;

  snprintf(buf, sizeof(buf), "DVR: %s", lang_str_get(de->de_title, NULL));

  pro = de->de_config->dvr_profile;
  prch = malloc(sizeof(*prch));
  profile_chain_init(prch, pro, de->de_channel);
  if (profile_chain_open(prch, &de->de_config->dvr_muxcnf, 0, 0)) {
    tvherror("dvr", "unable to create new channel streaming chain for '%s'",
             channel_get_name(de->de_channel));
    return;
  }

  de->de_s = subscription_create_from_channel(prch, weight,
					      buf, prch->prch_flags,
					      NULL, NULL, NULL);
  if (de->de_s == NULL) {
    tvherror("dvr", "unable to create new channel subcription for '%s'",
             channel_get_name(de->de_channel));
    profile_chain_close(prch);
    free(prch);
    de->de_chain = NULL;
    return;
  }

  de->de_chain = prch;

  tvhthread_create(&de->de_thread, NULL, dvr_thread, de);
}
Example #3
0
void
dvr_rec_subscribe(dvr_entry_t *de)
{
  char buf[100];
  int weight;
  streaming_target_t *st;
  int flags;

  assert(de->de_s == NULL);

  if(de->de_pri < 5)
    weight = prio2weight[de->de_pri];
  else
    weight = 300;

  snprintf(buf, sizeof(buf), "DVR: %s", lang_str_get(de->de_title, NULL));

  if(de->de_mc == MC_PASS) {
    streaming_queue_init(&de->de_sq, SMT_PACKET);
    de->de_gh = NULL;
    de->de_tsfix = NULL;
    st = &de->de_sq.sq_st;
    flags = SUBSCRIPTION_RAW_MPEGTS;
  } else {
    streaming_queue_init(&de->de_sq, 0);
    de->de_gh = globalheaders_create(&de->de_sq.sq_st);
    st = de->de_tsfix = tsfix_create(de->de_gh);
    tsfix_set_start_time(de->de_tsfix, de->de_start - (60 * de->de_start_extra));
    flags = 0;
  }

  de->de_s = subscription_create_from_channel(de->de_channel, weight,
					      buf, st, flags,
					      NULL, NULL, NULL);

  pthread_create(&de->de_thread, NULL, dvr_thread, de);
}