Как я могу изменить rcTarget
в filter
?Directshow, формат смены фильтра
Source and Target Rectangles in Video Renderers
Я хочу, пример в свободном паскаль и DSpack. Мой проект должен работать с форматом видео 720x576
. Если я смогу изменить фильтр rcTarget
, например: LAVSplitter
pin VIDEO, я решил свои проблемы.
Я хочу, чтобы объяснить мою проблему:
Мой проект и разработан с DSPack и Лазаре. Мне нужно запустить плейлист в медиафайле и добавить прокрутку текста. Выходная плата DeckLink аналоговая или аналогичная. Для подключения монитора ТВ-сигнала S-Video.
Теперь я вижу на настольных компьютерах и мониторах видео, подключенных к DeckLink, только оригинальные видеоролики 720x576.
Я хочу, чтобы все видеоформаты работали. msdn site: Source and Target Rectangles in Video Renderers описывает, как изменить rcTarget в videoinfoheader. Я не знаю, как писать в pascal, используется dspack. или есть другой способ изменить размер видео? Мне нужно создать новый фильтр, или я могу изменить свойства в примере фильтра rcTarget: LAVSplitter?
мой график | SourceFile | -> 1920x1080 | Разделитель LAV | -> 720x576 | Декодер LAV | -> Тройник | -> видеоокна и рендеринг DeckLink
В Интернете много примеров для изменения размера веб-камеры захвата внешних устройств, . Я не могу найти код вывода внешнего устройства. Для этого я прошу о помощи.
У меня есть пример для MPEG-2, не работает. Где я ошибаюсь?
// var
// mt : AM_Media_Type;
// seqHdr : array [0..0] of byte; //this is right?
// pWIH : MPEG2VIDEOINFO;
ZeroMemory(@Mt, sizeof(AM_MEDIA_TYPE));
Mt.MajorType := MEDIATYPE_Video;
Mt.SubType := MEDIASUBTYPE_RGB32;
Mt.FormatType := FORMAT_MPEG2_VIDEO;
Mt.cbFormat := sizeof(MPEG2VIDEOINFO) + sizeof(seqHdr);
mt.pbFormat := CoTaskMemAlloc(mt.cbFormat);
if (mt.pbFormat = NULL) then exit; // ERROR
ZeroMemory(mt.pbFormat, mt.cbFormat);
{ RCSRC.Left := 0;
RCSRC.Top:= 0;
RCSRC.Right := 0;
RCSRC.Bottom := 0;
}
pWIH.hdr.rcSource.Left:=0;
pWIH.hdr.rcSource.Top:=0;
pWIH.hdr.rcSource.Right:=0;
pWIH.hdr.rcSource.Bottom:=0;
// pWIH.hdr.rcSource := RCSRC;
// pWIH.hdr.rcTarget := Rect(0,0,720,576);
pWIH.hdr.rcTarget.Left:=0;
pWIH.hdr.rcTarget.Top:=0;
pWIH.hdr.rcTarget.Right:=576;
pWIH.hdr.rcTarget.Bottom:=720;
pWIH.hdr.AvgTimePerFrame := 278335;
pWIH.hdr.dwPictAspectRatioX := 4;
pWIH.hdr.dwPictAspectRatioY := 3;
pWIH.hdr.bmiHeader.biSize := 40;
pWIH.hdr.bmiHeader.biWidth := 720;
pWIH.hdr.bmiHeader.biHeight := 576;
pWIH.cbSequenceHeader := sizeof(seqHdr);
CopyMemory(@pwih.dwSequenceHeader, @seqHdr, sizeof(seqhdr));
//-------------------------------------
SourceFilter.FindPin('Output',PinOutSource);
(VideoWindow1 as IBaseFilter).FindPin('Input',PIn_input);
PinOutSource.Connect(PIn_input,@mt);
К сожалению, я не могу понять, чего вы пытаетесь достичь. Вы хотите изменить размеры видеокадров после выхода из LAV Video Decoder? –
Да, я хочу изменить размер видео. Мне нужно создать тип медиа структуры (mt: AM_Media_Type;) и назначить mt в выводе. Возможно, в LAVSplitter или LAV Video Decoder или другом фильтре выше по течению от графика. Вы можете помочь построить это? возможно с этим? out_pin.ConnectionMediaType (mt) Как написать тип носителя? – carmeloconny