1 /**************************************************************************
3 * Copyright 2016 Samsung Electronics co., Ltd. All Rights Reserved.
5 * Contact: Konstantin Drabeniuk <k.drabeniuk@samsung.com>
6 * Contact: Andrii Sokolenko <a.sokolenko@samsung.com>
7 * Contact: Roman Marchenko <r.marchenko@samsung.com>
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the
11 * "Software"), to deal in the Software without restriction, including
12 * without limitation the rights to use, copy, modify, merge, publish,
13 * distribute, sub license, and/or sell copies of the Software, and to
14 * permit persons to whom the Software is furnished to do so, subject to
15 * the following conditions:
17 * The above copyright notice and this permission notice (including the
18 * next paragraph) shall be included in all copies or substantial portions
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
24 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
25 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 **************************************************************************/
31 #include "gtest/gtest.h"
32 #include "ut_common.h"
35 #include "tbm_bufmgr.h"
36 #include "tbm_drm_helper.h"
39 #include <sys/epoll.h>
40 #include <sys/timerfd.h>
43 class TDMCaptureWithoutCreation : public testing::Test {
45 tdm_display *dpy = nullptr;
46 tbm_bufmgr bufmgr = nullptr;
47 tdm_display_capability display_capability = (tdm_display_capability)0;
48 bool has_capture = false;
49 std::vector<tdm_output *> output_array;
51 virtual void SetEnvs()
53 setenv("TDM_DLOG", "1", 1);
54 setenv("XDG_RUNTIME_DIR", "/run", 1);
55 setenv("TBM_DLOG", "1", 1);
56 setenv("TDM_DEBUG_MODULE", "all", 1);
57 setenv("TDM_DEBUG", "1", 1);
58 setenv("TBM_DISPLAY_SERVER", "1", 1);
61 virtual void UnsetEnvs()
64 unsetenv("XDG_RUNTIME_DIR");
66 unsetenv("TDM_DEBUG_MODULE");
67 unsetenv("TDM_DEBUG");
68 unsetenv("TBM_DISPLAY_SERVER");
73 tdm_error error = TDM_ERROR_NONE;
78 /* FIXME: fix the error. If we initialize TBM before TDM we get fail
79 * in the tdm_output_set_dpms */
81 bufmgr = tbm_bufmgr_init(-1);
82 ASSERT_FALSE(bufmgr == NULL);
85 dpy = tdm_display_init(&error);
86 ASSERT_TRUE(error == TDM_ERROR_NONE);
87 ASSERT_FALSE(dpy == nullptr);
89 error = tdm_display_get_capabilities(dpy, &display_capability);
90 #ifdef FAIL_ON_UNSUPPORTED
91 ASSERT_TRUE(display_capability & TDM_DISPLAY_CAPABILITY_CAPTURE);
93 ASSERT_TRUE(error == TDM_ERROR_NONE);
95 if (display_capability & TDM_DISPLAY_CAPABILITY_CAPTURE)
98 ASSERT_TRUE(tdm_display_get_output_count(dpy, &output_count) == TDM_ERROR_NONE);
100 for (int i = 0; i < output_count; i++) {
101 tdm_output *output = tdm_display_get_output(dpy, i, &error);
103 if (TDM_ERROR_NONE != error || nullptr == output)
106 tdm_output_conn_status status = TDM_OUTPUT_CONN_STATUS_DISCONNECTED;
107 if (TDM_ERROR_NONE != tdm_output_get_conn_status(output, &status))
110 if (status == TDM_OUTPUT_CONN_STATUS_DISCONNECTED)
113 output_array.push_back(output);
120 tdm_display_deinit(dpy);
122 tbm_bufmgr_deinit(bufmgr);
131 const tdm_output_mode *output_mode;
132 tdm_capture *capture;
133 std::vector<tdm_layer *> layers;
134 UtCapture(tdm_output *, const tdm_output_mode *, tdm_capture *, std::vector<tdm_layer *>);
137 UtCapture::UtCapture(tdm_output *_output, const tdm_output_mode *_output_mode,
138 tdm_capture *_capture, std::vector<tdm_layer *> _layers)
141 output_mode = _output_mode;
146 class TDMCapture : public TDMCaptureWithoutCreation {
148 const tbm_format *formats = nullptr;
149 int format_count = 0;
150 std::vector<UtCapture> captures;
151 std::vector<tbm_surface_h> buffers;
152 static int utCaptureDoneHandlerSuccessCounter;
153 friend void UtCaptureDoneHandler(tdm_capture *capture,
154 tbm_surface_h buffer, void *user_data);
157 void UtCaptureGetInfo(UtCapture *capture, double scale, tdm_transform transform, tdm_info_capture *info);
158 void UtCaptureGetInfo(UtCapture *capture, tdm_info_capture *info);
159 tbm_surface_h UtCaptureCreateBuffer(UtCapture *capture);
160 tbm_surface_h UtCaptureCreateBuffer(int width, int height, tbm_format format, int scanout);
161 tbm_surface_h UtCaptureCreateBuffer(int width, int height, tbm_format format);
164 int TDMCapture::utCaptureDoneHandlerSuccessCounter = 0;
166 void UtCaptureDoneHandler(tdm_capture *capture,
167 tbm_surface_h buffer, void *user_data)
169 TDMCapture *fcapture = (TDMCapture *)user_data;
174 for (tbm_surface_h buf : fcapture->buffers) {
176 fcapture->utCaptureDoneHandlerSuccessCounter++;
182 void TDMCapture::SetUp(void)
186 utCaptureDoneHandlerSuccessCounter = 0;
188 ASSERT_NO_FATAL_FAILURE(TDMCaptureWithoutCreation::SetUp());
193 for (tdm_output *output : output_array) {
194 const tdm_output_mode *output_mode = nullptr;
195 int output_modes_cnt = 0;
196 const tdm_output_mode *output_modes;
197 int temp_layer_count = 0;
198 std::vector<tdm_layer *> layers;
200 error = tdm_output_get_available_modes(output, &output_modes, &output_modes_cnt);
201 ASSERT_EQ(TDM_ERROR_NONE, error);
203 for(int j = 0; j < output_modes_cnt; j++)
204 if(output_modes[j].type & TDM_OUTPUT_MODE_TYPE_PREFERRED)
205 output_mode = &output_modes[j];
207 ASSERT_NE(nullptr, output_mode);
209 if (TDM_ERROR_NONE != tdm_output_get_layer_count(output, &temp_layer_count))
211 if (0 == temp_layer_count)
214 for (int i = 0; i < temp_layer_count; ++i) {
216 layer = tdm_output_get_layer(output, i, &error);
217 ASSERT_TRUE(TDM_ERROR_NONE == error);
218 ASSERT_FALSE(NULL == layer);
219 layers.push_back(layer);
222 tdm_capture *capture = tdm_output_create_capture(output, &error);
223 ASSERT_NE(nullptr, capture);
224 ASSERT_EQ(TDM_ERROR_NONE, error);
226 captures.emplace_back(output, output_mode, capture, layers);
230 tdm_display_get_catpure_available_formats(dpy, &formats, &format_count);
231 ASSERT_EQ(TDM_ERROR_NONE, error);
232 ASSERT_NE(nullptr, formats);
233 ASSERT_GE(format_count, 0);
236 void TDMCapture::TearDown(void)
238 for (UtCapture & utCapture : captures)
239 tdm_capture_destroy(utCapture.capture);
241 for (tbm_surface_h buffer : buffers) {
242 tbm_surface_destroy(buffer);
245 TDMCaptureWithoutCreation::TearDown();
248 void TDMCapture::UtCaptureGetInfo(UtCapture *capture, double scale,
249 tdm_transform transform, tdm_info_capture *info)
251 memset((void *)info, 0, sizeof(tdm_info_capture));
253 const tdm_output_mode *output_mode = capture->output_mode;
255 int w = output_mode->hdisplay * scale;
256 int h = output_mode->vdisplay * scale;
258 if (transform == TDM_TRANSFORM_90 || transform == TDM_TRANSFORM_270 ||
259 transform == TDM_TRANSFORM_FLIPPED_90 || transform == TDM_TRANSFORM_FLIPPED_270) {
265 info->dst_config.size.h = w;
266 info->dst_config.size.v = h;
267 info->dst_config.pos.x = 0;
268 info->dst_config.pos.y = 0;
269 info->dst_config.pos.w = w;
270 info->dst_config.pos.h = h;
271 info->dst_config.format = formats[0];
272 info->transform = transform;
273 info->type = TDM_CAPTURE_TYPE_ONESHOT;
276 void TDMCapture::UtCaptureGetInfo(UtCapture *capture, tdm_info_capture *info)
278 UtCaptureGetInfo(capture, 1.0, TDM_TRANSFORM_NORMAL, info);
282 TDMCapture::UtCaptureCreateBuffer(UtCapture *capture)
284 tbm_surface_h buffer;
286 buffer = tbm_surface_create(capture->output_mode->hdisplay,
287 capture->output_mode->vdisplay, formats[0]);
289 buffers.push_back(buffer);
295 TDMCapture::UtCaptureCreateBuffer(int width, int height, tbm_format format, int scanout)
297 tbm_surface_h buffer;
300 buffer = tbm_surface_internal_create_with_flags(width, height, format, TBM_BO_SCANOUT);
302 buffer = tbm_surface_internal_create_with_flags(width, height, format, TBM_BO_DEFAULT);
305 buffers.push_back(buffer);
311 TDMCapture::UtCaptureCreateBuffer(int width, int height, tbm_format format)
313 return UtCaptureCreateBuffer(width, height, format, 0);
316 class TDMCaptureCommit : public TDMCapture {
322 static const int timeLimitSec = 3;
323 static const int timeLimitNsec = 0;
327 void UtHandleCaptureEvent();
328 int UtPrepareToCapture(double scale, tdm_transform transform, tdm_capture_type type);
329 int UtPrepareToCapture(double scale, tdm_transform transform);
330 int UtPrepareToCapture();
333 void TDMCaptureCommit::SetUp(void)
335 struct epoll_event ep;
338 ASSERT_NO_FATAL_FAILURE(TDMCapture::SetUp());
340 for (UtCapture & utCapture : captures) {
341 error = tdm_output_set_mode(utCapture.output, utCapture.output_mode);
342 ASSERT_TRUE(error == TDM_ERROR_NONE);
344 error = tdm_output_set_dpms(utCapture.output, TDM_OUTPUT_DPMS_ON);
345 ASSERT_TRUE(error == TDM_ERROR_NONE);
347 for (tdm_layer *layer : utCapture.layers) {
349 tdm_layer_capability lcapabilities;
350 tbm_surface_h buffer;
351 tdm_info_layer layer_info = {0};
353 w = utCapture.output_mode->hdisplay;
354 h = utCapture.output_mode->vdisplay;
356 error = tdm_layer_get_capabilities(layer, &lcapabilities);
357 ASSERT_EQ(TDM_ERROR_NONE, error);
358 if (!(lcapabilities & TDM_LAYER_CAPABILITY_PRIMARY)) {
363 buffer = UtCaptureCreateBuffer(w, h, TBM_FORMAT_ARGB8888, 1);
364 ASSERT_NE(nullptr, buffer);
366 layer_info.src_config.size.h = w;
367 layer_info.src_config.size.v = h;
368 layer_info.src_config.pos.x = 0;
369 layer_info.src_config.pos.y = 0;
370 layer_info.src_config.pos.w = w;
371 layer_info.src_config.pos.h = h;
372 layer_info.src_config.format = TBM_FORMAT_ARGB8888;
373 layer_info.dst_pos.x = 0;
374 layer_info.dst_pos.y = 0;
375 layer_info.dst_pos.w = w;
376 layer_info.dst_pos.h = h;
377 layer_info.transform = TDM_TRANSFORM_NORMAL;
379 error = tdm_layer_set_info(layer, &layer_info);
380 ASSERT_EQ(TDM_ERROR_NONE, error);
382 error = tdm_layer_set_buffer(layer, buffer);
383 ASSERT_EQ(TDM_ERROR_NONE, error);
386 error = tdm_output_commit(utCapture.output, 0, nullptr, nullptr);
387 ASSERT_EQ(TDM_ERROR_NONE, error);
390 /* TODO: use output_commit_handle */
393 epFd = epoll_create1(0);
394 ASSERT_TRUE(epFd != -1);
396 timerFd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC | TFD_NONBLOCK);
397 ASSERT_TRUE(timerFd != -1);
399 memset(&ep, 0, sizeof ep);
400 ep.events |= EPOLLIN;
401 ep.data.fd = timerFd;
402 ASSERT_TRUE(epoll_ctl(epFd, EPOLL_CTL_ADD, timerFd, &ep) == 0);
404 ASSERT_TRUE(tdm_display_get_fd(dpy, &tdmFd) == TDM_ERROR_NONE);
406 memset(&ep, 0, sizeof ep);
407 ep.events |= EPOLLIN;
409 ASSERT_TRUE(epoll_ctl(epFd, EPOLL_CTL_ADD, tdmFd, &ep) == 0);
412 void TDMCaptureCommit::TearDown(void)
419 for (UtCapture & utCapture : captures) {
420 for (tdm_layer *layer : utCapture.layers)
421 tdm_layer_unset_buffer(layer);
423 tdm_output_set_dpms(utCapture.output, TDM_OUTPUT_DPMS_OFF);
426 TDMCapture::TearDown();
429 void TDMCaptureCommit::UtHandleCaptureEvent()
431 struct itimerspec its;
433 struct epoll_event ep_event[2];
435 if (utCaptureDoneHandlerSuccessCounter == (int)captures.size())
438 its.it_interval.tv_sec = 0;
439 its.it_interval.tv_nsec = 0;
440 its.it_value.tv_sec = timeLimitSec;
441 its.it_value.tv_nsec = timeLimitNsec;
443 ASSERT_TRUE(timerfd_settime(timerFd, 0, &its, NULL) == 0);
446 count = epoll_wait(epFd, ep_event, sizeof(ep_event), -1);
447 ASSERT_TRUE(count >= 0);
449 for (int i = 0; i < count; i++) {
450 if (ep_event[i].data.fd == timerFd) {
453 ASSERT_TRUE(tdm_display_handle_events(dpy) == TDM_ERROR_NONE);
454 if (utCaptureDoneHandlerSuccessCounter == (int)captures.size())
461 int TDMCaptureCommit::UtPrepareToCapture(double scale, tdm_transform transform, tdm_capture_type type)
464 tbm_surface_h buffer;
466 for (UtCapture & utCapture : captures) {
467 tdm_info_capture info = {0};
469 UtCaptureGetInfo(&utCapture, scale, transform, &info);
472 error = tdm_capture_set_done_handler(utCapture.capture, UtCaptureDoneHandler, this);
473 EXPECT_EQ(TDM_ERROR_NONE, error);
474 if (error != TDM_ERROR_NONE)
477 error = tdm_capture_set_info(utCapture.capture, &info);
478 EXPECT_EQ(TDM_ERROR_NONE, error);
479 if (error != TDM_ERROR_NONE)
482 buffer = UtCaptureCreateBuffer(info.dst_config.size.h,
483 info.dst_config.size.v,
484 info.dst_config.format);
485 EXPECT_NE(NULL, buffer);
489 error = tdm_capture_attach(utCapture.capture, buffer);
490 EXPECT_EQ(TDM_ERROR_NONE, error);
491 if (error != TDM_ERROR_NONE)
498 int TDMCaptureCommit::UtPrepareToCapture()
500 return UtPrepareToCapture(1.0, TDM_TRANSFORM_NORMAL);
503 int TDMCaptureCommit::UtPrepareToCapture(double scale, tdm_transform transform)
505 return UtPrepareToCapture(1.0, TDM_TRANSFORM_NORMAL, TDM_CAPTURE_TYPE_ONESHOT);
508 class TDMCaptureCommitThread : public TDMCaptureCommit {
512 TDMCaptureCommit::SetEnvs();
513 setenv("TDM_THREAD", "1", 1);
517 TDMCaptureCommit::UnsetEnvs();
518 unsetenv("TDM_THREAD");
522 TEST_F(TDMCaptureWithoutCreation, DisplayGetCaptureAvailableFormatsSuccessful)
524 SKIP_FLAG(has_capture);
525 const tbm_format * formats = nullptr;
527 ASSERT_TRUE(TDM_ERROR_NONE == tdm_display_get_catpure_available_formats(dpy, &formats, &count));
528 ASSERT_FALSE(-42 == count);
529 ASSERT_FALSE(nullptr == formats);
532 /* tdm_display_create_pp() */
534 TEST_F(TDMCaptureWithoutCreation, DisplayCreateCaptureNullAll)
536 SKIP_FLAG(has_capture);
537 tdm_capture *capture;
539 capture = tdm_output_create_capture(nullptr, nullptr);
540 ASSERT_EQ(nullptr, capture);
543 TEST_F(TDMCaptureWithoutCreation, DisplayCreateCaptureNullOutput)
545 SKIP_FLAG(has_capture);
546 tdm_capture *capture;
549 capture = tdm_output_create_capture(nullptr, &error);
550 ASSERT_EQ(nullptr, capture);
551 ASSERT_NE(TDM_ERROR_NONE, error);
554 TEST_F(TDMCaptureWithoutCreation, DisplayCreateCaptureSuccessNullError)
556 SKIP_FLAG(has_capture);
557 tdm_capture *capture;
559 for (tdm_output *output : output_array) {
560 capture = tdm_output_create_capture(output, nullptr);
561 ASSERT_NE(nullptr, capture);
565 TEST_F(TDMCaptureWithoutCreation, DisplayCreateCaptureSuccess)
567 SKIP_FLAG(has_capture);
568 tdm_capture *capture;
571 for (tdm_output *output : output_array) {
572 capture = tdm_output_create_capture(output, &error);
573 ASSERT_NE(nullptr, capture);
574 ASSERT_EQ(TDM_ERROR_NONE, error);
578 /* tdm_display_get_capture_available_size */
580 TEST_F(TDMCapture, DisplayGetCaptureAvailableSizeFailNullAll)
582 SKIP_FLAG(has_capture);
585 error = tdm_display_get_capture_available_size(nullptr, nullptr, nullptr, nullptr, nullptr, nullptr);
586 ASSERT_NE(TDM_ERROR_NONE, error);
589 TEST_F(TDMCapture, DisplayGetCaptureAvailableSizeSuccess)
591 SKIP_FLAG(has_capture);
599 error = tdm_display_get_capture_available_size(dpy, &min_w, &min_h,
600 &max_w, &max_h, &preferred_align);
601 ASSERT_EQ(TDM_ERROR_NONE, error);
605 /* tdm_capture_set_info() */
607 TEST_F(TDMCapture, CaptureSetInfoFailNullAll)
609 SKIP_FLAG(has_capture);
612 error = tdm_capture_set_info(nullptr, nullptr);
613 ASSERT_NE(TDM_ERROR_NONE, error);
616 TEST_F(TDMCapture, CaptureSetInfoFailNullCapture)
618 SKIP_FLAG(has_capture);
620 tdm_info_capture info;
622 error = tdm_capture_set_info(nullptr, &info);
623 ASSERT_NE(TDM_ERROR_NONE, error);
626 TEST_F(TDMCapture, CaptureSetInfoNullInfo)
628 SKIP_FLAG(has_capture);
631 for (UtCapture & utCapture : captures) {
632 error = tdm_capture_set_info(utCapture.capture, nullptr);
633 ASSERT_NE(TDM_ERROR_NONE, error);
637 TEST_F(TDMCapture, CaptureSetInfoSuccessStream)
639 SKIP_FLAG(has_capture);
641 tdm_info_capture info;
643 for (UtCapture & utCapture : captures) {
644 error = tdm_output_set_mode(utCapture.output, utCapture.output_mode);
645 ASSERT_EQ(TDM_ERROR_NONE, error);
647 UtCaptureGetInfo(&utCapture, &info);
649 info.type = TDM_CAPTURE_TYPE_STREAM;
651 error = tdm_capture_set_info(utCapture.capture, &info);
652 ASSERT_EQ(TDM_ERROR_NONE, error);
656 TEST_F(TDMCapture, CaptureSetInfoSuccess)
658 SKIP_FLAG(has_capture);
660 tdm_info_capture info;
662 for (UtCapture & utCapture : captures) {
663 UtCaptureGetInfo(&utCapture, &info);
665 error = tdm_capture_set_info(utCapture.capture, &info);
666 ASSERT_EQ(TDM_ERROR_NONE, error);
670 /* tdm_capture_set_done_handler() */
672 TEST_F(TDMCapture, CaptureSetDoneHandlerFailNullAll)
674 SKIP_FLAG(has_capture);
677 error = tdm_capture_set_done_handler(nullptr, nullptr, nullptr);
678 ASSERT_NE(TDM_ERROR_NONE, error);
681 TEST_F(TDMCapture, CaptureSetDoneHandlerFailNullCapture)
683 SKIP_FLAG(has_capture);
686 error = tdm_capture_set_done_handler(nullptr, UtCaptureDoneHandler, this);
687 ASSERT_NE(TDM_ERROR_NONE, error);
690 TEST_F(TDMCapture, CaptureSetDoneHandlerSuccessNullFailNullFunc)
692 SKIP_FLAG(has_capture);
695 for (UtCapture & utCapture : captures) {
696 error = tdm_pp_set_done_handler(utCapture.capture, nullptr, this);
697 ASSERT_NE(TDM_ERROR_NONE, error);
701 TEST_F(TDMCapture, CaptureSetDoneHandlerSuccessNullData)
703 SKIP_FLAG(has_capture);
706 for (UtCapture & utCapture : captures) {
707 error = tdm_capture_set_done_handler(utCapture.capture, UtCaptureDoneHandler, this);
708 ASSERT_EQ(TDM_ERROR_NONE, error);
712 TEST_F(TDMCapture, CaptureSetDoneHandlerSuccess)
714 SKIP_FLAG(has_capture);
717 for (UtCapture & utCapture : captures) {
718 error = tdm_capture_set_done_handler(utCapture.capture, UtCaptureDoneHandler, this);
719 ASSERT_EQ(TDM_ERROR_NONE, error);
723 /* tdm_capture_attach() */
725 TEST_F(TDMCapture, CaptureAttachFailNullAll)
727 SKIP_FLAG(has_capture);
730 error = tdm_capture_attach(nullptr, nullptr);
731 ASSERT_NE(TDM_ERROR_NONE, error);
734 TEST_F(TDMCapture, CaptureAttachFailNullCapture)
736 SKIP_FLAG(has_capture);
738 tbm_surface_h buffer;
740 buffer = UtCaptureCreateBuffer(&captures[0]);
741 ASSERT_NE(nullptr, buffer);
743 error = tdm_capture_attach(nullptr, buffer);
744 ASSERT_NE(TDM_ERROR_NONE, error);
747 TEST_F(TDMCapture, CaptureAttachFailNullBuffer)
749 SKIP_FLAG(has_capture);
752 for (UtCapture & utCapture : captures) {
753 error = tdm_capture_attach(utCapture.capture, nullptr);
754 ASSERT_NE(TDM_ERROR_NONE, error);
758 TEST_F(TDMCapture, CaptureAttachSuccess)
760 SKIP_FLAG(has_capture);
762 tbm_surface_h buffer;
764 for (UtCapture & utCapture : captures) {
765 buffer = UtCaptureCreateBuffer(&utCapture);
766 ASSERT_NE(nullptr, buffer);
768 error = tdm_capture_attach(utCapture.capture, buffer);
769 ASSERT_EQ(TDM_ERROR_NONE, error);
773 /* tdm_pp_commit() */
775 TEST_F(TDMCapture, CaptureCommitFailNullCapture)
777 SKIP_FLAG(has_capture);
780 error = tdm_capture_commit(nullptr);
781 ASSERT_NE(TDM_ERROR_NONE, error);
784 TEST_F(TDMCapture, CaptureCommitFailDpmsOff)
786 SKIP_FLAG(has_capture);
789 for (UtCapture & utCapture : captures) {
790 error = tdm_capture_commit(utCapture.capture);
791 ASSERT_NE(TDM_ERROR_NONE, error);
795 TEST_F(TDMCaptureCommit, CaptureCommitSuccess)
797 SKIP_FLAG(has_capture);
800 ASSERT_NE(-1, UtPrepareToCapture());
802 for (UtCapture & utCapture : captures) {
803 error = tdm_capture_commit(utCapture.capture);
804 ASSERT_EQ(TDM_ERROR_NONE, error);
807 UtHandleCaptureEvent();
809 ASSERT_EQ(captures.size(), utCaptureDoneHandlerSuccessCounter);
812 TEST_F(TDMCaptureCommitThread, CaptureCommitSuccess)
814 SKIP_FLAG(has_capture);
817 ASSERT_NE(-1, UtPrepareToCapture());
819 for (UtCapture & utCapture : captures) {
820 error = tdm_capture_commit(utCapture.capture);
821 ASSERT_EQ(TDM_ERROR_NONE, error);
824 UtHandleCaptureEvent();
826 ASSERT_EQ(captures.size(), utCaptureDoneHandlerSuccessCounter);
829 TEST_F(TDMCaptureCommit, CaptureCommitSuccessScale)
831 SKIP_FLAG(has_capture);
834 ASSERT_NE(-1, UtPrepareToCapture(2.0, TDM_TRANSFORM_NORMAL));
836 for (UtCapture & utCapture : captures) {
837 error = tdm_capture_commit(utCapture.capture);
838 ASSERT_EQ(TDM_ERROR_NONE, error);
841 UtHandleCaptureEvent();
843 ASSERT_EQ(captures.size(), utCaptureDoneHandlerSuccessCounter);
846 TEST_F(TDMCaptureCommit, CaptureCommitSuccessScaleAndTransform)
848 SKIP_FLAG(has_capture);
851 ASSERT_NE(-1, UtPrepareToCapture(2.0, TDM_TRANSFORM_180));
853 for (UtCapture & utCapture : captures) {
854 error = tdm_capture_commit(utCapture.capture);
855 ASSERT_EQ(TDM_ERROR_NONE, error);
858 UtHandleCaptureEvent();
860 ASSERT_EQ(captures.size(), utCaptureDoneHandlerSuccessCounter);
863 TEST_F(TDMCaptureCommit, CaptureCommitSuccessScaleAndTransform90)
865 SKIP_FLAG(has_capture);
868 ASSERT_NE(-1, UtPrepareToCapture(2.0, TDM_TRANSFORM_90));
870 for (UtCapture & utCapture : captures) {
871 error = tdm_capture_commit(utCapture.capture);
872 ASSERT_EQ(TDM_ERROR_NONE, error);
875 UtHandleCaptureEvent();
877 ASSERT_EQ(captures.size(), utCaptureDoneHandlerSuccessCounter);
880 TEST_F(TDMCaptureCommit, CaptureCommitSuccessScaleAndTransform270)
882 SKIP_FLAG(has_capture);
885 ASSERT_NE(-1, UtPrepareToCapture(2.0, TDM_TRANSFORM_270));
887 for (UtCapture & utCapture : captures) {
888 error = tdm_capture_commit(utCapture.capture);
889 ASSERT_EQ(TDM_ERROR_NONE, error);
892 UtHandleCaptureEvent();
894 ASSERT_EQ(captures.size(), utCaptureDoneHandlerSuccessCounter);
897 TEST_F(TDMCaptureCommit, CaptureCommitSuccessScaleAndTransformFliped)
899 SKIP_FLAG(has_capture);
902 ASSERT_NE(-1, UtPrepareToCapture(2.0, TDM_TRANSFORM_FLIPPED));
904 for (UtCapture & utCapture : captures) {
905 error = tdm_capture_commit(utCapture.capture);
906 ASSERT_EQ(TDM_ERROR_NONE, error);
909 UtHandleCaptureEvent();
911 ASSERT_EQ(captures.size(), utCaptureDoneHandlerSuccessCounter);
914 TEST_F(TDMCaptureCommit, CaptureCommitSuccessScaleAndTransformFliped90)
916 SKIP_FLAG(has_capture);
919 ASSERT_NE(-1, UtPrepareToCapture(2.0, TDM_TRANSFORM_FLIPPED_90));
921 for (UtCapture & utCapture : captures) {
922 error = tdm_capture_commit(utCapture.capture);
923 ASSERT_EQ(TDM_ERROR_NONE, error);
926 UtHandleCaptureEvent();
928 ASSERT_EQ(captures.size(), utCaptureDoneHandlerSuccessCounter);
931 TEST_F(TDMCaptureCommit, CaptureCommitSuccessScaleAndTransformFliped180)
933 SKIP_FLAG(has_capture);
936 ASSERT_NE(-1, UtPrepareToCapture(2.0, TDM_TRANSFORM_FLIPPED_180));
938 for (UtCapture & utCapture : captures) {
939 error = tdm_capture_commit(utCapture.capture);
940 ASSERT_EQ(TDM_ERROR_NONE, error);
943 UtHandleCaptureEvent();
945 ASSERT_EQ(captures.size(), utCaptureDoneHandlerSuccessCounter);
948 TEST_F(TDMCaptureCommit, CaptureCommitSuccessScaleAndTransformFliped270)
950 SKIP_FLAG(has_capture);
953 ASSERT_NE(-1, UtPrepareToCapture(2.0, TDM_TRANSFORM_FLIPPED_270));
955 for (UtCapture & utCapture : captures) {
956 error = tdm_capture_commit(utCapture.capture);
957 ASSERT_EQ(TDM_ERROR_NONE, error);
960 UtHandleCaptureEvent();
962 ASSERT_EQ(captures.size(), utCaptureDoneHandlerSuccessCounter);
965 TEST_F(TDMCaptureCommit, CaptureCommitSuccessScaleStream)
967 SKIP_FLAG(has_capture);
970 ASSERT_NE(-1, UtPrepareToCapture(1.0, TDM_TRANSFORM_NORMAL, TDM_CAPTURE_TYPE_STREAM));
972 for (UtCapture & utCapture : captures) {
973 error = tdm_capture_commit(utCapture.capture);
974 ASSERT_EQ(TDM_ERROR_NONE, error);
977 UtHandleCaptureEvent();
979 ASSERT_EQ(captures.size(), utCaptureDoneHandlerSuccessCounter);