Recherche avancée

Médias (0)

Mot : - Tags -/content

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (17)

  • HTML5 audio and video support

    13 avril 2011, par

    MediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
    The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
    For older browsers the Flowplayer flash fallback is used.
    MediaSPIP allows for media playback on major mobile platforms with the above (...)

  • 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

  • Gestion de la ferme

    2 mars 2010, par

    La ferme est gérée dans son ensemble par des "super admins".
    Certains réglages peuvent être fais afin de réguler les besoins des différents canaux.
    Dans un premier temps il utilise le plugin "Gestion de mutualisation"

Sur d’autres sites (4079)

  • Revert "avcodec/hevc : calculate checksum only if AV_EF_EXPLODE is set"

    4 décembre 2013, par Michael Niedermayer
    Revert "avcodec/hevc : calculate checksum only if AV_EF_EXPLODE is set"
    

    This reverts commit 758b6d39f685a510f48ff9e4c05fffa859d23c42.

    Requested-by : smarter
    "now that http://git.videolan.org/?p=ffmpeg.git;a=commit;h=97de206b44a48da726807cc3e7b9448a8112760b
    has been merged, http://git.videolan.org/?p=ffmpeg.git;a=commit;h=758b6d39f685a510f48ff9e4c05fffa859d23c42
    could be reverted, this would reduce the delta with libav
    (and it makes sense)"

    • [DH] libavcodec/hevc.c
  • V2.97a.20120513 - Fixes for Android 2.3 playback, onPosition() in HTML5, Flash 9 double-play edge case. Minor new Flash 9-specific features.

    14 mai 2012, par Scott Schiller

    m script/soundmanager2-jsmin.js m script/soundmanager2-nodebug-jsmin.js m script/soundmanager2-nodebug.js m script/soundmanager2.js m src/SoundManager2.as m src/SoundManager2_AS3.as m swf/soundmanager2.swf m swf/soundmanager2_debug.swf m swf/soundmanager2_flash9.swf m (...)

  • How do you properly free a BitStreamFilter (bsf) without getting a double free error ?

    19 janvier 2021, par Alexis Wilke

    I'm trying to write a C++ class handling MP4 movies via ffmpeg.

    


    First I created a couple of functions to use with std::unique<>() so that way things get released even on exceptions.

    


    However, I get a double free when I try to free the BitStreamFilter object, yet the documentation clearly says that each av_bsf_alloc() must be paired with an av_bsf_free() call.

    


    


    @param ctx a pointer into which the pointer to the newly-allocated context
