Форум: "Media";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
Внизувеличение размера картинки через TSampleGrabber Найти похожие ветки
← →
diman_1978 © (2006-05-23 17:40) [0]День добрый!
Вот такой вопрос,
граблю изображение с тюнера через dspack
мне в конечном итоге нужно получить набор картинок,
с эти проблем нет,
но картинки получаемые с помощью функции
SampleGrabber.GetBitmap(bmp);
имеет размер 352*288,
а хотелось бы получать больший размер
использовал кусок кода, приведенный в ответах на форуме
hr := (FilterGraph as ICaptureGraphBuilder2).FindInterface(@PIN_CATEGORY_CAPTURE, @MEDIATYPE_Video,
Filter as IBaseFilter, IID_IAMStreamConfig, pVideoStreamConfig);
if (hr <> NOERROR) Then raise Exception.Create("Unable create instance of IAMStreamConfig");
hr := pVideoStreamConfig.GetFormat(pmt);
if (hr <> NOERROR) Then
Begin
pVideoStreamConfig := Nil;
raise Exception.Create("Unable get stream video format");
End;
VIDEOINFOHEADER(pmt.pbFormat^).bmiHeader.biWidth := 768;
VIDEOINFOHEADER(pmt.pbFormat^).bmiHeader.biHeight := 576;
hr := pVideoStreamConfig.SetFormat(pmt^);
вроде бы все проходит, но размер сохраненных картинок с помощью SampleGrabber.GetBitmap(bmp); не изменяется.
Подскажите пожалуйста!
Заранее благодарен.
← →
medved_68 © (2006-05-26 09:43) [1]
> но картинки получаемые с помощью функции
> SampleGrabber.GetBitmap(bmp);
> имеет размер 352*288,
Если у тебя тюнер на Conexant Fusion 878 (аналог ВТ848) то это норма а все прочие разрешения в сопроводиловках к нему реализованы програмно. По крайней мере AverMedia неохотно но прошептало об этом Гдето на сайтах это было ну не помню я.
← →
diman_1978 © (2006-05-26 11:19) [2]Тюнер у меня Beholder 409,
то есть с него я большее разрешение не получю, так что-ли?
← →
medved_68 © (2006-05-26 14:29) [3]
> Тюнер у меня Beholder 409,
Ты меня не понял у тебя тюнер может быть хоть какой нибудь навороченный Aver все зависит от чипа отвечающего за оцифровку Это или bt848, Conexant Fusion 787 что впрочем одно и тоже или более навороченный Philips 7XXX какой не помню Насчет Philips не уверен но по моему что-то в районе 640Х480 а если это bt848 то здесь ты прав
> то есть с него я большее разрешение не получю, так что-ли?
← →
diman_1978 © (2006-05-26 16:04) [4]Тюнер у меня на Philips 7135,
значит как-бы аппаратно может выдавать большее разрешение
Вопрос как программно задать его???? :)
хотелось бы посмотреть получить кусок рабочего кода, если есть такая возможность.
← →
medved_68 © (2006-05-26 18:35) [5]
> Вопрос как программно задать его????
В DSPack есть пример кажется Filter Enumerator или рядом
Там перечисляются все возможности установленного драйвера тюнера типа в TMemo. Короче просто выбираешь нужный индекс и привет семье. Но когда я эксперементировал с разными тюнерами получилось следующее:
некоторые из Averov плевать хотели на эти настройки а вот Philips кое что получалось, но все равно обещанные 768 х на черт знает что я не получил.
Насчет кода я посмотрю гдето валяется
← →
diman_1978 © (2006-06-01 10:55) [6]Этот пример я видел, да там для тюнера Beholder 409 есть только разрешение 352*288.
Нашел я способ увеличить размер изображения,вот код:
hr := (FilterGraph as ICaptureGraphBuilder2).FindInterface(@PIN_CATEGORY_PREVIEW, @MEDIATYPE_Video,
Filter as IBaseFilter, IID_IAMStreamConfig, pVideoStreamConfig);
надо было указать @PIN_CATEGORY_PREVIEW вместо @PIN_CATEGORY_CAPTURE,
так как PIN_CATEGORY_PREVIEW используется для предпосмотра, с которого я и граблю,
а PIN_CATEGORY_CAPTURE, когда реально пишешь avi файл
if (hr <> NOERROR) Then raise Exception.Create("Unable create instance of IAMStreamConfig");
hr := pVideoStreamConfig.GetFormat(pmt);
if (hr <> NOERROR) Then
Begin
pVideoStreamConfig := Nil;
raise Exception.Create("Unable get stream video format");
End;
VIDEOINFOHEADER(pmt.pbFormat^).bmiHeader.biWidth := 640;
//иногда в примерах предлагают использовать VIDEOINFOHEADER2, у меня получилось через VIDEOINFOHEADER
VIDEOINFOHEADER(pmt.pbFormat^).bmiHeader.biHeight := 480;
вместо
hr := pVideoStreamConfig.SetFormat(pmt^);
pVideoStreamConfig:= nil;
if Assigned(pmt) then
DeleteMediaType(pmt);
// коненчо разрешение абы какое тоже не задашь, желательно стандартное.
Но возникла новая проблема при предпросмотре и выдирании картинок с разрешением большим чем 352*288 получаются размытые полукадры, если двигать камерой слежения. То есть я получаю так называемую расческу, нечетные строки имеют одни координаты, а четные уже другие.
Может кто знает как победить эту беду.
← →
medved_68 © (2006-06-02 08:45) [7]Представляешь запихал я твой код и получил то о чем ты пишешь( в смысле разрешения) все бы ничего но только одно маленькое но, у меня под рукой был AverMedia EZCapture короче такая маленькая и слабенкая плата видеозахвата."Расческа" тоже появилась при выдирании.Обратился к стандартному софту AverMedia так там есть даже 720х480 но при изменении разрешения автоматически уменьшаются размеры панели видеовывода. Попробовал уменьшить панель у себя "расческа" несколько сгладилась.Это наводит на определенные мысли(может они в корне неверны) А действительно ли карта выдает 640х480 или может быть драйвер корректирует захваченный кадр.В принципе проблема снимается просмотром даташита на Philips и Fusion, но к сожалению ни того ни другого бесплатно я не нашел. Может у тебя что то под рукой валяется????
← →
diman_1978 © (2006-06-06 11:54) [8]Описания у меня пока тоже нет, только скачал pdf-ку по микрухе Philips, если надо то пиши на мыло, скину.
У меня тоже возникает мысль, что может сам тюнер аппаратно больше не тянет. Надо найти толковую карту видеозахвата и на ней поэксперементировать.
Еще есть такие фильтры деинтерлейсинга, они вроде сглаживают эту расческу. Попробую с ними поработать.
Пробовал уменьшать и увеличивать частоту кадров, не помогло.
P.S. На форумах видел вопросы по программному переключению входов на картах видеозахвата (с TV на Compositive и т.д.), если кому надо, могу выложить код:)
← →
medved_68 © (2006-06-06 12:51) [9]
> Еще есть такие фильтры деинтерлейсинга, они вроде сглаживают
> эту расческу. Попробую с ними поработать.
Правильным курсом идете Соратник
> Описания у меня пока тоже нет, только скачал pdf-ку по микрухе
> Philips, если надо то пиши на мыло, скину.
Есть ПДФ по Philips7134 но там такая муть Короче не нашел я максимально выдаваемое разрешение А насчет хороших карт захвата не ищи их просто нет Есть Philips7135 кажется 10 битовые но это все для улучшения цветопередачи а не разрешения Просто буржуи не ставили себе такой задачи по крайней мере для массового использования. Ты идешь тем же курсом что и я 2 года назад. Я просто остановился на Аверах напряг тоже какойто фильтр из DSPack и уменьшил панель воспроизведения. А сейчас вообще думаю переписать прогу И вместо TPanel выводить на Имаже т. е. примерно то что ты сейчас делаешь. Просто возникла необходимость качать картинки по сетке.
← →
medved_68 © (2006-06-07 08:38) [10]
> P.S. На форумах видел вопросы по программному переключению
> входов на картах видеозахвата (с TV на Compositive и т.д.
> ), если кому надо, могу выложить код:)
А случаем ни где не натыкался на программное переключение входов видео???
А то есть 4Х входовая плата захвата но работает по умолчанию только один а вот как на остальные переходить???
← →
tsa (2006-06-07 08:46) [11]По логике должно быть расширение 768*288 - по ширине как кадр, по высоте половина кадра - только чётные или только не чётные строки. это "поле", их 50 штук в секунду. почему одно поле идёт как 352*288 не понятно.. если масштабировать по ширине - потеряется чёткость. Не говорят же "половина чётной строки" - строки всегда идут целиком!
Господа, не поделитесь полным кодом обращения к тв тюнеру через Dspack? частями трудно понять, может опубликуете весь код на http://www.slil.ru/
← →
diman_1978 © (2006-06-07 11:24) [12]Насчет переключения входов, расскажу что получилось у меня:
Для переключения входов на любом устройстве видеозахвата можно использовать интерфейс из DirectShow - IAMCrossbar
IAMCrossbar = interface(IUnknown)
["{C6E13380-30AC-11d0-A18C-00A0C9118956}"]
(*** IAMCrossbar methods ***)
function get_PinCounts(out OutputPinCount, InputPinCount: Longint): HResult; stdcall;
function CanRoute(OutputPinIndex, InputPinIndex: Longint): HResult; stdcall;
function Route(OutputPinIndex, InputPinIndex: Longint): HResult; stdcall;
function get_IsRoutedTo(OutputPinIndex: Longint;
out InputPinIndex: Longint): HResult; stdcall;
function get_CrossbarPinInfo(IsInputPin: BOOL; PinIndex: Longint;
out PinIndexRelated : longint; out PhysicalType: TPhysicalConnectorType): HResult; stdcall;
end;
Как видно он небольшой.
Чтобы его получить вызываем следующий код:
var
amcbTest: IAMCrossBar;
..........
begin
предположим после кода с изменением размера картинки, вставляем след код:
hR := (FilterGraph as ICaptureGraphBuilder2).FindInterface(@LOOK_UPSTREAM_ONLY, nil, Filter as IBaseFilter, IID_IAMCrossbar, amcbTest);
можно и без hr :)
....
end;
Получили ссылку на интерфейс.
Далее надо переключиться.
для этого используем метод
function Route(OutputPinIndex, InputPinIndex: Longint): HResult; stdcall;
где указываем номера входного и выходного входов, с которых мы хотим получать изображение, и куда выводить.
но остается вопрос, как узнать эти номера:
я сделал все банально:
var
CountOutput, countinput: Integer;
i, j: Integer;
begin
if Succeeded(Filter.QueryInterface(IAMCrossBar, amcbTest)) then
amcbTest.get_PinCounts(CountOutput, countinput);
for i := 0 to CountOutput - 1 do
for j := 0 to countinput - 1 do
begin
amcbTest.Route(i, j);
Sleep(1000);
end;
end;
и мило наблюдал, что уменя появиться на панели пердварительно отображения.
оказалось что при значениях
amcbTest.Route(0, 1);
у меня становится активным композитивный вход.
думаю что переключением входов видео должно быть тоже самое, интерфейс IAMCrossbar универсальный и ему по барабану что переключать.
← →
diman_1978 © (2006-06-07 11:37) [13]Насчет исходников:)
http://slil.ru/22816940
там куча заремированного, но думаю разобраться можно,
код некрасивый, так как эксперементальный:)
будут вопросы, пишите в форум или на мыло.
← →
diman_1978 © (2006-06-07 11:40) [14]Авось поможет братьям по несчастью :)
Но DSpack должен стоять на компе, если нет
то его можно скачать из родного сайта разработчиков DSPack
http://progdigy.com/
там же есть и неплохие англоязычные форумы.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.044 c