Recherche avancée

Médias (91)

Autres articles (97)

  • MediaSPIP 0.1 Beta version

    25 avril 2011, par

    MediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
    The zip file provided here only contains the sources of MediaSPIP in its standalone version.
    To get a working installation, you must manually install all-software dependencies on the server.
    If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...)

  • ANNEXE : Les plugins utilisés spécifiquement pour la ferme

    5 mars 2010, par

    Le site central/maître de la ferme a besoin d’utiliser plusieurs plugins supplémentaires vis à vis des canaux pour son bon fonctionnement. le plugin Gestion de la mutualisation ; le plugin inscription3 pour gérer les inscriptions et les demandes de création d’instance de mutualisation dès l’inscription des utilisateurs ; le plugin verifier qui fournit une API de vérification des champs (utilisé par inscription3) ; le plugin champs extras v2 nécessité par inscription3 (...)

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

  • FFmpeg decoded video is garbled mess with no audio. How can I fix it ? [closed]

    14 septembre 2023, par Señor Tonto

    I am trying to use FFmpeg 6.0 (which seems to have a terrible lack of documentation) to decode a .mp4/.mov file & play its audio. I am testing this on a .mov file (I tried also with a .mp4, same result) of an old animation I found. This turns out as a garbled mess that looks like an old film movie with no audio. Now, I used some old tutorials & managed to with much trial get the code I have now, which is of course half-working. I am using SDL to output the video. I'm not sure if it's a problem on the SDL end or the FFmpeg end at the moment (but I'm sure the video is a mix of the two & the audio because of SDL) I would appreciate some help as there's very little documentation I can find that isn't outdated & the deprecated list on FFmpeg hardly helps when I need to fix API-related changes. Here's my code

    


    LRESULT CALLBACK WindowProcessMessages(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {&#xA;    OPENFILENAME ofn;&#xA;&#xA;    wchar_t g_filePath[MAX_PATH] = L"";&#xA;    char szFile[MAX_PATH] = "";&#xA;    wchar_t wFile[MAX_PATH] = L"";&#xA;    char data[MAX_PATH];&#xA;    DWORD bytesRead = 0;&#xA;    BOOL bSuccess = FALSE;&#xA;    static int iVscrollPos, cyClient, cyChar, cxChar, cxCaps, iMaxVerticalScroll = 0, iNumLines = 0;&#xA;    HDC hdc;&#xA;    TEXTMETRIC tm;&#xA;    static int tabIndex;&#xA;    std::wstring filePath;&#xA;&#xA;    //FFmpeg variables&#xA;    static AVFormatContext* format_ctx = nullptr; &#xA;    static AVCodecContext* video_codec_ctx = nullptr;&#xA;    static AVCodecContext* audio_codec_ctx = nullptr;&#xA;    static AVFrame* video_frame = nullptr;&#xA;    static AVFrame* audio_frame = nullptr;&#xA;    static AVPacket packet;&#xA;    static struct SwsContext* sws_ctx = nullptr;&#xA;    static int video_stream_idx = -1;&#xA;    static int audio_stream_idx = -1;&#xA;    static int video_width = 0;&#xA;    static int video_height = 0;&#xA;    static HWND hVideoWnd = nullptr;&#xA;    static HDC hVideoDC = nullptr;&#xA;    static HBITMAP hVideoBitmap = nullptr;&#xA;&#xA;    switch (msg) {&#xA;    case WM_CREATE:&#xA;        break;&#xA;    case WM_SIZE:&#xA;        break;&#xA;    case WM_NOTIFY:&#xA;        //code for handling tab switching &amp; creating all content inside the tabs, currently half-working, perhaps give each tab a show &amp; update win call?&#xA;        if (((LPNMHDR)lParam)->code == TCN_SELCHANGE) {&#xA;            tabIndex = TabCtrl_GetCurSel(g_hWndTabs);&#xA;            if (tabIndex == 0) {&#xA;                DestroyWindow(openFileBtn);&#xA;                DestroyWindow(saveFileBtn);&#xA;                DestroyWindow(emboldenBtn);&#xA;                DestroyWindow(italiciseBtn);&#xA;                DestroyWindow(hEditControl);&#xA;                DestroyWindow(hScrollContainer);&#xA;&#xA;                //this code reloads table data &amp; reconstructs the table whenever the &#x27;table view&#x27; tab is opened,&#xA;                std::wifstream infile("tabledata.txt");&#xA;                while (numRows > 0) {&#xA;                    numRows--;&#xA;                }&#xA;                while (true) {&#xA;                    // Read in data for a row&#xA;                    wchar_t buf1[MAX_PATH], buf2[MAX_PATH], buf3[MAX_PATH];&#xA;                    if (!(infile >> buf1 >> buf2 >> buf3)) {&#xA;                        // End of file reached, break out of loop&#xA;                        break;&#xA;                    }&#xA;&#xA;                    // Create new row window for this row of data&#xA;                    HWND hRow = CreateWindowEx(0, L"STATIC", nullptr,&#xA;                        WS_CHILD | WS_VISIBLE | WS_BORDER,&#xA;                        startX, startY &#x2B; numRows * ROW_HEIGHT,&#xA;                        3 * CELL_WIDTH, ROW_HEIGHT,&#xA;                        g_hWndMain, nullptr, g_hInstance, nullptr);&#xA;&#xA;                    // Create cell edit controls within the new row&#xA;                    HWND hCell1 = CreateWindowEx(0, L"EDIT", nullptr,&#xA;                        WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | WS_BORDER,&#xA;                        0, 0, CELL_WIDTH, ROW_HEIGHT,&#xA;                        hRow, nullptr, g_hInstance, nullptr);&#xA;                    HWND hCell2 = CreateWindowEx(0, L"EDIT", nullptr,&#xA;                        WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | WS_BORDER,&#xA;                        CELL_WIDTH, 0, CELL_WIDTH, ROW_HEIGHT,&#xA;                        hRow, nullptr, g_hInstance, nullptr);&#xA;                    HWND hCell3 = CreateWindowEx(0, L"EDIT", nullptr,&#xA;                        WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | WS_BORDER,&#xA;                        2 * CELL_WIDTH, 0, CELL_WIDTH, ROW_HEIGHT,&#xA;                        hRow, nullptr, g_hInstance, nullptr);&#xA;&#xA;                    // Set the text of each cell edit control&#xA;                    SetWindowTextW(hCell1, buf1);&#xA;                    SetWindowTextW(hCell2, buf2);&#xA;                    SetWindowTextW(hCell3, buf3);&#xA;&#xA;                    // Update the row window&#xA;                    InvalidateRect(hRow, nullptr, TRUE);&#xA;                    UpdateWindow(hRow);&#xA;&#xA;                    numRows&#x2B;&#x2B;;&#xA;                }&#xA;&#xA;&#xA;&#xA;                tblHeaderOne = CreateWindow(L"STATIC", L"Header 1",&#xA;                    WS_CHILD | WS_VISIBLE | SS_CENTER | WS_BORDER,&#xA;                    0, 40, 110, 20,&#xA;                    g_hWndMain, (HMENU)CELL_1_ID, g_hInstance, NULL);&#xA;                InvalidateRect(tblHeaderOne, NULL, TRUE);&#xA;                UpdateWindow(tblHeaderOne);&#xA;&#xA;&#xA;                tblHeaderTwo = CreateWindow(L"STATIC", L"Header 2",&#xA;                    WS_CHILD | WS_VISIBLE | SS_CENTER | WS_BORDER,&#xA;                    110, 40, 110, 20,&#xA;                    g_hWndMain, (HMENU)CELL_2_ID, g_hInstance, NULL);&#xA;                InvalidateRect(tblHeaderTwo, NULL, TRUE);&#xA;                UpdateWindow(tblHeaderTwo);&#xA;&#xA;                tblHeaderThree = CreateWindow(L"STATIC", L"Header 3",&#xA;                    WS_CHILD | WS_VISIBLE | SS_CENTER | WS_BORDER,&#xA;                    220, 40, 110, 20,&#xA;                    g_hWndMain, (HMENU)CELL_3_ID, g_hInstance, NULL);&#xA;                InvalidateRect(tblHeaderThree, NULL, TRUE);&#xA;                UpdateWindow(tblHeaderThree);&#xA;&#xA;                // Create button to add new row&#xA;                addRowBtn = CreateWindow(L"BUTTON", L"Add Row",&#xA;                    WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,&#xA;                    390, 40, 100, 30,&#xA;                    g_hWndMain, (HMENU)ADD_ROW_BTN, g_hInstance, NULL);&#xA;                InvalidateRect(addRowBtn, NULL, TRUE);&#xA;                UpdateWindow(addRowBtn);&#xA;&#xA;            }&#xA;            else if (tabIndex == 1) {&#xA;&#xA;                DestroyWindow(hRow);&#xA;                DestroyWindow(tableContainer);&#xA;                DestroyWindow(tblHeaderOne);&#xA;                DestroyWindow(tblHeaderTwo);&#xA;                DestroyWindow(tblHeaderThree);&#xA;                DestroyWindow(addRowBtn);&#xA;&#xA;&#xA;&#xA;                openFileBtn = CreateWindow(L"BUTTON", L"Open File",&#xA;                    WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,&#xA;                    10, 40, 150, 25,&#xA;                    g_hWndMain, (HMENU)OPEN_FILE_BTN, NULL, NULL);&#xA;                InvalidateRect(openFileBtn, NULL, TRUE);&#xA;                UpdateWindow(openFileBtn);&#xA;&#xA;                saveFileBtn = CreateWindow(L"BUTTON", L"Save File",&#xA;                    WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,&#xA;                    10, 80, 150, 25,&#xA;                    g_hWndMain, (HMENU)SAVE_FILE_BTN, nullptr, nullptr);&#xA;                InvalidateRect(saveFileBtn, NULL, TRUE);&#xA;                UpdateWindow(saveFileBtn);&#xA;&#xA;                hScrollContainer = CreateWindowEx(WS_EX_CLIENTEDGE, L"SCROLLBAR", NULL,&#xA;                    WS_CHILD | WS_VISIBLE | WS_VSCROLL | SBS_VERT,&#xA;                    170, 40, 600, 300,&#xA;                    g_hWndMain, (HMENU)SCROLL_CONTAINER, g_hInstance, NULL);&#xA;&#xA;&#xA;                hEditControl = CreateWindowEx(WS_EX_CLIENTEDGE, L"EDIT", NULL,&#xA;                    WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,&#xA;                    0, 0, 600, 300,&#xA;                    hScrollContainer, (HMENU)EDIT_CONTROL, g_hInstance, NULL);&#xA;                InvalidateRect(hEditControl, NULL, TRUE);&#xA;                UpdateWindow(hEditControl);&#xA;&#xA;                SetFocus(hEditControl);&#xA;&#xA;                SetScrollRange(hScrollContainer, SB_VERT, 0, 5, TRUE);&#xA;                SetScrollPos(hScrollContainer, SB_VERT, 0, TRUE);&#xA;&#xA;                // Add embolden button&#xA;                emboldenBtn = CreateWindow(L"BUTTON", L"Embolden",&#xA;                    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,&#xA;                    10, 120, 100, 25,&#xA;                    g_hWndMain, (HMENU)EMBOLDEN_BTN, nullptr, nullptr);&#xA;                InvalidateRect(emboldenBtn, NULL, TRUE);&#xA;                UpdateWindow(emboldenBtn);&#xA;&#xA;                // Add italicise button&#xA;                italiciseBtn = CreateWindow(L"BUTTON", L"Italicise",&#xA;                    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,&#xA;                    10, 150, 100, 25,&#xA;                    g_hWndMain, (HMENU)ITALICISE_BTN, nullptr, nullptr);&#xA;                InvalidateRect(italiciseBtn, NULL, TRUE);&#xA;                UpdateWindow(italiciseBtn);&#xA;            }&#xA;            else if (tabIndex == 2) {&#xA;                DestroyWindow(hRow);&#xA;                DestroyWindow(tableContainer);&#xA;                DestroyWindow(tblHeaderOne);&#xA;                DestroyWindow(tblHeaderTwo);&#xA;                DestroyWindow(tblHeaderThree);&#xA;                DestroyWindow(addRowBtn);&#xA;                DestroyWindow(openFileBtn);&#xA;                DestroyWindow(saveFileBtn);&#xA;                DestroyWindow(emboldenBtn);&#xA;                DestroyWindow(italiciseBtn);&#xA;                DestroyWindow(hEditControl);&#xA;                DestroyWindow(hScrollContainer);&#xA;&#xA;                // Create container for player&#xA;                hWMPContainer = CreateWindowEx(WS_EX_CLIENTEDGE, L"STATIC", nullptr,&#xA;                    WS_CHILD | WS_VISIBLE | SS_CENTER | SS_GRAYFRAME,&#xA;                    50, 50, 700, 400,&#xA;                    g_hWndMain, nullptr, g_hInstance, nullptr);&#xA;&#xA;                // Create Open .mp4/.mov button&#xA;                OpenMp4Btn = CreateWindow(L"BUTTON", L"Open .mp4/.mov",&#xA;                    WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,&#xA;                    50, 460, 150, 30,&#xA;                    g_hWndMain, (HMENU)FILEMENU_OPEN_FILE_BTN, nullptr, nullptr);&#xA;                InvalidateRect(OpenMp4Btn, nullptr, TRUE);&#xA;                UpdateWindow(OpenMp4Btn);&#xA;&#xA;&#xA;                // Create play/pause button&#xA;                hPlayBtn = CreateWindow(L"BUTTON", L"Play",&#xA;                    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,&#xA;                    350, 460, 100, 30,&#xA;                    g_hWndMain, nullptr, g_hInstance, nullptr);&#xA;                InvalidateRect(hPlayBtn, nullptr, TRUE);&#xA;                UpdateWindow(hPlayBtn);&#xA;&#xA;            }&#xA;        }&#xA;        return DefWindowProc(hwnd, msg, wParam, lParam);&#xA;        break;&#xA;    case WM_MOUSEWHEEL:&#xA;        //also WIP, will be developed after WM_VSCROLL is established&#xA;        break;&#xA;    case WM_VSCROLL:&#xA;        //to be developed 9516555&#xA;    case WM_PAINT:&#xA;        break;&#xA;    case WM_COMMAND:&#xA;        //all commands passed to the window through buttons, menus, forms, etc.&#xA;        if (HIWORD(wParam) == BN_CLICKED) {&#xA;            if ((HWND)lParam == addRowBtn) {&#xA;                const wchar_t* ROW_CLASS_NAME = L"Row Window";&#xA;                WNDCLASS rowWc{};&#xA;                rowWc.hInstance = g_hInstance;&#xA;                rowWc.lpszClassName = ROW_CLASS_NAME;&#xA;                rowWc.hCursor = LoadCursor(nullptr, IDC_ARROW);&#xA;                rowWc.hbrBackground = (HBRUSH)COLOR_WINDOW;&#xA;                rowWc.lpfnWndProc = AddRowDlgProc;&#xA;                RegisterClass(&amp;rowWc);&#xA;&#xA;                hWnd = CreateWindow(ROW_CLASS_NAME, L"Row Window",&#xA;                    WS_OVERLAPPEDWINDOW,&#xA;                    CW_USEDEFAULT, CW_USEDEFAULT,&#xA;                    250, 200,&#xA;                    nullptr, nullptr, nullptr, nullptr);&#xA;&#xA;                // Create text box controls&#xA;                hWndCell1Label = CreateWindowW(&#xA;                    L"STATIC", L"Cell 1:",&#xA;                    WS_CHILD | WS_VISIBLE | SS_LEFT,&#xA;                    10, 10, 50, 20,&#xA;                    hWnd, NULL, g_hInstance, NULL);&#xA;&#xA;&#xA;                hWndCell1Edit = CreateWindowW(&#xA;                    L"EDIT", NULL,&#xA;                    WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL,&#xA;                    65, 10, 100, 20,&#xA;                    hWnd, NULL, g_hInstance, NULL);&#xA;&#xA;&#xA;                hWndCell2Label = CreateWindowW(&#xA;                    L"STATIC", L"Cell 2:",&#xA;                    WS_CHILD | WS_VISIBLE | SS_LEFT,&#xA;                    10, 40, 50, 20,&#xA;                    hWnd, NULL, g_hInstance, NULL);&#xA;&#xA;&#xA;                hWndCell2Edit = CreateWindowW(&#xA;                    L"EDIT", NULL,&#xA;                    WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL,&#xA;                    65, 40, 100, 20,&#xA;                    hWnd, NULL, g_hInstance, NULL);&#xA;&#xA;                hWndCell3Label = CreateWindowW(&#xA;                    L"STATIC", L"Cell 3:",&#xA;                    WS_CHILD | WS_VISIBLE | SS_LEFT,&#xA;                    10, 70, 50, 20,&#xA;                    hWnd, NULL, g_hInstance, NULL);&#xA;&#xA;&#xA;                hWndCell3Edit = CreateWindowW(&#xA;                    L"EDIT", NULL,&#xA;                    WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL,&#xA;                    65, 70, 100, 20,&#xA;                    hWnd, NULL, g_hInstance, NULL);&#xA;&#xA;&#xA;                // Create OK and Cancel button controls&#xA;                hWndOkButton = CreateWindowW(&#xA;                    L"BUTTON", L"OK",&#xA;                    WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,&#xA;                    40, 110, 50, 25,&#xA;                    hWnd, (HMENU)IDOK, g_hInstance, NULL);&#xA;&#xA;&#xA;                hWndCancelButton = CreateWindowW(&#xA;                    L"BUTTON", L"Cancel",&#xA;                    WS_CHILD | WS_VISIBLE,&#xA;                    100, 110, 50, 25,&#xA;                    hWnd, (HMENU)IDCANCEL, g_hInstance, NULL);&#xA;&#xA;&#xA;                ShowWindow(hWnd, SW_SHOW);&#xA;                UpdateWindow(hWnd);&#xA;&#xA;                MSG msg{};&#xA;                while (GetMessage(&amp;msg, nullptr, 0, 0)) {&#xA;                    TranslateMessage(&amp;msg);&#xA;                    DispatchMessage(&amp;msg);&#xA;                }&#xA;&#xA;            }&#xA;            if ((HWND)lParam == openFileBtn) {&#xA;                // Open File button clicked, show open file dialoge and load the selected file into the edit control&#xA;                OPENFILENAME ofn = { };&#xA;                WCHAR szFile[MAX_PATH] = L"";&#xA;                ofn.lStructSize = sizeof(OPENFILENAME);&#xA;                ofn.hwndOwner = hWnd;&#xA;                ofn.lpstrFilter = L"Text files\0*.txt\0All files\0*.*\0";&#xA;                ofn.lpstrFile = szFile;&#xA;                ofn.nMaxFile = MAX_PATH;&#xA;                ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;&#xA;                if (GetOpenFileName(&amp;ofn)) {&#xA;                    // Read file and set text of edit box&#xA;                    std::ifstream infile(ofn.lpstrFile, std::ios::in | std::ios::binary);&#xA;                    if (infile) {&#xA;                        std::wstring text((std::istreambuf_iterator<char>(infile)), std::istreambuf_iterator<char>());&#xA;                        SetWindowText(hEditControl, text.c_str());&#xA;                        filePath = ofn.lpstrFile;&#xA;                    }&#xA;                }&#xA;            }&#xA;            if ((HWND)lParam == saveFileBtn) {&#xA;                if (!filePath.empty()) {&#xA;                    std::wofstream outfile(filePath, std::ios::out | std::ios::binary); // use std::wofstream instead of std::ofstream&#xA;                    if (outfile) {&#xA;                        int textLength = GetWindowTextLength(hEditControl);&#xA;                        if (textLength != 0) {&#xA;                            wchar_t* textBuffer = new wchar_t[textLength &#x2B; 1];&#xA;                            GetWindowTextW(hEditControl, textBuffer, textLength &#x2B; 1);&#xA;                            outfile.write(textBuffer, textLength * sizeof(wchar_t));&#xA;                            delete[] textBuffer;&#xA;                        }&#xA;                    }&#xA;                    outfile.close();&#xA;                    MessageBox(NULL, L"File saved successfully!", L"File save", MB_OK);&#xA;                }&#xA;&#xA;            }&#xA;            //The following are not currently working due to an issue in connecting to the edit box for char type manipulation&#xA;            if ((HWND)lParam == emboldenBtn) {&#xA;&#xA;            }&#xA;            if ((HWND)lParam == italiciseBtn) {&#xA;&#xA;            }&#xA;            //cannot or failed to open video file &#xA;            if ((HWND)lParam == OpenMp4Btn) {&#xA;                OPENFILENAMEA ofn = {};&#xA;                ofn.lStructSize = sizeof(ofn);&#xA;                ofn.hwndOwner = hwnd;&#xA;                ofn.lpstrFilter = "Video Files (*.mp4;*.mov)\0*.mp4;*.mov\0All Files (*.*)\0*.*\0";&#xA;                char szFile[MAX_PATH] = {};&#xA;                ofn.lpstrFile = szFile;&#xA;                ofn.nMaxFile = MAX_PATH;&#xA;                ofn.lpstrTitle = "Open Video File";&#xA;                ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;&#xA;                if (GetOpenFileNameA(&amp;ofn)) {&#xA;                    // Initialize SDL&#xA;                    SDL_Init(SDL_INIT_VIDEO);&#xA;&#xA;                    // Open the selected video file&#xA;                    AVFormatContext* format_ctx = nullptr;&#xA;                    if (avformat_open_input(&amp;format_ctx, szFile, nullptr, nullptr) != 0) {&#xA;                        // Error handling&#xA;                    }&#xA;&#xA;                    // Retrieve stream information&#xA;                    if (avformat_find_stream_info(format_ctx, nullptr) &lt; 0) {&#xA;                        // Error handling&#xA;                    }&#xA;&#xA;                    // Find the video and audio streams&#xA;                    int video_stream_idx = av_find_best_stream(format_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, nullptr, 0);&#xA;                    int audio_stream_idx = av_find_best_stream(format_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0);&#xA;&#xA;                    // Open the video and audio codecs&#xA;                    AVCodecContext* video_codec_ctx = avcodec_alloc_context3(nullptr);&#xA;                    avcodec_parameters_to_context(video_codec_ctx, format_ctx->streams[video_stream_idx]->codecpar);&#xA;                    AVCodec* video_codec = const_cast(avcodec_find_decoder(video_codec_ctx->codec_id));&#xA;                    if (avcodec_open2(video_codec_ctx, video_codec, nullptr) &lt; 0) {&#xA;                        // Error handling&#xA;                    }&#xA;&#xA;                    AVCodecContext* audio_codec_ctx = avcodec_alloc_context3(nullptr);&#xA;                    avcodec_parameters_to_context(audio_codec_ctx, format_ctx->streams[audio_stream_idx]->codecpar);&#xA;                    AVCodec* audio_codec = const_cast(avcodec_find_decoder(audio_codec_ctx->codec_id));&#xA;                    if (avcodec_open2(audio_codec_ctx, audio_codec, nullptr) &lt; 0) {&#xA;                        // Error handling&#xA;                    }&#xA;                    // Allocate memory for the video and audio frames&#xA;                    AVFrame* video_frame = av_frame_alloc();&#xA;                    AVFrame* audio_frame = av_frame_alloc();&#xA;&#xA;                    // Create a window for displaying the video frames&#xA;                    SDL_Window* window = SDL_CreateWindow("Video Player", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, video_codec_ctx->width, video_codec_ctx->height, SDL_WINDOW_SHOWN);&#xA;&#xA;                    // Create a renderer for displaying the video frames&#xA;                    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);&#xA;&#xA;                    // Create a texture for displaying the video frames&#xA;                    SDL_Texture* texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_BGR24, SDL_TEXTUREACCESS_STREAMING, video_codec_ctx->width, video_codec_ctx->height);&#xA;&#xA;                    // Create a scaling context for converting the video frames to RGB&#xA;                    SwsContext* sws_ctx = sws_getContext(video_codec_ctx->width, video_codec_ctx->height, video_codec_ctx->pix_fmt,&#xA;                        video_codec_ctx->width, video_codec_ctx->height, AV_PIX_FMT_BGR24,&#xA;                        SWS_BILINEAR, nullptr, nullptr, nullptr);&#xA;&#xA;                    // Decode and display the video frames&#xA;                    AVPacket packet;&#xA;                    while (av_read_frame(format_ctx, &amp;packet) >= 0) {&#xA;                        if (packet.stream_index == video_stream_idx) {&#xA;                            avcodec_send_packet(video_codec_ctx, &amp;packet);&#xA;                            while (avcodec_receive_frame(video_codec_ctx, video_frame) == 0) {&#xA;                                sws_scale(sws_ctx, video_frame->data, video_frame->linesize, 0, video_codec_ctx->height,&#xA;                                    video_frame->data, video_frame->linesize);&#xA;                                SDL_UpdateTexture(texture, NULL, video_frame->data[0], video_frame->linesize[0]);&#xA;                                SDL_RenderClear(renderer);&#xA;                                SDL_RenderCopy(renderer, texture, NULL, NULL);&#xA;                                SDL_RenderPresent(renderer);&#xA;                            }&#xA;                        }&#xA;                        av_packet_unref(&amp;packet);&#xA;                    }&#xA;&#xA;                    // Free the allocated memory and close the codecs&#xA;                    av_frame_free(&amp;video_frame);&#xA;                    av_frame_free(&amp;audio_frame);&#xA;                    avcodec_free_context(&amp;video_codec_ctx);&#xA;                    avcodec_free_context(&amp;audio_codec_ctx);&#xA;                    avformat_close_input(&amp;format_ctx);&#xA;&#xA;                    // Destroy the window, renderer, and texture&#xA;                    SDL_DestroyTexture(texture);&#xA;                    SDL_DestroyRenderer(renderer);&#xA;                    SDL_DestroyWindow(window);&#xA;&#xA;                    // Quit SDL&#xA;                    SDL_Quit();&#xA;                }&#xA;            }&#xA;        }&#xA;        break;&#xA;    case WM_DESTROY:&#xA;        //code that executes on window destruction&#xA;        PostQuitMessage(0);&#xA;        return 0;&#xA;    default:&#xA;        return DefWindowProc(hwnd, msg, wParam, lParam);&#xA;    }&#xA;}&#xA;</char></char>

    &#xA;

    I am doing this on MVSC2022 in a C++ win32 application if it's relevant, I will attach some images of the video : some of the videosome more of the videoA screenshot of the output screen

    &#xA;

  • How to use hardware acceleration for ffmpeg [closed]

    11 mars 2024, par Kevin Gilbert

    I am try to get hardware acceleration going on my Dell Inspiron AMD laptop. It appears that vaapi is installed but how to I use it in ffmpeg ?

    &#xA;

    For testing, all I want is to accelerate

    &#xA;

    ffmpeg -i input.ts output.mp4&#xA;

    &#xA;

    Currently, the unaccelerated command I am currently using is

    &#xA;

    ffmpeg -y -i input.ts -c:v libx264 -preset slower -tune film -filter_complex scale=1080:608 -sws_flags lanczos output.mp4&#xA;

    &#xA;

    BTW : Environment is fully up-to-date Fedora 39 with stock ffmpeg.

    &#xA;

  • avcodec/h2645_sei : signal new AVFilmGrainParams members

    18 mars 2024, par Niklas Haas
    avcodec/h2645_sei : signal new AVFilmGrainParams members
    

    H.274 specifies that film grain parameters are signalled as intended for
    4:4:4 frames, so we always signal this, regardless of the frame's actual
    subsampling.

    • [DH] libavcodec/h2645_sei.c