will be written. It must be freed with av_bsf_free() after the
filtering is done.

    


    


    Note : emphasis mine.

    


    However, at the time I call the avformat_close_input() I get a double free error, even if I haven't used the two contexts for anything !? I'm thinking that there may be a packet that both allocate and both try to free. But since these two contexts are not directly connected, I really don't understand how they end up freeing something twice.

    


    Below is code which reproduce the error (at least on an amd64 platform). Once compiled, you can just execute it. Make sure to specify a filename as in :

    


    ./ffmpeg_demuxer_test mymovie.mp4


    


    I used the following command to compile & link the code :

    


    $ /usr/bin/c++ -std=c++17 -DDEBUG -D_DEBUG -D_GLIBCXX_ASSERTIONS -g -O0 \
    -fsanitize=address -fsanitize=enum -fsanitize=unreachable \
    -o ffmpeg_demuxer_test ffmpeg_demuxer_test.cpp \
    -lavformat -lavcodec


    


    Notice the -fsanitize=... options to capture errors such as a double free error.

    


    Here is the code :

    


    extern "C" {&#xA;#include    <libavformat></libavformat>avformat.h>&#xA;#include    <libavformat></libavformat>avio.h>&#xA;#include    <libavcodec></libavcodec>avcodec.h>&#xA;}&#xA;#include    <iostream>&#xA;#include    <memory>&#xA;&#xA;&#xA;void ffmpeg_demuxer_avformat_context_free(AVFormatContext * context)&#xA;{&#xA;    if(context != nullptr) avformat_close_input(&amp;context);&#xA;}&#xA;&#xA;void ffmpeg_demuxer_av_bsf_free(AVBSFContext * context)&#xA;{&#xA;    if(context != nullptr) av_bsf_free(&amp;context);&#xA;}&#xA;&#xA;&#xA;int main(int argc, char * argv [])&#xA;{&#xA;    if(argc != 2)&#xA;    {&#xA;        std::cout &lt;&lt; "Usage: " &lt;&lt; argv[0] &lt;&lt; " movie.mp4" &lt;&lt; std::endl;&#xA;        exit(1);&#xA;    }&#xA;&#xA;    // init the AV libraries&#xA;    //&#xA;    av_register_all();&#xA;    avformat_network_init();&#xA;&#xA;    // allocate the AVFormatContext&#xA;    //&#xA;    AVFormatContext * format_context(nullptr);&#xA;    int const r1(avformat_open_input(&#xA;                  &amp;format_context&#xA;                , argv[1]&#xA;                , nullptr           // input format&#xA;                , nullptr));        // options&#xA;    if(r1 != 0&#xA;    || format_context == nullptr)&#xA;    {&#xA;        throw std::bad_alloc();&#xA;    }&#xA;&#xA;    auto f_format_context = std::unique_ptr&lt;&#xA;              AVFormatContext&#xA;            , decltype(&amp;ffmpeg_demuxer_avformat_context_free)>(&#xA;                      format_context&#xA;                    , &amp;ffmpeg_demuxer_avformat_context_free);&#xA;&#xA;&#xA;    // now allocate a stream&#xA;    //&#xA;    if(avformat_find_stream_info(f_format_context.get(), nullptr) &lt; 0)&#xA;    {&#xA;        throw std::runtime_error("ffmpeg: Could not find stream info");&#xA;    }&#xA;&#xA;    auto f_video_stream_index = av_find_best_stream(&#xA;              f_format_context.get()&#xA;            , AVMEDIA_TYPE_VIDEO&#xA;            , -1            // wanted stream (any)&#xA;            , -1            // related stream (none)&#xA;            , nullptr       // AVCodec *&#xA;            , 0);           // flags&#xA;    if(f_video_stream_index &lt; 0)&#xA;    {&#xA;        throw std::runtime_error("ffmpeg: Could not find stream in input file");&#xA;    }&#xA;    if(static_cast<unsigned int="int">(f_video_stream_index) >= f_format_context->nb_streams)&#xA;    {&#xA;        throw std::range_error("ffmpeg: Stream index out of range");&#xA;    }&#xA;&#xA;    auto f_stream = f_format_context->streams[f_video_stream_index];&#xA;&#xA;    auto f_video_codec = f_stream->codecpar->codec_id;&#xA;&#xA;    int f_bit_depth(0);&#xA;    switch(f_stream->codecpar->format)&#xA;    {&#xA;    case AV_PIX_FMT_YUV420P10LE:&#xA;        f_bit_depth = 10;&#xA;        break;&#xA;&#xA;    case AV_PIX_FMT_YUV420P12LE:&#xA;        f_bit_depth = 12;&#xA;        break;&#xA;&#xA;    default:&#xA;        f_bit_depth = 8;&#xA;        break;&#xA;&#xA;    }&#xA;&#xA;    bool f_mp4_h264 = f_video_codec == AV_CODEC_ID_H264 &amp;&amp; (&#xA;               strcmp(f_format_context->iformat->long_name, "QuickTime / MOV") == 0&#xA;            || strcmp(f_format_context->iformat->long_name, "FLV (Flash Video)") == 0&#xA;            || strcmp(f_format_context->iformat->long_name, "Matroska / WebM") == 0&#xA;        );&#xA;&#xA;    if(f_mp4_h264)&#xA;    {&#xA;        AVBitStreamFilter const * bsf_stream_filter(av_bsf_get_by_name("h264_mp4toannexb"));&#xA;        if(bsf_stream_filter == nullptr)&#xA;        {&#xA;            throw std::runtime_error("av_bsf_get_by_name(\"h264_mp4toannexb\") failed");&#xA;        }&#xA;        AVBSFContext * bsf_context(nullptr);&#xA;        int const r2(av_bsf_alloc(bsf_stream_filter, &amp;bsf_context));&#xA;        if(r2 &lt; 0&#xA;        || bsf_context == nullptr)&#xA;        {&#xA;            throw std::bad_alloc();&#xA;        }&#xA;        auto f_bsf_context = std::unique_ptr&lt;&#xA;                  AVBSFContext&#xA;                , decltype(&amp;ffmpeg_demuxer_av_bsf_free)>(&#xA;                          bsf_context&#xA;                        , &amp;ffmpeg_demuxer_av_bsf_free);&#xA;        f_bsf_context->par_in = f_stream->codecpar;&#xA;        if(av_bsf_init(f_bsf_context.get()) &lt; 0)&#xA;        {&#xA;            throw std::runtime_error("av_bsf_init() failed");&#xA;        }&#xA;    }&#xA;&#xA;    return 0;&#xA;}&#xA;</unsigned></memory></iostream>

    &#xA;

    So. Am I misreading the documentation or misusing one of the free/close function ? I don't think that the AVBSFContext itself gets released when I close the AVFormatContext, but I may be mistaken ?

    &#xA;

    I won't put "C" as a tag since it will get removed even though this applies to C. It's not because I use C++ that I get a double free (i.e. it happens in the ffmpeg C library).

    &#xA;