summaryrefslogtreecommitdiff
path: root/libavdevice/dshow.c
diff options
context:
space:
mode:
authorrogerdpack <rogerpack2005@gmail.com>2015-01-23 06:01:32 -0700
committerrogerdpack <rogerpack2005@gmail.com>2015-01-23 06:01:32 -0700
commite620eee88c4fdd43eb45001e4ec073110aea78d8 (patch)
tree2f54649c9b754945ab175680d0079b034a6b59a1 /libavdevice/dshow.c
parentd01234419b615792cd6447cb925ba16cc12ef32e (diff)
downloadffmpeg-e620eee88c4fdd43eb45001e4ec073110aea78d8.tar.gz
dshow: miscellaneous tweaks
Signed-off-by: rogerdpack <rogerpack2005@gmail.com>
Diffstat (limited to 'libavdevice/dshow.c')
-rw-r--r--libavdevice/dshow.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c
index 0497e09456..4883b33ea6 100644
--- a/libavdevice/dshow.c
+++ b/libavdevice/dshow.c
@@ -188,10 +188,12 @@ static int shall_we_drop(AVFormatContext *s, int index, enum dshowDeviceType dev
static const uint8_t dropscore[] = {62, 75, 87, 100};
const int ndropscores = FF_ARRAY_ELEMS(dropscore);
unsigned int buffer_fullness = (ctx->curbufsize[index]*100)/s->max_picture_buffer;
+ const char *devtypename = (devtype == VideoDevice) ? "video" : "audio";
if(dropscore[++ctx->video_frame_num%ndropscores] <= buffer_fullness) {
av_log(s, AV_LOG_ERROR,
- "real-time buffer[%s] too full (%d%% of size: %d)! frame dropped!\n", ctx->device_name[devtype], buffer_fullness, s->max_picture_buffer);
+ "real-time buffer [%s] [%s input] too full or near too full (%d%% of size: %d [rtbufsize parameter])! frame dropped!\n",
+ ctx->device_name[devtype], devtypename, buffer_fullness, s->max_picture_buffer);
return 1;
}
@@ -366,7 +368,7 @@ dshow_cycle_formats(AVFormatContext *avctx, enum dshowDeviceType devtype,
AM_MEDIA_TYPE *type = NULL;
int format_set = 0;
void *caps = NULL;
- int i, n, size;
+ int i, n, size, r;
if (IPin_QueryInterface(pin, &IID_IAMStreamConfig, (void **) &config) != S_OK)
return;
@@ -378,8 +380,9 @@ dshow_cycle_formats(AVFormatContext *avctx, enum dshowDeviceType devtype,
goto end;
for (i = 0; i < n && !format_set; i++) {
- IAMStreamConfig_GetStreamCaps(config, i, &type, (void *) caps);
-
+ r = IAMStreamConfig_GetStreamCaps(config, i, &type, (void *) caps);
+ if (r != S_OK)
+ goto next;
#if DSHOWDEBUG
ff_print_AM_MEDIA_TYPE(type);
#endif
@@ -643,6 +646,7 @@ dshow_cycle_pins(AVFormatContext *avctx, enum dshowDeviceType devtype,
goto next;
IEnumMediaTypes_Reset(types);
+ /* in case format_set was not called, just verify the majortype */
while (!device_pin && IEnumMediaTypes_Next(types, 1, &type, NULL) == S_OK) {
if (IsEqualGUID(&type->majortype, mediatype[devtype])) {
device_pin = pin;
@@ -663,7 +667,6 @@ next:
av_free(pin_buf);
if (pin_id)
CoTaskMemFree(pin_id);
-
}
IEnumPins_Release(pins);