[FFmpeg-devel] [GSoC] BDA (DTV) Capture / tuning -- work-in-progress

Máté Sebők smfinc.org at gmail.com
Sat Aug 22 05:18:04 CEST 2015


>
> fails to build with mingw due to missing header
> In file included from ffmpeg/libavdevice/dshow.c:33:0:
> ffmpeg/libavdevice/bdadefs.h:8:24: fatal error: combaseapi.h: No such
> file or directory
> compilation terminated.
> make: *** [libavdevice/dshow.o] Error 1
> maybe a header check is needed in configure


Maybe fixed... unnecessary headers removed (also some cleanup in the
interface-descriptions)



> > +
> > +const CLSID CLSID_NetworkProvider =
> > +    {0xB2F3A67C,0x29DA,0x4C78,{0x88,0x31,0x09,0x1E,0xD5,0x09,
> 0xA4,0x75}};
> > +const GUID KSCATEGORY_BDA_NETWORK_TUNER =
> > +    {0x71985f48,0x1ca1,0x11d3,{0x9c,0xc8,0x00,0xc0,0x4f,0x79,
> 0x71,0xe0}};
> > +const GUID KSCATEGORY_BDA_RECEIVER_COMPONENT    =
> > +    {0xFD0A5AF4,0xB41D,0x11d2,{0x9c,0x95,0x00,0xc0,0x4f,0x79,
> 0x71,0xe0}};
> > +const GUID KSCATEGORY_BDA_TRANSPORT_INFORMATION =
> > +    {0xa2e3074f,0x6c3d,0x11d3,{0xb6,0x53,0x00,0xc0,0x4f,0x79,
> 0x49,0x8e}};
> these either need to be static or have a ff/avpriv prefix


Fixed to static


> +
> > +            gfilename = malloc((strlen(ctx->dtv_graph_
> file)+4)*sizeof(WCHAR));
> is this intended to be malloc() instead of av_malloc() ?


Yes, it was intended, only a filename buffer for char-to-widechar
conversion.



> -#define DSHOWDEBUG 0
> > +#define DSHOWDEBUG 1
> >
> >  #include "avdevice.h"
> >
> stray change


As it's a work in progress code, more verbose debug output can help a lot.
(it only changes things if the debug messages are enabled in the command
line)

> +
> >  static inline void nothing(void *foo)
> >  {
> >  }
> stray change


Sorry, it was an accident -- fixed

(The edited/fixed tuner.h still required for a working build)

Regards,
Máté


On Sat, Aug 22, 2015 at 2:35 AM, Michael Niedermayer <michael at niedermayer.cc
> wrote:

