10b167267bda99b68346045ccab14e810121d5de4Glenn Kasten/* 20b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * Copyright (C) 2010 The Android Open Source Project 30b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * 40b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 50b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * you may not use this file except in compliance with the License. 60b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * You may obtain a copy of the License at 70b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * 80b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 90b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * 100b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * Unless required by applicable law or agreed to in writing, software 110b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 120b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * See the License for the specific language governing permissions and 140b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * limitations under the License. 150b167267bda99b68346045ccab14e810121d5de4Glenn Kasten */ 160b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 170b167267bda99b68346045ccab14e810121d5de4Glenn Kasten/* MIDIMuteSolo implementation */ 180b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 190b167267bda99b68346045ccab14e810121d5de4Glenn Kasten#include "sles_allinclusive.h" 200b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 21ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 22e5bf0d2c9531a7064eb3ddcafaf93ac1b0974037Glenn Kastenstatic SLresult IMIDIMuteSolo_SetChannelMute(SLMIDIMuteSoloItf self, SLuint8 channel, 23e5bf0d2c9531a7064eb3ddcafaf93ac1b0974037Glenn Kasten SLboolean mute) 240b167267bda99b68346045ccab14e810121d5de4Glenn Kasten{ 25ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 26ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 27ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (channel > 15) { 28ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 29ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 30bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMIDIMuteSolo *thiz = (IMIDIMuteSolo *) self; 31ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SLuint16 mask = 1 << channel; 32bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_exclusive(thiz); 33ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (mute) 34bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mChannelMuteMask |= mask; 35ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten else 36bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mChannelMuteMask &= ~mask; 37bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 38ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 39ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 40ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 41ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 420b167267bda99b68346045ccab14e810121d5de4Glenn Kasten} 430b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 44ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 450b167267bda99b68346045ccab14e810121d5de4Glenn Kastenstatic SLresult IMIDIMuteSolo_GetChannelMute(SLMIDIMuteSoloItf self, SLuint8 channel, 460b167267bda99b68346045ccab14e810121d5de4Glenn Kasten SLboolean *pMute) 470b167267bda99b68346045ccab14e810121d5de4Glenn Kasten{ 48ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 49ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 50ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (channel > 15 || (NULL == pMute)) { 51ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 52ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 53bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMIDIMuteSolo *thiz = (IMIDIMuteSolo *) self; 54bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_peek(thiz); 55bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten SLuint16 mask = thiz->mChannelMuteMask; 56bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_peek(thiz); 57ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pMute = (mask >> channel) & 1; 58ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 59ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 60ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 61ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 620b167267bda99b68346045ccab14e810121d5de4Glenn Kasten} 630b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 64ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 65e5bf0d2c9531a7064eb3ddcafaf93ac1b0974037Glenn Kastenstatic SLresult IMIDIMuteSolo_SetChannelSolo(SLMIDIMuteSoloItf self, SLuint8 channel, 66e5bf0d2c9531a7064eb3ddcafaf93ac1b0974037Glenn Kasten SLboolean solo) 670b167267bda99b68346045ccab14e810121d5de4Glenn Kasten{ 68ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 69ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 70ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (channel > 15) { 71ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 72ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 73bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMIDIMuteSolo *thiz = (IMIDIMuteSolo *) self; 74ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SLuint16 mask = 1 << channel; 75bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_exclusive(thiz); 76ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (solo) 77bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mChannelSoloMask |= mask; 78ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten else 79bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mChannelSoloMask &= ~mask; 80bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 81ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 82ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 83ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 84ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 850b167267bda99b68346045ccab14e810121d5de4Glenn Kasten} 860b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 87ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 880b167267bda99b68346045ccab14e810121d5de4Glenn Kastenstatic SLresult IMIDIMuteSolo_GetChannelSolo(SLMIDIMuteSoloItf self, SLuint8 channel, 890b167267bda99b68346045ccab14e810121d5de4Glenn Kasten SLboolean *pSolo) 900b167267bda99b68346045ccab14e810121d5de4Glenn Kasten{ 91ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 92ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 93ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (channel > 15 || (NULL == pSolo)) { 94ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 95ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 96bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMIDIMuteSolo *thiz = (IMIDIMuteSolo *) self; 97bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_peek(thiz); 98bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten SLuint16 mask = thiz->mChannelSoloMask; 99bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_peek(thiz); 100ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pSolo = (mask >> channel) & 1; 101ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 102ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 103ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 104ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 1050b167267bda99b68346045ccab14e810121d5de4Glenn Kasten} 1060b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 107ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1080b167267bda99b68346045ccab14e810121d5de4Glenn Kastenstatic SLresult IMIDIMuteSolo_GetTrackCount(SLMIDIMuteSoloItf self, SLuint16 *pCount) 1090b167267bda99b68346045ccab14e810121d5de4Glenn Kasten{ 110ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 111ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 112ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (NULL == pCount) { 113ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 114ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 115bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMIDIMuteSolo *thiz = (IMIDIMuteSolo *) self; 116ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten // const, so no lock needed 117bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten SLuint16 trackCount = thiz->mTrackCount; 118ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pCount = trackCount; 119ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 120ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 121ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 122ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 1230b167267bda99b68346045ccab14e810121d5de4Glenn Kasten} 1240b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 125ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1260b167267bda99b68346045ccab14e810121d5de4Glenn Kastenstatic SLresult IMIDIMuteSolo_SetTrackMute(SLMIDIMuteSoloItf self, SLuint16 track, SLboolean mute) 1270b167267bda99b68346045ccab14e810121d5de4Glenn Kasten{ 128ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 129ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 130bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMIDIMuteSolo *thiz = (IMIDIMuteSolo *) self; 131d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten // const 132bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten if (!(track < thiz->mTrackCount)) { 133ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 134ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 135ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SLuint32 mask = 1 << track; 136bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_exclusive(thiz); 137ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (mute) 138bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mTrackMuteMask |= mask; 139ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten else 140bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mTrackMuteMask &= ~mask; 141bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 142ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 143ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 144ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 145ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 1460b167267bda99b68346045ccab14e810121d5de4Glenn Kasten} 1470b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 148ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1490b167267bda99b68346045ccab14e810121d5de4Glenn Kastenstatic SLresult IMIDIMuteSolo_GetTrackMute(SLMIDIMuteSoloItf self, SLuint16 track, SLboolean *pMute) 1500b167267bda99b68346045ccab14e810121d5de4Glenn Kasten{ 151ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 152ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 153bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMIDIMuteSolo *thiz = (IMIDIMuteSolo *) self; 154d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten // const, no lock needed 155bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten if (!(track < thiz->mTrackCount) || NULL == pMute) { 156ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 157ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 158bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_peek(thiz); 159bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten SLuint32 mask = thiz->mTrackMuteMask; 160bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_peek(thiz); 161ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pMute = (mask >> track) & 1; 162ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 163ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 164ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 165ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 1660b167267bda99b68346045ccab14e810121d5de4Glenn Kasten} 1670b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 168ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1690b167267bda99b68346045ccab14e810121d5de4Glenn Kastenstatic SLresult IMIDIMuteSolo_SetTrackSolo(SLMIDIMuteSoloItf self, SLuint16 track, SLboolean solo) 1700b167267bda99b68346045ccab14e810121d5de4Glenn Kasten{ 171ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 172ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 173bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMIDIMuteSolo *thiz = (IMIDIMuteSolo *) self; 174d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten // const 175bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten if (!(track < thiz->mTrackCount)) { 176ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 177ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 178bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten SLuint32 mask = 1 << track; interface_lock_exclusive(thiz); 179ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (solo) 180bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mTrackSoloMask |= mask; 181ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten else 182bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mTrackSoloMask &= ~mask; 183bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_exclusive(thiz); 184ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 185ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 186ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 187ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 1880b167267bda99b68346045ccab14e810121d5de4Glenn Kasten} 1890b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 190ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 1910b167267bda99b68346045ccab14e810121d5de4Glenn Kastenstatic SLresult IMIDIMuteSolo_GetTrackSolo(SLMIDIMuteSoloItf self, SLuint16 track, SLboolean *pSolo) 1920b167267bda99b68346045ccab14e810121d5de4Glenn Kasten{ 193ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_ENTER_INTERFACE 194ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 195bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMIDIMuteSolo *thiz = (IMIDIMuteSolo *) self; 196d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten // const, no lock needed 197bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten if (!(track < thiz->mTrackCount) || NULL == pSolo) { 198ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_PARAMETER_INVALID; 199ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } else { 200bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_lock_peek(thiz); 201bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten SLuint32 mask = thiz->mTrackSoloMask; 202bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten interface_unlock_peek(thiz); 203ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten *pSolo = (mask >> track) & 1; 204ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = SL_RESULT_SUCCESS; 205ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 206ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 207ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SL_LEAVE_INTERFACE 2080b167267bda99b68346045ccab14e810121d5de4Glenn Kasten} 2090b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 210ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 2110b167267bda99b68346045ccab14e810121d5de4Glenn Kastenstatic const struct SLMIDIMuteSoloItf_ IMIDIMuteSolo_Itf = { 2120b167267bda99b68346045ccab14e810121d5de4Glenn Kasten IMIDIMuteSolo_SetChannelMute, 2130b167267bda99b68346045ccab14e810121d5de4Glenn Kasten IMIDIMuteSolo_GetChannelMute, 2140b167267bda99b68346045ccab14e810121d5de4Glenn Kasten IMIDIMuteSolo_SetChannelSolo, 2150b167267bda99b68346045ccab14e810121d5de4Glenn Kasten IMIDIMuteSolo_GetChannelSolo, 2160b167267bda99b68346045ccab14e810121d5de4Glenn Kasten IMIDIMuteSolo_GetTrackCount, 2170b167267bda99b68346045ccab14e810121d5de4Glenn Kasten IMIDIMuteSolo_SetTrackMute, 2180b167267bda99b68346045ccab14e810121d5de4Glenn Kasten IMIDIMuteSolo_GetTrackMute, 2190b167267bda99b68346045ccab14e810121d5de4Glenn Kasten IMIDIMuteSolo_SetTrackSolo, 2200b167267bda99b68346045ccab14e810121d5de4Glenn Kasten IMIDIMuteSolo_GetTrackSolo 2210b167267bda99b68346045ccab14e810121d5de4Glenn Kasten}; 2220b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 2230b167267bda99b68346045ccab14e810121d5de4Glenn Kastenvoid IMIDIMuteSolo_init(void *self) 2240b167267bda99b68346045ccab14e810121d5de4Glenn Kasten{ 225bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten IMIDIMuteSolo *thiz = (IMIDIMuteSolo *) self; 226bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mItf = &IMIDIMuteSolo_Itf; 227bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mChannelMuteMask = 0; 228bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mChannelSoloMask = 0; 229bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mTrackMuteMask = 0; 230bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mTrackSoloMask = 0; 231d2a7f0d6883a6d3835642e7b282f05ed1c54fe63Glenn Kasten // const 232bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kasten thiz->mTrackCount = 32; // wrong 2330b167267bda99b68346045ccab14e810121d5de4Glenn Kasten} 234