Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C/C++ Где найти документацию https://www.cyberforum.ru/ c-cpp/ thread2333603.html
Здравствуйте! Прошу помочь найти документацию. Я начинающий, пока на стадии изучения. Есть задача(учебная), необходимо реализовать сравнение 2 документов excel(*.xls, *.xlsx). Изначально хотел решить эту задачу с использованием С++. Но не найдя бесплатной хорошей библиотеки, решил использовать python(не рассматриваю VBA). Методом поиска в интернете, нашел Py32com(win32com.client). С помощью...
C/C++ Внести текст в ячейку таблицы Word
Доброго времени суток. Помогите решить следующую задачку. Имеется файл .docx с таблицей. Я его открываю, и пытаюсь внести текст в ячейку . Но что я делаю неправильно? Ибо при выполнении строки vVarTable=vVarDoc.OlePropertyGet("Tables"); возникает исключение EOLESystem Error 'Неизвестное имя' vVarApp = CreateOleObject("Word.Application"); ...
C/C++ Технология OLE: не получается добавлять/редактировать/удалять записи в таблице Access https://www.cyberforum.ru/ c-cpp/ thread2268245.html
Здравствуйте! Помоги пожалуйста,не получается работать с таблицей access,а именно добавлять записи(редактировать,удалять). C++, технология ole. Среда builder 2010 Может у кого-нибудь ксть примеры работы,может есть литература,поделитесь пожалйста.
C/C++ Работа c Word на C++ https://www.cyberforum.ru/ c-cpp/ thread2268147.html
Windows 10, Visual Studio 2012. Я хотел бы научиться работать с Word без MFC и Net. Я попробовал разобраться с управлением Word, создав пустое консольное приложение, взяв за основу проект https://www.codeproject.com/Articles/34998/MS-Office-OLE-Automation-Using-C, но при этом решил не использовать созданные в этом проекте классы и обертки для функций COM. Вроде бы идеология понятна, но возникли...
C/C++ Работа с функционалом 1С в С++ (vs15)
Всем привет. Задача состоит в том, чтобы на языке С++ вызвать методы из 1С. На данный момент меня интересует возможно ли вообще написать на С++ программу, которая бы вызывала Процедуру из Общего модуля 1С базы. При этом сама среда 1С_предприятия не запускалась?? Если да, то как (Подтолкните в нужном направлении чтоб начать разбираться в этом)?? До этого в 1С вообще не работал, поэтому...
C/C++ Как определить какой пункт выбрал пользователь из контекстного меню? https://www.cyberforum.ru/ c-cpp/ thread2260681.html
Контекстное меню создается следующим кодом: IContextMenu pContextMenu ... // Создаём меню HMENU hPopupMenu = CreatePopupMenu(); // Заполняем меню pContextMenu->QueryContextMenu(hPopupMenu, 0, 1, 0x7FFF, 0);
C/C++ Ловля кода сом порта https://www.cyberforum.ru/ c-cpp/ thread2245617.html
Здравствуйте, есть плоттер который общается со своим ПО через сом порт. Признание нужного мне кода требуется его использовать в своей программе. Только как это осуществить я не знаю, что посоветуете ??
C/C++ Ловля данных с COM порта
Всем привет! С одного прибора ловлю данные через (USB). Я пока новичок и многого вообще не понимаю. Поэтому те кто этим вопросом занимались и могут мне помочь то было бы отлично! Подключаю устройство к ноуту ставлю драйвер. Ставить драйвер виртуального com порта. В диспетчере устройств в свойствах com порта скорость потока стоит 9600 и тд. Ставлю com port toolkit. Настраиваю в соответствий...
C/C++ Ошибка "Interface not supported" и документ мимо OleContainer Добрый день, ребят! Пишу в C++ Builder 6 Win7 32. Произошла следующая история: Было простенькое приложение, позволяющее подгрузить rtf -документ в OleContainer, затем с помощью PrintDialog отправить на печать. Сам rtf -документ открывался строго внутри компонента OleContainer и печатался, все отлично. Дальше приложение лежало в папке, не менялось ни коим образом и в один прекрасный запуск... https://www.cyberforum.ru/ c-cpp/ thread2223808.html C/C++ Книги по ATL Посоветуйте сабж. Желательно на русском, но и на английском подойдет. https://www.cyberforum.ru/ c-cpp/ thread2215930.html
Почему не создаётся итерфейс C/C++
Возникла необходимость в приложение, написанное на С++ в Visual Studio 2008, ввести шифрование AES256. Зная, что это уже реализовано во framework'е .Net решил использовать это в своём приложении. Для начала решил написать небольшой прототип, чтобы научиться передавать данные между разными технологиями. Написал библиотеку на C#: интерфейс, собственно класс - всё как в примерах, скомпилировал,...
C/C++ Singleton в ATL или single-instance object Всем Привет! Кратко: ATL библиотека в Visual Studio 2017 создает Singleton решение. Мне оно НЕ НУЖНО. Что я делаю не так? Шаги (элементарный пример): 1.Файл - создать проект ATL - "ATLProject1" "тип приложения dll", "проверка в жизненном цикле...", т.е. настройки по умолчанию. 2.Далее проект-новый элемент-библиотека ATL-простой объект ATL - "ATLSimpleObject"(в Visual Studio 2015 - через... https://www.cyberforum.ru/ c-cpp/ thread2206630.html
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
0

DirectShow вывод видео в текстуру для отображения его в окне игры - C/C++ - Ответ 12985282

20.10.2018, 06:06. Показов 3108. Ответов 6
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь разобраться в коде для воспроизведения видео в текстуру с собственным Allocator-Presenter
Начитавшись всякой ерунды вроде такого http://dxdev.narod.ru/coding/A... cator.html

Я имею такой код Allocatorа, написанный вроде по канонам программирования.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
class CAllocator : public IVMRSurfaceAllocator9, IVMRImagePresenter9 {
private:
    IDirect3DSurface9* surface;
    IVMRSurfaceAllocatorNotify9 *pAllocNotify;
    ULONG RefCount;
    IDirect3DTexture9* ptex;
 
public:
    IDirect3DTexture9* tex;
 
    CAllocator() {
        RefCount = 1;
        surface = nullptr;
        pAllocNotify = nullptr;
        tex = nullptr;
        ptex = nullptr;
    }
 
    ULONG _stdcall AddRef() {
        return ++RefCount;
    }
 
    ULONG _stdcall Release() {
        if (--RefCount == 0) {
            TerminateDevice(0);
            if (pAllocNotify) {
                pAllocNotify->Release();
                pAllocNotify = nullptr;
            }
        }
        return RefCount;
    }
 
    HRESULT _stdcall QueryInterface(const IID &riid, void** ppvObject) {
        HRESULT hr = E_NOINTERFACE;
        if (ppvObject == nullptr) {
            hr = E_POINTER;
        } else if (riid == IID_IVMRSurfaceAllocator9) {
            *ppvObject = static_cast<IVMRSurfaceAllocator9*>(this);
            AddRef();
            hr = S_OK;
        } else if (riid == IID_IVMRImagePresenter9) {
            *ppvObject = static_cast<IVMRImagePresenter9*>(this);
            AddRef();
            hr = S_OK;
        } else if (riid == IID_IUnknown) {
            *ppvObject = static_cast<IUnknown*>(static_cast<IVMRSurfaceAllocator9*>(this));
            AddRef();
            hr = S_OK;
        }
        return hr;
    }
 
    HRESULT _stdcall InitializeDevice(DWORD_PTR dwUserID, VMR9AllocationInfo *lpAllocInfo, DWORD *lpNumBuffers) {
        dlog(" InitializeDevice.", DL_INIT);
        
        HRESULT hr;
        //Set the device
        //hr = pAllocNotify->SetD3DDevice(d3d9Device, d3d9->GetAdapterMonitor(0));
        //if(hr != S_OK) return hr;
 
        lpAllocInfo->dwFlags |= VMR9AllocFlag_TextureSurface;
        lpAllocInfo->Pool = D3DPOOL_DEFAULT; //D3DPOOL_SYSTEMMEM;
 
        // Ask the VMR-9 to allocate the surfaces for us.
        hr = pAllocNotify->AllocateSurfaceHelper(lpAllocInfo, lpNumBuffers, &surface);
        if (FAILED(hr)) return hr;
 
        hr = surface->GetContainer(IID_IDirect3DTexture9, (void**)&ptex);
        if (FAILED(hr)) {
            TerminateDevice(0);
            return hr;
        }
 
        if (d3d9Device->CreateTexture(lpAllocInfo->dwWidth, lpAllocInfo->dwHeight, 1, 0, lpAllocInfo->Format, D3DPOOL_DEFAULT, &tex, nullptr) != D3D_OK) {
            dlog(" Fail CreateTexture.", DL_INIT);
        }
        return S_OK;
    }
 
    HRESULT _stdcall TerminateDevice(DWORD_PTR dwID) {
        SAFERELEASE(ptex);
        SAFERELEASE(surface);
        SAFERELEASE(tex);
        return S_OK;
    }
 
    HRESULT _stdcall GetSurface(DWORD_PTR dwUserID, DWORD SurfaceIndex, DWORD SurfaceFlags, IDirect3DSurface9 **lplpSurface) {
        if (SurfaceIndex != 0) return E_FAIL;
        *lplpSurface = surface;
        surface->AddRef();
        return S_OK;
    }
 
    HRESULT _stdcall AdviseNotify(IVMRSurfaceAllocatorNotify9 *lpIVMRSurfAllocNotify) {
        if (lpIVMRSurfAllocNotify) {
            dlog(" AdviseNotify.", DL_INIT);
            pAllocNotify = lpIVMRSurfAllocNotify;
            pAllocNotify->AddRef();
 
            HMONITOR hMonitor = d3d9->GetAdapterMonitor(D3DADAPTER_DEFAULT);
            return pAllocNotify->SetD3DDevice(d3d9Device, hMonitor);
        } else {
            return E_FAIL;
        }
    }
 
    HRESULT _stdcall StartPresenting(DWORD_PTR dwUserID) {
        return S_OK;
    }
 
    HRESULT _stdcall StopPresenting(DWORD_PTR dwUserID) {
        return S_OK;
    }
 
    HRESULT _stdcall PresentImage(DWORD_PTR dwUserID, VMR9PresentationInfo *lpPresInfo) {
        d3d9Device->UpdateTexture(ptex, tex);
        return S_OK;
    }
};

И код для создания Графов
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
struct sDSTexture {
    IGraphBuilder *pGraph;
    ICaptureGraphBuilder2 *pBuild;
    IBaseFilter *pVmr;
    IVMRFilterConfig9 *pConfig;
    IVMRSurfaceAllocatorNotify9 *pAlloc;
    IMediaControl *pControl;
    CAllocator *pMyAlloc;
    IMediaSeeking *pSeek;
};
 
DWORD CreateDSGraph(wchar_t* path, IDirect3DTexture9** tex, sDSTexture* result) {
    memset(result, 0, sizeof(sDSTexture));
 
    // Create the Capture Graph Builder.
    HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, 0, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&result->pBuild);
    if (hr != S_OK) return FreeMovie(result);
 
    // Create the Filter Graph Manager.
    hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&result->pGraph);
    if (hr != S_OK) return FreeMovie(result);
 
    // Initialize the Capture Graph Builder.
    hr = result->pBuild->SetFiltergraph(result->pGraph);
    if (hr != S_OK) return FreeMovie(result);
    
    hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&result->pVmr);
    if (hr != S_OK) return FreeMovie(result);
 
    result->pMyAlloc = new CAllocator();
    
    /* 
        Supplying a Custom Allocator-Presenter for VMR-9 
        https://docs.microsoft.com/ru-ru/windows/desktop/DirectShow/supplying-a-custom-allocator-presenter-for-vmr-9
    */
    hr = result->pVmr->QueryInterface(IID_IVMRFilterConfig9, (void**)&result->pConfig);
 
    hr = result->pConfig->SetRenderingMode(VMR9Mode_Renderless);
 
    hr = result->pVmr->QueryInterface(IID_IVMRSurfaceAllocatorNotify9, (void**)&result->pAlloc);
 
    hr = result->pAlloc->AdviseSurfaceAllocator(0, (IVMRSurfaceAllocator9*)result->pMyAlloc);
 
    hr = result->pMyAlloc->AdviseNotify(result->pAlloc);
 
    /****************************************************/
 
    hr = result->pGraph->AddFilter(result->pVmr, L"VMR9");
    if (hr != S_OK) return FreeMovie(result);
 
    hr = result->pGraph->QueryInterface(IID_IMediaControl, (void**)&result->pControl);
    hr |= result->pGraph->QueryInterface(IID_IMediaSeeking, (void**)&result->pSeek);
    if (hr != S_OK) return FreeMovie(result);
    
    dlog_f(" pMyAlloc->tex: %d", DL_INIT, result->pMyAlloc->tex);
    *tex = result->pMyAlloc->tex;
 
    result->pGraph->RenderFile(path, nullptr);
    result->pControl->Run();
 
    return *(DWORD*)tex;
}

