Recherche avancée

Médias (2)

Mot : - Tags -/plugins

Autres articles (22)

  • MediaSPIP Player : les contrôles

    26 mai 2010, par

    Les contrôles à la souris du lecteur
    En plus des actions au click sur les boutons visibles de l’interface du lecteur, il est également possible d’effectuer d’autres actions grâce à la souris : Click : en cliquant sur la vidéo ou sur le logo du son, celui ci se mettra en lecture ou en pause en fonction de son état actuel ; Molette (roulement) : en plaçant la souris sur l’espace utilisé par le média (hover), la molette de la souris n’exerce plus l’effet habituel de scroll de la page, mais diminue ou (...)

  • Ajouter notes et légendes aux images

    7 février 2011, par

    Pour pouvoir ajouter notes et légendes aux images, la première étape est d’installer le plugin "Légendes".
    Une fois le plugin activé, vous pouvez le configurer dans l’espace de configuration afin de modifier les droits de création / modification et de suppression des notes. Par défaut seuls les administrateurs du site peuvent ajouter des notes aux images.
    Modification lors de l’ajout d’un média
    Lors de l’ajout d’un média de type "image" un nouveau bouton apparait au dessus de la prévisualisation (...)

  • Support audio et vidéo HTML5

    10 avril 2011

    MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
    Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
    Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
    Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)

