[PATCH 6/6] qcap/videocapture: Remove unnecessary code for resizing.
Zebediah Figura
zfigura at codeweavers.com
Thu Apr 23 16:50:31 CDT 2020
On 4/23/20 12:29 AM, Jactry Zeng wrote:
> 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)
I guess this function shouldn't be called Resize() anymore, then?
> {
> - 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);
>
More information about the wine-devel
mailing list