В общем моя проблема в том что не вызывается метод InitializeDevice аллокатора который должна создать мне поверхность текстуры *tex = result->pMyAlloc->tex;

Поэтому возникает вопрос мне это метод InitializeDevice вызывать нужно самому, или он должен вызываться автоматом сам, если автоматом то почему этого не происходит?
Если я сам должен вызвать InitializeDevice то откуда я должен взять инфу для аргумента VMR9AllocationInfo, тоже не понятно.

И еще почему видео проигрывается в отдельном окне?.

Добавлено через 3 часа 23 минуты
В общем нашел я похожую проблему по ссылке http://www.gamedev.ru/code/forum/?id=152413
Как оказалось у меня тоже сразу после вывова result->pGraph->RenderFile(path, nullptr)
срабатывает два раза подряд метод TerminateDevice аллокатора, значит что-то там живое.

Но вот там человек решил свою проблему, только я не понял его фразу
Разобрался. Оказалось, не надо соединять фильтры вручную, а нужно просто сначала добавить фильтр для VMR9, а только потом вызвать RenderFile
Что значит "соединять в ручную", и где в коде у меня идет ручное соединение, я что-то не могу понять???

Покумекав пару часов над кодом я думаю, что у меня проблема в другом, а не в "ручном соединении")

Вопрос остаетстя открытым почему не вызавается метод InitializeDevice и Из-за чего происходит вызов TerminateDevice... В чем ошибка...

