Changeset 2077:7efcbad0c4fb in roaraudio for plugins/gstreamer0.10


Ignore:
Timestamp:
07/19/09 06:19:35 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

got it basicly to work, still a lot of work to do.

Location:
plugins/gstreamer0.10
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • plugins/gstreamer0.10/roarmixer.c

    r2076 r2077  
    228228 
    229229void            gst_roarmixer_updatestreamlist   (GstRoarMixer *mixer) { 
    230   gboolean record = FALSE; 
    231   gboolean input  = FALSE; 
    232   gint  master = 0; 
    233230  gint  i      = 0; 
    234   gint  channels = 2; 
     231  gint num; 
     232  gint id[ROAR_STREAMS_MAX]; 
    235233  GstMixerTrack *track; 
    236234 
     
    242240  } 
    243241 
    244       track = gst_roarmixer_track_new (mixer, i, channels, 
    245           (record ? GST_MIXER_TRACK_RECORD : 0) | 
    246           (input ? GST_MIXER_TRACK_INPUT : 
    247               GST_MIXER_TRACK_OUTPUT) | 
    248           ((master != i) ? 0 : GST_MIXER_TRACK_MASTER)); 
    249       mixer->tracklist = g_list_append (mixer->tracklist, track); 
     242  if ( (num = roar_list_streams(&(mixer->con), id, ROAR_STREAMS_MAX)) == -1 ) { 
     243    return; 
     244  } 
     245 
     246 
     247  for (i = 0; i < num; i++) { 
     248   track = gst_roarmixer_track_new(mixer, id[i]); 
     249   mixer->tracklist = g_list_append(mixer->tracklist, track); 
     250  } 
    250251 
    251252  ROAR_WARN("gst_roarmixer_updatestreamlist(mixer=%p) = (void)", mixer); 
     
    267268                                                 GstMixerTrack * track, 
    268269                                                 gint * volumes) { 
     270 GstRoarMixerTrack *roartrack = GST_ROARMIXER_TRACK(track); 
     271 int channels; 
     272 struct roar_mixer_settings m; 
     273 gint i; 
     274 
     275 
     276 g_return_if_fail(gst_roarmixer_contains_track(mixer, roartrack)); 
     277 
     278 if ( roar_get_vol(&(mixer->con), roartrack->stream_id, &m, &channels) == -1 ) { 
     279  fprintf(stderr, "Error: can not get stream mixer info\n"); 
     280  return; 
     281 } 
     282 
     283 if ( channels != track->num_channels ) { 
     284  ROAR_WARN("gst_roarmixer_get_volume(*): numer of channels for stream %i mismatch", roartrack->stream_id); 
     285 
     286  if ( track->num_channels < channels ) 
     287   channels = track->num_channels; 
     288 } 
     289 
     290 for (i = 0; i < channels; i++) { 
     291  volumes[i] = m.mixer[i]; 
     292 } 
    269293} 
    270294void            gst_roarmixer_set_record         (GstRoarMixer * mixer, 
     
    275299                                                 GstMixerTrack * track, 
    276300                                                 gboolean mute) { 
     301  GstRoarMixerTrack *roartrack = GST_ROARMIXER_TRACK(track); 
     302  struct roar_stream s; 
     303 
     304  g_return_if_fail(gst_roarmixer_contains_track(mixer, roartrack)); 
     305 
     306  roar_stream_new_by_id(&s, roartrack->stream_id); 
     307 
     308  if (mute) { 
     309    roar_stream_set_flags(&(mixer->con), &s, ROAR_FLAG_MUTE, ROAR_SET_FLAG); 
     310  } else { 
     311    roar_stream_set_flags(&(mixer->con), &s, ROAR_FLAG_MUTE, ROAR_RESET_FLAG); 
     312  } 
    277313} 
    278314 
     
    296332GstMixerTrack * 
    297333gst_roarmixer_track_new (GstRoarMixer * mixer, 
    298     gint stream_id, gint max_chans, gint flags) 
     334    gint stream_id) 
    299335{ 
    300336  GstRoarMixerTrack *roartrack; 
    301337  GstMixerTrack *track; 
    302  
    303   ROAR_WARN("gst_roarmixer_track_new(mixer=%p, stream_id=%i, max_chans=%i, flags=0x%.4x) = ?", mixer, stream_id, max_chans, flags); 
    304  
    305   roartrack = g_object_new (GST_TYPE_ROARMIXER_TRACK, NULL); 
     338  struct roar_stream s; 
     339  gint flags = 0; 
     340  gchar buf[1024]; 
     341 
     342  ROAR_WARN("gst_roarmixer_track_new(mixer=%p, stream_id=%i) = ?", mixer, stream_id); 
     343 
     344  if ( roar_get_stream(&(mixer->con), &s, stream_id) == -1 ) { 
     345    return NULL; 
     346  } 
     347 
     348  switch (s.dir) { 
     349   case ROAR_DIR_PLAY: 
     350     flags |= GST_MIXER_TRACK_OUTPUT; 
     351    break; 
     352   case ROAR_DIR_OUTPUT: 
     353     flags |= GST_MIXER_TRACK_MASTER; 
     354   case ROAR_DIR_MONITOR: 
     355     flags |= GST_MIXER_TRACK_OUTPUT; 
     356    break; 
     357  } 
     358 
     359  sprintf(buf, "Stream %i", stream_id); 
     360 
     361  roartrack = g_object_new(GST_TYPE_ROARMIXER_TRACK, NULL); 
    306362  ROAR_WARN("gst_roarmixer_track_new(*): roartrack=%p", roartrack); 
    307   track = GST_MIXER_TRACK (roartrack); 
    308   track->label = g_strdup ("TRACKLABLE"); 
    309   track->num_channels = max_chans; 
    310   track->flags = flags; 
    311   track->min_volume = 0; 
    312   track->max_volume = 65535; 
     363  track               = GST_MIXER_TRACK(roartrack); 
     364  track->label        = g_strdup(buf); 
     365  track->num_channels = s.info.channels; 
     366  track->flags        = flags; 
     367  track->min_volume   = 0; 
     368  track->max_volume   = 65535; 
    313369  roartrack->stream_id = stream_id; 
    314370 
    315371  /* volume */ 
    316   ROAR_WARN("gst_roarmixer_track_new(mixer=%p, stream_id=%i, max_chans=%i, flags=0x%.4x) = %p", mixer, stream_id, max_chans, flags, track); 
     372  ROAR_WARN("gst_roarmixer_track_new(mixer=%p, stream_id=%i) = %p", mixer, stream_id, track); 
    317373  return track; 
    318374} 
  • plugins/gstreamer0.10/roarmixer.h

    r2076 r2077  
    135135GstMixerTrack * 
    136136gst_roarmixer_track_new (GstRoarMixer * mixer, 
    137     gint stream_id, gint max_chans, gint flags); 
     137    gint stream_id); 
    138138 
    139139#define GST_IMPLEMENT_ROAR_MIXER_METHODS(Type, interface_as_function)            \ 
Note: See TracChangeset for help on using the changeset viewer.