Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2010, 08:23   #1
i-cpp
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 33
По умолчанию DirectShow. Как проиграть видио из памяти?

Подскажите как проигрывать видео из памяти, а не из файла?
И, походу, ещё один вопрос функции get_Width() и get_Height() возвращают размеры с учётом border'а, хотя у меня и в помине ни какого бордера нет. Из-за чего это может быть и как с этим бороться?

Ниже мой код проигрывания из файла:
Код:
CPlayer::CPlayer( const char *filename )
: Stoped( false )
, pGraph( NULL )
, pControl( NULL )
, pVideoWindow( NULL )
, pEvent( NULL )
{
    if ( SUCCEEDED( CoInitialize(NULL) ) )
    {
		if ( SUCCEEDED( CoCreateInstance( CLSID_FilterGraph, NULL, 
			CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph ) ) )
		{ 
			if ( ( SUCCEEDED( pGraph->RenderFile(char_to_wchar_t( filename ), NULL) ) )
			  && ( SUCCEEDED( pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl) ) )
			  && ( SUCCEEDED( pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVideoWindow) ) )
			  && ( SUCCEEDED( pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent) ) ) )
			{
				pVideoWindow->put_Owner( (OAHWND)g_hWndMain );
				pVideoWindow->put_WindowStyle( WS_CHILD | WS_CLIPSIBLINGS  );
				pVideoWindow->get_Width( (LONG*)&FrameWidth );
				pVideoWindow->get_Height( (LONG*)&FrameHeight );
				pVideoWindow->SetWindowPosition( ( g_Width - FrameWidth ) / 2, 
					( g_Height - FrameHeight ) / 2, FrameWidth, FrameHeight );
				pVideoWindow->HideCursor( OATRUE );
			}
			else
			{
				Release();
			}
		}
		else
		{
			CoUninitialize();
		}
    }
}

CPlayer::~CPlayer()
{
	Release();
}

void CPlayer::Release()
{
	if ( pControl )
	{
		pControl->Release();
		pControl = NULL;
	}
	if ( pGraph )
	{
		pGraph->Release();
		pGraph = NULL;
	}
	if ( pVideoWindow )
	{
		pVideoWindow->Release();
		pVideoWindow = NULL;
	}
	if ( pEvent )
	{
		pEvent->Release();
		pEvent = NULL;
	}
    CoUninitialize();
}

void CPlayer::Stop()
{
	Stoped = true;
}

int CPlayer::Play()
{
	if ( Stoped )
	{
		Release();
		return 0;
	}
	
	if ( pControl )
	{
		if ( SUCCEEDED( pControl->Run() ) )
		{
			LONG EvCode;
			pEvent->WaitForCompletion( 1, &EvCode );
			if( EvCode == EC_COMPLETE ) Stoped = true;
		}
		else
		{
			Stoped = true;
		}
	}
	return 1;
}
i-cpp вне форума Ответить с цитированием
Старый 28.09.2010, 16:40   #2
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Это как-то относится к играм?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 28.09.2010, 17:01   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Beermonza, я думаю это как ролик в игре, поэтому ТС создал тут тему.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.09.2010, 19:16   #4
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от i-cpp Посмотреть сообщение
Подскажите как проигрывать видео из памяти, а не из файла?
Навскидку, ...нужно загрузить видео из файла в поток и проигрывать из потока. Когда он перестанет быть нужным - освободить, ...как в коде не подскажу к сожалению.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 28.09.2010, 22:17   #5
i-cpp
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 33
По умолчанию

Beermonza, да для игры. Нужна запускать ролики-перебивки и интро.
Файл уже загружен и находится в переменной типа LPBYTE. Осталось разобраться как связать его с dshow. Собственно в этом вопрос.
i-cpp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертер видио, формат WMV3 Alter Свободное общение 2 16.06.2009 17:29
Как заставить программу проиграть файл мп3 Anfall Мультимедиа в Delphi 3 04.03.2009 07:48
Как проиграть несколько звуковой файлов wav? Volkogriz Мультимедиа в Delphi 1 25.11.2008 10:12
Проиграть ноту до apromix Помощь студентам 2 10.11.2008 23:28
Проиграть wav Altera Мультимедиа в Delphi 4 31.05.2008 10:34