Mercurial > mplayer.hg
view loader/wrapper.S @ 17279:600d0b740940
"Currently mplayer looks for only one MP3 frame sync. The attached
patch makes it to look for two consecutive valid MP3 frame headers,
reducing the probability of false positives, which causes Bug 380.
Funny that the fix is so simple. Seems that someone has forgotten to
initialize MP3_resync correctly.
Also this is the recommended way to sync MP3 frames. See
http://www.dv.co.yu/mpgscript/mpeghdr.htm. "
Original thread:
Date: Dec 31, 2005 10:15 AM
Subject: [MPlayer-dev-eng] [PATCH] Try twice when searching for MP3 frame header, fixes Bug 380
author | gpoirier |
---|---|
date | Sat, 31 Dec 2005 18:56:35 +0000 |
parents | c3eb28f300d0 |
children | 0f1b5b68af32 |
line wrap: on
line source
.section .data .globl caller_return caller_return: .long 0 .globl report_entry report_entry: .long null_call .globl report_ret report_ret: .long null_call .global wrapper_target wrapper_target: .long null_call .section .text .globl null_call .type null_call, @function .balign 16,0x90 null_call: ret .globl wrapper .type wrapper, @function .balign 16,0x90 wrapper: pusha # store registers (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) pushf # store flags push %ebp # set up a stack frame movl %esp, %ebp leal 4(%ebp), %eax # push flags addr push %eax leal 8(%ebp), %eax # push registers addr push %eax leal 40(%ebp), %edx movl (%ebp), %eax subl %edx, %eax push %eax push %edx call *report_entry # report entry test %eax, %eax jnz .Ldone leave # restore %esp, %ebp popf # restore flags popa # restore registers popl caller_return # switch return addresses pushl $.Lwrapper_return jmp *wrapper_target # wrapper_target should return at .Lwrapper_return .balign 16, 0x90 .Lwrapper_return: pushl caller_return # restore the original return address pusha # more for reference sake here pushf push %ebp # set up a stack frame movl %esp, %ebp leal 4(%ebp), %eax # push flags addr push %eax leal 8(%ebp), %eax # push registers addr push %eax leal 40(%ebp), %edx # push stack top address (relative to our entry) movl (%ebp), %eax subl %edx, %eax # calculate difference between entry and previous frame push %eax push %edx call *report_ret # report the return information (same args) .Ldone: leave popf popa ret