[MPlayer-dev-eng] [PATCH] - fix for audio and video in dvr-ms asf files

John Donaghy johnfdonaghy at gmail.com
Sun Apr 16 18:37:47 CEST 2006


> This crashes in demux_open for me on my G4:
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 805500448 (LWP 9422)]
> 0x0ecc79e4 in memcmp () from /lib/tls/libc.so.6
>
> Let me know if you need more details.

Anything you can provide would be helpful. Did you try it on x86?

Also, sorry to sound like a newbie but did you merge the patch using a
CSV snap from the day it was submitted or on a current snapshot?

Does it work with '-demurer 35'?

Can you get the file you used to me somehow? Was it a dvr-ms file
generated from Windows Media Center 2005 Rollup 2 or something
earlier. I know some things are different in recent versions - such as
the presence of a subtitle stream - which could affect things.

I had a look at the patch and the only memcmp I've added is in this function:

static int find_backwards_asf_guid(char *buf, const char *guid, int cur_pos)
{
  int i;
  for (i=cur_pos; i>0; i--) {
    if (memcmp(&buf[i], guid, 16) == 0)
      return i + 16 + 8; // point after guid + length
  }
  return -1;
}

I cant immediately see anything wrong with it except that maybe it
should start at cur_pos - 16 instead of cur_pos ie:

static int find_backwards_asf_guid(char *buf, const char *guid, int cur_pos)
{
  int i;
  for (i=cur_pos-16; i>0; i--) {
    if (memcmp(&buf[i], guid, 16) == 0)
      return i + 16 + 8; // point after guid + length
  }
  return -1;
}

it's very similar to the existing find_asf_guid...

int find_asf_guid(char *buf, const char *guid, int cur_pos, int buf_len)
{
  int i;
  for (i = cur_pos; i < buf_len - 19; i++) {
    if (memcmp(&buf[i], guid, 16) == 0)
      return i + 16 + 8; // point after guid + length
  }
  return -1;
}

Regards,

John




More information about the MPlayer-dev-eng mailing list