标签: directshow

如何在C#中获取指向IUnknown的指针

.NET interop将COM对象包装到.NET对象(运行时可调用包装器,RCW)中,这些对象隐藏了通常的接口查询.为了使用运行对象表注册表示过滤器图的COM对象,我需要其IUnknown接口的(本机)地址(请参阅如何对DirectShow图进行反向工程?).

所以问题是:如何在C#中获取COM对象的IUnknown指针?

c# com interop directshow

8
推荐指数
1
解决办法
4426
查看次数

如何在C++中将yuy2转换为BITMAP

我正在使用安全摄像头DLL从相机中检索图像.DLL调用我的程序的函数传递图像缓冲区作为参数,但图像是yuy2格式.我需要将此缓冲区转换为RGB,但我尝试了在Internet上找到的每个公式都没有成功.我尝试的每个例子(包括http://msdn.microsoft.com/en-us/library/aa904813(VS.80).aspx#yuvformats_2)都给我错误的颜色.

我只能使用像素的Y分量将缓冲区转换为BW图像,但我真的需要彩色图片.我调试(仅汇编)在屏幕上显示图像的DLL,它使用DirectDraw来执行此操作.

c++ camera directshow bitmap

7
推荐指数
1
解决办法
9040
查看次数

使用DirectShow捕获帧和OpenCV进行处理

我已经为视频到图像捕获制作了两种不同的解决方案,并且想知道我是否可以将这两个世界中的优点交织在一起.我目前正在使用DirectShow加载AVI文件并捕获图像.然而,DirectShow缺乏图像处理能力以及制作额外过滤器的需求已经让我陷入了困境.

然后我转向OpenCV.

它具有我需要的所有图像处理功能,但在DirectShow解决方案能够检索的视频中加载时遇到问题.是否有关于此过程或其他任何内容的在线教程?谢谢你的建议.

c++ opencv directshow image-processing video-streaming

7
推荐指数
1
解决办法
4630
查看次数

Mac OS X相当于DirectShow,GraphEdit

Mac OS X新手,熟悉Windows.Windows具有DirectShow,大量内置过滤器,COM编程和GraphEdit,可以在您使用代码构建的图形上进行快速原型设计和窥探.

我现在要去Mac使用相机,网络摄像头,麦克风,色彩空间,文件,分割,同步,渲染,文件读取,文件保存以及我认为DirecShow认为理所当然的许多事情在整理现场表演的应用程序时.在Mac方面,到目前为止我发现......什么都没有!要么我不知道在哪里看,要么我有最艰难的时间来平衡Mac的声誉,因为它易于处理媒体,具有连贯的编程能力,可以进入并开始使用媒体操作构建模块.

我已经看到一些弱的建议,使用gstreamer或一些库来进行QT,但我不能让自己相信这是Apple的方式.我遇到过一些QuickTime文档,但我不打算做转换,精灵,广播......

让大脑接受DirectShow培训意味着我甚至不知道Apple如何考虑提供类似DirectShow的功能.这意味着我不知道正确的关键字,甚至不知道在哪里看.图书?买了几个.现在我可以编写一些可以编辑你妹妹的婚礼视频的代码(如果我不能在这个主题上取得相当好的进展,我可能接下来会问你有什么值得的),但是要确定哪些过滤器是可用的以及如何将它们串在一起......没有.建议?

macos directshow quicktime objective-c graphedit

7
推荐指数
1
解决办法
3638
查看次数

在Windows Vista/7中从C#访问网络摄像头的"首选"方法

我发现有很多帖子讨论WIA,Windows Portable Devices API和DirectShow(以及提供示例代码)以便从C#访问网络摄像头,但是当您研究每种方法时,您似乎遇到了这些"旧"方法的参考.

因此,问题是,当比Windows Vista更早运行时,从C#访问网络摄像头的"首选"方法是什么?

谢谢,

约翰.

c# api webcam wia directshow

7
推荐指数
1
解决办法
2945
查看次数

DirectShow - 获取视频帧

我正在创建一个Windows视频捕获应用程序,并使用DirectShow进行捕获.当每个帧进来时,我想将它作为原始RGB位图抓取到缓冲区中,此时我的代码将执行我需要的任何处理.

我一直在寻找类似于我想做的样本,在网上看到的每个地方,人们都建议使用IMediaDet和/或ISampleGrabber接口进行逐帧捕获.不幸的是,两者都被弃用,甚至不在最新版本的Windows SDK中.

在DirectShow中进行逐帧捕获的最佳(现代)方法是什么?如果没有,是否有一个不同的库我应该使用它会给我逐帧捕获?

c++ windows directshow video-capture bitmap

7
推荐指数
1
解决办法
7668
查看次数

YUV - > RGB转换可以硬件加速吗?

我们有一个应用程序可以读取GigE YUV视频流并将其显示在屏幕上.通过分析,我们了解到,将每个帧从YUV(UYVY)转换为RGB24的功能至少比我们的相机到屏幕管道的任何其他部分都要多一个数量级的时间和CPU.

我们使用的转换功能由GigE软件供应商(Pleora)提供,并且比我们自己的' 天真 '(非优化)实现略快.我们在其余的管道中使用DirectShow."任务管理器基准测试"显示我们的1080p 30fps流,当我们跳过转换时(当然会出现乱码图像)的CPU使用率为4-5%,当我们调用转换功能时,CPU使用率为15-19%.

我们的问题是:

  1. 是否有DirectShow过滤器可以为我们进行此转换,希望以更高效的方式,而不是依赖第三方SDK或我们自己的(基于CPU,串行)转换功能?
  2. 这个转换必须在CPU上完成,还是能以某种方式卸载到GPU进行并行处理?

谢谢!埃里克.

c++ rgb directshow gpu yuv

7
推荐指数
1
解决办法
2624
查看次数

使用openCV阅读视频

我有一个视频engine2.avi,我想用openCV阅读和展示.这是我的代码:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;

int main(int argc, char** argv)
{
    string filename = "D:\\BMDvideos\\engine2.avi";
    VideoCapture capture(filename);
    Mat frame;

    if( !capture.isOpened() )
        throw "Error when reading steam_avi";

    namedWindow("w", 1);
    for( ; ; )
    {
        capture >> frame;
        //if(!frame)
        //    break;
        imshow("w", frame);
        waitKey(20); // waits to display frame
    }
    waitKey(0);
}
Run Code Online (Sandbox Code Playgroud)

如果我的文件有编解码器YUV 4:2:2 (UYVY)(我使用Direct-Show录制视频),此代码不起作用,但是当我使用视频时,我可以使用openCV!

有谁知道这是如何工作的?

更新:

在阅读了一些链接后,建议捕获异常将解决问题,我修改了我的代码.它没有帮助,但这里是修改后的代码:

cv::VideoCapture cap("d:\\BMDvideos\\engine2.avi");
cv::Mat frame;

try
{
    cap >> frame;
}
catch(cv::Exception ex)
{
    std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ opencv directshow video-processing video-streaming

7
推荐指数
1
解决办法
5万
查看次数

如何在Delphi中连续运行视频文件?

我正在使用Delphi 5.

我想知道使用'TFilterGraph'完成avi文件播放的时间.我想自动一个接一个地运行多个avi文件.所以我下载了DSPack并使用了'TFilterGraph'和'TVideoWindow'组件.avi文件视频正常显示.我如何知道avi视频或任何视频已完成播放,以便我可以选择下一个avi或任何其他视频文件播放?

procedure TForm1.Button2Click(Sender: TObject);
begin
  videowindow1.FilterGraph:=filtergraph1; //query interfaces to video window
  filtergraph1.Active:=true;
  filtergraph1.RenderFile('I:\Project Part 1\Clips\More Clips\D.avi');
  filtergraph1.Play;
end;
Run Code Online (Sandbox Code Playgroud)

delphi directshow delphi-5 dspack

7
推荐指数
1
解决办法
2993
查看次数

DirectShow,Media Foundation,DXVA,什么?

我的任务是修改一个使用DirectShow进行视频渲染的应用程序.旧的应用程序工作正常,但它开始显示年龄.

由于我有游戏背景,我想我应该这样做.在使用不同的技术制作了一堆原型之后,我非常确定我可以提取视频到纹理的渲染并使用DirectX来满足所有客户的请求.

但是,我现在已经到了必须选择一种技术的地步,我不能再迷失了......

  • DirectShow的
  • 媒体基金会
    • 媒体会话(<Windows 8)
    • 媒体引擎(> Windows 8)
  • DXVA1
  • DXVA2
  • DXVA-HD

DirectShow显然是最古老的,但仍然运行良好,也主要是因为可用的大量编解码器.

媒体基金会已经推出了Windows Vista,直到Windows 8还有一个名为"媒体会话"的东西,之后他们推出了"媒体引擎".如果我是正确的编解码器被称为MFT?实际上有哪些网站可以像free-codecs.com一样提供这些网站?

除了这两种技术之外,还有DXVA,它允许您将视频解码卸载到GPU.目前,我遇到了3种不同的类型.DXVA1是自XP以来一直存在的实现,DXVA2是更新的API.但什么是DXVA-HD?它比DXVA2更新还是同等名称?

我真的想转向媒体基金会,开箱即用的编解码器非常适合客户想要使用的格式.我所关心的是为它获取编解码器是多么容易...... Windows 8+默认媒体播放器是否仍然具有DirectShow和MF渲染路径并且可以即时交换它们还是微软完全逐步淘汰DirectShow?

我也无法完全理解DXVA应该如何工作.鉴于我想基本上在游戏中渲染视频,只有让所有渲染实际发生在GPU上并将应用程序逻辑保留在CPU上才有意义,但我真的找不到任何关于如何使用Media的好例子基础.这主要是因为我不知道DXVA2和DXVA-HD之间的区别.Windows 7 SDK附带了所有3个实现的示例......

如果有人能够以粗体回答我的问题,请纠正我的错误信息,并指出我正确的方向(DirectX + Media Foundation + DXVA-无论如何),我将非常感激!它可以像"结合Windows 7 SDK的这3个示例来获得您想要的"一样简单.

整个任务的目标是再次获得顶级形式的应用程序,我想绝对肯定我会选择像DirectShow已经拥有的下一个十年的技术:P

directx video directshow dxva ms-media-foundation

7
推荐指数
1
解决办法
1538
查看次数