]> git.sesse.net Git - ffmpeg/blobdiff - libavdevice/dshow.c
Merge remote-tracking branch 'qatar/master'
[ffmpeg] / libavdevice / dshow.c
index 0191d510622c5dd899f6f94e0488582a1c40a550..dd1b29b2efff3462d177ca1ed87b3035ece65cd3 100644 (file)
@@ -21,7 +21,7 @@
 
 #include "libavutil/parseutils.h"
 #include "libavutil/opt.h"
-
+#include "libavformat/internal.h"
 #include "avdevice.h"
 #include "dshow.h"
 
@@ -72,6 +72,7 @@ static enum PixelFormat dshow_pixfmt(DWORD biCompression, WORD biBitCount)
         return PIX_FMT_YUYV422;
     case MKTAG('I', '4', '2', '0'):
         return PIX_FMT_YUV420P;
+    case BI_BITFIELDS:
     case BI_RGB:
         switch(biBitCount) { /* 1-8 are untested */
             case 1:
@@ -371,9 +372,9 @@ dshow_cycle_formats(AVFormatContext *avctx, enum dshowDeviceType devtype,
             if (!pformat_set) {
                 av_log(avctx, AV_LOG_INFO, "  min s=%ldx%ld fps=%g max s=%ldx%ld fps=%g\n",
                        vcaps->MinOutputSize.cx, vcaps->MinOutputSize.cy,
-                       1e7 / vcaps->MinFrameInterval,
+                       1e7 / vcaps->MaxFrameInterval,
                        vcaps->MaxOutputSize.cx, vcaps->MaxOutputSize.cy,
-                       1e7 / vcaps->MaxFrameInterval);
+                       1e7 / vcaps->MinFrameInterval);
                 continue;
             }
             if (ctx->framerate) {
@@ -561,11 +562,13 @@ static int
 dshow_list_device_options(AVFormatContext *avctx, ICreateDevEnum *devenum,
                           enum dshowDeviceType devtype)
 {
+    struct dshow_ctx *ctx = avctx->priv_data;
     IBaseFilter *device_filter = NULL;
     int r;
 
     if ((r = dshow_cycle_devices(avctx, devenum, devtype, &device_filter)) < 0)
         return r;
+    ctx->device_filter[devtype] = device_filter;
     if ((r = dshow_cycle_pins(avctx, devtype, device_filter, NULL)) < 0)
         return r;
 
@@ -646,7 +649,7 @@ static enum CodecID waveform_codec_id(enum AVSampleFormat sample_fmt)
     }
 }
 
-static enum SampleFormat sample_fmt_bits_per_sample(int bits)
+static enum AVSampleFormat sample_fmt_bits_per_sample(int bits)
 {
     switch (bits) {
     case 8:  return AV_SAMPLE_FMT_U8;
@@ -657,7 +660,7 @@ static enum SampleFormat sample_fmt_bits_per_sample(int bits)
 }
 
 static int
-dshow_add_device(AVFormatContext *avctx, AVFormatParameters *ap,
+dshow_add_device(AVFormatContext *avctx,
                  enum dshowDeviceType devtype)
 {
     struct dshow_ctx *ctx = avctx->priv_data;
@@ -709,7 +712,7 @@ dshow_add_device(AVFormatContext *avctx, AVFormatParameters *ap,
             codec->bits_per_coded_sample = bih->biBitCount;
         } else {
             codec->codec_id = CODEC_ID_RAWVIDEO;
-            if (bih->biCompression == BI_RGB) {
+            if (bih->biCompression == BI_RGB || bih->biCompression == BI_BITFIELDS) {
                 codec->bits_per_coded_sample = bih->biBitCount;
                 codec->extradata = av_malloc(9 + FF_INPUT_BUFFER_PADDING_SIZE);
                 if (codec->extradata) {
@@ -736,7 +739,7 @@ dshow_add_device(AVFormatContext *avctx, AVFormatParameters *ap,
         codec->channels    = fx->nChannels;
     }
 
-    av_set_pts_info(st, 64, 1, 10000000);
+    avpriv_set_pts_info(st, 64, 1, 10000000);
 
     ret = 0;
 
@@ -781,7 +784,7 @@ static int parse_device_name(AVFormatContext *avctx)
     return ret;
 }
 
-static int dshow_read_header(AVFormatContext *avctx, AVFormatParameters *ap)
+static int dshow_read_header(AVFormatContext *avctx)
 {
     struct dshow_ctx *ctx = avctx->priv_data;
     IGraphBuilder *graph = NULL;