Changeset 3459:d5eff217fea2 in roaraudio


Ignore:
Timestamp:
02/13/10 21:56:57 (10 years ago)
Author:
phi
Branch:
default
Message:

implemented a lot volume functions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroarpulse/volume.c

    r3458 r3459  
    4040 
    4141/** Return non-zero when *a == *b */ 
    42 int pa_cvolume_equal(const pa_cvolume *a, const pa_cvolume *b); 
     42int pa_cvolume_equal(const pa_cvolume *a, const pa_cvolume *b) { 
     43 int i; 
     44 
     45 if ( a == b ) 
     46  return 1; 
     47 
     48 if ( a == NULL || b == NULL ) 
     49  return 0; 
     50 
     51 if ( a->channels != b->channels ) 
     52  return 0; 
     53 
     54 for (i = 0; i < a->channels; i++) 
     55  if ( a->values[i] != b->values[i] ) 
     56   return 0; 
     57 
     58 return 1; 
     59} 
    4360 
    4461/** Set the volume of all channels to the specified parameter */ 
    45 pa_cvolume* pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v); 
     62pa_cvolume* pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v) { 
     63 int i; 
     64 
     65 if ( a == NULL ) 
     66  return NULL; 
     67 
     68 if ( channels > PA_CHANNELS_MAX ) 
     69  return NULL; 
     70 
     71 a->channels = channels; 
     72 
     73 for (i = 0; i < channels; i++) { 
     74  a->values[i] = v; 
     75 } 
     76 
     77 return a; 
     78} 
    4679 
    4780/** Pretty print a volume structure */ 
     
    4982 
    5083/** Return the average volume of all channels */ 
    51 pa_volume_t pa_cvolume_avg(const pa_cvolume *a); 
     84pa_volume_t pa_cvolume_avg(const pa_cvolume *a) { 
     85 int64_t sum = 0; 
     86 int i; 
     87 
     88#ifndef PA_VOLUME_INVALID 
     89#define PA_VOLUME_INVALID ((pa_volume_t) UINT32_MAX) 
     90#endif 
     91 
     92 if ( a == NULL ) 
     93  return PA_VOLUME_INVALID; 
     94 
     95 for (i = 0; i < a->channels; i++) 
     96  sum += a->values[i]; 
     97 
     98 return sum/a->channels; 
     99} 
    52100 
    53101/** Return TRUE when the passed cvolume structure is valid, FALSE otherwise */ 
    54 int pa_cvolume_valid(const pa_cvolume *v); 
     102int pa_cvolume_valid(const pa_cvolume *v) { 
     103 if ( v == NULL ) 
     104  return 0; 
     105 
     106 if ( v->channels <= 0 ) 
     107  return 0; 
     108 
     109 if ( v->channels > PA_CHANNELS_MAX ) 
     110  return 0; 
     111 
     112 return 1; 
     113} 
    55114 
    56115/** Return non-zero if the volume of all channels is equal to the specified value */ 
    57 int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v); 
     116int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v) { 
     117 int i; 
     118 
     119 if ( a == NULL ) 
     120  return 0; 
     121 
     122 for (i = 0; i < a->channels; i++) 
     123  if ( a->values[i] != v ) 
     124   return 0; 
     125 
     126 return 1; 
     127} 
    58128 
    59129/** Multiply two volumes specifications, return the result. This uses PA_VOLUME_NORM as neutral element of multiplication. This is only valid for software volumes! */ 
Note: See TracChangeset for help on using the changeset viewer.