Sur d’autres sites (4291)

  • Loss of frame order when saving AVFrames in a threaded environment

    10 juin 2015, par Orphid

    Context : I’m using ffmpeg’s api to extract frames from video files for test purposes. I’ve had a lot of issues getting it to work, and several re-writes. This time I’ve added tests at every stage to make sure I can isolate where errors are occurring.

    Problem : I want to have a producer-consumer relationship set-up - a FrameProcessor class has a thread which pushes decoded frames into a queue, which a test client consumes. After adding this in, I suddenly found that my frames were being saved out of order, but I can’t see why this is happening because everything should be locked, and there’s only one producer and one consumer. Here is a section of code that adds frames to the queue :

    void FrameProcessor::_do_processing()
    {
       AVPacket packet;

       _is_processing = true;

       Logger::Info("Starting to buffer frames on a separate thread.");

       while(!_stop_processing_requested && !_video->finished())
       {
           boost::mutex::scoped_lock lock(_mutex);

           if(!_video->get_next_packet(&packet))
           {
               Logger::Info("The video ran out of frames, so FrameProcessor producer thread has stopped.");
               lock.unlock();
               break;
           }

           Logger::Info("FrameProcessor producer thread reads a packet from the stream (pts = " + std::to_string(packet.pts) + ").");

           int indx = packet.stream_index;

           auto decoder_it = _decoder_map.find(indx);

           if(decoder_it == _decoder_map.end())
           {
               Logger::Debug("FrameProcessor discarded a packet from stream index " + std::to_string(indx) + " because the stream was not enabled in the FrameProcessor.");
               av_free_packet(&packet);
           }

           StreamDecoder* strm_dc = decoder_it->second;

           AVFrame* frm = strm_dc->decode_packet(&packet);

           if(frm != NULL)
           {
               Logger::Debug("Producer thread pushed a frame into the FrameProcessor queue (pts = " + std::to_string(frm->pts) + ", coded num = " + std::to_string(frm->coded_picture_number) + ").");
               _frames.push(new TestFrame(frm));
               _print_queue();
           }

           av_free_packet(&packet);

           lock.unlock();

           _wait_for_buffer_space();

       }

       Logger::Info("Finished buffering. Buffer stop requested? " + std::to_string(_stop_processing_requested));

       _is_processing = false;
    }

    The dequeue section of a test before adding producer thread :

    while(v->get_next_packet(&packet))
       {
           if(packet.stream_index == vi_first)
           {
               AVFrame* f = decoder.decode_packet(&packet);

               if(f != NULL)
               {
                   TestFrame* tf = new TestFrame(f);

                   Logger::Info("|MAIN| Dequeued frame with pts " + std::to_string(tf->av_frame->pts) + " and coded num " + std::to_string(tf->av_frame->coded_picture_number) + ".");

                   int cdc_num = tf->av_frame->coded_picture_number;

                   TestFrame* tf1 = formatter.format(*tf);

                   Logger::Debug("|MAIN| Saving frame with coded id " + std::to_string(cdc_num) + " as frame" + std::to_string(i) + ".ppm");

                   save_ppm_frame(tf1->av_frame, v1_ctx->width, v1_ctx->height, "tst3", i++);

                   delete tf1;
               }
               if(i > 40)
                   break;
           }
       }

    And the dequeue section of one of my tests after adding producer thread / FrameProcessor class :

    while(!v->finished() && i < 40)
    {
       tf = processor->next_frame();

       if(tf == NULL)
           continue;

       Logger::Info("|MAIN| Dequeued frame with pts " + std::to_string(tf->av_frame->pts) + " and coded num " + std::to_string(tf->av_frame->coded_picture_number) + ".");

       //formatting the frame somehow seems to cause the coded_picture_number to be zeroed, so get it now.
       int cdc_num = tf->av_frame->coded_picture_number;

       TestFrame* tf1 = formatter->format(*tf);

       Logger::Debug("|MAIN| Saving frame with coded id " + std::to_string(cdc_num) + " as frame" + std::to_string(i) + ".ppm");

       save_ppm_frame(tf1->av_frame, width, height, "tst4", i++);

       delete tf1;
    }

    The only two threads that should be in use are the main program thread, and the producer thread. The really odd thing is that I can see from my logs that all the coded ids are coming out in the correct order, but when I check the actual ppm files, the images are clearly not (hopefully you can see the dot in these images jumping backwards and forwards, when it should be moving in a smooth curve) :

    frame26
    frame27
    frame28
    frame29

    To be clear, before adding the threading in, these frames were coming out correctly. Here’s an example of the logging information from two runs, one without threading, and one with (please be aware that coded_picture_number is not the same as display order - I’m just using the values to check that they match the successful earlier run.) I greped the logs to just show the consumer side of the logging :

    Before adding producer thread & frame queue :

    [2015-Jun-10 11:01:44.783523]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 0.
    [2015-Jun-10 11:01:44.783859]: <debug> |MAIN| Saving frame with coded id 0 as frame0.ppm
    [2015-Jun-10 11:01:44.784811]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 2.
    [2015-Jun-10 11:01:44.784982]: <debug> |MAIN| Saving frame with coded id 2 as frame1.ppm
    [2015-Jun-10 11:01:44.785910]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 3.
    [2015-Jun-10 11:01:44.786075]: <debug> |MAIN| Saving frame with coded id 3 as frame2.ppm
    [2015-Jun-10 11:01:44.786896]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 1.
    [2015-Jun-10 11:01:44.787060]: <debug> |MAIN| Saving frame with coded id 1 as frame3.ppm
    [2015-Jun-10 11:01:44.787967]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 5.
    [2015-Jun-10 11:01:44.788145]: <debug> |MAIN| Saving frame with coded id 5 as frame4.ppm
    [2015-Jun-10 11:01:44.789004]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 6.
    [2015-Jun-10 11:01:44.789173]: <debug> |MAIN| Saving frame with coded id 6 as frame5.ppm
    [2015-Jun-10 11:01:44.789946]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 4.
    [2015-Jun-10 11:01:44.790124]: <debug> |MAIN| Saving frame with coded id 4 as frame6.ppm
    [2015-Jun-10 11:01:44.790909]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 8.
    [2015-Jun-10 11:01:44.791075]: <debug> |MAIN| Saving frame with coded id 8 as frame7.ppm
    [2015-Jun-10 11:01:44.791895]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 9.
    [2015-Jun-10 11:01:44.792060]: <debug> |MAIN| Saving frame with coded id 9 as frame8.ppm
    [2015-Jun-10 11:01:44.793512]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 7.
    [2015-Jun-10 11:01:44.793704]: <debug> |MAIN| Saving frame with coded id 7 as frame9.ppm
    [2015-Jun-10 11:01:44.794566]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 11.
    [2015-Jun-10 11:01:44.794733]: <debug> |MAIN| Saving frame with coded id 11 as frame10.ppm
    [2015-Jun-10 11:01:44.795638]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 12.
    [2015-Jun-10 11:01:44.795802]: <debug> |MAIN| Saving frame with coded id 12 as frame11.ppm
    [2015-Jun-10 11:01:44.796633]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 10.
    [2015-Jun-10 11:01:44.796797]: <debug> |MAIN| Saving frame with coded id 10 as frame12.ppm
    [2015-Jun-10 11:01:44.797594]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 14.
    [2015-Jun-10 11:01:44.797759]: <debug> |MAIN| Saving frame with coded id 14 as frame13.ppm
    [2015-Jun-10 11:01:44.798524]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 15.
    [2015-Jun-10 11:01:44.798666]: <debug> |MAIN| Saving frame with coded id 15 as frame14.ppm
    [2015-Jun-10 11:01:44.799332]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 13.
    [2015-Jun-10 11:01:44.799470]: <debug> |MAIN| Saving frame with coded id 13 as frame15.ppm
    [2015-Jun-10 11:01:44.800176]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 17.
    [2015-Jun-10 11:01:44.800312]: <debug> |MAIN| Saving frame with coded id 17 as frame16.ppm
    [2015-Jun-10 11:01:44.801048]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 18.
    [2015-Jun-10 11:01:44.801186]: <debug> |MAIN| Saving frame with coded id 18 as frame17.ppm
    [2015-Jun-10 11:01:44.801842]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 16.
    [2015-Jun-10 11:01:44.801977]: <debug> |MAIN| Saving frame with coded id 16 as frame18.ppm
    [2015-Jun-10 11:01:44.802629]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 20.
    [2015-Jun-10 11:01:44.802766]: <debug> |MAIN| Saving frame with coded id 20 as frame19.ppm
    [2015-Jun-10 11:01:44.803427]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 21.
    [2015-Jun-10 11:01:44.803564]: <debug> |MAIN| Saving frame with coded id 21 as frame20.ppm
    [2015-Jun-10 11:01:44.804289]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 19.
    [2015-Jun-10 11:01:44.804429]: <debug> |MAIN| Saving frame with coded id 19 as frame21.ppm
    [2015-Jun-10 11:01:44.805131]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 23.
    [2015-Jun-10 11:01:44.805266]: <debug> |MAIN| Saving frame with coded id 23 as frame22.ppm
    [2015-Jun-10 11:01:44.805987]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 24.
    [2015-Jun-10 11:01:44.806132]: <debug> |MAIN| Saving frame with coded id 24 as frame23.ppm
    [2015-Jun-10 11:01:44.806792]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 22.
    [2015-Jun-10 11:01:44.806929]: <debug> |MAIN| Saving frame with coded id 22 as frame24.ppm
    [2015-Jun-10 11:01:44.807604]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 26.
    [2015-Jun-10 11:01:44.807742]: <debug> |MAIN| Saving frame with coded id 26 as frame25.ppm
    [2015-Jun-10 11:01:44.808411]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 27.
    [2015-Jun-10 11:01:44.808550]: <debug> |MAIN| Saving frame with coded id 27 as frame26.ppm
    [2015-Jun-10 11:01:44.809201]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 25.
    [2015-Jun-10 11:01:44.809339]: <debug> |MAIN| Saving frame with coded id 25 as frame27.ppm
    [2015-Jun-10 11:01:44.810079]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 29.
    [2015-Jun-10 11:01:44.810243]: <debug> |MAIN| Saving frame with coded id 29 as frame28.ppm
    [2015-Jun-10 11:01:44.810887]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 30.
    [2015-Jun-10 11:01:44.811001]: <debug> |MAIN| Saving frame with coded id 30 as frame29.ppm
    [2015-Jun-10 11:01:44.811672]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 28.
    [2015-Jun-10 11:01:44.811785]: <debug> |MAIN| Saving frame with coded id 28 as frame30.ppm
    [2015-Jun-10 11:01:44.812450]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 32.
    [2015-Jun-10 11:01:44.812565]: <debug> |MAIN| Saving frame with coded id 32 as frame31.ppm
    [2015-Jun-10 11:01:44.813262]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 33.
    [2015-Jun-10 11:01:44.813380]: <debug> |MAIN| Saving frame with coded id 33 as frame32.ppm
    [2015-Jun-10 11:01:44.813964]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 31.
    [2015-Jun-10 11:01:44.814076]: <debug> |MAIN| Saving frame with coded id 31 as frame33.ppm
    [2015-Jun-10 11:01:44.814664]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 35.
    [2015-Jun-10 11:01:44.814778]: <debug> |MAIN| Saving frame with coded id 35 as frame34.ppm
    [2015-Jun-10 11:01:44.815375]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 36.
    [2015-Jun-10 11:01:44.815489]: <debug> |MAIN| Saving frame with coded id 36 as frame35.ppm
    </debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info>

    After adding producer thread & frame queue :

    [2015-Jun-10 11:01:44.827119]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 0.
    [2015-Jun-10 11:01:44.827459]: <debug> |MAIN| Saving frame with coded id 0 as frame0.ppm
    [2015-Jun-10 11:01:44.829389]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 2.
    [2015-Jun-10 11:01:44.829751]: <debug> |MAIN| Saving frame with coded id 2 as frame1.ppm
    [2015-Jun-10 11:01:44.831429]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 3.
    [2015-Jun-10 11:01:44.831758]: <debug> |MAIN| Saving frame with coded id 3 as frame2.ppm
    [2015-Jun-10 11:01:44.833583]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 1.
    [2015-Jun-10 11:01:44.833906]: <debug> |MAIN| Saving frame with coded id 1 as frame3.ppm
    [2015-Jun-10 11:01:44.834585]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 5.
    [2015-Jun-10 11:01:44.834691]: <debug> |MAIN| Saving frame with coded id 5 as frame4.ppm
    [2015-Jun-10 11:01:44.835167]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 6.
    [2015-Jun-10 11:01:44.835273]: <debug> |MAIN| Saving frame with coded id 6 as frame5.ppm
    [2015-Jun-10 11:01:44.835753]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 4.
    [2015-Jun-10 11:01:44.835857]: <debug> |MAIN| Saving frame with coded id 4 as frame6.ppm
    [2015-Jun-10 11:01:44.836336]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 8.
    [2015-Jun-10 11:01:44.836440]: <debug> |MAIN| Saving frame with coded id 8 as frame7.ppm
    [2015-Jun-10 11:01:44.836897]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 9.
    [2015-Jun-10 11:01:44.837002]: <debug> |MAIN| Saving frame with coded id 9 as frame8.ppm
    [2015-Jun-10 11:01:44.837460]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 7.
    [2015-Jun-10 11:01:44.837565]: <debug> |MAIN| Saving frame with coded id 7 as frame9.ppm
    [2015-Jun-10 11:01:44.838080]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 11.
    [2015-Jun-10 11:01:44.838200]: <debug> |MAIN| Saving frame with coded id 11 as frame10.ppm
    [2015-Jun-10 11:01:44.838666]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 12.
    [2015-Jun-10 11:01:44.838772]: <debug> |MAIN| Saving frame with coded id 12 as frame11.ppm
    [2015-Jun-10 11:01:44.839322]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 10.
    [2015-Jun-10 11:01:44.839428]: <debug> |MAIN| Saving frame with coded id 10 as frame12.ppm
    [2015-Jun-10 11:01:44.839910]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 14.
    [2015-Jun-10 11:01:44.840018]: <debug> |MAIN| Saving frame with coded id 14 as frame13.ppm
    [2015-Jun-10 11:01:44.867898]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 15.
    [2015-Jun-10 11:01:44.868013]: <debug> |MAIN| Saving frame with coded id 15 as frame14.ppm
    [2015-Jun-10 11:01:44.868925]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 13.
    [2015-Jun-10 11:01:44.869039]: <debug> |MAIN| Saving frame with coded id 13 as frame15.ppm
    [2015-Jun-10 11:01:44.869938]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 17.
    [2015-Jun-10 11:01:44.870051]: <debug> |MAIN| Saving frame with coded id 17 as frame16.ppm
    [2015-Jun-10 11:01:44.871000]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 18.
    [2015-Jun-10 11:01:44.871154]: <debug> |MAIN| Saving frame with coded id 18 as frame17.ppm
    [2015-Jun-10 11:01:44.871792]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 16.
    [2015-Jun-10 11:01:44.871907]: <debug> |MAIN| Saving frame with coded id 16 as frame18.ppm
    [2015-Jun-10 11:01:44.872873]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 20.
    [2015-Jun-10 11:01:44.872993]: <debug> |MAIN| Saving frame with coded id 20 as frame19.ppm
    [2015-Jun-10 11:01:44.873606]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 21.
    [2015-Jun-10 11:01:44.873719]: <debug> |MAIN| Saving frame with coded id 21 as frame20.ppm
    [2015-Jun-10 11:01:44.874324]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 19.
    [2015-Jun-10 11:01:44.874432]: <debug> |MAIN| Saving frame with coded id 19 as frame21.ppm
    [2015-Jun-10 11:01:44.874931]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 23.
    [2015-Jun-10 11:01:44.875046]: <debug> |MAIN| Saving frame with coded id 23 as frame22.ppm
    [2015-Jun-10 11:01:44.875507]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 24.
    [2015-Jun-10 11:01:44.875620]: <debug> |MAIN| Saving frame with coded id 24 as frame23.ppm
    [2015-Jun-10 11:01:44.876087]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 22.
    [2015-Jun-10 11:01:44.876190]: <debug> |MAIN| Saving frame with coded id 22 as frame24.ppm
    [2015-Jun-10 11:01:44.876654]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 26.
    [2015-Jun-10 11:01:44.876757]: <debug> |MAIN| Saving frame with coded id 26 as frame25.ppm
    [2015-Jun-10 11:01:44.877242]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 27.
    [2015-Jun-10 11:01:44.877345]: <debug> |MAIN| Saving frame with coded id 27 as frame26.ppm
    [2015-Jun-10 11:01:44.877816]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 25.
    [2015-Jun-10 11:01:44.877919]: <debug> |MAIN| Saving frame with coded id 25 as frame27.ppm
    [2015-Jun-10 11:01:44.878453]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 29.
    [2015-Jun-10 11:01:44.878558]: <debug> |MAIN| Saving frame with coded id 29 as frame28.ppm
    [2015-Jun-10 11:01:44.879066]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 30.
    [2015-Jun-10 11:01:44.879187]: <debug> |MAIN| Saving frame with coded id 30 as frame29.ppm
    [2015-Jun-10 11:01:44.879676]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 28.
    [2015-Jun-10 11:01:44.879790]: <debug> |MAIN| Saving frame with coded id 28 as frame30.ppm
    [2015-Jun-10 11:01:44.908448]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 32.
    [2015-Jun-10 11:01:44.908569]: <debug> |MAIN| Saving frame with coded id 32 as frame31.ppm
    [2015-Jun-10 11:01:44.909642]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 33.
    [2015-Jun-10 11:01:44.909756]: <debug> |MAIN| Saving frame with coded id 33 as frame32.ppm
    [2015-Jun-10 11:01:44.910879]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 31.
    [2015-Jun-10 11:01:44.910992]: <debug> |MAIN| Saving frame with coded id 31 as frame33.ppm
    [2015-Jun-10 11:01:44.911988]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 35.
    [2015-Jun-10 11:01:44.912147]: <debug> |MAIN| Saving frame with coded id 35 as frame34.ppm
    [2015-Jun-10 11:01:44.913108]: <info> |MAIN| Dequeued frame with pts -9223372036854775808 and coded num 36.
    [2015-Jun-10 11:01:44.913222]: <debug> |MAIN| Saving frame with coded id 36 as frame35.ppm
    </debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info></debug></info>

    And, basically, I can’t see the difference between what’s being logged between the two tests - they are both saving the frames with the same coded_picture_numbers in the same order as far as I can see, but the images are different. If you select one frame from both runs (say frame28.ppm), you can see that the frames at the same index are just not the same images. I’m still very new to C++, so apologies if this is just a trivial general error.

    EDIT :

    I’ve used a work around to solve this - by removing the whole producer-consumer model and having the FrameProducer simply decode the next frame when requested. This isn’t really an answer to what’s going wrong here, but I understand that it’s difficult for members to help with something for which it’s just impractical to give sufficient code to reproduce.

  • Announcing Matomo 4 : More security, privacy and better performance

    17 novembre 2020, par Matomo Core Team — Community, Development, Privacy, Security

    The moment we’ve all been waiting for is here … Matomo Analytics 4 has launched !! We’re incredibly grateful for all community members and contributors who’ve helped with improvements, and our awesome team for all the fixes. 

    We can’t wait for you to gain greater security, privacy protection, and be able to boost your website performance. Now who’s ready ?

    Minimise your business’ web data security risk

    We’ve made Matomo even more secure to meet our users’ ever increasing security needs. Matomo 4 has certainly delivered on these expectations with a wide range of security enhancements and fixes across the platform :

    • Support for app specific API tokens. [#6559]
    • API tokens and session ids are now stored hashed in the database which means if someone can access your database they wouldn’t be able to get the actual token.
    • A more secure host validation. [#16169]
    • By default, you no longer can embed widgets through tokens with higher privileges. [#16264]
    • Plenty of other minor security fixes.

    More protection of your customer’s personal data

    Matomo 4 ensures you’re compliant with data privacy laws and provides you with more ways to keep your customer’s personal data private, such as :

    • The ability to automatically anonymise the referrer to avoid tracking personal data by accident. [#15426]
    • The option to enforce the disabling of cookies. [#16258]
    • Possibility in JavaScript tracker to turn cookies on and off at any time. [#13056]
    • The option to not store any IP address at all. [#16377]
    • Easily disable visits log and visitor profile feature if needed for privacy compliance [#16259]
    • New segment to separate visitors who gave consent vs visitors who didn’t give consent. [#16192]

    Matomo now offers PHP 8 support to users. Want to know more ? Get a detailed list of over 300 fixes and improvements in the Matomo 4 changelog.

    Increased conversion rates with a focus on page performance

    Our new Page Performance feature in Matomo 4 can help you increase conversion rates by showing you exactly how fast or slow your website is going, and WHY. An Akamai Online Retail Study in 2017 found that a 100-millisecond delay in website load time could underperform website conversion rates by up to 7%. 

    By using this new feature you can quickly identify slow pages and fix page speed issues as soon as they arise, meaning you never miss out on those valuable new sales opportunities.

    Improve your Google search rankings in 2021

    According to moz.com, Google’s bringing in a new ranking factor into their algorithm named Core Web Vitals, which will place greater emphasis on load speed (favouring websites that load faster). This means the slower your page loads, the worse it will rank in Google. With Matomo’s new feature, you’ll be able to optimise your pages to rank better according to the Core Web Vitals ranking factor. 

    Read more on how you can use this new feature : https://matomo.org/faq/how-to/how-do-i-see-page-performance-reports/

    Need help upgrading Matomo ?

    Read the Updating Matomo user guide or contact the Matomo experts

    Please note : It may take a while for you to receive a notice to update to Matomo 4.

  • avfilter/scale_vulkan : add dynamic crop region and aspect ratio match

    26 novembre 2024, par Koushik Dutta
    avfilter/scale_vulkan : add dynamic crop region and aspect ratio match
    

    The scale_vulkan filter initializes the shader once, with the crop
    region set by the original frame. However, subsequent frames may
    specify a different crop region than the first frame. This change
    updates the cropping to match the behavior present on the other
    hardware frame scale filters.

    The scale filter should also allow negative values
    that respect aspect ratio, similar to other scale filters.

    Signed-off-by : Koushik Dutta <koushd@gmail.com>

    • [DH] libavfilter/vf_scale_vulkan.c