Changeset 5624:ec1593cc8525 in roaraudio for libroar/stream.c


Ignore:
Timestamp:
08/18/12 02:04:07 (12 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

Added support for RePlayGain? (RPG) control (See: #300)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/stream.c

    r5542 r5624  
    743743} 
    744744 
     745int roar_stream_get_rpg   (struct roar_connection * con, struct roar_stream * s, struct roar_stream_rpg * rpg) { 
     746 struct roar_message m; 
     747 uint16_t * data = (uint16_t *) m.data; 
     748 size_t i; 
     749 
     750 memset(&m,  0, sizeof(m)); 
     751 
     752 m.cmd     = ROAR_CMD_GET_STREAM_PARA; 
     753 m.stream  = s->id; 
     754 m.datalen = 2*2; 
     755 m.pos     = 0; 
     756 
     757 data[0] = 0; // Version and reserved 
     758 data[1] = ROAR_STREAM_PARA_RPG; // flags 
     759 
     760 for (i = 0; i < m.datalen/2; i++) { 
     761  data[i] = ROAR_HOST2NET16(data[i]); 
     762 } 
     763 
     764 if ( roar_req(con, &m, NULL) == -1 ) 
     765  return -1; 
     766 
     767 if ( m.cmd != ROAR_CMD_OK ) 
     768  return -1; 
     769 
     770 for (i = 0; i < m.datalen/2; i++) { 
     771  data[i] = ROAR_NET2HOST16(data[i]); 
     772 } 
     773 
     774 if ( m.datalen != 10 ) { 
     775  roar_err_set(ROAR_ERROR_MSGSIZE); 
     776  return -1; 
     777 } 
     778 
     779 if ( data[0] != 0 ) { 
     780  roar_err_set(ROAR_ERROR_NSVERSION); 
     781  return -1; 
     782 } 
     783 
     784 if ( data[1] != ROAR_STREAM_PARA_RPG ) { 
     785  roar_err_set(ROAR_ERROR_BADRQC); 
     786  return -1; 
     787 } 
     788 
     789 memset(rpg, 0, sizeof(struct roar_stream_rpg)); 
     790 
     791 rpg->mode = data[2]; 
     792 rpg->mul  = data[3]; 
     793 rpg->div  = data[4]; 
     794 
     795 if ( rpg->mode == 0xFFFF ) 
     796  rpg->mode = -1; 
     797 
     798 return 0; 
     799} 
     800 
     801int roar_stream_set_rpg   (struct roar_connection * con, struct roar_stream * s, const struct roar_stream_rpg * rpg) { 
     802 struct roar_message m; 
     803 uint16_t * data = (uint16_t *) m.data; 
     804 size_t i; 
     805 
     806 memset(&m,  0, sizeof(m)); 
     807 
     808 m.cmd     = ROAR_CMD_SET_STREAM_PARA; 
     809 m.stream  = s->id; 
     810 m.datalen = (2+3)*2; 
     811 m.pos     = 0; 
     812 
     813 data[0] = 0; // Version and reserved 
     814 data[1] = ROAR_STREAM_PARA_RPG; // flags 
     815 data[2] = rpg->mode; 
     816 data[3] = rpg->mul; 
     817 data[4] = rpg->div; 
     818 
     819 for (i = 0; i < m.datalen/2; i++) { 
     820  data[i] = ROAR_HOST2NET16(data[i]); 
     821 } 
     822 
     823 if ( roar_req(con, &m, NULL) == -1 ) 
     824  return -1; 
     825 
     826 if ( m.cmd != ROAR_CMD_OK ) 
     827  return -1; 
     828 
     829 return 0; 
     830} 
    745831 
    746832#ifdef DEBUG 
     
    11681254 
    11691255 return "unknown"; 
     1256} 
     1257 
     1258const char * roar_rpgmode2str(const int rpgmode) { 
     1259 switch (rpgmode) { 
     1260  case ROAR_RPGMODE_DEFAULT:    return "default"; break; 
     1261  case ROAR_RPGMODE_NONE:       return "none"; break; 
     1262  case ROAR_RPGMODE_USER:       return "user"; break; 
     1263  case ROAR_RPGMODE_ALBUM:      return "album"; break; 
     1264  case ROAR_RPGMODE_TRACK:      return "track"; break; 
     1265  case ROAR_RPGMODE_ALBUMTRACK: return "albumtrack"; break; 
     1266  case ROAR_RPGMODE_TRACKALBUM: return "trackalbum"; break; 
     1267  default: 
     1268    roar_err_set(ROAR_ERROR_NOENT); 
     1269    return NULL; 
     1270   break; 
     1271 } 
    11701272} 
    11711273 
Note: See TracChangeset for help on using the changeset viewer.