[alsa-devel] MTP-AV Bugs

Holger Dehnhardt dehnhardt at ahdehnhardt.de
Wed Feb 11 14:44:13 CET 2009


Am Mittwoch, 11. Februar 2009 14:26:23 schrieb Takashi Iwai:
> At Wed, 11 Feb 2009 14:18:59 +0100,
>
> Holger Dehnhardt wrote:
> > Dear Takashi,
> >
> > thank you for your quick response!
> > See my inline comments.
> >
> > Am Mittwoch, 11. Februar 2009 13:08:22 schrieb Takashi Iwai:
> > > At Tue, 10 Feb 2009 21:54:32 +0100,
> > >
> > > Holger Dehnhardt wrote:
> > > > After some time I found the following bug:
> > > >
> > > > static void snd_mtpav_inmidi_h(struct mtpav *mcrd, u8 inbyte)
> > > > {
> > > >         if (inbyte >= 0xf8) {
> > > >                 /* real-time midi code */
> > > > -->                snd_mtpav_inmidi_process(mcrd, inbyte);
> > > > 	//here the inmidiport is not translated to the prtnumber, so
> > > > 	// snd_mtpav_inmidi_process the port with an index of some 80000
> > > > 	// in the ports array of the mtpav struct was called
> > >
> > > Good catch.  I think the patch below should fix the problem
>
> Did you try my patch?

Sorry, Takashi, I'm still at work. I will try your path tonight when I'm home 
and my children are in bed;-)

>
> > > > The following change made the driver work:
> > > > static void snd_mtpav_inmidi_h(struct mtpav *mcrd, u8 inbyte)
> > > > {
> > > >         if (inbyte >= 0xf8) {
> > > >                 /* real-time midi code */
> > > > 		mcrd->inmidiport = translate_hwport_to_subdevice(mcrd, inbyte);
> > >
> > > This isn't correct since inbyte is supposed to be under 0x13.
> >
> > Sorry, I don't understand what you mean: inbyte should always be lower
> > than 0x13 or is the real time midi code always lower then 0x13?
>
> I meant that the data passed to translate_hwport_to_subdevice() is
> supposed to be <= 0x13.  In that code path, inbyte is >= 0xf8, thus
> you pass an invalid data.
>
> > > > After that I realised, that with the recent driver - even without my
> > > > change - playing midi files din not work anymore.
> > > > Only the first midi event was sent to the interface, everything else
> > > > was dropped somewhere.
> > > >
> > > > So a diff between the last workin version and the recent version
> > > > showed only one change:
> > >
> > > What was the last working version exactly?
> >
> > 1.0.18 (from the debian experimental repository)
>
> Weird.  There is really no essential change since that.
> Are you sure that you just copied 1.0.18 mtpav.c fixes the problem?

The only change I did was to change snd_card_create(...) back to 
snd_card_new(..) in the recent driver (1.0.19) to get the MIDI OUT working 
again.

After applying your patch I will go into this again.

Thanks

Holger


More information about the Alsa-devel mailing list