> On Fri, Aug 21, 2015 at 08:04:00PM +0200, Máté Sebők wrote:
> > Hi,
> >
> > Due to various problems, it's only got this far:
> > - can list DTV Tuners and Receiver Components (in a bit akward way)
> > - ATSC / DVB-T /-S /-C can be selected
> > - DTV channels can be tuned in only to frequency
> > - only video can be recorded/recoded
> > - only mpeg2/NTSC ( ATSC ) works now... others just hangs or crash due to
> > video format differences between graph connection time and running the
> graph
> > - there is an optional graph (grf) export
> >
> > The mingw64 has broken signatures for a lot of BDA / DVB components, that
> > needs to be replaced with the attached tuner.h.
>
> [...]
>
> > diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c
> > index 6224978..5c87563 100644
> > --- a/libavdevice/dshow.c
> > +++ b/libavdevice/dshow.c
> > @@ -29,6 +29,28 @@
> >  #include "libavcodec/raw.h"
> >  #include "objidl.h"
> >  #include "shlwapi.h"
> > +#include "tuner.h"
> > +#include "bdadefs.h"
> > +
>
> > +
> > +const CLSID CLSID_NetworkProvider =
> > +
> {0xB2F3A67C,0x29DA,0x4C78,{0x88,0x31,0x09,0x1E,0xD5,0x09,0xA4,0x75}};
> > +const GUID KSCATEGORY_BDA_NETWORK_TUNER =
> > +
> {0x71985f48,0x1ca1,0x11d3,{0x9c,0xc8,0x00,0xc0,0x4f,0x79,0x71,0xe0}};
> > +const GUID KSCATEGORY_BDA_RECEIVER_COMPONENT    =
> > +
> {0xFD0A5AF4,0xB41D,0x11d2,{0x9c,0x95,0x00,0xc0,0x4f,0x79,0x71,0xe0}};
> > +const GUID KSCATEGORY_BDA_TRANSPORT_INFORMATION =
> > +
> {0xa2e3074f,0x6c3d,0x11d3,{0xb6,0x53,0x00,0xc0,0x4f,0x79,0x49,0x8e}};
>
> these either need to be static or have a ff/avpriv prefix
>
>
> [..]
> > +
> > +        capture_filter = libAVFilter_Create(avctx, callback,
> VideoDevice);
> > +        if (!capture_filter) {
> > +            av_log(avctx, AV_LOG_ERROR, "Could not create grabber
> filter.\n");
> > +            goto error;
> > +        }
> > +        ctx->capture_filter[VideoDevice] = capture_filter;
> > +
> > +        r = IGraphBuilder_AddFilter(graph, (IBaseFilter *)
> capture_filter,
> > +                                    filter_name[VideoDevice]);
> > +        if (r != S_OK) {
> > +            av_log(avctx, AV_LOG_ERROR, "Could not add capture filter
> to graph\n");
> > +            goto error;
> > +        }
> > +
> > +        libAVPin_AddRef(capture_filter->pin);
> > +        capture_pin = capture_filter->pin;
> > +        ctx->capture_pin[VideoDevice] = capture_pin;
> > +
> > +        av_log(avctx, AV_LOG_INFO, "Video capture filter added to
> graph\n");
> > +
> > +        if(!bda_src) {
> > +            av_log(avctx, AV_LOG_ERROR, "No output from bda source\n");
> > +            goto error;
> > +        }
> > +
> > +        r = CoCreateInstance(&CLSID_CaptureGraphBuilder2, NULL,
> CLSCTX_INPROC_SERVER,
> > +                             &IID_ICaptureGraphBuilder2, (void **)
> &graph_builder2);
> > +        if (r != S_OK) {
> > +            av_log(avctx, AV_LOG_ERROR, "Could not create
> CaptureGraphBuilder2\n");
> > +            goto error;
> > +        }
> > +
> > +        r = ICaptureGraphBuilder2_SetFiltergraph(graph_builder2, graph);
> > +        if (r != S_OK) {
> > +            av_log(avctx, AV_LOG_ERROR, "Could not set graph for
> CaptureGraphBuilder2\n");
> > +            goto error;
> > +        }
> > +
> > +        r = ICaptureGraphBuilder2_RenderStream(graph_builder2, NULL,
> NULL, (IUnknown *) bda_src, NULL /* no intermediate filter */,
> > +            (IBaseFilter *) capture_filter); /* connect pins,
> optionally insert intermediate filters like crossbar if necessary */
> > +
> > +        if (r != S_OK) {
> > +            av_log(avctx, AV_LOG_ERROR, "Could not RenderStream to
> connect pins\n");
> > +            goto error;
> > +        }
> > +
> > +
> > +        if (graph_builder2 != NULL)
> > +            ICaptureGraphBuilder2_Release(graph_builder2);
> > +
> > +        if (ctx->dtv_graph_file) {
> > +            const WCHAR wszStreamName[] = L"ActiveMovieGraph";
> > +            IStorage *p_storage = NULL;
> > +            IStream *ofile_stream = NULL;
> > +            IPersistStream *pers_stream = NULL;
> > +            WCHAR *gfilename = NULL;
> > +
> > +            gfilename =
> malloc((strlen(ctx->dtv_graph_file)+4)*sizeof(WCHAR));
>
> is this intended to be malloc() instead of av_malloc() ?
>
>
> [...]
> > diff --git a/libavdevice/dshow_capture.h b/libavdevice/dshow_capture.h
> > index ae2f1d3..0b6f369 100644
> > --- a/libavdevice/dshow_capture.h
> > +++ b/libavdevice/dshow_capture.h
>
> > @@ -22,7 +22,7 @@
> >  #ifndef AVDEVICE_DSHOW_H
> >  #define AVDEVICE_DSHOW_H
> >
> > -#define DSHOWDEBUG 0
> > +#define DSHOWDEBUG 1
> >
> >  #include "avdevice.h"
> >
>
> stray change
>
>
> > @@ -51,6 +51,7 @@ extern const AVClass *ff_dshow_context_class_ptr;
> >  #define dshowdebug(...)
> >  #endif
> >
> > +
> >  static inline void nothing(void *foo)
> >  {
> >  }
>
> stray change
>
> [...]
>
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Asymptotically faster algorithms should always be preferred if you have
> asymptotical amounts of data
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-dshow-add-partial-dtv-tuner-support.patch
Type: application/octet-stream
Size: 111061 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150822/b4272091/attachment.obj>


More information about the ffmpeg-devel mailing list