
Recherche avancée
Autres articles (83)
-
Submit bugs and patches
13 avril 2011Unfortunately a software is never perfect.
If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
You may also (...) -
Encoding and processing into web-friendly formats
13 avril 2011, parMediaSPIP automatically converts uploaded files to internet-compatible formats.
Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
All uploaded files are stored online in their original format, so you can (...) -
MediaSPIP Player : problèmes potentiels
22 février 2011, parLe lecteur ne fonctionne pas sur Internet Explorer
Sur Internet Explorer (8 et 7 au moins), le plugin utilise le lecteur Flash flowplayer pour lire vidéos et son. Si le lecteur ne semble pas fonctionner, cela peut venir de la configuration du mod_deflate d’Apache.
Si dans la configuration de ce module Apache vous avez une ligne qui ressemble à la suivante, essayez de la supprimer ou de la commenter pour voir si le lecteur fonctionne correctement : /** * GeSHi (C) 2004 - 2007 Nigel McNie, (...)
Sur d’autres sites (8237)
-
fftools/ffmpeg : move elapsed time counter to the end of the status line
9 mai, par Marton Balintfftools/ffmpeg : move elapsed time counter to the end of the status line
Elapsed time is much less important than the actual progress, and I am guessing
several ffmpeg CLI frontends use the existing status line for showing progress,
so putting a new field in the beginning is less optimal anyway.Related to ticket #11582.
Signed-off-by : Marton Balint <cus@passwd.hu>
-
Beware the builtins
14 janvier 2010, par Mans — CompilersGCC includes a large number of builtin functions allegedly providing optimised code for common operations not easily expressed directly in C. Rather than taking such claims at face value (this is GCC after all), I decided to conduct a small investigation to see how well a few of these functions are actually implemented for various targets.
For my test, I selected the following functions :
__builtin_bswap32
: Byte-swap a 32-bit word.__builtin_bswap64
: Byte-swap a 64-bit word.__builtin_clz
: Count leading zeros in a word.__builtin_ctz
: Count trailing zeros in a word.__builtin_prefetch
: Prefetch data into cache.
To test the quality of these builtins, I wrapped each in a normal function, then compiled the code for these targets :
- ARMv7
- AVR32
- MIPS
- MIPS64
- PowerPC
- PowerPC64
- x86
- x86_64
In all cases I used compiler flags were
-O3 -fomit-frame-pointer
plus any flags required to select a modern CPU model.
ARM
Both
__builtin_clz
and__builtin_prefetch
generate the expectedCLZ
andPLD
instructions respectively. The code for__builtin_ctz
is reasonable for ARMv6 and earlier :rsb r3, r0, #0 and r0, r3, r0 clz r0, r0 rsb r0, r0, #31
For ARMv7 (in fact v6T2), however, using the new bit-reversal instruction would have been better :
rbit r0, r0 clz r0, r0
I suspect this is simply a matter of the function not yet having been updated for ARMv7, which is perhaps even excusable given the relatively rare use cases for it.
The byte-reversal functions are where it gets shocking. Rather than use the
REV
instruction found from ARMv6 on, both of them generate external calls to__bswapsi2
and__bswapdi2
in libgcc, which is plain C code :SItype __bswapsi2 (SItype u) return ((((u) & 0xff000000) >> 24) | (((u) & 0x00ff0000) >> 8) | (((u) & 0x0000ff00) << 8) | (((u) & 0x000000ff) << 24)) ;
DItype
__bswapdi2 (DItype u)
return ((((u) & 0xff00000000000000ull) >> 56)
| (((u) & 0x00ff000000000000ull) >> 40)
| (((u) & 0x0000ff0000000000ull) >> 24)
| (((u) & 0x000000ff00000000ull) >> 8)
| (((u) & 0x00000000ff000000ull) << 8)
| (((u) & 0x0000000000ff0000ull) << 24)
| (((u) & 0x000000000000ff00ull) << 40)
| (((u) & 0x00000000000000ffull) << 56)) ;
While the 32-bit version compiles to a reasonable-looking shift/mask/or job, the 64-bit one is a real WTF. Brace yourselves :
push r4, r5, r6, r7, r8, r9, sl, fp mov r5, #0 mov r6, #65280 ; 0xff00 sub sp, sp, #40 ; 0x28 and r7, r0, r5 and r8, r1, r6 str r7, [sp, #8] str r8, [sp, #12] mov r9, #0 mov r4, r1 and r5, r0, r9 mov sl, #255 ; 0xff ldr r9, [sp, #8] and r6, r4, sl mov ip, #16711680 ; 0xff0000 str r5, [sp, #16] str r6, [sp, #20] lsl r2, r0, #24 and ip, ip, r1 lsr r7, r4, #24 mov r1, #0 lsr r5, r9, #24 mov sl, #0 mov r9, #-16777216 ; 0xff000000 and fp, r0, r9 lsr r6, ip, #8 orr r9, r7, r1 and ip, r4, sl orr sl, r1, r2 str r6, [sp] str r9, [sp, #32] str sl, [sp, #36] ; 0x24 add r8, sp, #32 ldm r8, r7, r8 str r1, [sp, #4] ldm sp, r9, sl orr r7, r7, r9 orr r8, r8, sl str r7, [sp, #32] str r8, [sp, #36] ; 0x24 mov r3, r0 mov r7, #16711680 ; 0xff0000 mov r8, #0 and r9, r3, r7 and sl, r4, r8 ldr r0, [sp, #16] str fp, [sp, #24] str ip, [sp, #28] stm sp, r9, sl ldr r7, [sp, #20] ldr sl, [sp, #12] ldr fp, [sp, #12] ldr r8, [sp, #28] lsr r0, r0, #8 orr r7, r0, r7, lsl #24 lsr r6, sl, #24 orr r5, r5, fp, lsl #8 lsl sl, r8, #8 mov fp, r7 add r8, sp, #32 ldm r8, r7, r8 orr r6, r6, r8 ldr r8, [sp, #20] ldr r0, [sp, #24] orr r5, r5, r7 lsr r8, r8, #8 orr sl, sl, r0, lsr #24 mov ip, r8 ldr r0, [sp, #4] orr fp, fp, r5 ldr r5, [sp, #24] orr ip, ip, r6 ldr r6, [sp] lsl r9, r5, #8 lsl r8, r0, #24 orr fp, fp, r9 lsl r3, r3, #8 orr r8, r8, r6, lsr #8 orr ip, ip, sl lsl r7, r6, #24 and r5, r3, #16711680 ; 0xff0000 orr r7, r7, fp orr r8, r8, ip orr r4, r1, r7 orr r5, r5, r8 mov r9, r6 mov r1, r5 mov r0, r4 add sp, sp, #40 ; 0x28 pop r4, r5, r6, r7, r8, r9, sl, fp bx lr
That’s right, 91 instructions to move 8 bytes around a bit. GCC definitely has a problem with 64-bit numbers. It is perhaps worth noting that the
bswap_64
macro in glibc splits the 64-bit value into 32-bit halves which are then reversed independently, thus side-stepping this weakness of gcc.As a side note, ARM RVCT (armcc) compiles those functions perfectly into one and two
REV
instructions, respectively.AVR32
There is not much to report here. The latest gcc version available is 4.2.4, which doesn’t appear to have the bswap functions. The other three are handled nicely, even using a bit-reverse for
__builtin_ctz
.MIPS / MIPS64
The situation MIPS is similar to ARM. Both bswap builtins result in external libgcc calls, the rest giving sensible code.
PowerPC
I scarcely believe my eyes, but this one is actually not bad. The PowerPC has no byte-reversal instructions, yet someone seems to have taken the time to teach gcc a good instruction sequence for this operation. The PowerPC does have some powerful rotate-and-mask instructions which come in handy here. First the 32-bit version :
rotlwi r0,r3,8 rlwimi r0,r3,24,0,7 rlwimi r0,r3,24,16,23 mr r3,r0 blr
The 64-bit byte-reversal simply applies the above code on each half of the value :
rotlwi r0,r3,8 rlwimi r0,r3,24,0,7 rlwimi r0,r3,24,16,23 rotlwi r3,r4,8 rlwimi r3,r4,24,0,7 rlwimi r3,r4,24,16,23 mr r4,r0 blr
Although I haven’t analysed that code carefully, it looks pretty good.
PowerPC64
Doing 64-bit operations is easier on a 64-bit CPU, right ? For you and me perhaps, but not for gcc. Here
__builtin_bswap64
gives us the now familiar__bswapdi2
call, and while not as bad as the ARM version, it is not pretty :rldicr r0,r3,8,55 rldicr r10,r3,56,7 rldicr r0,r0,56,15 rldicl r11,r3,8,56 rldicr r9,r3,16,47 or r11,r10,r11 rldicr r9,r9,48,23 rldicl r10,r0,24,40 rldicr r0,r3,24,39 or r11,r11,r10 rldicl r9,r9,40,24 rldicr r0,r0,40,31 or r9,r11,r9 rlwinm r10,r3,0,0,7 rldicl r0,r0,56,8 or r0,r9,r0 rldicr r10,r10,8,55 rlwinm r11,r3,0,8,15 or r0,r0,r10 rldicr r11,r11,24,39 rlwinm r3,r3,0,16,23 or r0,r0,r11 rldicr r3,r3,40,23 or r3,r0,r3 blr
That is 6 times longer than the (presumably) hand-written 32-bit version.
x86 / x86_64
As one might expect, results on x86 are good. All the tested functions use the available special instructions. One word of caution though : the bit-counting instructions are very slow on some implementations, specifically the Atom, AMD chips, and the notoriously slow Pentium4E.
Conclusion
In conclusion, I would say gcc builtins can be useful to avoid fragile inline assembler. Before using them, however, one should make sure they are not in fact harmful on the required targets. Not even those builtins mapping directly to CPU instructions can be trusted.
-
App crashes on Google TV when playing MP4 videos
14 avril 2023, par fabI am having problems with an Android app that was developed for me. The issue occurs when playing MP4 videos ; the app plays them correctly, but at some point, the app crashes and exits. I have been reviewing errors using Android Studio, and the only error that appears is the following :


2023-04-14 00:45:45.846 7221-7650 SurfaceUtils com.app.X D connecting to surface 0xbf0d2808, reason connectToSurface(reconnect) 2023-04-14 00:45:45.848 7221-7654 ACodec com.app.X E [OMX.amlogic.avc.decoder.awesome2] setPortMode on output to DynamicANWBuffer failed w/ err -2147483648 2023-04-14 00:45:45.855 7221-7334 com.app.X com.app.X I get_buffer_dataspace_setting get_metadata return 0 dataspace:268500992 2023-04-14 00:45:45.875 7221-7334 NdkImageReader com.app.X D acquireImageLocked: Overriding buffer format YUV_420_888 to 0x11. 2023-04-14 00:45:45.877 7221-7334 com.app.X com.app.X I get_buffer_dataspace_setting get_metadata return 0 dataspace:268500992 2023-04-14 00:45:45.887 7221-7280 MediaCodec com.app.X D keep callback message for reclaim 2023-04-14 00:45:45.896 7221-7334 com.app.X com.app.X I get_buffer_dataspace_setting get_metadata return 0 dataspace:268500992 2023-04-14 00:45:45.914 7221-7334 com.app.X com.app.X I get_buffer_dataspace_setting get_metadata return 0 dataspace:268500992 2023-04-14 00:45:45.915 7221-7654 SurfaceUtils com.app.X D disconnecting from surface 0xbf0d2808, reason setNativeWindowSizeFormatAndUsage 2023-04-14 00:45:45.915 7221-7654 SurfaceUtils com.app.X D connecting to surface 0xbf0d2808, reason setNativeWindowSizeFormatAndUsage 2023-04-14 00:45:45.915 7221-7654 SurfaceUtils com.app.X D set up nativeWindow 0xbf0d2808 for 1920x1080, color 0x11, rotation 0, usage 0x402b00 2023-04-14 00:45:45.915 7221-7654 ACodec com.app.X W [OMX.amlogic.avc.decoder.awesome2] setting nBufferCountActual to 9 failed: -1010 2023-04-14 00:45:45.922 7221-7654 ion com.app.X E ioctl c0084905 failed with code -1: Invalid argument 2023-04-14 00:45:45.928 7221-7654 ion com.app.X E ioctl c0084905 failed with code -1: Invalid argument 2023-04-14 00:45:45.943 7221-7334 com.app.X com.app.X I get_buffer_dataspace_setting get_metadata return 0 dataspace:268500992 2023-04-14 00:45:45.954 7221-7654 ion com.app.X E ioctl c0084905 failed with code -1: Invalid argument 2023-04-14 00:45:45.960 7221-7654 ion com.app.X E ioctl c0084905 failed with code -1: Invalid argument 2023-04-14 00:45:45.962 7221-7654 ion com.app.X E ioctl c0084905 failed with code -1: Invalid argument 2023-04-14 00:45:45.969 7221-7654 ion com.app.X E ioctl c0084905 failed with code -1: Invalid argument 2023-04-14 00:45:45.979 7221-7654 ion com.app.X E ioctl c0084905 failed with code -1: Invalid argument 2023-04-14 00:45:45.986 7221-7654 ion com.app.X E ioctl c0084905 failed with code -1: Invalid argument


One clarification is that the app is built with IONIC and Angular.


The FFMPEG code that converts the video in golang is as follows :


func ConvertVideoFile(inputFileName, outputFileName string) error { err := ffmpeg_go.Input(inputFileName). Filter("scale", ffmpeg_go.Args{"800:600"}). Output(outputFileName, ffmpeg_go.KwArgs{ "c:v": "libx264", "profile:v": "high", "level": "3.1", "pix_fmt": "yuv420p", "preset": "medium", "crf": "23", "b:v": "782k", "r": "25", "c:a": "aac", "b:a": "2k", "ar": "48000", "movflags": "+faststart", "max_muxing_queue_size": "1024", }, ). OverWriteOutput().ErrorToStdOut().Run() return err }


Remove this error 2023-04-14 00:45:45.848 7221-7654 ACodec com.app.X E [OMX.amlogic.avc.decoder.awesome2