Вернуться к обсуждению:
DirectShow вывод видео в текстуру для отображения его в окне игры C/C++
0
Лучшие ответы (1)
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2018, 06:06
Готовые ответы и решения:

DirectShow, проиграть видео в своем окне?
IGraphBuilder::RenderFile играет в отдельном окне, реально ли как то проиграть файл в своем уже...

Как улучшить качество отображения видео в DirectShow?
Подскажите, как можно улучшить качество видео при работе с DirectShow? А то мягко говоря очень...

Захват видео с экрана во время игры - (DirectShow)
Проблема в том, что все фильтры, которые я пробовал не снимают видео с экрана, когда игра открыта...

Какой элемент служит для отображения видео и как его подключить?
Пожалуйста подскажите, какой элемент служит для отображения видео и как его подключить в список...

6
20.10.2018, 06:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2018, 06:06
Помогаю со студенческими работами здесь

OpenGL ES 2.0 тормозит вывод видео в текстуру
Всем привет. Неделю борюсь над проблемой загрузки OpenCV Mat в текстуру, всё загрузается но...

DirectShow и вывод видео определённой области с вебкамеры
Задача такая: нужно выводить с вебкамеры вертикальное видео с соотношением сторон 3:4 на форму. Как...

Разработка интерфейса пользователя для отображения в окне браузера
Доброе времени суток уважаемые форумчани. Подскажите пожалуйста куда копать. Я хочу написать...

Directshow два видеофайла в одном окне
взял за основу &quot;...Samples\multimedia\directshow\players\dshowplayer&quot; этот пример, который...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru