|
|
|
@ -242,7 +242,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) |
|
|
|
|
AVStream *st; |
|
|
|
|
int devnum; |
|
|
|
|
int bisize; |
|
|
|
|
BITMAPINFO *bi; |
|
|
|
|
BITMAPINFO *bi = NULL; |
|
|
|
|
CAPTUREPARMS cparms; |
|
|
|
|
DWORD biCompression; |
|
|
|
|
WORD biBitCount; |
|
|
|
@ -288,7 +288,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) |
|
|
|
|
(LPARAM) videostream_cb); |
|
|
|
|
if(!ret) { |
|
|
|
|
av_log(s, AV_LOG_ERROR, "Could not set video stream callback.\n"); |
|
|
|
|
goto fail_io; |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
SetWindowLongPtr(ctx->hwnd, GWLP_USERDATA, (LONG_PTR) s); |
|
|
|
@ -302,7 +302,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) |
|
|
|
|
/* Set video format */ |
|
|
|
|
bisize = SendMessage(ctx->hwnd, WM_CAP_GET_VIDEOFORMAT, 0, 0); |
|
|
|
|
if(!bisize) |
|
|
|
|
goto fail_io; |
|
|
|
|
goto fail; |
|
|
|
|
bi = av_malloc(bisize); |
|
|
|
|
if(!bi) { |
|
|
|
|
vfw_read_close(s); |
|
|
|
@ -310,7 +310,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) |
|
|
|
|
} |
|
|
|
|
ret = SendMessage(ctx->hwnd, WM_CAP_GET_VIDEOFORMAT, bisize, (LPARAM) bi); |
|
|
|
|
if(!ret) |
|
|
|
|
goto fail_bi; |
|
|
|
|
goto fail; |
|
|
|
|
|
|
|
|
|
dump_bih(s, &bi->bmiHeader); |
|
|
|
|
|
|
|
|
@ -319,7 +319,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) |
|
|
|
|
ret = av_parse_video_size(&bi->bmiHeader.biWidth, &bi->bmiHeader.biHeight, ctx->video_size); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
av_log(s, AV_LOG_ERROR, "Couldn't parse video size.\n"); |
|
|
|
|
goto fail_bi; |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -338,19 +338,17 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) |
|
|
|
|
ret = SendMessage(ctx->hwnd, WM_CAP_SET_VIDEOFORMAT, bisize, (LPARAM) bi); |
|
|
|
|
if(!ret) { |
|
|
|
|
av_log(s, AV_LOG_ERROR, "Could not set Video Format.\n"); |
|
|
|
|
goto fail_bi; |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
biCompression = bi->bmiHeader.biCompression; |
|
|
|
|
biBitCount = bi->bmiHeader.biBitCount; |
|
|
|
|
|
|
|
|
|
av_free(bi); |
|
|
|
|
|
|
|
|
|
/* Set sequence setup */ |
|
|
|
|
ret = SendMessage(ctx->hwnd, WM_CAP_GET_SEQUENCE_SETUP, sizeof(cparms), |
|
|
|
|
(LPARAM) &cparms); |
|
|
|
|
if(!ret) |
|
|
|
|
goto fail_io; |
|
|
|
|
goto fail; |
|
|
|
|
|
|
|
|
|
dump_captureparms(s, &cparms); |
|
|
|
|
|
|
|
|
@ -365,7 +363,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) |
|
|
|
|
ret = SendMessage(ctx->hwnd, WM_CAP_SET_SEQUENCE_SETUP, sizeof(cparms), |
|
|
|
|
(LPARAM) &cparms); |
|
|
|
|
if(!ret) |
|
|
|
|
goto fail_io; |
|
|
|
|
goto fail; |
|
|
|
|
|
|
|
|
|
codec = st->codec; |
|
|
|
|
codec->time_base = (AVRational){framerate_q.den, framerate_q.num}; |
|
|
|
@ -394,31 +392,31 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
av_freep(&bi); |
|
|
|
|
|
|
|
|
|
av_set_pts_info(st, 32, 1, 1000); |
|
|
|
|
|
|
|
|
|
ctx->mutex = CreateMutex(NULL, 0, NULL); |
|
|
|
|
if(!ctx->mutex) { |
|
|
|
|
av_log(s, AV_LOG_ERROR, "Could not create Mutex.\n" ); |
|
|
|
|
goto fail_io; |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
|
ctx->event = CreateEvent(NULL, 1, 0, NULL); |
|
|
|
|
if(!ctx->event) { |
|
|
|
|
av_log(s, AV_LOG_ERROR, "Could not create Event.\n" ); |
|
|
|
|
goto fail_io; |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ret = SendMessage(ctx->hwnd, WM_CAP_SEQUENCE_NOFILE, 0, 0); |
|
|
|
|
if(!ret) { |
|
|
|
|
av_log(s, AV_LOG_ERROR, "Could not start capture sequence.\n" ); |
|
|
|
|
goto fail_io; |
|
|
|
|
goto fail; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
fail_bi: |
|
|
|
|
av_free(bi); |
|
|
|
|
|
|
|
|
|
fail_io: |
|
|
|
|
fail: |
|
|
|
|
av_freep(&bi); |
|
|
|
|
vfw_read_close(s); |
|
|
|
|
return AVERROR(EIO); |
|
|
|
|
} |
|
|
|
|