[PATCH 6/6] qcap/videocapture: Remove unnecessary code for resizing.
Jactry Zeng
jzeng at codeweavers.com
Thu Apr 23 00:29:30 CDT 2020
If I understand it correctly, it is impossible for application to set
a resolution which isn't supported by the device now, since SetFormat()
will fail when an invalid is given. Hence we don't need to handle this
case anymore.
Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
---
dlls/qcap/v4l.c | 80 +++++++++----------------------------------------
1 file changed, 14 insertions(+), 66 deletions(-)
diff --git a/dlls/qcap/v4l.c b/dlls/qcap/v4l.c
index b264203bcc..eab9ecd2e2 100644
--- a/dlls/qcap/v4l.c
+++ b/dlls/qcap/v4l.c
@@ -103,11 +103,9 @@ struct capabilitie
struct _Capture
{
- UINT outputwidth, outputheight;
struct capabilitie *current_cap;
struct capabilitie **caps;
LONG caps_count;
- BOOL swresize;
struct strmbase_source *pin;
int fd, mmap;
@@ -206,8 +204,6 @@ HRESULT qcap_driver_set_format(Capture *device, AM_MEDIA_TYPE *mt)
|| format.fmt.pix.height != newheight)
ERR("Failed to set pixel format: %s.\n", strerror(errno));
- device->outputwidth = format.fmt.pix.width;
- device->outputheight = format.fmt.pix.height;
return S_OK;
}
@@ -297,61 +293,22 @@ HRESULT qcap_driver_set_prop(Capture *device, VideoProcAmpProperty property,
static void Resize(const Capture * capBox, LPBYTE output, const BYTE *input)
{
- UINT width, height, bitdepth, depth;
+ int inoffset, outoffset, ow;
+ struct capabilitie *cap;
- width = capBox->current_cap->width;
- height = capBox->current_cap->height;
- bitdepth = capBox->current_cap->depth;
- depth = bitdepth / 8;
+ cap = capBox->current_cap;
+ outoffset = cap->width * cap->height * cap->depth / 8;
+ ow = cap->width * cap->depth / 8;
+ inoffset = 0;
/* the whole image needs to be reversed,
because the dibs are messed up in windows */
- if (!capBox->swresize)
+ while (outoffset > 0)
{
- int inoffset = 0, outoffset = height * width * depth;
- int ow = width * depth;
- while (outoffset > 0)
- {
- int x;
- outoffset -= ow;
- for (x = 0; x < ow; x++)
- output[outoffset + x] = input[inoffset + x];
- inoffset += ow;
- }
- }
- else
- {
- HDC dc_s, dc_d;
- HBITMAP bmp_s, bmp_d;
- int inoffset = 0, outoffset = (capBox->outputheight) * capBox->outputwidth * depth;
- int ow = capBox->outputwidth * depth;
- LPBYTE myarray;
-
- /* FIXME: Improve software resizing: add error checks and optimize */
-
- myarray = CoTaskMemAlloc(capBox->outputwidth * capBox->outputheight * depth);
- dc_s = CreateCompatibleDC(NULL);
- dc_d = CreateCompatibleDC(NULL);
- bmp_s = CreateBitmap(width, height, 1, bitdepth, input);
- bmp_d = CreateBitmap(capBox->outputwidth, capBox->outputheight, 1, bitdepth, NULL);
- SelectObject(dc_s, bmp_s);
- SelectObject(dc_d, bmp_d);
- StretchBlt(dc_d, 0, 0, capBox->outputwidth, capBox->outputheight,
- dc_s, 0, 0, width, height, SRCCOPY);
- GetBitmapBits(bmp_d, capBox->outputwidth * capBox->outputheight * depth, myarray);
- while (outoffset > 0)
- {
- int i;
-
- outoffset -= ow;
- for (i = 0; i < ow; i++)
- output[outoffset + i] = myarray[inoffset + i];
- inoffset += ow;
- }
- CoTaskMemFree(myarray);
- DeleteObject(dc_s);
- DeleteObject(dc_d);
- DeleteObject(bmp_s);
- DeleteObject(bmp_d);
+ int x;
+ outoffset -= ow;
+ for (x = 0; x < ow; x++)
+ output[outoffset + x] = input[inoffset + x];
+ inoffset += ow;
}
}
@@ -385,10 +342,7 @@ static DWORD WINAPI ReadThread(LPVOID lParam)
{
int len;
- if (!capBox->swresize)
- len = height * width * depth;
- else
- len = capBox->outputheight * capBox->outputwidth * depth;
+ len = height * width * depth;
IMediaSample_SetActualDataLength(pSample, len);
len = IMediaSample_GetActualDataLength(pSample);
@@ -427,10 +381,7 @@ void qcap_driver_init_stream(Capture *device)
HRESULT hr;
req_props.cBuffers = 3;
- if (!device->swresize)
- req_props.cbBuffer = device->current_cap->width * device->current_cap->height;
- else
- req_props.cbBuffer = device->outputwidth * device->outputheight;
+ req_props.cbBuffer = device->current_cap->width * device->current_cap->height;
req_props.cbBuffer = (req_props.cbBuffer * device->current_cap->depth) / 8;
req_props.cbAlign = 1;
req_props.cbPrefix = 0;
@@ -685,9 +636,6 @@ Capture *qcap_driver_init(struct strmbase_source *pin, USHORT card)
goto error;
}
- device->outputwidth = format.fmt.pix.width;
- device->outputheight = format.fmt.pix.height;
- device->swresize = FALSE;
device->pin = pin;
device->state = State_Stopped;
device->run_event = CreateEventW(NULL, TRUE, FALSE, NULL);
--
2.26.1
More information about the wine-devel
mailing list