DeckLinkOutputAdapter(unsigned int card_index = 0, unsigned int norm_ = 0, RawFrame::PixelFormat pf_ = RawFrame::CbYCrY8422, bool enable_audio = false) : deckLink(NULL), deckLinkOutput(NULL), frame_counter(0), last_frame(NULL), in_pipe(OUT_PIPE_SIZE), audio_in_pipe(NULL) { norm = norm_; assert(norm < sizeof(norms) / sizeof(struct decklink_norm)); time_base = norms[norm].time_base; frame_duration = norms[norm].frame_duration; pf = pf_; bpf = convert_pf(pf_); deckLink = find_card(card_index); configure_card( ); open_card( ); preroll_video_frames(16); if (enable_audio) { setup_audio( ); } start_video( ); thread_priority_hack( ); fprintf(stderr, "DeckLink: initialized using norm %s\n", norms[norm].name); }
static void make_play(card_t play) { hand_t *hand = &ggzcards.players[ggzcards.play_hand].hand; int num = find_card(hand, play); if (num < 0) { assert(FALSE); client_send_sync_request(); } else client_send_play(play); }
DeckLinkInputAdapter(unsigned int card_index = 0, unsigned int norm_ = 0, unsigned int input_ = 0, RawFrame::PixelFormat pf_ = RawFrame::CbYCrY8422, bool enable_audio = false) : deckLink(NULL), out_pipe(IN_PIPE_SIZE) { audio_pipe = NULL; pf = pf_; bpf = convert_pf(pf_); deckLink = find_card(card_index); select_input_connection(input_); open_input(norm_); if (enable_audio) { n_channels = 2; select_audio_input_connection( ); open_audio_input( ); } start_capture( ); }
DeckLinkInputAdapter(unsigned int card_index = 0, unsigned int norm_ = 0, unsigned int input_ = 0, RawFrame::PixelFormat pf_ = RawFrame::CbYCrY8422, bool enable_audio = false, unsigned int n_channels = 2, bool enable_video = true) : deckLink(NULL), out_pipe(IN_PIPE_SIZE) { audio_pipe = NULL; started = false; signal_lost = false; rotate = false; this->enable_video = enable_video; n_frames = 0; start_time = 0; avsync = 0; drop_audio = 0; pf = pf_; bpf = convert_pf(pf_); deckLink = find_card(card_index); select_input_connection(input_); open_input(norm_); if (enable_audio) { audio_pipe = new Pipe<IOAudioPacket *>(IN_PIPE_SIZE); } this->n_channels = n_channels; select_audio_input_connection( ); open_audio_input( ); start_capture( ); }
/** * Initializes the alsa system by getting the cards * and channels and setting the io watch for external * volume changes. * * @return 0 on success otherwise negative error code */ static int alsaset(void) { char *card_name; char *channel; // update list of available cards DEBUG_PRINT("Getting available cards..."); get_cards(); assert(cards != NULL); // get selected card assert(active_card == NULL); card_name = get_selected_card(); DEBUG_PRINT("Selected card: %s", card_name); if (card_name) { active_card = find_card(card_name); g_free(card_name); } // if not available, use the default card if (!active_card) { DEBUG_PRINT("Using default soundcard"); active_card = cards->data; } // If no playable channels, iterate on card list until a valid card is // found. // In most situations, the first card of the list (which is the // Alsa default card) can be opened. // However, in some situations the default card may be unavailable. // For example, when it's an USB DAC, and it's disconnected. if (!active_card->channels) { GSList *item; DEBUG_PRINT("Card '%s' has no playable channels, iterating on card list", active_card->dev); for (item = cards; item; item = item->next) { active_card = item->data; if (active_card->channels) break; } assert(item != NULL); } // open card DEBUG_PRINT("Opening card '%s'...", active_card->dev); smixer_options.device = active_card->dev; handle = open_mixer(active_card->dev, &smixer_options, smixer_level); assert(handle != NULL); // Set the channel // We have to handle the fact that the channel name defined // in PNMixer configuration is not necessarily valid. // For example, this may happen when the default alsa soundcard // is modified. The channel names of the new default card may // not match the channel names of the previous default card. assert(elem == NULL); channel = get_selected_channel(active_card->name); if (channel) { snd_mixer_selem_id_t *sid; snd_mixer_selem_id_alloca(&sid); snd_mixer_selem_id_set_name(sid, channel); elem = snd_mixer_find_selem(handle, sid); g_free(channel); } if (elem == NULL) { elem = snd_mixer_first_elem(handle); } assert(elem != NULL); // Set callback DEBUG_PRINT("Using channel '%s'", snd_mixer_selem_get_name(elem)); snd_mixer_elem_set_callback(elem, alsa_cb); // set watch for volume changes set_io_watch(handle); return 0; }
//take a specific card out of the deck int remove_card(Deck *aDeckPtr, Card * card){ int index = find_card(aDeckPtr,card->suit,card->rank); swap_card(aDeckPtr,index,aDeckPtr->topcardindex); aDeckPtr->topcardindex++; return 0; }