Recherche avancée

Médias (91)

Autres articles (51)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

  • 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 (...)

Sur d’autres sites (4313)

  • Revision a4f30a5023 : Add VP9 decoder support for external frame buffers Added support for external f

    7 février 2014, par Frank Galligan

    Changed Paths :
     Modify /test/codec_factory.h


     Modify /test/decode_test_driver.h


     Add /test/external_frame_buffer_test.cc


     Modify /test/test.mk


     Modify /vp8/vp8_dx_iface.c


     Modify /vp9/common/vp9_frame_buffers.c


     Modify /vp9/vp9_dx_iface.c


     Modify /vpx/exports_dec


     Modify /vpx/internal/vpx_codec_internal.h


     Modify /vpx/src/vpx_decoder.c


     Modify /vpx/vpx_decoder.h


     Modify /vpx/vpx_frame_buffer.h


     Modify /vpx/vpx_image.h


     Modify /vpxdec.c



    Add VP9 decoder support for external frame buffers

    Added support for external frame buffers to libvpx's VP9 decoder.
    If the external frame buffer functions are set then libvpx will
    call the get function whenever it needs a new frame buffer to
    decode a frame into. And it will call the release function
    whenever there are no more references to that buffer.

    Change-Id : Id2934d005f606af6e052fb6db0d5b7c02f567522

  • swscale/swscale-test : Fix slice height in random reference data creation.

    17 août 2015, par Michael Niedermayer
    swscale/swscale-test : Fix slice height in random reference data creation.
    

    Found-by : Pedro Arthur <bygrandao@gmail.com>
    Signed-off-by : Michael Niedermayer <michael@niedermayer.cc>

    • [DH] libswscale/swscale-test.c
  • FFMPEG convert NV12 format to NV12 with the same height and width

    7 septembre 2022, par Chun Wang

    I want to use FFmpeg4.2.2 to convert the input NV12 format to output NV12 format with the same height and width. I used sws_scale conversion, but the output frame's colors are all green.

    &#xA;

    P.S. It seems no need to use swscale to get the same width,same height and same format frame,but it is neccessary in my project for dealing with other frames.

    &#xA;

    I have successfully converted the input NV12 format to output NV12 format with the different height and width, the output frame's colors were right.But I FAILED to convert NV12 to NV12 with the same height and width. It was so weird, I couldn't know why :(

    &#xA;

    I want to know what the reason is and what I should do.&#xA;The following is my code.swsCtx4 was used for converting NV12 format to output NV12 format. Others were used for other formats converted test.&#xA;Thank you for you help 

    &#xA;

    //the main code is    &#xA;    AVFrame* frame_nv12 = av_frame_alloc();&#xA;    frame_nv12->width = in_width;&#xA;    frame_nv12->height = in_height;&#xA;    frame_nv12->format = AV_PIX_FMT_NV12;&#xA;    uint8_t* frame_buffer_nv12 = (uint8_t*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_NV12, in_width, in_height , 1));&#xA;    av_image_fill_arrays(frame_nv12->data, frame_nv12->linesize, frame_buffer_nv12, AV_PIX_FMT_NV12, in_width, in_height, 1);&#xA;&#xA;&#xA;    AVFrame* frame2_nv12 = av_frame_alloc();&#xA;    frame2_nv12->width = in_width1;&#xA;    frame2_nv12->height = in_height1;&#xA;    frame2_nv12->format = AV_PIX_FMT_NV12;&#xA;&#xA;    uint8_t* frame2_buffer_nv12 = (uint8_t*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_NV12, in_width1, in_height1, 1));&#xA;    av_image_fill_arrays(frame2_nv12->data, frame2_nv12->linesize, frame2_buffer_nv12, AV_PIX_FMT_NV12, in_width1, in_height1, 1);&#xA; &#xA;    SwsContext* swsCtx4 = nullptr;&#xA;    swsCtx4 = sws_getContext(in_width, in_height, AV_PIX_FMT_NV12, in_width1, in_height1, AV_PIX_FMT_NV12,&#xA;        SWS_BILINEAR | SWS_PRINT_INFO, NULL, NULL, NULL);&#xA;    printf("swsCtx4\n");&#xA; &#xA;    ret = sws_scale(swsCtx4, frame_nv12->data, frame_nv12->linesize, 0, frame_nv12->height, frame2_nv12->data, frame2_nv12->linesize);&#xA;        if (ret &lt; 0) {&#xA;            printf("sws_4scale failed\n");&#xA;        }&#xA; &#xA;

    &#xA;

    //the complete code&#xA;extern "C" {&#xA;#include <libavcodec></libavcodec>avcodec.h>&#xA;#include <libavformat></libavformat>avformat.h>&#xA;#include <libavutil></libavutil>imgutils.h>&#xA;#include <libswscale></libswscale>swscale.h>&#xA;}&#xA;#include <seeker></seeker>loggerApi.h>&#xA;#include "seeker/common.h"&#xA;#include <iostream>&#xA;&#xA;//解决原因:pts设置为0,dts设置为0&#xA;#define FILE_SRC "testPicFilter.yuv" //源文件&#xA;#define FILE_DES "test11.yuv" //源文件&#xA;&#xA;int count = 0;&#xA;&#xA;&#xA;int main(int argc, char* argv[])&#xA;{&#xA;    av_register_all();&#xA;&#xA;    int ret = 0;&#xA;    &#xA;    //std::this_thread::sleep_for(std::chrono::milliseconds(5000));&#xA;    int count1 = 1;&#xA;    int piccount;&#xA;    int align = 1;&#xA;&#xA;&#xA;    /*打开输入yuv文件*/&#xA;    FILE* fp_in = fopen(FILE_SRC, "rb&#x2B;");&#xA;    if (fp_in == NULL)&#xA;    {&#xA;        printf("文件打开失败\n");&#xA;        return 0;&#xA;    }&#xA;    int in_width = 640;&#xA;    int in_height = 360;&#xA;    int in_width1 = 640;&#xA;    int in_height1 = 360;&#xA;    &#xA;&#xA;&#xA;    /*处理后的文件*/&#xA;    FILE* fp_out = fopen(FILE_DES, "wb&#x2B;");&#xA;    if (fp_out == NULL)&#xA;    {&#xA;        printf("文件创建失败\n");&#xA;        return 0;&#xA;    }&#xA;    char buff[50];&#xA;&#xA;    AVFrame* frame_in = av_frame_alloc();&#xA;    unsigned char* frame_buffer_in;&#xA;    frame_buffer_in = (unsigned char*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_YUV420P, in_width, in_height, 1));&#xA;    /*根据图像设置图像指针和内存对齐方式*/&#xA;    av_image_fill_arrays(frame_in->data, frame_in->linesize, frame_buffer_in, AV_PIX_FMT_YUV420P, in_width, in_height, 1);&#xA;&#xA;    frame_in->width = in_width;&#xA;    frame_in->height = in_height;&#xA;    frame_in->format = AV_PIX_FMT_YUV420P;&#xA;&#xA;&#xA;    //输入yuv转成frame_nv12&#xA;    AVFrame* frame_nv12 = av_frame_alloc();&#xA;    frame_nv12->width = in_width;&#xA;    frame_nv12->height = in_height;&#xA;    frame_nv12->format = AV_PIX_FMT_NV12;&#xA;    uint8_t* frame_buffer_nv12 = (uint8_t*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_NV12, in_width, in_height , 1));&#xA;    av_image_fill_arrays(frame_nv12->data, frame_nv12->linesize, frame_buffer_nv12, AV_PIX_FMT_NV12, in_width, in_height, 1);&#xA;&#xA;&#xA;    AVFrame* frame2_nv12 = av_frame_alloc();&#xA;    frame2_nv12->width = in_width1;&#xA;    frame2_nv12->height = in_height1;&#xA;    frame2_nv12->format = AV_PIX_FMT_NV12;&#xA;&#xA;    uint8_t* frame2_buffer_nv12 = (uint8_t*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_NV12, in_width1, in_height1, 1));&#xA;    av_image_fill_arrays(frame2_nv12->data, frame2_nv12->linesize, frame2_buffer_nv12, AV_PIX_FMT_NV12, in_width1, in_height1, 1);&#xA;&#xA;&#xA;    &#xA;    //输入rgb转成yuv&#xA;    AVFrame* frame_yuv = av_frame_alloc();&#xA;    frame_yuv->width = in_width;&#xA;    frame_yuv->height = in_height;&#xA;    frame_yuv->format = AV_PIX_FMT_YUV420P;&#xA;    uint8_t* frame_buffer_yuv = (uint8_t*)av_malloc(av_image_get_buffer_size(AV_PIX_FMT_YUV420P, in_width, in_height, 1));&#xA;    av_image_fill_arrays(frame_yuv->data, frame_yuv->linesize, frame_buffer_yuv,&#xA;        AV_PIX_FMT_YUV420P, in_width, in_height, 1);&#xA;&#xA;&#xA;&#xA;    SwsContext* swsCtx = nullptr;&#xA;    swsCtx = sws_getContext(in_width, in_height, AV_PIX_FMT_YUV420P, in_width, in_height, AV_PIX_FMT_NV12,&#xA;        SWS_BILINEAR | SWS_PRINT_INFO, NULL, NULL, NULL);&#xA;    printf("swsCtx\n");&#xA;&#xA;    SwsContext* swsCtx4 = nullptr;&#xA;    swsCtx4 = sws_getContext(in_width, in_height, AV_PIX_FMT_NV12, in_width1, in_height1, AV_PIX_FMT_NV12,&#xA;        SWS_BILINEAR | SWS_PRINT_INFO, NULL, NULL, NULL);&#xA;    printf("swsCtx4\n");&#xA;&#xA;    &#xA;    SwsContext* swsCtx2 = nullptr;&#xA;    swsCtx2 = sws_getContext(in_width1, in_height1, AV_PIX_FMT_NV12, in_width, in_height, AV_PIX_FMT_YUV420P,&#xA;        SWS_BILINEAR | SWS_PRINT_INFO, NULL, NULL, NULL);&#xA;    printf("swsCtx2\n");&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;    while (1)&#xA;    {&#xA;&#xA;&#xA;        count&#x2B;&#x2B;;&#xA;&#xA;        if (fread(frame_buffer_in, 1, in_width * in_height * 3 / 2, fp_in) != in_width * in_height * 3 / 2)&#xA;        {&#xA;            break;&#xA;        }&#xA;&#xA;        frame_in->data[0] = frame_buffer_in;&#xA;        frame_in->data[1] = frame_buffer_in &#x2B; in_width * in_height;&#xA;        frame_in->data[2] = frame_buffer_in &#x2B; in_width * in_height * 5 / 4;&#xA;&#xA;&#xA;            //转NV12格式&#xA;        int ret = sws_scale(swsCtx, frame_in->data, frame_in->linesize, 0, frame_in->height, frame_nv12->data, frame_nv12->linesize);&#xA;        if (ret &lt; 0) {&#xA;            printf("sws_scale swsCtx failed\n");&#xA;        }&#xA;&#xA;&#xA;        ret = sws_scale(swsCtx4, frame_nv12->data, frame_nv12->linesize, 0, frame_nv12->height, frame2_nv12->data, frame2_nv12->linesize);&#xA;        if (ret &lt; 0) {&#xA;            printf("sws_scale  swsCtx4 failed\n");&#xA;        }&#xA;        &#xA;&#xA;        if (ret > 0) {&#xA;        &#xA;            int ret2 = sws_scale(swsCtx2, frame2_nv12->data, frame2_nv12->linesize, 0, frame2_nv12->height, frame_yuv->data, frame_yuv->linesize);&#xA;            if (ret2 &lt; 0) {&#xA;                printf("sws_scale swsCtx2 failed\n");&#xA;            }&#xA;            I_LOG("frame_yuv:{},{}", frame_yuv->width, frame_yuv->height);&#xA;&#xA;        &#xA;            //I_LOG("frame_yuv:{}", frame_yuv->format);&#xA;&#xA;            if (frame_yuv->format == AV_PIX_FMT_YUV420P)&#xA;            {&#xA;&#xA;                for (int i = 0; i &lt; frame_yuv->height; i&#x2B;&#x2B;)&#xA;                {&#xA;                    fwrite(frame_yuv->data[0] &#x2B; frame_yuv->linesize[0] * i, 1, frame_yuv->width, fp_out);&#xA;                }&#xA;                for (int i = 0; i &lt; frame_yuv->height / 2; i&#x2B;&#x2B;)&#xA;                {&#xA;                    fwrite(frame_yuv->data[1] &#x2B; frame_yuv->linesize[1] * i, 1, frame_yuv->width / 2, fp_out);&#xA;                }&#xA;                for (int i = 0; i &lt; frame_yuv->height / 2; i&#x2B;&#x2B;)&#xA;                {&#xA;                    fwrite(frame_yuv->data[2] &#x2B; frame_yuv->linesize[2] * i, 1, frame_yuv->width / 2, fp_out);&#xA;                }&#xA;                printf("yuv to file\n");&#xA;            }&#xA;        }&#xA;&#xA;    }&#xA;&#xA;&#xA;    fclose(fp_in);&#xA;    fclose(fp_out);&#xA;    av_frame_free(&amp;frame_in);&#xA;    av_frame_free(&amp;frame_nv12);&#xA;    av_frame_free(&amp;frame_yuv);&#xA;    sws_freeContext(swsCtx);&#xA;    sws_freeContext(swsCtx2);&#xA;    sws_freeContext(swsCtx4);&#xA;&#xA;    //std::this_thread::sleep_for(std::chrono::milliseconds(8000));&#xA;&#xA;    return 0;&#xA;&#xA;}&#xA;&#xA;&#xA;&#xA;</iostream>

    &#xA;