Recherche avancée

Médias (1)

Mot : - Tags -/Rennes

Autres articles (97)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Gestion des droits de création et d’édition des objets

    8 février 2011, par

    Par défaut, beaucoup de fonctionnalités sont limitées aux administrateurs mais restent configurables indépendamment pour modifier leur statut minimal d’utilisation notamment : la rédaction de contenus sur le site modifiables dans la gestion des templates de formulaires ; l’ajout de notes aux articles ; l’ajout de légendes et d’annotations sur les images ;

  • Organiser par catégorie

    17 mai 2013, par

    Dans MédiaSPIP, une rubrique a 2 noms : catégorie et rubrique.
    Les différents documents stockés dans MédiaSPIP peuvent être rangés dans différentes catégories. On peut créer une catégorie en cliquant sur "publier une catégorie" dans le menu publier en haut à droite ( après authentification ). Une catégorie peut être rangée dans une autre catégorie aussi ce qui fait qu’on peut construire une arborescence de catégories.
    Lors de la publication prochaine d’un document, la nouvelle catégorie créée sera proposée (...)

Sur d’autres sites (15605)

  • single threaded audio video libavcodec

    2 septembre 2020, par Rafael Moura

    Im trying to create the simplest single threaded program that plays video and audio with libav, it plays video and audio but cant sync both to the same time.

    


    the full project : https://github.com/dhustkoder/codecs_study

    


    pl_ functions are just a platform layer, using SDL2 at the moment.

    


    Here's the main loop

    


        while (!pl_close_request()) {

        if (av_read_frame(av_fmt_ctx, av_packet) >= 0) {
            
            AVCodecContext* cctx;
            double time_base;

            if (av_packet->stream_index == audio_stream->index) {
                cctx = audio_codec_ctx;
                time_base = atime_base;
            } else if (av_packet->stream_index == video_stream->index) {
                cctx = video_codec_ctx;
                time_base = vtime_base;
            } else {
                goto Lunref_packet;
            }

            err = avcodec_send_packet(cctx, av_packet);
            assert(err == 0);
            
            err = avcodec_receive_frame(cctx, av_frame);
            if (err != 0)
                goto Lunref_packet;

            const double pts_ticks = (av_frame->pts * time_base);
            const double current_ticks = ((double)pl_get_ticks() - (double)start_ticks) / PL_TICKS_PER_SEC;
            log_info("%s FRAME INFO: ", cctx == video_codec_ctx ? "VIDEO" : "AUDIO");
            log_info("pts: %" PRId64, av_frame->pts);
            log_info("frame pts * timebase: %.6lf", pts_ticks);
            log_info("current_ticks: %.6lf", current_ticks);

            if (cctx == audio_codec_ctx) {
                log_info("nb_samples: %d", av_frame->nb_samples);
                log_info("linesize: %d", av_frame->linesize[0]);

                if (current_ticks < pts_ticks) {
                    pl_sleep((pts_ticks - current_ticks) * PL_TICKS_PER_SEC);
                }

                assert(av_frame->channels < AV_NUM_DATA_POINTERS);
                for (int i = 0; i < av_frame->nb_samples; ++i) {
                    for (int c = 0; c < av_frame->channels; ++c) {
                        float* data = (float*)av_frame->data[c];
                        channels_buffer[(i*av_frame->channels) + c] = data[i];
                    }
                }

                pl_audio_render_ex(channels_buffer, av_frame->nb_samples * av_frame->channels * 4);

            } else {

                if (current_ticks < pts_ticks) {
                    pl_sleep((pts_ticks - current_ticks) * PL_TICKS_PER_SEC);
                }

                pl_video_render_yuv(
                    av_frame->data[0], av_frame->data[1], av_frame->data[2],
                    av_frame->linesize[0], av_frame->linesize[1], av_frame->linesize[2]
                );

            }

            Lunref_frame:
            av_frame_unref(av_frame);
            Lunref_packet:
            av_packet_unref(av_packet);
        }


    


  • Revision 88566 : Le fichier vides.txt peut etre tres gros et est un peu lourd a manipuler. ...

    11 avril 2015, par cedric@… — Log

    Le fichier vides.txt peut etre tres gros et est un peu lourd a manipuler. On le remplace par un fichier unitaire .vide sur chaque gravatar concerne, ce qui permet un touch unitaire avant une recuperation pour eviter une double recuperation concurrente (idem sur le cache, on touch avant de recuperer pour eviter une double recuperation)

  • Revision 88566 : Le fichier vides.txt peut etre tres gros et est un peu lourd a manipuler. ...

    11 avril 2015, par cedric@… — Log

    Le fichier vides.txt peut etre tres gros et est un peu lourd a manipuler. On le remplace par un fichier unitaire .vide sur chaque gravatar concerne, ce qui permet un touch unitaire avant une recuperation pour eviter une double recuperation concurrente (idem sur le cache, on touch avant de recuperer pour eviter une double recuperation)