Recherche avancée

Médias (1)

Mot : - Tags -/graphisme

Autres articles (82)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

  • Personnaliser les catégories

    21 juin 2013, par

    Formulaire de création d’une catégorie
    Pour ceux qui connaissent bien SPIP, une catégorie peut être assimilée à une rubrique.
    Dans le cas d’un document de type catégorie, les champs proposés par défaut sont : Texte
    On peut modifier ce formulaire dans la partie :
    Administration > Configuration des masques de formulaire.
    Dans le cas d’un document de type média, les champs non affichés par défaut sont : Descriptif rapide
    Par ailleurs, c’est dans cette partie configuration qu’on peut indiquer le (...)

  • Des sites réalisés avec MediaSPIP

    2 mai 2011, par

    Cette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
    Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page.

Sur d’autres sites (9786)

  • Which is better for pixel-level analysis of television (TV) video, OpenCV or ffmpeg ? [closed]

    5 décembre 2011, par Randall Cook

    I need to do some pixel-level analysis of television (TV) video. I have used ffmpeg in the past for analyzing video from files, but it wasn't exactly easy. I am thinking of giving OpenCV a try. Any recommendations or advice ?

    Let's assume that I am starting with an MPEG-2 transport stream, and the analysis needs to run in real-time on Linux. I was also planning on using Intel's IPP library for some of the number crunching.

  • Bit-field badness

    30 janvier 2010, par Mans — Compilers, Optimisation

    Consider the following C code which is based on an real-world situation.

    struct bf1_31 
        unsigned a:1 ;
        unsigned b:31 ;
     ;
    

    void func(struct bf1_31 *p, int n, int a)

    int i = 0 ;
    do
    if (p[i].a)
    p[i].b += a ;
    while (++i < n) ;

    How would we best write this in ARM assembler ? This is how I would do it :

    func :
            ldr     r3,  [r0], #4
            tst     r3,  #1
            add     r3,  r3,  r2,  lsl #1
            strne   r3,  [r0, #-4]
            subs    r1,  r1,  #1
            bgt     func
            bx      lr
    

    The add instruction is unconditional to avoid a dependency on the comparison. Unrolling the loop would mask the latency of the ldr instruction as well, but that is outside the scope of this experiment.

    Now compile this code with gcc -march=armv5te -O3 and watch in horror :

    func :
            push    r4
            mov     ip, #0
            mov     r4, r2
    loop :
            ldrb    r3, [r0]
            add     ip, ip, #1
            tst     r3, #1
            ldrne   r3, [r0]
            andne   r2, r3, #1
            addne   r3, r4, r3, lsr #1
            orrne   r2, r2, r3, lsl #1
            strne   r2, [r0]
            cmp     ip, r1
            add     r0, r0, #4
            blt     loop
            pop     r4
            bx      lr
    

    This is nothing short of awful :

    • The same value is loaded from memory twice.
    • A complicated mask/shift/or operation is used where a simple shifted add would suffice.
    • Write-back addressing is not used.
    • The loop control counts up and compares instead of counting down.
    • Useless mov in the prologue ; swapping the roles or r2 and r4 would avoid this.
    • Using lr in place of r4 would allow the return to be done with pop {pc}, saving one instruction (ignoring for the moment that no callee-saved registers are needed at all).

    Even for this trivial function the gcc-generated code is more than twice the optimal size and slower by approximately the same factor.

    The main issue I wanted to illustrate is the poor handling of bit-fields by gcc. When accessing bitfields from memory, gcc issues a separate load for each field even when they are contained in the same aligned memory word. Although each load after the first will most likely hit L1 cache, this is still bad for several reasons :

    • Loads have typically two or three cycles result latency compared to one cycle for data processing instructions. Any bit-field can be extracted from a register with two shifts, and on ARM the second of these can generally be achieved using a shifted second operand to a following instruction. The ARMv6T2 instruction set also adds the SBFX and UBFX instructions for extracting any signed or unsigned bit-field in one cycle.
    • Most CPUs have more data processing units than load/store units. It is thus more likely for an ALU instruction than a load/store to issue without delay on a superscalar processor.
    • Redundant memory accesses can trigger early flushing of store buffers rendering these less efficient.

    No gcc bashing is complete without a comparison with another compiler, so without further ado, here is the ARM RVCT output (armcc --cpu 5te -O3) :

    func :
            mov     r3, #0
            push    r4, lr
    loop :
            ldr     ip, [r0, r3, lsl #2]
            tst     ip, #1
            addne   ip, ip, r2, lsl #1
            strne   ip, [r0, r3, lsl #2]
            add     r3, r3, #1
            cmp     r3, r1
            blt     loop
            pop     r4, pc
    

    This is much better, the core loop using only one instruction more than my version. The loop control is counting up, but at least this register is reused as offset for the memory accesses. More remarkable is the push/pop of two registers that are never used. I had not expected to see this from RVCT.

    Even the best compilers are still no match for a human.

  • FFMpeg and WebM/VP8

    25 novembre 2011, par Anand Suresh

    I am trying to use ffmpeg and ffserver to stream VP8 video.

    I am using the following command to start FFMpeg :

    ffmpeg -v 9 -loglevel 99 -f x11grab -s 1440x900 -r2 -i :0.0 -f webm http://localhost:8090/feed1.ffm

    The above command abruptly terminates generating the following error :

    > FFmpeg version 0.6.2-4:0.6.2-1ubuntu1.1, Copyright (c) 2000-2010 the Libav developers
     built on Sep 16 2011 16:57:46 with gcc 4.5.2
     configuration: --extra-version=4:0.6.2-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
     WARNING: library configuration mismatch
     libavutil   configuration: --extra-version=4:0.6.2-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
     libavcodec  configuration: --extra-version=4:0.6.2-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
     libavformat configuration: --extra-version=4:0.6.2-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
     libavdevice configuration: --extra-version=4:0.6.2-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
     libavfilter configuration: --extra-version=4:0.6.2-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
     libswscale  configuration: --extra-version=4:0.6.2-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
     libpostproc configuration: --extra-version=4:0.6.2-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
     libavutil     50.15. 1 / 50.15. 1
     libavcodec    52.72. 2 / 52.72. 2
     libavformat   52.64. 2 / 52.64. 2
     libavdevice   52. 2. 0 / 52. 2. 0
     libavfilter    1.19. 0 /  1.19. 0
     libswscale     0.11. 0 /  0.11. 0
     libpostproc   51. 2. 0 / 51. 2. 0
    [x11grab @ 0x9869420]device: :0.0 -> display: :0.0 x: 0 y: 0 width: 1440 height: 900
    [x11grab @ 0x9869420]shared memory extension  found
    [x11grab @ 0x9869420]Probe buffer size limit 5000000 reached
    [x11grab @ 0x9869420]Estimating duration from bitrate, this may be inaccurate
    Input #0, x11grab, from &#39;:0.0&#39;:
     Duration: N/A, start: 1322253753.374957, bitrate: 41472 kb/s
       Stream #0.0, 1, 1/1000000: Video: rawvideo, bgra, 1440x900, 1/1, 41472 kb/s, 1 tbr, 1000k tbn, 1 tbc
    [libvpx @ 0x9876540]v0.9.6
    [libvpx @ 0x9876540]--enable-pic --enable-shared --disable-install-bins --disable-install-srcs --target=x86-linux-gcc
    [libvpx @ 0x9876540]vpx_codec_enc_cfg
    [libvpx @ 0x9876540]generic settings
     g_usage:                      0
     g_threads:                    0
     g_profile:                    0
     g_w:                          320
     g_h:                          240
     g_timebase:                   {1/30}
     g_error_resilient:            0
     g_pass:                       0
     g_lag_in_frames:              0
    [libvpx @ 0x9876540]rate control settings
     rc_dropframe_thresh:          0
     rc_resize_allowed:            0
     rc_resize_up_thresh:          60
     rc_resize_down_thresh:        30
     rc_end_usage:                 0
     rc_twopass_stats_in:          (nil)(0)
     rc_target_bitrate:            256
    [libvpx @ 0x9876540]quantizer settings
     rc_min_quantizer:             4
     rc_max_quantizer:             63
    [libvpx @ 0x9876540]bitrate tolerance
     rc_undershoot_pct:            95
     rc_overshoot_pct:             200
    [libvpx @ 0x9876540]decoder buffer model
     rc_buf_sz:                    6000
     rc_buf_initial_sz:            4000
     rc_buf_optimal_sz:            5000
    [libvpx @ 0x9876540]2 pass rate control settings
     rc_2pass_vbr_bias_pct:        50
     rc_2pass_vbr_minsection_pct:  0
     rc_2pass_vbr_maxsection_pct:  400
    [libvpx @ 0x9876540]keyframing settings
     kf_mode:                      1
     kf_min_dist:                  0
     kf_max_dist:                  9999
    [libvpx @ 0x9876540]
    [libvpx @ 0x9876540]vpx_codec_enc_cfg
    [libvpx @ 0x9876540]generic settings
     g_usage:                      0
     g_threads:                    1
     g_profile:                    0
     g_w:                          1440
     g_h:                          900
     g_timebase:                   {1/1}
     g_error_resilient:            0
     g_pass:                       0
     g_lag_in_frames:              0
    [libvpx @ 0x9876540]rate control settings
     rc_dropframe_thresh:          0
     rc_resize_allowed:            0
     rc_resize_up_thresh:          60
     rc_resize_down_thresh:        30
     rc_end_usage:                 0
     rc_twopass_stats_in:          (nil)(0)
     rc_target_bitrate:            200
    [libvpx @ 0x9876540]quantizer settings
     rc_min_quantizer:             1
     rc_max_quantizer:             38
    [libvpx @ 0x9876540]bitrate tolerance
     rc_undershoot_pct:            95
     rc_overshoot_pct:             200
    [libvpx @ 0x9876540]decoder buffer model
     rc_buf_sz:                    6000
     rc_buf_initial_sz:            4000
     rc_buf_optimal_sz:            5000
    [libvpx @ 0x9876540]2 pass rate control settings
     rc_2pass_vbr_bias_pct:        50
     rc_2pass_vbr_minsection_pct:  0
     rc_2pass_vbr_maxsection_pct:  400
    [libvpx @ 0x9876540]keyframing settings
     kf_mode:                      1
     kf_min_dist:                  0
     kf_max_dist:                  12
    [libvpx @ 0x9876540]
    [libvpx @ 0x9876540]vpx_codec_control
    [libvpx @ 0x9876540]  VP8E_SET_CPUUSED:             3
    [libvpx @ 0x9876540]  VP8E_SET_NOISE_SENSITIVITY:   0
    Output #0, webm, to &#39;http://127.0.0.1:8090/feed1.ffm&#39;:
     Metadata:
       encoder         : Lavf52.64.2
       Stream #0.0, 0, 1/1000: Video: libvpx, yuv420p, 1440x900, 1/1, q=2-31, 200 kb/s, 1k tbn, 1 tbc
    Stream mapping:
     Stream #0.0 -> #0.0
    Press [q] to stop encoding
    [webm @ 0x98753b0]Writing block at offset 15, size 158658, pts 0, dts 0, duration 1000, flags 128
    [webm @ 0x98753b0]Starting new cluster at offset 158681 bytes, pts 0

    Can anyone point out what I am doing wrong here ? Why does ffmpeg die everytime it starts a new cluster ?

    Thanks