diff --git a/README.md b/README.md index aafe7a9..37d54b4 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ This library provides the ability to use hardware acceleration for video encodin cd jetson-ffmpeg mkdir build cd build - cmake .. + cmake -DJETSON_MULTIMEDIA_API_DIR=../jetson_multimedia_api .. make sudo make install sudo ldconfig @@ -86,8 +86,49 @@ Build with stubs and custom dirs example: ./ffpatch.sh ../ffmpeg Go to ffmpeg sources directory configure and build ffmpeg with nvmpi enabled and your custom options cd ../ffmpeg - ./configure --enable-nvmpi - make + + # install dependencies + sudo apt install libvpx-dev libfdk-aac-dev libx264-dev libx265-dev + sudo apt install nvidia-cuda-toolkit + + # clone ffnvcodec + git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git + cd nv-codec-headers && sudo make install && cd ~ + + # configure ffmpeg + export PATH=/usr/local/cuda/bin:$PATH + cd ffmpeg + ./configure \ + --enable-gpl \ + --enable-nonfree \ + --enable-shared \ + \ + --enable-openssl \ + \ + --enable-protocol=http \ + --enable-protocol=https \ + --enable-protocol=tcp \ + --enable-protocol=tls \ + --enable-protocol=file \ + --enable-protocol=pipe \ + \ + --enable-demuxer=mov,matroska,webm,ogg \ + --enable-decoder=opus,vorbis,aac,mp3 \ + \ + --enable-nvmpi \ + --enable-cuda \ + --enable-cuda-nvcc \ + --enable-nvenc \ + --enable-nvdec \ + --enable-cuvid \ + \ + --extra-cflags="-I/usr/local/cuda-10.2/targets/aarch64-linux/include -I/usr/src/jetson_multimedia_api/include" \ + --extra-ldflags="-L/usr/lib/aarch64-linux-gnu -L/usr/lib/aarch64-linux-gnu/tegra -L/usr/local/cuda-10.2/targets/aarch64-linux/lib" \ + --extra-libs="-lcuda -lnvbuf_utils -lnvmedia" \ + \ + --enable-ffplay + + make -j$(nproc) sudo make install **3.using** diff --git a/jetson_multimedia_api/LEGAL b/jetson_multimedia_api/LEGAL new file mode 100644 index 0000000..f9313a6 --- /dev/null +++ b/jetson_multimedia_api/LEGAL @@ -0,0 +1,33 @@ + +LEGAL NOTICE +============ + +ALL NVIDIA DESIGN SPECIFICATIONS, REFERENCE BOARDS, FILES, DRAWINGS, DIAGNOSTICS +, LISTS, AND OTHER DOCUMENTS (TOGETHER AND SEPARATELY, "MATERIALS") ARE BEING +PROVIDED "AS IS." NVIDIA MAKES NO WARRANTIES, EXPRESS, IMPLIED, STATUTORY, OR +OTHERWISE WITH RESPECT TO THE MATERIALS, AND ALL EXPRESS OR IMPLIED CONDITIONS, +REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OR CONDITION OF +TITLE, MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE +AND ON-INFRINGEMENT, ARE HEREBY EXCLUDED TO THE MAXIMUM EXTENT PERMITTED BY LAW. + +Information furnished is believed to be accurate and reliable. However, NVIDIA +Corporation assumes no responsibility for the consequences of use of such +information or for any infringement of patents or other rights of third parties +that may result from its use. No license is granted by implication or otherwise +under any patent or patent rights of NVIDIA Corporation. Specifications +mentioned in this publication are subject to change without notice. This +publication supersedes and replaces all information previously supplied. NVIDIA +Corporation products are not authorized for use as critical components in life +support devices or systems without express written approval of NVIDIA +Corporation. + +Trademarks +---------- +NVIDIA, the NVIDIA logo, CUDA, Jetson, and Tegra are trademarks or registered +trademarks of NVIDIA Corporation in the United States and other countries. Other +company and product names may be trademarks of the respective companies with +which they are associated. + +Copyright +--------- +2016 by NVIDIA Corporation. All rights reserved diff --git a/jetson_multimedia_api/LICENSE b/jetson_multimedia_api/LICENSE new file mode 100644 index 0000000..0937efe --- /dev/null +++ b/jetson_multimedia_api/LICENSE @@ -0,0 +1,393 @@ + NVIDIA Driver License Agreement + +IMPORTANT NOTICE – PLEASE READ AND AGREE BEFORE USING THE SOFTWARE. + +This license agreement (“Agreement”) is a legal agreement between you, whether +an individual or entity ("you”) and NVIDIA Corporation ("NVIDIA") and governs +your use of the NVIDIA driver, and any additional software and materials +provided (the “SOFTWARE”). + +If you don’t have the required age or authority to enter into this Agreement or +if you don’t accept all the terms below, do not use the SOFTWARE. + +You agree to use the SOFTWARE only for purposes that are permitted by this +Agreement and any applicable law or regulation in the relevant jurisdictions. + +1. License. + +1.1 Subject to the terms of this Agreement, NVIDIA grants you a non-exclusive, +revocable, non-transferable and non-sublicensable (except as expressly provided +in this Agreement) license to: + +a. Install and use copies of the SOFTWARE, + +b. Modify and create derivative works of any portion of the SOFTWARE delivered +by NVIDIA in source code format, + +c. Deploy, for your own use, the SOFTWARE on infrastructure you own or lease, +and + +d. Distribute the SOFTWARE provided for use with operating systems distributed +under the terms of an OSI-approved open source license as listed by the Open +Source Initiative at http://opensource.org, provided that (i) the binary files +thereof are not modified in any way (except for uncompressing of compressed +files) and (ii) this Agreement is provided to each SOFTWARE recipient. + +2. Limitations. + +The following license limitations apply to your use of the SOFTWARE: + +2.1 The SOFTWARE is only licensed for use in conjunction with microprocessor(s), +SoCs, and GPUs which have been (i) designed by NVIDIA and/or its affiliates and +(ii) sold (directly or indirectly) by NVIDIA and/or its affiliates (“NVIDIA +Platform”). You may only use firmware in NVIDIA Platforms. You may not translate +firmware, nor cause or permit firmware to be translated, from the architecture +or language in which it is originally provided by NVIDIA, into any other +architecture or language. + +2.2 You may not reverse engineer, decompile, or disassemble the SOFTWARE +provided in binary form, nor attempt in any other manner to obtain source code +of such SOFTWARE. + +2.3 You may not modify or create derivative works of the SOFTWARE provided in +binary form. + +2.4 You may not distribute any modified header files. + +2.5 You may not change or remove copyright or other proprietary notices in the +SOFTWARE, or misrepresent the authorship of the SOFTWARE, and you must cause any +modified files to carry prominent notices stating that you changed the files +such that modifications are not misrepresented as an original SOFTWARE. + +2.6 You may not bypass, disable, or circumvent any technical limitation, +encryption, security, digital rights management or authentication mechanism in +the SOFTWARE. + +2.7 Except as expressly granted in this Agreement, you may not sell, rent, +sublicense, distribute or transfer the SOFTWARE or provide commercial hosting +services with the SOFTWARE. + +2.8 You agree that GeForce or Titan SOFTWARE: (i) is licensed for use only on +GeForce or Titan hardware products you own, and (ii) is not licensed for +datacenter deployment. + +2.9 You may not use the SOFTWARE in any manner that would cause it to become +subject to an open source software license, subject to the terms in the +“Components Under Other Licenses” section below. 2.10 You acknowledge that the +SOFTWARE as delivered is not tested or certified by NVIDIA for use in any system +or application where the use of or failure of such system or application +developed with the SOFTWARE could result in injury, death or catastrophic damage +(each, a "Critical Application"). Examples of Critical Applications include use +in avionics, navigation, autonomous vehicle applications, automotive products, +military, medical, life support or other life critical applications. NVIDIA will +not be liable to you or any third party, in whole or in part, for any claims or +damages arising from these uses. You are solely responsible for ensuring that +systems and applications developed with the SOFTWARE include sufficient safety +and redundancy features, and comply with all applicable legal and regulatory +standards and requirements. 2.11 You agree to defend, indemnify and hold +harmless NVIDIA and its affiliates, and their respective employees, contractors, +agents, officers and directors, from and against any and all claims, damages, +obligations, losses, liabilities, costs or debt, fines, restitutions and +expenses (including but not limited to attorney’s fees and costs incident to +establishing the right of indemnification) arising out of or related to products +or services that have been developed with or use the SOFTWARE (including for use +in or for Critical Applications), and for use of the SOFTWARE outside of the +scope of this Agreement or not in compliance with its terms. + +3. Authorized Users. + +You may allow employees and contractors of your entity or of your +subsidiary(ies) to access and use the SOFTWARE from your secure network to +perform the work authorized by this Agreement on your behalf. If you are an +academic institution, you may allow users enrolled or employed by the academic +institution to access and use the SOFTWARE as authorized by this Agreement from +your secure network. You are responsible for the compliance with the terms of +this Agreement by your authorized users. Any act or omission that if committed +by you would constitute a breach of this Agreement will be deemed to constitute +a breach of this Agreement if committed by your authorized users. + +4. Pre-Release SOFTWARE. + +The SOFTWARE versions identified as alpha, beta, preview or otherwise as +pre-release may not be fully functional, may contain errors or design flaws, and +may have reduced or different security, privacy, accessibility and reliability +standards relative to commercial versions of NVIDIA software and materials. You +may use pre-release SOFTWARE at your own risk, understanding that pre-release +SOFTWARE is not intended for use in production or business-critical systems and +NVIDIA may choose not to make available a commercial version of any pre-release +SOFTWARE. 5. Support and Updates. + +NVIDIA is not obligated to support any SOFTWARE, unless there is a separate +agreement for this purpose. NVIDIA may, at its option, make available patches, +workarounds or other updates to the SOFTWARE. Unless the updates are provided +with their separate governing terms, they are deemed part of the SOFTWARE +licensed to you as provided in this Agreement. + +6. Components Under Other Licenses. + +The SOFTWARE may include or be distributed with components provided with +separate legal notices or terms that accompany the components, such as open +source software licenses and other license terms ("Other Licenses”). The +components are subject to the applicable Other Licenses, including any +proprietary notices, disclaimers, requirements and extended use rights; except +that this Agreement will prevail regarding the use of third-party open source +software, unless a third-party open source software license requires its license +terms to prevail. Open source software license means any software, data or +documentation subject to any license identified as an open source license by the +Open Source Initiative (http://opensource.org), Free Software Foundation +(http://www.fsf.org) or other similar open source organization or listed by the +Software Package Data Exchange (SPDX) Workgroup under the Linux Foundation +(http://www.spdx.org). You acknowledge and agree that it is your sole +responsibility to obtain any additional third-party licenses required to make, +have made, use, have used, sell, import, and offer for sale your products or +services that include or incorporate any third-party software and content, +including, without limitation, audio and/or video encoders and decoders and +implementations of technical standards. NVIDIA does not grant to you under this +Agreement any necessary patent or other rights, including standard essential +patent rights, with respect to any third-party software and content. + +7. Termination. + +This Agreement will automatically terminate without notice from NVIDIA if you +fail to comply with any of the terms in this Agreement or if you commence or +participate in any legal proceeding against NVIDIA with respect to the SOFTWARE. +Upon any termination, you must stop using and destroy all copies of the +SOFTWARE. You can terminate this Agreement whenever you want by stopping use of +the SOFTWARE and destroying all copies of the SOFTWARE. Your prior distributions +according to this Agreement are not affected by termination. All provisions will +survive termination, except for the licenses granted to you. + +8. Ownership. + +The SOFTWARE, including all intellectual property rights, is and will remain the +sole and exclusive property of NVIDIA or its licensors. Except as expressly +granted in this Agreement, (i) NVIDIA reserves all rights, interests, and +remedies in connection with the SOFTWARE, and (ii) no other license or right is +granted to you by implication, estoppel or otherwise. You agree to cooperate +with NVIDIA and provide reasonably requested information to verify your +compliance with this Agreement. + +9. Feedback. + +You may, but you are not obligated to, provide suggestions, requests, fixes, +modifications, enhancements, or other feedback regarding the SOFTWARE +(collectively, “Feedback”). Feedback, even if designated as confidential by you, +will not create any confidentiality obligation for NVIDIA or its affiliates. If +you provide Feedback, you grant NVIDIA, its affiliates and its designees a +non-exclusive, perpetual, irrevocable, sublicensable, worldwide, royalty-free, +fully paid-up and transferable license, under your intellectual property +rights, to publicly perform, publicly display, reproduce, use, make, have made, +sell, offer for sale, distribute (through multiple tiers of distribution), +import, create derivative works of and otherwise commercialize and exploit the +Feedback at NVIDIA’s discretion. You will not give Feedback (i) that you have +reason to believe is subject to any restriction that impairs the exercise of the +grant stated in this section; or (ii) subject to license terms which seek to +require any product incorporating or developed using such Feedback, or other +intellectual property of NVIDIA or its affiliates, to be licensed to or +otherwise shared with any third party. + +10. Governing Law and Dispute Resolution. + +10.1 Informal Resolution. If you or NVIDIA have any dispute, claim or +controversy arising out of or relating to the SOFTWARE or this Agreement +(“Dispute”), the parties agree to work in good faith to resolve the Dispute +informally. If you have a Dispute, you must first contact NVIDIA and give NVIDIA +an opportunity to resolve it by contacting NVIDIA by mail at NVIDIA Corporation, +ATTN: Legal, 2788 San Tomas Expressway, Santa Clara, California, 95051. Either +you or NVIDIA may seek to have a Dispute resolved in small claims court if all +the requirements of the small claims court are satisfied. Either you or NVIDIA +may seek to have a Dispute resolved in small claims court in your county of +residence or the small claims court in closest proximity to your residence at +any time before an arbitrator is appointed, and you may also bring a Dispute in +small claims court in the Superior Court of California, County of Santa Clara. + +10.2 Binding Arbitration. For any Disputes that are not resolved informally or +by the small claims court, you and NVIDIA each agree to resolve any such Dispute +by binding arbitration before an arbitrator from Judicial Mediation and +Arbitration Services ("JAMS") (rules available at https://www.jamsadr.com/). +Except as otherwise provided in this section, all issues are for the arbitrator +to decide, including jurisdictional and arbitrability issues and the formation, +existence, validity, interpretation, and scope of this arbitration provision. +The arbitration will be conducted in Santa Clara County, California (or the +nearest JAMS office to Santa Clara County), unless you request an in-person +hearing in your hometown or you and NVIDIA agree otherwise. You and NVIDIA +agree that the parties will arbitrate all Disputes, remedies, and requests for +relief subject to individual arbitration first, the arbitrator will only +determine issues of liability on the merits of any claim asserted, and the +arbitrator may only award declaratory or injunctive relief in favor of the +individual party seeking relief and only to the extent necessary to provide +relief warranted by that party’s individual claim. You and NVIDIA agree that any +remaining unresolved Disputes, remedies, or requests for relief may be pursued +in court only after the arbitrator’s award has been issued. In any later court +proceeding, the arbitrator’s factual findings will not be entitled to deference +by the court. Nothing in these terms will prevent a party from seeking +injunctive or other equitable relief from the courts in any jurisdiction to +prevent the actual or threatened violation of that party’s data security, +intellectual property rights, or other proprietary rights. If for any reason +this Section 10.2 is unenforceable concerning any Dispute, and a Dispute +proceeds in a court of general jurisdiction, the Dispute will be exclusively +brought in state or federal court located in Santa Clara County, California. + +10.3 Class Action, Representative Action, & Jury Trial Waiver. All Disputes +must be brought by a party in its individual capacity, and not as a plaintiff or +class member in any purported class or representative proceeding. You and NVIDIA +agree to waive the right to a jury trial, participate in class action lawsuits, +class-wide arbitrations, any collective, consolidated, or other proceeding or +request for relief where someone acts in a representative capacity. + +10.4 Right to Opt-Out. You may opt-out of the foregoing jury trial, class +action, arbitration, and collective or consolidated proceeding waiver provision +by notifying NVIDIA in writing within 30 days of commencement of use of the +SOFTWARE, within 30 days of the effective date of this Agreement, or within 30 +days of any future change NVIDIA may make to this Section 10.4. Such written +notification must be sent by mail to NVIDIA Corporation, Attn: Legal, 2788 San +Tomas Expressway, Santa Clara, California, 95051 and must include (1) your name, +(2) your address, (3) the reference to NVIDIA drivers as the software to which +the notice relates, and (4) a clear statement indicating that you do not wish to +resolve disputes through arbitration and demonstrating compliance with the +30-day time limit to opt-out. Any opt-out notification received after the +opt-out deadline or not including the required items noted in (1)-(4) in the +preceding sentence will not be valid and you will be required to pursue your +Dispute in arbitration or small claims court. Opting out of this dispute +resolution procedure will not affect the terms and conditions of this Agreement, +which still apply to you. If you opt-out of any future change NVIDIA may make to +this Section 10.4, the most recent version of Section 10.4 before the change you +rejected will apply. + +10.5 Governing Law. You and NVIDIA each agree that all Disputes will be governed +by the Federal Arbitration Act, in addition to the internal substantive laws of +the State of Delaware and the United States, without regard to or application of +its conflict of laws rules or principles. The United Nations Convention on +Contracts for the International Sale of Goods is expressly disclaimed. Any +translation of this Agreement is done for local requirements and, if there is a +dispute between the English and any non-English versions, you and NVIDIA agree +that the English version of this Agreement will govern to the extent not +prohibited by local law in your jurisdiction. + +11. Disclaimer of Warranties. + +THE SOFTWARE IS PROVIDED BY NVIDIA AS-IS AND WITH ALL FAULTS. TO THE FULLEST +EXTENT PERMITTED BY APPLICABLE LAW, NVIDIA DISCLAIMS ALL WARRANTIES AND +REPRESENTATIONS OF ANY KIND, WHETHER EXPRESS, IMPLIED OR STATUTORY, RELATING TO +OR ARISING UNDER THIS AGREEMENT, INCLUDING, WITHOUT LIMITATION, THE WARRANTIES +OF TITLE, NONINFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, +USAGE OF TRADE AND COURSE OF DEALING. WITHOUT LIMITING THE FOREGOING, NVIDIA +DOES NOT WARRANT THAT THE SOFTWARE WILL MEET YOUR REQUIREMENTS; THAT ANY DEFECTS +OR ERRORS WILL BE CORRECTED; THAT ANY CERTAIN CONTENT WILL BE AVAILABLE; OR THAT +THE SOFTWARE IS FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. + +In addition, you agree that you are solely responsible for maintaining +appropriate data backups and system restore points for systems that include the +SOFTWARE, and that NVIDIA will have no responsibility for any damage or loss to +such systems (including loss of data or access) arising from or relating to (a) +any changes to the configuration, application settings, environment variables, +registry, drivers, BIOS, or other attributes of the system (or any part of such +system) initiated through the SOFTWARE; or (b) installation of any SOFTWARE or +third party software patches through the NVIDIA update service. + +NO INFORMATION OR ADVICE GIVEN BY NVIDIA WILL IN ANY WAY INCREASE THE SCOPE OF +ANY WARRANTY EXPRESSLY PROVIDED IN THIS AGREEMENT. You are responsible for +checking that a SOFTWARE version is the appropriate one for your NVIDIA product +model, operating system, and computer hardware. + +12. Limitations of Liability. + +TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL NVIDIA BE +LIABLE FOR ANY (I) INDIRECT, PUNITIVE, SPECIAL, INCIDENTAL OR CONSEQUENTIAL +DAMAGES, OR (II) DAMAGES FOR (A) THE COST OF PROCURING SUBSTITUTE GOODS, OR (B) +LOSS OF PROFITS, REVENUES, USE, DATA OR GOODWILL ARISING OUT OF OR RELATED TO +THIS AGREEMENT, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING +NEGLIGENCE), STRICT LIABILITY, OR OTHERWISE, AND EVEN IF NVIDIA HAS BEEN ADVISED +OF THE POSSIBILITY OF SUCH DAMAGES AND EVEN IF A PARTY’S REMEDIES FAIL THEIR +ESSENTIAL PURPOSE. + +ADDITIONALLY, TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, NVIDIA’S TOTAL +CUMULATIVE AGGREGATE LIABILITY FOR ANY AND ALL LIABILITIES, OBLIGATIONS OR +CLAIMS ARISING OUT OF OR RELATED TO THIS AGREEMENT WILL NOT EXCEED FIVE U.S. +DOLLARS (US$5). + +13. Data Collection. + +If you are using the SOFTWARE on a Windows operating system, you hereby +acknowledge that at the time of SOFTWARE installation, NVIDIA will access and +collect data to: (a) properly configure and optimize the system for use with the +SOFTWARE; (b) deliver content or service through SOFTWARE; and (c) improve +NVIDIA products and services. Information collected may include configuration +data such as GPU and CPU, and operating system. + +The SOFTWARE may contain links to third party websites and services. NVIDIA +encourages you to review the privacy statements on those sites and services that +you choose to visit to understand how they may collect, use and share your data. +NVIDIA is not responsible for the privacy statements or practices of third party +sites or services. + +Please review the NVIDIA Privacy Policy, located at +https://www.nvidia.com/en-us/about-nvidia/privacy-policy, which explains +NVIDIA’s policy for collecting and using data. + +14. Assignment. + +NVIDIA may assign, delegate or transfer its rights or obligations under this +Agreement by any means or operation of law. You may not, without NVIDIA’s prior +written consent, assign, delegate or transfer any of its rights or obligations +under this Agreement by any means or operation of law, and any attempt to do so +is null and void. + +15. Trade Compliance. + + You agree to comply with all applicable export, import, trade and economic +sanctions laws and regulations, including U.S. Export Administration Regulations +and Office of Foreign Assets Control regulations. These laws include +restrictions on destinations, end-users and end-use. + +16. Government Use. + +The SOFTWARE, including related documentation (“Protected Items”) is a +“Commercial product” as this term is defined at 48 C.F.R. 2.101, consisting of +“commercial computer software” and “commercial computer software documentation” +as such terms are used in, respectively, 48 C.F.R. 12.212 and 48 C.F.R. 227.7202 +& 252.227-7014(a)(1). Before any Protected Items are supplied to the U.S. +Government, you will (i) inform the U.S. Government in writing that the +Protected Items are and must be treated as commercial computer software and +commercial computer software documentation developed at private expense; (ii) +inform the U.S. Government that the Protected Items are provided subject to the +terms of this Agreement; and (iii) mark the Protected Items as commercial +computer software and commercial computer software documentation developed at +private expense. In no event will you permit the U.S. Government to acquire +rights in Protected Items beyond those specified in 48 C.F.R. +52.227-19(b)(1)-(2) or 252.227-7013(c) except as expressly approved by NVIDIA in +writing. 17. Notices. + +Please direct your legal notices or other correspondence to NVIDIA Corporation, +2788 San Tomas Expressway, Santa Clara, California 95051, United States of +America, Attention: Legal Department. If NVIDIA needs to contact you about the +SOFTWARE, you consent to receive the notices by email and that such notices will +satisfy any legal communication requirements. + +18. Entire Agreement. + +Regarding the subject matter of this Agreement, the parties agree that (i) this +Agreement constitutes the entire and exclusive agreement between the parties and +supersedes all prior and contemporaneous communications and (ii) any additional +or different terms or conditions, whether contained in purchase orders, order +acknowledgments, invoices or otherwise, will not be binding on the receiving +party and are null and void. This Agreement may only be modified in a writing +signed by an authorized representative of each party. + +If a court of competent jurisdiction rules that a provision of this Agreement is +unenforceable, that provision will be deemed modified to the extent necessary to +make it enforceable and the remainder of this Agreement will continue in full +force and effect. + +19. No Waiver. + +No failure or delay by a party to enforce any Agreement term or obligation will +operate as a waiver by that party, or prevent the enforcement of such term or +obligation later. + +20. Licensing. + +For any questions regarding this Agreement, please contact NVIDIA at +driver-licensing@nvidia.com + +(v. November 23, 2023) diff --git a/jetson_multimedia_api/LICENSE.libnvjpeg b/jetson_multimedia_api/LICENSE.libnvjpeg new file mode 100644 index 0000000..9e3a0f3 --- /dev/null +++ b/jetson_multimedia_api/LICENSE.libnvjpeg @@ -0,0 +1,66 @@ +Portions of libnvjpeg are derived from libjpeg-8b, provided under the +following terms: + +The authors make NO WARRANTY or representation, either express or implied, +with respect to this software, its quality, accuracy, merchantability, or +fitness for a particular purpose. This software is provided "AS IS", and you, +its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this +software (or portions thereof) for any purpose, without fee, subject to these +conditions: +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice +unaltered; and any additions, deletions, or changes to the original files +must be clearly indicated in accompanying documentation. +(2) If only executable code is distributed, then the accompanying +documentation must state that "this software is based in part on the work of +the Independent JPEG Group". +(3) Permission for use of this software is granted only if the user accepts +full responsibility for any undesirable consequences; the authors accept +NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, +not just to the unmodified library. If you use our work, you ought to +acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name +in advertising or publicity relating to this software or products derived from +it. This software may be referred to only as "the Independent JPEG Group's +software". + +We specifically permit and encourage the use of this software as the basis of +commercial products, provided that all warranty or liability claims are +assumed by the product vendor. + + +ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, +sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. +ansi2knr.c is NOT covered by the above copyright and conditions, but instead +by the usual distribution terms of the Free Software Foundation; principally, +that you must include source code if you redistribute it. (See the file +ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part +of any program generated from the IJG code, this does not limit you more than +the foregoing paragraphs do. + +The Unix configuration script "configure" was produced with GNU Autoconf. +It is copyright by the Free Software Foundation but is freely distributable. +The same holds for its supporting scripts (config.guess, config.sub, +ltmain.sh). Another support script, install-sh, is copyright by X Consortium +but is also freely distributable. + +The IJG distribution formerly included code to read and write GIF files. +To avoid entanglement with the Unisys LZW patent, GIF reading support has +been removed altogether, and the GIF writer has been simplified to produce +"uncompressed GIFs". This technique does not use the LZW algorithm; the +resulting GIF files are larger than usual, but are readable by all standard +GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." + diff --git a/jetson_multimedia_api/Makefile b/jetson_multimedia_api/Makefile new file mode 100644 index 0000000..3729d4d --- /dev/null +++ b/jetson_multimedia_api/Makefile @@ -0,0 +1,69 @@ +############################################################################### +# +# Copyright (c) 2016-2020, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +############################################################################### + +SUBDIRS = \ + samples/00_video_decode \ + samples/01_video_encode \ + samples/02_video_dec_cuda \ + samples/03_video_cuda_enc \ + samples/04_video_dec_trt \ + samples/05_jpeg_encode \ + samples/06_jpeg_decode \ + samples/07_video_convert \ + samples/08_video_dec_drm \ + samples/09_camera_jpeg_capture \ + samples/10_camera_recording \ + samples/12_camera_v4l2_cuda \ + samples/13_multi_camera \ + samples/14_multivideo_decode \ + samples/15_multivideo_encode \ + samples/16_multivideo_transcode \ + samples/backend \ + samples/frontend \ + samples/v4l2cuda \ + samples/unittest_samples/decoder_unit_sample \ + samples/unittest_samples/encoder_unit_sample \ + samples/unittest_samples/transform_unit_sample \ + samples/unittest_samples/camera_unit_sample + +.PHONY: all +all: + @list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Make in $$subdir";\ + $(MAKE) -C $$subdir;\ + if [ $$? -ne 0 ]; then exit 1; fi;\ + done + +.PHONY: clean +clean: + @list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Clean in $$subdir";\ + $(MAKE) -C $$subdir clean;\ + done diff --git a/jetson_multimedia_api/README b/jetson_multimedia_api/README new file mode 100644 index 0000000..2b0c43c --- /dev/null +++ b/jetson_multimedia_api/README @@ -0,0 +1,56 @@ +############################################################################### +# +# Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +############################################################################### + +Multimedia API is a collection of lower-level APIs that support flexible +application development. The lower-level APIs enable flexibility by +providing better control over the underlying hardware blocks. + +Multimedia API includes: + + * libargus for imaging applications + + * V4L2 API for encoding, decoding, scaling, and other media functions + + * NVOSD for On-Screen display + + * Buffer Utility for buffer allocation, management, and sharing + + * NVDC-DRM for non-X11 and light-weight display system + +The included examples demonstrate how to do image processing with +CUDA, object detection and classification with cuDNN, TensorRT and OpenCV usage. + +The Multimedia API provides another application development path for those +not using a framework such as GStreamer, or for developers leveraging custom frameworks. + +Please go to the following website to download the detailed documenation, +of which name is , + + https://developer.nvidia.com/embedded/downloads diff --git a/jetson_multimedia_api/argus/CMakeLists.txt b/jetson_multimedia_api/argus/CMakeLists.txt new file mode 100644 index 0000000..6da447c --- /dev/null +++ b/jetson_multimedia_api/argus/CMakeLists.txt @@ -0,0 +1,53 @@ +# Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +add_subdirectory(apps/camera) +add_subdirectory(samples/bayerAverageMap) +add_subdirectory(samples/cudaBayerDemosaic) +add_subdirectory(samples/cudaHistogram) +add_subdirectory(samples/denoise) +add_subdirectory(samples/eglImage) +add_subdirectory(samples/gstVideoEncode) +add_subdirectory(samples/histogram) +add_subdirectory(samples/l4t_droid) +add_subdirectory(samples/l4tdroid_App) +add_subdirectory(samples/multiSensor) +add_subdirectory(samples/multiStream) +add_subdirectory(samples/oneShot) +add_subdirectory(samples/openglBox) +add_subdirectory(samples/rawBayerOutput) +add_subdirectory(samples/syncSensor) +add_subdirectory(samples/syncStereo) +add_subdirectory(samples/yuvJpeg) +add_subdirectory(samples/userAutoExposure) +add_subdirectory(samples/userAutoWhiteBalance) +add_subdirectory(samples/utils) +add_subdirectory(samples/yuvOneShot) + + +include(CPack) diff --git a/jetson_multimedia_api/argus/LICENSE.TXT b/jetson_multimedia_api/argus/LICENSE.TXT new file mode 100644 index 0000000..75d2267 --- /dev/null +++ b/jetson_multimedia_api/argus/LICENSE.TXT @@ -0,0 +1,26 @@ +Argus Camera API +Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of NVIDIA CORPORATION nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/jetson_multimedia_api/argus/README.TXT b/jetson_multimedia_api/argus/README.TXT new file mode 100644 index 0000000..43e1c08 --- /dev/null +++ b/jetson_multimedia_api/argus/README.TXT @@ -0,0 +1,93 @@ +=============================================================================== +Argus Camera API +=============================================================================== + +Included Components +------------------- + + - Argus API headers ('include/') + These headers are required to compile applications against the Argus API. + + - Sample applications ('samples/') + The included samples demonstrate many features of Argus. + + - Applications ('apps/') + Includes more complex applications using Argus. + + - Documentation ('docs/') + - Core Specification (LaTeX document, 'docs/spec') + - Extensions Specifications ('docs/extensions') + - Doxygen-generated documentation from the headers ('docs/doxygen') + +Building Samples And Apps +========================= + +Requirements +------------ + +- cmake + sudo apt-get install cmake + +- build-essential + sudo apt-get install build-essential + +- pkg-config + sudo apt-get install pkg-config + +- X11 + sudo apt-get install libx11-dev + +- GTK3 + sudo apt-get install libgtk-3-dev + +- expat + sudo apt-get install libexpat1-dev + +- JPEG + sudo apt-get install libjpeg-dev + +- gstreamer-1.0 + sudo apt-get install libgstreamer1.0-dev + +- CUDA + Samples requiring CUDA (ie. cudaHistogram and syncSensor) will be silently + ignored during the build process if the CUDA toolkit is not installed. + The CUDA toolkit is included with the JetPack for L4T development pack, which + can be downloaded and installed by following the installation steps on the + NVIDIA developer website: + + https://developer.nvidia.com/embedded/jetpack + + Note that CUDA does not support gcc versions newer than gcc-6, so compiling + samples that use CUDA will also require the installation of gcc-6: + + sudo apt-get install gcc-6 g++-6 + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 10 + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-6 10 + + +Building and Installing +----------------------- + +Start in the source directory (e.g. '~/ArgusSDK/'). + + 1) Create and go into a build directory: + 'mkdir build && cd build' + + 1) Create the makefiles: + 'cmake ..' + Additional options: + - If CMake cannot find an include path for any dependencies, it may be + required to provide them explicitly. Eg: + 'cmake -DOPENGLES_INCLUDE_DIR=/path/to/khronos/includes ..' + - The DISABLE_MULTIPROCESS option may be provided to use the single-process + Argus implementation (ie. does not require nvargus-daemon service): + 'cmake -DDISABLE_MULTIPROCESS=ON ..' + + 2) Build all apps (optional flag -jN for parallel build where N is the job count): + 'make [-jN]' + Alternatively, build individual executables: + 'make [-jN] argus_openglbox' + + 3) Install: + 'sudo make install' diff --git a/jetson_multimedia_api/argus/RELEASE.TXT b/jetson_multimedia_api/argus/RELEASE.TXT new file mode 100644 index 0000000..eef7b60 --- /dev/null +++ b/jetson_multimedia_api/argus/RELEASE.TXT @@ -0,0 +1,450 @@ +=============================================================================== +Argus Camera API Release Notes +=============================================================================== + +------------------------------------------------------------------------------- +Release 0.98 (06/23/2021) +------------------------------------------------------------------------------- +NEW FEATURES: +* Ext::BlockingSessionCameraProvider extension + - Provides a method to create a blocking capture session. + - IBlockingSessionCameraProvider::createBlockingCaptureSession() creates + and returns a blocking CaptureSession using the given device. + +* Ext::DebugCaptureSession extension + - Provides a method to dump internal argus library runtime information. + - IDebugCaptureSession::dump() returns session runtime information to + the specified file descriptor. + - IDebugCaptureSession::setEventInjectionErrorMsg() sets event injection + error id. + +* Ext::InternalFrameCount extension + - Provides accessors for an internal frame count performance metric. + - Provides internal capture information in the form of an + "internal frame count", which is the total number of captures + submitted by the session including both the internal captures + as well as client-submitted requests. + - IInternalFrameCount::getInternalFrameCount() returns the internal frame + count for the request. + +* Ext::SensorEepromData extension + - Provides an interface to get EEPROM data. + - ISensorEepromData::getSensorEepromDataSize() returns the size of the + EEPROM data. + - ISensorEepromData::getSensorEepromData()] copies back the EEPROM data + to the provided memory location. The maximum supported size of the + EEPROM data that can be read is 1024. + +* Ext::SensorOtpData extension + - Provides an interface to get OTP data. + - ISensorOtpData::getSensorOtpDataSize() returns the size of the + OTP data. + - ISensorOtpData::getSensorOtpData()] copies back the OTP data + to the provided memory location. The maximum supported size of the + OTP data that can be read is 512. + +* Ext::SensorPrivateMetadata extension + - Provides accessors for sensor embedded metadata through different + interfaces mentioned below. This data is metadata that the sensor embeds + inside the frame, the type and formatting of which depends on the sensor. + - ISensorPrivateMetadataCaps::getMetadataSize() returns the size in bytes + of the private metadata. + - ISensorPrivateMetadataRequest::setMetadataEnable() enables the sensor + private metadata, will only work if the sensor supports embedded metadata. + - ISensorPrivateMetadataRequest::getMetadataEnable() returns if the + metadata is enabled for this request. + - ISensorPrivateMetadata::getMetadataSize() returns the size of the + embedded metadata. + - ISensorPrivateMetadata::getMetaData() copies back the metadata to + the provided memory location. + +* Ext::SensorPrivateMetadataClientBuffer extension + - Provides accessors for set client buffer for sensor embedded metadata. + - ISensorPrivateMetadataClientBufferRequest::setClientMetadataBuffer() + client allocates the metadata buffer and sets the address of the buffer, + Argus writes the sensor metadata directly to it. Only supported in + single process mode. + - ISensorPrivateMetadataClientBufferRequest::getClientMetadataBufferEnable() + returns if client metadata buffer is used for this request. + +* Ext::SensorTimestampTsc extension + - Provides a timestamp interface to get tegra wide timestamp system counter + (TSC) HW timestamp. + - ISensorTimestampTsc::getSensorSofTimestampTsc() returns the VI HW + start of frame (SOF) timestamp based on tegra wide timestamp system + counter (TSC). This is the start timestamp for the sensor (in nanoseconds). + - ISensorTimestampTsc::getSensorEofTimestampTsc() returns the VI HW + end of frame (EOF) timestamp based on tegra wide timestamp system + counter (TSC). This is the end timestamp for the sensor (in nanoseconds). + +* Ext::SyncSensorCalibrationData extension + - Provides access to synchronized sensor calibration data. + - ISyncSensorCalibrationData::getSyncSensorModuleId() returns the + sync sensor module id in the provided memory location. + The maximum supported length of sync sensor id string is 32. + - ISyncSensorCalibrationData::getImageSizeInPixels() returns the size of + the image in pixels. + - ISyncSensorCalibrationData::getFocalLength()] returns the focal length + fx and fy from intrinsic parameters. + - ISyncSensorCalibrationData::getSkew() returns the skew from intrinsic + parameters. + - ISyncSensorCalibrationData::getPrincipalPoint() returns the principal + point (optical center) x and y from intrinsic parameters. + - ISyncSensorCalibrationData::getLensDistortionType() returns the lens + distortion type as per the model being used. + - ISyncSensorCalibrationData::getFisheyeMappingType() returns the mapping + type in case of fisheye distortion. + - ISyncSensorCalibrationData::getRadialCoeffsCount() returns the radial + coefficients count in case of polynomial or fisheye distortion. + - ISyncSensorCalibrationData::getRadialCoeffs() returns the radial + coefficients vector as per distortion type and size of the vector is + given by getRadialCoeffsCount(). + - ISyncSensorCalibrationData::getTangentialCoeffsCount() returns the + tangential coefficients count in case of polynomial distortion. + - ISyncSensorCalibrationData::getTangentialCoeffs() returns the tangential + coefficients in case of polynomial distortion and size of the vector is + given by getTangentialCoeffsCount(). + - ISyncSensorCalibrationData::getRotationParams() returns the rotation + parameter expressed in Rodrigues notation from extrinsic parameters. + - ISyncSensorCalibrationData::getTranslationParams() returns the + translation parameters in x, y and z co-ordinates with respect to a + reference point from extrinsic parameters. + - ISyncSensorCalibrationData::isImuSensorAvailable() returns whether + IMU sensor is present or not. + - ISyncSensorCalibrationData::getLinearAccBias() returns the linear + acceleration bias for all three axes x, y and z of the IMU device. + - ISyncSensorCalibrationData::getAngularVelocityBias() returns the angular + velocity bias for all three axes x, y and z of the IMU device. + - ISyncSensorCalibrationData::getGravityAcc() returns the gravity + acceleration for all three axes x, y and z of the IMU device. + - ISyncSensorCalibrationData::getImuRotationParams() returns the IMU + rotation parameter expressed in Rodrigues notation from extrinsic parameters. + - ISyncSensorCalibrationData::getImuTranslationParams() returns the IMU + translation parameters in x, y and z co-ordinates with respect to a + reference point from extrinsic parameters. + +CHANGES: +* Argus is supported on all Jetson Linux platforms. + +* Point3D added as a new data type which provides coordinates of a + three-dimensional point. + +* SensorPlacement parameter added to ICameraProperties interface which gives + camera sensor placement position on the module. + +* isBufferFormatSupported parameter added to ISensorMode interface which + checks if the provided buffer is supported by camera device. + +* BayerHistogramRegion parameter added to IAutocontrolSettings interface which + gives Rectangle of the bayer histogram region of interest. + +* AfRegions parameter added to IAutocontrolSettings interface which gives + Image regions considered by the AF algorithm. An empty list (the default) + means to consider the entire image. + +* BayerHistogramRegion parameter added to ICaptureMetadata interface which + gives Rectangle of the bayer histogram region of interest. + +* FlickerState parameter added to ICaptureMetadata interface which gives + Flicker state of AE at the time of capture. + +* AfRegions parameter added to ICaptureMetadata interface which gives + Regions of interest used by the AF algorithm. + +* SharpnessScore parameter added to ICaptureMetadata interface which gives + Sharpness score values calculated for corresponding AF regions. + +------------------------------------------------------------------------------- +Release 0.97 (08/10/2018) +------------------------------------------------------------------------------- +NEW FEATURES: +* Application-managed Buffer Streams + - In addition to outputting capture results to an EGLStream, clients now + have the ability to output capture results directly to client-allocated + image buffers. Initial support is limited to the use of EGLImages and + EGLSync objects, and is provided through a number of new types and + interfaces: + + StreamType + UUID type that defines the core type of the stream and defines which + interfaces the stream will support. Applications that continue to use + EGLStreams will use STREAM_TYPE_EGL (and must provide that as an + argument to ICaptureSession::createOutputStreamSettings), while the + new application-managed buffer streams support is provided with the + use of STREAM_TYPE_BUFFER. + + BufferType + UUID type that defines the type of an application-managed Buffer + resource. In this release, the only BufferType that is supported is + BUFFER_TYPE_EGL_IMAGE, which specifies that Buffer objects will wrap + EGLImage resources. + + SyncType + UUID type that defines the sync type of an application-managed Buffer + resource. The use of sync objects is optional, but they may be used to + optimize application pipelining by synchronizing Buffer data access + using hardware sync primitives. This allows Buffers to be output from + Argus before the capture is fully complete so that the application + may program its downstream pipeline earlier, reducing CPU threads and + latency. The only hardware SyncType supported in this release is + SYNC_TYPE_EGL_SYNC, which specifies that Buffer objects will use + EGLSync objects for synchronizing data access to the Buffer's image + store. Note that SYNC_TYPE_NONE is the default SyncType, which means + that hardware sync will not be used, and so Buffers will only be + passed between Argus and the client once all buffer access is + complete (ie. it will CPU wait for any data access before returning). + + IBufferOutputStreamSettings + This is used to configure Buffer OutputStream creation, and is exposed + by OutputStreamSettings objects created using STREAM_TYPE_BUFFER. + This interface provides methods to set the BufferType and SyncType + that will be used with the new stream. + + IBufferOutputStream + This is the primary interface for application-managed buffer + OutputStreams (STREAM_TYPE_BUFFER). It provides methods for + configuring and creating Buffer objects, as well as the acquire and + release and synchronization mechanisms required to pass those Buffers + between Argus and the client application. + + BufferSettings + Provided by IBufferOutputStream, this object is used to configure the + creation of Buffer objects. The interfaces exposed by this object + depends on the BufferType of the OutputStream (which is currently + limited to BUFFER_TYPE_EGL_IMAGE and IEGLImageBufferSettings). + + IEGLImageBufferSettings + This is used to set the EGLDisplay and EGLImage handles of the EGLImage + that will be wrapped by the new Buffer object. + + Buffer + Created and owned by an OutputStream, these objects wrap application- + managed buffer resources and are used to synchronize data access to + the buffer resources between Argus and the client application. Buffers + are released to their stream to be used by Argus for a capture + request, and are acquired back when the capture is complete and the + client is ready to consume the output. + + IBuffer + This provides the core features available for all BufferTypes, + including the ability to associate client pointers with a Buffer using + set/getClientData. + + IEGLImageBuffer + Provides getters for the EGLImage resources that are being wrapped by + a Buffer having the BUFFER_TYPE_EGL_IMAGE type. + + IEGLSync + When the SyncType is SYNC_TYPE_EGL_SYNC, this interface provides the + means to get or set EGLSync objects on the Buffer after acquiring the + Buffer or before releasing it for use with another capture request, + respectively. + + Note that the use of application-managed buffers, including all of the + objects and interfaces above, are demonstrated by the new eglImage sample. + +* Ext::DolWdrSendorMode extension + - Adds extra functionalities for Digital Overlap (DOL) Wide Dynamic Range + (WDR) sensor modes. + +* EGLStream::IImageHeaderlessFile interface + - Provides a means to write acquired EGLStream::Images to headerless files + (ie. raw data dump). + +CHANGES: +* StreamType parameter added to ICaptureSession:createOutputStreamSettings, and + IStream renamed to IEGLOutputStream + - Existing applications that use EGLStreams must use the new interface + name and pass STREAM_TYPE_EGL to createOutputStreamSettings to be + compatible with this release. + +* All VideoStabilization capabilities were removed. + - This feature was never fully supported, and the methods given to control + video stabilization were likely insufficient to support a proper + implementation in the future anyways. Thus, all video stabilization- + related components are being removed from the core API in favor of a + future extension (if video stabilization were to ever be added again). + +* Ext::FaceDetect extension support and sample were removed. + - NVIDIA does not offer face detection capabilities in this Argus release, + and so the face detection sample is being removed so as to not be + misleading to users (ie. providing a sample that does not actually work). + Since it's possible that face detection may be added again in another + release, the Ext::FaceDetect extension header has been left in place. + +* Added optional Rotation parameter to EGLStream::NV::ImageNativeBuffer. + +* Sample changes: + - CommonOptions added to sample utils to provide a more consistent set of + command-line parameters for all of the samples (including camera device, + sensor mode index, preview window rectangle, etc). + - NativeBuffer class added to utils to allocate native buffer objects that + may be used with Buffer OutputStreams. This NativeBuffer class wraps and + uses the NvBuffer API provided by the JetPack Multimedia APIs, and uses + the methods that API provides to create EGLImages from the NvBuffers for + use with Argus. + +* New samples: + eglImage - Demonstrates the use of the new application-managed buffer + support by creating a Buffer OutputStream from a set of EGLImages + given by the application and then making capture requests with + those Buffers. The results are then displayed by binding the + EGLImage to an OpenGL texture and then rendering on screen. + EGLSyncs are also used to increase the hardware pipelining + between Argus and OpenGL. + + cudaBayerDemosaic - Demonstrates a pipelined application that chains two + EGLStreams -- one between Argus and CUDA, and another + between CUDA and OpenGL -- in order to consume a Bayer + EGLStream with CUDA and (crudely) demosaic into another + RGBA stream which is then rendered on screen by OpenGL. + +BUG FIXES: +* N/A + +KNOWN ISSUES: +* N/A + +ADDITIONAL NOTES: +* N/A + +------------------------------------------------------------------------------- +Release 0.96 (10/05/2016) +------------------------------------------------------------------------------- +NEW FEATURES: +* Ext::BayerAverageMap - Provides pixel averages and clipping statistics. +* Edge enhancement controls and metadata. +* Saturation controls and metadata. +* Improved denoise controls and metadata. +* Improved white balance controls. +* Per-stream post-processing enable. + +* New samples: + userAutoExposure - Demonstrates manual exposure time and analog gain + controls using a basic auto-exposure algorithm. + userAutoWhiteBalance - Demonstrates manual white balance controls. + denoise - Uses two streams to render a side-by-side comparison + of the effect of enabling denoise algorithms. + bayerAverageMap - Uses the BayerAverageMap extension to visualize the + average color and clipping statistics. + +CHANGES: +* The multiprocess implementation is now used by default. +* Various IStreamSettings controls moved into IRequest. +* BayerTuple class replaces generic float[4] usage. +* BayerSharpnessMap::getBinData returns the entire sharpness map instead of + requiring per-bin/per-channel calls. +* ICaptureSession::stopRepeat() returns the range of capture IDs that were + submitted by the repeat[Burst]() call being stopped. + +BUG FIXES: +* Gain ranges/values corrected. +* Many stability and multiprocess fixes. + +KNOWN ISSUES: +* N/A + +ADDITIONAL NOTES: +* Various debug information and all Argus API errors will be output by the + nvargus-daemon service, which writes to syslog by default. The following may + be used to monitor this logging: + $ tail -f /var/log/syslog | grep argus +* If an application crash/hang occurs, the nvargus-daemon service may be left in + a bad state, and the hardware may be unavailable for a short time afterwards. + When this occurs it is best to restart the nvargus-daemon service and wait for + about 15 seconds before attempting to run another application: + sudo service nvargus-daemon restart + +------------------------------------------------------------------------------- +Release 0.95 (07/25/2016) +------------------------------------------------------------------------------- +NEW FEATURES: +* Multi-process support. This adds an nvargus-daemon system service and + corresponding client-side library that applications link against in order to + enable multi-process support. Besides changing the Argus library being linked + against, no other application changes are required for multi-process support. + + To link applications for multi-process use, replace the libnvargus.so library + name with libnvargus_socketclient.so. Alternatively, if using the CMake build + system with the sample applications, provide the optional MULTIPROCESS flag + during the makefile generation step: + 'cmake -DMULTIPROCESS=ON ..' + + Multiprocess applications require the nvargus-daemon service to be running. + This service runs automatically at boot time, though it remains uninitialized + until the first multi-process Argus application is launched. Once the + service is initialized the daemon will lock the camera resources on the + device and single-process Argus applications will fail to operate. + The nvargus-daemon service can be controlled using the following: + 'sudo service nvargus-daemon [stop|start|restart]' + Error logging from the daemon will be output to the syslog (/var/log/syslog) + +* Feature-rich camera application sample with full GUI support. + (Previously 'samples/camera', moved to 'apps/camera'.) + +* New samples: + gstVideoEncode - Encodes video through a GStreamer consumer. + multiStream - Uses two OutputStreams for simultaneous still captures and + preview from a single device. + multiSensor - Opens two devices for simultaneous still captures from one + device and preview from the other. + oneShot - "Bare minimum" Argus app; takes a single snapshot. + syncSensor - Computes the stereo disparity between two syncronized + sensors. + +CHANGES: +* EGLStream creation is now handled directly by Argus during OutputStream + creation instead of requring applications to first create an EGLStream before + connecting Argus. + +* Argus::EGLStream components (FrameConsumer, Frame, Image, etc.) moved out of + Argus to become its own API. It continues to use Argus types, and includes + functionality that interact directly with Argus (eg. Argus metadata support + and FrameConsumer creation from an OutputStream), but is otherwise independent + from Argus and can be used without an open CameraProvider. This API is still + contained in libnvargus.so, but is expected to be moved to its own library in a + future release. + +BUG FIXES: +* Face detection and sample rendering orientation fixed. +* All sensor modes are exposed (previously limited to one mode). + +KNOWN ISSUES: +* Histogram stats only returning first 64 of 256 bins. +* Instability with multi-sensor boards (eg. E3323). + +------------------------------------------------------------------------------- +Release 0.91 (03/10/2016) +------------------------------------------------------------------------------- +NEW FEATURES: +* Initial Argus release. + +NOTES: +* As this is a beta release, the interfaces are not guaranteed to be +immutable; they may not be compatible with interfaces of the same name +from either previous or future releases. Interface changes since the +last release are listed in the "CHANGES" section below. + +* Current EGLStream Buffer Format Support: + + Format State + ======================= ========== + PIXEL_FMT_Y8 Not Supported + PIXEL_FMT_Y16 Not Supported + PIXEL_FMT_YCbCr_420_888 Works with all consumers. + PIXEL_FMT_YCbCr_422_888 Not Supported + PIXEL_FMT_YCbCr_444_888 Not Supported + PIXEL_FMT_JPEG_BLOB Not Supported (TODO: Remove format) + PIXEL_FMT_RAW16 Works with all consumers + +CHANGES: +* N/A + +BUG FIXES: +* N/A + +KNOWN ISSUES: +* The face detection algorithm is not detecting the device orientation + correctly, and thus the input to the detection algorithm may be inverted + with respect to the sensor. If face detection does not appear to be working, + rotating the sensor 180 degrees may help. diff --git a/jetson_multimedia_api/argus/apps/camera/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/CMakeLists.txt new file mode 100644 index 0000000..cdb0183 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/CMakeLists.txt @@ -0,0 +1,46 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(ArgusCamera) + +set (ArgusCamera_VERSION_MAJOR 1) +set (ArgusCamera_VERSION_MINOR 0) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(Argus REQUIRED) +find_package(OpenGLES REQUIRED) +find_package(EGL REQUIRED) +find_package(EXPAT REQUIRED) + +add_subdirectory(ui) +add_subdirectory(common) +add_subdirectory(modules) +add_subdirectory(renderer) + +include(CPack) diff --git a/jetson_multimedia_api/argus/apps/camera/README.TXT b/jetson_multimedia_api/argus/apps/camera/README.TXT new file mode 100644 index 0000000..581ad53 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/README.TXT @@ -0,0 +1,67 @@ +=============================================================================== +Argus Camera Application +=============================================================================== + +Overview +======== + +Design +------ + +The main design goal was to create a modular camera application. Functionality like video recording +or image capturing is encapsulated in modules which easily can be added to the application. +There is a central entity, the 'Dispatcher', managing the state, like the current device, sensor +mode and many others. The 'Dispatcher' also provides functionality to simplify using Argus from +the modules. + +Directory structure +------------------- + +common + Shared functionality like mutex, timing, conditional variable. The app also uses shared + code from the 'samples/utils' directory. +docs + Doxgen documentation. +modules + Functional entities, includes the Dispatcher, XML config file reading/writing, perf tracking. +modules/tasks + Tasks provide functionality like image capturing or video recording. +renderer + Provides support for rendering and composing EGL streams. +ui + User interface implementations, includes command line and GUI code. +ui/camera + Camera main application code. +ui/capture + Capture application module UI implementation. +ui/common + Base application and application module classes. +ui/gallery + Gallery application module UI implementation. +ui/multiExposure + Multi exposure application module UI implementation. +ui/multiSession + Multi session application module UI implementation. +ui/video + Video application module UI implementation. + +Usage +===== + +Command Line +------------ + +To get information on command line usage open a terminal and type + argus_camera --help + +Keyboard +-------- + +To get information on keyboard usage open a terminal and type + argus_camera --help +Keys are only recognized if the preview area has focus. + +Graphical User Interface (GUI) +------------------------------ + +All command line parameters and actions can also be executed using the GUI. \ No newline at end of file diff --git a/jetson_multimedia_api/argus/apps/camera/common/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/common/CMakeLists.txt new file mode 100644 index 0000000..0a1b43e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/common/CMakeLists.txt @@ -0,0 +1,64 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +project(arguscameracommon) + +set(SOURCES + ConditionVariable.cpp + Mutex.cpp + Util.cpp + VideoPipeline.cpp + ) + +include_directories( + ${CMAKE_SOURCE_DIR}/apps/camera/common + ${CMAKE_SOURCE_DIR}/apps/camera/renderer + ${CMAKE_SOURCE_DIR}/samples/utils + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ) + +add_library(${PROJECT_NAME} STATIC ${SOURCES}) + +# Begin of gstreamer +find_package(PkgConfig REQUIRED) + +pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0) +include_directories(${GSTREAMER_INCLUDE_DIRS}) +target_link_libraries(${PROJECT_NAME} ${GSTREAMER_LIBRARIES}) + +pkg_check_modules(GLIB REQUIRED glib-2.0) +include_directories(${GLIB_INCLUDE_DIRS}) +target_link_libraries(${PROJECT_NAME} ${GLIB_LIBRARIES}) + +add_definitions(-DGST_SUPPORTED) +# End of gstreamer + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + arguscamerarenderer + argussampleutils + ) diff --git a/jetson_multimedia_api/argus/apps/camera/common/ConditionVariable.cpp b/jetson_multimedia_api/argus/apps/camera/common/ConditionVariable.cpp new file mode 100644 index 0000000..4620cde --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/common/ConditionVariable.cpp @@ -0,0 +1,99 @@ +/* Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ConditionVariable.h" +#include "Mutex.h" +#include "Error.h" + +namespace ArgusSamples +{ + +ConditionVariable::ConditionVariable() + : m_initialized(false) +{ +} + +ConditionVariable::~ConditionVariable() +{ + shutdown(); +} + +bool ConditionVariable::initialize() +{ + if (!m_initialized) + { + if (pthread_cond_init(&m_cond, NULL) != 0) + ORIGINATE_ERROR("Failed to initialize condition variable"); + m_initialized = true; + } + + return true; +} + +bool ConditionVariable::shutdown() +{ + if (m_initialized) + { + if (pthread_cond_destroy(&m_cond) != 0) + ORIGINATE_ERROR("Failed to destroy condition variable"); + m_initialized = false; + } + + return true; +} + +bool ConditionVariable::broadcast() const +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + + if (pthread_cond_broadcast(&m_cond) != 0) + ORIGINATE_ERROR("pthread_cond_broadcast failed"); + return true; +} + +bool ConditionVariable::signal() const +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + + if (pthread_cond_signal(&m_cond) != 0) + ORIGINATE_ERROR("pthread_cond_signal failed"); + return true; +} + +bool ConditionVariable::wait(const Mutex& mutex) const +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + + if (pthread_cond_wait(&m_cond, mutex.getPThreadMutex()) != 0) + ORIGINATE_ERROR("pthread_cond_signal failed"); + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/common/ConditionVariable.h b/jetson_multimedia_api/argus/apps/camera/common/ConditionVariable.h new file mode 100644 index 0000000..cba96d8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/common/ConditionVariable.h @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef CAMERA_COMMON_CONDITION_VARIABLE_H +#define CAMERA_COMMON_CONDITION_VARIABLE_H + +#include + +namespace ArgusSamples +{ + +class Mutex; + +/** + * Conditional + */ +class ConditionVariable +{ +public: + ConditionVariable(); + ~ConditionVariable(); + + /** + * Create the underlying condition variable. This method must be called before any other + * methods. + */ + bool initialize(); + + /** + * Destroy the underlying condition variable. After this call, this object can no longer be used + * (until and unless a future call to @c initialize()). Calling this method if the + * object is not initialized generates no error, but silently returns. + */ + bool shutdown(); + + /** + * Broadcast the condition variable. This method is declared @c const for convenience. + */ + bool broadcast() const; + + /** + * Signal the condition variable. This method is declared @c const for convenience. + */ + bool signal() const; + + /** + * Wait on the condition variable. This method is declared @c const for convenience. + * @param [in] mutex The mutex that will be released while waiting. When multiple threads + * are waiting concurrently, they must all be using the same mutex. + */ + bool wait(const Mutex& mutex) const; + +private: + bool m_initialized; + /** + * pthread conditional variable, this is 'mutable' so that 'const' functions can be used. + */ + mutable pthread_cond_t m_cond; + + /** + * Hide copy constructor and assignment operator + */ + ConditionVariable(ConditionVariable &other); + const ConditionVariable& operator = (const ConditionVariable&); +}; + +} // namespace ArgusSamples + +#endif // CAMERA_COMMON_CONDITION_VARIABLE_H diff --git a/jetson_multimedia_api/argus/apps/camera/common/Mutex.cpp b/jetson_multimedia_api/argus/apps/camera/common/Mutex.cpp new file mode 100644 index 0000000..3f57922 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/common/Mutex.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "Mutex.h" +#include "Error.h" + +namespace ArgusSamples +{ + +Mutex::Mutex() + : m_initialized(false) +{ +} + +Mutex::~Mutex() +{ + shutdown(); +} + +bool Mutex::initialize() +{ + if (!m_initialized) + { + if (pthread_mutex_init(&m_mutex, NULL) != 0) + ORIGINATE_ERROR("Failed to initialize mutex"); + m_initialized = true; + } + + return true; +} + +bool Mutex::shutdown() +{ + if (m_initialized) + { + if (pthread_mutex_destroy(&m_mutex) != 0) + ORIGINATE_ERROR("Failed to destroy mutex"); + m_initialized = false; + } + + return true; +} + +bool Mutex::lock() const +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + + if (pthread_mutex_lock(&m_mutex) != 0) + ORIGINATE_ERROR("Failed to lock mutex"); + + return true; +} + +bool Mutex::unlock() const +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + + if (pthread_mutex_unlock(&m_mutex) != 0) + ORIGINATE_ERROR("Failed to unlock mutex"); + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/common/Mutex.h b/jetson_multimedia_api/argus/apps/camera/common/Mutex.h new file mode 100644 index 0000000..e8c0bdc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/common/Mutex.h @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef MUTEX_H +#define MUTEX_H + +#include + +#include "Error.h" + +namespace ArgusSamples +{ + +class ConditionVariable; + +/** + * Mutex + */ +class Mutex +{ +public: + Mutex(); + ~Mutex(); + + /** + * Create the underlying mutex. This method must be called before any other methods. + */ + bool initialize(); + + /** + * Destroy the underlying mutex. After this call, this object can no longer be used + * (until and unless a future call to @c initialize()). Calling this method if the + * object is not initialized generates no error, but silently returns. + */ + bool shutdown(); + + /** + * Lock the mutex. This method is declared @c const for convenience. + */ + bool lock() const; + + /** + * Unlock the mutex. This method is declared @c const for convenience. + */ + bool unlock() const; + +private: + bool m_initialized; + /** + * pthread mutex, this is 'mutable' so that 'const' functions can be used. + */ + mutable pthread_mutex_t m_mutex; + + /** + * Hide copy constructor and assignment operator + */ + Mutex(Mutex &other); + const Mutex& operator = (const Mutex&); + + friend class ConditionVariable; + + pthread_mutex_t* getPThreadMutex() const + { + return &m_mutex; + } +}; + +/** + * An RAII-style class for acquiring a Mutex. + * The mutex is acquired in the constructor and released in the destructor. + * This class is NOT to be subclassed. + */ +class ScopedMutex +{ +public: + explicit ScopedMutex(Mutex& mutex) + : m_mutex(&mutex) + , m_isLocked(false) + { + m_isLocked = m_mutex->lock(); + } + + ~ScopedMutex() + { + if (m_isLocked) + m_mutex->unlock(); + } + + bool expectLocked() const + { + if (!m_isLocked) + ORIGINATE_ERROR("Expected mutex to be locked"); + return true; + } + +private: + Mutex *m_mutex; + bool m_isLocked; + + /** + * Hide default/copy constructor and assignment operator + */ + ScopedMutex(); + ScopedMutex(ScopedMutex &other); + ScopedMutex& operator = (const ScopedMutex&); +}; + +} // namespace ArgusSamples + +#endif // MUTEX_H diff --git a/jetson_multimedia_api/argus/apps/camera/common/ScopedGuard.h b/jetson_multimedia_api/argus/apps/camera/common/ScopedGuard.h new file mode 100644 index 0000000..9e51eb7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/common/ScopedGuard.h @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef SCOPED_GUARD_H +#define SCOPED_GUARD_H + +namespace ArgusSamples +{ + +/** + * RAII-syle class performing an action when control flow leaves the scope. Typically the action + * to be performed is to undo a previous action in case of an error. + */ +template class ScopedGuard +{ +public: + /** + * Action function type. + */ + typedef bool (T::*ActionType)(); + + /** + * Constructor + * + * @param object [in] the object to perform the action on + * @param action [in] the action to perform + */ + ScopedGuard(T *object, ActionType action) + : m_object(object) + , m_action(action) + { + } + /** + * Destructor + */ + ~ScopedGuard() + { + leaveScope(); + } + + /** + * Cancel the action associated with this instance. + */ + void cancel() + { + m_action = NULL; + } + +private: + T *m_object; + ActionType m_action; + + /** + * Called when leaving the scope. Calls action and resets the action. + */ + void leaveScope() + { + if (m_action && m_object) + { + if (!(m_object->*m_action)()) + REPORT_ERROR("Action call failed"); + m_object = NULL; + m_action = NULL; + } + } + + /** + * Hide default/copy constructor and assignment operator + */ + ScopedGuard(); + ScopedGuard(ScopedGuard &other); + const ScopedGuard& operator = (const ScopedGuard&); +}; + +} // namespace ArgusSamples + +#endif // SCOPED_GUARD_H diff --git a/jetson_multimedia_api/argus/apps/camera/common/Util.cpp b/jetson_multimedia_api/argus/apps/camera/common/Util.cpp new file mode 100644 index 0000000..2df7d95 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/common/Util.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include + +#include + +#include "Util.h" +#include "Error.h" +#include "string.h" + +namespace ArgusSamples +{ + +TimeValue getCurrentTime() +{ + struct timeval val; + + gettimeofday(&val, NULL); + + return + TimeValue::fromUSec(val.tv_usec) + + TimeValue::fromSec(static_cast(val.tv_sec)); +} + +bool validateOutputPath(const char* filename) +{ + // Test ability to write to indicated filename + FILE *fp = fopen(filename,"w"); + if (fp) + { + fclose(fp); + return true; + } + else + { + fprintf(stderr, "--------------------------------------------------------------------\n"); + fprintf(stderr, "Failure to open file '%s' for writing.\n", filename); + fprintf(stderr, "Error return code:%d (%s)\n", errno, strerror(errno)); + if (errno == EACCES) + { + fprintf(stderr, "Use command line parameter --outputpath to\n"); + fprintf(stderr, "point to a directory you have permission to write into.\n"); +#ifdef __ANDROID__ + fprintf(stderr, "As in: argus_camera --outputpath='/sdcard/DCIM' -s1 -x\n"); +#else + fprintf(stderr, "As in: argus_camera --outputpath='/tmp' -s1 -x\n"); +#endif + } + fprintf(stderr, "--------------------------------------------------------------------\n"); + return false; + } +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/common/Util.h b/jetson_multimedia_api/argus/apps/camera/common/Util.h new file mode 100644 index 0000000..dc3fdff --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/common/Util.h @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef UTIL_H +#define UTIL_H + +#include // for uint64_t +#include // for numeric_limits + +namespace ArgusSamples +{ + +/** + * A time value. Supports conversion to different time units. + */ +class TimeValue +{ +public: + TimeValue() + : m_nSec(0) + { + } + + /** + * Types used for values with various units + */ + typedef uint64_t SecType; + typedef uint64_t MSecType; + typedef uint64_t USecType; + typedef uint64_t NSecType; + typedef float CyclesPerSecType; + + // construct a infinite time value + static TimeValue infinite() + { + return TimeValue(std::numeric_limits::max()); + } + + // functions to construct from various time units + static TimeValue fromSec(float sec) + { + return TimeValue(static_cast(sec * 1e9)); + } + + static TimeValue fromSec(SecType sec) + { + return TimeValue(sec * 1000000000); + } + + static TimeValue fromMSec(MSecType mSec) + { + return TimeValue(mSec * 1000000); + } + + static TimeValue fromUSec(USecType uSec) + { + return TimeValue(uSec * 1000); + } + + static TimeValue fromNSec(NSecType nSec) + { + return TimeValue(nSec); + } + + static TimeValue fromCycelsPerSec(CyclesPerSecType cyclesPerSec) + { + return TimeValue(static_cast(1e9 / static_cast(cyclesPerSec))); + } + + // functions to set from various time uints + void setFromSec(SecType sec) + { + m_nSec = sec * 1000000000; + } + + void setFromMSec(MSecType mSec) + { + m_nSec = mSec * 1000000; + } + + void setFromUSec(USecType uSec) + { + m_nSec = uSec * 1000; + } + + void setFromNSec(NSecType nSec) + { + m_nSec = nSec; + } + + // functions to convert to various time units + SecType toSec() const + { + return m_nSec / 1000000000; + } + + MSecType toMSec() const + { + return m_nSec / 1000000; + } + + USecType toUSec() const + { + return m_nSec / 1000; + } + + NSecType toNSec() const + { + return m_nSec; + } + + CyclesPerSecType toCyclesPerSec() const + { + if (m_nSec == 0.0f) + return std::numeric_limits::max(); + + return static_cast(1e9 / static_cast(m_nSec)); + } + + // comparision and equality operators + bool operator == (const TimeValue& rhs) const + { + return (m_nSec == rhs.m_nSec); + } + + bool operator != (const TimeValue &rhs) const + { + return !(operator == (rhs)); + } + + bool operator < (const TimeValue& rhs) const + { + return (m_nSec < rhs.m_nSec); + } + + bool operator >= (const TimeValue &rhs) const + { + return !(operator < (rhs)); + } + + bool operator <= (const TimeValue &rhs) const + { + return (m_nSec <= rhs.m_nSec); + } + + bool operator > (const TimeValue &rhs) const + { + return !(operator <= (rhs)); + } + + TimeValue operator + (const TimeValue& rhs) const + { + return (m_nSec + rhs.m_nSec); + } + + TimeValue operator - (const TimeValue& rhs) const + { + return (m_nSec - rhs.m_nSec); + } + +private: + TimeValue(NSecType value) + : m_nSec(value) + { + } + + NSecType m_nSec; +}; + +/*! + * Get the current time. + */ +TimeValue getCurrentTime(); + +/* + * Validate filename by attempting to open file for writing + */ +bool validateOutputPath(const char* filename); + +/*! + * Supported still image file formats + */ +typedef enum +{ + STILL_FILE_TYPE_JPG, + STILL_FILE_TYPE_HEADERLESS +} StillFileType; + +}; // namespace ArgusSamples + +#endif // UTIL_H diff --git a/jetson_multimedia_api/argus/apps/camera/common/VideoPipeline.cpp b/jetson_multimedia_api/argus/apps/camera/common/VideoPipeline.cpp new file mode 100644 index 0000000..37145a4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/common/VideoPipeline.cpp @@ -0,0 +1,701 @@ +/* + * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include + +#include "Error.h" +#include "VideoPipeline.h" +#include "Composer.h" +#include "Util.h" + +namespace ArgusSamples +{ + +VideoPipeline::VideoPipeline() +#ifdef GST_SUPPORTED + : m_state(GST_STATE_NULL) + , m_pipeline(NULL) +#endif +{ +} + +VideoPipeline::~VideoPipeline() +{ + destroy(); +} + +///! give the video eoncoder a name so we can find it at stop() +static const char *s_videoEncoderName = "video encoder"; + +/** + * RAII helper class for calling gst_object_unref on exit from a block or function. + */ +template class GstUnrefer +{ +public: + explicit GstUnrefer(T * p) + : m_p(p) + { + } + GstUnrefer() + : m_p(NULL) + { + } + ~GstUnrefer() + { + release(); + } + + /// Cancel the unref. + void cancel() + { + m_p = NULL; + } + + /// Unref the object now. + void release() + { + if (m_p) + gst_object_unref(m_p); + m_p = NULL; + } + + /// Set the object to be unrefed. + void set(T* p) + { + release(); + m_p = p; + } + + /// Get the object. + T * get() const + { + return m_p; + } + +private: + T *m_p; + + /// Not implemented -- use default constructor + GstUnrefer(GstUnrefer& other); + /// Not implemented + GstUnrefer& operator=(GstUnrefer&); +}; + +bool VideoPipeline::setupForRecording(EGLStreamKHR videoStream, uint32_t width, uint32_t height, + float frameRate, const char *fileName, VideoFormat videoFormat, + VideoFileType videoFileType, uint32_t bitRate) +{ +#ifdef GST_SUPPORTED + // set the filename + std::string videoFileName(fileName); + if (videoFileName != "/dev/null") + { + videoFileName += "."; + videoFileName += getFileExtension(videoFileType); + PROPAGATE_ERROR(validateOutputPath(videoFileName.c_str())); + } + + // Init gstreamer + gst_init(NULL, NULL); + + // create the pipeline + m_pipeline = gst_pipeline_new("video_pipeline"); + if (!m_pipeline) + ORIGINATE_ERROR("Failed to create video pipeline"); + + // Create the capture source element + GstElement *videoSource = gst_element_factory_make("nveglstreamsrc", NULL); + if (!videoSource) + ORIGINATE_ERROR("Failed to create capture source element"); + GstUnrefer unrefer(videoSource); + if (!gst_bin_add(GST_BIN(m_pipeline), videoSource)) + ORIGINATE_ERROR("Failed to add video source to pipeline"); + unrefer.cancel(); + + g_object_set(G_OBJECT(videoSource), "display", Composer::getInstance().getEGLDisplay(), NULL); + g_object_set(G_OBJECT(videoSource), "eglstream", videoStream, NULL); + + // Create queue + GstElement *queue = gst_element_factory_make("queue", NULL); + if (!queue) + ORIGINATE_ERROR("Failed to create queue"); + unrefer.set(queue); + if (!gst_bin_add(GST_BIN(m_pipeline), queue)) + ORIGINATE_ERROR("Failed to add queue to pipeline"); + unrefer.cancel(); + + // create the encoder + GstElement *videoEncoder = NULL; + switch (videoFormat) + { + case VIDEO_FORMAT_H264: + videoEncoder = gst_element_factory_make("omxh264enc", s_videoEncoderName); + break; + case VIDEO_FORMAT_H265: + videoEncoder = gst_element_factory_make("omxh265enc", s_videoEncoderName); + break; + case VIDEO_FORMAT_VP8: + videoEncoder = gst_element_factory_make("omxvp8enc", s_videoEncoderName); + break; + case VIDEO_FORMAT_VP9: + videoEncoder = gst_element_factory_make("omxvp9enc", s_videoEncoderName); + break; + default: + ORIGINATE_ERROR("Unhandled video format"); + } + if (!videoEncoder) + ORIGINATE_ERROR("Failed to create video encoder"); + unrefer.set(videoEncoder); + if (!gst_bin_add(GST_BIN(m_pipeline), videoEncoder)) + ORIGINATE_ERROR("Failed to add video encoder to pipeline"); + unrefer.cancel(); + + // if no bitrate is given select from reasonable presets + if (bitRate == 0) + { + if (height < 720) + bitRate = VIDEO_BITRATE_4M; + else if (height < 1080) + bitRate = VIDEO_BITRATE_8M; + else if (height <= 2160) + bitRate = VIDEO_BITRATE_14M; + else + bitRate = VIDEO_BITRATE_20M; + } + + g_object_set(G_OBJECT(videoEncoder), "bitrate", bitRate, NULL); + + /* + * Currently, of all the supported videoEncoders above: H264, H265, VP8 and VP9, Only H265 + * supports resolution > 4k. + */ + const uint32_t WIDTH_4K = 3840; + if (width > WIDTH_4K && videoFormat != VIDEO_FORMAT_H265) + { + ORIGINATE_ERROR("\n Resolution > 4k requires videoformat H265 \n"); + } + // set video encoding profile for h.264 to high to get optmized video quality + if (videoFormat == VIDEO_FORMAT_H264) + { + g_object_set(G_OBJECT(videoEncoder), "profile", VIDEO_AVC_PROFILE_HIGH, NULL); + } + + // create the muxer + if (videoFormat == VIDEO_FORMAT_VP9) + { + printf("\nThe VP9 video format is not supported on Jetson-tx1.\n"); + } + + if (((videoFormat == VIDEO_FORMAT_H265) || (videoFormat == VIDEO_FORMAT_VP9)) && + (videoFileType != VIDEO_FILE_TYPE_MKV)) + { + printf("\nThe video format H265/VP9 is only supported with MKV in current GST version. " + "Selecting MKV as container.\n"); + videoFileType = VIDEO_FILE_TYPE_MKV; + } + + GstElement *videoMuxer = NULL; + switch (videoFileType) + { + case VIDEO_FILE_TYPE_MP4: + videoMuxer = gst_element_factory_make("qtmux", NULL); + break; + case VIDEO_FILE_TYPE_3GP: + videoMuxer = gst_element_factory_make("3gppmux", NULL); + break; + case VIDEO_FILE_TYPE_AVI: + videoMuxer = gst_element_factory_make("avimux", NULL); + break; + case VIDEO_FILE_TYPE_MKV: + videoMuxer = gst_element_factory_make("matroskamux", NULL); + break; + case VIDEO_FILE_TYPE_H265: + videoMuxer = gst_element_factory_make("identity", NULL); + break; + default: + ORIGINATE_ERROR("Unhandled video file type"); + } + if (!videoMuxer) + ORIGINATE_ERROR("Failed to create video muxer"); + unrefer.set(videoMuxer); + if (!gst_bin_add(GST_BIN(m_pipeline), videoMuxer)) + ORIGINATE_ERROR("Failed to add video muxer to pipeline"); + unrefer.cancel(); + + // create the sink + GstElement *videoSink = gst_element_factory_make("filesink", NULL); + if (!videoSink) + ORIGINATE_ERROR("Failed to create video sink"); + unrefer.set(videoSink); + if (!gst_bin_add(GST_BIN(m_pipeline), videoSink)) + ORIGINATE_ERROR("Failed to add video sink to pipeline"); + unrefer.cancel(); + + g_object_set(G_OBJECT(videoSink), "location", videoFileName.c_str(), NULL); + + // @todo 'Floating point exception' and error 'Framerate set to : 0 at + // NvxVideoEncoderSetParameter' when no setting the framerate. '0' should be VFR, use 30 + // instead + if (frameRate == 0.0f) + frameRate = 30.0f; + + // create a caps filter + GstCaps *caps = gst_caps_new_simple("video/x-raw", + "format", G_TYPE_STRING, "NV12", + "width", G_TYPE_INT, width, + "height", G_TYPE_INT, height, + "framerate", GST_TYPE_FRACTION, static_cast(frameRate * 100.f), 100, + NULL); + if (!caps) + ORIGINATE_ERROR("Failed to create caps"); + + GstCapsFeatures *feature = gst_caps_features_new("memory:NVMM", NULL); + if (!feature) + { + gst_caps_unref(caps); + ORIGINATE_ERROR("Failed to create caps feature"); + } + + gst_caps_set_features(caps, 0, feature); + + // link the source to the queue via the capture filter + if (!gst_element_link_filtered(videoSource, queue, caps)) + { + gst_caps_unref(caps); + ORIGINATE_ERROR("Failed to link source to queue"); + } + gst_caps_unref(caps); + + // link the queue to the encoder + if (!gst_element_link(queue, videoEncoder)) + ORIGINATE_ERROR("Failed to link queue to encoder"); + + // link the encoder pad to the muxer + if (videoFileType == VIDEO_FILE_TYPE_H265) + { + // H265 has a identity muxer, need to link directly + if (!gst_element_link(videoEncoder, videoMuxer)) + ORIGINATE_ERROR("Failed to link encoder to muxer"); + } + else + { + if (!gst_element_link_pads(videoEncoder, "src", videoMuxer, "video_%u")) + ORIGINATE_ERROR("Failed to link encoder to muxer pad"); + } + + // link the muxer to the sink + if (!gst_element_link(videoMuxer, videoSink)) + ORIGINATE_ERROR("Failed to link muxer to sink"); + + return true; +#else // GST_SUPPORTED + ORIGINATE_ERROR("Not supported"); +#endif // GST_SUPPORTED +} + +#ifdef GST_SUPPORTED +/** + * Modify object flag values by name. + */ +static bool objectModifyFlags(GObject *obj, const char *flagName, const char *valueName, bool set) +{ + guint count; + GParamSpec **spec = g_object_class_list_properties(G_OBJECT_GET_CLASS(obj), &count); + + for (guint index = 0; index < count; ++index) + { + GParamSpec *param = spec[index]; + if (strcmp(param->name, flagName) == 0) + { + if (!G_IS_PARAM_SPEC_FLAGS(param)) + ORIGINATE_ERROR("Param '%s' is not a flag", flagName); + + GParamSpecFlags *pflags = G_PARAM_SPEC_FLAGS(param); + GFlagsValue *value = g_flags_get_value_by_nick(pflags->flags_class, valueName); + if (!value) + ORIGINATE_ERROR("Value '%s' of flag '%s' not found", valueName, flagName); + + gint flags; + g_object_get(obj, flagName, &flags, NULL); + if (set) + flags |= value->value; + else + flags &= ~value->value; + g_object_set(obj, flagName, flags, NULL); + + return true; + } + } + + ORIGINATE_ERROR("Param '%s' not found", flagName); +} +#endif // GST_SUPPORTED + +bool VideoPipeline::setupForPlayback(EGLStreamKHR *videoStream, const char *fileName) +{ +#ifdef GST_SUPPORTED + // Init gstreamer + gst_init(NULL, NULL); + + // Create the source element + m_pipeline = gst_element_factory_make("playbin", "play"); + if (!m_pipeline) + ORIGINATE_ERROR("Failed to create playback pipeline"); + + // set the uri + char *uri = gst_filename_to_uri(fileName, NULL); + g_object_set(G_OBJECT(m_pipeline), "uri", uri, NULL); + g_free(uri); + uri = NULL; + + PROPAGATE_ERROR(objectModifyFlags(G_OBJECT(m_pipeline), "flags", "text", false)); + PROPAGATE_ERROR(objectModifyFlags(G_OBJECT(m_pipeline), "flags", "native-video", true)); + + // create the audio sink + GstElement *audioSink = gst_element_factory_make("autoaudiosink", "audio_sink"); + if (!audioSink) + ORIGINATE_ERROR("Failed to create audio sink"); + + // set the audio sink of the pipeline + g_object_set(G_OBJECT(m_pipeline), "audio-sink", audioSink, NULL); + + // Create the sink bin, this will hold the video converter and the video sink + GstElement *videoSinkBin = gst_bin_new("video_sink_bin"); + if (!videoSinkBin) + ORIGINATE_ERROR("Failed to create video sink bin"); + + // set the video sink of the pipeline + g_object_set(G_OBJECT(m_pipeline), "video-sink", videoSinkBin, NULL); + + // Create the video converted + GstElement *videoConvert = gst_element_factory_make("nvvidconv", "video converter"); + if (!videoConvert) + ORIGINATE_ERROR("Failed to create video converter"); + GstUnrefer unrefer(videoConvert); + if (!gst_bin_add(GST_BIN(videoSinkBin), videoConvert)) + ORIGINATE_ERROR("Failed to add video convert to video sink bin"); + unrefer.cancel(); + + // Create the video sink + GstElement *videoSink = gst_element_factory_make("nvvideosink", "video sink"); + if (!videoSink) + ORIGINATE_ERROR("Failed to create video sink"); + unrefer.set(videoSink); + if (!gst_bin_add(GST_BIN(videoSinkBin), videoSink)) + ORIGINATE_ERROR("Failed to add video sink to video sink bin"); + unrefer.cancel(); + + // configure video sink + g_object_set(G_OBJECT(videoSink), "display", Composer::getInstance().getEGLDisplay(), NULL); + // get the EGL stream + *videoStream = EGL_NO_STREAM_KHR; + g_object_get(G_OBJECT(videoSink), "stream", videoStream, NULL); + if (*videoStream == EGL_NO_STREAM_KHR) + ORIGINATE_ERROR("Failed to get EGL stream from video sink"); + + if (!gst_element_link(videoConvert, videoSink)) + ORIGINATE_ERROR("Failed to link video convert to video sink"); + + // create a ghost pad so that the pipeline can connect to the bin as a sink + GstPad *pad = gst_element_get_static_pad(videoConvert, "sink"); + if (!pad) + ORIGINATE_ERROR("Failed to get sink pad of video convert"); + GstUnrefer padUnrefer(pad); + GstPad *ghostPad = gst_ghost_pad_new("sink", pad); + if (!ghostPad) + ORIGINATE_ERROR("Failed to create the ghost pad"); + GstUnrefer ghostPadUnrefer(ghostPad); + if (!gst_pad_set_active(ghostPad, TRUE)) + ORIGINATE_ERROR("Failed to set pad active"); + if (!gst_element_add_pad(videoSinkBin, ghostPad)) + ORIGINATE_ERROR("Failed to add pad"); + ghostPadUnrefer.cancel(); + padUnrefer.release(); + + return true; +#else // GST_SUPPORTED + ORIGINATE_ERROR("Not supported"); +#endif // GST_SUPPORTED +} + +bool VideoPipeline::start() +{ +#ifdef GST_SUPPORTED + if (!m_pipeline) + ORIGINATE_ERROR("Video pipeline is not set up"); + + if (m_state != GST_STATE_PLAYING) + { + // set to playing state + if (gst_element_set_state(m_pipeline, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) + ORIGINATE_ERROR("Failed to set playing state"); + + m_state = GST_STATE_PLAYING; + + /* Dump Capture - Playing Pipeline into the dot file + * Set environment variable "export GST_DEBUG_DUMP_DOT_DIR=/tmp" + * Run argus_camera and 0.00.00.*-argus_camera.dot + * file will be generated. + * Run "dot -Tpng 0.00.00.*-argus_camera.dot > image.png" + * image.png will display the running capture pipeline. + * */ + GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_pipeline), + GST_DEBUG_GRAPH_SHOW_ALL, "argus_camera"); + } + + return true; +#else // GST_SUPPORTED + ORIGINATE_ERROR("Not supported"); +#endif // GST_SUPPORTED +} + +bool VideoPipeline::pause() +{ +#ifdef GST_SUPPORTED + if (!m_pipeline) + ORIGINATE_ERROR("Video pipeline is not set up"); + + if (m_state != GST_STATE_PAUSED) + { + if (gst_element_set_state(m_pipeline, GST_STATE_PAUSED) == GST_STATE_CHANGE_FAILURE) + ORIGINATE_ERROR("Failed to set pause state"); + m_state = GST_STATE_PAUSED; + } + + return true; +#else // GST_SUPPORTED + ORIGINATE_ERROR("Not supported"); +#endif // GST_SUPPORTED +} + + +bool VideoPipeline::toggle() +{ +#ifdef GST_SUPPORTED + if (!m_pipeline) + ORIGINATE_ERROR("Video pipeline is not set up"); + + GstState newState = GST_STATE_NULL; + if (m_state == GST_STATE_PLAYING) + newState = GST_STATE_PAUSED; + else if (m_state == GST_STATE_PAUSED) + newState = GST_STATE_PLAYING; + else + ORIGINATE_ERROR("Invalid state"); + + if (gst_element_set_state(m_pipeline, newState) == GST_STATE_CHANGE_FAILURE) + ORIGINATE_ERROR("Failed to set pause state"); + + m_state = newState; + + return true; +#else // GST_SUPPORTED + ORIGINATE_ERROR("Not supported"); +#endif // GST_SUPPORTED +} + +bool VideoPipeline::rewind() +{ +#ifdef GST_SUPPORTED + if (!m_pipeline) + ORIGINATE_ERROR("Video pipeline is not set up"); + + if (!gst_element_seek_simple(m_pipeline, GST_FORMAT_TIME, + static_cast(GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT), 0)) + { + ORIGINATE_ERROR("Failed to rewind"); + } + + return true; +#else // GST_SUPPORTED + ORIGINATE_ERROR("Not supported"); +#endif // GST_SUPPORTED +} + +bool VideoPipeline::stop() +{ +#ifdef GST_SUPPORTED + if (!m_pipeline) + ORIGINATE_ERROR("Video pipeline is not set up"); + + if ((m_state == GST_STATE_PLAYING) || (m_state == GST_STATE_PAUSED)) + { + // check if there is a video encoder + GstElement *videoEncoder = gst_bin_get_by_name(GST_BIN(m_pipeline), s_videoEncoderName); + if (videoEncoder) + { + // send the end of stream event + GstPad *pad = gst_element_get_static_pad(videoEncoder, "sink"); + if (!pad) + ORIGINATE_ERROR("Failed to get 'sink' pad"); + GstUnrefer padUnrefer(pad); + if (!gst_pad_send_event(pad, gst_event_new_eos())) + ORIGINATE_ERROR("Failed to send end of stream event encoder"); + padUnrefer.release(); + + // wait for the event to go through + GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(m_pipeline)); + if (!bus) + ORIGINATE_ERROR("Failed to get bus"); + GstUnrefer busUnrefer(bus); + if (!gst_bus_poll(bus, GST_MESSAGE_EOS, GST_CLOCK_TIME_NONE)) + ORIGINATE_ERROR("Failed to wait for the eof event"); + busUnrefer.release(); + } + + // stop the pipeline + if (gst_element_set_state(m_pipeline, GST_STATE_NULL) != GST_STATE_CHANGE_SUCCESS) + ORIGINATE_ERROR("Failed to stop pipeline"); + + m_state = GST_STATE_NULL; + } + + return true; +#else // GST_SUPPORTED + ORIGINATE_ERROR("Not supported"); +#endif // GST_SUPPORTED +} + +bool VideoPipeline::destroy() +{ +#ifdef GST_SUPPORTED + if (m_pipeline) + { + PROPAGATE_ERROR(stop()); + + // delete pipeline + gst_object_unref(GST_OBJECT(m_pipeline)); + + m_pipeline = NULL; + } + + return true; +#else // GST_SUPPORTED + ORIGINATE_ERROR("Not supported"); +#endif // GST_SUPPORTED +} + +/*static*/ const char* VideoPipeline::getFileExtension(VideoFileType fileType) +{ + switch (fileType) + { + case VIDEO_FILE_TYPE_MP4: + return "mp4"; + case VIDEO_FILE_TYPE_3GP: + return "3gp"; + case VIDEO_FILE_TYPE_AVI: + return "avi"; + case VIDEO_FILE_TYPE_MKV: + return "mkv"; + case VIDEO_FILE_TYPE_H265: + return "h265"; + default: + break; + } + + return "Unhandled video file type"; +} + +bool VideoPipeline::getAspectRatio(float *aspectRatio) const +{ + if (aspectRatio == NULL) + ORIGINATE_ERROR("'aspectRatio' is NULL"); +#ifdef GST_SUPPORTED + if ((m_state != GST_STATE_PLAYING) && (m_state != GST_STATE_PAUSED)) + ORIGINATE_ERROR("Must be in paused or playing state."); + + GstState state = GST_STATE_NULL; + while ((state != GST_STATE_PLAYING) && (state != GST_STATE_PAUSED)) + { + if (gst_element_get_state(m_pipeline, &state, NULL, GST_CLOCK_TIME_NONE) == + GST_STATE_CHANGE_FAILURE) + { + ORIGINATE_ERROR("gst_element_get_state failed"); + } + } + + // Retrieve the Caps at the entrance of the video sink + GstElement *videoSink; + g_object_get(m_pipeline, "video-sink", &videoSink, NULL); + if (!videoSink) + ORIGINATE_ERROR("Failed to get video-sink"); + GstUnrefer videoSinkUnrefer(videoSink); + + GstPad *videoSinkPad = gst_element_get_static_pad(videoSink, "sink"); + if (!videoSinkPad) + ORIGINATE_ERROR("Failed to get video-sink pad"); + + GstCaps *caps = gst_pad_get_current_caps(videoSinkPad); + if (!caps) + ORIGINATE_ERROR("Failed to get video-sink pad caps"); + + *aspectRatio = 1.0f; + + GstStructure *structure = gst_caps_get_structure(caps, 0); + if (!structure) + { + gst_caps_unref(caps); + ORIGINATE_ERROR("Failed to get caps structure"); + } + + gint width, height; + gint pixelAspectRatioNumerator, pixelAspectRatioDenominator; + + if (!gst_structure_get_int(structure, "width", &width) || + !gst_structure_get_int(structure, "height", &height) || + !gst_structure_get_fraction(structure, "pixel-aspect-ratio", + &pixelAspectRatioNumerator, &pixelAspectRatioDenominator)) + { + gst_caps_unref(caps); + ORIGINATE_ERROR("Failed to get structure values"); + } + + *aspectRatio = (float)width / (float)height; + *aspectRatio *= (float)pixelAspectRatioNumerator / (float)pixelAspectRatioDenominator; + + gst_caps_unref(caps); + + return true; +#else // GST_SUPPORTED + ORIGINATE_ERROR("Not supported"); +#endif // GST_SUPPORTED +} + +bool VideoPipeline::isSupported() +{ +#ifdef GST_SUPPORTED + return true; +#else // GST_SUPPORTED + return false; +#endif // GST_SUPPORTED +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/common/VideoPipeline.h b/jetson_multimedia_api/argus/apps/camera/common/VideoPipeline.h new file mode 100644 index 0000000..56cdacb --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/common/VideoPipeline.h @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef VIDEO_PIPELINE_H +#define VIDEO_PIPELINE_H + +#include +#include + +#ifdef GST_SUPPORTED +#include +#endif + +namespace ArgusSamples +{ + +/** + * Record a video from a EGL stream + */ +class VideoPipeline +{ +public: + VideoPipeline(); + ~VideoPipeline(); + + /** + * Supported video formats + */ + typedef enum + { + VIDEO_FORMAT_H264, + VIDEO_FORMAT_H265, + VIDEO_FORMAT_VP8, + VIDEO_FORMAT_VP9 + } VideoFormat; + + /** + * Video BitRate presets + */ + typedef enum + { + VIDEO_BITRATE_4M = 4000000, + VIDEO_BITRATE_8M = 8000000, + VIDEO_BITRATE_14M = 14000000, + VIDEO_BITRATE_20M = 20000000, + VIDEO_BITRATE_MAX = 240000000 + } VideoBitRate; + + /** + * Supported video file types + */ + typedef enum + { + VIDEO_FILE_TYPE_MP4, + VIDEO_FILE_TYPE_3GP, + VIDEO_FILE_TYPE_AVI, + VIDEO_FILE_TYPE_MKV, + VIDEO_FILE_TYPE_H265 + } VideoFileType; + + /** + * Video AVC profile types, each profile indicates support for various + * performance bounds and different annexes. + */ + typedef enum { + VIDEO_AVC_PROFILE_BASELINE = 0x01, + VIDEO_AVC_PROFILE_MAIN = 0x02, + VIDEO_AVC_PROFILE_EXTENDED = 0x04, + VIDEO_AVC_PROFILE_HIGH = 0x08, + VIDEO_AVC_PROFILE_HIGH10 = 0x10, + VIDEO_AVC_PROFILE_MAX = 0x7FFFFFFF + } VideoAvcProfileType; + + /** + * Destroy the video pipeline + */ + bool destroy(); + + /** + * Setup the video pipeline for recording + * + * @param[in] videoStream EGL stream to record from + * @param[in] width Width of the recorded video + * @param[in] height Height of the recorded video + * @param[in] frameRate Frame rate + * @param[in] fileName File name + * @param[in] videoFormat Video format + * @param[in] videoFileType Video file type + * @param[in] bitRate Bitrate, if 0 the bitrate will be selected depending on the + * resolution + */ + bool setupForRecording(EGLStreamKHR videoStream, uint32_t width, uint32_t height, + float frameRate, const char *fileName, + VideoFormat videoFormat = VIDEO_FORMAT_H265, + VideoFileType videoFileType = VIDEO_FILE_TYPE_MKV, uint32_t bitRate = 0); + + /** + * Setup the video pipeline for playback + * + * @param[out] videoStream EGL stream + * @param[in] fileName File name + */ + bool setupForPlayback(EGLStreamKHR *videoStream, const char *fileName); + + /** + * Start recording/playback + */ + bool start(); + + /** + * Pause recording/playback + */ + bool pause(); + + /** + * Toggle recording/playback + */ + bool toggle(); + + /** + * Rewind (playback only) + */ + bool rewind(); + + /** + * Stop recording/playback + */ + bool stop(); + + /** + * Get the file extension for a video file type. + */ + static const char* getFileExtension(VideoFileType fileType); + + /** + * Get the aspect ratio of the video. The video has to be in paused or playing state. + * + * @param aspectRatio [out] + */ + bool getAspectRatio(float *aspectRatio) const; + + /** + * Get indicator of video recording being supported + */ + static bool isSupported(); + +private: +#ifdef GST_SUPPORTED + GstState m_state; + + GstElement *m_pipeline; +#endif +}; + +}; // namespace ArgusSamples + +#endif // VIDEO_PIPELINE_H diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8cpp.html new file mode 100644 index 0000000..b1a9ec8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8cpp.html @@ -0,0 +1,165 @@ + + + + + +Argus Camera Sample: ui/capture/AppModuleCapture.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleCapture.cpp File Reference
+
+
+
#include "AppModuleCapture.h"
+#include <stdlib.h>
+#include "Dispatcher.h"
+#include "Error.h"
+#include "Options.h"
+#include "tasks/StillCapture.h"
+#include "ScopedGuard.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+ + +

+Macros

#define CREATE_GUI_ELEMENT_COMBO_BOX(_NAME, _VALUE, _FROMTYPE, _TOTYPE)
+

Macro Definition Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define CREATE_GUI_ELEMENT_COMBO_BOX( _NAME,
 _VALUE,
 _FROMTYPE,
 _TOTYPE 
)
+
+Value:
assert(sizeof(_FROMTYPE) == sizeof(_TOTYPE)); \
+
PROPAGATE_ERROR(Window::IGuiElement::createValue(reinterpret_cast< \
+
Value<_TOTYPE>*>(&dispatcher._VALUE), &element)); \
+
PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
element.release();
+
+
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8cpp_source.html new file mode 100644 index 0000000..2c9f5b8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8cpp_source.html @@ -0,0 +1,315 @@ + + + + + +Argus Camera Sample: ui/capture/AppModuleCapture.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleCapture.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include "AppModuleCapture.h"
+
30 
+
31 #include <stdlib.h>
+
32 
+
33 #include "Dispatcher.h"
+
34 #include "Error.h"
+
35 #include "Options.h"
+
36 #include "tasks/StillCapture.h"
+
37 #include "ScopedGuard.h"
+
38 
+
39 namespace ArgusSamples
+
40 {
+
41 
+
42 /* static */ bool AppModuleCapture::still(void *userPtr, const char *optArg)
+
43 {
+
44  AppModuleCapture *module = reinterpret_cast<AppModuleCapture*>(userPtr);
+
45  uint32_t count = 1;
+
46 
+
47  if (optArg)
+
48  {
+
49  count = atoi(optArg);
+
50  if (count < 1)
+
51  ORIGINATE_ERROR("'COUNT' is invalid, must be at least 1");
+
52  }
+
53 
+
54  // start the capture module
+
55  PROPAGATE_ERROR(module->start());
+
56  // the scoped guard is used to call the stop function if following calls fail so that
+
57  // the function is exited with module stopped.
+ +
59 
+
60  while (count)
+
61  {
+
62  PROPAGATE_ERROR(module->m_stillCapture.execute());
+
63  PROPAGATE_ERROR(Window::getInstance().pollEvents());
+
64  --count;
+
65  }
+
66 
+
67  // stop the module
+
68  runningGuard.cancel();
+
69  PROPAGATE_ERROR(module->stop());
+
70 
+
71  return true;
+
72 }
+
73 
+
74 /* static */ bool AppModuleCapture::capture(void *userPtr, const char *optArg)
+
75 {
+
76  AppModuleCapture *module = reinterpret_cast<AppModuleCapture*>(userPtr);
+
77 
+
78  PROPAGATE_ERROR(module->m_stillCapture.execute());
+
79 
+
80  return true;
+
81 }
+
82 
+ +
84  : m_initialized(false)
+
85  , m_running(false)
+
86  , m_guiContainerConfig(NULL)
+
87  , m_guiConfig(NULL)
+
88 {
+
89 }
+
90 
+ +
92 {
+
93  shutdown();
+
94 }
+
95 
+
96 bool AppModuleCapture::initialize(Options &options)
+
97 {
+
98  if (m_initialized)
+
99  return true;
+
100 
+
101  PROPAGATE_ERROR(m_stillCapture.initialize());
+
102 
+
103  PROPAGATE_ERROR(options.addOption(
+
104  Options::Option("still", 's', "COUNT",
+
105  Options::Option::TYPE_ACTION, "do COUNT still captures and save as jpg files. ",
+
106  still, this, "1")));
+
107 
+
108  PROPAGATE_ERROR(options.addOption(
+
109  createValueOption("stillfiletype", 0, "FORMAT",
+
110  "set image file type.", Dispatcher::getInstance().m_stillFileType)));
+
111 
+
112  m_initialized = true;
+
113 
+
114  return true;
+
115 }
+
116 
+ +
118 {
+
119  if (!m_initialized)
+
120  return true;
+
121 
+
122  PROPAGATE_ERROR_CONTINUE(stop());
+
123 
+
124  PROPAGATE_ERROR_CONTINUE(m_stillCapture.shutdown());
+
125 
+
126  delete m_guiConfig;
+
127  m_guiConfig = NULL;
+
128 
+
129  m_guiContainerConfig = NULL;
+
130 
+
131  m_initialized = false;
+
132  return true;
+
133 }
+
134 
+
135 bool AppModuleCapture::start(Window::IGuiMenuBar *iGuiMenuBar,
+
136  Window::IGuiContainer *iGuiContainerConfig)
+
137 {
+
138  if (m_running)
+
139  return true;
+
140 
+
141  // register key observer
+
142  PROPAGATE_ERROR(Window::getInstance().registerObserver(this));
+
143 
+
144  // initialize the GUI
+
145  if (iGuiContainerConfig && !m_guiContainerConfig)
+
146  {
+
147  // create a grid container
+
148  PROPAGATE_ERROR(Window::IGuiContainerGrid::create(&m_guiConfig));
+
149 
+
150  // create the elements
+
151  UniquePointer<Window::IGuiElement> element;
+
152  Dispatcher &dispatcher = Dispatcher::getInstance();
+
153 
+
154  Window::IGuiContainerGrid::BuildHelper buildHelper(m_guiConfig);
+
155 
+
156 #define CREATE_GUI_ELEMENT_COMBO_BOX(_NAME, _VALUE, _FROMTYPE, _TOTYPE) \
+
157  assert(sizeof(_FROMTYPE) == sizeof(_TOTYPE)); \
+
158  PROPAGATE_ERROR(Window::IGuiElement::createValue(reinterpret_cast< \
+
159  Value<_TOTYPE>*>(&dispatcher._VALUE), &element)); \
+
160  PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
161  element.release();
+
162 
+
163  CREATE_GUI_ELEMENT_COMBO_BOX("Still File Type", m_stillFileType,
+
164  StillFileType, Window::IGuiElement::ValueTypeEnum);
+
165 
+
166 #undef CREATE_GUI_ELEMENT_COMBO_BOX
+
167 
+
168  PROPAGATE_ERROR(Window::IGuiElement::createAction("Capture",
+
169  AppModuleCapture::capture, this, Window::IGuiElement::FLAG_NONE,
+
170  Window::IGuiElement::ICON_NONE, &element));
+
171  PROPAGATE_ERROR(buildHelper.append(element.get(), 2/*width*/));
+
172  element.release();
+
173 
+
174  m_guiContainerConfig = iGuiContainerConfig;
+
175  }
+
176 
+ +
178  PROPAGATE_ERROR(m_guiContainerConfig->add(m_guiConfig));
+
179 
+
180  PROPAGATE_ERROR(m_stillCapture.start());
+
181 
+
182  m_running = true;
+
183 
+
184  return true;
+
185 }
+
186 
+ +
188 {
+
189  if (!m_running)
+
190  return true;
+
191 
+
192  PROPAGATE_ERROR(m_stillCapture.stop());
+
193 
+ +
195  PROPAGATE_ERROR(m_guiContainerConfig->remove(m_guiConfig));
+
196 
+
197  // unregister key observer
+
198  PROPAGATE_ERROR(Window::getInstance().unregisterObserver(this));
+
199 
+
200  m_running = false;
+
201 
+
202  return true;
+
203 }
+
204 
+
205 bool AppModuleCapture::onKey(const Key &key)
+
206 {
+
207  if (key == Key("space"))
+
208  {
+
209  PROPAGATE_ERROR(m_stillCapture.execute());
+
210  }
+
211 
+
212  return true;
+
213 }
+
214 
+
215 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8h.html new file mode 100644 index 0000000..85644d6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: ui/capture/AppModuleCapture.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleCapture.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::AppModuleCapture
 The capture app module adds functionality to capture still images and save them as files. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8h_source.html new file mode 100644 index 0000000..08d4bc1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleCapture_8h_source.html @@ -0,0 +1,179 @@ + + + + + +Argus Camera Sample: ui/capture/AppModuleCapture.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleCapture.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef ARGUS_APPS_CAMERA_UI_APP_MODULE_CAPTURE_H
+
30 #define ARGUS_APPS_CAMERA_UI_APP_MODULE_CAPTURE_H
+
31 
+
32 #include "../common/IAppModule.h"
+
33 #include "tasks/StillCapture.h"
+
34 
+
35 namespace ArgusSamples
+
36 {
+
37 
+
38 /**
+
39  * The capture app module adds functionality to capture still images and save them
+
40  * as files.
+
41  */
+
42 class AppModuleCapture : public IAppModule, public Window::IKeyObserver
+
43 {
+
44 public:
+ +
46  virtual ~AppModuleCapture();
+
47 
+
48  /** @name IAppModule methods */
+
49  /**@{*/
+
50  virtual bool initialize(Options &options);
+
51  virtual bool shutdown();
+
52  virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL,
+
53  Window::IGuiContainer *iGuiContainerConfig = NULL);
+
54  virtual bool stop();
+
55  /**@}*/
+
56 
+
57  /** @name option callbacks */
+
58  /**@{*/
+
59  static bool still(void *userPtr, const char *optArg);
+
60  static bool capture(void *userPtr, const char *optArg);
+
61  /**@}*/
+
62 
+
63 private:
+
64  bool m_initialized; ///< set if initialized
+
65  bool m_running; ///< set if running
+
66  TaskStillCapture m_stillCapture; ///< still capure task
+
67 
+
68  Window::IGuiContainer *m_guiContainerConfig; ///< configuration GUI container
+
69  Window::IGuiContainerGrid *m_guiConfig; ///< configuration GUI
+
70 
+
71  /** @name IKeyObserver methods */
+
72  /**@{*/
+
73  virtual bool onKey(const Key &key);
+
74  /**@}*/
+
75 };
+
76 
+
77 }; // namespace ArgusSamples
+
78 
+
79 #endif // ARGUS_APPS_CAMERA_UI_APP_MODULE_CAPTURE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8cpp.html new file mode 100644 index 0000000..0e9e6da --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8cpp.html @@ -0,0 +1,112 @@ + + + + + +Argus Camera Sample: ui/gallery/AppModuleGallery.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleGallery.cpp File Reference
+
+
+
#include <stdlib.h>
+#include "AppModuleGallery.h"
+#include "Error.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8cpp_source.html new file mode 100644 index 0000000..98ca122 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8cpp_source.html @@ -0,0 +1,306 @@ + + + + + +Argus Camera Sample: ui/gallery/AppModuleGallery.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleGallery.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include <stdlib.h>
+
30 
+
31 #include "AppModuleGallery.h"
+
32 #include "Error.h"
+
33 
+
34 namespace ArgusSamples
+
35 {
+
36 
+
37 /* static */ bool AppModuleGallery::prevItem(void *userPtr, const char *optArg)
+
38 {
+
39  AppModuleGallery *module = reinterpret_cast<AppModuleGallery*>(userPtr);
+
40 
+
41  PROPAGATE_ERROR(module->m_gallery.prevItem());
+
42 
+
43  return true;
+
44 }
+
45 
+
46 /* static */ bool AppModuleGallery::nextItem(void *userPtr, const char *optArg)
+
47 {
+
48  AppModuleGallery *module = reinterpret_cast<AppModuleGallery*>(userPtr);
+
49 
+
50  PROPAGATE_ERROR(module->m_gallery.nextItem());
+
51 
+
52  return true;
+
53 }
+
54 
+
55 /* static */ bool AppModuleGallery::togglePlayBack(void *userPtr, const char *optArg)
+
56 {
+
57  AppModuleGallery *module = reinterpret_cast<AppModuleGallery*>(userPtr);
+
58 
+
59  PROPAGATE_ERROR(module->m_gallery.togglePlayBack());
+
60 
+
61  return true;
+
62 }
+
63 
+
64 /* static */ bool AppModuleGallery::rewind(void *userPtr, const char *optArg)
+
65 {
+
66  AppModuleGallery *module = reinterpret_cast<AppModuleGallery*>(userPtr);
+
67 
+
68  PROPAGATE_ERROR(module->m_gallery.rewind());
+
69 
+
70  return true;
+
71 }
+
72 
+ +
74  : m_initialized(false)
+
75  , m_running(false)
+
76  , m_guiContainerConfig(NULL)
+
77  , m_guiConfig(NULL)
+
78 {
+
79 }
+
80 
+ +
82 {
+
83  shutdown();
+
84 }
+
85 
+
86 bool AppModuleGallery::initialize(Options &options)
+
87 {
+
88  if (m_initialized)
+
89  return true;
+
90 
+
91  PROPAGATE_ERROR(m_gallery.initialize());
+
92 
+
93  m_initialized = true;
+
94 
+
95  return true;
+
96 }
+
97 
+ +
99 {
+
100  if (!m_initialized)
+
101  return true;
+
102 
+
103  PROPAGATE_ERROR_CONTINUE(stop());
+
104 
+
105  PROPAGATE_ERROR_CONTINUE(m_gallery.shutdown());
+
106 
+
107  m_initialized = false;
+
108 
+
109  return true;
+
110 }
+
111 
+
112 bool AppModuleGallery::start(Window::IGuiMenuBar *iGuiMenuBar,
+
113  Window::IGuiContainer *iGuiContainerConfig)
+
114 {
+
115  if (m_running)
+
116  return true;
+
117 
+
118  // register key observer
+
119  PROPAGATE_ERROR(Window::getInstance().registerObserver(this));
+
120 
+
121  // initialize the GUI
+
122  if (iGuiContainerConfig && !m_guiConfig)
+
123  {
+
124  // initialize the GUI
+
125 
+
126  // create a grid container
+
127  PROPAGATE_ERROR(Window::IGuiContainerGrid::create(&m_guiConfig));
+
128 
+
129  // create the elements
+
130  UniquePointer<Window::IGuiElement> element;
+
131  unsigned int column = 0;
+
132 
+
133  PROPAGATE_ERROR(Window::IGuiElement::createAction("Previous Item",
+
134  AppModuleGallery::prevItem, this, Window::IGuiElement::FLAG_NONE,
+
135  Window::IGuiElement::ICON_PREVIOUS, &element));
+
136  PROPAGATE_ERROR(m_guiConfig->attach(element.get(), column++, 0));
+
137  element.release();
+
138 
+
139  PROPAGATE_ERROR(Window::IGuiElement::createAction("Rewind",
+
140  AppModuleGallery::rewind, this, Window::IGuiElement::FLAG_NONE,
+
141  Window::IGuiElement::ICON_MEDIA_REWIND, &element));
+
142  PROPAGATE_ERROR(m_guiConfig->attach(element.get(), column++, 0));
+
143  element.release();
+
144 
+
145  PROPAGATE_ERROR(Window::IGuiElement::createAction("Toggle Playback",
+
146  AppModuleGallery::togglePlayBack, this, Window::IGuiElement::FLAG_BUTTON_TOGGLE,
+
147  Window::IGuiElement::ICON_MEDIA_PLAY, &element));
+
148  PROPAGATE_ERROR(m_guiConfig->attach(element.get(), column++, 0));
+
149  element.release();
+
150 
+
151  PROPAGATE_ERROR(Window::IGuiElement::createAction("Next Item",
+
152  AppModuleGallery::nextItem, this, Window::IGuiElement::FLAG_NONE,
+
153  Window::IGuiElement::ICON_NEXT, &element));
+
154  PROPAGATE_ERROR(m_guiConfig->attach(element.get(), column++, 0));
+
155  element.release();
+
156 
+
157  m_guiContainerConfig = iGuiContainerConfig;
+
158  }
+
159 
+ +
161  PROPAGATE_ERROR(m_guiContainerConfig->add(m_guiConfig));
+
162 
+
163  PROPAGATE_ERROR(m_gallery.start());
+
164 
+
165  m_running = true;
+
166 
+
167  return true;
+
168 }
+
169 
+ +
171 {
+
172  if (!m_running)
+
173  return true;
+
174 
+
175  PROPAGATE_ERROR(m_gallery.stop());
+
176 
+ +
178  PROPAGATE_ERROR(m_guiContainerConfig->remove(m_guiConfig));
+
179 
+
180  // unregister key observer
+
181  PROPAGATE_ERROR(Window::getInstance().unregisterObserver(this));
+
182 
+
183  m_running = false;
+
184 
+
185  return true;
+
186 }
+
187 
+
188 bool AppModuleGallery::onKey(const Key &key)
+
189 {
+
190  if (key == Key("Left"))
+
191  {
+
192  PROPAGATE_ERROR(m_gallery.prevItem());
+
193  }
+
194  else if (key == Key("Right"))
+
195  {
+
196  PROPAGATE_ERROR(m_gallery.nextItem());
+
197  }
+
198  else if (key == Key("space"))
+
199  {
+
200  PROPAGATE_ERROR(m_gallery.togglePlayBack());
+
201  }
+
202 
+
203  return true;
+
204 }
+
205 
+
206 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8h.html new file mode 100644 index 0000000..df08b3d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: ui/gallery/AppModuleGallery.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleGallery.h File Reference
+
+
+
#include "IAppModule.h"
+#include "tasks/Gallery.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::AppModuleGallery
 The gallery app module adds functionality to review images and videos. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8h_source.html new file mode 100644 index 0000000..756d208 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGallery_8h_source.html @@ -0,0 +1,180 @@ + + + + + +Argus Camera Sample: ui/gallery/AppModuleGallery.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleGallery.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef ARGUS_APPS_CAMERA_UI_APP_MODULE_GALLERY_H
+
30 #define ARGUS_APPS_CAMERA_UI_APP_MODULE_GALLERY_H
+
31 
+
32 #include "IAppModule.h"
+
33 #include "tasks/Gallery.h"
+
34 
+
35 namespace ArgusSamples
+
36 {
+
37 
+
38 /**
+
39  * The gallery app module adds functionality to review images and videos.
+
40  */
+
41 class AppModuleGallery : public IAppModule, public Window::IKeyObserver
+
42 {
+
43 public:
+ +
45  virtual ~AppModuleGallery();
+
46 
+
47  /** @name IAppModule methods */
+
48  /**@{*/
+
49  virtual bool initialize(Options &options);
+
50  virtual bool shutdown();
+
51  virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL,
+
52  Window::IGuiContainer *iGuiContainerConfig = NULL);
+
53  virtual bool stop();
+
54  /**@}*/
+
55 
+
56  /** @name option callbacks */
+
57  /**@{*/
+
58  static bool prevItem(void *userPtr, const char *optArg);
+
59  static bool nextItem(void *userPtr, const char *optArg);
+
60  static bool togglePlayBack(void *userPtr, const char *optArg);
+
61  static bool rewind(void *userPtr, const char *optArg);
+
62  /**@}*/
+
63 
+
64 private:
+
65  bool m_initialized; ///< set if initialized
+
66  bool m_running; ///< set if running
+
67  TaskGallery m_gallery; ///< gallery task
+
68 
+
69  Window::IGuiContainer *m_guiContainerConfig; ///< configuration GUI container
+
70  Window::IGuiContainerGrid *m_guiConfig; ///< configuration GUI
+
71 
+
72  /** @name IKeyObserver methods */
+
73  /**@{*/
+
74  virtual bool onKey(const Key &key);
+
75  /**@}*/
+
76 };
+
77 
+
78 }; // namespace ArgusSamples
+
79 
+
80 #endif // ARGUS_APPS_CAMERA_UI_APP_MODULE_GALLERY_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8cpp.html new file mode 100644 index 0000000..4978102 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8cpp.html @@ -0,0 +1,246 @@ + + + + + +Argus Camera Sample: ui/common/AppModuleGeneric.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleGeneric.cpp File Reference
+
+
+
#include <stdlib.h>
+#include <string.h>
+#include "AppModuleGeneric.h"
+#include "XMLConfig.h"
+#include "Dispatcher.h"
+#include "Error.h"
+#include "Options.h"
+#include "Window.h"
+#include <Argus/Ext/DeFog.h>
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+ + + + + + +

+Macros

#define DEFAULT_CONFIG_FILE   "argusAppConfig.xml"
 Default configuration file name.
#define CREATE_GUI_ELEMENT(_NAME, _VALUE)
#define CREATE_GUI_ELEMENT_COMBO_BOX(_NAME, _VALUE, _FROMTYPE, _TOTYPE)
#define CREATE_GUI_ELEMENT_PATH_CHOOSER(_NAME, _VALUE)
+

Macro Definition Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define CREATE_GUI_ELEMENT( _NAME,
 _VALUE 
)
+
+Value:
PROPAGATE_ERROR(Window::IGuiElement::createValue(&dispatcher._VALUE, &element));\
+
PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
element.release();
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define CREATE_GUI_ELEMENT_COMBO_BOX( _NAME,
 _VALUE,
 _FROMTYPE,
 _TOTYPE 
)
+
+Value:
assert(sizeof(_FROMTYPE) == sizeof(_TOTYPE)); \
+
PROPAGATE_ERROR(Window::IGuiElement::createValue(reinterpret_cast< \
+
Value<_TOTYPE>*>(&dispatcher._VALUE), &element)); \
+
PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
element.release();
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
#define CREATE_GUI_ELEMENT_PATH_CHOOSER( _NAME,
 _VALUE 
)
+
+Value:
PROPAGATE_ERROR(Window::IGuiElement::createFileChooser(&dispatcher._VALUE, \
+
true, &element)); \
+
PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
element.release();
+
+
+
+ +
+
+ + + + +
#define DEFAULT_CONFIG_FILE   "argusAppConfig.xml"
+
+ +

Default configuration file name.

+ +

Definition at line 47 of file AppModuleGeneric.cpp.

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8cpp_source.html new file mode 100644 index 0000000..965342e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8cpp_source.html @@ -0,0 +1,512 @@ + + + + + +Argus Camera Sample: ui/common/AppModuleGeneric.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleGeneric.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include <stdlib.h>
+
30 #include <string.h>
+
31 
+
32 #include "AppModuleGeneric.h"
+
33 #include "XMLConfig.h"
+
34 #include "Dispatcher.h"
+
35 #include "Error.h"
+
36 #include "Options.h"
+
37 #include "Window.h"
+
38 
+
39 #include <Argus/Ext/DeFog.h>
+
40 
+
41 namespace ArgusSamples
+
42 {
+
43 
+
44 /**
+
45  * Default configuration file name
+
46  */
+
47 #define DEFAULT_CONFIG_FILE "argusAppConfig.xml"
+
48 
+
49 /* static */ bool AppModuleGeneric::info(void *userPtr, const char *optArg)
+
50 {
+
51  std::string info;
+
52  PROPAGATE_ERROR(Dispatcher::getInstance().getInfo(info));
+
53  printf("%s\n", info.c_str());
+
54 
+
55  return true;
+
56 }
+
57 
+
58 /* static */ bool AppModuleGeneric::loadConfig(void *userPtr, const char *optArg)
+
59 {
+
60  /// @todo ask for file if called from GUI
+
61 
+
62  const char *configFile = DEFAULT_CONFIG_FILE;
+
63  if (optArg)
+
64  configFile = optArg;
+
65  PROPAGATE_ERROR(ArgusSamples::loadConfig(configFile));
+
66  return true;
+
67 }
+
68 
+
69 /* static */ bool AppModuleGeneric::saveConfig(void *userPtr, const char *optArg)
+
70 {
+
71  /// @todo ask for file if called from GUI
+
72 
+
73  const char *configFile = DEFAULT_CONFIG_FILE;
+
74  if (optArg)
+
75  configFile = optArg;
+
76  PROPAGATE_ERROR(ArgusSamples::saveConfig(configFile));
+
77  return true;
+
78 }
+
79 
+
80 /* static */ bool AppModuleGeneric::quit(void *userPtr, const char *optArg)
+
81 {
+
82  PROPAGATE_ERROR(Window::getInstance().requestExit());
+
83  return true;
+
84 }
+
85 
+ +
87  : m_initialized(false)
+
88  , m_running(false)
+
89  , m_guiMenuBar(NULL)
+
90  , m_guiContainerConfig(NULL)
+
91  , m_guiConfig(NULL)
+
92 {
+
93 }
+
94 
+ +
96 {
+
97  shutdown();
+
98 }
+
99 
+
100 bool AppModuleGeneric::initialize(Options &options)
+
101 {
+
102  if (m_initialized)
+
103  return true;
+
104 
+
105  PROPAGATE_ERROR(options.addDescription(
+
106  "The supported value range of some settings is device or sensor mode dependent.\n"
+
107  "Use the '--info' option to get a list of the supported values.\n"));
+
108 
+
109  PROPAGATE_ERROR(options.addOption(
+
110  Options::Option("info", 'i', "",
+
111  Options::Option::TYPE_ACTION,"print information on devices.", info)));
+
112 
+
113  PROPAGATE_ERROR(options.addOption(
+
114  Options::Option("loadconfig", 0, "FILE",
+
115  Options::Option::TYPE_ACTION, "load configuration from XML FILE. ",
+ +
117  PROPAGATE_ERROR(options.addOption(
+
118  Options::Option("saveconfig", 0, "FILE",
+
119  Options::Option::TYPE_ACTION, "save configuration to XML FILE. ",
+ +
121 
+
122  PROPAGATE_ERROR(options.addOption(
+
123  createValueOption("verbose", 0, "0 or 1", "enable verbose mode.",
+
124  Dispatcher::getInstance().m_verbose, "1")));
+
125  PROPAGATE_ERROR(options.addOption(
+
126  createValueOption("kpi", 0, "0 or 1", "enable kpi mode.",
+
127  Dispatcher::getInstance().m_kpi, "1")));
+
128  PROPAGATE_ERROR(options.addOption(
+
129  createValueOption("device", 'd', "INDEX", "select camera device with INDEX.",
+
130  Dispatcher::getInstance().m_deviceIndex)));
+
131 
+
132  // source settings
+
133  PROPAGATE_ERROR(options.addOption(
+
134  createValueOption("exposuretimerange", 0, "RANGE",
+
135  "sets the exposure time range to RANGE, in nanoseconds.",
+
136  Dispatcher::getInstance().m_exposureTimeRange)));
+
137  PROPAGATE_ERROR(options.addOption(
+
138  createValueOption("gainrange", 0, "RANGE", "sets the gain range to RANGE.",
+
139  Dispatcher::getInstance().m_gainRange)));
+
140  PROPAGATE_ERROR(options.addOption(
+
141  createValueOption("sensormode", 0, "INDEX", "set sensor mode to INDEX.",
+
142  Dispatcher::getInstance().m_sensorModeIndex)));
+
143  PROPAGATE_ERROR(options.addOption(
+
144  createValueOption("framerate", 0, "RATE",
+
145  "set the sensor frame rate to RATE. If RATE is 0 then VFR (variable frame rate) is "
+
146  "enabled.", Dispatcher::getInstance().m_frameRate)));
+
147  PROPAGATE_ERROR(options.addOption(
+
148  createValueOption("focusposition", 0, "POSITION",
+
149  "sets the focus position to POSITION, in focuser units.",
+
150  Dispatcher::getInstance().m_focusPosition)));
+
151  PROPAGATE_ERROR(options.addOption(
+
152  createValueOption("apertureposition", 0, "POSITION",
+
153  "sets the aperture position to POSITION, in position units.",
+
154  Dispatcher::getInstance().m_aperturePosition)));
+
155  PROPAGATE_ERROR(options.addOption(
+
156  createValueOption("apertureFnum", 0, "Fnum",
+
157  "sets the aperture F-num, in F-num units.",
+
158  Dispatcher::getInstance().m_apertureFnum)));
+
159  PROPAGATE_ERROR(options.addOption(
+
160  createValueOption("aperturemotorspeed", 0, "SPEED",
+
161  "sets the aperture motor speed to SPEED, in steps/second units.",
+
162  Dispatcher::getInstance().m_apertureMotorSpeed)));
+
163  PROPAGATE_ERROR(options.addOption(
+
164  createValueOption("captureyuvformat", 0, "FORMAT",
+
165  "YUV format for image capture.", Dispatcher::getInstance().m_captureYuvFormat)));
+
166 
+
167  // output settings
+
168  PROPAGATE_ERROR(options.addOption(
+
169  createValueOption("outputsize", 0, "WIDTHxHEIGHT",
+
170  "set the still and video output size to WIDTHxHEIGHT (e.g. 1920x1080). If WIDTHxHEIGHT "
+
171  "is '0x0' the output size is the sensor mode size.",
+
172  Dispatcher::getInstance().m_outputSize)));
+
173  PROPAGATE_ERROR(options.addOption(
+
174  createValueOption("outputpath", 0, "PATH",
+
175  "set the output file path. A file name, an incrementing index and the file extension"
+
176  " will be appended. E.g. setting 'folder/' will result in 'folder/image0.jpg' or "
+
177  "'folder/video0.mp4'. '/dev/null' can be used to discard output.",
+
178  Dispatcher::getInstance().m_outputPath)));
+
179 
+
180  // stream settings
+
181  PROPAGATE_ERROR(options.addOption(
+
182  createValueOption("denoise", 0, "MODE", "set the denoising mode.",
+
183  Dispatcher::getInstance().m_denoiseMode)));
+
184  PROPAGATE_ERROR(options.addOption(
+
185  createValueOption("denoisestrength", 0, "POSITION", "set the denoising strength.",
+
186  Dispatcher::getInstance().m_denoiseStrength)));
+
187  PROPAGATE_ERROR(options.addOption(
+
188  createValueOption("edgeenhance", 0, "MODE", "set the edge enhancement mode.",
+
189  Dispatcher::getInstance().m_edgeEnhanceMode)));
+
190  PROPAGATE_ERROR(options.addOption(
+
191  createValueOption("edgeenhancestrength", 0, "POSITION",
+
192  "set the edge enhancement strength.",
+
193  Dispatcher::getInstance().m_edgeEnhanceStrength)));
+
194 
+
195  // auto control settings
+
196  PROPAGATE_ERROR(options.addOption(
+
197  createValueOption("aeantibanding", 0, "MODE", "set the auto exposure antibanding mode.",
+
198  Dispatcher::getInstance().m_aeAntibandingMode)));
+
199  PROPAGATE_ERROR(options.addOption(
+
200  createValueOption("aelock", 0, "LOCK", "set the auto exposure lock.",
+
201  Dispatcher::getInstance().m_aeLock)));
+
202  PROPAGATE_ERROR(options.addOption(
+
203  createValueOption("awblock", 0, "LOCK", "set the auto white balance lock.",
+
204  Dispatcher::getInstance().m_awbLock)));
+
205  PROPAGATE_ERROR(options.addOption(
+
206  createValueOption("awb", 0, "MODE", "set the auto white balance mode.",
+
207  Dispatcher::getInstance().m_awbMode)));
+
208  PROPAGATE_ERROR(options.addOption(
+
209  createValueOption("exposurecompensation", 0, "COMPENSATION",
+
210  "set the exposure compensation to COMPENSATION.",
+
211  Dispatcher::getInstance().m_exposureCompensation)));
+
212  PROPAGATE_ERROR(options.addOption(
+
213  createValueOption("ispdigitalgainrange", 0, "RANGE",
+
214  "sets the ISP digital gain range.",
+
215  Dispatcher::getInstance().m_ispDigitalGainRange)));
+
216  PROPAGATE_ERROR(options.addOption(
+
217  createValueOption("acregionhorizontal", 0, "RANGE",
+
218  "sets the AC auto control region horizontal range.",
+
219  Dispatcher::getInstance().m_acRegionHorizontal)));
+
220  PROPAGATE_ERROR(options.addOption(
+
221  createValueOption("acregionvertical", 0, "RANGE",
+
222  "sets the AC auto control region vertical range.",
+
223  Dispatcher::getInstance().m_acRegionVertical)));
+
224 
+
225  if (Dispatcher::getInstance().supportsExtension(Argus::EXT_DE_FOG))
+
226  {
+
227  // DeFog extension settings
+
228  PROPAGATE_ERROR(options.addOption(
+
229  createValueOption("defog", 0, "ENABLE",
+
230  "set the DeFog enable flag to ENABLE.",
+
231  Dispatcher::getInstance().m_deFogEnable)));
+
232  PROPAGATE_ERROR(options.addOption(
+
233  createValueOption("defogamount", 0, "AMOUNT",
+
234  "sets the amount of fog to be removed to AMOUNT.",
+
235  Dispatcher::getInstance().m_deFogAmount)));
+
236  PROPAGATE_ERROR(options.addOption(
+
237  createValueOption("defogquality", 0, "QUALITY",
+
238  "sets the quality of the DeFog effect to QUALITY.",
+
239  Dispatcher::getInstance().m_deFogQuality)));
+
240  }
+
241 
+
242  m_initialized = true;
+
243 
+
244  return true;
+
245 }
+
246 
+ +
248 {
+
249  if (!m_initialized)
+
250  return true;
+
251 
+
252  PROPAGATE_ERROR_CONTINUE(stop());
+
253 
+
254  delete m_guiConfig;
+
255  m_guiConfig = NULL;
+
256 
+
257  m_initialized = false;
+
258 
+
259  return true;
+
260 }
+
261 
+
262 bool AppModuleGeneric::start(Window::IGuiMenuBar *iGuiMenuBar,
+
263  Window::IGuiContainer *iGuiContainerConfig)
+
264 {
+
265  if (m_running)
+
266  return true;
+
267 
+
268  if (iGuiMenuBar && !m_guiMenuBar)
+
269  {
+
270  // initialize the menu
+
271 
+
272  UniquePointer<Window::IGuiMenu> menu;
+
273  UniquePointer<Window::IGuiMenuItem> item;
+
274 
+
275  // create the elements
+
276  Window::IGuiMenu *fileMenu = iGuiMenuBar->getMenu("File");
+
277  if (!fileMenu)
+
278  {
+
279  PROPAGATE_ERROR(Window::IGuiMenu::create("File", &menu));
+
280  PROPAGATE_ERROR(iGuiMenuBar->add(menu.get()));
+
281  fileMenu = menu.get();
+
282  menu.release();
+
283  }
+
284  PROPAGATE_ERROR(Window::IGuiMenuItem::create("Load config", AppModuleGeneric::loadConfig,
+
285  NULL, &item));
+
286  PROPAGATE_ERROR(fileMenu->add(item.get()));
+
287  item.release();
+
288  PROPAGATE_ERROR(Window::IGuiMenuItem::create("Save Config", AppModuleGeneric::saveConfig,
+
289  NULL, &item));
+
290  PROPAGATE_ERROR(fileMenu->add(item.get()));
+
291  item.release();
+
292  PROPAGATE_ERROR(Window::IGuiMenuItem::create("Quit", AppModuleGeneric::quit, NULL,
+
293  &item));
+
294  PROPAGATE_ERROR(fileMenu->add(item.get()));
+
295  item.release();
+
296 
+
297  Window::IGuiMenu *helpMenu = iGuiMenuBar->getMenu("Help");
+
298  if (!helpMenu)
+
299  {
+
300  PROPAGATE_ERROR(Window::IGuiMenu::create("Help", &menu));
+
301  PROPAGATE_ERROR(iGuiMenuBar->add(menu.get()));
+
302  helpMenu = menu.get();
+
303  menu.release();
+
304  }
+
305  PROPAGATE_ERROR(Window::IGuiMenuItem::create("Info", AppModuleGeneric::info, NULL,
+
306  &item));
+
307  PROPAGATE_ERROR(helpMenu->add(item.get()));
+
308  item.release();
+
309 
+
310  m_guiMenuBar = iGuiMenuBar;
+
311  }
+
312 
+
313  if (iGuiContainerConfig && !m_guiContainerConfig)
+
314  {
+
315  // initialize the GUI
+
316 
+
317  // create a grid container
+
318  PROPAGATE_ERROR(Window::IGuiContainerGrid::create(&m_guiConfig));
+
319 
+
320  // create the elements
+
321  UniquePointer<Window::IGuiElement> element;
+
322  Dispatcher &dispatcher = Dispatcher::getInstance();
+
323 
+
324  Window::IGuiContainerGrid::BuildHelper buildHelper(m_guiConfig);
+
325 
+
326 #define CREATE_GUI_ELEMENT(_NAME, _VALUE) \
+
327  PROPAGATE_ERROR(Window::IGuiElement::createValue(&dispatcher._VALUE, &element));\
+
328  PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
329  element.release();
+
330 
+
331 #define CREATE_GUI_ELEMENT_COMBO_BOX(_NAME, _VALUE, _FROMTYPE, _TOTYPE) \
+
332  assert(sizeof(_FROMTYPE) == sizeof(_TOTYPE)); \
+
333  PROPAGATE_ERROR(Window::IGuiElement::createValue(reinterpret_cast< \
+
334  Value<_TOTYPE>*>(&dispatcher._VALUE), &element)); \
+
335  PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
336  element.release();
+
337 
+
338 #define CREATE_GUI_ELEMENT_PATH_CHOOSER(_NAME, _VALUE) \
+
339  PROPAGATE_ERROR(Window::IGuiElement::createFileChooser(&dispatcher._VALUE, \
+
340  true, &element)); \
+
341  PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
342  element.release();
+
343 
+
344  CREATE_GUI_ELEMENT("Verbose", m_verbose);
+
345  CREATE_GUI_ELEMENT("KPI", m_kpi);
+
346  CREATE_GUI_ELEMENT("Device", m_deviceIndex);
+
347 
+
348  CREATE_GUI_ELEMENT("Exposure time range (ns)", m_exposureTimeRange);
+
349  CREATE_GUI_ELEMENT("Gain range", m_gainRange);
+
350  CREATE_GUI_ELEMENT("ISP digital gain range", m_ispDigitalGainRange);
+
351  CREATE_GUI_ELEMENT("AC region horizontal", m_acRegionHorizontal);
+
352  CREATE_GUI_ELEMENT("AC region vertical", m_acRegionVertical);
+
353 
+
354  CREATE_GUI_ELEMENT_COMBO_BOX("Sensor mode index", m_sensorModeIndex,
+
355  uint32_t, Window::IGuiElement::ValueTypeEnum);
+
356  CREATE_GUI_ELEMENT_COMBO_BOX("YUV format", m_captureYuvFormat,
+
357  Argus::PixelFormat, Argus::NamedUUID);
+
358  CREATE_GUI_ELEMENT("Frame rate", m_frameRate);
+
359  CREATE_GUI_ELEMENT("Focus position", m_focusPosition);
+
360  CREATE_GUI_ELEMENT("Aperture position", m_aperturePosition);
+
361  CREATE_GUI_ELEMENT_COMBO_BOX("Aperture Fnum", m_apertureFnum,
+
362  float, Window::IGuiElement::ValueTypeEnum);
+
363  CREATE_GUI_ELEMENT("Aperture motor speed", m_apertureMotorSpeed);
+
364  CREATE_GUI_ELEMENT("Output size", m_outputSize);
+
365 
+
366  CREATE_GUI_ELEMENT_PATH_CHOOSER("Output path", m_outputPath);
+
367 
+
368  CREATE_GUI_ELEMENT_COMBO_BOX("De-Noise mode", m_denoiseMode,
+
369  Argus::DenoiseMode, Argus::NamedUUID);
+
370  CREATE_GUI_ELEMENT("De-Noise strength", m_denoiseStrength);
+
371  CREATE_GUI_ELEMENT_COMBO_BOX("Edge Enhance mode", m_edgeEnhanceMode,
+
372  Argus::EdgeEnhanceMode, Argus::NamedUUID);
+
373  CREATE_GUI_ELEMENT("Edge Enhance strength", m_edgeEnhanceStrength);
+
374 
+
375  CREATE_GUI_ELEMENT_COMBO_BOX("AE antibanding mode", m_aeAntibandingMode,
+
376  Argus::AeAntibandingMode, Argus::NamedUUID);
+
377 
+
378  CREATE_GUI_ELEMENT("AE Lock", m_aeLock);
+
379  CREATE_GUI_ELEMENT("AWB Lock", m_awbLock);
+
380  CREATE_GUI_ELEMENT_COMBO_BOX("AWB mode", m_awbMode,
+
381  Argus::AwbMode, Argus::NamedUUID);
+
382  CREATE_GUI_ELEMENT("Exposure compensation (ev)", m_exposureCompensation);
+
383 
+
384 #undef CREATE_GUI_ELEMENT
+
385 #undef CREATE_GUI_ELEMENT_COMBO_BOX
+
386 #undef CREATE_GUI_ELEMENT_PATH_CHOOSER
+
387 
+
388  m_guiContainerConfig = iGuiContainerConfig;
+
389  }
+
390 
+ +
392  PROPAGATE_ERROR(m_guiContainerConfig->add(m_guiConfig));
+
393 
+
394  m_running = true;
+
395 
+
396  return true;
+
397 }
+
398 
+ +
400 {
+
401  if (!m_running)
+
402  return true;
+
403 
+ +
405  PROPAGATE_ERROR(m_guiContainerConfig->remove(m_guiConfig));
+
406 
+
407  m_running = true;
+
408 
+
409  return true;
+
410 }
+
411 
+
412 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8h.html new file mode 100644 index 0000000..1c7cdfc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: ui/common/AppModuleGeneric.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleGeneric.h File Reference
+
+
+
#include "IAppModule.h"
+#include "Window.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::AppModuleGeneric
 The base app module provides basic settings common to all app modules. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8h_source.html new file mode 100644 index 0000000..dcfb35a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleGeneric_8h_source.html @@ -0,0 +1,174 @@ + + + + + +Argus Camera Sample: ui/common/AppModuleGeneric.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleGeneric.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_GENERIC_H
+
30 #define ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_GENERIC_H
+
31 
+
32 #include "IAppModule.h"
+
33 #include "Window.h"
+
34 
+
35 namespace ArgusSamples
+
36 {
+
37 
+
38 /**
+
39  * The base app module provides basic settings common to all app modules
+
40  */
+ +
42 {
+
43 public:
+ +
45  virtual ~AppModuleGeneric();
+
46 
+
47  /** @name IAppModule methods */
+
48  /**@{*/
+
49  virtual bool initialize(Options &options);
+
50  virtual bool shutdown();
+
51  virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL,
+
52  Window::IGuiContainer *iGuiContainerConfig = NULL);
+
53  virtual bool stop();
+
54  /**@}*/
+
55 
+
56  /** @name option callbacks */
+
57  /**@{*/
+
58  static bool info(void *userPtr, const char *optArg);
+
59  static bool loadConfig(void *userPtr, const char *optArg);
+
60  static bool saveConfig(void *userPtr, const char *optArg);
+
61  static bool quit(void *userPtr, const char *optArg);
+
62  /**@}*/
+
63 
+
64 private:
+
65  bool m_initialized; ///< set if initialized
+
66  bool m_running; ///< set if running
+
67  Window::IGuiMenuBar *m_guiMenuBar; ///< menu bar
+
68  Window::IGuiContainer *m_guiContainerConfig; ///< configuration GUI container
+
69  Window::IGuiContainerGrid *m_guiConfig; ///< configuration GUI
+
70 };
+
71 
+
72 }; // namespace ArgusSamples
+
73 
+
74 #endif // ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_GENERIC_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8cpp.html new file mode 100644 index 0000000..70f6af1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8cpp.html @@ -0,0 +1,147 @@ + + + + + +Argus Camera Sample: ui/multiExposure/AppModuleMultiExposure.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleMultiExposure.cpp File Reference
+
+
+
#include "AppModuleMultiExposure.h"
+#include "Options.h"
+#include "Error.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+ + +

+Macros

#define CREATE_GUI_ELEMENT(_NAME, _VALUE)
+

Macro Definition Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define CREATE_GUI_ELEMENT( _NAME,
 _VALUE 
)
+
+Value:
PROPAGATE_ERROR(Window::IGuiElement::createValue(&_VALUE, &element)); \
+
PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
element.release();
+
+
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8cpp_source.html new file mode 100644 index 0000000..654ad80 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8cpp_source.html @@ -0,0 +1,244 @@ + + + + + +Argus Camera Sample: ui/multiExposure/AppModuleMultiExposure.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleMultiExposure.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include "AppModuleMultiExposure.h"
+
30 #include "Options.h"
+
31 #include "Error.h"
+
32 
+
33 namespace ArgusSamples
+
34 {
+
35 
+ +
37  : m_initialized(false)
+
38  , m_running(false)
+
39  , m_guiContainerConfig(NULL)
+
40  , m_guiConfig(NULL)
+
41 {
+
42 }
+
43 
+ +
45 {
+
46  shutdown();
+
47 }
+
48 
+
49 bool AppModuleMultiExposure::initialize(Options &options)
+
50 {
+
51  if (m_initialized)
+
52  return true;
+
53 
+
54  PROPAGATE_ERROR(m_multiExposure.initialize());
+
55 
+
56  PROPAGATE_ERROR(options.addOption(
+
57  createValueOption("exposurerange", 0, "RANGE", "set the exposure range to RANGE.",
+ +
59  PROPAGATE_ERROR(options.addOption(
+
60  createValueOption("exposuresteps", 0, "COUNT", "sample the exposure range at COUNT steps.",
+ +
62 
+
63  m_initialized = true;
+
64 
+
65  return true;
+
66 }
+
67 
+ +
69 {
+
70  if (!m_initialized)
+
71  return true;
+
72 
+
73  PROPAGATE_ERROR_CONTINUE(stop());
+
74 
+
75  PROPAGATE_ERROR_CONTINUE(m_multiExposure.shutdown());
+
76 
+
77  delete m_guiConfig;
+
78  m_guiConfig = NULL;
+
79 
+
80  m_guiContainerConfig = NULL;
+
81 
+
82  m_initialized = false;
+
83 
+
84  return true;
+
85 }
+
86 
+
87 bool AppModuleMultiExposure::start(Window::IGuiMenuBar *iGuiMenuBar,
+
88  Window::IGuiContainer *iGuiContainerConfig)
+
89 {
+
90  if (m_running)
+
91  return true;
+
92 
+
93  // initialize the GUI
+
94  if (iGuiContainerConfig && !m_guiConfig)
+
95  {
+
96  // initialize the GUI
+
97 
+
98  // create a grid container
+
99  PROPAGATE_ERROR(Window::IGuiContainerGrid::create(&m_guiConfig));
+
100 
+
101  // create the elements
+
102  UniquePointer<Window::IGuiElement> element;
+
103 
+
104  Window::IGuiContainerGrid::BuildHelper buildHelper(m_guiConfig);
+
105 
+
106 #define CREATE_GUI_ELEMENT(_NAME, _VALUE) \
+
107  PROPAGATE_ERROR(Window::IGuiElement::createValue(&_VALUE, &element)); \
+
108  PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
109  element.release();
+
110 
+ + +
113 
+
114 #undef CREATE_GUI_ELEMENT
+
115 
+
116  m_guiContainerConfig = iGuiContainerConfig;
+
117  }
+
118 
+ +
120  PROPAGATE_ERROR(m_guiContainerConfig->add(m_guiConfig));
+
121 
+
122  PROPAGATE_ERROR(m_multiExposure.start());
+
123 
+
124  m_running = true;
+
125 
+
126  return true;
+
127 }
+
128 
+ +
130 {
+
131  if (!m_running)
+
132  return true;
+
133 
+
134  PROPAGATE_ERROR(m_multiExposure.stop());
+
135 
+ +
137  PROPAGATE_ERROR(m_guiContainerConfig->remove(m_guiConfig));
+
138 
+
139  m_running = false;
+
140 
+
141  return true;
+
142 }
+
143 
+
144 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8h.html new file mode 100644 index 0000000..63792ef --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: ui/multiExposure/AppModuleMultiExposure.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleMultiExposure.h File Reference
+
+
+
#include "IAppModule.h"
+#include "tasks/MultiExposure.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::AppModuleMultiExposure
 The multi exposure app module adds functionality to capture multiple streams with different exposure compensation values. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8h_source.html new file mode 100644 index 0000000..36a39b8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiExposure_8h_source.html @@ -0,0 +1,168 @@ + + + + + +Argus Camera Sample: ui/multiExposure/AppModuleMultiExposure.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleMultiExposure.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_EXPOSURE_H
+
30 #define ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_EXPOSURE_H
+
31 
+
32 #include "IAppModule.h"
+
33 #include "tasks/MultiExposure.h"
+
34 
+
35 namespace ArgusSamples
+
36 {
+
37 
+
38 /**
+
39  * The multi exposure app module adds functionality to capture multiple streams with
+
40  * different exposure compensation values.
+
41  */
+ +
43 {
+
44 public:
+ +
46  virtual ~AppModuleMultiExposure();
+
47 
+
48  /** @name IAppModule methods */
+
49  /**@{*/
+
50  virtual bool initialize(Options &options);
+
51  virtual bool shutdown();
+
52  virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL,
+
53  Window::IGuiContainer *iGuiContainerConfig = NULL);
+
54  virtual bool stop();
+
55  /**@}*/
+
56 
+
57 private:
+
58  bool m_initialized; ///< set if initialized
+
59  bool m_running; ///< set if running
+
60  TaskMultiExposure m_multiExposure; ///< multi exposure task
+
61 
+
62  Window::IGuiContainer *m_guiContainerConfig; ///< configuration GUI container
+
63  Window::IGuiContainerGrid *m_guiConfig; ///< configuration GUI
+
64 };
+
65 
+
66 }; // namespace ArgusSamples
+
67 
+
68 #endif // ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_EXPOSURE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8cpp.html new file mode 100644 index 0000000..ced8e1f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8cpp.html @@ -0,0 +1,113 @@ + + + + + +Argus Camera Sample: ui/multiSession/AppModuleMultiSession.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleMultiSession.cpp File Reference
+
+
+
#include "AppModuleMultiSession.h"
+#include <stdlib.h>
+#include "Options.h"
+#include "Error.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8cpp_source.html new file mode 100644 index 0000000..b01b2dc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8cpp_source.html @@ -0,0 +1,189 @@ + + + + + +Argus Camera Sample: ui/multiSession/AppModuleMultiSession.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleMultiSession.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include "AppModuleMultiSession.h"
+
30 
+
31 #include <stdlib.h>
+
32 
+
33 #include "Options.h"
+
34 #include "Error.h"
+
35 
+
36 namespace ArgusSamples
+
37 {
+
38 
+ +
40  : m_initialized(false)
+
41 {
+
42 }
+
43 
+ +
45 {
+
46  shutdown();
+
47 }
+
48 
+
49 bool AppModuleMultiSession::initialize(Options &options)
+
50 {
+
51  if (m_initialized)
+
52  return true;
+
53 
+
54  PROPAGATE_ERROR(m_multiSession.initialize());
+
55 
+
56  PROPAGATE_ERROR(options.addOption(
+
57  createValueOption("multidevices", 0, "INDEX", "select multiple camera devices with INDEX.",
+ +
59 
+
60  m_initialized = true;
+
61 
+
62  return true;
+
63 }
+
64 
+ +
66 {
+
67  if (!m_initialized)
+
68  return true;
+
69 
+
70  PROPAGATE_ERROR_CONTINUE(m_multiSession.shutdown());
+
71 
+
72  m_initialized = false;
+
73  return true;
+
74 }
+
75 
+
76 bool AppModuleMultiSession::start(Window::IGuiMenuBar *iGuiMenuBar,
+
77  Window::IGuiContainer *iGuiContainerConfig)
+
78 {
+
79  PROPAGATE_ERROR(m_multiSession.start());
+
80  return true;
+
81 }
+
82 
+ +
84 {
+
85  PROPAGATE_ERROR(m_multiSession.stop());
+
86  return true;
+
87 }
+
88 
+
89 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8h.html new file mode 100644 index 0000000..0e66dbc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: ui/multiSession/AppModuleMultiSession.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleMultiSession.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::AppModuleMultiSession
 The multi session app module adds functionality for adding multiple sessions where each session uses a different sensor. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8h_source.html new file mode 100644 index 0000000..250ef2e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleMultiSession_8h_source.html @@ -0,0 +1,164 @@ + + + + + +Argus Camera Sample: ui/multiSession/AppModuleMultiSession.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleMultiSession.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_SESSION_H
+
30 #define ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_SESSION_H
+
31 
+
32 #include "../common/IAppModule.h"
+
33 #include "tasks/MultiSession.h"
+
34 
+
35 namespace ArgusSamples
+
36 {
+
37 
+
38 /**
+
39  * The multi session app module adds functionality for adding multiple sessions where
+
40  * each session uses a different sensor.
+
41  */
+ +
43 {
+
44 public:
+ +
46  virtual ~AppModuleMultiSession();
+
47 
+
48  /** @name IAppModule methods */
+
49  /**@{*/
+
50  virtual bool initialize(Options &options);
+
51  virtual bool shutdown();
+
52  virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL,
+
53  Window::IGuiContainer *iGuiContainerConfig = NULL);
+
54  virtual bool stop();
+
55  /**@}*/
+
56 
+
57 private:
+
58  bool m_initialized; ///< set if initialized
+
59  TaskMultiSession m_multiSession; ///< multi session task
+
60 };
+
61 
+
62 }; // namespace ArgusSamples
+
63 
+
64 #endif // ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_SESSION_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8cpp.html new file mode 100644 index 0000000..eeb73c4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8cpp.html @@ -0,0 +1,198 @@ + + + + + +Argus Camera Sample: ui/video/AppModuleVideo.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleVideo.cpp File Reference
+
+
+
#include "AppModuleVideo.h"
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "Dispatcher.h"
+#include "Util.h"
+#include "Error.h"
+#include "Options.h"
+#include "ScopedGuard.h"
+#include "VideoPipeline.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+ + + +

+Macros

#define CREATE_GUI_ELEMENT(_NAME, _VALUE)
#define CREATE_GUI_ELEMENT_COMBO_BOX(_NAME, _VALUE, _FROMTYPE, _TOTYPE)
+

Macro Definition Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define CREATE_GUI_ELEMENT( _NAME,
 _VALUE 
)
+
+Value:
PROPAGATE_ERROR(Window::IGuiElement::createValue(&dispatcher._VALUE, &element));\
+
PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
element.release();
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define CREATE_GUI_ELEMENT_COMBO_BOX( _NAME,
 _VALUE,
 _FROMTYPE,
 _TOTYPE 
)
+
+Value:
assert(sizeof(_FROMTYPE) == sizeof(_TOTYPE)); \
+
PROPAGATE_ERROR(Window::IGuiElement::createValue(reinterpret_cast< \
+
Value<_TOTYPE>*>(&dispatcher._VALUE), &element)); \
+
PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
element.release();
+
+
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8cpp_source.html new file mode 100644 index 0000000..6bc8dbf --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8cpp_source.html @@ -0,0 +1,356 @@ + + + + + +Argus Camera Sample: ui/video/AppModuleVideo.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleVideo.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include "AppModuleVideo.h"
+
30 
+
31 #include <stdlib.h>
+
32 #include <string.h>
+
33 #include <unistd.h>
+
34 
+
35 #include "Dispatcher.h"
+
36 #include "Util.h"
+
37 #include "Error.h"
+
38 #include "Options.h"
+
39 #include "ScopedGuard.h"
+
40 #include "VideoPipeline.h"
+
41 
+
42 namespace ArgusSamples
+
43 {
+
44 
+
45 /* static */ bool AppModuleVideo::video(void *userPtr, const char *optArg)
+
46 {
+ +
48  {
+
49  fprintf(stderr, "------------------------------------------------------\n");
+
50  fprintf(stderr, "Error: Video recording is not supported on Android due\n");
+
51  fprintf(stderr, "to the lack of the required gstreamer functionality\n");
+
52  fprintf(stderr, "------------------------------------------------------\n");
+
53  ORIGINATE_ERROR("Unsupported function on Android");
+
54  }
+
55 
+
56  AppModuleVideo *module = reinterpret_cast<AppModuleVideo*>(userPtr);
+
57 
+
58  const float seconds = atof(optArg);
+
59  if (seconds <= 0.0f)
+
60  ORIGINATE_ERROR("'SECONDS' is invalid, must not be less than or equal to zero");
+
61 
+
62  // start the video module
+
63  PROPAGATE_ERROR(module->start());
+
64  // the scoped guard is used to call the stop function if following calls fail so that
+
65  // the function is exited with module stopped.
+ +
67 
+
68  const TimeValue endTime = getCurrentTime() + TimeValue::fromSec(seconds);
+
69 
+
70  // start the recording
+
71  PROPAGATE_ERROR(module->m_videoRecord.startRecording());
+
72  ScopedGuard<TaskVideoRecord> recordingGuard(&module->m_videoRecord,
+ +
74 
+
75  // wait until the time has elapsed
+
76  while (getCurrentTime() < endTime)
+
77  {
+
78  PROPAGATE_ERROR(Window::getInstance().pollEvents());
+
79  usleep(1000);
+
80  }
+
81 
+
82  // stop recording
+
83  recordingGuard.cancel();
+
84  PROPAGATE_ERROR(module->m_videoRecord.stopRecording());
+
85 
+
86  // stop the module
+
87  runningGuard.cancel();
+
88  PROPAGATE_ERROR(module->stop());
+
89 
+
90  return true;
+
91 }
+
92 
+
93 /* static */ bool AppModuleVideo::toggleRecording(void *userPtr, const char *optArg)
+
94 {
+
95  AppModuleVideo *module = reinterpret_cast<AppModuleVideo*>(userPtr);
+
96 
+
97  PROPAGATE_ERROR(module->m_videoRecord.toggleRecording());
+
98 
+
99  return true;
+
100 }
+
101 
+ +
103  : m_initialized(false)
+
104  , m_running(false)
+
105  , m_guiContainerConfig(NULL)
+
106  , m_guiConfig(NULL)
+
107 {
+
108 }
+
109 
+ +
111 {
+
112  shutdown();
+
113 }
+
114 
+
115 bool AppModuleVideo::initialize(Options &options)
+
116 {
+
117  if (m_initialized)
+
118  return true;
+
119 
+
120  PROPAGATE_ERROR(m_videoRecord.initialize());
+
121 
+
122  PROPAGATE_ERROR(options.addOption(
+
123  Options::Option("video", 'v', "DURATION", Options::Option::TYPE_ACTION,
+
124  "record video for DURATION seconds and save to a file.", video, this)));
+
125 
+
126  PROPAGATE_ERROR(options.addOption(
+
127  createValueOption("videobitrate", 0, "RATE",
+
128  "set the video bit rate mode to RATE. If RATE is zero a reasonable default "
+
129  "is selected.", Dispatcher::getInstance().m_videoBitRate)));
+
130  PROPAGATE_ERROR(options.addOption(
+
131  createValueOption("videoformat", 0, "FORMAT",
+
132  "set the video format. Jetson-tx1 doesn't support vp9, use other "
+
133  "available formats.", Dispatcher::getInstance().m_videoFormat)));
+
134  PROPAGATE_ERROR(options.addOption(
+
135  createValueOption("videofiletype", 0, "TYPE",
+
136  "set the video file type. For video format 'h265/vp9' set the file type as 'mkv' "
+
137  "since 'h265 & vp9' are only supported by the 'mkv' container.",
+
138  Dispatcher::getInstance().m_videoFileType)));
+
139 
+
140  m_initialized = true;
+
141 
+
142  return true;
+
143 }
+
144 
+ +
146 {
+
147  if (!m_initialized)
+
148  return true;
+
149 
+
150  PROPAGATE_ERROR_CONTINUE(stop());
+
151 
+
152  PROPAGATE_ERROR_CONTINUE(m_videoRecord.shutdown());
+
153 
+
154  delete m_guiConfig;
+
155  m_guiConfig = NULL;
+
156 
+
157  m_guiContainerConfig = NULL;
+
158 
+
159  m_initialized = false;
+
160 
+
161  return true;
+
162 }
+
163 
+
164 bool AppModuleVideo::start(Window::IGuiMenuBar *iGuiMenuBar,
+
165  Window::IGuiContainer *iGuiContainerConfig)
+
166 {
+
167  if (m_running)
+
168  return true;
+
169 
+
170  // register key observer
+
171  PROPAGATE_ERROR(Window::getInstance().registerObserver(this));
+
172 
+
173  // initialize the GUI
+
174  if (iGuiContainerConfig && !m_guiConfig)
+
175  {
+
176  // initialize the GUI
+
177 
+
178  // create a grid container
+
179  PROPAGATE_ERROR(Window::IGuiContainerGrid::create(&m_guiConfig));
+
180 
+
181  // create the elements
+
182  UniquePointer<Window::IGuiElement> element;
+
183  Dispatcher &dispatcher = Dispatcher::getInstance();
+
184 
+
185  Window::IGuiContainerGrid::BuildHelper buildHelper(m_guiConfig);
+
186 
+
187 #define CREATE_GUI_ELEMENT(_NAME, _VALUE) \
+
188  PROPAGATE_ERROR(Window::IGuiElement::createValue(&dispatcher._VALUE, &element));\
+
189  PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
190  element.release();
+
191 
+
192 #define CREATE_GUI_ELEMENT_COMBO_BOX(_NAME, _VALUE, _FROMTYPE, _TOTYPE) \
+
193  assert(sizeof(_FROMTYPE) == sizeof(_TOTYPE)); \
+
194  PROPAGATE_ERROR(Window::IGuiElement::createValue(reinterpret_cast< \
+
195  Value<_TOTYPE>*>(&dispatcher._VALUE), &element)); \
+
196  PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \
+
197  element.release();
+
198 
+
199  CREATE_GUI_ELEMENT_COMBO_BOX("Video Format", m_videoFormat,
+
200  VideoPipeline::VideoFormat, Window::IGuiElement::ValueTypeEnum);
+
201  CREATE_GUI_ELEMENT_COMBO_BOX("Video File Type", m_videoFileType,
+
202  VideoPipeline::VideoFileType, Window::IGuiElement::ValueTypeEnum);
+
203 
+
204  CREATE_GUI_ELEMENT("Video Bit Rate", m_videoBitRate);
+
205 
+
206 #undef CREATE_GUI_ELEMENT
+
207 #undef CREATE_GUI_ELEMENT_COMBO_BOX
+
208 
+
209  PROPAGATE_ERROR(Window::IGuiElement::createAction("Toggle Recording",
+
210  AppModuleVideo::toggleRecording, this, Window::IGuiElement::FLAG_BUTTON_TOGGLE,
+
211  Window::IGuiElement::ICON_MEDIA_RECORD, &element));
+
212  PROPAGATE_ERROR(buildHelper.append(element.get(), 2));
+
213  element.release();
+
214 
+
215  m_guiContainerConfig = iGuiContainerConfig;
+
216  }
+
217 
+ +
219  PROPAGATE_ERROR(m_guiContainerConfig->add(m_guiConfig));
+
220 
+
221  PROPAGATE_ERROR(m_videoRecord.start());
+
222 
+
223  m_running = true;
+
224 
+
225  return true;
+
226 }
+
227 
+ +
229 {
+
230  if (!m_running)
+
231  return true;
+
232 
+
233  PROPAGATE_ERROR(m_videoRecord.stop());
+
234 
+ +
236  PROPAGATE_ERROR(m_guiContainerConfig->remove(m_guiConfig));
+
237 
+
238  // unregister key observer
+
239  PROPAGATE_ERROR(Window::getInstance().unregisterObserver(this));
+
240 
+
241  m_running = false;
+
242 
+
243  return true;
+
244 }
+
245 
+
246 bool AppModuleVideo::onKey(const Key &key)
+
247 {
+
248  if (key == Key("space"))
+
249  {
+
250  PROPAGATE_ERROR(m_videoRecord.toggleRecording());
+
251  }
+
252 
+
253  return true;
+
254 }
+
255 
+
256 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8h.html new file mode 100644 index 0000000..df8fbcd --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: ui/video/AppModuleVideo.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
AppModuleVideo.h File Reference
+
+
+
#include "IAppModule.h"
+#include "tasks/VideoRecord.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::AppModuleVideo
 The video app module adds functionality to record a video and save it. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8h_source.html new file mode 100644 index 0000000..a18cf0e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/AppModuleVideo_8h_source.html @@ -0,0 +1,178 @@ + + + + + +Argus Camera Sample: ui/video/AppModuleVideo.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
AppModuleVideo.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef ARGUS_APPS_CAMERA_UI_APP_MODULE_VIDEO_H
+
30 #define ARGUS_APPS_CAMERA_UI_APP_MODULE_VIDEO_H
+
31 
+
32 #include "IAppModule.h"
+
33 #include "tasks/VideoRecord.h"
+
34 
+
35 namespace ArgusSamples
+
36 {
+
37 
+
38 /**
+
39  * The video app module adds functionality to record a video and save it.
+
40  */
+
41 class AppModuleVideo : public IAppModule, public Window::IKeyObserver
+
42 {
+
43 public:
+ +
45  virtual ~AppModuleVideo();
+
46 
+
47  /** @name IAppModule methods */
+
48  /**@{*/
+
49  virtual bool initialize(Options &options);
+
50  virtual bool shutdown();
+
51  virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL,
+
52  Window::IGuiContainer *iGuiContainerConfig = NULL);
+
53  virtual bool stop();
+
54  /**@}*/
+
55 
+
56  /** @name option callbacks */
+
57  /**@{*/
+
58  static bool video(void *userPtr, const char *optArg);
+
59  static bool toggleRecording(void *userPtr, const char *optArg);
+
60  /**@}*/
+
61 
+
62 private:
+
63  bool m_initialized; ///< set if initialized
+
64  bool m_running; ///< set if running
+
65  TaskVideoRecord m_videoRecord; ///< video recording task
+
66 
+
67  Window::IGuiContainer *m_guiContainerConfig; ///< configuration GUI container
+
68  Window::IGuiContainerGrid *m_guiConfig; ///< configuration GUI
+
69 
+
70  /** @name IKeyObserver methods */
+
71  /**@{*/
+
72  virtual bool onKey(const Key &key);
+
73  /**@}*/
+
74 };
+
75 
+
76 }; // namespace ArgusSamples
+
77 
+
78 #endif // ARGUS_APPS_CAMERA_UI_APP_MODULE_VIDEO_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8cpp.html new file mode 100644 index 0000000..d36c3de --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8cpp.html @@ -0,0 +1,114 @@ + + + + + +Argus Camera Sample: ui/common/App.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
App.cpp File Reference
+
+
+
#include "App.h"
+#include "Error.h"
+#include "Dispatcher.h"
+#include "Composer.h"
+#include "PerfTracker.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8cpp_source.html new file mode 100644 index 0000000..afdc584 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8cpp_source.html @@ -0,0 +1,290 @@ + + + + + +Argus Camera Sample: ui/common/App.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
App.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include "App.h"
+
30 #include "Error.h"
+
31 
+
32 #include "Dispatcher.h"
+
33 #include "Composer.h"
+
34 #include "PerfTracker.h"
+
35 
+
36 namespace ArgusSamples
+
37 {
+
38 
+
39 App::App(const char *appName)
+
40  : m_options(appName)
+
41 {
+
42 }
+
43 
+ +
45 {
+
46  shutdown();
+
47 }
+
48 
+ +
50 {
+
51  PROPAGATE_ERROR(Window::getInstance().registerObserver(this));
+
52 
+
53  const char *description =
+
54  "Press 'Ctrl-Up' to increase the focus position, press 'Ctrl-Down' to decrease the focus\n"
+
55  "position.\n"
+
56  "Press 'd' to dump runtime information.\n"
+
57  "Press 'Esc' to exit.\n";
+
58  PROPAGATE_ERROR(m_options.addDescription(description));
+
59 
+
60  return true;
+
61 }
+
62 
+ +
64 {
+
65  PROPAGATE_ERROR(Window::getInstance().unregisterObserver(this));
+
66 
+
67  // shutdown the composer
+
68  PROPAGATE_ERROR(Composer::getInstance().shutdown());
+
69 
+
70  // shutdown the window
+
71  PROPAGATE_ERROR(Window::getInstance().shutdown());
+
72 
+
73  // shutdown the dispatcher
+
74  PROPAGATE_ERROR(Dispatcher::getInstance().shutdown());
+
75 
+
76  return true;
+
77 }
+
78 
+
79 bool App::run(int argc, char **argv)
+
80 {
+
81  PROPAGATE_ERROR(PerfTracker::getInstance().onEvent(GLOBAL_EVENT_APP_START));
+
82 
+
83  PROPAGATE_ERROR(initialize());
+
84 
+
85  PROPAGATE_ERROR(PerfTracker::getInstance().onEvent(GLOBAL_EVENT_APP_INITIALIZED));
+
86 
+
87  // parse and execute the options
+
88  PROPAGATE_ERROR(m_options.parse(argc, argv));
+
89 
+
90  // if exit had not been requested start the window event loop
+
91  if (!m_options.requestedExit())
+
92  {
+
93  Window &window = Window::getInstance();
+
94 
+
95  // start the active module
+
96  PROPAGATE_ERROR(start());
+
97 
+
98  // start the event loop
+
99  PROPAGATE_ERROR(window.eventLoop());
+
100  }
+
101 
+
102  return true;
+
103 }
+
104 
+
105 /**
+
106  * Moves the focus position by one percent in 'direction'
+
107  * @param [in] direction either '-1' to move focus position down, or '+1' to move it up
+
108  */
+
109 static bool changeFocusPosition(int32_t direction)
+
110 {
+
111  Dispatcher &dispatcher = Dispatcher::getInstance();
+
112  const Argus::Range<int32_t> focusPositionRange = dispatcher.getDeviceFocusPositionRange();
+
113 
+
114  if ((direction != -1) && (direction != 1))
+
115  ORIGINATE_ERROR("Invalid direction");
+
116 
+
117  const int32_t diff = ((focusPositionRange.max() - focusPositionRange.min()) + 99) / 100;
+
118 
+
119  int32_t newPosition = dispatcher.m_focusPosition.get() + diff * direction;
+
120 
+
121  newPosition =
+
122  std::min(focusPositionRange.max(), std::max(focusPositionRange.min(), newPosition));
+
123 
+
124  PROPAGATE_ERROR(dispatcher.m_focusPosition.set(newPosition));
+
125 
+
126  PROPAGATE_ERROR(dispatcher.message("Changed focuser position to %d in range [%d, %d]\n",
+
127  newPosition, focusPositionRange.min(), focusPositionRange.max()));
+
128 
+
129  return true;
+
130 }
+
131 
+
132 /**
+
133  * Moves the aperture positions by one percent in 'direction'
+
134  * @param [in] direction either '-1' to move aperture position down, or '+1' to move it up
+
135  */
+
136 static bool changeAperturePosition(int32_t direction)
+
137 {
+
138  Dispatcher &dispatcher = Dispatcher::getInstance();
+
139  const Argus::Range<int32_t> aperturePositionRange = dispatcher.getDeviceAperturePositionRange();
+
140 
+
141  if ((direction != -1) && (direction != 1))
+
142  ORIGINATE_ERROR("Invalid direction");
+
143 
+
144  int32_t newStep = dispatcher.m_aperturePosition.get() + direction;
+
145 
+
146  newStep =
+
147  std::min(aperturePositionRange.max(), std::max(aperturePositionRange.min(), newStep));
+
148 
+
149  PROPAGATE_ERROR(dispatcher.m_aperturePosition.set(newStep));
+
150 
+
151  PROPAGATE_ERROR(dispatcher.message("Changed aperture position to %d in range [%d, %d]\n",
+
152  newStep, aperturePositionRange.min(), aperturePositionRange.max()));
+
153 
+
154  return true;
+
155 }
+
156 
+
157 bool App::onKey(const Key &key)
+
158 {
+
159  if ((key == Key("Escape")) ||
+
160  (key == Key("c", KeyModifier(KeyModifier::MASK_CONTROL))))
+
161  {
+
162  PROPAGATE_ERROR(Window::getInstance().requestExit());
+
163  }
+
164  else if (key == Key("d"))
+
165  {
+ +
167  }
+
168  else if (key == Key("Up", KeyModifier(KeyModifier::MASK_CONTROL)))
+
169  {
+
170  PROPAGATE_ERROR(changeFocusPosition(+1));
+
171  }
+
172  else if (key == Key("Down", KeyModifier(KeyModifier::MASK_CONTROL)))
+
173  {
+
174  PROPAGATE_ERROR(changeFocusPosition(-1));
+
175  }
+
176  else if (key == Key("Left", KeyModifier(KeyModifier::MASK_CONTROL)))
+
177  {
+
178  PROPAGATE_ERROR(changeAperturePosition(+1));
+
179  }
+
180  else if (key == Key("Right", KeyModifier(KeyModifier::MASK_CONTROL)))
+
181  {
+
182  PROPAGATE_ERROR(changeAperturePosition(-1));
+
183  }
+
184 
+
185  // silently ignore unhandled keys
+
186  return true;
+
187 }
+
188 
+
189 }; // namespace ArgusSamples
+
190 
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8h.html new file mode 100644 index 0000000..9c4e3c0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: ui/common/App.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
App.h File Reference
+
+
+
#include "Options.h"
+#include "Window.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::App
 Base class for apps. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8h_source.html new file mode 100644 index 0000000..21de180 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/App_8h_source.html @@ -0,0 +1,170 @@ + + + + + +Argus Camera Sample: ui/common/App.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
App.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef ARGUS_APPS_CAMERA_UI_COMMON_APP_H
+
30 #define ARGUS_APPS_CAMERA_UI_COMMON_APP_H
+
31 
+
32 #include "Options.h"
+
33 #include "Window.h"
+
34 
+
35 namespace ArgusSamples
+
36 {
+
37 
+
38 /**
+
39  * Base class for apps.
+
40  */
+
41 class App : public Window::IKeyObserver
+
42 {
+
43 public:
+
44  explicit App(const char *appName);
+
45  virtual ~App();
+
46 
+
47  virtual bool initialize();
+
48  virtual bool shutdown();
+
49  virtual bool start() = 0;
+
50 
+
51  bool run(int argc, char **argv);
+
52 
+
53 protected:
+
54  /** @name IKeyObserver methods */
+
55  /**@{*/
+
56  virtual bool onKey(const Key &key);
+
57  /**@}*/
+
58 
+
59  Options m_options;
+
60 
+
61 private:
+
62  /**
+
63  * Hide default constructor
+
64  */
+
65  App();
+
66 };
+
67 
+
68 }; // namespace ArgusSamples
+
69 
+
70 #endif // ARGUS_APPS_CAMERA_UI_COMMON_APP_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8cpp.html new file mode 100644 index 0000000..49587a0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8cpp.html @@ -0,0 +1,139 @@ + + + + + +Argus Camera Sample: renderer/Composer.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Composer.cpp File Reference
+
+
+
#include <GLES3/gl31.h>
+#include <GLES2/gl2ext.h>
+#include <math.h>
+#include "Error.h"
+#include "UniquePointer.h"
+#include "InitOnce.h"
+#include "Composer.h"
+#include "Window.h"
+#include "StreamConsumer.h"
+#include "PerfTracker.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+ + +

+Macros

#define GL_GLEXT_PROTOTYPES
+

Macro Definition Documentation

+ +
+
+ + + + +
#define GL_GLEXT_PROTOTYPES
+
+ +

Definition at line 29 of file Composer.cpp.

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8cpp_source.html new file mode 100644 index 0000000..56171ee --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8cpp_source.html @@ -0,0 +1,521 @@ + + + + + +Argus Camera Sample: renderer/Composer.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Composer.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #define GL_GLEXT_PROTOTYPES
+
30 
+
31 #include <GLES3/gl31.h>
+
32 #include <GLES2/gl2ext.h>
+
33 
+
34 #include <math.h>
+
35 
+
36 #include "Error.h"
+
37 #include "UniquePointer.h"
+
38 #include "InitOnce.h"
+
39 
+
40 #include "Composer.h"
+
41 #include "Window.h"
+
42 #include "StreamConsumer.h"
+
43 #include "PerfTracker.h"
+
44 
+
45 namespace ArgusSamples
+
46 {
+
47 
+ +
49  : m_initialized(false)
+
50  , m_program(0)
+
51  , m_vbo(0)
+
52  , m_windowWidth(0)
+
53  , m_windowHeight(0)
+
54  , m_windowAspectRatio(1.0f)
+
55 {
+
56 }
+
57 
+ +
59 {
+
60  if (!shutdown())
+
61  REPORT_ERROR("Failed to shutdown composer");
+
62 }
+
63 
+ +
65 {
+
66  static InitOnce initOnce;
+
67  static Composer instance;
+
68 
+
69  if (initOnce.begin())
+
70  {
+
71  if (instance.initialize())
+
72  {
+
73  initOnce.complete();
+
74  }
+
75  else
+
76  {
+
77  initOnce.failed();
+
78  REPORT_ERROR("Initalization failed");
+
79  }
+
80  }
+
81 
+
82  return instance;
+
83 }
+
84 
+ +
86 {
+
87  if (m_initialized)
+
88  return true;
+
89 
+
90  Window &window = Window::getInstance();
+
91 
+
92  PROPAGATE_ERROR(m_display.initialize(window.getEGLNativeDisplay()));
+
93 
+
94  PROPAGATE_ERROR(m_mutex.initialize());
+
95 
+
96  // initialize the window size
+
97  PROPAGATE_ERROR(onResize(window.getWidth(), window.getHeight()));
+
98 
+
99  // and register as observer for size changes
+
100  PROPAGATE_ERROR(window.registerObserver(this));
+
101 
+
102  PROPAGATE_ERROR(Thread::initialize());
+
103  PROPAGATE_ERROR(Thread::waitRunning());
+
104 
+
105  m_initialized = true;
+
106 
+
107  return true;
+
108 }
+
109 
+ +
111 {
+
112  if (!m_initialized)
+
113  return true;
+
114 
+
115  PROPAGATE_ERROR_CONTINUE(Window::getInstance().unregisterObserver(this));
+
116 
+
117  // request shutdown of the thread
+
118  PROPAGATE_ERROR_CONTINUE(Thread::requestShutdown());
+
119 
+
120  PROPAGATE_ERROR_CONTINUE(Thread::shutdown());
+
121 
+
122  PROPAGATE_ERROR_CONTINUE(m_display.cleanup());
+
123 
+
124  m_initialized = false;
+
125 
+
126  return true;
+
127 }
+
128 
+
129 bool Composer::bindStream(EGLStreamKHR eglStream)
+
130 {
+
131  if (eglStream == EGL_NO_STREAM_KHR)
+
132  ORIGINATE_ERROR("Invalid stream");
+
133 
+
134  PROPAGATE_ERROR(initialize());
+
135 
+
136  UniquePointer<StreamConsumer> streamConsumer(new StreamConsumer(eglStream));
+
137  if (!streamConsumer)
+
138  ORIGINATE_ERROR("Out of memory");
+
139 
+
140  // add the new stream consumer to the stream list
+
141  {
+
142  ScopedMutex sm(m_mutex);
+
143  PROPAGATE_ERROR(sm.expectLocked());
+
144 
+
145  m_streams.push_back(Stream(streamConsumer.get()));
+
146  }
+
147 
+
148  // wait until the stream is connected
+
149  while (streamConsumer->getStreamState() != EGL_STREAM_STATE_CONNECTING_KHR)
+
150  usleep(1000);
+
151  streamConsumer.release();
+
152 
+
153  return true;
+
154 }
+
155 
+
156 bool Composer::unbindStream(EGLStreamKHR eglStream)
+
157 {
+
158  ScopedMutex sm(m_mutex);
+
159  PROPAGATE_ERROR(sm.expectLocked());
+
160 
+
161  for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it)
+
162  {
+
163  if (it->m_consumer->isEGLStream(eglStream))
+
164  {
+
165  // set the shutdown flag, the composer thread will do the actual shutdown
+
166  it->m_shutdown = true;
+
167  return true;
+
168  }
+
169  }
+
170 
+
171  ORIGINATE_ERROR("Stream was not bound");
+
172 
+
173  return true;
+
174 }
+
175 
+
176 bool Composer::setStreamActive(EGLStreamKHR eglStream, bool active)
+
177 {
+
178  ScopedMutex sm(m_mutex);
+
179  PROPAGATE_ERROR(sm.expectLocked());
+
180 
+
181  for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it)
+
182  {
+
183  if (it->m_consumer->isEGLStream(eglStream))
+
184  {
+
185  it->m_active = active;
+
186  return true;
+
187  }
+
188  }
+
189 
+
190  ORIGINATE_ERROR("Stream was not bound");
+
191 
+
192  return true;
+
193 }
+
194 
+
195 bool Composer::setStreamAspectRatio(EGLStreamKHR eglStream, float aspectRatio)
+
196 {
+
197  ScopedMutex sm(m_mutex);
+
198  PROPAGATE_ERROR(sm.expectLocked());
+
199 
+
200  for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it)
+
201  {
+
202  if (it->m_consumer->isEGLStream(eglStream))
+
203  {
+
204  PROPAGATE_ERROR(it->m_consumer->setStreamAspectRatio(aspectRatio));
+
205  return true;
+
206  }
+
207  }
+
208 
+
209  ORIGINATE_ERROR("Stream was not bound");
+
210 
+
211  return true;
+
212 }
+
213 
+
214 bool Composer::onResize(uint32_t width, uint32_t height)
+
215 {
+
216  m_windowWidth = width;
+
217  m_windowHeight = height;
+
218  m_windowAspectRatio = (float)width / (float)height;
+
219  return true;
+
220 }
+
221 
+ +
223 {
+
224  // Initialize the GL context and make it current.
+
225  PROPAGATE_ERROR(m_context.initialize(&Window::getInstance()));
+
226  PROPAGATE_ERROR(m_context.makeCurrent());
+
227 
+
228  // Create the shader program.
+
229  static const char vtxSrc[] =
+
230  "#version 300 es\n"
+
231  "#extension GL_ARB_explicit_uniform_location : require\n"
+
232  "in layout(location = 0) vec2 vertex;\n"
+
233  "out vec2 vTexCoord;\n"
+
234  "layout(location = 0) uniform vec2 offset;\n"
+
235  "layout(location = 1) uniform vec2 scale;\n"
+
236  "void main() {\n"
+
237  " gl_Position = vec4((offset + vertex * scale) * 2.0 - 1.0, 0.0, 1.0);\n"
+
238  " vTexCoord = vec2(vertex.x, 1.0 - vertex.y);\n"
+
239  "}\n";
+
240  static const char frgSrc[] =
+
241  "#version 300 es\n"
+
242  "#extension GL_OES_EGL_image_external : require\n"
+
243  "precision highp float;\n"
+
244  "uniform samplerExternalOES texSampler;\n"
+
245  "in vec2 vTexCoord;\n"
+
246  "out vec4 fragColor;\n"
+
247  "void main() {\n"
+
248  " fragColor = texture2D(texSampler, vTexCoord);\n"
+
249  "}\n";
+
250  PROPAGATE_ERROR(m_context.createProgram(vtxSrc, frgSrc, &m_program));
+
251 
+
252  glUseProgram(m_program);
+
253 
+
254  // Setup vertex state.
+
255  static const GLfloat vertices[] = {
+
256  0.0f, 0.0f,
+
257  0.0f, 1.0f,
+
258  1.0f, 0.0f,
+
259  1.0f, 1.0f,
+
260  };
+
261  glGenBuffers(1, &m_vbo);
+
262  glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
+
263  if (!m_vbo)
+
264  ORIGINATE_ERROR("Failed to create VBO");
+
265  glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
+
266  glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
+
267  glBindBuffer(GL_ARRAY_BUFFER, 0);
+
268  glEnableVertexAttribArray(0);
+
269 
+
270  // sync to the display refresh rate
+
271  if (eglSwapInterval(m_display.get(), 1) != EGL_TRUE)
+
272  ORIGINATE_ERROR("Failed to set the swap interval");
+
273 
+
274  return true;
+
275 }
+
276 
+
277 bool Composer::renderStreams(uint32_t activeStreams)
+
278 {
+
279  glViewport(0,0, m_windowWidth, m_windowHeight);
+
280 
+
281  glClear(GL_COLOR_BUFFER_BIT);
+
282 
+
283  const uint32_t cells = static_cast<uint32_t>(ceil(sqrt(activeStreams)));
+
284  const float scaleX = 1.0f / cells;
+
285  const float scaleY = 1.0f / cells;
+
286  uint32_t offsetX = 0, offsetY = cells - 1;
+
287 
+
288  {
+
289  ScopedMutex sm(m_mutex);
+
290  PROPAGATE_ERROR(sm.expectLocked());
+
291 
+
292  for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it)
+
293  {
+
294  if (!it->m_active)
+
295  continue;
+
296 
+
297  const EGLint streamState = it->m_consumer->getStreamState();
+
298  if ((streamState == EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR) ||
+
299  (streamState == EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR))
+
300  {
+
301  glBindTexture(GL_TEXTURE_EXTERNAL_OES, it->m_consumer->getStreamTextureID());
+
302 
+
303  // scale according to aspect ratios
+
304  float sizeX = it->m_consumer->getStreamAspectRatio() / m_windowAspectRatio;
+
305  float sizeY = 1.0f;
+
306 
+
307  if (sizeX > sizeY)
+
308  {
+
309  sizeY /= sizeX;
+
310  sizeX = 1.0f;
+
311  }
+
312  else
+
313  {
+
314  sizeX /= sizeY;
+
315  sizeY = 1.0f;
+
316  }
+
317 
+
318  glUniform2f(0,
+
319  (offsetX - (sizeX - 1.0f) * 0.5f) * scaleX,
+
320  (offsetY - (sizeY - 1.0f) * 0.5f) * scaleY);
+
321  glUniform2f(1, scaleX * sizeX, scaleY * sizeY);
+
322 
+
323  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+
324  }
+
325 
+
326  ++offsetX;
+
327  if (offsetX == cells)
+
328  {
+
329  --offsetY;
+
330  offsetX = 0;
+
331  }
+
332  }
+
333  }
+
334 
+
335  PROPAGATE_ERROR(m_context.swapBuffers());
+
336 
+
337  PROPAGATE_ERROR(PerfTracker::getInstance().onEvent(GLOBAL_EVENT_DISPLAY));
+
338 
+
339  return true;
+
340 }
+
341 
+ +
343 {
+
344  bool render = false;
+
345  uint32_t activeStreams = 0;
+
346 
+
347  {
+
348  ScopedMutex sm(m_mutex);
+
349  PROPAGATE_ERROR(sm.expectLocked());
+
350 
+
351  if (m_streams.size() == 0)
+
352  return true;
+
353 
+
354  // first iterate through the streams and check if there are streams which should be shutdown
+
355  // also count the active streams
+
356  for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it)
+
357  {
+
358  if (it->m_shutdown)
+
359  {
+
360  // shutdown the stream consumer if it had marked so
+
361  PROPAGATE_ERROR_CONTINUE(it->m_consumer->shutdown());
+
362  delete it->m_consumer;
+
363  it = m_streams.erase(it);
+
364  continue;
+
365  }
+
366 
+
367  // do the acquire in any case even if the stream is not active (needed to get the
+
368  // transition to connecting state)
+
369  bool acquiredNewFrame = false;
+
370  PROPAGATE_ERROR(it->m_consumer->acquire(&acquiredNewFrame));
+
371 
+
372  // check if the stream is active
+
373  if (it->m_active)
+
374  {
+
375  ++activeStreams;
+
376  // if a new frame is available we need to render
+
377  if (acquiredNewFrame)
+
378  render = true;
+
379  }
+
380  }
+
381  }
+
382 
+
383  if (render)
+
384  {
+
385  PROPAGATE_ERROR(renderStreams(activeStreams));
+
386  }
+
387  else
+
388  {
+
389  // wait some time and then check again if new frames are available
+
390  usleep(1000);
+
391  }
+
392 
+
393  return true;
+
394 }
+
395 
+ +
397 {
+
398  for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it)
+
399  {
+
400  PROPAGATE_ERROR_CONTINUE(it->m_consumer->shutdown());
+
401  delete it->m_consumer;
+
402  }
+
403  m_streams.clear();
+
404 
+
405  if (m_program)
+
406  {
+
407  glDeleteProgram(m_program);
+
408  m_program = 0;
+
409  }
+
410  if (m_vbo)
+
411  {
+
412  glDeleteBuffers(1, &m_vbo);
+
413  m_vbo = 0;
+
414  }
+
415 
+
416  PROPAGATE_ERROR(m_context.cleanup());
+
417 
+
418  return true;
+
419 }
+
420 
+
421 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8h.html new file mode 100644 index 0000000..3d913fb --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8h.html @@ -0,0 +1,123 @@ + + + + + +Argus Camera Sample: renderer/Composer.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Composer.h File Reference
+
+
+
#include "EGLGlobal.h"
+#include <list>
+#include "Window.h"
+#include "Thread.h"
+#include "Mutex.h"
+#include "GLContext.h"
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  ArgusSamples::Composer
 The composer is used to render multiple EGL streams into the windows. More...
class  ArgusSamples::Composer::Stream
 Each bound EGL stream has a stream consumer and can be active or inactive. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8h_source.html new file mode 100644 index 0000000..e379601 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Composer_8h_source.html @@ -0,0 +1,266 @@ + + + + + +Argus Camera Sample: renderer/Composer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Composer.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef COMPOSER_H
+
30 #define COMPOSER_H
+
31 
+
32 #include "EGLGlobal.h"
+
33 
+
34 #include <list>
+
35 
+
36 #include "Window.h"
+
37 #include "Thread.h"
+
38 #include "Mutex.h"
+
39 
+
40 #include "GLContext.h"
+
41 
+
42 namespace ArgusSamples
+
43 {
+
44 
+
45 class StreamConsumer;
+
46 
+
47 /**
+
48  * The composer is used to render multiple EGL streams into the windows. The streams are arranged
+
49  * into a regular grid.
+
50  */
+
51 class Composer : public Thread, public Window::IResizeObserver
+
52 {
+
53 public:
+
54  /**
+
55  * Get the composer instance.
+
56  */
+
57  static Composer &getInstance();
+
58 
+
59  /**
+
60  * Shutdown, free all resources
+
61  */
+
62  bool shutdown();
+
63 
+
64  /**
+
65  * Bind an EGL stream. A bound and active stream is rendered. Newly bound streams are inactive.
+
66  *
+
67  * @param eglStream [in]
+
68  */
+
69  bool bindStream(EGLStreamKHR eglStream);
+
70 
+
71  /**
+
72  * Unbind a bound EGL stream.
+
73  *
+
74  * @param eglStream [in]
+
75  */
+
76  bool unbindStream(EGLStreamKHR eglStream);
+
77 
+
78  /**
+
79  * Set the active state of the stream, only active streams are rendered
+
80  *
+
81  * @param eglStream [in]
+
82  * @param active [in]
+
83  */
+
84  bool setStreamActive(EGLStreamKHR eglStream, bool active);
+
85 
+
86  /**
+
87  * Set the stream aspect ratio
+
88  *
+
89  * @param eglStream [in]
+
90  * @param aspectRatio [in] aspect ration of the images transported by the stream
+
91  */
+
92  bool setStreamAspectRatio(EGLStreamKHR eglStream, float aspectRatio);
+
93 
+
94  /**
+
95  * Get the EGL display
+
96  */
+
97  EGLDisplay getEGLDisplay()
+
98  {
+
99  if (initialize())
+
100  return m_display.get();
+
101 
+
102  return EGL_NO_DISPLAY;
+
103  }
+
104 
+
105 private:
+
106  Composer();
+
107  ~Composer();
+
108 
+
109  // this is a singleton, hide copy constructor etc.
+
110  Composer(const Composer&);
+
111  Composer& operator=(const Composer&);
+
112 
+
113  bool initialize();
+
114 
+
115  /** @name Thread methods */
+
116  /**@{*/
+
117  virtual bool threadInitialize();
+
118  virtual bool threadExecute();
+
119  virtual bool threadShutdown();
+
120  /**@}*/
+
121 
+
122  /** @name IResizeObserver methods */
+
123  /**@{*/
+
124  virtual bool onResize(uint32_t width, uint32_t height);
+
125  /**@}*/
+
126 
+
127  bool renderStreams(uint32_t activeStreams);
+
128 
+
129  bool m_initialized; ///< set if initialized
+
130 
+
131  EGLDisplayHolder m_display; ///< EGL display
+
132 
+
133  GLContext m_context; ///< GL context
+
134  uint32_t m_program; ///< program to render streams
+
135  uint32_t m_vbo; ///< vertex buffer object
+
136  uint32_t m_windowWidth; ///< window width
+
137  uint32_t m_windowHeight; ///< window height
+
138  float m_windowAspectRatio; ///< window aspect ratio
+
139 
+
140  Mutex m_mutex; ///< to protect access to the stream array
+
141 
+
142  /**
+
143  * Each bound EGL stream has a stream consumer and can be active or inactive.
+
144  */
+
145  class Stream
+
146  {
+
147  public:
+
148  explicit Stream(StreamConsumer *consumer)
+
149  : m_consumer(consumer)
+
150  , m_active(false)
+
151  , m_shutdown(false)
+
152  {
+
153  }
+
154 
+
155  StreamConsumer *m_consumer; ///< the stream consumer
+
156  bool m_active; ///< if set then the stream is active and rendered
+
157  bool m_shutdown; ///< shutdown and remove the stream
+
158  };
+
159 
+
160  typedef std::list<Stream> StreamList; ///< a list of streams
+
161  StreamList m_streams; ///< the list of composed streams
+
162 };
+
163 
+
164 }; // namespace ArgusSamples
+
165 
+
166 #endif // COMPOSER_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8cpp.html new file mode 100644 index 0000000..80b7ade --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8cpp.html @@ -0,0 +1,112 @@ + + + + + +Argus Camera Sample: common/ConditionVariable.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ConditionVariable.cpp File Reference
+
+
+
#include "ConditionVariable.h"
+#include "Mutex.h"
+#include "Error.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8cpp_source.html new file mode 100644 index 0000000..30ac216 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8cpp_source.html @@ -0,0 +1,199 @@ + + + + + +Argus Camera Sample: common/ConditionVariable.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ConditionVariable.cpp
+
+
+Go to the documentation of this file.
1 /* Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
2  *
+
3  * Redistribution and use in source and binary forms, with or without
+
4  * modification, are permitted provided that the following conditions
+
5  * are met:
+
6  * * Redistributions of source code must retain the above copyright
+
7  * notice, this list of conditions and the following disclaimer.
+
8  * * Redistributions in binary form must reproduce the above copyright
+
9  * notice, this list of conditions and the following disclaimer in the
+
10  * documentation and/or other materials provided with the distribution.
+
11  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
12  * contributors may be used to endorse or promote products derived
+
13  * from this software without specific prior written permission.
+
14  *
+
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
18  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26  */
+
27 
+
28 #include "ConditionVariable.h"
+
29 #include "Mutex.h"
+
30 #include "Error.h"
+
31 
+
32 namespace ArgusSamples
+
33 {
+
34 
+ +
36  : m_initialized(false)
+
37 {
+
38 }
+
39 
+ +
41 {
+
42  shutdown();
+
43 }
+
44 
+ +
46 {
+
47  if (!m_initialized)
+
48  {
+
49  if (pthread_cond_init(&m_cond, NULL) != 0)
+
50  ORIGINATE_ERROR("Failed to initialize condition variable");
+
51  m_initialized = true;
+
52  }
+
53 
+
54  return true;
+
55 }
+
56 
+ +
58 {
+
59  if (m_initialized)
+
60  {
+
61  if (pthread_cond_destroy(&m_cond) != 0)
+
62  ORIGINATE_ERROR("Failed to destroy condition variable");
+
63  m_initialized = false;
+
64  }
+
65 
+
66  return true;
+
67 }
+
68 
+ +
70 {
+
71  if (!m_initialized)
+
72  ORIGINATE_ERROR("Not initialized");
+
73 
+
74  if (pthread_cond_broadcast(&m_cond) != 0)
+
75  ORIGINATE_ERROR("pthread_cond_broadcast failed");
+
76  return true;
+
77 }
+
78 
+ +
80 {
+
81  if (!m_initialized)
+
82  ORIGINATE_ERROR("Not initialized");
+
83 
+
84  if (pthread_cond_signal(&m_cond) != 0)
+
85  ORIGINATE_ERROR("pthread_cond_signal failed");
+
86  return true;
+
87 }
+
88 
+
89 bool ConditionVariable::wait(const Mutex& mutex) const
+
90 {
+
91  if (!m_initialized)
+
92  ORIGINATE_ERROR("Not initialized");
+
93 
+
94  if (pthread_cond_wait(&m_cond, mutex.getPThreadMutex()) != 0)
+
95  ORIGINATE_ERROR("pthread_cond_signal failed");
+
96  return true;
+
97 }
+
98 
+
99 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8h.html new file mode 100644 index 0000000..122b27f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8h.html @@ -0,0 +1,116 @@ + + + + + +Argus Camera Sample: common/ConditionVariable.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ConditionVariable.h File Reference
+
+
+
#include <pthread.h>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::ConditionVariable
 Conditional. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8h_source.html new file mode 100644 index 0000000..c265da7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ConditionVariable_8h_source.html @@ -0,0 +1,194 @@ + + + + + +Argus Camera Sample: common/ConditionVariable.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ConditionVariable.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef CAMERA_COMMON_CONDITION_VARIABLE_H
+
30 #define CAMERA_COMMON_CONDITION_VARIABLE_H
+
31 
+
32 #include <pthread.h>
+
33 
+
34 namespace ArgusSamples
+
35 {
+
36 
+
37 class Mutex;
+
38 
+
39 /**
+
40  * Conditional
+
41  */
+ +
43 {
+
44 public:
+ + +
47 
+
48  /**
+
49  * Create the underlying condition variable. This method must be called before any other
+
50  * methods.
+
51  */
+
52  bool initialize();
+
53 
+
54  /**
+
55  * Destroy the underlying condition variable. After this call, this object can no longer be used
+
56  * (until and unless a future call to @c initialize()). Calling this method if the
+
57  * object is not initialized generates no error, but silently returns.
+
58  */
+
59  bool shutdown();
+
60 
+
61  /**
+
62  * Broadcast the condition variable. This method is declared @c const for convenience.
+
63  */
+
64  bool broadcast() const;
+
65 
+
66  /**
+
67  * Signal the condition variable. This method is declared @c const for convenience.
+
68  */
+
69  bool signal() const;
+
70 
+
71  /**
+
72  * Wait on the condition variable. This method is declared @c const for convenience.
+
73  * @param [in] mutex The mutex that will be released while waiting. When multiple threads
+
74  * are waiting concurrently, they must all be using the same mutex.
+
75  */
+
76  bool wait(const Mutex& mutex) const;
+
77 
+
78 private:
+ +
80  /**
+
81  * pthread conditional variable, this is 'mutable' so that 'const' functions can be used.
+
82  */
+
83  mutable pthread_cond_t m_cond;
+
84 
+
85  /**
+
86  * Hide copy constructor and assignment operator
+
87  */
+ + +
90 };
+
91 
+
92 } // namespace ArgusSamples
+
93 
+
94 #endif // CAMERA_COMMON_CONDITION_VARIABLE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8cpp.html new file mode 100644 index 0000000..324732e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8cpp.html @@ -0,0 +1,146 @@ + + + + + +Argus Camera Sample: modules/Dispatcher.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Dispatcher.cpp File Reference
+
+
+
#include <stdio.h>
+#include <unistd.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <sstream>
+#include <limits>
+#include "Dispatcher.h"
+#include "InitOnce.h"
+#include "UniquePointer.h"
+#include "Error.h"
+#include "Util.h"
+#include "Composer.h"
+#include "Validator.h"
+#include <Argus/Ext/BayerSharpnessMap.h>
+#include <Argus/Ext/DebugCaptureSession.h>
+#include <Argus/Ext/DeFog.h>
+#include <Argus/Ext/FaceDetect.h>
+#include <Argus/Ext/InternalFrameCount.h>
+#include <Argus/Ext/SensorPrivateMetadata.h>
+#include <Argus/Ext/PwlWdrSensorMode.h>
+#include <Argus/Ext/DolWdrSensorMode.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + +

+Classes

class  ArgusSamples::IObserverForInterface
 An observer for an Argus interface. More...
class  ArgusSamples::DenoiseSettingsObserver
 Denoise settings observer. More...
class  ArgusSamples::EdgeEnhanceSettingsObserver
 Edge enhancement settings observer. More...
class  ArgusSamples::SourceSettingsObserver
 Source settings observer. More...
class  ArgusSamples::AutoControlSettingsObserver
 Auto control settings observer. More...
class  ArgusSamples::DeFogSettingsObserver
 DeFog settings observer. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8cpp_source.html new file mode 100644 index 0000000..e06a01b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8cpp_source.html @@ -0,0 +1,2133 @@ + + + + + +Argus Camera Sample: modules/Dispatcher.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Dispatcher.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include <stdio.h>
+
30 #include <unistd.h>
+
31 #include <stdarg.h>
+
32 #include <assert.h>
+
33 
+
34 #include <sstream>
+
35 #include <limits>
+
36 
+
37 #include "Dispatcher.h"
+
38 #include "InitOnce.h"
+
39 #include "UniquePointer.h"
+
40 #include "Error.h"
+
41 #include "Util.h"
+
42 #include "Composer.h"
+
43 #include "Validator.h"
+
44 #include <Argus/Ext/BayerSharpnessMap.h>
+
45 #include <Argus/Ext/DebugCaptureSession.h>
+
46 #include <Argus/Ext/DeFog.h>
+
47 #include <Argus/Ext/FaceDetect.h>
+
48 #include <Argus/Ext/InternalFrameCount.h>
+
49 #include <Argus/Ext/SensorPrivateMetadata.h>
+
50 #include <Argus/Ext/DebugCaptureSession.h>
+
51 #include <Argus/Ext/PwlWdrSensorMode.h>
+
52 #include <Argus/Ext/DolWdrSensorMode.h>
+
53 
+
54 namespace ArgusSamples
+
55 {
+
56 
+
57 /**
+
58  * An observer for an Argus interface.
+
59  */
+
60 class IObserverForInterface : public IObserver
+
61 {
+
62 public:
+
63  virtual ~IObserverForInterface() { };
+
64 
+
65  /**
+
66  * Check if this is the observer for the given interface.
+
67  *
+
68  * @param interface [in]
+
69  */
+
70  virtual bool isInterface(Argus::Interface *interface) const = 0;
+
71 };
+
72 
+
73 /**
+
74  * Denoise settings observer. Update Argus denoise settings when values change.
+
75  */
+ +
77 {
+
78 public:
+
79  DenoiseSettingsObserver(Argus::IDenoiseSettings *iDenoiseSettings)
+
80  : m_iDenoiseSettings(iDenoiseSettings)
+
81  {
+
82  Dispatcher &dispatcher = Dispatcher::getInstance();
+
83 
+
84  PROPAGATE_ERROR_CONTINUE(dispatcher.m_denoiseMode.registerObserver(this,
+
85  static_cast<IObserver::CallbackFunction>(
+ +
87  PROPAGATE_ERROR_CONTINUE(dispatcher.m_denoiseStrength.registerObserver(this,
+
88  static_cast<IObserver::CallbackFunction>(
+ +
90  }
+
91 
+ +
93  {
+
94  Dispatcher &dispatcher = Dispatcher::getInstance();
+
95 
+
96  PROPAGATE_ERROR_CONTINUE(dispatcher.m_denoiseStrength.unregisterObserver(this,
+
97  static_cast<IObserver::CallbackFunction>(
+ +
99  PROPAGATE_ERROR_CONTINUE(dispatcher.m_denoiseMode.unregisterObserver(this,
+
100  static_cast<IObserver::CallbackFunction>(
+ +
102  }
+
103 
+
104  virtual bool isInterface(Argus::Interface *interface) const
+
105  {
+
106  return (interface == m_iDenoiseSettings);
+
107  }
+
108 
+
109 private:
+
110  bool onDenoiseModeChanged(const Observed &source)
+
111  {
+
112  Dispatcher &dispatcher = Dispatcher::getInstance();
+
113 
+
114  assert(&source == &dispatcher.m_denoiseMode);
+
115 
+
116  if (m_iDenoiseSettings->setDenoiseMode(dispatcher.m_denoiseMode.get()) != Argus::STATUS_OK)
+
117  ORIGINATE_ERROR("Failed to set the denoising mode");
+
118 
+
119  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
120 
+
121  return true;
+
122  }
+
123 
+
124  bool onDenoiseStrengthChanged(const Observed &source)
+
125  {
+
126  Dispatcher &dispatcher = Dispatcher::getInstance();
+
127 
+
128  assert(&source == &dispatcher.m_denoiseStrength);
+
129 
+
130  if (m_iDenoiseSettings->setDenoiseStrength(dispatcher.m_denoiseStrength.get()) !=
+
131  Argus::STATUS_OK)
+
132  {
+
133  ORIGINATE_ERROR("Failed to set the denoise strength");
+
134  }
+
135 
+
136  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
137 
+
138  return true;
+
139  }
+
140 
+
141  Argus::IDenoiseSettings *m_iDenoiseSettings;
+
142 };
+
143 
+
144 /**
+
145  * Edge enhancement settings observer. Update Argus edge enhance settings when values change.
+
146  */
+ +
148 {
+
149 public:
+
150  EdgeEnhanceSettingsObserver(Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings)
+
151  : m_iEdgeEnhanceSettings(iEdgeEnhanceSettings)
+
152  {
+
153  Dispatcher &dispatcher = Dispatcher::getInstance();
+
154 
+
155  PROPAGATE_ERROR_CONTINUE(dispatcher.m_edgeEnhanceMode.registerObserver(this,
+
156  static_cast<IObserver::CallbackFunction>(
+ +
158  PROPAGATE_ERROR_CONTINUE(dispatcher.m_edgeEnhanceStrength.registerObserver(this,
+
159  static_cast<IObserver::CallbackFunction>(
+ +
161  }
+
162 
+ +
164  {
+
165  Dispatcher &dispatcher = Dispatcher::getInstance();
+
166 
+
167  PROPAGATE_ERROR_CONTINUE(dispatcher.m_edgeEnhanceStrength.unregisterObserver(this,
+
168  static_cast<IObserver::CallbackFunction>(
+ +
170  PROPAGATE_ERROR_CONTINUE(dispatcher.m_edgeEnhanceMode.unregisterObserver(this,
+
171  static_cast<IObserver::CallbackFunction>(
+ +
173  }
+
174 
+
175  virtual bool isInterface(Argus::Interface *interface) const
+
176  {
+
177  return (interface == m_iEdgeEnhanceSettings);
+
178  }
+
179 
+
180 private:
+
181  bool onEdgeEnhanceModeChanged(const Observed &source)
+
182  {
+
183  Dispatcher &dispatcher = Dispatcher::getInstance();
+
184 
+
185  assert(&source == &dispatcher.m_edgeEnhanceMode);
+
186 
+
187  if (m_iEdgeEnhanceSettings->setEdgeEnhanceMode(dispatcher.m_edgeEnhanceMode.get())
+
188  != Argus::STATUS_OK)
+
189  {
+
190  ORIGINATE_ERROR("Failed to set the edge enhancement mode");
+
191  }
+
192 
+
193  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
194 
+
195  return true;
+
196  }
+
197 
+
198  bool onEdgeEnhanceStrengthChanged(const Observed &source)
+
199  {
+
200  Dispatcher &dispatcher = Dispatcher::getInstance();
+
201 
+
202  assert(&source == &dispatcher.m_edgeEnhanceStrength);
+
203 
+
204  if (m_iEdgeEnhanceSettings->setEdgeEnhanceStrength(dispatcher.m_edgeEnhanceStrength.get())
+
205  != Argus::STATUS_OK)
+
206  {
+
207  ORIGINATE_ERROR("Failed to set the edge enhancement strength");
+
208  }
+
209 
+
210  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
211 
+
212  return true;
+
213  }
+
214 
+
215  Argus::IEdgeEnhanceSettings *m_iEdgeEnhanceSettings;
+
216 };
+
217 
+
218 /**
+
219  * Source settings observer. Update Argus source settings if values which are set through the
+
220  * source settings change.
+
221  */
+ +
223 {
+
224 public:
+
225  SourceSettingsObserver(Argus::ISourceSettings *iSourceSettings)
+
226  : m_iSourceSettings(iSourceSettings)
+
227  {
+
228  Dispatcher &dispatcher = Dispatcher::getInstance();
+
229 
+
230  PROPAGATE_ERROR_CONTINUE(dispatcher.m_exposureTimeRange.registerObserver(this,
+
231  static_cast<IObserver::CallbackFunction>(
+ +
233  PROPAGATE_ERROR_CONTINUE(dispatcher.m_gainRange.registerObserver(this,
+
234  static_cast<IObserver::CallbackFunction>(
+ +
236  PROPAGATE_ERROR_CONTINUE(dispatcher.m_sensorModeIndex.registerObserver(this,
+
237  static_cast<IObserver::CallbackFunction>(
+ +
239  PROPAGATE_ERROR_CONTINUE(dispatcher.m_frameRate.registerObserver(this,
+
240  static_cast<IObserver::CallbackFunction>(
+ +
242  PROPAGATE_ERROR_CONTINUE(dispatcher.m_focusPosition.registerObserver(this,
+
243  static_cast<IObserver::CallbackFunction>(
+ +
245  PROPAGATE_ERROR_CONTINUE(dispatcher.m_aperturePosition.registerObserver(this,
+
246  static_cast<IObserver::CallbackFunction>(
+ +
248  PROPAGATE_ERROR_CONTINUE(dispatcher.m_apertureFnum.registerObserver(this,
+
249  static_cast<IObserver::CallbackFunction>(
+ +
251  PROPAGATE_ERROR_CONTINUE(dispatcher.m_apertureMotorSpeed.registerObserver(this,
+
252  static_cast<IObserver::CallbackFunction>(
+ +
254  PROPAGATE_ERROR_CONTINUE(dispatcher.m_captureYuvFormat.registerObserver(this,
+
255  static_cast<IObserver::CallbackFunction>(
+ +
257  }
+
258 
+ +
260  {
+
261  Dispatcher &dispatcher = Dispatcher::getInstance();
+
262 
+
263  PROPAGATE_ERROR_CONTINUE(dispatcher.m_apertureMotorSpeed.unregisterObserver(this,
+
264  static_cast<IObserver::CallbackFunction>(
+ +
266  PROPAGATE_ERROR_CONTINUE(dispatcher.m_aperturePosition.unregisterObserver(this,
+
267  static_cast<IObserver::CallbackFunction>(
+ +
269  PROPAGATE_ERROR_CONTINUE(dispatcher.m_apertureFnum.unregisterObserver(this,
+
270  static_cast<IObserver::CallbackFunction>(
+ +
272  PROPAGATE_ERROR_CONTINUE(dispatcher.m_focusPosition.unregisterObserver(this,
+
273  static_cast<IObserver::CallbackFunction>(
+ +
275  PROPAGATE_ERROR_CONTINUE(dispatcher.m_frameRate.unregisterObserver(this,
+
276  static_cast<IObserver::CallbackFunction>(
+ +
278  PROPAGATE_ERROR_CONTINUE(dispatcher.m_sensorModeIndex.unregisterObserver(this,
+
279  static_cast<IObserver::CallbackFunction>(
+ +
281  PROPAGATE_ERROR_CONTINUE(dispatcher.m_gainRange.unregisterObserver(this,
+
282  static_cast<IObserver::CallbackFunction>(
+ +
284  PROPAGATE_ERROR_CONTINUE(dispatcher.m_exposureTimeRange.unregisterObserver(this,
+
285  static_cast<IObserver::CallbackFunction>(
+ +
287  PROPAGATE_ERROR_CONTINUE(dispatcher.m_captureYuvFormat.unregisterObserver(this,
+
288  static_cast<IObserver::CallbackFunction>(
+ +
290  }
+
291 
+
292  virtual bool isInterface(Argus::Interface *interface) const
+
293  {
+
294  return (interface == m_iSourceSettings);
+
295  }
+
296 
+
297 private:
+
298  bool onExposureTimeRangeChanged(const Observed &source)
+
299  {
+
300  Dispatcher &dispatcher = Dispatcher::getInstance();
+
301 
+
302  assert(&source == &dispatcher.m_exposureTimeRange);
+
303 
+
304  if (m_iSourceSettings->setExposureTimeRange(dispatcher.m_exposureTimeRange.get()) !=
+
305  Argus::STATUS_OK)
+
306  {
+
307  ORIGINATE_ERROR("Failed to set exposure time range");
+
308  }
+
309 
+
310  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
311 
+
312  return true;
+
313  }
+
314 
+
315  bool onGainRangeChanged(const Observed &source)
+
316  {
+
317  Dispatcher &dispatcher = Dispatcher::getInstance();
+
318 
+
319  assert(&source == &dispatcher.m_gainRange);
+
320 
+
321  if (m_iSourceSettings->setGainRange(dispatcher.m_gainRange.get()) != Argus::STATUS_OK)
+
322  ORIGINATE_ERROR("Failed to set gain range");
+
323 
+
324  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
325 
+
326  return true;
+
327  }
+
328 
+
329  bool onSensorModeChanged(const Observed &source)
+
330  {
+
331  Dispatcher &dispatcher = Dispatcher::getInstance();
+
332 
+
333  assert(&source == &dispatcher.m_sensorModeIndex);
+
334 
+
335  Argus::SensorMode *sensorMode = NULL;
+
336  PROPAGATE_ERROR(dispatcher.getSensorMode(dispatcher.m_sensorModeIndex.get(), &sensorMode));
+
337 
+
338  if (m_iSourceSettings->setSensorMode(sensorMode) != Argus::STATUS_OK)
+
339  ORIGINATE_ERROR("Failed to set sensor mode");
+
340 
+
341  PROPAGATE_ERROR(dispatcher.restartActiveRequests());
+
342 
+
343  return true;
+
344  }
+
345 
+
346  bool onCaptureYuvFormatChanged(const Observed & source)
+
347  {
+
348  Dispatcher &dispatcher = Dispatcher::getInstance();
+
349 
+
350  assert(&source == &dispatcher.m_captureYuvFormat);
+
351 
+
352  // The Video/Still task will shut down and restart their
+
353  // EGLStreams, causing their underlying buffer pools to be reallocated.
+
354  // So there's not much else to do here.
+
355  PROPAGATE_ERROR(dispatcher.restartActiveRequests());
+
356 
+
357  return true;
+
358  }
+
359 
+
360  bool onFocusPositionChanged(const Observed &source)
+
361  {
+
362  Dispatcher &dispatcher = Dispatcher::getInstance();
+
363 
+
364  assert(&source == &dispatcher.m_focusPosition);
+
365 
+
366  if (m_iSourceSettings->setFocusPosition(dispatcher.m_focusPosition.get()) !=
+
367  Argus::STATUS_OK)
+
368  {
+
369  ORIGINATE_ERROR("Failed to set focus position");
+
370  }
+
371 
+
372  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
373 
+
374  return true;
+
375  }
+
376 
+
377  bool onAperturePositionChanged(const Observed &source)
+
378  {
+
379  Dispatcher &dispatcher = Dispatcher::getInstance();
+
380 
+
381  assert(&source == &dispatcher.m_aperturePosition);
+
382 
+
383  if (m_iSourceSettings->setAperturePosition(dispatcher.m_aperturePosition.get()) !=
+
384  Argus::STATUS_OK)
+
385  {
+
386  ORIGINATE_ERROR("Failed to set aperture motor step");
+
387  }
+
388 
+
389  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
390 
+
391  return true;
+
392  }
+
393 
+
394  bool onApertureFnumChanged(const Observed &source)
+
395  {
+
396  Dispatcher &dispatcher = Dispatcher::getInstance();
+
397 
+
398  assert(&source == &dispatcher.m_apertureFnum);
+
399 
+
400  if (m_iSourceSettings->setApertureFNumber(dispatcher.m_apertureFnum.get()) !=
+
401  Argus::STATUS_OK)
+
402  {
+
403  ORIGINATE_ERROR("Failed to set aperture F-num");
+
404  }
+
405 
+
406  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
407 
+
408  return true;
+
409  }
+
410 
+
411  bool onApertureMotorSpeedChanged(const Observed &source)
+
412  {
+
413  Dispatcher &dispatcher = Dispatcher::getInstance();
+
414 
+
415  assert(&source == &dispatcher.m_apertureMotorSpeed);
+
416 
+
417  if (m_iSourceSettings->setApertureMotorSpeed(dispatcher.m_apertureMotorSpeed.get()) !=
+
418  Argus::STATUS_OK)
+
419  {
+
420  ORIGINATE_ERROR("Failed to set aperture motor speed");
+
421  }
+
422 
+
423  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
424 
+
425  return true;
+
426  }
+
427 
+
428  bool onFrameRateChanged(const Observed &source)
+
429  {
+
430  Dispatcher &dispatcher = Dispatcher::getInstance();
+
431 
+
432  assert(&source == &dispatcher.m_frameRate);
+
433 
+
434  Argus::Range<uint64_t> frameDurationRangeNs(0);
+
435 
+
436  if (dispatcher.m_frameRate.get() == 0.0f)
+
437  {
+
438  // a frame rate of zero means VFR, get the sensor frame duration and apply it to
+
439  // the source
+
440  Argus::SensorMode *sensorMode = NULL;
+
441  PROPAGATE_ERROR(dispatcher.getSensorMode(dispatcher.m_sensorModeIndex.get(),
+
442  &sensorMode));
+
443 
+
444  Argus::ISensorMode *iSensorMode =
+
445  Argus::interface_cast<Argus::ISensorMode>(sensorMode);
+
446 
+
447  frameDurationRangeNs = iSensorMode->getFrameDurationRange();
+
448  }
+
449  else
+
450  {
+
451  // frame rate is frames per second, frameduration is in nanoseconds
+
452  frameDurationRangeNs =
+
453  TimeValue::fromCycelsPerSec(dispatcher.m_frameRate.get()).toNSec();
+
454  }
+
455 
+
456  if (m_iSourceSettings->setFrameDurationRange(frameDurationRangeNs) != Argus::STATUS_OK)
+
457  ORIGINATE_ERROR("Failed to set frame duration range");
+
458 
+
459  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
460 
+
461  return true;
+
462  }
+
463 
+
464  Argus::ISourceSettings *m_iSourceSettings;
+
465 };
+
466 
+
467 /**
+
468  * Auto control settings observer. Update Argus auto control settings if values which are set
+
469  * through the auto control settings change.
+
470  */
+ +
472 {
+
473 public:
+
474  AutoControlSettingsObserver(Argus::IAutoControlSettings *iAutoControlSettings)
+
475  : m_iAutoControlSettings(iAutoControlSettings)
+
476  {
+
477  Dispatcher &dispatcher = Dispatcher::getInstance();
+
478 
+
479  PROPAGATE_ERROR_CONTINUE(dispatcher.m_aeAntibandingMode.registerObserver(this,
+
480  static_cast<IObserver::CallbackFunction>(
+ +
482  PROPAGATE_ERROR_CONTINUE(dispatcher.m_aeLock.registerObserver(this,
+
483  static_cast<IObserver::CallbackFunction>(
+ +
485  PROPAGATE_ERROR_CONTINUE(dispatcher.m_awbLock.registerObserver(this,
+
486  static_cast<IObserver::CallbackFunction>(
+ +
488  PROPAGATE_ERROR_CONTINUE(dispatcher.m_awbMode.registerObserver(this,
+
489  static_cast<IObserver::CallbackFunction>(
+ +
491  PROPAGATE_ERROR_CONTINUE(dispatcher.m_exposureCompensation.registerObserver(this,
+
492  static_cast<IObserver::CallbackFunction>(
+ +
494  PROPAGATE_ERROR_CONTINUE(dispatcher.m_ispDigitalGainRange.registerObserver(this,
+
495  static_cast<IObserver::CallbackFunction>(
+ +
497  PROPAGATE_ERROR_CONTINUE(dispatcher.m_acRegionHorizontal.registerObserver(this,
+
498  static_cast<IObserver::CallbackFunction>(
+ +
500  PROPAGATE_ERROR_CONTINUE(dispatcher.m_acRegionVertical.registerObserver(this,
+
501  static_cast<IObserver::CallbackFunction>(
+ +
503  }
+
504 
+ +
506  {
+
507  Dispatcher &dispatcher = Dispatcher::getInstance();
+
508 
+
509  PROPAGATE_ERROR_CONTINUE(dispatcher.m_ispDigitalGainRange.unregisterObserver(this,
+
510  static_cast<IObserver::CallbackFunction>(
+ +
512  PROPAGATE_ERROR_CONTINUE(dispatcher.m_exposureCompensation.unregisterObserver(this,
+
513  static_cast<IObserver::CallbackFunction>(
+ +
515  PROPAGATE_ERROR_CONTINUE(dispatcher.m_awbMode.unregisterObserver(this,
+
516  static_cast<IObserver::CallbackFunction>(
+ +
518  PROPAGATE_ERROR_CONTINUE(dispatcher.m_awbLock.unregisterObserver(this,
+
519  static_cast<IObserver::CallbackFunction>(
+ +
521  PROPAGATE_ERROR_CONTINUE(dispatcher.m_aeLock.unregisterObserver(this,
+
522  static_cast<IObserver::CallbackFunction>(
+ +
524  PROPAGATE_ERROR_CONTINUE(dispatcher.m_aeAntibandingMode.unregisterObserver(this,
+
525  static_cast<IObserver::CallbackFunction>(
+ +
527  PROPAGATE_ERROR_CONTINUE(dispatcher.m_acRegionHorizontal.unregisterObserver(this,
+
528  static_cast<IObserver::CallbackFunction>(
+ +
530  PROPAGATE_ERROR_CONTINUE(dispatcher.m_acRegionVertical.unregisterObserver(this,
+
531  static_cast<IObserver::CallbackFunction>(
+ +
533  }
+
534 
+
535  virtual bool isInterface(Argus::Interface *interface) const
+
536  {
+
537  return (interface == m_iAutoControlSettings);
+
538  }
+
539 
+
540 private:
+
541  bool onAeAntibandingModeChanged(const Observed &source)
+
542  {
+
543  Dispatcher &dispatcher = Dispatcher::getInstance();
+
544 
+
545  assert(&source == &dispatcher.m_aeAntibandingMode);
+
546 
+
547  if (m_iAutoControlSettings->setAeAntibandingMode(dispatcher.m_aeAntibandingMode.get()) !=
+
548  Argus::STATUS_OK)
+
549  {
+
550  ORIGINATE_ERROR("Failed to set the AE antibanding mode");
+
551  }
+
552 
+
553  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
554 
+
555  return true;
+
556  }
+
557 
+
558  bool onAeLockChanged(const Observed &source)
+
559  {
+
560  Dispatcher &dispatcher = Dispatcher::getInstance();
+
561 
+
562  assert(&source == &dispatcher.m_aeLock);
+
563 
+
564  if (m_iAutoControlSettings->setAeLock(dispatcher.m_aeLock.get()) != Argus::STATUS_OK)
+
565  ORIGINATE_ERROR("Failed to set the AE lock");
+
566 
+
567  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
568 
+
569  return true;
+
570  }
+
571 
+
572  bool onAwbLockChanged(const Observed &source)
+
573  {
+
574  Dispatcher &dispatcher = Dispatcher::getInstance();
+
575 
+
576  assert(&source == &dispatcher.m_awbLock);
+
577 
+
578  if (m_iAutoControlSettings->setAwbLock(dispatcher.m_awbLock.get()) != Argus::STATUS_OK)
+
579  ORIGINATE_ERROR("Failed to set the AWB lock");
+
580 
+
581  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
582 
+
583  return true;
+
584  }
+
585 
+
586  bool onAwbModeChanged(const Observed &source)
+
587  {
+
588  Dispatcher &dispatcher = Dispatcher::getInstance();
+
589 
+
590  assert(&source == &dispatcher.m_awbMode);
+
591 
+
592  if (m_iAutoControlSettings->setAwbMode(dispatcher.m_awbMode.get()) != Argus::STATUS_OK)
+
593  ORIGINATE_ERROR("Failed to set the AWB mode");
+
594 
+
595  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
596 
+
597  return true;
+
598  }
+
599 
+
600  bool onExposureCompensationChanged(const Observed &source)
+
601  {
+
602  Dispatcher &dispatcher = Dispatcher::getInstance();
+
603 
+
604  assert(&source == &dispatcher.m_exposureCompensation);
+
605 
+
606  if (m_iAutoControlSettings->setExposureCompensation(
+
607  dispatcher.m_exposureCompensation.get()) != Argus::STATUS_OK)
+
608  {
+
609  ORIGINATE_ERROR("Failed to set the exposure compensation");
+
610  }
+
611 
+
612  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
613 
+
614  return true;
+
615  }
+
616 
+
617  bool onIspDigitalGainRangeChanged(const Observed &source)
+
618  {
+
619  Dispatcher &dispatcher = Dispatcher::getInstance();
+
620 
+
621  assert(&source == &dispatcher.m_ispDigitalGainRange);
+
622 
+
623  if (m_iAutoControlSettings->setIspDigitalGainRange(
+
624  dispatcher.m_ispDigitalGainRange.get()) != Argus::STATUS_OK)
+
625  {
+
626  ORIGINATE_ERROR("Failed to set the Isp Digital Gain Range");
+
627  }
+
628  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
629 
+
630  return true;
+
631  }
+
632 
+
633  bool onAcRegionChanged(const Observed &source)
+
634  {
+
635  Dispatcher &dispatcher = Dispatcher::getInstance();
+
636 
+
637  assert((&source == &dispatcher.m_acRegionHorizontal) ||
+
638  (&source == &dispatcher.m_acRegionVertical));
+
639 
+
640  Argus::Range<uint32_t> horizontal = dispatcher.m_acRegionHorizontal.get();
+
641  Argus::Range<uint32_t> vertical = dispatcher.m_acRegionVertical.get();
+
642 
+
643  if ((horizontal.min() < horizontal.max()) &&
+
644  vertical.min() < vertical.max())
+
645  {
+
646  // set bayerHistogram
+
647  Argus::Rectangle<uint32_t> histRegion(horizontal.min(), vertical.min(),
+
648  horizontal.max(), vertical.max());
+
649 
+
650  if (m_iAutoControlSettings->setBayerHistogramRegion(histRegion) != Argus::STATUS_OK)
+
651  {
+
652  ORIGINATE_ERROR("Failed to set the bayer histogram region");
+
653  }
+
654 
+
655  // set AF
+
656  std::vector<Argus::AcRegion> afRegions;
+
657  Argus::AcRegion oneRegion(horizontal.min(), vertical.min(), horizontal.max(),
+
658  vertical.max(), 1.0f);
+
659  afRegions.push_back(oneRegion);
+
660 
+
661  if (m_iAutoControlSettings->setAfRegions(afRegions) != Argus::STATUS_OK)
+
662  {
+
663  ORIGINATE_ERROR("Failed to set the af region");
+
664  }
+
665 
+
666  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
667  }
+
668 
+
669  return true;
+
670  }
+
671 
+
672  Argus::IAutoControlSettings *m_iAutoControlSettings;
+
673 };
+
674 
+
675 /**
+
676  * DeFog settings observer. Update Argus DeFog settings if values which are set through the
+
677  * DeFog settings change.
+
678  */
+ +
680 {
+
681 public:
+
682  DeFogSettingsObserver(Argus::Ext::IDeFogSettings *iDeFogSettings)
+
683  : m_iDeFogSettings(iDeFogSettings)
+
684  {
+
685  Dispatcher &dispatcher = Dispatcher::getInstance();
+
686 
+
687  PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogEnable.registerObserver(this,
+
688  static_cast<IObserver::CallbackFunction>(&DeFogSettingsObserver::onDeFogEnableChanged)));
+
689  PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogAmount.registerObserver(this,
+
690  static_cast<IObserver::CallbackFunction>(&DeFogSettingsObserver::onDeFogAmountChanged)));
+
691  PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogQuality.registerObserver(this,
+
692  static_cast<IObserver::CallbackFunction>(&DeFogSettingsObserver::onDeFogQualityChanged)));
+
693  }
+
694 
+ +
696  {
+
697  Dispatcher &dispatcher = Dispatcher::getInstance();
+
698 
+
699  PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogQuality.unregisterObserver(this,
+
700  static_cast<IObserver::CallbackFunction>(&DeFogSettingsObserver::onDeFogQualityChanged)));
+
701  PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogAmount.unregisterObserver(this,
+
702  static_cast<IObserver::CallbackFunction>(&DeFogSettingsObserver::onDeFogAmountChanged)));
+
703  PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogEnable.unregisterObserver(this,
+
704  static_cast<IObserver::CallbackFunction>(&DeFogSettingsObserver::onDeFogEnableChanged)));
+
705  }
+
706 
+
707  virtual bool isInterface(Argus::Interface *interface) const
+
708  {
+
709  return (interface == m_iDeFogSettings);
+
710  }
+
711 
+
712 private:
+
713  bool onDeFogEnableChanged(const Observed &source)
+
714  {
+
715  Dispatcher &dispatcher = Dispatcher::getInstance();
+
716 
+
717  assert(&source == &dispatcher.m_deFogEnable);
+
718 
+
719  m_iDeFogSettings->setDeFogEnable(dispatcher.m_deFogEnable.get());
+
720 
+
721  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
722 
+
723  return true;
+
724  }
+
725 
+
726  bool onDeFogAmountChanged(const Observed &source)
+
727  {
+
728  Dispatcher &dispatcher = Dispatcher::getInstance();
+
729 
+
730  assert(&source == &dispatcher.m_deFogAmount);
+
731 
+
732  if (m_iDeFogSettings->setDeFogAmount(dispatcher.m_deFogAmount.get()) != Argus::STATUS_OK)
+
733  ORIGINATE_ERROR("Failed to set the DeFog amount");
+
734 
+
735  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
736 
+
737  return true;
+
738  }
+
739 
+
740  bool onDeFogQualityChanged(const Observed &source)
+
741  {
+
742  Dispatcher &dispatcher = Dispatcher::getInstance();
+
743 
+
744  assert(&source == &dispatcher.m_deFogQuality);
+
745 
+
746  if (m_iDeFogSettings->setDeFogQuality(dispatcher.m_deFogQuality.get()) != Argus::STATUS_OK)
+
747  ORIGINATE_ERROR("Failed to set the DeFog quality");
+
748 
+
749  PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests());
+
750 
+
751  return true;
+
752  }
+
753 
+
754  Argus::Ext::IDeFogSettings *m_iDeFogSettings;
+
755 };
+
756 
+
757 // valid YUV pixel formats
+
758 static const ValidatorEnum<Argus::PixelFormat>::ValueStringPair s_captureYuvFormatTypes[] =
+
759 {
+
760  { Argus::PIXEL_FMT_YCbCr_420_888, "nv12" },
+
761  { Argus::PIXEL_FMT_P016, "p016" }
+
762 };
+
763 
+
764 // valid denoise modes
+
765 static const ValidatorEnum<Argus::DenoiseMode>::ValueStringPair s_denoiseModes[] =
+
766 {
+
767  { Argus::DENOISE_MODE_OFF, "off" },
+
768  { Argus::DENOISE_MODE_FAST, "fast" },
+
769  { Argus::DENOISE_MODE_HIGH_QUALITY, "highquality" }
+
770 };
+
771 
+
772 // valid edge enhance modes
+
773 static const ValidatorEnum<Argus::EdgeEnhanceMode>::ValueStringPair s_edgeEnhanceModes[] =
+
774 {
+
775  { Argus::EDGE_ENHANCE_MODE_OFF, "off" },
+
776  { Argus::EDGE_ENHANCE_MODE_FAST, "fast" },
+
777  { Argus::EDGE_ENHANCE_MODE_HIGH_QUALITY, "highquality" }
+
778 };
+
779 
+
780 // valid AE antibanding modes
+
781 static const ValidatorEnum<Argus::AeAntibandingMode>::ValueStringPair s_aeAntibandingModes[] =
+
782 {
+
783  { Argus::AE_ANTIBANDING_MODE_OFF, "off" },
+
784  { Argus::AE_ANTIBANDING_MODE_AUTO, "auto" },
+
785  { Argus::AE_ANTIBANDING_MODE_50HZ, "50hz" },
+
786  { Argus::AE_ANTIBANDING_MODE_60HZ, "60hz" }
+
787 };
+
788 
+
789 // valid AWB modes
+
790 static const ValidatorEnum<Argus::AwbMode>::ValueStringPair s_awbModes[] =
+
791 {
+
792  { Argus::AWB_MODE_OFF, "off" },
+
793  { Argus::AWB_MODE_AUTO, "auto" },
+
794  { Argus::AWB_MODE_INCANDESCENT, "incandescent" },
+
795  { Argus::AWB_MODE_FLUORESCENT, "fluorescent" },
+
796  { Argus::AWB_MODE_WARM_FLUORESCENT, "warmfluorescent" },
+
797  { Argus::AWB_MODE_DAYLIGHT, "daylight" },
+
798  { Argus::AWB_MODE_CLOUDY_DAYLIGHT, "cloudydaylight" },
+
799  { Argus::AWB_MODE_TWILIGHT, "twilight" },
+
800  { Argus::AWB_MODE_SHADE, "shade" },
+
801  { Argus::AWB_MODE_MANUAL, "manual" }
+
802 };
+
803 
+
804 // valid still file formats
+
805 static const ValidatorEnum<ArgusSamples::StillFileType>::ValueStringPair s_stillFileTypes[] =
+
806 {
+ + +
809 };
+
810 
+
811 // valid video formats
+
812 static const ValidatorEnum<VideoPipeline::VideoFormat>::ValueStringPair s_videoFormats[] =
+
813 {
+ + + + +
818 };
+
819 
+
820 // valid video file types
+
821 static const ValidatorEnum<VideoPipeline::VideoFileType>::ValueStringPair s_videoFileTypes[] =
+
822 {
+ + + + + +
828 };
+
829 
+
830 static const Argus::Size2D<uint32_t> s_outputSizes[] =
+
831 {
+
832  Argus::Size2D<uint32_t>(0, 0), // if size is 0,0 take the current sensor size
+
833  Argus::Size2D<uint32_t>(176, 144), // QCIF
+
834  Argus::Size2D<uint32_t>(320, 240),
+
835  Argus::Size2D<uint32_t>(640, 480),
+
836  Argus::Size2D<uint32_t>(1280, 720), // 720p HDTV
+
837  Argus::Size2D<uint32_t>(1920, 1080), // 1080p HDTV
+
838  Argus::Size2D<uint32_t>(3840, 2160), // 2160p 4K UHDTV
+
839 };
+
840 
+ +
842  : m_deviceFocusPositionRange(0)
+
843  , m_deviceAperturePositionRange(0)
+
844  , m_deviceApertureMotorSpeedRange(1.0f)
+
845  , m_deviceExposureCompensationRange(0.0f)
+
846  , m_deviceIspDigitalGainRange(Argus::Range<float>(0.0f))
+
847  , m_sensorExposureTimeRange(Argus::Range<uint64_t>(0))
+
848  , m_sensorAnalogGainRange(Argus::Range<float>(0.0f))
+
849  , m_sensorFrameRateRange(0.0f)
+
850  , m_deviceIndex(new ValidatorStdVector<uint32_t, Argus::CameraDevice*>(&m_cameraDevices), 0)
+
851  , m_deviceOpen(false)
+
852  , m_sensorModeValid(false)
+
853  , m_verbose(false)
+
854  , m_kpi(false)
+
855  , m_exposureTimeRange(new ValidatorRange<Argus::Range<uint64_t> >(&m_sensorExposureTimeRange),
+
856  Argus::Range<uint64_t>(0))
+
857  , m_gainRange(new ValidatorRange<Argus::Range<float > >(&m_sensorAnalogGainRange),
+
858  Argus::Range<float>(0.0f))
+
859  , m_sensorModeIndex(new ValidatorEnum<uint32_t>(), 0)
+
860  , m_frameRate(new ValidatorRange<float>(&m_sensorFrameRateRange), 0.0f)
+
861  , m_focusPosition(new ValidatorRange<int32_t>(&m_deviceFocusPositionRange), 0)
+
862  , m_aperturePosition(new ValidatorRange<int32_t>(&m_deviceAperturePositionRange), 0)
+
863  , m_apertureFnum(new ValidatorEnum<float>(), 0.0f)
+
864  , m_apertureMotorSpeed(new ValidatorRange<float>(&m_deviceApertureMotorSpeedRange), 1.0f)
+
865  , m_captureYuvFormat(new ValidatorEnum<Argus::PixelFormat>(
+
866  s_captureYuvFormatTypes,
+
867  sizeof(s_captureYuvFormatTypes) / sizeof(s_captureYuvFormatTypes[0])),
+
868  Argus::PIXEL_FMT_YCbCr_420_888)
+
869  , m_denoiseMode(new ValidatorEnum<Argus::DenoiseMode>(
+
870  s_denoiseModes, sizeof(s_denoiseModes) / sizeof(s_denoiseModes[0])),
+
871  Argus::DENOISE_MODE_FAST)
+
872  , m_denoiseStrength(new ValidatorRange<float>(-1.0f, 1.0f), -1.0f)
+
873  , m_edgeEnhanceMode(new ValidatorEnum<Argus::EdgeEnhanceMode>(
+
874  s_edgeEnhanceModes, sizeof(s_edgeEnhanceModes) / sizeof(s_edgeEnhanceModes[0])),
+
875  Argus::EDGE_ENHANCE_MODE_FAST)
+
876  , m_edgeEnhanceStrength(new ValidatorRange<float>(-1.0f, 1.0f), -1.0f)
+
877  , m_aeAntibandingMode(new ValidatorEnum<Argus::AeAntibandingMode>(
+
878  s_aeAntibandingModes, sizeof(s_aeAntibandingModes) / sizeof(s_aeAntibandingModes[0])),
+
879  Argus::AE_ANTIBANDING_MODE_AUTO)
+
880  , m_aeLock(false)
+
881  , m_awbLock(false)
+
882  , m_awbMode(new ValidatorEnum<Argus::AwbMode>(
+
883  s_awbModes, sizeof(s_awbModes) / sizeof(s_awbModes[0])),
+
884  Argus::AWB_MODE_AUTO)
+
885  , m_exposureCompensation(new ValidatorRange<float>(&m_deviceExposureCompensationRange), 0.0f)
+
886  , m_ispDigitalGainRange(new ValidatorRange<Argus::Range<float> >(&m_deviceIspDigitalGainRange),
+
887  Argus::Range<float>(1.0f))
+
888  , m_acRegionHorizontal(Argus::Range<uint32_t>(0))
+
889  , m_acRegionVertical(Argus::Range<uint32_t>(0))
+
890  , m_stillFileType(new ValidatorEnum<StillFileType>(
+
891  s_stillFileTypes, sizeof(s_stillFileTypes) / sizeof(s_stillFileTypes[0])),
+ +
893  , m_videoFormat(new ValidatorEnum<VideoPipeline::VideoFormat>(
+
894  s_videoFormats, sizeof(s_videoFormats) / sizeof(s_videoFormats[0])),
+
895  VideoPipeline::VIDEO_FORMAT_H265)
+
896  , m_videoFileType(new ValidatorEnum<VideoPipeline::VideoFileType>(
+
897  s_videoFileTypes, sizeof(s_videoFileTypes) / sizeof(s_videoFileTypes[0])),
+
898  VideoPipeline::VIDEO_FILE_TYPE_MKV)
+
899  , m_videoBitRate(new ValidatorRange<uint32_t>(0, VideoPipeline::VIDEO_BITRATE_MAX),0)
+
900  , m_outputSize(new ValidatorSize2D<uint32_t>(s_outputSizes,
+
901  sizeof(s_outputSizes) / sizeof(s_outputSizes[0]), true /*allowArbitrarySizes*/),
+
902  Argus::Size2D<uint32_t>(0, 0))
+
903  , m_outputPath(".")
+
904  , m_deFogEnable(false)
+
905  , m_deFogAmount(new ValidatorRange<float>(0.0f, 1.0f), 0.9f)
+
906  , m_deFogQuality(new ValidatorRange<float>(0.0f, 1.0f), 0.14285f)
+
907  , m_initialized(false)
+
908  , m_iCameraProvider(NULL)
+
909 {
+
910  PROPAGATE_ERROR_CONTINUE(initialize());
+
911 }
+
912 
+ +
914 {
+
915  if (!shutdown())
+
916  REPORT_ERROR("Failed to shutdown");
+
917 }
+
918 
+ +
920 {
+
921  static InitOnce initOnce;
+
922  static Dispatcher instance;
+
923 
+
924  if (initOnce.begin())
+
925  {
+
926  if (instance.initialize())
+
927  {
+
928  initOnce.complete();
+
929  }
+
930  else
+
931  {
+
932  initOnce.failed();
+
933  REPORT_ERROR("Initalization failed");
+
934  }
+
935  }
+
936 
+
937  return instance;
+
938 }
+
939 
+ +
941 {
+
942  if (m_initialized)
+
943  return true;
+
944 
+
945  // Create the CameraProvider object and obtain its interface.
+
946  m_cameraProvider = Argus::UniqueObj<Argus::CameraProvider>(Argus::CameraProvider::create());
+
947  m_iCameraProvider = Argus::interface_cast<Argus::ICameraProvider>(m_cameraProvider);
+
948  if (!m_iCameraProvider)
+
949  ORIGINATE_ERROR("Failed to create CameraProvider");
+
950  printf("Argus Version: %s\n", m_iCameraProvider->getVersion().c_str());
+
951 
+
952  // Get the camera devices
+
953  m_iCameraProvider->getCameraDevices(&m_cameraDevices);
+
954  if (m_cameraDevices.size() == 0)
+
955  {
+
956  PROPAGATE_ERROR(shutdown());
+
957  ORIGINATE_ERROR("No cameras available");
+
958  }
+
959 
+
960  m_initialized = true;
+
961 
+
962  // register the device index observer after 'm_initialize' is set, the call back will be
+
963  // called immediately and assert that 'm_initialize' is set
+
964  PROPAGATE_ERROR_CONTINUE(m_deviceIndex.registerObserver(this,
+
965  static_cast<IObserver::CallbackFunction>(&Dispatcher::onDeviceIndexChanged)));
+
966  PROPAGATE_ERROR_CONTINUE(m_sensorModeIndex.registerObserver(this,
+
967  static_cast<IObserver::CallbackFunction>(&Dispatcher::onSensorModeIndexChanged)));
+
968 
+
969  return true;
+
970 }
+
971 
+ +
973 {
+
974  if (m_initialized)
+
975  {
+
976  m_initialized = false;
+
977  // unregister the device index observer in reverse order
+
978  PROPAGATE_ERROR_CONTINUE(m_sensorModeIndex.unregisterObserver(this,
+
979  static_cast<IObserver::CallbackFunction>(&Dispatcher::onSensorModeIndexChanged)));
+
980  PROPAGATE_ERROR_CONTINUE(m_deviceIndex.unregisterObserver(this,
+
981  static_cast<IObserver::CallbackFunction>(&Dispatcher::onDeviceIndexChanged)));
+
982 
+
983  PROPAGATE_ERROR_CONTINUE(closeSession());
+
984 
+
985  m_cameraDevices.clear();
+
986  m_cameraProvider.reset();
+
987  }
+
988 
+
989  return true;
+
990 }
+
991 
+
992 bool Dispatcher::onDeviceIndexChanged(const Observed &source)
+
993 {
+
994  assert(static_cast<const Value<uint32_t>&>(source).get() == m_deviceIndex);
+
995  assert(m_initialized);
+
996 
+
997  // close the currently open device
+
998  if (m_deviceOpen)
+
999  {
+
1000  PROPAGATE_ERROR(m_deviceOpen.set(false));
+
1001 
+
1002  PROPAGATE_ERROR(closeSession());
+
1003 
+
1004  // reset the current device properties
+
1005  }
+
1006 
+
1007  // open the new device
+
1008  const Argus::ICameraProperties *iCameraProperties =
+
1009  Argus::interface_cast<Argus::ICameraProperties>(m_cameraDevices[m_deviceIndex]);
+
1010  if (!iCameraProperties)
+
1011  ORIGINATE_ERROR("Failed to get ICameraProperties interface");
+
1012 
+
1013  // get the sensor modes
+
1014  if (iCameraProperties->getAllSensorModes(&m_sensorModes) != Argus::STATUS_OK)
+
1015  ORIGINATE_ERROR("Failed to get sensor modes");
+
1016 
+
1017  if (m_sensorModes.size() == 0)
+
1018  ORIGINATE_ERROR("No sensor modes found");
+
1019 
+
1020  // get the focus position range
+
1021  PROPAGATE_ERROR(m_deviceFocusPositionRange.set(iCameraProperties->getFocusPositionRange()));
+
1022 
+
1023  // get the aperture position range
+
1024  PROPAGATE_ERROR(m_deviceAperturePositionRange.set(iCameraProperties->getAperturePositionRange()));
+
1025 
+
1026  // get the aperture Fnum available values
+
1027  if(iCameraProperties->getAvailableApertureFNumbers(&m_deviceApertureFnums))
+
1028  ORIGINATE_ERROR("Failed to get Aperture Fnum");
+
1029 
+
1030  ValidatorEnum<float>* apertureFnumValidator =
+
1031  static_cast<ValidatorEnum<float>*>(m_apertureFnum.getValidator());
+
1032  apertureFnumValidator->setValidValues(m_deviceApertureFnums);
+
1033  // update the valid aperture F-num
+
1034  PROPAGATE_ERROR(m_apertureFnum.set(m_deviceApertureFnums.front(), true /*forceNotify*/));
+
1035 
+
1036  // get the aperture motor speed range
+
1037  PROPAGATE_ERROR(m_deviceApertureMotorSpeedRange.set(iCameraProperties->getApertureMotorSpeedRange()));
+
1038 
+
1039  // get new limits
+
1040  Argus::Range<float> digitalGainRange = iCameraProperties->getIspDigitalGainRange();
+
1041  Argus::Range<float> deviceExposureCompensationRange =
+
1042  iCameraProperties->getExposureCompensationRange();
+
1043 
+
1044  /* set ranges to unified range (to avoid errors when setting new values)
+
1045  * Eg. Say Device 1 has range [-1,0] and Device 2 has range [1,2] .If current value is -1 and
+
1046  * range is [-1,0] , setting the range to [1,2] would give error . Similarly, if current value
+
1047  * is 1 , setting the range to [-1,0] would give error. Thus we set range to [-1,2] , set value
+
1048  * to 1 and then set range to [1,2] to avoid errors.
+
1049  */
+
1050  Argus::Range<float> unifiedDigitalGainRange(0);
+
1051  unifiedDigitalGainRange.min() =
+
1052  std::min(m_deviceIspDigitalGainRange.get().min().min(), digitalGainRange.min());
+
1053  unifiedDigitalGainRange.max() =
+
1054  std::max(m_deviceIspDigitalGainRange.get().max().max(), digitalGainRange.max());
+
1055 
+
1056  Argus::Range<float> unifiedExposureCompensationRange(0);
+
1057  unifiedExposureCompensationRange.min() =
+
1058  std::min(m_deviceExposureCompensationRange.get().min(),
+
1059  deviceExposureCompensationRange.min());
+
1060  unifiedExposureCompensationRange.max() =
+
1061  std::max(m_deviceExposureCompensationRange.get().max(),
+
1062  deviceExposureCompensationRange.max());
+
1063 
+
1064  PROPAGATE_ERROR(m_deviceIspDigitalGainRange.set(
+
1065  Argus::Range<Argus::Range<float> >(unifiedDigitalGainRange)));
+
1066  PROPAGATE_ERROR(m_deviceExposureCompensationRange.set(
+
1067  Argus::Range<float> (unifiedExposureCompensationRange)));
+
1068 
+
1069  // update dependent values
+
1070  PROPAGATE_ERROR(m_ispDigitalGainRange.set(digitalGainRange));
+
1071  PROPAGATE_ERROR(m_exposureCompensation.set(0.0f));
+
1072 
+
1073  // set to final range
+
1074  PROPAGATE_ERROR(m_deviceIspDigitalGainRange.set(Argus::Range<Argus::Range<float> >(
+
1075  digitalGainRange, digitalGainRange)));
+
1076  PROPAGATE_ERROR(m_deviceExposureCompensationRange.set(Argus::Range<float> (
+
1077  deviceExposureCompensationRange)));
+
1078 
+
1079  // add value/string pairs for each sensor mode index
+
1080  std::vector<ValidatorEnum<uint32_t>::ValueStringPair> valueStringPairs;
+
1081  valueStringPairs.resize(m_sensorModes.size());
+
1082  for (size_t index = 0; index < m_sensorModes.size(); ++index)
+
1083  {
+
1084  Argus::ISensorMode *sensorMode =
+
1085  Argus::interface_cast<Argus::ISensorMode>(m_sensorModes[index]);
+
1086 
+
1087  valueStringPairs[index].value = (uint32_t)index;
+
1088 
+
1089  std::ostringstream stream;
+
1090  stream << index << ": "
+
1091  << sensorMode->getResolution().width() << "x" << sensorMode->getResolution().height();
+
1092 
+
1093  Argus::Ext::IPwlWdrSensorMode* pwlMode =
+
1094  Argus::interface_cast<Argus::Ext::IPwlWdrSensorMode>(m_sensorModes[index]);
+
1095 
+
1096  Argus::Ext::IDolWdrSensorMode* dolMode =
+
1097  Argus::interface_cast<Argus::Ext::IDolWdrSensorMode>(m_sensorModes[index]);
+
1098  if (pwlMode)
+
1099  {
+
1100  stream << " @" << sensorMode->getInputBitDepth() << "bpp -> " <<
+
1101  sensorMode->getOutputBitDepth() << "bpp";
+
1102  }
+
1103  else if (dolMode)
+
1104  {
+
1105  stream << " @" << sensorMode->getOutputBitDepth() << "bpp -> " <<
+
1106  dolMode->getExposureCount() << " exposure" << " DOL WDR";
+
1107  }
+
1108  else
+
1109  {
+
1110  stream << " @" << sensorMode->getOutputBitDepth() << "bpp";
+
1111  }
+
1112 
+
1113  valueStringPairs[index].string = stream.str();
+
1114  }
+
1115  // update the validator with the new value/string pairs
+
1116  ValidatorEnum<uint32_t> *validator =
+
1117  static_cast<ValidatorEnum<uint32_t>*>(m_sensorModeIndex.getValidator());
+
1118  PROPAGATE_ERROR(validator->setValidValues(valueStringPairs.data(), valueStringPairs.size()));
+
1119 
+
1120  // set the sensor mode index (force notify observer because the sensor modes are different now
+
1121  // although the sensor mode index could be the same)
+
1122  PROPAGATE_ERROR(m_sensorModeIndex.set(0, true /*forceNotify*/));
+
1123 
+
1124  PROPAGATE_ERROR(m_deviceOpen.set(true));
+
1125 
+
1126  return true;
+
1127 }
+
1128 
+
1129 bool Dispatcher::onSensorModeIndexChanged(const Observed &source)
+
1130 {
+
1131  m_sensorModeValid.set(false);
+
1132  assert(static_cast<const Value<uint32_t>&>(source).get() == m_sensorModeIndex);
+
1133  assert(m_initialized);
+
1134 
+
1135  Argus::ISensorMode *iSensorMode =
+
1136  Argus::interface_cast<Argus::ISensorMode>(m_sensorModes[m_sensorModeIndex.get()]);
+
1137  if (!iSensorMode)
+
1138  ORIGINATE_ERROR("Failed to get ISensorMode interface");
+
1139 
+
1140  // get new limits
+
1141  Argus::Range<uint64_t> sensorExposureTimeRange = iSensorMode->getExposureTimeRange();
+
1142  Argus::Range<float> sensorAnalogGainRange = iSensorMode->getAnalogGainRange();
+
1143  Argus::Range<TimeValue> sensorFrameDurationRange(
+
1144  TimeValue::fromNSec(iSensorMode->getFrameDurationRange().min()),
+
1145  TimeValue::fromNSec(iSensorMode->getFrameDurationRange().max()));
+
1146  Argus::Range<float> sensorFrameRateRange(
+
1147  sensorFrameDurationRange.max().toCyclesPerSec(),
+
1148  sensorFrameDurationRange.min().toCyclesPerSec());
+
1149 
+
1150  // set ranges to unified range (to avoid errors when setting new values)
+
1151  Argus::Range<uint64_t> unifiedSensorExposureTimeRange(0);
+
1152  unifiedSensorExposureTimeRange.min() =
+
1153  std::min(m_sensorExposureTimeRange.get().min().min(), sensorExposureTimeRange.min());
+
1154  unifiedSensorExposureTimeRange.max() =
+
1155  std::max(m_sensorExposureTimeRange.get().max().max(), sensorExposureTimeRange.max());
+
1156  Argus::Range<float> unifiedSensorAnalogGainRange(0);
+
1157  unifiedSensorAnalogGainRange.min() =
+
1158  std::min(m_sensorAnalogGainRange.get().min().min(), sensorAnalogGainRange.min());
+
1159  unifiedSensorAnalogGainRange.max() =
+
1160  std::max(m_sensorAnalogGainRange.get().max().max(), sensorAnalogGainRange.max());
+
1161  Argus::Range<float> unifiedSensorFrameRateRange(0.0f);
+
1162  unifiedSensorFrameRateRange.min() =
+
1163  std::min(m_sensorFrameRateRange.get().min(), sensorFrameRateRange.min());
+
1164  unifiedSensorFrameRateRange.max() =
+
1165  std::max(m_sensorFrameRateRange.get().max(), sensorFrameRateRange.max());
+
1166 
+
1167  PROPAGATE_ERROR(m_sensorExposureTimeRange.set(
+
1168  Argus::Range<Argus::Range<uint64_t> >(unifiedSensorExposureTimeRange)));
+
1169  PROPAGATE_ERROR(m_sensorAnalogGainRange.set(
+
1170  Argus::Range<Argus::Range<float> >(unifiedSensorAnalogGainRange)));
+
1171  PROPAGATE_ERROR(m_sensorFrameRateRange.set(unifiedSensorFrameRateRange));
+
1172 
+
1173  // update dependent values
+
1174  PROPAGATE_ERROR(m_exposureTimeRange.set(sensorExposureTimeRange));
+
1175  PROPAGATE_ERROR(m_gainRange.set(sensorAnalogGainRange));
+
1176  PROPAGATE_ERROR(m_frameRate.set(sensorFrameRateRange.max()));
+
1177 
+
1178  // set to final ranges
+
1179  PROPAGATE_ERROR(m_sensorExposureTimeRange.set(Argus::Range<Argus::Range<uint64_t> >(
+
1180  sensorExposureTimeRange, sensorExposureTimeRange)));
+
1181  PROPAGATE_ERROR(m_sensorAnalogGainRange.set(Argus::Range<Argus::Range<float> >(
+
1182  sensorAnalogGainRange, sensorAnalogGainRange)));
+
1183  PROPAGATE_ERROR(m_sensorFrameRateRange.set(sensorFrameRateRange));
+
1184  m_sensorModeValid.set(true);
+
1185 
+
1186  return true;
+
1187 }
+
1188 
+
1189 bool Dispatcher::supportsExtension(const Argus::ExtensionName& extension) const
+
1190 {
+
1191  return m_iCameraProvider->supportsExtension(extension);
+
1192 }
+
1193 
+
1194 bool Dispatcher::getInfo(std::string &info) const
+
1195 {
+
1196  std::ostringstream stream;
+
1197 
+
1198  assert(m_initialized);
+
1199 
+
1200  stream << "Argus extensions:" << std::endl;
+
1201  stream << " BayerSharpnessMap: " <<
+
1202  (supportsExtension(Argus::EXT_BAYER_SHARPNESS_MAP) ?
+
1203  "supported" : "not supported") << std::endl;
+
1204  stream << " DebugCaptureSession: " <<
+
1205  (supportsExtension(Argus::EXT_DEBUG_CAPTURE_SESSION) ?
+
1206  "supported" : "not supported") << std::endl;
+
1207  stream << " DeFog: " <<
+
1208  (supportsExtension(Argus::EXT_DE_FOG) ?
+
1209  "supported" : "not supported") << std::endl;
+
1210  stream << " FaceDetect: " <<
+
1211  (supportsExtension(Argus::EXT_FACE_DETECT) ?
+
1212  "supported" : "not supported") << std::endl;
+
1213  stream << " InternalFrameCount: " <<
+
1214  (supportsExtension(Argus::EXT_INTERNAL_FRAME_COUNT) ?
+
1215  "supported" : "not supported") << std::endl;
+
1216  stream << " SensorPrivateMetadata: " <<
+
1217  (supportsExtension(Argus::EXT_SENSOR_PRIVATE_METADATA) ?
+
1218  "supported" : "not supported") << std::endl;
+
1219 
+
1220  stream << "Number of camera devices: " << m_cameraDevices.size() << std::endl;
+
1221 
+
1222  for (uint32_t deviceIndex = 0; deviceIndex < m_cameraDevices.size(); ++deviceIndex)
+
1223  {
+
1224  stream << "Device: " << deviceIndex << std::endl;
+
1225 
+
1226  const Argus::ICameraProperties *iCameraProperties =
+
1227  Argus::interface_cast<Argus::ICameraProperties>(m_cameraDevices[deviceIndex]);
+
1228  if (!iCameraProperties)
+
1229  ORIGINATE_ERROR("Failed to get ICameraProperties interface");
+
1230 
+
1231  stream << " Max AE Regions: " <<
+
1232  iCameraProperties->getMaxAeRegions() << std::endl;
+
1233  stream << " Max AWB Regions: " <<
+
1234  iCameraProperties->getMaxAwbRegions() << std::endl;
+
1235  stream << " Focus Position Range: " <<
+
1236  iCameraProperties->getFocusPositionRange().min() << " - " <<
+
1237  iCameraProperties->getFocusPositionRange().max() << std::endl;
+
1238  stream << " Aperture Position Range: " <<
+
1239  iCameraProperties->getAperturePositionRange().min() << " - " <<
+
1240  iCameraProperties->getAperturePositionRange().max() << std::endl;
+
1241  stream << " Aperture Motor Speed Range: " <<
+
1242  iCameraProperties->getApertureMotorSpeedRange().min() << " - " <<
+
1243  iCameraProperties->getApertureMotorSpeedRange().max() << std::endl;
+
1244  stream << " Lens Aperture Available values: ";
+
1245  std::vector<float> availableFnums;
+
1246  iCameraProperties->getAvailableApertureFNumbers(&availableFnums);
+
1247  for (std::vector<float>::iterator it = availableFnums.begin();
+
1248  it != availableFnums.end(); ++it)
+
1249  {
+
1250  stream << *it << ", ";
+
1251  }
+
1252  stream << std::endl;
+
1253 
+
1254  stream << " Isp Digital Gain Range: " <<
+
1255  iCameraProperties->getIspDigitalGainRange().min() << " - " <<
+
1256  iCameraProperties->getIspDigitalGainRange().max() << std::endl;
+
1257 
+
1258  // print the sensor modes
+
1259  std::vector<Argus::SensorMode*> sensorModes;
+
1260  iCameraProperties->getAllSensorModes(&sensorModes);
+
1261  stream << " Number of sensor modes: " << sensorModes.size() << std::endl;
+
1262  for (uint32_t sensorModeIndex = 0; sensorModeIndex < sensorModes.size(); ++sensorModeIndex)
+
1263  {
+
1264  Argus::ISensorMode *sensorMode =
+
1265  Argus::interface_cast<Argus::ISensorMode>(sensorModes[sensorModeIndex]);
+
1266  if (!sensorMode)
+
1267  ORIGINATE_ERROR("Failed to get ISensorMode interface");
+
1268 
+
1269  // convert ns to fps
+
1270  float maximum_fps = TimeValue::fromNSec(
+
1271  sensorMode->getFrameDurationRange().min()).toCyclesPerSec();
+
1272  float minimum_fps = TimeValue::fromNSec(
+
1273  sensorMode->getFrameDurationRange().max()).toCyclesPerSec();
+
1274 
+
1275  stream << " Sensor mode: " << sensorModeIndex << std::endl;
+
1276  stream << " Resolution: " <<
+
1277  sensorMode->getResolution().width() << "x" <<
+
1278  sensorMode->getResolution().height() << std::endl;
+
1279  stream << " Exposure time range: " <<
+
1280  sensorMode->getExposureTimeRange().min() << " - " <<
+
1281  sensorMode->getExposureTimeRange().max() << " ns" << std::endl;
+
1282  stream << " Frame duration range: " <<
+
1283  sensorMode->getFrameDurationRange().min() << " - " <<
+
1284  sensorMode->getFrameDurationRange().max() << " ns" << std::endl;
+
1285  stream << " Framerate range: " <<
+
1286  minimum_fps << " - " <<
+
1287  maximum_fps << " fps" << std::endl;
+
1288  stream << " InputBitDepth: " <<
+
1289  sensorMode->getInputBitDepth() << std::endl;
+
1290  stream << " OutputBitDepth: " <<
+
1291  sensorMode->getOutputBitDepth() << std::endl;
+
1292  stream << " Analog gain range: " <<
+
1293  sensorMode->getAnalogGainRange().min() << " - " <<
+
1294  sensorMode->getAnalogGainRange().max() << std::endl;
+
1295 
+
1296  stream << " SensorModeType: " <<
+
1297  sensorMode->getSensorModeType().getName() << std::endl;
+
1298 
+
1299  Argus::Ext::IPwlWdrSensorMode* pwlMode =
+
1300  Argus::interface_cast<Argus::Ext::IPwlWdrSensorMode>(sensorModes[sensorModeIndex]);
+
1301 
+
1302  Argus::Ext::IDolWdrSensorMode* dolMode =
+
1303  Argus::interface_cast<Argus::Ext::IDolWdrSensorMode>(sensorModes[sensorModeIndex]);
+
1304 
+
1305  if (pwlMode)
+
1306  {
+
1307  stream << " Piecewise Linear (PWL) WDR Extension supported with: " <<
+
1308  pwlMode->getControlPointCount() << " control points." << std::endl;
+
1309  std::vector< Argus::Point2D<float> > points;
+
1310  Argus::Status status = pwlMode->getControlPoints(&points);
+
1311  if (status != Argus::STATUS_OK)
+
1312  ORIGINATE_ERROR("Error obtaining control points");
+
1313  stream << " - Control Points: " << std::endl;
+
1314  for (uint32_t j = 0; j < pwlMode->getControlPointCount(); j++)
+
1315  {
+
1316  stream << " (" << points[j].x() << ", " <<
+
1317  points[j].y() << ")" << std::endl;
+
1318  }
+
1319  }
+
1320  else if (dolMode)
+
1321  {
+
1322  stream << " Digital Overlap (DOL) WDR Extension supported with: " << std::endl <<
+
1323  " - Number of Exposures: " <<
+
1324  dolMode->getExposureCount() << std::endl <<
+
1325  " - Number of Optical Black Lines per exposure: " <<
+
1326  dolMode->getOpticalBlackRowCount() << std::endl <<
+
1327  " - Number of Line Info marker pixels per row per exposure: " <<
+
1328  dolMode->getLineInfoMarkerWidth() << std::endl <<
+
1329  " - Number of margin pixels on left per row per exposure: " <<
+
1330  dolMode->getLeftMarginWidth() << std::endl <<
+
1331  " - Number of margin pixels on right per row per exposure: " <<
+
1332  dolMode->getRightMarginWidth() << std::endl;
+
1333 
+
1334  std::vector<u_int32_t> verticalBlankPeriodRowCounts;
+
1335  Argus::Status status =
+
1336  dolMode->getVerticalBlankPeriodRowCount(&verticalBlankPeriodRowCounts);
+
1337  if (status != Argus::STATUS_OK)
+
1338  ORIGINATE_ERROR("Error obtaining vertical blank period offsets per exposure");
+
1339  stream << " - Vertical blank period section row counts per exposure: "
+
1340  << std::endl;
+
1341  for (uint32_t j = 0; j < verticalBlankPeriodRowCounts.size(); j++)
+
1342  {
+
1343  stream << " - VBP-section[" << j << "] : "
+
1344  << verticalBlankPeriodRowCounts[j] << std::endl;
+
1345  }
+
1346 
+
1347  stream << " - Physical Resolution: " <<
+
1348  dolMode->getPhysicalResolution().width() << "x" <<
+
1349  dolMode->getPhysicalResolution().height() << std::endl;
+
1350  }
+
1351 
+
1352  stream << std::endl;
+
1353  }
+
1354  }
+
1355 
+
1356  info = stream.str();
+
1357 
+
1358  return true;
+
1359 }
+
1360 
+
1361 bool Dispatcher::getSensorMode(uint32_t sensorModeIndex, Argus::SensorMode **sensorMode) const
+
1362 {
+
1363  assert(m_deviceOpen);
+
1364 
+
1365  if (sensorModeIndex >= m_sensorModes.size())
+
1366  ORIGINATE_ERROR("Invalid sensor mode index");
+
1367 
+
1368  *sensorMode = m_sensorModes[sensorModeIndex];
+
1369 
+
1370  return true;
+
1371 }
+
1372 
+
1373 Argus::Range<int32_t> Dispatcher::getDeviceFocusPositionRange() const
+
1374 {
+
1375  return m_deviceFocusPositionRange.get();
+
1376 }
+
1377 
+
1378 Argus::Range<int32_t> Dispatcher::getDeviceAperturePositionRange() const
+
1379 {
+
1380  return m_deviceAperturePositionRange.get();
+
1381 }
+
1382 
+ +
1384 {
+
1385  return m_deviceApertureMotorSpeedRange.get();
+
1386 }
+
1387 
+ +
1389 {
+
1390  assert(m_deviceOpen);
+
1391 
+
1392  return m_cameraDevices.size();
+
1393 }
+
1394 
+ +
1396  uint32_t deviceIndex)
+
1397 {
+
1398  assert(m_deviceOpen);
+
1399 
+
1400  if (deviceIndex > m_cameraDevices.size())
+
1401  ORIGINATE_ERROR("Invalid device index");
+
1402 
+
1403  // close the internal session, it might be using the device which will be used by the new
+
1404  // session
+
1405  PROPAGATE_ERROR(closeSession());
+
1406 
+
1407  // create the new capture session
+
1408  Argus::UniqueObj<Argus::CaptureSession> newSession(
+
1409  m_iCameraProvider->createCaptureSession(m_cameraDevices[deviceIndex]));
+
1410  if (!newSession)
+
1411  ORIGINATE_ERROR("Failed to create CaptureSession");
+
1412 
+
1413  PROPAGATE_ERROR(session.reset(newSession.release(), this));
+
1414 
+
1415  return true;
+
1416 }
+
1417 
+ +
1419 {
+
1420  for (ActiveSessionList::const_iterator it = m_activeSessions.begin(); it != m_activeSessions.end();
+
1421  ++it)
+
1422  {
+
1423  Argus::Ext::IDebugCaptureSession *iDebugCaptureSession =
+
1424  Argus::interface_cast<Argus::Ext::IDebugCaptureSession>(it->m_session);
+
1425  if (!iDebugCaptureSession)
+
1426  ORIGINATE_ERROR("DebugCaptureSession extension not supported");
+
1427 
+
1428  const Argus::Status status = iDebugCaptureSession->dump(STDOUT_FILENO);
+
1429  if (status != Argus::STATUS_OK)
+
1430  ORIGINATE_ERROR("Failed to get dump runtime info");
+
1431  }
+
1432 
+
1433  return true;
+
1434 }
+
1435 
+
1436 /**
+
1437  * Create the internal session
+
1438  */
+ +
1440 {
+
1441  if (m_captureSession)
+
1442  return true;
+
1443 
+
1444  PROPAGATE_ERROR(createSession(m_captureSession, m_deviceIndex));
+
1445 
+
1446  return true;
+
1447 }
+
1448 
+
1449 /**
+
1450  * Close the internal session
+
1451  */
+ +
1453 {
+ +
1455  return true;
+
1456 }
+
1457 
+
1458 bool Dispatcher::track(Argus::CaptureSession *session)
+
1459 {
+
1460  m_activeSessions.push_back(ActiveSession(session));
+
1461  return true;
+
1462 }
+
1463 
+
1464 bool Dispatcher::untrack(Argus::CaptureSession *session)
+
1465 {
+
1466  for (ActiveSessionList::iterator it = m_activeSessions.begin(); it != m_activeSessions.end();
+
1467  ++it)
+
1468  {
+
1469  if (it->m_session == session)
+
1470  {
+
1471  m_activeSessions.erase(it);
+
1472  return true;
+
1473  }
+
1474  }
+
1475 
+
1476  ORIGINATE_ERROR("Session not found");
+
1477 }
+
1478 
+
1479 bool Dispatcher::waitForEvents(Argus::EventQueue *eventQueue, TimeValue timeout,
+
1480  Argus::CaptureSession *session)
+
1481 {
+
1482  if (!session)
+
1483  {
+
1484  // use the internal session
+
1485  PROPAGATE_ERROR(createSession());
+
1486  session = m_captureSession.get();
+
1487  }
+
1488 
+
1489  Argus::IEventProvider *iEventProvider = Argus::interface_cast<Argus::IEventProvider>(session);
+
1490  if (!iEventProvider)
+
1491  ORIGINATE_ERROR("Failed to get iEventProvider interface");
+
1492 
+
1493  // wait for the events
+
1494  const Argus::Status status = iEventProvider->waitForEvents(eventQueue, timeout.toNSec());
+
1495  if ((status != Argus::STATUS_OK) && (status != Argus::STATUS_TIMEOUT))
+
1496  ORIGINATE_ERROR("Failed to get events");
+
1497 
+
1498  return true;
+
1499 }
+
1500 
+ +
1502  Argus::CaptureIntent captureIntent, Argus::CaptureSession *session)
+
1503 {
+
1504  if (!session)
+
1505  {
+
1506  // use the internal session
+
1507  PROPAGATE_ERROR(createSession());
+
1508  session = m_captureSession.get();
+
1509  }
+
1510 
+
1511  Argus::ICaptureSession *iCaptureSession =
+
1512  Argus::interface_cast<Argus::ICaptureSession>(session);
+
1513  if (!iCaptureSession)
+
1514  ORIGINATE_ERROR("Failed to get ICaptureSession interface");
+
1515 
+
1516  // Create request
+
1517  Argus::UniqueObj<Argus::Request> newRequest =
+
1518  Argus::UniqueObj<Argus::Request>(iCaptureSession->createRequest(captureIntent));
+
1519  if (!newRequest)
+
1520  ORIGINATE_ERROR("Failed to create request");
+
1521 
+
1522  // Setup request
+
1523  Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(newRequest);
+
1524  if (!iRequest)
+
1525  ORIGINATE_ERROR("Failed to get IRequest interface");
+
1526 
+
1527  // get source settings interface
+
1528  Argus::ISourceSettings *iSourceSettings =
+
1529  Argus::interface_cast<Argus::ISourceSettings>(iRequest->getSourceSettings());
+
1530  if (!iSourceSettings)
+
1531  ORIGINATE_ERROR("Failed to get ISourceSettings interface");
+
1532 
+
1533  // register the source settings observer
+
1534  PROPAGATE_ERROR(registerObserver(iSourceSettings));
+
1535 
+
1536  // get auto control settings interface
+
1537  Argus::IAutoControlSettings *iAutoControlSettings =
+
1538  Argus::interface_cast<Argus::IAutoControlSettings>(iRequest->getAutoControlSettings());
+
1539  if (!iAutoControlSettings)
+
1540  ORIGINATE_ERROR("Failed to get IAutoControlSettings interface");
+
1541 
+
1542  // register the auto control settings observer
+
1543  PROPAGATE_ERROR(registerObserver(iAutoControlSettings));
+
1544 
+
1545  // register denoise settings interface
+
1546  Argus::IDenoiseSettings *iDenoiseSettings =
+
1547  Argus::interface_cast<Argus::IDenoiseSettings>(newRequest);
+
1548  if (!iDenoiseSettings)
+
1549  ORIGINATE_ERROR("Failed to get IDenoiseSettings interface");
+
1550  PROPAGATE_ERROR(registerObserver(iDenoiseSettings));
+
1551 
+
1552  // register edge enhance settings interface
+
1553  Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings =
+
1554  Argus::interface_cast<Argus::IEdgeEnhanceSettings>(newRequest);
+
1555  if (!iEdgeEnhanceSettings)
+
1556  ORIGINATE_ERROR("Failed to get IEdgeEnhanceSettings interface");
+
1557  PROPAGATE_ERROR(registerObserver(iEdgeEnhanceSettings));
+
1558 
+
1559  if (supportsExtension(Argus::EXT_DE_FOG))
+
1560  {
+
1561  // get DeFog settings interface
+
1562  Argus::Ext::IDeFogSettings *iDeFogSettings =
+
1563  Argus::interface_cast<Argus::Ext::IDeFogSettings>(newRequest);
+
1564  if (iDeFogSettings)
+
1565  {
+
1566  // register the DeFog settings observer
+
1567  PROPAGATE_ERROR(registerObserver(iDeFogSettings));
+
1568  }
+
1569  }
+
1570 
+
1571  PROPAGATE_ERROR(request.reset(newRequest.release(), this));
+
1572 
+
1573  return true;
+
1574 }
+
1575 
+
1576 bool Dispatcher::track(Argus::Request *request)
+
1577 {
+
1578  return true;
+
1579 }
+
1580 
+
1581 bool Dispatcher::untrack(Argus::Request *request)
+
1582 {
+
1583  Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(request);
+
1584  if (!iRequest)
+
1585  ORIGINATE_ERROR("Failed to get IRequest interface");
+
1586 
+
1587  // get source settings interface
+
1588  Argus::ISourceSettings *iSourceSettings =
+
1589  Argus::interface_cast<Argus::ISourceSettings>(iRequest->getSourceSettings());
+
1590  if (!iSourceSettings)
+
1591  ORIGINATE_ERROR("Failed to get ISourceSettings interface");
+
1592 
+
1593  // unregister the source settings observer
+
1594  PROPAGATE_ERROR(unregisterObserver(iSourceSettings));
+
1595 
+
1596  // get auto control settings interface
+
1597  Argus::IAutoControlSettings *iAutoControlSettings =
+
1598  Argus::interface_cast<Argus::IAutoControlSettings>(iRequest->getAutoControlSettings());
+
1599  if (!iAutoControlSettings)
+
1600  ORIGINATE_ERROR("Failed to get IAutoControlSettings interface");
+
1601 
+
1602  // unregister the auto control settings observer
+
1603  PROPAGATE_ERROR(unregisterObserver(iAutoControlSettings));
+
1604 
+
1605  // unregister denoise settings interface
+
1606  Argus::IDenoiseSettings *iDenoiseSettings =
+
1607  Argus::interface_cast<Argus::IDenoiseSettings>(request);
+
1608  if (!iDenoiseSettings)
+
1609  ORIGINATE_ERROR("Failed to get IDenoiseSettings interface");
+
1610  PROPAGATE_ERROR(unregisterObserver(iDenoiseSettings));
+
1611 
+
1612  // unregister edge enhance settings interface
+
1613  Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings =
+
1614  Argus::interface_cast<Argus::IEdgeEnhanceSettings>(request);
+
1615  if (!iEdgeEnhanceSettings)
+
1616  ORIGINATE_ERROR("Failed to get IEdgeEnhanceSettings interface");
+
1617  PROPAGATE_ERROR(unregisterObserver(iEdgeEnhanceSettings));
+
1618 
+
1619  if (supportsExtension(Argus::EXT_DE_FOG))
+
1620  {
+
1621  // get DeFog settings interface
+
1622  Argus::Ext::IDeFogSettings *iDeFogSettings =
+
1623  Argus::interface_cast<Argus::Ext::IDeFogSettings>(request);
+
1624  if (iDeFogSettings)
+
1625  {
+
1626  // unregister the DeFog settings observer
+
1627  PROPAGATE_ERROR(unregisterObserver(iDeFogSettings));
+
1628  }
+
1629  }
+
1630 
+
1631  return true;
+
1632 }
+
1633 
+
1634 bool Dispatcher::createEventQueue(const std::vector<Argus::EventType> &eventTypes,
+
1635  Argus::UniqueObj<Argus::EventQueue>& eventQueue, Argus::CaptureSession *session)
+
1636 {
+
1637  if (!session)
+
1638  {
+
1639  // use the internal session
+
1640  PROPAGATE_ERROR(createSession());
+
1641  session = m_captureSession.get();
+
1642  }
+
1643 
+
1644  Argus::IEventProvider *iEventProvider =
+
1645  Argus::interface_cast<Argus::IEventProvider>(session);
+
1646  if (!iEventProvider)
+
1647  ORIGINATE_ERROR("Failed to get IEventProvider interface");
+
1648 
+
1649  Argus::EventQueue *newEventQueue = iEventProvider->createEventQueue(eventTypes);
+
1650  if (!newEventQueue)
+
1651  ORIGINATE_ERROR("Failed to create eventQueue");
+
1652 
+
1653  eventQueue.reset(newEventQueue);
+
1654 
+
1655  return true;
+
1656 }
+
1657 
+
1658 bool Dispatcher::capture(Argus::Request *request, Argus::CaptureSession *session)
+
1659 {
+
1660  if (!session)
+
1661  {
+
1662  // use the internal session
+
1663  PROPAGATE_ERROR(createSession());
+
1664  session = m_captureSession.get();
+
1665  }
+
1666 
+
1667  Argus::ICaptureSession *iCaptureSession =
+
1668  Argus::interface_cast<Argus::ICaptureSession>(session);
+
1669  if (!iCaptureSession)
+
1670  ORIGINATE_ERROR("Failed to get ICaptureSession interface");
+
1671 
+
1672  if (iCaptureSession->capture(request, Argus::TIMEOUT_INFINITE) == 0)
+
1673  ORIGINATE_ERROR("Failed to submit the still capture request");
+
1674 
+
1675  return true;
+
1676 }
+
1677 
+
1678 bool Dispatcher::startRepeat(Argus::Request *request, Argus::CaptureSession *session)
+
1679 {
+
1680  if (!session)
+
1681  {
+
1682  // use the internal session
+
1683  PROPAGATE_ERROR(createSession());
+
1684  session = m_captureSession.get();
+
1685  }
+
1686 
+
1687  Argus::ICaptureSession *iCaptureSession =
+
1688  Argus::interface_cast<Argus::ICaptureSession>(session);
+
1689  if (!iCaptureSession)
+
1690  ORIGINATE_ERROR("Failed to get ICaptureSession interface");
+
1691 
+
1692  if (iCaptureSession->repeat(request) != Argus::STATUS_OK)
+
1693  ORIGINATE_ERROR("Failed to submit repeating capture request");
+
1694 
+
1695  // add the request to the list of active requests for the session
+
1696  bool found = false;
+
1697  for (ActiveSessionList::iterator it = m_activeSessions.begin(); it != m_activeSessions.end();
+
1698  ++it)
+
1699  {
+
1700  if (it->m_session == session)
+
1701  {
+
1702  it->m_requests.push_back(request);
+
1703  found = true;
+
1704  break;
+
1705  }
+
1706  }
+
1707  if (!found)
+
1708  ORIGINATE_ERROR("Did not find the session in the list of active sessions");
+
1709 
+
1710  return true;
+
1711 }
+
1712 
+
1713 bool Dispatcher::startRepeatBurst(const std::vector<const Argus::Request*>& requestList,
+
1714  Argus::CaptureSession *session)
+
1715 {
+
1716  if (!session)
+
1717  {
+
1718  // use the internal session
+
1719  PROPAGATE_ERROR(createSession());
+
1720  session = m_captureSession.get();
+
1721  }
+
1722 
+
1723  Argus::ICaptureSession *iCaptureSession =
+
1724  Argus::interface_cast<Argus::ICaptureSession>(session);
+
1725  if (!iCaptureSession)
+
1726  ORIGINATE_ERROR("Failed to get ICaptureSession interface");
+
1727 
+
1728  if (iCaptureSession->repeatBurst(requestList) != Argus::STATUS_OK)
+
1729  ORIGINATE_ERROR("Failed to submit repeating burst request");
+
1730 
+
1731  // add the requests to the list of active requests for the session
+
1732  bool found = false;
+
1733  for (ActiveSessionList::iterator it = m_activeSessions.begin(); it != m_activeSessions.end();
+
1734  ++it)
+
1735  {
+
1736  if (it->m_session == session)
+
1737  {
+
1738  it->m_requests.insert(it->m_requests.end(), requestList.begin(), requestList.end());
+
1739  found = true;
+
1740  break;
+
1741  }
+
1742  }
+
1743  if (!found)
+
1744  ORIGINATE_ERROR("Did not find the session in the list of active sessions");
+
1745 
+
1746  return true;
+
1747 }
+
1748 
+
1749 bool Dispatcher::stopRepeat(Argus::CaptureSession *session)
+
1750 {
+
1751  if (!session)
+
1752  {
+
1753  // use the internal session
+
1754  PROPAGATE_ERROR(createSession());
+
1755  session = m_captureSession.get();
+
1756  }
+
1757 
+
1758  Argus::ICaptureSession *iCaptureSession =
+
1759  Argus::interface_cast<Argus::ICaptureSession>(session);
+
1760  if (!iCaptureSession)
+
1761  ORIGINATE_ERROR("Failed to get ICaptureSession interface");
+
1762 
+
1763  iCaptureSession->stopRepeat();
+
1764 
+
1765  // clear the list of active requests for the session
+
1766  bool found = false;
+
1767  for (ActiveSessionList::iterator it = m_activeSessions.begin(); it != m_activeSessions.end();
+
1768  ++it)
+
1769  {
+
1770  if (it->m_session == session)
+
1771  {
+
1772  it->m_requests.clear();
+
1773  found = true;
+
1774  break;
+
1775  }
+
1776  }
+
1777  if (!found)
+
1778  ORIGINATE_ERROR("Did not find the session in the list of active sessions");
+
1779 
+
1780  return true;
+
1781 }
+
1782 
+ +
1784 {
+
1785  for (ActiveSessionList::iterator it = m_activeSessions.begin(); it != m_activeSessions.end();
+
1786  ++it)
+
1787  {
+
1788  if (!it->m_requests.empty())
+
1789  {
+
1790  Argus::ICaptureSession *iCaptureSession =
+
1791  Argus::interface_cast<Argus::ICaptureSession>(it->m_session);
+
1792  if (!iCaptureSession)
+
1793  ORIGINATE_ERROR("Failed to get ICaptureSession interface");
+
1794 
+
1795  iCaptureSession->stopRepeat();
+
1796 
+
1797  if (iCaptureSession->repeatBurst(it->m_requests) != Argus::STATUS_OK)
+
1798  ORIGINATE_ERROR("Failed to submit repeating burst request");
+
1799  }
+
1800  }
+
1801 
+
1802  return true;
+
1803 }
+
1804 
+
1805 uint32_t Dispatcher::maxBurstRequests(Argus::CaptureSession *session)
+
1806 {
+
1807  if (!session)
+
1808  {
+
1809  // use the internal session
+
1810  PROPAGATE_ERROR(createSession());
+
1811  session = m_captureSession.get();
+
1812  }
+
1813 
+
1814  Argus::ICaptureSession *iCaptureSession =
+
1815  Argus::interface_cast<Argus::ICaptureSession>(session);
+
1816  if (!iCaptureSession)
+
1817  {
+
1818  REPORT_ERROR("Failed to get ICaptureSession interface");
+
1819  return 0;
+
1820  }
+
1821 
+
1822  return iCaptureSession->maxBurstRequests();
+
1823 }
+
1824 
+
1825 bool Dispatcher::waitForIdle(Argus::CaptureSession *session)
+
1826 {
+
1827  if (!session)
+
1828  {
+
1829  // use the internal session
+
1830  PROPAGATE_ERROR(createSession());
+
1831  session = m_captureSession.get();
+
1832  }
+
1833 
+
1834  Argus::ICaptureSession *iCaptureSession =
+
1835  Argus::interface_cast<Argus::ICaptureSession>(session);
+
1836  if (!iCaptureSession)
+
1837  ORIGINATE_ERROR("Failed to get ICaptureSession interface");
+
1838 
+
1839  if (iCaptureSession->waitForIdle() != Argus::STATUS_OK)
+
1840  ORIGINATE_ERROR("Waiting for idle failed");
+
1841 
+
1842  return true;
+
1843 }
+
1844 
+
1845 bool Dispatcher::getOutputSize(Argus::Size2D<uint32_t> *size) const
+
1846 {
+
1847  // if width or height is 0 take the sensor size
+
1848  if ((m_outputSize.get().width() == 0) || (m_outputSize.get().height() == 0))
+
1849  {
+
1850  // the device needs to be open to get sensor modes
+
1851  assert(m_deviceOpen);
+
1852 
+
1853  Argus::ISensorMode *sensorMode =
+
1854  Argus::interface_cast<Argus::ISensorMode>(m_sensorModes[m_sensorModeIndex.get()]);
+
1855  if (!sensorMode)
+
1856  ORIGINATE_ERROR("Failed to get ISensorMode interface");
+
1857  *size = sensorMode->getResolution();
+
1858  }
+
1859  else
+
1860  {
+
1861  *size = m_outputSize;
+
1862  }
+
1863 
+
1864  return true;
+
1865 }
+
1866 
+
1867 bool Dispatcher::createOutputStream(Argus::Request *request, bool enableMetadata,
+
1868  Argus::UniqueObj<Argus::OutputStream> &stream, Argus::CaptureSession *session)
+
1869 {
+
1870  if (!session)
+
1871  {
+
1872  // use the internal session
+
1873  PROPAGATE_ERROR(createSession());
+
1874  session = m_captureSession.get();
+
1875  }
+
1876 
+
1877  Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(request);
+
1878  if (!iRequest)
+
1879  ORIGINATE_ERROR("Failed to get IRequest interface");
+
1880 
+
1881  Argus::Size2D<uint32_t> outputSize;
+
1882  PROPAGATE_ERROR(getOutputSize(&outputSize));
+
1883 
+
1884  Argus::ICaptureSession *iCaptureSession =
+
1885  Argus::interface_cast<Argus::ICaptureSession>(session);
+
1886  if (!iCaptureSession)
+
1887  ORIGINATE_ERROR("Failed to get ICaptureSession interface");
+
1888 
+
1889  Argus::UniqueObj<Argus::OutputStreamSettings> outputStreamSettings(
+
1890  iCaptureSession->createOutputStreamSettings(Argus::STREAM_TYPE_EGL));
+
1891  Argus::IEGLOutputStreamSettings* iEGLOutputStreamSettings =
+
1892  Argus::interface_cast<Argus::IEGLOutputStreamSettings>(outputStreamSettings);
+
1893  if (!iEGLOutputStreamSettings)
+
1894  ORIGINATE_ERROR("Failed to get IEGLOutputStreamSettings interface");
+
1895 
+
1896  iEGLOutputStreamSettings->setPixelFormat(m_captureYuvFormat.get());
+
1897  iEGLOutputStreamSettings->setResolution(outputSize);
+
1898  iEGLOutputStreamSettings->setEGLDisplay(Composer::getInstance().getEGLDisplay());
+
1899  iEGLOutputStreamSettings->setMetadataEnable(enableMetadata);
+
1900 
+
1901  Argus::UniqueObj<Argus::OutputStream> outputStream(
+
1902  iCaptureSession->createOutputStream(outputStreamSettings.get()));
+
1903  if (!outputStream)
+
1904  ORIGINATE_ERROR("Failed to create OutputStream");
+
1905 
+
1906  stream.reset(outputStream.release());
+
1907 
+
1908  return true;
+
1909 }
+
1910 
+
1911 bool Dispatcher::enableOutputStream(Argus::Request *request, Argus::OutputStream *stream)
+
1912 {
+
1913  Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(request);
+
1914  if (!iRequest)
+
1915  ORIGINATE_ERROR("Failed to get IRequest interface");
+
1916 
+
1917  // Enable the stream
+
1918  if (iRequest->enableOutputStream(stream) != Argus::STATUS_OK)
+
1919  ORIGINATE_ERROR("Failed to enable the output stream");
+
1920 
+
1921  return true;
+
1922 }
+
1923 
+
1924 bool Dispatcher::disableOutputStream(Argus::Request *request, Argus::OutputStream *stream)
+
1925 {
+
1926  Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(request);
+
1927  if (!iRequest)
+
1928  ORIGINATE_ERROR("Failed to get IRequest interface");
+
1929 
+
1930  // Disable the stream
+
1931  if (iRequest->disableOutputStream(stream) != Argus::STATUS_OK)
+
1932  ORIGINATE_ERROR("Failed to disable the output stream");
+
1933 
+
1934  return true;
+
1935 }
+
1936 
+
1937 bool Dispatcher::registerObserver(Argus::IDenoiseSettings *iDenoiseSettings)
+
1938 {
+
1939  UniquePointer<DenoiseSettingsObserver> denoiseSettings;
+
1940 
+
1941  denoiseSettings.reset(new DenoiseSettingsObserver(iDenoiseSettings));
+
1942  if (!denoiseSettings)
+
1943  ORIGINATE_ERROR("Out of memory");
+
1944 
+
1945  m_observers.push_front(denoiseSettings.release());
+
1946  return true;
+
1947 }
+
1948 
+
1949 bool Dispatcher::registerObserver(Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings)
+
1950 {
+
1951  UniquePointer<EdgeEnhanceSettingsObserver> edgeEnhanceSettings;
+
1952 
+
1953  edgeEnhanceSettings.reset(new EdgeEnhanceSettingsObserver(iEdgeEnhanceSettings));
+
1954  if (!edgeEnhanceSettings)
+
1955  ORIGINATE_ERROR("Out of memory");
+
1956 
+
1957  m_observers.push_front(edgeEnhanceSettings.release());
+
1958  return true;
+
1959 }
+
1960 
+
1961 bool Dispatcher::registerObserver(Argus::ISourceSettings *iSourceSettings)
+
1962 {
+
1963  UniquePointer<SourceSettingsObserver> sourceSettings;
+
1964 
+
1965  sourceSettings.reset(new SourceSettingsObserver(iSourceSettings));
+
1966  if (!sourceSettings)
+
1967  ORIGINATE_ERROR("Out of memory");
+
1968 
+
1969  m_observers.push_front(sourceSettings.release());
+
1970  return true;
+
1971 }
+
1972 
+
1973 bool Dispatcher::registerObserver(Argus::IAutoControlSettings *iAutoControlSettings)
+
1974 {
+
1975  UniquePointer<AutoControlSettingsObserver> autoControlSettings;
+
1976 
+
1977  autoControlSettings.reset(new AutoControlSettingsObserver(iAutoControlSettings));
+
1978  if (!autoControlSettings)
+
1979  ORIGINATE_ERROR("Out of memory");
+
1980 
+
1981  m_observers.push_front(autoControlSettings.release());
+
1982  return true;
+
1983 }
+
1984 
+
1985 bool Dispatcher::registerObserver(Argus::Ext::IDeFogSettings *iDeFogSettings)
+
1986 {
+
1987  UniquePointer<DeFogSettingsObserver> deFogSettings;
+
1988 
+
1989  deFogSettings.reset(new DeFogSettingsObserver(iDeFogSettings));
+
1990  if (!deFogSettings)
+
1991  ORIGINATE_ERROR("Out of memory");
+
1992 
+
1993  m_observers.push_front(deFogSettings.release());
+
1994  return true;
+
1995 }
+
1996 
+
1997 bool Dispatcher::unregisterObserver(Argus::Interface *interface)
+
1998 {
+
1999  for (std::list<IObserverForInterface*>::iterator it = m_observers.begin();
+
2000  it != m_observers.end(); ++it)
+
2001  {
+
2002  if ((*it)->isInterface(interface))
+
2003  {
+
2004  delete *it;
+
2005  m_observers.erase(it);
+
2006  return true;
+
2007  }
+
2008  }
+
2009 
+
2010  ORIGINATE_ERROR("Observer not found");
+
2011 }
+
2012 
+
2013 bool Dispatcher::message(const char *msg, ...)
+
2014 {
+
2015  if (m_verbose)
+
2016  {
+
2017  va_list list;
+
2018 
+
2019  va_start(list, msg);
+
2020 
+
2021  if (vprintf(msg, list) < 0)
+
2022  {
+
2023  va_end(list);
+
2024  ORIGINATE_ERROR("Failed to print message");
+
2025  }
+
2026 
+
2027  va_end(list);
+
2028  }
+
2029 
+
2030  return true;
+
2031 }
+
2032 
+
2033 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8h.html new file mode 100644 index 0000000..61678a0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8h.html @@ -0,0 +1,129 @@ + + + + + +Argus Camera Sample: modules/Dispatcher.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Dispatcher.h File Reference
+
+
+
#include <stdint.h>
+#include <string>
+#include <list>
+#include <Argus/Argus.h>
+#include "Value.h"
+#include "Error.h"
+#include "VideoPipeline.h"
+#include "IObserver.h"
+#include "Util.h"
+#include "TrackedUniqueObject.h"
+#include "UniquePointer.h"
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  ArgusSamples::Dispatcher
 The dispatcher is called by clients like the command line interface. More...
class  ArgusSamples::Dispatcher::ActiveSession
+ + + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8h_source.html new file mode 100644 index 0000000..208f2e7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Dispatcher_8h_source.html @@ -0,0 +1,528 @@ + + + + + +Argus Camera Sample: modules/Dispatcher.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Dispatcher.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef DISPATCHER_H
+
30 #define DISPATCHER_H
+
31 
+
32 #include <stdint.h>
+
33 #include <string>
+
34 #include <list>
+
35 
+
36 #include <Argus/Argus.h>
+
37 
+
38 #include "Value.h"
+
39 #include "Error.h"
+
40 #include "VideoPipeline.h"
+
41 #include "IObserver.h"
+
42 #include "Util.h"
+
43 #include "TrackedUniqueObject.h"
+
44 #include "UniquePointer.h"
+
45 
+
46 namespace Argus { namespace Ext { class IDeFogSettings; } }
+
47 
+
48 namespace ArgusSamples
+
49 {
+
50 
+
51 class IObserverForInterface;
+
52 
+
53 /**
+
54  * The dispatcher is called by clients like the command line interface.
+
55  * It provides functions to set properties like the camera device index or the sensor mode. It
+
56  * also implements services to open devices, sessions and create requests.
+
57  * It also maintains an internal capture session which is used when only a single session is
+
58  * required.
+
59  */
+ +
61  : public IObserver
+
62  , public Tracker<Argus::CaptureSession>
+
63  , public Tracker<Argus::Request>
+
64 {
+
65 public:
+
66  /**
+
67  * Get the dispatcher instance.
+
68  */
+
69  static Dispatcher &getInstance();
+
70 
+
71  /**
+
72  * Shutdown, free all resources
+
73  */
+
74  bool shutdown();
+
75 
+
76  /**
+
77  * Returns whether or not an extension is supported.
+
78  */
+
79  bool supportsExtension(const Argus::ExtensionName& extension) const;
+
80 
+
81  /**
+
82  * Get an information string
+
83  */
+
84  bool getInfo(std::string &info) const;
+
85 
+
86  /**
+
87  * Get the sensor mode for a given index
+
88  *
+
89  * @param sensorModeIndex [in]
+
90  * @param sensorMode [out]
+
91  */
+
92  bool getSensorMode(uint32_t sensorModeIndex, Argus::SensorMode **sensorMode) const;
+
93 
+
94  /**
+
95  * Returns the range of focuser positions of the current device.
+
96  * The units are focuser steps.
+
97  */
+
98  Argus::Range<int32_t> getDeviceFocusPositionRange() const;
+
99 
+
100  /**
+
101  * Returns the range of aperture positions of the current device.
+
102  * The units are aperture positions.
+
103  */
+
104  Argus::Range<int32_t> getDeviceAperturePositionRange() const;
+
105 
+
106  /**
+
107  * Returns the range of aperture motor positions per second of the current device.
+
108  * The units are aperture motor steps/second.
+
109  */
+
110  Argus::Range<float> getDeviceApertureMotorSpeedRange() const;
+
111 
+
112  /**
+
113  * Get the output size
+
114  */
+
115  bool getOutputSize(Argus::Size2D<uint32_t> *size) const;
+
116 
+
117  /**
+
118  * Get the amount of available camera devices
+
119  */
+
120  uint32_t getDeviceCount() const;
+
121 
+
122  /**
+
123  * Create a capture session using the device index
+
124  */
+
125  bool createSession(TrackedUniqueObj<Argus::CaptureSession> &session, uint32_t deviceIndex);
+
126 
+
127  /**
+
128  * Wait for events from the specific session.
+
129  *
+
130  * @param eventQueue [in] event queue to transfer events to
+
131  * @param timeout [in] maximum time (in nanoseconds) to wait for new events.
+
132  * @param session [in] capture session (optional, if NULL the internal session is used)
+
133  */
+
134  bool waitForEvents(Argus::EventQueue *eventQueue, TimeValue timeout = TimeValue::infinite(),
+
135  Argus::CaptureSession *session = NULL);
+
136 
+
137  /**
+
138  * Dump runtime information for a session.
+
139  */
+
140  bool dumpSessionInfo() const;
+
141 
+
142  /**
+
143  * Create a request for a session
+
144  *
+
145  * @param request [out] created request
+
146  * @param captureIntent [in] capture intent
+
147  * @param session [in] capture session (optional, if NULL the internal session is used)
+
148  */
+ +
150  Argus::CaptureIntent captureIntent, Argus::CaptureSession *session = NULL);
+
151 
+
152  /**
+
153  * create a event queue
+
154  *
+
155  * @param eventTypes [in]
+
156  * @param eventQueue [out] created event queue
+
157  * @param session [in] capture session (optional, if NULL the internal session is used)
+
158  */
+
159  bool createEventQueue(const std::vector<Argus::EventType> &eventTypes,
+
160  Argus::UniqueObj<Argus::EventQueue> &eventQueue, Argus::CaptureSession *session = NULL);
+
161 
+
162 
+
163  /**
+
164  * Submits a single capture request for a session
+
165  *
+
166  * @param request [in] capture request
+
167  * @param session [in] capture session (optional, if NULL the internal session is used)
+
168  */
+
169  bool capture(Argus::Request *request, Argus::CaptureSession *session = NULL);
+
170 
+
171  /**
+
172  * Start a repeating request for a session
+
173  *
+
174  * @param request [in] request
+
175  * @param session [in] capture session (optional, if NULL the internal session is used)
+
176  */
+
177  bool startRepeat(Argus::Request *request, Argus::CaptureSession *session = NULL);
+
178 
+
179  /**
+
180  * Start a repeating burst request for a session
+
181  *
+
182  * @param requestList [in] burst request
+
183  * @param session [in] capture session (optional, if NULL the internal session is used)
+
184  */
+
185  bool startRepeatBurst(const std::vector<const Argus::Request*>& requestList,
+
186  Argus::CaptureSession *session = NULL);
+
187 
+
188  /**
+
189  * Clears the repeating request for a session
+
190  *
+
191  * @param session [in] capture session (optional, if NULL the internal session is used)
+
192  */
+
193  bool stopRepeat(Argus::CaptureSession *session = NULL);
+
194 
+
195  /**
+
196  * Restart the currently active requests to pick up changed settings.
+
197  */
+
198  bool restartActiveRequests();
+
199 
+
200  /**
+
201  * Returns the maximum number of capture requests for a session that can be included in a
+
202  * burst capture.
+
203  *
+
204  * @param session [in] capture session (optional, if NULL the internal session is used)
+
205  */
+
206  uint32_t maxBurstRequests(Argus::CaptureSession *session = NULL);
+
207 
+
208  /**
+
209  * Wait until all pending captures for a session are complete
+
210  *
+
211  * @param session [in] capture session (optional, if NULL the internal session is used)
+
212  */
+
213  bool waitForIdle(Argus::CaptureSession *session = NULL);
+
214 
+
215  /**
+
216  * Create an output stream of an request of a session.
+
217  *
+
218  * @param request [in] request
+
219  * @param enableMetadata [in] whether or not to enable meatdata for the stream
+
220  * @param stream [out] the created Argus output stream
+
221  * @param session [in] capture session (optional, if NULL the internal session is used)
+
222  */
+
223  bool createOutputStream(Argus::Request *request, bool enableMetadata,
+
224  Argus::UniqueObj<Argus::OutputStream> &stream,
+
225  Argus::CaptureSession *session = NULL);
+
226 
+
227  /**
+
228  * Enable an output stream of an request
+
229  */
+
230  bool enableOutputStream(Argus::Request *request, Argus::OutputStream *stream);
+
231 
+
232  /**
+
233  * Disable an output stream of an request
+
234  */
+
235  bool disableOutputStream(Argus::Request *request, Argus::OutputStream *stream);
+
236 
+
237  /**
+
238  * Output a message if verbose mode is enabled
+
239  */
+
240  bool message(const char *msg, ...);
+
241 
+
242 private:
+
243  // the current properties need to be initialized first, some Value<> members below use them
+
244  // for the validator
+
245 
+
246  // current device properties
+
247  std::vector<Argus::SensorMode*> m_sensorModes; ///< sensor modes
+
248  Value<Argus::Range<int32_t> > m_deviceFocusPositionRange; ///< device focus position range
+
249  Value<Argus::Range<int32_t> > m_deviceAperturePositionRange; ///< device aperture position range
+
250  std::vector<float> m_deviceApertureFnums; ///< device aperture fnum available values
+
251  Value<Argus::Range<float> > m_deviceApertureMotorSpeedRange; ///< device aperture motor speed range
+
252  Value<Argus::Range<float> > m_deviceExposureCompensationRange; ///< exposure compensation range
+
253  Value<Argus::Range<Argus::Range<float> > >
+
254  m_deviceIspDigitalGainRange; ///< device isp digital gain range
+
255 
+
256  // current sensor mode properties
+
257  Value<Argus::Range<Argus::Range<uint64_t> > >
+
258  m_sensorExposureTimeRange; ///< exposure time range
+
259  Value<Argus::Range<Argus::Range<float> > >
+
260  m_sensorAnalogGainRange; ///< analog gain range
+
261  Value<Argus::Range<float> > m_sensorFrameRateRange; ///< frame rate range
+
262 
+
263 public:
+
264  Value<uint32_t> m_deviceIndex; ///< the device index
+
265  Value<bool> m_deviceOpen; ///< if set then the device is open
+
266  Value<bool> m_sensorModeValid;
+
267 
+
268  Value<bool> m_verbose; ///< if set verbose mode is enabled and messages are printed
+
269  Value<bool> m_kpi; ///< if set kpi mode is enabled and kpi number are printed
+
270 
+
271  // source settings
+
272  Value<Argus::Range<uint64_t> > m_exposureTimeRange; ///< exposure time range
+
273  Value<Argus::Range<float> > m_gainRange; ///< gain range
+
274  Value<uint32_t> m_sensorModeIndex; ///< the sensor mode index
+
275  Value<float> m_frameRate; ///< in frames per second
+
276  Value<int32_t> m_focusPosition; ///< focus position
+
277  Value<int32_t> m_aperturePosition; ///< aperture position
+
278  Value<float> m_apertureFnum; ///< aperture position
+
279  Value<float> m_apertureMotorSpeed; ///< aperture motor steps/second
+
280  Value<Argus::PixelFormat> m_captureYuvFormat; ///< NV12 vs. P016 YUV color depth
+
281 
+
282  // denoise settings
+
283  Value<Argus::DenoiseMode> m_denoiseMode; ///< denoise mode
+
284  Value<float> m_denoiseStrength; ///< denoise strength
+
285 
+
286  // edge enhance settings
+
287  Value<Argus::EdgeEnhanceMode> m_edgeEnhanceMode; ///< edge enhancement mode
+
288  Value<float> m_edgeEnhanceStrength; ///< edge enhancement strength
+
289 
+
290  // auto control settings
+
291  Value<Argus::AeAntibandingMode> m_aeAntibandingMode; ///< auto exposure antibanding mode
+
292  Value<bool> m_aeLock; ///< auto exposure lock
+
293  Value<bool> m_awbLock; ///< auto white balance lock
+
294  Value<Argus::AwbMode> m_awbMode; ///< auto white balance mode
+
295  Value<float> m_exposureCompensation;///< exposure compensation
+
296  Value<Argus::Range<float> > m_ispDigitalGainRange;///< ISP digital Gain Range
+
297  Value<Argus::Range<uint32_t> > m_acRegionHorizontal; ///< auto control region horizontal
+
298  Value<Argus::Range<uint32_t> > m_acRegionVertical; ///< auto control region vertical
+
299 
+
300  // still settings
+
301  Value<StillFileType> m_stillFileType; ///< the still image file format
+
302 
+
303  // video settings
+
304  Value<VideoPipeline::VideoFormat> m_videoFormat; ///< the video format
+
305  Value<VideoPipeline::VideoFileType> m_videoFileType; ///< the video file type
+
306  Value<uint32_t> m_videoBitRate; ///< the video bit rate
+
307 
+
308  // output settings
+
309  Value<Argus::Size2D<uint32_t> > m_outputSize; ///< output size
+
310  Value<std::string> m_outputPath; ///< output path
+
311 
+
312  // DeFog extension
+
313  Value<bool> m_deFogEnable; ///< enable
+
314  Value<float> m_deFogAmount; ///< amount of fog to be removed. Range 0.0 - 1.0 (none - all)
+
315  Value<float> m_deFogQuality; ///< quality of the effect. Range 0.0 - 1.0 (low - high)
+
316 
+
317 private:
+
318  Dispatcher();
+
319  ~Dispatcher();
+
320 
+
321  // this is a singleton, hide copy constructor etc.
+
322  Dispatcher(const Dispatcher&);
+ +
324 
+
325  /**
+
326  * Initialize the dispatcher
+
327  */
+
328  bool initialize();
+
329 
+
330  /**
+
331  * Create the internal session
+
332  */
+
333  bool createSession();
+
334 
+
335  /**
+
336  * Close the internal session
+
337  */
+
338  bool closeSession();
+
339 
+
340  /**
+
341  * Start tracking a session
+
342  */
+
343  bool track(Argus::CaptureSession *session);
+
344 
+
345  /**
+
346  * No longer track a session
+
347  */
+
348  bool untrack(Argus::CaptureSession *session);
+
349 
+
350  /**
+
351  * Start tracking a request
+
352  */
+
353  bool track(Argus::Request *request);
+
354 
+
355  /**
+
356  * No longer track a request
+
357  */
+
358  bool untrack(Argus::Request *request);
+
359 
+
360  /**
+
361  * Register an IDenoiseSettings observer
+
362  */
+
363  bool registerObserver(Argus::IDenoiseSettings *iDenoiseSettings);
+
364 
+
365  /**
+
366  * Register an IEdgeEnhanceSettings observer
+
367  */
+
368  bool registerObserver(Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings);
+
369 
+
370  /**
+
371  * Register an ISourceSettings observer
+
372  */
+
373  bool registerObserver(Argus::ISourceSettings *iSourceSettings);
+
374 
+
375  /**
+
376  * Register an IAutoControlSettings observer
+
377  */
+
378  bool registerObserver(Argus::IAutoControlSettings *iAutoControlSettings);
+
379 
+
380  /**
+
381  * Register an IDeFogSettings observer
+
382  */
+
383  bool registerObserver(Argus::Ext::IDeFogSettings *iDeFogSettings);
+
384 
+
385  /**
+
386  * Unregister an interface which had been registered as an observer.
+
387  */
+
388  bool unregisterObserver(Argus::Interface *interface);
+
389 
+
390  /**
+
391  * Callback when the device index changes.
+
392  */
+
393  bool onDeviceIndexChanged(const Observed &source);
+
394 
+
395  /**
+
396  * Callback when the sensor mode index changes.
+
397  */
+
398  bool onSensorModeIndexChanged(const Observed &source);
+
399 
+
400  bool m_initialized; ///< if set the dispatcher is initialized
+
401 
+
402  std::list<IObserverForInterface*> m_observers;
+
403 
+
404  Argus::UniqueObj<Argus::CameraProvider> m_cameraProvider; ///< camera provider
+
405  Argus::ICameraProvider *m_iCameraProvider; ///< camera provider interface
+
406 
+
407  std::vector<Argus::CameraDevice*> m_cameraDevices; ///< a list of available devices
+
408 
+ +
410 
+ +
412  {
+
413  public:
+
414  ActiveSession(Argus::CaptureSession *session)
+
415  : m_session(session)
+
416  {
+
417  }
+
418 
+
419  Argus::CaptureSession *m_session;
+
420  std::vector<const Argus::Request*> m_requests;
+
421  };
+
422  typedef std::list<ActiveSession> ActiveSessionList;
+ +
424 };
+
425 
+
426 }; // namespace ArgusSamples
+
427 
+
428 #endif // DISPATCHER_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8cpp.html new file mode 100644 index 0000000..2bde1e5 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8cpp.html @@ -0,0 +1,114 @@ + + + + + +Argus Camera Sample: modules/EventThread.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
EventThread.cpp File Reference
+
+
+
#include "EventThread.h"
+#include "Dispatcher.h"
+#include "Util.h"
+#include "PerfTracker.h"
+#include <Argus/Ext/InternalFrameCount.h>
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8cpp_source.html new file mode 100644 index 0000000..f1e022c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8cpp_source.html @@ -0,0 +1,260 @@ + + + + + +Argus Camera Sample: modules/EventThread.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
EventThread.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include "EventThread.h"
+
30 #include "Dispatcher.h"
+
31 #include "Util.h"
+
32 #include "PerfTracker.h"
+
33 
+
34 #include <Argus/Ext/InternalFrameCount.h>
+
35 
+
36 namespace ArgusSamples {
+
37 
+
38 EventThread::EventThread(Argus::CaptureSession *session,
+
39  SessionPerfTracker *sessionPerfTracker)
+
40  : m_session(session)
+
41  , m_sessionPerfTracker(sessionPerfTracker)
+
42 {
+
43 }
+
44 
+ +
46 {
+
47 }
+
48 
+ +
50 {
+
51  std::vector<Argus::EventType> eventTypes;
+
52  eventTypes.push_back(Argus::EVENT_TYPE_CAPTURE_COMPLETE);
+
53 
+
54  PROPAGATE_ERROR(Dispatcher::getInstance().createEventQueue(eventTypes, m_eventQueue,
+
55  m_session));
+
56 
+
57  return true;
+
58 }
+
59 
+ +
61 {
+
62  Dispatcher &dispatcher = Dispatcher::getInstance();
+
63 
+
64  // wait for events (use a time out to allow the thread to be shutdown even if there are no
+
65  // new events)
+
66  PROPAGATE_ERROR(dispatcher.waitForEvents(m_eventQueue.get(), TimeValue::fromMSec(100),
+
67  m_session));
+
68 
+
69  Argus::IEventQueue *iEventQueue =
+
70  Argus::interface_cast<Argus::IEventQueue>(m_eventQueue.get());
+
71  if (!iEventQueue)
+
72  ORIGINATE_ERROR("Failed to get iEventQueue");
+
73 
+
74  for (uint32_t i = 0; i < iEventQueue->getSize(); i++)
+
75  {
+
76  const Argus::Event *event = iEventQueue->getEvent(i);
+
77  const Argus::IEvent *iEvent = Argus::interface_cast<const Argus::IEvent>(event);
+
78  if (!iEvent)
+
79  ORIGINATE_ERROR("Failed to get IEvent interface");
+
80 
+
81  if (iEvent->getEventType() == Argus::EVENT_TYPE_CAPTURE_COMPLETE)
+
82  {
+ +
84 
+
85  const Argus::IEventCaptureComplete *iEventCaptureComplete
+
86  = Argus::interface_cast<const Argus::IEventCaptureComplete>(event);
+
87  const Argus::CaptureMetadata *metaData = iEventCaptureComplete->getMetadata();
+
88  if (metaData)
+
89  {
+
90  const Argus::ICaptureMetadata *iCaptureMeta =
+
91  Argus::interface_cast<const Argus::ICaptureMetadata>(metaData);
+
92  if (iCaptureMeta)
+
93  {
+
94  /// @todo IEvent documentation says the time value is in nano seconds, but
+
95  /// actually it's in micro seconds.
+
96  const TimeValue latency =
+
97  TimeValue::fromUSec(iEvent->getTime()) -
+
98  TimeValue::fromNSec(iCaptureMeta->getSensorTimestamp());
+
99  PROPAGATE_ERROR(m_sessionPerfTracker->onEvent(
+ +
101 
+
102  const TimeValue sensorTime =
+
103  TimeValue::fromNSec(iCaptureMeta->getSensorTimestamp());
+
104  PROPAGATE_ERROR(m_sessionPerfTracker->onEvent(
+
105  SESSION_EVENT_FRAME_PERIOD, sensorTime.toUSec()));
+
106 
+
107  // AF
+
108  std::vector< Argus::AcRegion > regions;
+
109  std::vector<float> sharpnessScore;
+
110  if (iCaptureMeta->getAfRegions(&regions) != Argus::STATUS_OK)
+
111  ORIGINATE_ERROR("Failed to get AF regions");
+
112 
+
113  if (iCaptureMeta->getSharpnessScore(&sharpnessScore) != Argus::STATUS_OK)
+
114  ORIGINATE_ERROR("Failed to get sharpness score");
+
115 
+
116  PROPAGATE_ERROR(dispatcher.message("Focus control info: focuser position %d ",
+
117  iCaptureMeta->getFocuserPosition()));
+
118  for (uint32_t j = 0; j < regions.size(); j++)
+
119  {
+
120  PROPAGATE_ERROR(dispatcher.message(" region %d %d %d %d, score %f ",
+
121  regions[j].left(), regions[j].top(), regions[j].right(),
+
122  regions[j].bottom(), sharpnessScore[j]));
+
123  }
+
124  PROPAGATE_ERROR(dispatcher.message("\n"));
+
125 
+
126  // bayerHistogram
+
127  Argus::Rectangle<uint32_t> region;
+
128  region = iCaptureMeta->getBayerHistogramRegion();
+
129  PROPAGATE_ERROR(dispatcher.message("BayerHistogram region %d %d %d %d, \n",
+
130  region.left(), region.top(), region.right(), region.bottom()));
+
131 
+
132  // Flicker
+
133  Argus::AeFlickerState state = iCaptureMeta->getFlickerState();
+
134  PROPAGATE_ERROR(dispatcher.message("Flicker state %s \n", state.getName()));
+
135 
+
136  PROPAGATE_ERROR(dispatcher.message("aperture info: aperture position %d \n",
+
137  iCaptureMeta->getAperturePosition()));
+
138  }
+
139 
+
140  const Argus::Ext::IInternalFrameCount *iInternalFrameCount =
+
141  Argus::interface_cast<const Argus::Ext::IInternalFrameCount>(metaData);
+
142  if (iInternalFrameCount)
+
143  {
+
144  const uint64_t currentFrameCount = iInternalFrameCount->getInternalFrameCount();
+ +
146  currentFrameCount));
+
147  }
+
148  }
+
149  }
+
150  }
+
151 
+
152  return true;
+
153 }
+
154 
+ +
156 {
+
157  return true;
+
158 }
+
159 
+
160 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8h.html new file mode 100644 index 0000000..65183bc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: modules/EventThread.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
EventThread.h File Reference
+
+
+
#include "Thread.h"
+#include <Argus/Argus.h>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::EventThread
 The EventThread is querying events from the session. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8h_source.html new file mode 100644 index 0000000..df468cc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/EventThread_8h_source.html @@ -0,0 +1,165 @@ + + + + + +Argus Camera Sample: modules/EventThread.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
EventThread.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef EVENTTHREAD_H
+
30 #define EVENTTHREAD_H
+
31 
+
32 #include "Thread.h"
+
33 
+
34 #include <Argus/Argus.h>
+
35 
+
36 namespace ArgusSamples
+
37 {
+
38 
+
39 class SessionPerfTracker;
+
40 
+
41 /**
+
42  * The EventThread is querying events from the session. It does some analysis and then pass the
+
43  * info to a sessionPerfTracker.
+
44  */
+
45 class EventThread : public Thread
+
46 {
+
47 public:
+
48  explicit EventThread(Argus::CaptureSession *session,
+
49  SessionPerfTracker *sessionPerfTracker);
+
50  virtual ~EventThread();
+
51 
+
52 protected:
+
53  virtual bool threadInitialize();
+
54  virtual bool threadExecute();
+
55  virtual bool threadShutdown();
+
56 
+
57 private:
+
58  Argus::CaptureSession *m_session;
+
59  Argus::UniqueObj<Argus::EventQueue> m_eventQueue;
+ +
61 };
+
62 
+
63 }; // namespace ArgusSamples
+
64 
+
65 #endif // EVENTTHREAD_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8cpp.html new file mode 100644 index 0000000..fe79234 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8cpp.html @@ -0,0 +1,169 @@ + + + + + +Argus Camera Sample: modules/tasks/Gallery.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Gallery.cpp File Reference
+
+
+ +

Gallery implementation file. +More...

+
#include <GLES3/gl31.h>
+#include <GLES2/gl2ext.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <assert.h>
+#include <list>
+#include "Gallery.h"
+#include "Composer.h"
+#include "Dispatcher.h"
+#include "Error.h"
+#include "Ordered.h"
+#include "Mutex.h"
+#include "ConditionVariable.h"
+#include "UniquePointer.h"
+#include "Thread.h"
+#include "GLContext.h"
+#include "VideoPipeline.h"
+#include "jpeglib.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + +

+Classes

class  ArgusSamples::GalleryItem
 Represents an item in the gallery. More...
class  ArgusSamples::GalleryItemImage
 A gallery image. More...
class  ArgusSamples::GalleryItemVideo
 A gallery video. More...
class  ArgusSamples::GalleryThread
 This class handles creation of a thread scanning for supported images/videos, loading them and writing the content to an EGLStream. More...
+ + +

+Namespaces

namespace  ArgusSamples
+ + +

+Macros

#define GL_GLEXT_PROTOTYPES
+

Detailed Description

+

Gallery implementation file.

+

The gallery task creates a thread handling scanning for items, loading of images and displaying them, using a playback video pipeline for displaying videos. The task communicates with the thread through commands. Image gallery items share one EGL stream, image data is written to that stream. Video gallery items each have an EGL stream. EGL streams are enabled for the current visible item only. The composer displays them on the screen.

+ +

Definition in file Gallery.cpp.

+

Macro Definition Documentation

+ +
+
+ + + + +
#define GL_GLEXT_PROTOTYPES
+
+ +

Definition at line 41 of file Gallery.cpp.

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8cpp_source.html new file mode 100644 index 0000000..78af5dc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8cpp_source.html @@ -0,0 +1,1133 @@ + + + + + +Argus Camera Sample: modules/tasks/Gallery.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Gallery.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * Gallery implementation file.
+
32  * The gallery task creates a thread handling scanning for items, loading of images and displaying
+
33  * them, using a playback video pipeline for displaying videos.
+
34  * The task communicates with the thread through commands.
+
35  * Image gallery items share one EGL stream, image data is written to that stream. Video gallery
+
36  * items each have an EGL stream.
+
37  * EGL streams are enabled for the current visible item only. The composer displays them on the
+
38  * screen.
+
39  */
+
40 
+
41 #define GL_GLEXT_PROTOTYPES
+
42 
+
43 #include <GLES3/gl31.h>
+
44 #include <GLES2/gl2ext.h>
+
45 
+
46 #include <stdio.h>
+
47 #include <sys/types.h>
+
48 #include <sys/stat.h>
+
49 #include <dirent.h>
+
50 #include <assert.h>
+
51 
+
52 #include <list>
+
53 
+
54 #include "Gallery.h"
+
55 #include "Composer.h"
+
56 #include "Dispatcher.h"
+
57 #include "Error.h"
+
58 #include "Ordered.h"
+
59 #include "Mutex.h"
+
60 #include "ConditionVariable.h"
+
61 #include "UniquePointer.h"
+
62 #include "Thread.h"
+
63 #include "GLContext.h"
+
64 #include "VideoPipeline.h"
+
65 
+
66 extern "C" {
+
67 #include "jpeglib.h"
+
68 }
+
69 
+
70 namespace ArgusSamples
+
71 {
+
72 
+
73 /**
+
74  * Represents an item in the gallery.
+
75  */
+ +
77 {
+
78 public:
+
79  GalleryItem(const char *fileName, time_t modTime)
+
80  : m_fileName(fileName)
+
81  , m_modTime(modTime)
+
82  {
+
83  }
+
84 
+
85  virtual ~GalleryItem()
+
86  {
+
87  }
+
88 
+
89  /**
+
90  * item types
+
91  */
+
92  enum Type
+
93  {
+ + + +
97  };
+
98 
+
99  /**
+
100  * Compare function for sort(). Returns true if the first argument goes before the second
+
101  * argument, and false otherwise.
+
102  */
+
103  friend bool operator<(const GalleryItem &l, const GalleryItem &r)
+
104  {
+
105  return (difftime(l.m_modTime, r.m_modTime) > 0);
+
106  }
+
107 
+
108  /**
+
109  * Initialize
+
110  */
+
111  virtual bool initialize() = 0;
+
112 
+
113  /**
+
114  * shutdown
+
115  */
+
116  virtual bool shutdown() = 0;
+
117 
+
118  /**
+
119  * Start the display
+
120  */
+
121  virtual bool startDisplay() { return true; }
+
122 
+
123  /**
+
124  * Pause the display
+
125  */
+
126  virtual bool pauseDisplay() { return true; }
+
127 
+
128  /**
+
129  * Toggle playback
+
130  */
+
131  virtual bool togglePlayBack() { return true; }
+
132 
+
133  /**
+
134  * Rewind
+
135  */
+
136  virtual bool rewind() { return true; }
+
137 
+
138  /**
+
139  * Get the item type
+
140  */
+
141  virtual Type getType() const = 0;
+
142 
+
143  /**
+
144  * Get the file name
+
145  */
+
146  const std::string& getFileName() const
+
147  {
+
148  return m_fileName;
+
149  }
+
150 
+
151 protected:
+
152  std::string m_fileName;
+
153  time_t m_modTime;
+
154 
+
155  GalleryItem();
+
156 };
+
157 
+
158 /**
+
159  * Compare function for sort(). Returns true if the first argument goes before the second
+
160  * argument, and false otherwise.
+
161  */
+
162 static bool galleryItemCompare(const GalleryItem* const &l, const GalleryItem* const &r)
+
163 {
+
164  return (*l < *r);
+
165 }
+
166 
+
167 /**
+
168  * A gallery image. Can load JPEG images. Holds image data in CPU memory.
+
169  */
+ +
171 {
+
172 public:
+
173  GalleryItemImage(const char *fileName, time_t modTime)
+
174  : GalleryItem(fileName, modTime)
+
175  , m_width(0)
+
176  , m_height(0)
+
177  {
+
178  }
+
179 
+ +
181  {
+
182  PROPAGATE_ERROR_CONTINUE(shutdown());
+
183  }
+
184 
+
185  /** @name GalleryItem methods */
+
186  /**@{*/
+
187  virtual Type getType() const
+
188  {
+
189  return TYPE_IMAGE;
+
190  }
+
191  virtual bool initialize();
+
192  virtual bool shutdown();
+
193  /**@}*/
+
194 
+
195  size_t getWidth() const
+
196  {
+
197  return m_width;
+
198  }
+
199 
+
200  size_t getHeight() const
+
201  {
+
202  return m_height;
+
203  }
+
204 
+
205  const uint8_t* getData() const
+
206  {
+
207  return m_data.data();
+
208  }
+
209 
+
210 private:
+
211  size_t m_width;
+
212  size_t m_height;
+
213  std::vector<uint8_t> m_data;
+
214 };
+
215 
+ +
217 {
+
218  // already loaded?
+
219  if (!m_data.empty())
+
220  return true;
+
221 
+
222  struct jpeg_decompress_struct info;
+
223  struct jpeg_error_mgr err;
+
224  std::vector<JSAMPLE*> rowPointers;
+
225  JDIMENSION read;
+
226  bool success = false;
+
227 
+
228  // Open file.
+
229  FILE *file = fopen(m_fileName.c_str(), "rb");
+
230  if (!file)
+
231  ORIGINATE_ERROR("Could not open file '%s'.", m_fileName.c_str());
+
232 
+
233  // Prepare for jpeg decompression.
+
234  memset(&info, 0, sizeof(info));
+
235  info.err = jpeg_std_error(&err);
+
236  jpeg_create_decompress(&info);
+
237 #ifdef TEGRA_ACCELERATE
+
238  // Tegra JPEG acceleration seems to be broken, image is all black. We need to disable
+
239  // hardware acceleration.
+
240  jpeg_set_hardware_acceleration_parameters_dec(&info, false, 0, 0, 0, 0, false);
+
241 #endif
+
242  jpeg_stdio_src(&info, file);
+
243  if (jpeg_read_header(&info, TRUE) != JPEG_HEADER_OK)
+
244  ORIGINATE_ERROR_FAIL("Invalid JPEG image file '%s'.", m_fileName.c_str());
+
245  if (jpeg_start_decompress(&info) != TRUE)
+
246  ORIGINATE_ERROR_FAIL("Invalid JPEG image file '%s'.", m_fileName.c_str());
+
247 
+
248  // Determine image format.
+
249  if (info.output_components != 3)
+
250  ORIGINATE_ERROR_FAIL("Only RGB JPEGs supported.");
+
251 
+
252  // Read the image size.
+
253  m_width = info.output_width;
+
254  m_height = info.output_height;
+
255 
+
256  // Resize vector for the output.
+
257  m_data.resize(m_width * m_height * info.output_components);
+
258 
+
259  // Allocate and set row pointers.
+
260  rowPointers.resize(m_height);
+
261  for (size_t row = 0; row < m_height; ++row)
+
262  rowPointers[row] = m_data.data() + row * m_width * info.output_components;
+
263 
+
264  // Read the image data.
+
265  read = 0;
+
266  while (read < m_height)
+
267  read += jpeg_read_scanlines(&info, &rowPointers[read], m_height - read);
+
268 
+
269  success = true;
+
270 
+
271  // Fallthrough
+
272 fail:
+
273  if (jpeg_finish_decompress(&info) != TRUE)
+
274  REPORT_ERROR("jpeg_finish_decompress() failed.");
+
275  jpeg_destroy_decompress(&info);
+
276  if (fclose(file) != 0)
+
277  REPORT_ERROR("fclose() failed.");
+
278 
+
279  return success;
+
280 }
+
281 
+ +
283 {
+
284  m_data.clear();
+
285  m_width = 0;
+
286  m_height = 0;
+
287  return true;
+
288 }
+
289 
+
290 /**
+
291  * A gallery video. Outputs to an EGL stream.
+
292  */
+ +
294 {
+
295 public:
+
296  GalleryItemVideo(const char *fileName, time_t modTime)
+
297  : GalleryItem(fileName, modTime)
+
298  , m_pipeline(NULL)
+
299  , m_eglStream(EGL_NO_STREAM_KHR)
+
300  {
+
301  }
+
302 
+ +
304  {
+
305  PROPAGATE_ERROR_CONTINUE(shutdown());
+
306  }
+
307 
+
308  /** @name GalleryItem methods */
+
309  /**@{*/
+
310  virtual Type getType() const
+
311  {
+
312  return TYPE_VIDEO;
+
313  }
+
314  virtual bool initialize();
+
315  virtual bool shutdown();
+
316  virtual bool startDisplay();
+
317  virtual bool pauseDisplay();
+
318  virtual bool togglePlayBack();
+
319  virtual bool rewind();
+
320  /**@}*/
+
321 
+
322  EGLStreamKHR getEGLStream() const
+
323  {
+
324  return m_eglStream;
+
325  }
+
326 
+
327 private:
+
328  VideoPipeline *m_pipeline; ///! playback pipeline
+
329  EGLStreamKHR m_eglStream;
+
330 };
+
331 
+ +
333 {
+
334  if (m_pipeline)
+
335  return true;
+
336 
+ +
338  if (!m_pipeline)
+
339  ORIGINATE_ERROR("Failed to allocate video pipeline");
+
340 
+
341  PROPAGATE_ERROR(m_pipeline->setupForPlayback(&m_eglStream, m_fileName.c_str()));
+
342  PROPAGATE_ERROR(Composer::getInstance().bindStream(m_eglStream));
+
343 
+
344  // set to pause
+
345  PROPAGATE_ERROR(m_pipeline->pause());
+
346 
+
347  // query size
+
348  float aspectRatio = 1.0f;
+
349  PROPAGATE_ERROR(m_pipeline->getAspectRatio(&aspectRatio));
+
350  PROPAGATE_ERROR(Composer::getInstance().setStreamAspectRatio(m_eglStream, aspectRatio));
+
351 
+
352  return true;
+
353 }
+
354 
+ +
356 {
+
357  if (m_pipeline)
+
358  {
+
359  PROPAGATE_ERROR_CONTINUE(Composer::getInstance().unbindStream(m_eglStream));
+
360  delete m_pipeline;
+
361  m_pipeline = NULL;
+
362  }
+
363  return true;
+
364 }
+
365 
+ +
367 {
+
368  if (!m_pipeline)
+
369  ORIGINATE_ERROR("Not initialized");
+
370 
+
371  // start in paused state
+
372  PROPAGATE_ERROR(m_pipeline->pause());
+
373  return true;
+
374 }
+
375 
+ +
377 {
+
378  if (!m_pipeline)
+
379  ORIGINATE_ERROR("Not initialized");
+
380 
+
381  PROPAGATE_ERROR(m_pipeline->pause());
+
382  return true;
+
383 }
+
384 
+ +
386 {
+
387  if (!m_pipeline)
+
388  ORIGINATE_ERROR("Not initialized");
+
389 
+
390  PROPAGATE_ERROR(m_pipeline->toggle());
+
391  return true;
+
392 }
+
393 
+ +
395 {
+
396  if (!m_pipeline)
+
397  ORIGINATE_ERROR("Not initialized");
+
398 
+
399  PROPAGATE_ERROR(m_pipeline->rewind());
+
400  return true;
+
401 }
+
402 
+
403 /**
+
404  * This class handles creation of a thread scanning for supported images/videos, loading them and
+
405  * writing the content to an EGLStream.
+
406  */
+
407 class GalleryThread : public Thread
+
408 {
+
409 public:
+
410  GalleryThread();
+
411  ~GalleryThread();
+
412 
+
413  bool initialize();
+
414  bool shutdown();
+
415 
+
416  enum Command
+
417  {
+ +
419  COMMAND_SHUTDOWN, //!< shutdown
+
420  COMMAND_NEXT, //!< next item
+
421  COMMAND_PREV, //!< previous item
+
422  COMMAND_START, //!< start replay
+
423  COMMAND_TOGGLE_PLAY_BACK, //!< toggle playback
+
424  COMMAND_REWIND, //!< rewind
+
425  COMMAND_STOP, //!< stop replay
+
426  };
+
427 
+
428  typedef std::list<GalleryItem*> GalleryItemList;
+
429 
+
430  /**
+
431  * Execute a command
+
432  */
+
433  bool execute(Command command);
+
434 
+
435 private:
+
436  ConditionVariable m_cmdCond; //! command condition variable
+
437  Mutex m_cmdMutex; //! command mutex
+
438  std::list<Ordered<Command> > m_cmdList; //! command list, written by parent thread
+
439 
+
440  GLContext m_context;
+
441 
+
442  // resources used to display images
+
443  EGLSurface m_eglOutputSurface;
+
444  EGLStreamHolder m_eglImageOutputStream;
+
445  GLuint m_textureID;
+ +
447  GLuint m_vbo;
+
448 
+ +
450  GalleryItemList::iterator m_curItem;
+
451 
+
452  virtual bool threadInitialize();
+
453  virtual bool threadExecute();
+
454  virtual bool threadShutdown();
+
455 
+
456  bool buildItemList();
+
457 
+
458  bool start();
+
459  bool stop();
+
460 
+
461  bool startDisplay();
+
462  bool pauseDisplay();
+
463  bool togglePlayBack();
+
464  bool rewind();
+
465 
+
466  /**
+
467  * Get the current output stream
+
468  */
+
469  EGLStreamKHR getOutputStream() const
+
470  {
+
471  if (m_curItem != m_itemList.end())
+
472  {
+
473  switch ((*m_curItem)->getType())
+
474  {
+ +
476  // images share one output stream
+
477  return m_eglImageOutputStream.get();
+ +
479  // each video has its own stream
+
480  return static_cast<GalleryItemVideo*>(*m_curItem)->getEGLStream();
+
481  default:
+
482  break;
+
483  }
+
484  }
+
485  return EGL_NO_STREAM_KHR;
+
486  }
+
487 };
+
488 
+ +
490  : m_eglOutputSurface(EGL_NO_SURFACE)
+
491  , m_textureID(0)
+
492  , m_copyProgram(0)
+
493  , m_vbo(0)
+
494  , m_curItem(m_itemList.end())
+
495 {
+
496 }
+
497 
+ +
499 {
+
500  shutdown();
+
501 }
+
502 
+ +
504 {
+
505  PROPAGATE_ERROR(m_cmdMutex.initialize());
+
506  PROPAGATE_ERROR(m_cmdCond.initialize());
+
507 
+
508  PROPAGATE_ERROR(Thread::initialize());
+
509  return true;
+
510 }
+
511 
+ +
513 {
+
514  PROPAGATE_ERROR_CONTINUE(Thread::shutdown());
+
515  PROPAGATE_ERROR_CONTINUE(m_cmdMutex.shutdown());
+
516  PROPAGATE_ERROR_CONTINUE(m_cmdCond.shutdown());
+
517  return true;
+
518 }
+
519 
+ +
521 {
+
522  // this function is *not* to be executed in the thread itself but in the parent thread
+ +
524  PROPAGATE_ERROR(sm.expectLocked());
+
525 
+
526  m_cmdList.push_back(command);
+
527 
+
528  PROPAGATE_ERROR(m_cmdCond.signal());
+
529 
+
530  return true;
+
531 }
+
532 
+
533 /**
+
534  * Builds a list of gallery items by scanning the output path for image and video files. The
+
535  * list is sorted with the newest files first.
+
536  */
+ +
538 {
+
539  bool success = true;
+
540  struct extTypePair
+
541  {
+
542  const char *ext;
+
543  GalleryItem::Type type;
+
544  };
+
545  const extTypePair extensions[] =
+
546  {
+
547  { "jpg",
+ + + + + + + + + +
557  };
+
558 
+
559  // open output directory
+
560  const std::string path(Dispatcher::getInstance().m_outputPath.get());
+
561  DIR *directory = opendir(path.c_str());
+
562  if (directory != NULL)
+
563  {
+
564  // scan all files
+
565  struct dirent *entry;
+
566  while ((entry = readdir(directory)))
+
567  {
+
568  // we are looking for files only
+
569  if (entry->d_type != DT_REG)
+
570  continue;
+
571 
+
572  // check for supported extensions
+ +
574  const size_t fileNameLen = strlen(entry->d_name);
+
575  for (size_t index = 0; index < sizeof(extensions) / sizeof(extensions[0]); ++index)
+
576  {
+
577  const extTypePair *ext = &extensions[index];
+
578 
+
579  // filename should be longer than '.ext', ext has no '.' therefore +1
+
580  const size_t extLen = strlen(ext->ext);
+
581  if (fileNameLen >= extLen + 1)
+
582  {
+
583  if ((entry->d_name[fileNameLen - extLen - 1] == '.') &&
+
584  (strcasecmp(&entry->d_name[fileNameLen - extLen], ext->ext) == 0))
+
585  {
+
586  type = ext->type;
+
587  break;
+
588  }
+
589  }
+
590  }
+
591  if (type == GalleryItem::TYPE_INVALID)
+
592  continue;
+
593 
+
594  std::string fullName;
+
595 
+
596  fullName = path;
+
597  fullName += "/";
+
598  fullName += entry->d_name;
+
599 
+
600  // get status on the file
+
601  struct stat fileStat;
+
602  if (stat(fullName.c_str(), &fileStat) != 0)
+
603  ORIGINATE_ERROR_FAIL("Failed to query file status on '%s'", fullName.c_str());
+
604 
+
605  UniquePointer<GalleryItem> item;
+
606  if (type == GalleryItem::TYPE_VIDEO)
+
607  {
+
608  item.reset(new GalleryItemVideo(fullName.c_str(), fileStat.st_mtime));
+
609  }
+
610  else
+
611  {
+
612  assert(type == GalleryItem::TYPE_IMAGE);
+
613  item.reset(new GalleryItemImage(fullName.c_str(), fileStat.st_mtime));
+
614  }
+
615  if (!item)
+
616  ORIGINATE_ERROR("Failed to create gallery item");
+
617  m_itemList.push_back(item.release());
+
618  }
+
619  }
+
620 
+
621  m_itemList.sort(galleryItemCompare);
+
622 
+
623  goto pass;
+
624 
+
625 fail:
+
626  success = false;
+
627 
+
628 pass:
+
629  if (directory != NULL)
+
630  closedir(directory);
+
631 
+
632  return success;
+
633 }
+
634 
+ +
636 {
+
637  Composer &composer = Composer::getInstance();
+
638  //! @todo Using 1920x1080 for now. Should use the image size, but this would require creating
+
639  // one stream and one surface for each image because surfaces can't be resized
+
640  const uint32_t streamWidth = 1920;
+
641  const uint32_t streamHeight = 1080;
+
642 
+
643  // create the EGL output stream
+
644  PROPAGATE_ERROR(m_eglImageOutputStream.create(composer.getEGLDisplay()));
+
645  CHECK_STREAM_STATE(m_eglImageOutputStream, CREATED);
+
646 
+
647  // bind the output stream to the composer
+
648  PROPAGATE_ERROR(composer.bindStream(m_eglImageOutputStream.get()));
+
649  PROPAGATE_ERROR(composer.setStreamAspectRatio(m_eglImageOutputStream.get(),
+
650  (float)streamWidth / (float)streamHeight));
+
651  CHECK_STREAM_STATE(m_eglImageOutputStream, CONNECTING);
+
652 
+
653  // create a EGL context and make it current to the output surface
+
654  PROPAGATE_ERROR(m_context.initialize(composer.getEGLDisplay()));
+
655 
+
656  // create the EGL output surface and connect the EGL output stream to it
+
657  PROPAGATE_ERROR(m_context.createEGLStreamProducerSurface(&m_eglOutputSurface,
+
658  m_eglImageOutputStream.get(), streamWidth, streamHeight));
+
659  CHECK_STREAM_STATE(m_eglImageOutputStream, EMPTY);
+
660 
+
661  PROPAGATE_ERROR(m_context.makeCurrent(m_eglOutputSurface));
+
662 
+
663  // create a texture used for images
+
664  glGenTextures(1, &m_textureID);
+
665  if (m_textureID == 0)
+
666  ORIGINATE_ERROR("Failed to create GL texture");
+
667 
+
668  // Create the shader programs
+
669  static const char vtxSrc[] =
+
670  "#version 300 es\n"
+
671  "#extension GL_ARB_explicit_uniform_location : require\n"
+
672  "in layout(location = 0) vec2 vertex;\n"
+
673  "out vec2 vTexCoord;\n"
+
674  "layout(location = 0) uniform vec2 offset;\n"
+
675  "layout(location = 1) uniform vec2 scale;\n"
+
676  "void main() {\n"
+
677  " gl_Position = vec4((offset + vertex * scale) * 2.0 - 1.0, 0.0, 1.0);\n"
+
678  " vTexCoord = vec2(vertex.x, vertex.y);\n"
+
679  "}\n";
+
680 
+
681  static const char copyFrgSrc[] =
+
682  "#version 300 es\n"
+
683  "precision highp float;\n"
+
684  "uniform sampler2D texSampler;\n"
+
685  "in vec2 vTexCoord;\n"
+
686  "out vec4 fragColor;\n"
+
687  "void main() {\n"
+
688  " fragColor = texture(texSampler, vTexCoord);\n"
+
689  "}\n";
+
690  PROPAGATE_ERROR(m_context.createProgram(vtxSrc, copyFrgSrc, &m_copyProgram));
+
691 
+
692  // Setup vertex state.
+
693  static const GLfloat vertices[] =
+
694  {
+
695  0.0f, 0.0f,
+
696  0.0f, 1.0f,
+
697  1.0f, 0.0f,
+
698  1.0f, 1.0f,
+
699  };
+
700  glGenBuffers(1, &m_vbo);
+
701  glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
+
702  glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
+
703  glBindBuffer(GL_ARRAY_BUFFER, 0);
+
704  glEnableVertexAttribArray(0);
+
705 
+
706  return true;
+
707 }
+
708 
+
709 /**
+
710  * Start. Build the item list.
+
711  */
+ +
713 {
+
714  if (!m_itemList.empty())
+
715  ORIGINATE_ERROR("Item list should be empty");
+
716 
+
717  // build a list of all items
+
718  PROPAGATE_ERROR(buildItemList());
+
719  if (m_itemList.empty())
+
720  m_curItem = m_itemList.end();
+
721  else
+
722  m_curItem = m_itemList.begin();
+
723 
+
724  return true;
+
725 }
+
726 
+
727 /**
+
728  * Stop. Pause display and free the item list.
+
729  */
+ +
731 {
+
732  PROPAGATE_ERROR(pauseDisplay());
+
733 
+
734  for (GalleryItemList::iterator it = m_itemList.begin(); it != m_itemList.end(); ++it)
+
735  delete (*it);
+
736  m_itemList.clear();
+
737  m_curItem = m_itemList.end();
+
738 
+
739  return true;
+
740 }
+
741 
+ +
743 {
+
744  if (m_curItem == m_itemList.end())
+
745  return true;
+
746 
+
747  std::ostringstream message;
+
748 
+
749  message << "Displaying '" << (*m_curItem)->getFileName() << "'" << std::endl;
+
750  Dispatcher::getInstance().message(message.str().c_str());
+
751 
+
752  PROPAGATE_ERROR((*m_curItem)->initialize());
+
753 
+
754  switch ((*m_curItem)->getType())
+
755  {
+ +
757  {
+
758  GalleryItemImage *image = static_cast<GalleryItemImage*>(*m_curItem);
+
759 
+
760  // draw it to the surface
+
761  glClear(GL_COLOR_BUFFER_BIT);
+
762 
+
763  glBindTexture(GL_TEXTURE_2D, m_textureID);
+
764  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+
765  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
766  // load the item into the texture
+
767  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->getWidth(), image->getHeight(), 0,
+
768  GL_RGB, GL_UNSIGNED_BYTE, reinterpret_cast<const void*>(image->getData()));
+
769 
+
770  // copy from the input to the output
+
771  glUseProgram(m_copyProgram);
+
772  glUniform2f(0, 0.0f, 0.0f); // offset
+
773  glUniform2f(1, 1.0f, 1.0f); // scale
+
774  glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
+
775  glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
+
776  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+
777 
+
778  // the swap will put the image into the output EGL stream
+
779  PROPAGATE_ERROR(m_context.swapBuffers(m_eglOutputSurface));
+
780  }
+
781  break;
+ +
783  PROPAGATE_ERROR(static_cast<GalleryItemVideo*>(*m_curItem)->startDisplay());
+
784  break;
+
785  default:
+
786  ORIGINATE_ERROR("Unhandled gallery item type");
+
787  }
+
788 
+
789  PROPAGATE_ERROR(Composer::getInstance().setStreamActive(getOutputStream(), true));
+
790 
+
791  return true;
+
792 }
+
793 
+ +
795 {
+
796  if (m_curItem == m_itemList.end())
+
797  return true;
+
798 
+
799  PROPAGATE_ERROR(Composer::getInstance().setStreamActive(getOutputStream(), false));
+
800  PROPAGATE_ERROR((*m_curItem)->pauseDisplay());
+
801 
+
802  return true;
+
803 }
+
804 
+ +
806 {
+
807  if (m_curItem == m_itemList.end())
+
808  return true;
+
809 
+
810  PROPAGATE_ERROR((*m_curItem)->togglePlayBack());
+
811 
+
812  return true;
+
813 }
+
814 
+ +
816 {
+
817  if (m_curItem == m_itemList.end())
+
818  return true;
+
819 
+
820  PROPAGATE_ERROR((*m_curItem)->rewind());
+
821 
+
822  return true;
+
823 }
+
824 
+ +
826 {
+
827  Command cmd = COMMAND_NONE;
+
828 
+
829  {
+ +
831  PROPAGATE_ERROR(sm.expectLocked());
+
832 
+
833  // if the list is empty wait for new commands
+
834  if (m_cmdList.empty())
+
835  PROPAGATE_ERROR(m_cmdCond.wait(m_cmdMutex));
+
836 
+
837  // get the command from the list
+
838  cmd = m_cmdList.front();
+
839  m_cmdList.pop_front();
+
840  }
+
841 
+
842  switch(cmd)
+
843  {
+
844  case COMMAND_NONE:
+
845  break;
+
846  case COMMAND_SHUTDOWN:
+
847  PROPAGATE_ERROR(requestShutdown());
+
848  break;
+
849  case COMMAND_START:
+
850  PROPAGATE_ERROR(start());
+
851  PROPAGATE_ERROR(startDisplay());
+
852  break;
+ +
854  PROPAGATE_ERROR(togglePlayBack());
+
855  break;
+
856  case COMMAND_REWIND:
+
857  PROPAGATE_ERROR(rewind());
+
858  break;
+
859  case COMMAND_STOP:
+
860  PROPAGATE_ERROR(stop());
+
861  break;
+
862  case COMMAND_PREV:
+
863  if ((m_curItem != m_itemList.end()) && (m_curItem != m_itemList.begin()))
+
864  {
+
865  PROPAGATE_ERROR(pauseDisplay());
+
866  --m_curItem;
+
867  PROPAGATE_ERROR(startDisplay());
+
868  }
+
869  break;
+
870  case COMMAND_NEXT:
+
871  if ((m_curItem != m_itemList.end()) && (&(*m_curItem) != &m_itemList.back()))
+
872  {
+
873  PROPAGATE_ERROR(pauseDisplay());
+
874  ++m_curItem;
+
875  PROPAGATE_ERROR(startDisplay());
+
876  }
+
877  break;
+
878  default:
+
879  ORIGINATE_ERROR("Invalid command %d", cmd);
+
880  }
+
881 
+
882  return true;
+
883 }
+
884 
+ +
886 {
+
887  Composer &composer = Composer::getInstance();
+
888 
+
889  PROPAGATE_ERROR_CONTINUE(stop());
+
890 
+
891  if (m_eglOutputSurface != EGL_NO_SURFACE)
+
892  {
+
893  eglDestroySurface(composer.getEGLDisplay(), m_eglOutputSurface);
+
894  m_eglOutputSurface = EGL_NO_SURFACE;
+
895  }
+
896 
+
897  // unbind the EGL output stream from the composer
+
898  PROPAGATE_ERROR_CONTINUE(composer.unbindStream(m_eglImageOutputStream.get()));
+
899  CHECK_STREAM_STATE(m_eglImageOutputStream, DISCONNECTED);
+
900  // and destroy the EGL output stream
+
901  PROPAGATE_ERROR_CONTINUE(m_eglImageOutputStream.destroy());
+
902 
+
903  // free GL resources
+
904  glDeleteTextures(1, &m_textureID);
+
905  m_textureID = 0;
+
906  glDeleteProgram(m_copyProgram);
+
907  m_copyProgram = 0;
+
908  glDeleteBuffers(1, &m_vbo);
+
909  m_vbo = 0;
+
910 
+
911  PROPAGATE_ERROR_CONTINUE(m_context.cleanup());
+
912 
+
913  return true;
+
914 }
+
915 
+ +
917  : m_initialized(false)
+
918  , m_running(false)
+
919  , m_thread(NULL)
+
920 {
+
921 }
+
922 
+ +
924 {
+
925  shutdown();
+
926 }
+
927 
+ +
929 {
+
930  if (m_initialized)
+
931  return true;
+
932 
+
933  m_initialized = true;
+
934 
+
935  return true;
+
936 }
+
937 
+ +
939 {
+
940  if (!m_initialized)
+
941  return true;
+
942 
+
943  // stop the module
+
944  PROPAGATE_ERROR_CONTINUE(stop());
+
945 
+
946  m_initialized = false;
+
947 
+
948  return true;
+
949 }
+
950 
+ +
952 {
+
953  if (!m_initialized)
+
954  ORIGINATE_ERROR("Not initialized");
+
955  if (m_running)
+
956  return true;
+
957 
+
958  // create the gallery thread, it will load and display the items
+
959  UniquePointer<GalleryThread> galleryThread(new GalleryThread());
+
960  if (!galleryThread)
+
961  ORIGINATE_ERROR("Out of memory");
+
962 
+
963  PROPAGATE_ERROR(galleryThread->initialize());
+
964  m_thread = galleryThread.release();
+
965 
+
966  PROPAGATE_ERROR(m_thread->waitRunning());
+
967 
+
968  PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_START));
+
969 
+
970  m_running = true;
+
971 
+
972  return true;
+
973 }
+
974 
+ +
976 {
+
977  if (!m_initialized)
+
978  ORIGINATE_ERROR("Not initialized");
+
979  if (!m_running)
+
980  return true;
+
981 
+
982  PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_STOP));
+
983 
+
984  // send the shutdown command
+ +
986  // destroy the thread
+
987  PROPAGATE_ERROR(m_thread->shutdown());
+
988 
+
989  delete m_thread;
+
990  m_thread = NULL;
+
991 
+
992  m_running = false;
+
993 
+
994  return true;
+
995 }
+
996 
+ +
998 {
+
999  if (!m_running)
+
1000  ORIGINATE_ERROR("Not running");
+
1001 
+ +
1003  return true;
+
1004 }
+
1005 
+ +
1007 {
+
1008  if (!m_running)
+
1009  ORIGINATE_ERROR("Not running");
+
1010 
+
1011  PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_REWIND));
+
1012  return true;
+
1013 }
+
1014 
+ +
1016 {
+
1017  if (!m_running)
+
1018  ORIGINATE_ERROR("Not running");
+
1019 
+
1020  PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_PREV));
+
1021  return true;
+
1022 }
+
1023 
+ +
1025 {
+
1026  if (!m_running)
+
1027  ORIGINATE_ERROR("Not running");
+
1028 
+
1029  PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_NEXT));
+
1030  return true;
+
1031 }
+
1032 
+
1033 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8h.html new file mode 100644 index 0000000..04486f7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: modules/tasks/Gallery.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Gallery.h File Reference
+
+
+
#include "ITask.h"
+#include "Util.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::TaskGallery
 This task implements a gallery to review images and videos. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8h_source.html new file mode 100644 index 0000000..f1442f5 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Gallery_8h_source.html @@ -0,0 +1,186 @@ + + + + + +Argus Camera Sample: modules/tasks/Gallery.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Gallery.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef CAMERA_MODULES_GALLERY_H
+
30 #define CAMERA_MODULES_GALLERY_H
+
31 
+
32 #include "ITask.h"
+
33 #include "Util.h"
+
34 
+
35 namespace ArgusSamples
+
36 {
+
37 
+
38 class GalleryThread;
+
39 
+
40 /**
+
41  * This task implements a gallery to review images and videos
+
42  */
+
43 class TaskGallery : public ITask
+
44 {
+
45 public:
+
46  TaskGallery();
+
47  virtual ~TaskGallery();
+
48 
+
49  /** @name ITask methods */
+
50  /**@{*/
+
51  virtual bool initialize();
+
52  virtual bool shutdown();
+
53 
+
54  virtual bool start();
+
55  virtual bool stop();
+
56  /**@}*/
+
57 
+
58  /**
+
59  * Toggle playback
+
60  */
+
61  bool togglePlayBack();
+
62 
+
63  /**
+
64  * Rewind
+
65  */
+
66  bool rewind();
+
67 
+
68  /**
+
69  * Display next item.
+
70  */
+
71  bool prevItem();
+
72 
+
73  /**
+
74  * Display previous item.
+
75  */
+
76  bool nextItem();
+
77 
+
78 private:
+
79  bool m_initialized; ///< set if initialized
+
80  bool m_running; ///< set if running
+
81  GalleryThread *m_thread; ///< gallery thread
+
82 };
+
83 
+
84 }; // namespace ArgusSamples
+
85 
+
86 #endif // CAMERA_MODULES_GALLERY_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/IAppModule_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/IAppModule_8h.html new file mode 100644 index 0000000..10f933e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/IAppModule_8h.html @@ -0,0 +1,116 @@ + + + + + +Argus Camera Sample: ui/common/IAppModule.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
IAppModule.h File Reference
+
+
+
#include "Window.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::IAppModule
 A application module exposes command line options, GUI elements and executes tasks. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/IAppModule_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/IAppModule_8h_source.html new file mode 100644 index 0000000..d54da10 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/IAppModule_8h_source.html @@ -0,0 +1,178 @@ + + + + + +Argus Camera Sample: ui/common/IAppModule.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
IAppModule.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_H
+
30 #define ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_H
+
31 
+
32 #include "Window.h"
+
33 
+
34 namespace ArgusSamples
+
35 {
+
36 
+
37 class Options;
+
38 
+
39 /**
+
40  * A application module exposes command line options, GUI elements and executes tasks.
+
41  */
+ +
43 {
+
44 public:
+
45  IAppModule() { }
+
46  virtual ~IAppModule() { };
+
47 
+
48  /**
+
49  * Initialize
+
50  *
+
51  * @param [in] options each app module can add options
+
52  */
+
53  virtual bool initialize(Options &options) = 0;
+
54 
+
55  /**
+
56  * Shut down
+
57  */
+
58  virtual bool shutdown() = 0;
+
59 
+
60  /**
+
61  * Start the module
+
62  *
+
63  * @param [in] iGuiMenuBar optional, the module can add menu items to this menu bar
+
64  * @param [in] iGuiContainerConfig optional, the module can add configuration options to this
+
65  * container
+
66  */
+
67  virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL,
+
68  Window::IGuiContainer *iGuiContainerConfig = NULL) = 0;
+
69 
+
70  /**
+
71  * Stop the module
+
72  */
+
73  virtual bool stop() = 0;
+
74 };
+
75 
+
76 }; // namespace ArgusSamples
+
77 
+
78 #endif // ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ITask_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ITask_8h.html new file mode 100644 index 0000000..1af8f1d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ITask_8h.html @@ -0,0 +1,115 @@ + + + + + +Argus Camera Sample: modules/ITask.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ITask.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::ITask
 Base class for tasks. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ITask_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ITask_8h_source.html new file mode 100644 index 0000000..6942d2f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ITask_8h_source.html @@ -0,0 +1,167 @@ + + + + + +Argus Camera Sample: modules/ITask.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ITask.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef ITASK_H
+
30 #define ITASK_H
+
31 
+
32 namespace ArgusSamples
+
33 {
+
34 
+
35 /**
+
36  * Base class for tasks.
+
37  * Tasks provide functionality like capturing of still images or video recording.
+
38  *
+
39  */
+
40 class ITask
+
41 {
+
42 public:
+
43  ITask() { };
+
44  virtual ~ITask() { };
+
45 
+
46  /**
+
47  * Initialize
+
48  */
+
49  virtual bool initialize() = 0;
+
50  /**
+
51  * Shutdown
+
52  */
+
53  virtual bool shutdown() = 0;
+
54 
+
55  /**
+
56  * Start
+
57  */
+
58  virtual bool start() = 0;
+
59  /**
+
60  * Stop
+
61  */
+
62  virtual bool stop() = 0;
+
63 };
+
64 
+
65 }; // namespace ArgusSamples
+
66 
+
67 #endif // ITASK_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Main_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Main_8cpp.html new file mode 100644 index 0000000..4e1674d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Main_8cpp.html @@ -0,0 +1,181 @@ + + + + + +Argus Camera Sample: ui/camera/Main.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Main.cpp File Reference
+
+
+
#include <stdlib.h>
+#include <list>
+#include "Error.h"
+#include "UniquePointer.h"
+#include "Window.h"
+#include "Value.h"
+#include "Validator.h"
+#include "IObserver.h"
+#include "App.h"
+#include "AppModuleCapture.h"
+#include "AppModuleVideo.h"
+#include "AppModuleMultiExposure.h"
+#include "AppModuleMultiSession.h"
+#include "AppModuleGallery.h"
+#include "AppModuleGeneric.h"
+#include "cameraBuilder.h"
+
+

Go to the source code of this file.

+ + + +

+Classes

class  ArgusSamples::CameraApp
+ + +

+Namespaces

namespace  ArgusSamples
+ + + +

+Enumerations

enum  ArgusSamples::Modules {
+  ArgusSamples::MODULE_CAPTURE, +ArgusSamples::MODULE_VIDEO, +ArgusSamples::MODULE_MULTI_EXPOSURE, +ArgusSamples::MODULE_MULTI_SESSION, +
+  ArgusSamples::MODULE_FIRST = MODULE_CAPTURE, +ArgusSamples::MODULE_LAST = MODULE_MULTI_SESSION, +ArgusSamples::MODULE_COUNT, +ArgusSamples::MODULE_INVALID = -1 +
+ }
 Supported modules. More...
+ + +

+Functions

int main (int argc, char **argv)
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char ** argv 
)
+
+ +

Definition at line 351 of file Main.cpp.

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Main_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Main_8cpp_source.html new file mode 100644 index 0000000..f1eeb02 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Main_8cpp_source.html @@ -0,0 +1,461 @@ + + + + + +Argus Camera Sample: ui/camera/Main.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Main.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 // For Bug 200239385 and Bug 200243017
+
30 // There are asserts while operating the gallery.
+
31 // With the following #define commented out, access to the gallery is disabled until it can be fixed
+
32 //#define GALLERY_SUPPORTED
+
33 
+
34 #include <stdlib.h>
+
35 
+
36 #include <list>
+
37 
+
38 #include "Error.h"
+
39 #include "UniquePointer.h"
+
40 #include "Window.h"
+
41 #include "Value.h"
+
42 #include "Validator.h"
+
43 #include "IObserver.h"
+
44 
+
45 #include "App.h"
+
46 #include "AppModuleCapture.h"
+
47 #include "AppModuleVideo.h"
+
48 #include "AppModuleMultiExposure.h"
+
49 #include "AppModuleMultiSession.h"
+
50 #include "AppModuleGallery.h"
+
51 #include "AppModuleGeneric.h"
+
52 
+
53 namespace ArgusSamples
+
54 {
+
55 
+
56 #if (WINDOW_GUI_SUPPORT == WINDOW_GUI_GTK)
+
57 /**
+
58  * GTK UI builder string
+
59  */
+
60 static const char builderString[] =
+
61 {
+
62 #include "cameraBuilder.h"
+
63  , 0x00
+
64 };
+
65 #endif // (WINDOW_GUI_SUPPORT == WINDOW_GUI_GTK)
+
66 
+
67 /**
+
68  * Supported modules
+
69  */
+
70 enum Modules
+
71 {
+ + + + +
76 #ifdef GALLERY_SUPPORTED
+
77  MODULE_GALLERY,
+
78 #endif
+ +
80 #ifdef GALLERY_SUPPORTED
+
81  MODULE_LAST = MODULE_GALLERY,
+
82 #else
+
83  MODULE_LAST = MODULE_MULTI_SESSION,
+
84 #endif
+ + +
87 };
+
88 
+
89 // valid module values
+
90 static const ValidatorEnum<Modules>::ValueStringPair s_modules[] =
+
91 {
+
92  { MODULE_CAPTURE, "Capture" },
+
93  { MODULE_VIDEO, "Video" },
+
94  { MODULE_MULTI_EXPOSURE, "Multi Exposure" },
+
95 #ifdef GALLERY_SUPPORTED
+
96  { MODULE_MULTI_SESSION, "Multi Session" },
+
97  { MODULE_GALLERY, "Gallery" }
+
98 #else
+
99  { MODULE_MULTI_SESSION, "Multi Session" }
+
100 #endif
+
101 };
+
102 
+
103 class CameraApp : public App, public IObserver
+
104 {
+
105 public:
+
106  explicit CameraApp(const char *appName);
+
107  ~CameraApp();
+
108 
+
109  /** @name App methods */
+
110  /**@{*/
+
111  virtual bool initialize();
+
112  virtual bool shutdown();
+
113  virtual bool start();
+
114  /**@}*/
+
115 
+
116 private:
+
117  /**
+
118  * Hide default constructor
+
119  */
+
120  CameraApp();
+
121 
+
122  /** @name IKeyObserver methods */
+
123  /**@{*/
+
124  virtual bool onKey(const Key &key);
+
125  /**@}*/
+
126 
+
127  bool onModuleChanged(const Observed &source);
+
128 
+ +
130 
+
131  Value<Modules> m_module; ///< active module
+
132  Modules m_prevModule; ///< previously active module
+
133 
+
134  Modules m_activeModuleBeforeGallery; ///< active module when switching to gallery
+
135 
+
136  std::vector<IAppModule*> m_modules; ///< all modules
+
137 
+
138  Window::IGuiMenuBar *m_iGuiMenuBar; ///< menu bar
+
139  Window::IGuiContainer *m_iGuiContainerConfig; ///< container for config GUI elements
+
140 };
+
141 
+
142 CameraApp::CameraApp(const char *appName)
+
143  : App(appName)
+
144  , m_module(new ValidatorEnum<Modules>(
+
145  s_modules, sizeof(s_modules) / sizeof(s_modules[0])),
+
146  MODULE_FIRST)
+
147  , m_prevModule(MODULE_INVALID)
+
148  , m_activeModuleBeforeGallery(MODULE_INVALID)
+
149  , m_iGuiMenuBar(NULL)
+
150  , m_iGuiContainerConfig(NULL)
+
151 {
+
152 }
+
153 
+ +
155 {
+
156  shutdown();
+
157 }
+
158 
+ +
160 {
+
161  PROPAGATE_ERROR(App::initialize());
+
162 
+
163  const char *description =
+
164  "Press 'm' to toggle between modules (still capture, video recording, multi exposure, \n"
+
165  "multi session).\n"
+
166 #ifdef GALLERY_SUPPORTED
+
167  "Press 'g' to switch to gallery and back. Use left and right arrow keys to move to next\n"
+
168  "and previous image or video.\n"
+
169 #endif
+
170  "Press 'space' to execute the module action (capture an image, start and stop recording,\n"
+
171  "start and stop video playback.\n";
+
172  PROPAGATE_ERROR(m_options.addDescription(description));
+
173 
+
174  PROPAGATE_ERROR(m_options.addOption(
+
175  createValueOption("module", 0, "MODULE", "switch to module MODULE.", m_module)));
+
176 
+
177 #if (WINDOW_GUI_SUPPORT == WINDOW_GUI_GTK)
+
178  Window::IGuiBuilder *builder = NULL;
+
179  PROPAGATE_ERROR(Window::IGuiBuilder::create(builderString, &builder));
+
180 
+
181  UniquePointer<Window::IGuiBuilder> createdBuilder(builder);
+
182  UniquePointer<Window::IGuiElement> createdWindow(createdBuilder->createElement("window"));
+
183  UniquePointer<Window::IGuiElement> createdView(createdBuilder->createElement("view"));
+
184 
+
185  m_iGuiMenuBar =
+
186  static_cast<Window::IGuiMenuBar*>(createdBuilder->createElement("menuBar"));
+ +
188  static_cast<Window::IGuiContainer*>(createdBuilder->createElement("config"));
+
189 
+
190  // set the window GUI
+
191  PROPAGATE_ERROR(Window::getInstance().setWindowGui(createdBuilder.get(), createdWindow.get(),
+
192  createdView.get()));
+
193 
+
194  createdView.release();
+
195  createdWindow.release();
+
196  createdBuilder.release();
+
197 #endif // (WINDOW_GUI_SUPPORT == WINDOW_GUI_GTK)
+
198 
+
199  m_modules.resize(MODULE_COUNT);
+
200 
+
201  // create modules
+
202  UniquePointer<IAppModule> module;
+
203  module.reset(new AppModuleCapture);
+
204  if (!module)
+
205  ORIGINATE_ERROR("Out of memory");
+
206  m_modules[MODULE_CAPTURE] = module.release();
+
207 
+
208  module.reset(new AppModuleVideo);
+
209  if (!module)
+
210  ORIGINATE_ERROR("Out of memory");
+
211  m_modules[MODULE_VIDEO] = module.release();
+
212 
+
213  module.reset(new AppModuleMultiExposure);
+
214  if (!module)
+
215  ORIGINATE_ERROR("Out of memory");
+
216  m_modules[MODULE_MULTI_EXPOSURE] = module.release();
+
217 
+
218  module.reset(new AppModuleMultiSession);
+
219  if (!module)
+
220  ORIGINATE_ERROR("Out of memory");
+
221  m_modules[MODULE_MULTI_SESSION] = module.release();
+
222 
+
223 #ifdef GALLERY_SUPPORTED
+
224  module.reset(new AppModuleGallery);
+
225  if (!module)
+
226  ORIGINATE_ERROR("Out of memory");
+
227  m_modules[MODULE_GALLERY] = module.release();
+
228 #endif
+
229 
+
230  // initialize generic module, this has options common to all modules
+
231  PROPAGATE_ERROR(m_moduleGeneric.initialize(m_options));
+
232 
+
233  // initializes modules
+
234  for (std::vector<IAppModule*>::iterator it = m_modules.begin(); it != m_modules.end(); ++it)
+
235  PROPAGATE_ERROR((*it)->initialize(m_options));
+
236 
+
237  return true;
+
238 }
+
239 
+ +
241 {
+
242  // shutdown the modules
+
243  for (std::vector<IAppModule*>::iterator it = m_modules.begin(); it != m_modules.end(); ++it)
+
244  {
+
245  PROPAGATE_ERROR((*it)->shutdown());
+
246  delete *it;
+
247  }
+
248  m_modules.clear();
+
249 
+
250  PROPAGATE_ERROR(m_moduleGeneric.shutdown());
+
251 
+
252  delete m_iGuiContainerConfig;
+
253  m_iGuiContainerConfig = NULL;
+
254 
+
255  delete m_iGuiMenuBar;
+
256  m_iGuiMenuBar = NULL;
+
257 
+
258  PROPAGATE_ERROR(App::shutdown());
+
259 
+
260  return true;
+
261 }
+
262 
+ +
264 {
+ +
266  {
+
267  // add GUI elements
+
268  UniquePointer<Window::IGuiElement> element;
+
269 
+
270  assert(sizeof(Modules) == sizeof(Window::IGuiElement::ValueTypeEnum));
+
271  PROPAGATE_ERROR(Window::IGuiElement::createValue(
+
272  reinterpret_cast<Value<Window::IGuiElement::ValueTypeEnum>*>(&m_module), &element));
+
273  PROPAGATE_ERROR(m_iGuiContainerConfig->add(element.get()));
+
274  element.release();
+
275  }
+
276 
+
277  // Start the generic module, it's always active
+ +
279 
+
280  // register an observer, this will stop/start modules if m_module changes
+
281  PROPAGATE_ERROR(m_module.registerObserver(this,
+
282  static_cast<IObserver::CallbackFunction>(&CameraApp::onModuleChanged)));
+
283 
+
284  return true;
+
285 }
+
286 
+
287 bool CameraApp::onKey(const Key &key)
+
288 {
+
289  if (key == Key("m"))
+
290  {
+
291  // switch to next module
+
292  Modules curModule = m_module.get();
+
293 
+
294 #ifdef GALLERY_SUPPORTED
+
295  // switch to next module but skip gallery
+
296  do
+
297  {
+
298 #endif
+
299  if (curModule == MODULE_LAST)
+
300  curModule = MODULE_FIRST;
+
301  else
+
302  curModule = static_cast<Modules>(curModule + 1);
+
303 #ifdef GALLERY_SUPPORTED
+
304  }
+
305  while (curModule == MODULE_GALLERY);
+
306 #endif
+
307 
+
308  m_module.set(curModule);
+
309  }
+
310 #ifdef GALLERY_SUPPORTED
+
311  else if (key == Key("g"))
+
312  {
+
313  // switch to gallery on/off
+
314  Modules curModule = m_module.get();
+
315 
+
316  if (curModule == MODULE_GALLERY)
+
317  {
+
318  curModule = m_activeModuleBeforeGallery;
+
319  }
+
320  else
+
321  {
+
322  m_activeModuleBeforeGallery = curModule;
+
323  curModule = MODULE_GALLERY;
+
324  }
+
325 
+
326  m_module.set(curModule);
+
327  }
+
328 #endif
+
329  // call parent
+
330  PROPAGATE_ERROR(App::onKey(key));
+
331 
+
332  return true;
+
333 }
+
334 
+
335 bool CameraApp::onModuleChanged(const Observed &source)
+
336 {
+
337  assert(static_cast<const Value<Modules>&>(source).get() == m_module);
+
338 
+ +
340  PROPAGATE_ERROR(m_modules[m_prevModule]->stop());
+
341 
+
342  m_prevModule = m_module.get();
+
343 
+
344  PROPAGATE_ERROR(m_modules[m_module.get()]->start(m_iGuiMenuBar, m_iGuiContainerConfig));
+
345 
+
346  return true;
+
347 }
+
348 
+
349 }; // namespace ArgusSamples
+
350 
+
351 int main(int argc, char **argv)
+
352 {
+
353  printf("Executing Argus Sample Application (%s)\n", basename(argv[0]));
+
354 
+
355  ArgusSamples::CameraApp cameraApp(basename(argv[0]));
+
356 
+
357  if (!cameraApp.run(argc, argv))
+
358  return EXIT_FAILURE;
+
359 
+
360  return EXIT_SUCCESS;
+
361 }
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8cpp.html new file mode 100644 index 0000000..8ca9658 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8cpp.html @@ -0,0 +1,115 @@ + + + + + +Argus Camera Sample: modules/tasks/MultiExposure.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
MultiExposure.cpp File Reference
+
+
+
#include <sstream>
+#include "MultiExposure.h"
+#include "Composer.h"
+#include "Dispatcher.h"
+#include "Error.h"
+#include "UniquePointer.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8cpp_source.html new file mode 100644 index 0000000..9326a3b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8cpp_source.html @@ -0,0 +1,483 @@ + + + + + +Argus Camera Sample: modules/tasks/MultiExposure.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
MultiExposure.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include <sstream>
+
30 
+
31 #include "MultiExposure.h"
+
32 #include "Composer.h"
+
33 #include "Dispatcher.h"
+
34 #include "Error.h"
+
35 #include "UniquePointer.h"
+
36 
+
37 namespace ArgusSamples
+
38 {
+
39 
+ +
41  : m_exposureStepsRange(3)
+
42  , m_exposureSteps(new ValidatorRange<uint32_t>(&m_exposureStepsRange), 3)
+
43  , m_exposureRange(
+
44  new ValidatorRange<Argus::Range<float> >(
+
45  Argus::Range<float>(-10.0f, 10.0f),
+
46  Argus::Range<float>(-10.0f, 10.0f)),
+
47  Argus::Range<float>(-2.0f, 2.0f))
+
48  , m_initialized(false)
+
49  , m_running(false)
+
50  , m_wasRunning(false)
+
51  , m_prevRunning(false)
+
52 {
+
53 }
+
54 
+ +
56 {
+
57  shutdown();
+
58 }
+
59 
+ +
61 {
+
62 }
+
63 
+ +
65 {
+
66  shutdown();
+
67 }
+
68 
+
69 bool TaskMultiExposure::ExpLevel::initialize(float exposureCompensation)
+
70 {
+
71  Composer &composer = Composer::getInstance();
+
72  Dispatcher &dispatcher = Dispatcher::getInstance();
+
73 
+
74  // create the request
+
75  PROPAGATE_ERROR(dispatcher.createRequest(m_request, Argus::CAPTURE_INTENT_STILL_CAPTURE));
+
76 
+
77  Argus::IRequest *iRequest = Argus::interface_cast<Argus::IRequest>(m_request.get());
+
78  if (!iRequest)
+
79  ORIGINATE_ERROR("Failed to get IRequest interface");
+
80 
+
81  // get the autocontrol settings and set the exposure compensation value
+
82  Argus::IAutoControlSettings *iAutoControlSettings =
+
83  Argus::interface_cast<Argus::IAutoControlSettings>(iRequest->getAutoControlSettings());
+
84  if (!iAutoControlSettings)
+
85  ORIGINATE_ERROR("Failed to get IAutoControlSettings interface");
+
86 
+
87  // lock AE
+
88  if (iAutoControlSettings->setAeLock(true) != Argus::STATUS_OK)
+
89  ORIGINATE_ERROR("Failed to set AE lock");
+
90 
+
91  // set exposure compensation value
+
92  if (iAutoControlSettings->setExposureCompensation(exposureCompensation) != Argus::STATUS_OK)
+
93  ORIGINATE_ERROR("Failed to set exposure compensation");
+
94 
+
95  // Create the preview stream
+
96  PROPAGATE_ERROR(dispatcher.createOutputStream(m_request.get(), false, m_outputStream));
+
97 
+
98  Argus::IEGLOutputStream *iEGLOutputStream =
+
99  Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream.get());
+
100  if (!iEGLOutputStream)
+
101  ORIGINATE_ERROR("Failed to get IEGLOuptutStream interface");
+
102 
+
103  // Bind the stream to the composer
+
104  PROPAGATE_ERROR(composer.bindStream(iEGLOutputStream->getEGLStream()));
+
105 
+
106  const Argus::Size2D<uint32_t> streamSize = iEGLOutputStream->getResolution();
+
107  PROPAGATE_ERROR(composer.setStreamAspectRatio(iEGLOutputStream->getEGLStream(),
+
108  (float)streamSize.width() / (float)streamSize.height()));
+
109 
+
110  // Enable the output stream
+
111  PROPAGATE_ERROR(dispatcher.enableOutputStream(m_request.get(), m_outputStream.get()));
+
112 
+
113  return true;
+
114 }
+
115 
+ +
117 {
+
118  if (m_request)
+
119  {
+
120  Dispatcher &dispatcher = Dispatcher::getInstance();
+
121  Composer &composer = Composer::getInstance();
+
122 
+
123  if (m_outputStream)
+
124  {
+
125  // disable the output stream
+
126  PROPAGATE_ERROR_CONTINUE(dispatcher.disableOutputStream(m_request.get(),
+
127  m_outputStream.get()));
+
128 
+
129  Argus::IEGLOutputStream *iEGLOutputStream =
+
130  Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream);
+
131  if (!iEGLOutputStream)
+
132  REPORT_ERROR("Failed to get IEGLOutputStream interface");
+
133 
+
134  // disconnect the EGL stream
+
135  iEGLOutputStream->disconnect();
+
136 
+
137  // unbind the EGL stream from the composer
+
138  PROPAGATE_ERROR_CONTINUE(composer.unbindStream(iEGLOutputStream->getEGLStream()));
+
139 
+
140  m_outputStream.reset();
+
141  }
+
142 
+
143  // destroy the request
+
144  PROPAGATE_ERROR_CONTINUE(m_request.reset());
+
145  }
+
146 
+
147  return true;
+
148 }
+
149 
+ +
151 {
+
152  if (m_initialized)
+
153  return true;
+
154 
+
155  Dispatcher &dispatcher = Dispatcher::getInstance();
+
156 
+
157  m_initialized = true;
+
158 
+
159  // register the device observers after 'm_initialize' is set, the call back will be
+
160  // called immediately and assert that 'm_initialize' is set
+
161  PROPAGATE_ERROR(dispatcher.m_deviceOpen.registerObserver(this,
+
162  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::onDeviceOpenChanged)));
+
163  PROPAGATE_ERROR(dispatcher.m_sensorModeValid.registerObserver(this,
+
164  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::onSensorModeValidChanged)));
+
165  PROPAGATE_ERROR(dispatcher.m_outputSize.registerObserver(this,
+
166  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::restartStreams)));
+
167  PROPAGATE_ERROR(m_exposureRange.registerObserver(this,
+
168  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::onParametersChanged)));
+
169  PROPAGATE_ERROR(m_exposureSteps.registerObserver(this,
+
170  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::onParametersChanged)));
+
171  PROPAGATE_ERROR(dispatcher.m_captureYuvFormat.registerObserver(this,
+
172  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::restartStreams)));
+
173 
+
174  return true;
+
175 }
+
176 
+ +
178 {
+
179  if (!m_initialized)
+
180  return true;
+
181 
+
182  // stop the preview
+
183  PROPAGATE_ERROR(stop());
+
184 
+
185  Dispatcher &dispatcher = Dispatcher::getInstance();
+
186 
+
187  PROPAGATE_ERROR_CONTINUE(m_exposureSteps.unregisterObserver(this,
+
188  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::onParametersChanged)));
+
189  PROPAGATE_ERROR_CONTINUE(m_exposureRange.unregisterObserver(this,
+
190  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::onParametersChanged)));
+
191  PROPAGATE_ERROR_CONTINUE(dispatcher.m_outputSize.unregisterObserver(this,
+
192  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::restartStreams)));
+
193  PROPAGATE_ERROR_CONTINUE(dispatcher.m_sensorModeValid.unregisterObserver(this,
+
194  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::onSensorModeValidChanged)));
+
195  PROPAGATE_ERROR_CONTINUE(dispatcher.m_deviceOpen.unregisterObserver(this,
+
196  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::onDeviceOpenChanged)));
+
197  PROPAGATE_ERROR_CONTINUE(dispatcher.m_captureYuvFormat.unregisterObserver(this,
+
198  static_cast<IObserver::CallbackFunction>(&TaskMultiExposure::restartStreams)));
+
199 
+
200  m_initialized = false;
+
201 
+
202  return true;
+
203 }
+
204 
+ +
206 {
+
207  if (!m_expLevels.empty())
+
208  {
+
209  // shutdown the exposure streams
+
210  for (std::list<ExpLevel*>::iterator it = m_expLevels.begin(); it != m_expLevels.end(); ++it)
+
211  {
+
212  ExpLevel *expLevel = *it;
+
213  PROPAGATE_ERROR_CONTINUE(expLevel->shutdown());
+
214  delete expLevel;
+
215  }
+
216  m_expLevels.clear();
+
217  }
+
218 
+
219  return true;
+
220 }
+
221 
+
222 bool TaskMultiExposure::restartStreams(__attribute__((unused)) const Observed &source)
+
223 {
+
224  if (m_running)
+
225  {
+
226  PROPAGATE_ERROR(stop());
+
227  PROPAGATE_ERROR(start());
+
228  }
+
229  return true;
+
230 }
+
231 
+
232 bool TaskMultiExposure::onDeviceOpenChanged(const Observed &source)
+
233 {
+
234  const bool isOpen = static_cast<const Value<bool>&>(source).get();
+
235 
+
236  // If the current device is closed the request needs to be recreated on the new device. Stop
+
237  // and then start when the device is opened again.
+
238  if (!isOpen)
+
239  {
+ +
241  PROPAGATE_ERROR(stop());
+
242  }
+
243  else
+
244  {
+
245  PROPAGATE_ERROR(m_exposureStepsRange.set(
+
246  Argus::Range<uint32_t>(2, Dispatcher::getInstance().maxBurstRequests())));
+
247 
+
248  if (m_wasRunning)
+
249  {
+
250  m_wasRunning = false;
+
251  PROPAGATE_ERROR(start());
+
252  }
+
253  }
+
254 
+
255  return true;
+
256 }
+
257 
+ +
259 {
+
260  const bool isTrue = static_cast<const Value<bool>&>(source).get();
+
261 
+
262  if (!isTrue)
+
263  {
+ +
265  if (m_running)
+
266  {
+
267  PROPAGATE_ERROR(stop());
+
268  }
+
269  }
+
270  else if (m_prevRunning)
+
271  {
+
272  m_prevRunning = false;
+
273  PROPAGATE_ERROR(start());
+
274  }
+
275 
+
276  return true;
+
277 }
+
278 
+
279 bool TaskMultiExposure::onParametersChanged(const Observed &source)
+
280 {
+
281  assert(m_initialized);
+
282 
+
283  // if preview is running, stop, shutdown levels, set the new value and start again
+
284  const bool wasRunning = m_running;
+
285  PROPAGATE_ERROR(stop());
+
286  PROPAGATE_ERROR(shutdownExpLevels());
+
287 
+
288  if (wasRunning)
+
289  PROPAGATE_ERROR(start());
+
290 
+
291  return true;
+
292 }
+
293 
+ +
295 {
+
296  if (!m_initialized)
+
297  ORIGINATE_ERROR("Not initialized");
+
298  if (m_running)
+
299  return true;
+
300 
+
301  if (m_expLevels.empty())
+
302  {
+
303  std::ostringstream message;
+
304 
+
305  message << "Creating " << m_exposureSteps << " streams with exposure compensation set to ";
+
306 
+
307  // create a request and streams for each exposure level
+
308  for (uint32_t requestIndex = 0; requestIndex < m_exposureSteps; ++requestIndex)
+
309  {
+
310  UniquePointer<ExpLevel> expLevel(new ExpLevel);
+
311 
+
312  if (!expLevel)
+
313  ORIGINATE_ERROR("Out of memory");
+
314 
+
315  const float exposureCompensation =
+
316  ((float)requestIndex / (float)(m_exposureSteps - 1)) *
+
317  (m_exposureRange.get().max() - m_exposureRange.get().min()) +
+
318  m_exposureRange.get().min();
+
319 
+
320  PROPAGATE_ERROR(expLevel->initialize(exposureCompensation));
+
321 
+
322  m_expLevels.push_back(expLevel.release());
+
323 
+
324  if (requestIndex != 0)
+
325  message << ", ";
+
326  message << exposureCompensation << " ev";
+
327  }
+
328 
+
329  message << ". " << std::endl;
+
330  Dispatcher::getInstance().message(message.str().c_str());
+
331  }
+
332 
+
333  // activate the streams and populate the burst request array
+
334  std::vector<const Argus::Request*> requests;
+
335  Composer &composer = Composer::getInstance();
+
336  for (std::list<ExpLevel*>::iterator it = m_expLevels.begin(); it != m_expLevels.end(); ++it)
+
337  {
+
338  ExpLevel *expLevel = *it;
+
339  PROPAGATE_ERROR(composer.setStreamActive(
+
340  Argus::interface_cast<Argus::IEGLOutputStream>
+
341  (expLevel->m_outputStream)->getEGLStream(), true));
+
342  requests.push_back(expLevel->m_request.get());
+
343  }
+
344 
+
345  // start the repeating burst request for the preview
+
346  PROPAGATE_ERROR(Dispatcher::getInstance().startRepeatBurst(requests));
+
347 
+
348  m_running = true;
+
349 
+
350  return true;
+
351 }
+
352 
+ +
354 {
+
355  if (!m_initialized)
+
356  ORIGINATE_ERROR("Not initialized");
+
357  if (!m_running)
+
358  return true;
+
359 
+
360  // stop the repeating burst request
+
361  Dispatcher &dispatcher = Dispatcher::getInstance();
+
362  PROPAGATE_ERROR(dispatcher.stopRepeat());
+
363 
+
364  // de-activate the streams
+
365  Composer &composer = Composer::getInstance();
+
366  for (std::list<ExpLevel*>::iterator it = m_expLevels.begin(); it != m_expLevels.end(); ++it)
+
367  {
+
368  ExpLevel *expLevel = *it;
+
369  PROPAGATE_ERROR(composer.setStreamActive(
+
370  Argus::interface_cast<Argus::IEGLOutputStream>
+
371  (expLevel->m_outputStream)->getEGLStream(), false));
+
372  }
+
373 
+
374  PROPAGATE_ERROR(dispatcher.waitForIdle());
+
375 
+
376  PROPAGATE_ERROR(shutdownExpLevels());
+
377 
+
378  m_running = false;
+
379 
+
380  return true;
+
381 }
+
382 
+
383 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8h.html new file mode 100644 index 0000000..4a0cd1c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8h.html @@ -0,0 +1,123 @@ + + + + + +Argus Camera Sample: modules/tasks/MultiExposure.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
MultiExposure.h File Reference
+
+
+
#include <list>
+#include <Argus/Argus.h>
+#include "ITask.h"
+#include "Value.h"
+#include "IObserver.h"
+#include "TrackedUniqueObject.h"
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  ArgusSamples::TaskMultiExposure
 This task captures multiple streams with different exposure compensation values. More...
class  ArgusSamples::TaskMultiExposure::ExpLevel
 For each exposure level there is one request where the exposure compensation is set to the correct value. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8h_source.html new file mode 100644 index 0000000..0ec5eb6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiExposure_8h_source.html @@ -0,0 +1,224 @@ + + + + + +Argus Camera Sample: modules/tasks/MultiExposure.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
MultiExposure.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef TASK_MULTI_EXPOSURE_H
+
30 #define TASK_MULTI_EXPOSURE_H
+
31 
+
32 #include <list>
+
33 
+
34 #include <Argus/Argus.h>
+
35 
+
36 #include "ITask.h"
+
37 #include "Value.h"
+
38 #include "IObserver.h"
+
39 #include "TrackedUniqueObject.h"
+
40 
+
41 namespace ArgusSamples
+
42 {
+
43 
+
44 /**
+
45  * This task captures multiple streams with different exposure compensation values.
+
46  */
+
47 class TaskMultiExposure : public ITask, public IObserver
+
48 {
+
49 public:
+ +
51  virtual ~TaskMultiExposure();
+
52 
+
53  /** @name ITask methods */
+
54  /**@{*/
+
55  virtual bool initialize();
+
56  virtual bool shutdown();
+
57  virtual bool start();
+
58  virtual bool stop();
+
59  /**@}*/
+
60 
+
61 private:
+
62  // the range values need to be initialized first, some Value<> members below use them
+
63  // for the validator
+
64  Value<Argus::Range<uint32_t> > m_exposureStepsRange; ///< allowed exposure steps
+
65 
+
66 public:
+
67  Value<uint32_t> m_exposureSteps; ///< steps within the exposure range
+
68  Value<Argus::Range<float> > m_exposureRange; ///< in eV, e.g. -1,2 results in exposures from
+
69  /// -1 eV to +2 eV
+
70 
+
71 private:
+
72  bool m_initialized; ///< set if initialized
+
73  bool m_running; ///< set if preview is running
+
74  bool m_wasRunning; ///< set if was running before the device had been closed
+
75  bool m_prevRunning; ///< set if was running before the sensorModeValid is set to false
+
76 
+
77  /**
+
78  * For each exposure level there is one request where the exposure compensation is set to the
+
79  * correct value. Each request outputs to a stream which is rendered.
+
80  */
+
81  class ExpLevel
+
82  {
+
83  public:
+
84  ExpLevel();
+
85  ~ExpLevel();
+
86 
+
87  bool shutdown();
+
88  bool initialize(float exposureCompensation);
+
89 
+ +
91  Argus::UniqueObj<Argus::OutputStream> m_outputStream; ///< Argus output stream
+
92  };
+
93 
+
94  std::list<ExpLevel*> m_expLevels; ///< exposure level
+
95 
+
96  /**
+
97  * Callback when the device is opened/closed.
+
98  */
+
99  bool onDeviceOpenChanged(const Observed &source);
+
100 
+
101  /**
+
102  * Callback when the sensorModeValid is changed.
+
103  */
+
104  bool onSensorModeValidChanged(const Observed &source);
+
105 
+
106  /**
+
107  * Callback when the exposure range or steps changes.
+
108  */
+
109  bool onParametersChanged(const Observed &source);
+
110 
+
111  /**
+
112  * Shut down the exposure level streams.
+
113  */
+
114  bool shutdownExpLevels();
+
115 
+
116  /**
+
117  * Restart when output size changes
+
118  */
+
119  bool restartStreams(const Observed &source);
+
120 };
+
121 
+
122 }; // namespace ArgusSamples
+
123 
+
124 #endif // TASK_MULTI_EXPOSURE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8cpp.html new file mode 100644 index 0000000..79f6e66 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8cpp.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: modules/tasks/MultiSession.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
MultiSession.cpp File Reference
+
+
+
#include <sstream>
+#include "MultiSession.h"
+#include "Composer.h"
+#include "Dispatcher.h"
+#include "Error.h"
+#include "UniquePointer.h"
+#include "PerfTracker.h"
+#include <algorithm>
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8cpp_source.html new file mode 100644 index 0000000..f495b10 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8cpp_source.html @@ -0,0 +1,442 @@ + + + + + +Argus Camera Sample: modules/tasks/MultiSession.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
MultiSession.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include <sstream>
+
30 
+
31 #include "MultiSession.h"
+
32 #include "Composer.h"
+
33 #include "Dispatcher.h"
+
34 #include "Error.h"
+
35 #include "UniquePointer.h"
+
36 #include "PerfTracker.h"
+
37 #include <algorithm>
+
38 
+
39 namespace ArgusSamples
+
40 {
+
41 
+ +
43  : m_initialized(false)
+
44  , m_running(false)
+
45  , m_prevRunning(false)
+
46 {
+
47 }
+
48 
+ +
50 {
+
51  shutdown();
+
52 }
+
53 
+ +
55 {
+
56 }
+
57 
+ +
59 {
+
60  shutdown();
+
61 }
+
62 
+
63 bool TaskMultiSession::Session::initialize(uint32_t deviceIndex)
+
64 {
+
65  // create the perf tracker
+
66  m_perfTracker.reset(new SessionPerfTracker());
+
67  if (!m_perfTracker)
+
68  ORIGINATE_ERROR("Out of memory");
+
69 
+
70  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_TASK_START));
+
71 
+
72  Composer &composer = Composer::getInstance();
+
73  Dispatcher &dispatcher = Dispatcher::getInstance();
+
74 
+
75  // create the session using the current device index
+
76  PROPAGATE_ERROR(dispatcher.createSession(m_session, deviceIndex));
+
77  PROPAGATE_ERROR(m_perfTracker->setSession(m_session.get()));
+
78 
+
79  // create the request
+
80  PROPAGATE_ERROR(dispatcher.createRequest(m_request, Argus::CAPTURE_INTENT_STILL_CAPTURE,
+
81  m_session.get()));
+
82 
+
83  // Create the preview stream
+
84  PROPAGATE_ERROR(dispatcher.createOutputStream(m_request.get(), false, m_outputStream,
+
85  m_session.get()));
+
86 
+
87  // bind the preview stream to the composer
+
88  Argus::IEGLOutputStream *iEGLOutputStream =
+
89  Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream.get());
+
90  if (!iEGLOutputStream)
+
91  ORIGINATE_ERROR("Failed to get IEGLOutputStream interface");
+
92 
+
93  // Bind the stream to the composer
+
94  PROPAGATE_ERROR(composer.bindStream(iEGLOutputStream->getEGLStream()));
+
95 
+
96  const Argus::Size2D<uint32_t> streamSize = iEGLOutputStream->getResolution();
+
97  PROPAGATE_ERROR(composer.setStreamAspectRatio(iEGLOutputStream->getEGLStream(),
+
98  (float)streamSize.width() / (float)streamSize.height()));
+
99 
+
100  // Enable the output stream
+
101  PROPAGATE_ERROR(dispatcher.enableOutputStream(m_request.get(), m_outputStream.get()));
+
102 
+
103  return true;
+
104 }
+
105 
+ +
107 {
+
108  Composer &composer = Composer::getInstance();
+
109 
+
110  // activate the streams and populate the burst request array
+
111  PROPAGATE_ERROR(composer.setStreamActive(
+
112  Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream)->getEGLStream(), true));
+
113 
+
114  // start the repeating burst request for the preview
+
115  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_ISSUE_CAPTURE));
+
116  PROPAGATE_ERROR(Dispatcher::getInstance().startRepeat(m_request.get(), m_session.get()));
+
117 
+
118  return true;
+
119 }
+
120 
+ +
122 {
+
123  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_REQUESTED));
+
124 
+
125  Dispatcher &dispatcher = Dispatcher::getInstance();
+
126  Composer &composer = Composer::getInstance();
+
127 
+
128  PROPAGATE_ERROR(dispatcher.stopRepeat(m_session.get()));
+
129  PROPAGATE_ERROR(composer.setStreamActive(
+
130  Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream)->getEGLStream(), false));
+
131  PROPAGATE_ERROR(dispatcher.waitForIdle(m_session.get()));
+
132  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_FLUSH_DONE));
+
133 
+
134  return true;
+
135 }
+
136 
+ +
138 {
+
139  if (m_request)
+
140  {
+
141  Dispatcher &dispatcher = Dispatcher::getInstance();
+
142  Composer &composer = Composer::getInstance();
+
143 
+
144  if (m_outputStream)
+
145  {
+
146  // destroy the producer
+
147  PROPAGATE_ERROR_CONTINUE(dispatcher.disableOutputStream(m_request.get(),
+
148  m_outputStream.get()));
+
149 
+
150  Argus::IEGLOutputStream *iEGLOutputStream =
+
151  Argus::interface_cast<Argus::IEGLOutputStream>(m_outputStream);
+
152  if (!iEGLOutputStream)
+
153  REPORT_ERROR("Failed to get IEGLOutputStream interface");
+
154 
+
155  // disconnect the EGL stream
+
156  iEGLOutputStream->disconnect();
+
157 
+
158  // unbind the EGL stream from the composer
+
159  PROPAGATE_ERROR_CONTINUE(composer.unbindStream(iEGLOutputStream->getEGLStream()));
+
160 
+
161  m_outputStream.reset();
+
162  }
+
163 
+
164  // destroy the request
+
165  PROPAGATE_ERROR_CONTINUE(m_request.reset());
+
166  }
+
167 
+
168  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_DONE));
+
169 
+
170  // Destroy the session
+
171  m_session.reset();
+
172 
+
173  return true;
+
174 }
+
175 
+ +
177 {
+
178  if (m_initialized)
+
179  return true;
+
180 
+
181  PROPAGATE_ERROR(Dispatcher::getInstance().m_sensorModeValid.registerObserver(this,
+
182  static_cast<IObserver::CallbackFunction>(&TaskMultiSession::onSensorModeValidChanged)));
+
183  PROPAGATE_ERROR(Dispatcher::getInstance().m_outputSize.registerObserver(this,
+
184  static_cast<IObserver::CallbackFunction>(&TaskMultiSession::restartStreams)));
+
185 
+
186  m_initialized = true;
+
187 
+
188  return true;
+
189 }
+
190 
+ +
192 {
+
193  if (!m_initialized)
+
194  return true;
+
195 
+
196  // stop the preview
+
197  PROPAGATE_ERROR(stop());
+
198 
+
199  PROPAGATE_ERROR_CONTINUE(Dispatcher::getInstance().m_outputSize.unregisterObserver(this,
+
200  static_cast<IObserver::CallbackFunction>(&TaskMultiSession::restartStreams)));
+
201  PROPAGATE_ERROR_CONTINUE(Dispatcher::getInstance().m_sensorModeValid.unregisterObserver(this,
+
202  static_cast<IObserver::CallbackFunction>(&TaskMultiSession::onSensorModeValidChanged)));
+
203 
+
204  m_initialized = false;
+
205 
+
206  return true;
+
207 }
+
208 
+ +
210 {
+
211  if (!m_sessions.empty())
+
212  {
+
213  // shutdown the sessions
+
214  for (std::list<Session*>::iterator it = m_sessions.begin(); it != m_sessions.end(); ++it)
+
215  {
+
216  Session *session = *it;
+
217  PROPAGATE_ERROR_CONTINUE(session->shutdown());
+
218  delete session;
+
219  }
+
220  m_sessions.clear();
+
221  }
+
222 
+
223  return true;
+
224 }
+
225 
+ +
227 {
+
228  if (m_running)
+
229  return true;
+
230 
+
231  Dispatcher &dispatcher = Dispatcher::getInstance();
+
232 
+
233  if (m_sessions.empty())
+
234  {
+
235  const uint32_t deviceCount = dispatcher.getDeviceCount();
+
236 
+
237  if (deviceCount == 0)
+
238  ORIGINATE_ERROR("No camera devices found");
+
239 
+
240  std::vector<uint32_t> devices;
+
241 
+
242  if (m_multiDevices.get().size() > 0)
+
243  {
+
244  // m_multiDevices will not be changed by UI
+
245  // it has special validation requirements, so validate m_multiDevices here
+
246  devices = m_multiDevices.get();
+
247  std::sort(devices.begin(), devices.end());
+
248 
+
249  // compare with deviceCount
+
250  if (devices.back() >= deviceCount)
+
251  ORIGINATE_ERROR("index %u is out of range [0 - %u)", devices.back(), deviceCount);
+
252 
+
253  // check no duplicate
+
254  std::vector<uint32_t>::iterator it = std::unique(devices.begin(), devices.end());
+
255  if (it != devices.end())
+
256  ORIGINATE_ERROR("duplicated indexes");
+
257  }
+
258  else
+
259  {
+
260  // use all available camera devices
+
261  for (uint32_t deviceIndex = 0; deviceIndex < deviceCount; ++deviceIndex)
+
262  {
+
263  devices.push_back(deviceIndex);
+
264  }
+
265  }
+
266 
+
267  // create a request and streams for each session
+
268  for (std::vector<uint32_t>::iterator it = devices.begin(); it != devices.end(); ++it)
+
269  {
+
270  UniquePointer<Session> session(new Session);
+
271 
+
272  if (!session)
+
273  ORIGINATE_ERROR("Out of memory");
+
274 
+
275  PROPAGATE_ERROR(session->initialize(*it));
+
276 
+
277  m_sessions.push_back(session.release());
+
278  }
+
279  }
+
280 
+
281  // start the sessions
+
282  for (std::list<Session*>::iterator it = m_sessions.begin(); it != m_sessions.end(); ++it)
+
283  {
+
284  Session *session = *it;
+
285  PROPAGATE_ERROR(session->start());
+
286  }
+
287 
+
288  m_running = true;
+
289 
+
290  return true;
+
291 }
+
292 
+ +
294 {
+
295  if (!m_running)
+
296  return true;
+
297 
+
298  for (std::list<Session*>::iterator it = m_sessions.begin(); it != m_sessions.end(); ++it)
+
299  {
+
300  Session *session = *it;
+
301  PROPAGATE_ERROR(session->stop());
+
302  }
+
303 
+
304  PROPAGATE_ERROR(shutdownSessions());
+
305 
+
306  m_running = false;
+
307 
+
308  return true;
+
309 }
+
310 
+
311 bool TaskMultiSession::onSensorModeValidChanged(const Observed &source)
+
312 {
+
313  const bool isTrue = static_cast<const Value<bool>&>(source).get();
+
314 
+
315  if (!isTrue)
+
316  {
+ +
318  if (m_running)
+
319  {
+
320  PROPAGATE_ERROR(stop());
+
321  }
+
322  }
+
323  else if (m_prevRunning)
+
324  {
+
325  m_prevRunning = false;
+
326  PROPAGATE_ERROR(start());
+
327  }
+
328 
+
329  return true;
+
330 }
+
331 
+
332 bool TaskMultiSession::restartStreams(__attribute__((unused)) const Observed &source)
+
333 {
+
334  if (m_running)
+
335  {
+
336  PROPAGATE_ERROR(stop());
+
337  PROPAGATE_ERROR(start());
+
338  }
+
339  return true;
+
340 }
+
341 
+
342 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8h.html new file mode 100644 index 0000000..3af17bd --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8h.html @@ -0,0 +1,125 @@ + + + + + +Argus Camera Sample: modules/tasks/MultiSession.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
MultiSession.h File Reference
+
+
+
#include <list>
+#include <Argus/Argus.h>
+#include "ITask.h"
+#include "Util.h"
+#include "UniquePointer.h"
+#include "IObserver.h"
+#include "TrackedUniqueObject.h"
+#include "Value.h"
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  ArgusSamples::TaskMultiSession
 This task creates one session for each available sensor. More...
class  ArgusSamples::TaskMultiSession::Session
 For each device there is one session with a request. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8h_source.html new file mode 100644 index 0000000..a702401 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/MultiSession_8h_source.html @@ -0,0 +1,212 @@ + + + + + +Argus Camera Sample: modules/tasks/MultiSession.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
MultiSession.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef TASK_MULTI_SESSION_H
+
30 #define TASK_MULTI_SESSION_H
+
31 
+
32 #include <list>
+
33 
+
34 #include <Argus/Argus.h>
+
35 
+
36 #include "ITask.h"
+
37 #include "Util.h"
+
38 #include "UniquePointer.h"
+
39 #include "IObserver.h"
+
40 #include "TrackedUniqueObject.h"
+
41 #include "Value.h"
+
42 
+
43 namespace ArgusSamples
+
44 {
+
45 
+
46 class SessionPerfTracker;
+
47 
+
48 /**
+
49  * This task creates one session for each available sensor
+
50  */
+
51 class TaskMultiSession : public ITask, public IObserver
+
52 {
+
53 public:
+ +
55  virtual ~TaskMultiSession();
+
56 
+
57  /** @name ITask methods */
+
58  /**@{*/
+
59  virtual bool initialize();
+
60  virtual bool shutdown();
+
61  virtual bool start();
+
62  virtual bool stop();
+
63  /**@}*/
+
64 
+
65 private:
+
66  bool m_initialized; ///< set if initialized
+
67  bool m_running; ///< set if preview is running
+
68  bool m_prevRunning; ///< set if was running before the sensorModeValid is set to false
+
69 
+
70  /**
+
71  * For each device there is one session with a request. Each request outputs to a stream which
+
72  * is rendered.
+
73  */
+
74  class Session
+
75  {
+
76  public:
+
77  Session();
+
78  ~Session();
+
79 
+
80  bool shutdown();
+
81  bool start();
+
82  bool stop();
+
83  bool initialize(uint32_t deviceIndex);
+
84 
+ + +
87  Argus::UniqueObj<Argus::OutputStream> m_outputStream; ///< Argus output stream
+
88 
+
89  UniquePointer<SessionPerfTracker> m_perfTracker;
+
90  };
+
91 
+
92  std::list<Session*> m_sessions;
+
93 
+
94  bool shutdownSessions();
+
95 
+
96  /**
+
97  * Callback when the sensorModeValid is changed.
+
98  */
+
99  bool onSensorModeValidChanged(const Observed &source);
+
100 
+
101  /**
+
102  * Restart when output size changes
+
103  */
+
104  bool restartStreams(const Observed &source);
+
105 
+
106 public:
+
107  Value<std::vector<uint32_t> > m_multiDevices; ///< multiple devices
+
108 };
+
109 
+
110 }; // namespace ArgusSamples
+
111 
+
112 #endif // TASK_MULTI_SESSION_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8cpp.html new file mode 100644 index 0000000..af714c3 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8cpp.html @@ -0,0 +1,111 @@ + + + + + +Argus Camera Sample: common/Mutex.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Mutex.cpp File Reference
+
+
+
#include "Mutex.h"
+#include "Error.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8cpp_source.html new file mode 100644 index 0000000..35bf7a4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8cpp_source.html @@ -0,0 +1,191 @@ + + + + + +Argus Camera Sample: common/Mutex.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Mutex.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include "Mutex.h"
+
30 #include "Error.h"
+
31 
+
32 namespace ArgusSamples
+
33 {
+
34 
+ +
36  : m_initialized(false)
+
37 {
+
38 }
+
39 
+ +
41 {
+
42  shutdown();
+
43 }
+
44 
+ +
46 {
+
47  if (!m_initialized)
+
48  {
+
49  if (pthread_mutex_init(&m_mutex, NULL) != 0)
+
50  ORIGINATE_ERROR("Failed to initialize mutex");
+
51  m_initialized = true;
+
52  }
+
53 
+
54  return true;
+
55 }
+
56 
+ +
58 {
+
59  if (m_initialized)
+
60  {
+
61  if (pthread_mutex_destroy(&m_mutex) != 0)
+
62  ORIGINATE_ERROR("Failed to destroy mutex");
+
63  m_initialized = false;
+
64  }
+
65 
+
66  return true;
+
67 }
+
68 
+
69 bool Mutex::lock() const
+
70 {
+
71  if (!m_initialized)
+
72  ORIGINATE_ERROR("Not initialized");
+
73 
+
74  if (pthread_mutex_lock(&m_mutex) != 0)
+
75  ORIGINATE_ERROR("Failed to lock mutex");
+
76 
+
77  return true;
+
78 }
+
79 
+
80 bool Mutex::unlock() const
+
81 {
+
82  if (!m_initialized)
+
83  ORIGINATE_ERROR("Not initialized");
+
84 
+
85  if (pthread_mutex_unlock(&m_mutex) != 0)
+
86  ORIGINATE_ERROR("Failed to unlock mutex");
+
87 
+
88  return true;
+
89 }
+
90 
+
91 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8h.html new file mode 100644 index 0000000..fa478c9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8h.html @@ -0,0 +1,119 @@ + + + + + +Argus Camera Sample: common/Mutex.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Mutex.h File Reference
+
+
+
#include <pthread.h>
+#include "Error.h"
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  ArgusSamples::Mutex
 Mutex. More...
class  ArgusSamples::ScopedMutex
 An RAII-style class for acquiring a Mutex. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8h_source.html new file mode 100644 index 0000000..4950860 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Mutex_8h_source.html @@ -0,0 +1,235 @@ + + + + + +Argus Camera Sample: common/Mutex.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Mutex.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef MUTEX_H
+
30 #define MUTEX_H
+
31 
+
32 #include <pthread.h>
+
33 
+
34 #include "Error.h"
+
35 
+
36 namespace ArgusSamples
+
37 {
+
38 
+
39 class ConditionVariable;
+
40 
+
41 /**
+
42  * Mutex
+
43  */
+
44 class Mutex
+
45 {
+
46 public:
+
47  Mutex();
+
48  ~Mutex();
+
49 
+
50  /**
+
51  * Create the underlying mutex. This method must be called before any other methods.
+
52  */
+
53  bool initialize();
+
54 
+
55  /**
+
56  * Destroy the underlying mutex. After this call, this object can no longer be used
+
57  * (until and unless a future call to @c initialize()). Calling this method if the
+
58  * object is not initialized generates no error, but silently returns.
+
59  */
+
60  bool shutdown();
+
61 
+
62  /**
+
63  * Lock the mutex. This method is declared @c const for convenience.
+
64  */
+
65  bool lock() const;
+
66 
+
67  /**
+
68  * Unlock the mutex. This method is declared @c const for convenience.
+
69  */
+
70  bool unlock() const;
+
71 
+
72 private:
+ +
74  /**
+
75  * pthread mutex, this is 'mutable' so that 'const' functions can be used.
+
76  */
+
77  mutable pthread_mutex_t m_mutex;
+
78 
+
79  /**
+
80  * Hide copy constructor and assignment operator
+
81  */
+
82  Mutex(Mutex &other);
+
83  const Mutex& operator = (const Mutex&);
+
84 
+
85  friend class ConditionVariable;
+
86 
+
87  pthread_mutex_t* getPThreadMutex() const
+
88  {
+
89  return &m_mutex;
+
90  }
+
91 };
+
92 
+
93 /**
+
94  * An RAII-style class for acquiring a Mutex.
+
95  * The mutex is acquired in the constructor and released in the destructor.
+
96  * This class is NOT to be subclassed.
+
97  */
+ +
99 {
+
100 public:
+
101  explicit ScopedMutex(Mutex& mutex)
+
102  : m_mutex(&mutex)
+
103  , m_isLocked(false)
+
104  {
+
105  m_isLocked = m_mutex->lock();
+
106  }
+
107 
+ +
109  {
+
110  if (m_isLocked)
+
111  m_mutex->unlock();
+
112  }
+
113 
+
114  bool expectLocked() const
+
115  {
+
116  if (!m_isLocked)
+
117  ORIGINATE_ERROR("Expected mutex to be locked");
+
118  return true;
+
119  }
+
120 
+
121 private:
+ + +
124 
+
125  /**
+
126  * Hide default/copy constructor and assignment operator
+
127  */
+
128  ScopedMutex();
+
129  ScopedMutex(ScopedMutex &other);
+ +
131 };
+
132 
+
133 } // namespace ArgusSamples
+
134 
+
135 #endif // MUTEX_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8cpp.html new file mode 100644 index 0000000..16f0216 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8cpp.html @@ -0,0 +1,136 @@ + + + + + +Argus Camera Sample: modules/PerfTracker.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
PerfTracker.cpp File Reference
+
+
+
#include "PerfTracker.h"
+#include <stdio.h>
+#include <inttypes.h>
+#include <limits>
+#include "Dispatcher.h"
+#include "EventThread.h"
+#include "InitOnce.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+ + +

+Macros

#define __STDC_FORMAT_MACROS
+

Macro Definition Documentation

+ +
+
+ + + + +
#define __STDC_FORMAT_MACROS
+
+ +

Definition at line 32 of file PerfTracker.cpp.

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8cpp_source.html new file mode 100644 index 0000000..a22a8bf --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8cpp_source.html @@ -0,0 +1,533 @@ + + + + + +Argus Camera Sample: modules/PerfTracker.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
PerfTracker.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include "PerfTracker.h"
+
30 
+
31 #include <stdio.h>
+
32 #define __STDC_FORMAT_MACROS
+
33 #include <inttypes.h>
+
34 
+
35 #include <limits>
+
36 
+
37 #include "Dispatcher.h"
+
38 #include "EventThread.h"
+
39 #include "InitOnce.h"
+
40 
+
41 namespace ArgusSamples
+
42 {
+
43 
+ +
45  : m_sessionId(0)
+
46 {
+
47 }
+
48 
+ +
50 {
+
51 }
+
52 
+ +
54 {
+
55  m_sessionId = 0;
+
56  m_displayCount = 0;
+
57  return true;
+
58 }
+
59 
+ +
61 {
+
62  static InitOnce initOnce;
+
63  static PerfTracker instance;
+
64 
+
65  if (initOnce.begin())
+
66  {
+
67  if (instance.initialize())
+
68  {
+
69  initOnce.complete();
+
70  }
+
71  else
+
72  {
+
73  initOnce.failed();
+
74  REPORT_ERROR("Initalization failed");
+
75  }
+
76  }
+
77 
+
78  return instance;
+
79 }
+
80 
+ +
82 {
+
83  switch (event)
+
84  {
+ + +
87  break;
+ + +
90  break;
+ +
92  if (!Dispatcher::getInstance().m_kpi)
+
93  return true;
+
94 
+ +
96  {
+
97  // start measurement
+ +
99  }
+
100  else
+
101  {
+
102  const TimeValue curTime = getCurrentTime();
+
103 
+
104  m_displayCount++;
+
105 
+
106  // print every second
+
107  if (curTime - m_firstDisplayTime > TimeValue::fromSec(1.f))
+
108  {
+
109  const float frameRate = static_cast<float>(m_displayCount) *
+
110  (curTime - m_firstDisplayTime).toCyclesPerSec();
+
111  printf("PerfTracker: display frame rate %.2f frames per second\n", frameRate);
+
112 
+
113  // restart measurement
+ +
115  m_displayCount = 0;
+
116  }
+
117  }
+
118  break;
+
119  default:
+
120  ORIGINATE_ERROR("Unhandled global event");
+
121  break;
+
122  }
+
123 
+
124  return true;
+
125 }
+
126 
+ +
128  : m_id(PerfTracker::getInstance().getNewSessionID())
+
129  , m_session(NULL)
+
130  , m_firstRequestReceivedTime(TimeValue::infinite())
+
131  , m_numberframesReceived(0)
+
132  , m_lastFrameCount(0)
+
133  , m_totalFrameDrop(0)
+
134  , m_minLatency(std::numeric_limits<uint64_t>::max())
+
135  , m_maxLatency(0)
+
136  , m_sumLatency(0)
+
137  , m_countLatency(0)
+
138  , m_previousSensorTime(0)
+
139  , m_minFramePeriod(std::numeric_limits<uint64_t>::max())
+
140  , m_maxFramePeriod(0)
+
141  , m_sumFramePeriod(0)
+
142  , m_countFramePeriod(-1)
+
143  , m_statsMinLatency(std::numeric_limits<uint64_t>::max())
+
144  , m_statsMaxLatency(0)
+
145  , m_statsSumLatency(0)
+
146  , m_statsCountLatency(0)
+
147  , m_statsMinFramePeriod(std::numeric_limits<uint64_t>::max())
+
148  , m_statsMaxFramePeriod(0)
+
149  , m_statsSumFramePeriod(0)
+
150  , m_statsCountFramePeriod(0)
+
151  , m_statsFrameDropCount(0)
+
152  , m_statsOutOfOrderCount(0)
+
153  , m_previousKpi(false)
+
154 {
+
155 }
+
156 
+ +
158 {
+
159  PROPAGATE_ERROR_CONTINUE(shutdown());
+
160 }
+
161 
+ +
163 {
+
164  if (m_eventThread)
+
165  {
+
166  PROPAGATE_ERROR_CONTINUE(m_eventThread->shutdown());
+
167  m_eventThread.reset();
+
168  }
+
169 
+
170  return true;
+
171 }
+
172 
+
173 bool SessionPerfTracker::setSession(Argus::CaptureSession *session)
+
174 {
+
175  m_session = session;
+
176  return true;
+
177 }
+
178 
+
179 bool SessionPerfTracker::onEvent(SessionEvent event, uint64_t value)
+
180 {
+
181  if (!Dispatcher::getInstance().m_kpi && !m_previousKpi)
+
182  return true;
+
183 
+
184  // switch kpi ON to OFF case
+
185  if (!Dispatcher::getInstance().m_kpi && m_previousKpi)
+
186  {
+
187  // take buffered info into account
+ + + + + + + + + + + + +
200 
+
201  // print stats during the enabling kpi period
+
202  printf("===== PerfTracker %d Stats from %" PRIu64 " frames =====\n",
+ +
204  printf("LATENCY : avg %.2f min %.2f max %.2f ms\n",
+ +
206  m_statsMinLatency / 1000.f, m_statsMaxLatency / 1000.f);
+
207  printf("FRAMEPERIOD : avg %.2f min %.2f max %.2f ms\n",
+ +
209  m_statsMinFramePeriod / 1000.f, m_statsMaxFramePeriod / 1000.f);
+
210  printf("FRAMEDROP : %d frames\n", m_statsFrameDropCount);
+
211  printf("OUT OF ORDER: %d frames\n", m_statsOutOfOrderCount);
+
212  printf("===============================================\n");
+
213 
+
214  // clean up stats
+ +
216  m_lastFrameCount = 0;
+
217  m_minLatency = std::numeric_limits<uint64_t>::max();
+
218  m_maxLatency = 0;
+
219  m_sumLatency = 0;
+
220  m_countLatency = 0;
+
221  m_minFramePeriod = std::numeric_limits<uint64_t>::max();
+
222  m_maxFramePeriod = 0;
+
223  m_sumFramePeriod= 0;
+
224  m_countFramePeriod = -1;
+
225  m_statsMinLatency = std::numeric_limits<uint64_t>::max();
+
226  m_statsMaxLatency = 0;
+
227  m_statsSumLatency = 0;
+ +
229  m_statsMinFramePeriod = std::numeric_limits<uint64_t>::max();
+ + + + + +
235 
+ +
237  return true;
+
238  }
+
239 
+ +
241  switch (event)
+
242  {
+ + +
245  printf("PerfTracker: app initial %" PRIu64 " ms\n",
+
246  (PerfTracker::getInstance().appInitializedTime() -
+
247  PerfTracker::getInstance().appStartTime()).toMSec());
+
248  printf("PerfTracker %d: app intialized to task start %" PRIu64 " ms\n", m_id,
+
249  (m_taskStartTime - PerfTracker::getInstance().appInitializedTime()).toMSec());
+
250  break;
+ +
252  // captures are about to start, create the event thread which collects information on the
+
253  // captures received
+
254  if (!m_eventThread)
+
255  {
+
256  m_eventThread.reset(new EventThread(m_session, this));
+
257  if (!m_eventThread)
+
258  ORIGINATE_ERROR("Failed to allocate EventThread");
+
259 
+
260  PROPAGATE_ERROR(m_eventThread->initialize());
+
261  PROPAGATE_ERROR(m_eventThread->waitRunning());
+
262  }
+
263 
+ +
265  printf("PerfTracker %d: task start to issue capture %" PRIu64 " ms\n", m_id,
+
266  (m_issueCaptureTime - m_taskStartTime).toMSec());
+
267  break;
+ + +
270  if (m_numberframesReceived == 0)
+
271  {
+ +
273  printf("PerfTracker %d: first request %" PRIu64 " ms\n", m_id,
+ +
275  printf("PerfTracker %d: total launch time %" PRIu64 " ms\n", m_id,
+
276  (m_firstRequestReceivedTime - PerfTracker::getInstance().appStartTime()).toMSec());
+
277  }
+
278 
+ +
280  // print only when receiving > 30 frames
+
281  if ((m_numberframesReceived % 30) == 2 && m_numberframesReceived >= 30)
+
282  {
+
283  const float frameRate =
+
284  static_cast<float>(m_numberframesReceived - 1) *
+ +
286  printf("PerfTracker %d: frameRate %.2f frames per second at %" PRIu64 " Seconds\n",
+
287  m_id,
+
288  frameRate,
+ +
290  }
+
291  break;
+ +
293  m_minLatency = (m_minLatency < value) ? m_minLatency : value;
+
294  m_maxLatency = (m_maxLatency < value) ? value : m_maxLatency;
+
295  m_sumLatency += value;
+
296  m_countLatency += 1;
+
297  if ((m_numberframesReceived % 30) == 6)
+
298  {
+
299  const uint64_t latencyAverage = m_sumLatency / m_countLatency;
+
300  printf("PerfTracker %d: latency %.1f ms average, min %.1f max %.1f" \
+
301  " from %" PRIu64 " frames\n",
+
302  m_id, latencyAverage / 1000.f, m_minLatency / 1000.f,
+
303  m_maxLatency / 1000.f, m_countLatency);
+
304 
+
305  // record all data in stats
+ + + + + + +
312 
+
313  m_minLatency = std::numeric_limits<uint64_t>::max();
+
314  m_maxLatency = 0;
+
315  m_sumLatency = 0;
+
316  m_countLatency = 0;
+
317  }
+
318  break;
+ +
320  {
+
321  // skip first run
+
322  if (m_countFramePeriod != -1)
+
323  {
+
324  // not record the old timestamp to m_previousSensorTime in this case
+
325  if (value < m_previousSensorTime)
+
326  {
+
327  printf("PerfTracker %d: warning: receive a frame out of order\n", m_id);
+ +
329  break;
+
330  }
+
331  const uint64_t framePeriod = value - m_previousSensorTime;
+
332  m_minFramePeriod = (m_minFramePeriod < framePeriod) ?
+
333  m_minFramePeriod : framePeriod;
+
334  m_maxFramePeriod = (m_maxFramePeriod < framePeriod) ?
+
335  framePeriod : m_maxFramePeriod;
+
336  m_sumFramePeriod += framePeriod;
+
337  m_countFramePeriod += 1;
+
338  if ((m_numberframesReceived % 30) == 6)
+
339  {
+
340  const uint64_t framePeriodAverage = m_sumFramePeriod / m_countFramePeriod;
+
341  printf("PerfTracker %d: frame period %.1f ms average, min %.1f" \
+
342  " max %.1f from %" PRId64 " frames\n",
+
343  m_id, framePeriodAverage / 1000.f, m_minFramePeriod / 1000.f,
+
344  m_maxFramePeriod / 1000.f, m_countFramePeriod + 1);
+
345 
+
346  // record all data in stats
+ + + + + + +
353 
+
354  m_minFramePeriod = std::numeric_limits<uint64_t>::max();
+
355  m_maxFramePeriod = 0;
+
356  m_sumFramePeriod= 0;
+
357  m_countFramePeriod = -1;
+
358  m_previousSensorTime = 0;
+
359  }
+
360  }
+
361  else
+
362  {
+
363  m_countFramePeriod += 1;
+
364  }
+
365 
+
366  m_previousSensorTime = value;
+
367  break;
+
368  }
+ +
370  {
+
371  const TimeValue currentTime = getCurrentTime();
+
372  const uint64_t currentFrameCount = value;
+
373  int64_t currentFrameDrop = 0;
+
374  // start frame drop count from 2nd frame
+
375  if (m_lastFrameCount > 0)
+
376  {
+
377  // currentFrameDrop can be negative when metadata comes out of order
+
378  currentFrameDrop = currentFrameCount - m_lastFrameCount - 1;
+
379  m_totalFrameDrop += currentFrameDrop;
+
380  }
+
381  if (currentFrameDrop != 0)
+
382  {
+
383  printf("PerfTracker %d: framedrop current request %" PRId64 ", total %" PRId64
+
384  ", Drop at %" PRIu64 " Seconds !\n",
+
385  m_id, currentFrameDrop,
+ +
387  (currentTime - m_firstRequestReceivedTime).toSec());
+
388  m_statsFrameDropCount += currentFrameDrop;
+
389  }
+
390  else
+
391  {
+
392  if ((m_numberframesReceived % 30) == 4)
+
393  {
+
394  printf("PerfTracker %d: framedrop current request %" PRId64 ", total %"
+
395  PRId64 "\n",
+
396  m_id, currentFrameDrop,
+ +
398  }
+
399  }
+
400 
+
401  m_lastFrameCount = currentFrameCount;
+
402  break;
+
403  }
+ + +
406  // captures are about to be stopped, destroy the event thread.
+
407  if (m_eventThread)
+
408  {
+
409  PROPAGATE_ERROR(m_eventThread->shutdown());
+
410  m_eventThread.reset();
+
411  }
+
412  break;
+ + +
415  printf("PerfTracker %d: flush takes %" PRIu64 " ms\n", m_id,
+ +
417  break;
+ + +
420  printf("PerfTracker %d: device close takes %" PRIu64 " ms\n", m_id,
+
421  (m_closeDoneTime - m_flushDoneTime).toMSec());
+
422  printf("PerfTracker %d: total close takes %" PRIu64 " ms\n", m_id,
+ +
424  break;
+
425  default:
+
426  ORIGINATE_ERROR("Unhandled session event");
+
427  break;
+
428  }
+
429 
+
430  return true;
+
431 }
+
432 
+
433 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8h.html new file mode 100644 index 0000000..965dd5f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8h.html @@ -0,0 +1,146 @@ + + + + + +Argus Camera Sample: modules/PerfTracker.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
PerfTracker.h File Reference
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8h_source.html new file mode 100644 index 0000000..864485d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/PerfTracker_8h_source.html @@ -0,0 +1,311 @@ + + + + + +Argus Camera Sample: modules/PerfTracker.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
PerfTracker.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef PERFTRACKER_H
+
30 #define PERFTRACKER_H
+
31 
+
32 #include <stddef.h>
+
33 
+
34 #include "Util.h" // for TimeValue
+
35 #include "Ordered.h"
+
36 #include "UniquePointer.h"
+
37 
+
38 namespace Argus { class CaptureSession; }
+
39 
+
40 namespace ArgusSamples
+
41 {
+
42 
+
43 class EventThread;
+
44 
+
45 /**
+
46  * Global events
+
47  */
+ +
49 {
+ + + +
53 };
+
54 
+
55 /**
+
56  * Used to track global performance events.
+
57  */
+ +
59 {
+
60 public:
+
61  /**
+
62  * Get the window instance.
+
63  */
+
64  static PerfTracker &getInstance();
+
65 
+
66  /**
+
67  * Trigger a global event.
+
68  *
+
69  * @param type [in] event type
+
70  */
+
71  bool onEvent(GlobalEvent event);
+
72 
+
73  /**
+
74  * @returns the point in time when the app had been started
+
75  */
+
76  const TimeValue& appStartTime() const
+
77  {
+
78  return m_appStartTime;
+
79  }
+
80 
+
81  /**
+
82  * @returns the point in time when app initialization finished
+
83  */
+ +
85  {
+
86  return m_appInitializedTime;
+
87  }
+
88 
+
89  /**
+
90  * @returns a new session Id
+
91  */
+
92  uint32_t getNewSessionID()
+
93  {
+
94  return ++m_sessionId;
+
95  }
+
96 
+
97 private:
+
98  PerfTracker();
+
99  ~PerfTracker();
+
100 
+
101  // this is a singleton, hide copy constructor etc.
+
102  PerfTracker(const PerfTracker&);
+ +
104 
+
105  bool initialize();
+
106 
+
107  // global performance values
+ + +
110 
+
111  TimeValue m_firstDisplayTime; //< time at which the first display event had been received
+
112  uint64_t m_displayCount; //< display events since first display time
+
113 
+
114  Ordered<uint32_t> m_sessionId;
+
115 };
+
116 
+
117 /**
+
118  * Session events
+
119  */
+ +
121 {
+ + + + + + + + + +
131 };
+
132 
+
133 /**
+
134  * Used to track session performance events.
+
135  */
+ +
137 {
+
138 public:
+ + +
141 
+
142  /**
+
143  * Shutdown the session performance tracker.
+
144  */
+
145  bool shutdown();
+
146 
+
147  /**
+
148  * Set the capture session to track. If not set the internal dispatcher session is tracked.
+
149  *
+
150  * @param session [in] capture session
+
151  */
+
152  bool setSession(Argus::CaptureSession *session);
+
153 
+
154  /**
+
155  * Trigger a session event.
+
156  *
+
157  * @param type [in] event type
+
158  * @param type [in] event type
+
159  */
+
160  bool onEvent(SessionEvent event, uint64_t value = 0);
+
161 
+
162 private:
+
163  uint32_t m_id;
+
164 
+
165  Argus::CaptureSession *m_session;
+
166  UniquePointer<EventThread> m_eventThread;
+
167 
+ + + +
171 
+ + +
174 
+ + + +
178 
+ + +
181 
+
182  uint64_t m_minLatency;
+
183  uint64_t m_maxLatency;
+
184  uint64_t m_sumLatency;
+
185  uint64_t m_countLatency;
+
186 
+ + + + + +
192 
+ + + + + + + + + + +
203 
+ +
205 };
+
206 
+
207 
+
208 }; // namespace ArgusSamples
+
209 
+
210 #endif //PERFTRACKER_H
+
211 
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ScopedGuard_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ScopedGuard_8h.html new file mode 100644 index 0000000..9fb39e9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ScopedGuard_8h.html @@ -0,0 +1,115 @@ + + + + + +Argus Camera Sample: common/ScopedGuard.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ScopedGuard.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::ScopedGuard< T >
 RAII-syle class performing an action when control flow leaves the scope. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ScopedGuard_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ScopedGuard_8h_source.html new file mode 100644 index 0000000..01a7f67 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ScopedGuard_8h_source.html @@ -0,0 +1,202 @@ + + + + + +Argus Camera Sample: common/ScopedGuard.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ScopedGuard.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef SCOPED_GUARD_H
+
30 #define SCOPED_GUARD_H
+
31 
+
32 namespace ArgusSamples
+
33 {
+
34 
+
35 /**
+
36  * RAII-syle class performing an action when control flow leaves the scope. Typically the action
+
37  * to be performed is to undo a previous action in case of an error.
+
38  */
+
39 template <typename T> class ScopedGuard
+
40 {
+
41 public:
+
42  /**
+
43  * Action function type.
+
44  */
+
45  typedef bool (T::*ActionType)();
+
46 
+
47  /**
+
48  * Constructor
+
49  *
+
50  * @param object [in] the object to perform the action on
+
51  * @param action [in] the action to perform
+
52  */
+
53  ScopedGuard(T *object, ActionType action)
+
54  : m_object(object)
+
55  , m_action(action)
+
56  {
+
57  }
+
58  /**
+
59  * Destructor
+
60  */
+ +
62  {
+
63  leaveScope();
+
64  }
+
65 
+
66  /**
+
67  * Cancel the action associated with this instance.
+
68  */
+
69  void cancel()
+
70  {
+
71  m_action = NULL;
+
72  }
+
73 
+
74 private:
+ + +
77 
+
78  /**
+
79  * Called when leaving the scope. Calls action and resets the action.
+
80  */
+
81  void leaveScope()
+
82  {
+
83  if (m_action && m_object)
+
84  {
+
85  if (!(m_object->*m_action)())
+
86  REPORT_ERROR("Action call failed");
+
87  m_object = NULL;
+
88  m_action = NULL;
+
89  }
+
90  }
+
91 
+
92  /**
+
93  * Hide default/copy constructor and assignment operator
+
94  */
+
95  ScopedGuard();
+
96  ScopedGuard(ScopedGuard &other);
+
97  const ScopedGuard& operator = (const ScopedGuard&);
+
98 };
+
99 
+
100 } // namespace ArgusSamples
+
101 
+
102 #endif // SCOPED_GUARD_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8cpp.html new file mode 100644 index 0000000..8798a49 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8cpp.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: modules/tasks/StillCapture.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
StillCapture.cpp File Reference
+
+
+
#include <sstream>
+#include <iomanip>
+#include <unistd.h>
+#include "StillCapture.h"
+#include "Composer.h"
+#include "Dispatcher.h"
+#include "Error.h"
+#include "PerfTracker.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8cpp_source.html new file mode 100644 index 0000000..1ff16b4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8cpp_source.html @@ -0,0 +1,488 @@ + + + + + +Argus Camera Sample: modules/tasks/StillCapture.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
StillCapture.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 
+
30 #include <sstream>
+
31 #include <iomanip>
+
32 #include <unistd.h>
+
33 
+
34 #include "StillCapture.h"
+
35 #include "Composer.h"
+
36 #include "Dispatcher.h"
+
37 #include "Error.h"
+
38 #include "PerfTracker.h"
+
39 
+
40 namespace ArgusSamples
+
41 {
+
42 
+ +
44  : m_initialized(false)
+
45  , m_running(false)
+
46  , m_wasRunning(false)
+
47  , m_prevRunning(false)
+
48  , m_captureIndex(0)
+
49 {
+
50 }
+
51 
+ +
53 {
+
54  shutdown();
+
55 }
+
56 
+ +
58 {
+
59  if (m_initialized)
+
60  return true;
+
61 
+
62  Dispatcher &dispatcher = Dispatcher::getInstance();
+
63 
+
64  PROPAGATE_ERROR(dispatcher.m_deviceOpen.registerObserver(this,
+
65  static_cast<IObserver::CallbackFunction>(&TaskStillCapture::onDeviceOpenChanged)));
+
66  PROPAGATE_ERROR(dispatcher.m_sensorModeValid.registerObserver(this,
+
67  static_cast<IObserver::CallbackFunction>(&TaskStillCapture::onSensorModeValidChanged)));
+
68  PROPAGATE_ERROR(dispatcher.m_outputSize.registerObserver(this,
+
69  static_cast<IObserver::CallbackFunction>(&TaskStillCapture::restartStreams)));
+
70  PROPAGATE_ERROR(dispatcher.m_captureYuvFormat.registerObserver(this,
+
71  static_cast<IObserver::CallbackFunction>(&TaskStillCapture::restartStreams)));
+
72 
+
73 
+
74  m_perfTracker.reset(new SessionPerfTracker());
+
75  if (!m_perfTracker)
+
76  ORIGINATE_ERROR("Out of memory");
+
77 
+
78  m_initialized = true;
+
79 
+
80  return true;
+
81 }
+
82 
+
83 bool TaskStillCapture::restartStreams(__attribute__((unused)) const Observed &source)
+
84 {
+
85  if (m_running)
+
86  {
+
87  PROPAGATE_ERROR(stop());
+
88  PROPAGATE_ERROR(start());
+
89  }
+
90  return true;
+
91 }
+
92 
+
93 bool TaskStillCapture::onDeviceOpenChanged(const Observed &source)
+
94 {
+
95  const bool isOpen = static_cast<const Value<bool>&>(source).get();
+
96 
+
97  // If the current device is closed the request needs to be recreated on the new device. Stop
+
98  // and then start when the device is opened again.
+
99  if (!isOpen)
+
100  {
+ +
102  PROPAGATE_ERROR(stop());
+
103  }
+
104  else if (m_wasRunning)
+
105  {
+
106  m_wasRunning = false;
+
107  PROPAGATE_ERROR(start());
+
108  }
+
109 
+
110  return true;
+
111 }
+
112 
+
113 bool TaskStillCapture::onSensorModeValidChanged(const Observed &source)
+
114 {
+
115  const bool isTrue = static_cast<const Value<bool>&>(source).get();
+
116 
+
117  if (!isTrue)
+
118  {
+ +
120  if (m_running)
+
121  {
+
122  PROPAGATE_ERROR(stop());
+
123  }
+
124  }
+
125  else if (m_prevRunning)
+
126  {
+
127  m_prevRunning = false;
+
128  PROPAGATE_ERROR(start());
+
129  }
+
130 
+
131  return true;
+
132 }
+
133 
+ +
135 {
+
136  if (!m_initialized)
+
137  ORIGINATE_ERROR("Not initialized");
+
138 
+
139  if (m_running)
+
140  return true;
+
141 
+
142  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_TASK_START));
+
143 
+
144  Dispatcher &dispatcher = Dispatcher::getInstance();
+
145  Composer &composer = Composer::getInstance();
+
146 
+
147  PROPAGATE_ERROR(dispatcher.createRequest(m_previewRequest, Argus::CAPTURE_INTENT_PREVIEW));
+
148 
+
149  // Create the preview stream
+
150  PROPAGATE_ERROR(dispatcher.createOutputStream(m_previewRequest.get(), false, m_previewStream));
+
151 
+
152  Argus::IEGLOutputStream *iEGLOutputStream =
+
153  Argus::interface_cast<Argus::IEGLOutputStream>(m_previewStream);
+
154  if (!iEGLOutputStream)
+
155  ORIGINATE_ERROR("Failed to get IEGLOutputStream interface");
+
156 
+
157  // render the preview stream
+
158  PROPAGATE_ERROR(composer.bindStream(iEGLOutputStream->getEGLStream()));
+
159 
+
160  const Argus::Size2D<uint32_t> streamSize = iEGLOutputStream->getResolution();
+
161  PROPAGATE_ERROR(composer.setStreamAspectRatio(iEGLOutputStream->getEGLStream(),
+
162  (float)streamSize.width() / (float)streamSize.height()));
+
163  PROPAGATE_ERROR(composer.setStreamActive(iEGLOutputStream->getEGLStream(), true));
+
164 
+
165  // Enable the preview stream
+
166  PROPAGATE_ERROR(dispatcher.enableOutputStream(m_previewRequest.get(), m_previewStream.get()));
+
167 
+
168  // start the repeating request for the preview
+
169  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_ISSUE_CAPTURE));
+
170  PROPAGATE_ERROR(dispatcher.startRepeat(m_previewRequest.get()));
+
171 
+
172  m_running = true;
+
173 
+
174  return true;
+
175 }
+
176 
+ +
178 {
+
179  if (!m_initialized)
+
180  ORIGINATE_ERROR("Not initialized");
+
181 
+
182  if (!m_running)
+
183  return true;
+
184 
+
185  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_REQUESTED));
+
186 
+
187  Dispatcher &dispatcher = Dispatcher::getInstance();
+
188 
+
189  // stop the repeating request
+
190  PROPAGATE_ERROR(dispatcher.stopRepeat());
+
191 
+
192  PROPAGATE_ERROR(dispatcher.waitForIdle());
+
193  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_FLUSH_DONE));
+
194 
+
195  // disable the output stream
+
196  PROPAGATE_ERROR(dispatcher.disableOutputStream(m_previewRequest.get(), m_previewStream.get()));
+
197 
+
198  Argus::IEGLOutputStream *iEGLOutputStream =
+
199  Argus::interface_cast<Argus::IEGLOutputStream>(m_previewStream);
+
200  if (!iEGLOutputStream)
+
201  ORIGINATE_ERROR("Failed to get IEGLOutputStream interface");
+
202 
+
203  // disconnect the EGL stream
+
204  iEGLOutputStream->disconnect();
+
205 
+
206  // unbind the preview stream from the composer
+
207  PROPAGATE_ERROR(Composer::getInstance().unbindStream(iEGLOutputStream->getEGLStream()));
+
208 
+
209  // destroy the preview stream
+
210  m_previewStream.reset();
+
211 
+
212  // destroy the preview request
+
213  PROPAGATE_ERROR(m_previewRequest.reset());
+
214 
+
215  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_DONE));
+
216 
+
217  m_running = false;
+
218 
+
219  return true;
+
220 }
+
221 
+ +
223 {
+
224  if (!m_initialized)
+
225  ORIGINATE_ERROR("Not initialized");
+
226  if (!m_running)
+
227  ORIGINATE_ERROR("Not running");
+
228 
+
229  Dispatcher &dispatcher = Dispatcher::getInstance();
+
230 
+ +
232  PROPAGATE_ERROR(dispatcher.createRequest(stillRequest, Argus::CAPTURE_INTENT_STILL_CAPTURE));
+
233 
+
234  // Create the still stream
+
235  Argus::UniqueObj<Argus::OutputStream> stillStream;
+
236  PROPAGATE_ERROR(dispatcher.createOutputStream(stillRequest.get(), true, stillStream));
+
237 
+
238  // Enable the still stream
+
239  PROPAGATE_ERROR(dispatcher.enableOutputStream(stillRequest.get(), stillStream.get()));
+
240 
+
241  // Create the frame consumer
+
242  Argus::UniqueObj<EGLStream::FrameConsumer> consumer(
+
243  EGLStream::FrameConsumer::create(stillStream.get()));
+
244  EGLStream::IFrameConsumer *iFrameConsumer =
+
245  Argus::interface_cast<EGLStream::IFrameConsumer>(consumer);
+
246  if (!iFrameConsumer)
+
247  ORIGINATE_ERROR("Failed to create FrameConsumer");
+
248 
+
249  // do the capture
+
250  PROPAGATE_ERROR(dispatcher.capture(stillRequest.get()));
+
251 
+
252  // aquire the frame
+
253  Argus::UniqueObj<EGLStream::Frame> frame(iFrameConsumer->acquireFrame());
+
254  if (!frame)
+
255  ORIGINATE_ERROR("Failed to aquire frame");
+
256 
+
257  // Use the IFrame interface to provide access to the Image in the Frame.
+
258  EGLStream::IFrame *iFrame = Argus::interface_cast<EGLStream::IFrame>(frame);
+
259  if (!iFrame)
+
260  ORIGINATE_ERROR("Failed to get IFrame interface.");
+
261 
+
262  EGLStream::Image *image = iFrame->getImage();
+
263  if (!image)
+
264  ORIGINATE_ERROR("Failed to get image.");
+
265 
+
266  switch (dispatcher.m_stillFileType.get())
+
267  {
+
268  case STILL_FILE_TYPE_JPG:
+
269  {
+
270  // Get the JPEG interface.
+
271  EGLStream::IImageJPEG *iJPEG =
+
272  Argus::interface_cast<EGLStream::IImageJPEG>(image);
+
273  if (!iJPEG)
+
274  ORIGINATE_ERROR("Failed to get IImageJPEG interface.");
+
275 
+
276  // build the file name
+
277  std::ostringstream fileName;
+
278  fileName << dispatcher.m_outputPath.get();
+
279  if (dispatcher.m_outputPath.get() != "/dev/null")
+
280  fileName << "/image" << std::setfill('0') << std::setw(4) <<
+
281  m_captureIndex << ".jpg";
+
282 
+
283  PROPAGATE_ERROR(validateOutputPath(fileName.str().c_str()));
+
284 
+
285  // Write a JPEG to disk.
+
286  if (iJPEG->writeJPEG(fileName.str().c_str()) == Argus::STATUS_OK)
+
287  {
+
288  PROPAGATE_ERROR(dispatcher.message("Captured a still image to '%s'\n",
+
289  fileName.str().c_str()));
+
290  }
+
291  else
+
292  {
+
293  ORIGINATE_ERROR("Failed to write JPEG to '%s'\n", fileName.str().c_str());
+
294  }
+
295  }
+
296  break;
+
297 
+ +
299  {
+
300  // Get the HEADERLESS_FILE interface.
+
301  EGLStream::IImageHeaderlessFile *iHeaderlessFile =
+
302  Argus::interface_cast<EGLStream::IImageHeaderlessFile>(image);
+
303  if (!iHeaderlessFile)
+
304  ORIGINATE_ERROR("Failed to get IImageHeaderlessFile interface.");
+
305 
+
306  EGLStream::IImage2D *i2D =
+
307  Argus::interface_cast<EGLStream::IImage2D>(image);
+
308  if (!i2D)
+
309  ORIGINATE_ERROR("Failed to get IImage2D interface.");
+
310  const Argus::Size2D<uint32_t> size = i2D->getSize();
+
311 
+
312  // build the file name
+
313  std::ostringstream fileName;
+
314  fileName << dispatcher.m_outputPath.get();
+
315  if (dispatcher.m_outputPath.get() != "/dev/null")
+
316  {
+
317  fileName << "/image_" <<
+
318  size.width() << "x" << size.height() << "_" <<
+
319  std::setfill('0') << std::setw(4) << m_captureIndex <<
+
320  "." << dispatcher.m_captureYuvFormat.toString();
+
321  }
+
322 
+
323  PROPAGATE_ERROR(validateOutputPath(fileName.str().c_str()));
+
324 
+
325  // Write a headerless, unencoded image to disk.
+
326  if (iHeaderlessFile->writeHeaderlessFile(fileName.str().c_str()) == Argus::STATUS_OK)
+
327  {
+
328  PROPAGATE_ERROR(dispatcher.message("Captured a still image to '%s'\n",
+
329  fileName.str().c_str()));
+
330  }
+
331  else
+
332  {
+
333  ORIGINATE_ERROR("Failed to write headerless raw image to '%s'\n",
+
334  fileName.str().c_str());
+
335  }
+
336  }
+
337  break;
+
338 
+
339  default:
+
340  ORIGINATE_ERROR("unknown still image file type");
+
341  }
+
342 
+
343  ++m_captureIndex;
+
344 
+
345  // release the frame.
+
346  frame.reset();
+
347 
+
348  // destroy the still stream
+
349  PROPAGATE_ERROR(dispatcher.disableOutputStream(stillRequest.get(), stillStream.get()));
+
350  stillStream.reset();
+
351 
+
352  // destroy the still request
+
353  PROPAGATE_ERROR(stillRequest.reset());
+
354 
+
355  // destroy the still consumer
+
356  consumer.reset();
+
357 
+
358  return true;
+
359 }
+
360 
+ +
362 {
+
363  if (!m_initialized)
+
364  return true;
+
365 
+
366  // stop the module
+
367  PROPAGATE_ERROR_CONTINUE(stop());
+
368 
+
369  PROPAGATE_ERROR_CONTINUE(m_perfTracker->shutdown());
+
370  m_perfTracker.reset();
+
371 
+
372  Dispatcher &dispatcher = Dispatcher::getInstance();
+
373 
+
374  PROPAGATE_ERROR_CONTINUE(dispatcher.m_outputSize.unregisterObserver(this,
+
375  static_cast<IObserver::CallbackFunction>(&TaskStillCapture::restartStreams)));
+
376  PROPAGATE_ERROR_CONTINUE(dispatcher.m_sensorModeValid.unregisterObserver(this,
+
377  static_cast<IObserver::CallbackFunction>(&TaskStillCapture::onSensorModeValidChanged)));
+
378  PROPAGATE_ERROR_CONTINUE(dispatcher.m_deviceOpen.unregisterObserver(this,
+
379  static_cast<IObserver::CallbackFunction>(&TaskStillCapture::onDeviceOpenChanged)));
+
380  PROPAGATE_ERROR_CONTINUE(dispatcher.m_captureYuvFormat.unregisterObserver(this,
+
381  static_cast<IObserver::CallbackFunction>(&TaskStillCapture::restartStreams)));
+
382 
+
383  m_initialized = false;
+
384 
+
385  return true;
+
386 }
+
387 
+
388 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8h.html new file mode 100644 index 0000000..f10e8f4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8h.html @@ -0,0 +1,121 @@ + + + + + +Argus Camera Sample: modules/tasks/StillCapture.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
StillCapture.h File Reference
+
+
+
#include <Argus/Argus.h>
+#include <EGLStream/EGLStream.h>
+#include "ITask.h"
+#include "UniquePointer.h"
+#include "IObserver.h"
+#include "TrackedUniqueObject.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::TaskStillCapture
 This task captures still images. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8h_source.html new file mode 100644 index 0000000..730ecb8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StillCapture_8h_source.html @@ -0,0 +1,195 @@ + + + + + +Argus Camera Sample: modules/tasks/StillCapture.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
StillCapture.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef TASK_STILL_CAPTURE_H
+
30 #define TASK_STILL_CAPTURE_H
+
31 
+
32 #include <Argus/Argus.h>
+
33 #include <EGLStream/EGLStream.h>
+
34 
+
35 #include "ITask.h"
+
36 #include "UniquePointer.h"
+
37 #include "IObserver.h"
+
38 #include "TrackedUniqueObject.h"
+
39 
+
40 namespace ArgusSamples
+
41 {
+
42 
+
43 class SessionPerfTracker;
+
44 
+
45 /**
+
46  * This task captures still images
+
47  */
+
48 class TaskStillCapture : public ITask, public IObserver
+
49 {
+
50 public:
+ +
52  virtual ~TaskStillCapture();
+
53 
+
54  virtual bool initialize();
+
55  virtual bool shutdown();
+
56 
+
57  virtual bool start();
+
58  virtual bool stop();
+
59 
+
60  /**
+
61  * Capture one image
+
62  */
+
63  bool execute();
+
64 
+
65 private:
+
66  bool m_initialized; ///< set if initialized
+
67  bool m_running; ///< set if preview is running
+
68  bool m_wasRunning; ///< set if was running before the device had been closed
+
69  bool m_prevRunning; ///< set if was running before the sensorModeValid is set to false
+
70  uint32_t m_captureIndex; ///< Incrementing capture index
+
71 
+
72  UniquePointer<SessionPerfTracker> m_perfTracker;
+
73 
+ +
75  Argus::UniqueObj<Argus::OutputStream> m_previewStream; ///< Argus preview stream
+
76 
+
77  /**
+
78  * Callback when the device is opened/closed.
+
79  */
+
80  bool onDeviceOpenChanged(const Observed &source);
+
81 
+
82  /**
+
83  * Callback when the sensorModeValid is changed.
+
84  */
+
85  bool onSensorModeValidChanged(const Observed &source);
+
86 
+
87  /**
+
88  * Restart when output size changes
+
89  */
+
90  bool restartStreams(const Observed &source);
+
91 };
+
92 
+
93 }; // namespace ArgusSamples
+
94 
+
95 #endif // TASK_STILL_CAPTURE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8cpp.html new file mode 100644 index 0000000..6e6d3b7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8cpp.html @@ -0,0 +1,136 @@ + + + + + +Argus Camera Sample: renderer/StreamConsumer.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
StreamConsumer.cpp File Reference
+
+
+
#include <GLES3/gl31.h>
+#include <GLES2/gl2ext.h>
+#include <unistd.h>
+#include "StreamConsumer.h"
+#include "Composer.h"
+#include "Error.h"
+#include "Util.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+ + +

+Macros

#define GL_GLEXT_PROTOTYPES
+

Macro Definition Documentation

+ +
+
+ + + + +
#define GL_GLEXT_PROTOTYPES
+
+ +

Definition at line 29 of file StreamConsumer.cpp.

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8cpp_source.html new file mode 100644 index 0000000..75e01ba --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8cpp_source.html @@ -0,0 +1,272 @@ + + + + + +Argus Camera Sample: renderer/StreamConsumer.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
StreamConsumer.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #define GL_GLEXT_PROTOTYPES
+
30 
+
31 #include <GLES3/gl31.h>
+
32 #include <GLES2/gl2ext.h>
+
33 
+
34 #include <unistd.h>
+
35 
+
36 #include "StreamConsumer.h"
+
37 #include "Composer.h"
+
38 #include "Error.h"
+
39 #include "Util.h" // for TimeValue
+
40 
+
41 namespace ArgusSamples
+
42 {
+
43 
+
44 StreamConsumer::StreamConsumer(EGLStreamKHR eglStream)
+
45  : m_initialized(false)
+
46  , m_eglStream(eglStream)
+
47  , m_streamState(EGL_NONE)
+
48  , m_streamTexture(0)
+
49  , m_aspectRatio(1.0f)
+
50 {
+
51 }
+
52 
+ +
54 {
+
55  if (!shutdown())
+
56  REPORT_ERROR("Failed to shutdown stream consumer");
+
57 }
+
58 
+ +
60 {
+
61  if (m_initialized)
+
62  return true;
+
63 
+
64  // Create an external texture and connect it to the stream as a the consumer.
+
65  glGenTextures(1, &m_streamTexture);
+
66  if (m_streamTexture == 0)
+
67  ORIGINATE_ERROR("Failed to create GL texture");
+
68 
+
69  glBindTexture(GL_TEXTURE_EXTERNAL_OES, m_streamTexture);
+
70  if (!eglStreamConsumerGLTextureExternalKHR(Composer::getInstance().getEGLDisplay(),
+
71  m_eglStream))
+
72  {
+
73  ORIGINATE_ERROR("Unable to connect GL as consumer");
+
74  }
+
75  glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);
+
76 
+
77  m_initialized = true;
+
78 
+
79  return true;
+
80 }
+
81 
+ +
83 {
+
84  if (m_streamTexture)
+
85  {
+
86  glDeleteTextures(1, &m_streamTexture);
+
87  m_streamTexture = 0;
+
88  }
+
89 
+
90  m_initialized = false;
+
91 
+
92  return true;
+
93 }
+
94 
+
95 bool StreamConsumer::isEGLStream(EGLStreamKHR eglStream) const
+
96 {
+
97  return (m_eglStream == eglStream);
+
98 }
+
99 
+ +
101 {
+
102  return m_streamTexture;
+
103 }
+
104 
+ +
106 {
+
107  m_aspectRatio = aspectRatio;
+
108  return true;
+
109 }
+
110 
+ +
112 {
+
113  return m_aspectRatio;
+
114 }
+
115 
+
116 bool StreamConsumer::acquire(bool *acquiredNewFrame)
+
117 {
+
118  if (!m_initialized)
+
119  PROPAGATE_ERROR(initialize());
+
120 
+
121  const EGLDisplay display = Composer::getInstance().getEGLDisplay();
+
122 
+
123  // check the stream state
+
124  if (!eglQueryStreamKHR(display, m_eglStream, EGL_STREAM_STATE_KHR, &m_streamState))
+
125  ORIGINATE_ERROR("eglQueryStreamKHR failed (error 0x%04x)", eglGetError());
+
126 
+
127  if ((m_streamState == EGL_BAD_STREAM_KHR) ||
+
128  (m_streamState == EGL_BAD_STATE_KHR))
+
129  {
+
130  ORIGINATE_ERROR("EGL stream is in bad state (0x%04x)", m_streamState);
+
131  }
+
132  else if (m_streamState == EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR)
+
133  {
+
134  // acquire the new frame
+
135  if (!eglStreamConsumerAcquireKHR(display, m_eglStream))
+
136  {
+
137  // if the acquire failed check if the stream had been disconnected
+
138  const EGLint eglError = eglGetError();
+
139  if (eglError == EGL_BAD_STATE_KHR)
+
140  m_streamState = EGL_BAD_STATE_KHR;
+
141  else
+
142  ORIGINATE_ERROR("Failed to acquire from egl stream (error 0x%04x)", eglError);
+
143  }
+
144  else
+
145  {
+
146  if (acquiredNewFrame)
+
147  *acquiredNewFrame = true;
+
148  }
+
149  }
+
150  else if ((m_streamState == EGL_NONE) ||
+
151  (m_streamState == EGL_STREAM_STATE_CONNECTING_KHR))
+
152  {
+
153  // if the producer is not yet connected just return
+
154  }
+
155  else if ((m_streamState == EGL_STREAM_STATE_EMPTY_KHR) ||
+
156  (m_streamState == EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR))
+
157  {
+
158  // no frame or no new frame, nothing to do
+
159  }
+
160  else if (m_streamState == EGL_STREAM_STATE_DISCONNECTED_KHR)
+
161  {
+
162  // producer had been disconnected, ignore
+
163  }
+
164  else
+
165  {
+
166  ORIGINATE_ERROR("Unhandled EGL stream state (0x%04x)", m_streamState);
+
167  }
+
168 
+
169  return true;
+
170 }
+
171 
+
172 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8h.html new file mode 100644 index 0000000..b00293c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: renderer/StreamConsumer.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
StreamConsumer.h File Reference
+
+
+
#include <EGL/egl.h>
+#include <EGL/eglext.h>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::StreamConsumer
 The stream consumer is connecting to a EGL stream and consumes the frames into a GL texture. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8h_source.html new file mode 100644 index 0000000..aaf6e42 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/StreamConsumer_8h_source.html @@ -0,0 +1,186 @@ + + + + + +Argus Camera Sample: renderer/StreamConsumer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
StreamConsumer.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef STREAM_CONSUMER_H
+
30 #define STREAM_CONSUMER_H
+
31 
+
32 #include <EGL/egl.h>
+
33 #include <EGL/eglext.h>
+
34 
+
35 namespace ArgusSamples
+
36 {
+
37 
+
38 /**
+
39  * The stream consumer is connecting to a EGL stream and consumes the frames into a GL texture.
+
40  */
+ +
42 {
+
43 public:
+
44  explicit StreamConsumer(EGLStreamKHR eglStream);
+ +
46 
+
47  bool initialize();
+
48  bool shutdown();
+
49 
+
50  bool isEGLStream(EGLStreamKHR eglStream) const;
+
51  uint32_t getStreamTextureID() const;
+
52 
+
53  bool setStreamAspectRatio(float aspectRatio);
+
54  float getStreamAspectRatio() const;
+
55 
+
56  /**
+
57  * @returns the cached stream state
+
58  */
+
59  EGLint getStreamState() const
+
60  {
+
61  return m_streamState;
+
62  }
+
63 
+
64  /**
+
65  * Check the stream state and acquire a new frame if available
+
66  *
+
67  * @param acquiredNewFrame [out] set to true if a new frame had been acquired
+
68  */
+
69  bool acquire(bool *acquiredNewFrame);
+
70 
+
71 private:
+ +
73  EGLStreamKHR m_eglStream;
+
74  EGLint m_streamState; ///< cached stream state
+
75  uint32_t m_streamTexture;
+
76  float m_aspectRatio; ///< aspect ration of the images transported by the stream
+
77 
+
78  /**
+
79  * Hide default constructor
+
80  */
+ +
82 };
+
83 
+
84 }; // namespace ArgusSamples
+
85 
+
86 #endif // STREAM_CONSUMER_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/TrackedUniqueObject_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/TrackedUniqueObject_8h.html new file mode 100644 index 0000000..380a567 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/TrackedUniqueObject_8h.html @@ -0,0 +1,118 @@ + + + + + +Argus Camera Sample: modules/TrackedUniqueObject.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
TrackedUniqueObject.h File Reference
+
+
+
#include "Error.h"
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  ArgusSamples::Tracker< T >
 A class tracking an Argus object through the TrackedUniqueObj below. More...
class  ArgusSamples::TrackedUniqueObj< T >
 This class helps track construction and destruction of Argus objects. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/TrackedUniqueObject_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/TrackedUniqueObject_8h_source.html new file mode 100644 index 0000000..2bcb1cb --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/TrackedUniqueObject_8h_source.html @@ -0,0 +1,224 @@ + + + + + +Argus Camera Sample: modules/TrackedUniqueObject.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
TrackedUniqueObject.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef ARGUS_APPS_CAMERA_UI_COMMON_TRACKEDUNIQUEOBJECT_H
+
30 #define ARGUS_APPS_CAMERA_UI_COMMON_TRACKEDUNIQUEOBJECT_H
+
31 
+
32 #include "Error.h"
+
33 
+
34 namespace ArgusSamples
+
35 {
+
36 
+
37 /**
+
38  * A class tracking an Argus object through the TrackedUniqueObj below. The track/untrack functions
+
39  * are called whenever an Argus object is assigend to/removed from the TrackedUniqueObj object.
+
40  */
+
41 template <typename T> class Tracker
+
42 {
+
43 public:
+
44  virtual ~Tracker()
+
45  {
+
46  }
+
47 
+
48  /**
+
49  * Called when the object is assigned to a TrackedUniqueObj
+
50  */
+
51  virtual bool track(T *obj) = 0;
+
52 
+
53  /**
+
54  * Called when the object is removed from a TrackedUniqueObj
+
55  */
+
56  virtual bool untrack(T *ob) = 0;
+
57 };
+
58 
+
59 /**
+
60  * This class helps track construction and destruction of Argus objects. Tracker classes are
+
61  * using it to track Argus objects.
+
62  * It exposes several functions of the Argus::UniqueObj class to allow it to be seamlessly
+
63  * replaced by a TrackedUniqueObj.
+
64  */
+
65 template <typename T> class TrackedUniqueObj
+
66 {
+
67 public:
+ +
69  : m_tracker(NULL)
+
70  {
+
71  }
+
72 
+ +
74  {
+
75  PROPAGATE_ERROR_CONTINUE(reset());
+
76  }
+
77 
+
78  T* get() const
+
79  {
+
80  return m_obj.get();
+
81  }
+
82 
+
83  bool reset(T *obj = NULL, Tracker<T> *tracker = NULL)
+
84  {
+
85  if (obj && !tracker)
+
86  ORIGINATE_ERROR("Need to specify a tracker if the object is set.");
+
87 
+
88  // untrack the previous object
+
89  if (m_obj)
+
90  {
+
91  assert(m_tracker);
+
92  PROPAGATE_ERROR(m_tracker->untrack(m_obj.get()));
+
93  }
+
94 
+
95  m_obj.reset(obj);
+
96 
+
97  // track the new object
+
98  if (m_obj)
+
99  {
+
100  assert(tracker);
+
101  m_tracker = tracker;
+
102 
+
103  PROPAGATE_ERROR(m_tracker->track(m_obj.get()));
+
104  }
+
105 
+
106  return true;
+
107  }
+
108 
+
109  operator bool() const
+
110  {
+
111  return !!m_obj;
+
112  }
+
113 
+
114  // allow this class to access private track/untrack functions from the Tracker class
+
115  friend class Tracker<T>;
+
116 
+
117 private:
+ +
119  Argus::UniqueObj<T> m_obj;
+
120 };
+
121 
+
122 }; // namespace ArgusSamples
+
123 
+
124 #endif // ARGUS_APPS_CAMERA_UI_COMMON_TRACKEDUNIQUEOBJECT_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8cpp.html new file mode 100644 index 0000000..7fb27e6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8cpp.html @@ -0,0 +1,122 @@ + + + + + +Argus Camera Sample: common/Util.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Util.cpp File Reference
+
+
+
#include <sys/time.h>
+#include <stddef.h>
+#include <cerrno>
+#include <stdio.h>
+#include "Util.h"
+#include "Error.h"
+#include "string.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+ + + +

+Functions

TimeValue ArgusSamples::getCurrentTime ()
bool ArgusSamples::validateOutputPath (const char *filename)
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8cpp_source.html new file mode 100644 index 0000000..100b637 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8cpp_source.html @@ -0,0 +1,182 @@ + + + + + +Argus Camera Sample: common/Util.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Util.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include <sys/time.h>
+
30 #include <stddef.h>
+
31 #include <cerrno>
+
32 
+
33 #include <stdio.h>
+
34 
+
35 #include "Util.h"
+
36 #include "Error.h"
+
37 #include "string.h"
+
38 
+
39 namespace ArgusSamples
+
40 {
+
41 
+ +
43 {
+
44  struct timeval val;
+
45 
+
46  gettimeofday(&val, NULL);
+
47 
+
48  return
+
49  TimeValue::fromUSec(val.tv_usec) +
+
50  TimeValue::fromSec(static_cast<TimeValue::SecType>(val.tv_sec));
+
51 }
+
52 
+
53 bool validateOutputPath(const char* filename)
+
54 {
+
55  // Test ability to write to indicated filename
+
56  FILE *fp = fopen(filename,"w");
+
57  if (fp)
+
58  {
+
59  fclose(fp);
+
60  return true;
+
61  }
+
62  else
+
63  {
+
64  fprintf(stderr, "--------------------------------------------------------------------\n");
+
65  fprintf(stderr, "Failure to open file '%s' for writing.\n", filename);
+
66  fprintf(stderr, "Error return code:%d (%s)\n", errno, strerror(errno));
+
67  if (errno == EACCES)
+
68  {
+
69  fprintf(stderr, "Use command line parameter --outputpath to\n");
+
70  fprintf(stderr, "point to a directory you have permission to write into.\n");
+
71 #ifdef __ANDROID__
+
72  fprintf(stderr, "As in: argus_camera --outputpath='/sdcard/DCIM' -s1 -x\n");
+
73 #else
+
74  fprintf(stderr, "As in: argus_camera --outputpath='/tmp' -s1 -x\n");
+
75 #endif
+
76  }
+
77  fprintf(stderr, "--------------------------------------------------------------------\n");
+
78  return false;
+
79  }
+
80 }
+
81 
+
82 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8h.html new file mode 100644 index 0000000..e5341d2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8h.html @@ -0,0 +1,130 @@ + + + + + +Argus Camera Sample: common/Util.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Util.h File Reference
+
+
+
#include <stdint.h>
+#include <limits>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::TimeValue
 A time value. More...
+ + +

+Namespaces

namespace  ArgusSamples
+ + +

+Enumerations

enum  ArgusSamples::StillFileType { ArgusSamples::STILL_FILE_TYPE_JPG, +ArgusSamples::STILL_FILE_TYPE_HEADERLESS + }
+ + + +

+Functions

TimeValue ArgusSamples::getCurrentTime ()
bool ArgusSamples::validateOutputPath (const char *filename)
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8h_source.html new file mode 100644 index 0000000..dc3bf0f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/Util_8h_source.html @@ -0,0 +1,316 @@ + + + + + +Argus Camera Sample: common/Util.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Util.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef UTIL_H
+
30 #define UTIL_H
+
31 
+
32 #include <stdint.h> // for uint64_t
+
33 #include <limits> // for numeric_limits
+
34 
+
35 namespace ArgusSamples
+
36 {
+
37 
+
38 /**
+
39  * A time value. Supports conversion to different time units.
+
40  */
+
41 class TimeValue
+
42 {
+
43 public:
+ +
45  : m_nSec(0)
+
46  {
+
47  }
+
48 
+
49  /**
+
50  * Types used for values with various units
+
51  */
+
52  typedef uint64_t SecType;
+
53  typedef uint64_t MSecType;
+
54  typedef uint64_t USecType;
+
55  typedef uint64_t NSecType;
+
56  typedef float CyclesPerSecType;
+
57 
+
58  // construct a infinite time value
+ +
60  {
+
61  return TimeValue(std::numeric_limits<NSecType>::max());
+
62  }
+
63 
+
64  // functions to construct from various time units
+
65  static TimeValue fromSec(float sec)
+
66  {
+
67  return TimeValue(static_cast<NSecType>(sec * 1e9));
+
68  }
+
69 
+ +
71  {
+
72  return TimeValue(sec * 1000000000);
+
73  }
+
74 
+ +
76  {
+
77  return TimeValue(mSec * 1000000);
+
78  }
+
79 
+ +
81  {
+
82  return TimeValue(uSec * 1000);
+
83  }
+
84 
+ +
86  {
+
87  return TimeValue(nSec);
+
88  }
+
89 
+ +
91  {
+
92  return TimeValue(static_cast<NSecType>(1e9 / static_cast<double>(cyclesPerSec)));
+
93  }
+
94 
+
95  // functions to set from various time uints
+
96  void setFromSec(SecType sec)
+
97  {
+
98  m_nSec = sec * 1000000000;
+
99  }
+
100 
+ +
102  {
+
103  m_nSec = mSec * 1000000;
+
104  }
+
105 
+ +
107  {
+
108  m_nSec = uSec * 1000;
+
109  }
+
110 
+ +
112  {
+
113  m_nSec = nSec;
+
114  }
+
115 
+
116  // functions to convert to various time units
+
117  SecType toSec() const
+
118  {
+
119  return m_nSec / 1000000000;
+
120  }
+
121 
+
122  MSecType toMSec() const
+
123  {
+
124  return m_nSec / 1000000;
+
125  }
+
126 
+
127  USecType toUSec() const
+
128  {
+
129  return m_nSec / 1000;
+
130  }
+
131 
+
132  NSecType toNSec() const
+
133  {
+
134  return m_nSec;
+
135  }
+
136 
+ +
138  {
+
139  if (m_nSec == 0.0f)
+
140  return std::numeric_limits<CyclesPerSecType>::max();
+
141 
+
142  return static_cast<CyclesPerSecType>(1e9 / static_cast<double>(m_nSec));
+
143  }
+
144 
+
145  // comparision and equality operators
+
146  bool operator == (const TimeValue& rhs) const
+
147  {
+
148  return (m_nSec == rhs.m_nSec);
+
149  }
+
150 
+
151  bool operator != (const TimeValue &rhs) const
+
152  {
+
153  return !(operator == (rhs));
+
154  }
+
155 
+
156  bool operator < (const TimeValue& rhs) const
+
157  {
+
158  return (m_nSec < rhs.m_nSec);
+
159  }
+
160 
+
161  bool operator >= (const TimeValue &rhs) const
+
162  {
+
163  return !(operator < (rhs));
+
164  }
+
165 
+
166  bool operator <= (const TimeValue &rhs) const
+
167  {
+
168  return (m_nSec <= rhs.m_nSec);
+
169  }
+
170 
+
171  bool operator > (const TimeValue &rhs) const
+
172  {
+
173  return !(operator <= (rhs));
+
174  }
+
175 
+
176  TimeValue operator + (const TimeValue& rhs) const
+
177  {
+
178  return (m_nSec + rhs.m_nSec);
+
179  }
+
180 
+
181  TimeValue operator - (const TimeValue& rhs) const
+
182  {
+
183  return (m_nSec - rhs.m_nSec);
+
184  }
+
185 
+
186 private:
+ +
188  : m_nSec(value)
+
189  {
+
190  }
+
191 
+ +
193 };
+
194 
+
195 /*!
+
196  * Get the current time.
+
197  */
+ +
199 
+
200 /*
+
201  * Validate filename by attempting to open file for writing
+
202  */
+
203 bool validateOutputPath(const char* filename);
+
204 
+
205 /*!
+
206  * Supported still image file formats
+
207  */
+
208 typedef enum
+
209 {
+ + +
212 } StillFileType;
+
213 
+
214 }; // namespace ArgusSamples
+
215 
+
216 #endif // UTIL_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8cpp.html new file mode 100644 index 0000000..98d1092 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8cpp.html @@ -0,0 +1,121 @@ + + + + + +Argus Camera Sample: common/VideoPipeline.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
VideoPipeline.cpp File Reference
+
+
+
#include <stdio.h>
+#include <string>
+#include "Error.h"
+#include "VideoPipeline.h"
+#include "Composer.h"
+#include "Util.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::GstUnrefer< T >
 RAII helper class for calling gst_object_unref on exit from a block or function. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8cpp_source.html new file mode 100644 index 0000000..bc58290 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8cpp_source.html @@ -0,0 +1,801 @@ + + + + + +Argus Camera Sample: common/VideoPipeline.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
VideoPipeline.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include <stdio.h>
+
30 
+
31 #include <string>
+
32 
+
33 #include "Error.h"
+
34 #include "VideoPipeline.h"
+
35 #include "Composer.h"
+
36 #include "Util.h"
+
37 
+
38 namespace ArgusSamples
+
39 {
+
40 
+ +
42 #ifdef GST_SUPPORTED
+
43  : m_state(GST_STATE_NULL)
+
44  , m_pipeline(NULL)
+
45 #endif
+
46 {
+
47 }
+
48 
+ +
50 {
+
51  destroy();
+
52 }
+
53 
+
54 ///! give the video eoncoder a name so we can find it at stop()
+
55 static const char *s_videoEncoderName = "video encoder";
+
56 
+
57 /**
+
58  * RAII helper class for calling gst_object_unref on exit from a block or function.
+
59  */
+
60 template <typename T> class GstUnrefer
+
61 {
+
62 public:
+
63  explicit GstUnrefer(T * p)
+
64  : m_p(p)
+
65  {
+
66  }
+ +
68  : m_p(NULL)
+
69  {
+
70  }
+ +
72  {
+
73  release();
+
74  }
+
75 
+
76  /// Cancel the unref.
+
77  void cancel()
+
78  {
+
79  m_p = NULL;
+
80  }
+
81 
+
82  /// Unref the object now.
+
83  void release()
+
84  {
+
85  if (m_p)
+
86  gst_object_unref(m_p);
+
87  m_p = NULL;
+
88  }
+
89 
+
90  /// Set the object to be unrefed.
+
91  void set(T* p)
+
92  {
+
93  release();
+
94  m_p = p;
+
95  }
+
96 
+
97  /// Get the object.
+
98  T * get() const
+
99  {
+
100  return m_p;
+
101  }
+
102 
+
103 private:
+
104  T *m_p;
+
105 
+
106  /// Not implemented -- use default constructor
+
107  GstUnrefer(GstUnrefer& other);
+
108  /// Not implemented
+ +
110 };
+
111 
+
112 bool VideoPipeline::setupForRecording(EGLStreamKHR videoStream, uint32_t width, uint32_t height,
+
113  float frameRate, const char *fileName, VideoFormat videoFormat,
+
114  VideoFileType videoFileType, uint32_t bitRate)
+
115 {
+
116 #ifdef GST_SUPPORTED
+
117  // set the filename
+
118  std::string videoFileName(fileName);
+
119  if (videoFileName != "/dev/null")
+
120  {
+
121  videoFileName += ".";
+
122  videoFileName += getFileExtension(videoFileType);
+
123  PROPAGATE_ERROR(validateOutputPath(videoFileName.c_str()));
+
124  }
+
125 
+
126  // Init gstreamer
+
127  gst_init(NULL, NULL);
+
128 
+
129  // create the pipeline
+
130  m_pipeline = gst_pipeline_new("video_pipeline");
+
131  if (!m_pipeline)
+
132  ORIGINATE_ERROR("Failed to create video pipeline");
+
133 
+
134  // Create the capture source element
+
135  GstElement *videoSource = gst_element_factory_make("nveglstreamsrc", NULL);
+
136  if (!videoSource)
+
137  ORIGINATE_ERROR("Failed to create capture source element");
+
138  GstUnrefer<GstElement> unrefer(videoSource);
+
139  if (!gst_bin_add(GST_BIN(m_pipeline), videoSource))
+
140  ORIGINATE_ERROR("Failed to add video source to pipeline");
+
141  unrefer.cancel();
+
142 
+
143  g_object_set(G_OBJECT(videoSource), "display", Composer::getInstance().getEGLDisplay(), NULL);
+
144  g_object_set(G_OBJECT(videoSource), "eglstream", videoStream, NULL);
+
145 
+
146  // Create queue
+
147  GstElement *queue = gst_element_factory_make("queue", NULL);
+
148  if (!queue)
+
149  ORIGINATE_ERROR("Failed to create queue");
+
150  unrefer.set(queue);
+
151  if (!gst_bin_add(GST_BIN(m_pipeline), queue))
+
152  ORIGINATE_ERROR("Failed to add queue to pipeline");
+
153  unrefer.cancel();
+
154 
+
155  // create the encoder
+
156  GstElement *videoEncoder = NULL;
+
157  switch (videoFormat)
+
158  {
+
159  case VIDEO_FORMAT_H264:
+
160  videoEncoder = gst_element_factory_make("omxh264enc", s_videoEncoderName);
+
161  break;
+
162  case VIDEO_FORMAT_H265:
+
163  videoEncoder = gst_element_factory_make("omxh265enc", s_videoEncoderName);
+
164  break;
+
165  case VIDEO_FORMAT_VP8:
+
166  videoEncoder = gst_element_factory_make("omxvp8enc", s_videoEncoderName);
+
167  break;
+
168  case VIDEO_FORMAT_VP9:
+
169  videoEncoder = gst_element_factory_make("omxvp9enc", s_videoEncoderName);
+
170  break;
+
171  default:
+
172  ORIGINATE_ERROR("Unhandled video format");
+
173  }
+
174  if (!videoEncoder)
+
175  ORIGINATE_ERROR("Failed to create video encoder");
+
176  unrefer.set(videoEncoder);
+
177  if (!gst_bin_add(GST_BIN(m_pipeline), videoEncoder))
+
178  ORIGINATE_ERROR("Failed to add video encoder to pipeline");
+
179  unrefer.cancel();
+
180 
+
181  // if no bitrate is given select from reasonable presets
+
182  if (bitRate == 0)
+
183  {
+
184  if (height < 720)
+
185  bitRate = VIDEO_BITRATE_4M;
+
186  else if (height < 1080)
+
187  bitRate = VIDEO_BITRATE_8M;
+
188  else if (height <= 2160)
+
189  bitRate = VIDEO_BITRATE_14M;
+
190  else
+
191  bitRate = VIDEO_BITRATE_20M;
+
192  }
+
193 
+
194  g_object_set(G_OBJECT(videoEncoder), "bitrate", bitRate, NULL);
+
195 
+
196  /*
+
197  * Currently, of all the supported videoEncoders above: H264, H265, VP8 and VP9, Only H265
+
198  * supports resolution > 4k.
+
199  */
+
200  const uint32_t WIDTH_4K = 3840;
+
201  if (width > WIDTH_4K && videoFormat != VIDEO_FORMAT_H265)
+
202  {
+
203  ORIGINATE_ERROR("\n Resolution > 4k requires videoformat H265 \n");
+
204  }
+
205  // set video encoding profile for h.264 to high to get optmized video quality
+
206  if (videoFormat == VIDEO_FORMAT_H264)
+
207  {
+
208  g_object_set(G_OBJECT(videoEncoder), "profile", VIDEO_AVC_PROFILE_HIGH, NULL);
+
209  }
+
210 
+
211  // create the muxer
+
212  if (videoFormat == VIDEO_FORMAT_VP9)
+
213  {
+
214  printf("\nThe VP9 video format is not supported on Jetson-tx1.\n");
+
215  }
+
216 
+
217  if (((videoFormat == VIDEO_FORMAT_H265) || (videoFormat == VIDEO_FORMAT_VP9)) &&
+
218  (videoFileType != VIDEO_FILE_TYPE_MKV))
+
219  {
+
220  printf("\nThe video format H265/VP9 is only supported with MKV in current GST version. "
+
221  "Selecting MKV as container.\n");
+
222  videoFileType = VIDEO_FILE_TYPE_MKV;
+
223  }
+
224 
+
225  GstElement *videoMuxer = NULL;
+
226  switch (videoFileType)
+
227  {
+
228  case VIDEO_FILE_TYPE_MP4:
+
229  videoMuxer = gst_element_factory_make("qtmux", NULL);
+
230  break;
+
231  case VIDEO_FILE_TYPE_3GP:
+
232  videoMuxer = gst_element_factory_make("3gppmux", NULL);
+
233  break;
+
234  case VIDEO_FILE_TYPE_AVI:
+
235  videoMuxer = gst_element_factory_make("avimux", NULL);
+
236  break;
+
237  case VIDEO_FILE_TYPE_MKV:
+
238  videoMuxer = gst_element_factory_make("matroskamux", NULL);
+
239  break;
+ +
241  videoMuxer = gst_element_factory_make("identity", NULL);
+
242  break;
+
243  default:
+
244  ORIGINATE_ERROR("Unhandled video file type");
+
245  }
+
246  if (!videoMuxer)
+
247  ORIGINATE_ERROR("Failed to create video muxer");
+
248  unrefer.set(videoMuxer);
+
249  if (!gst_bin_add(GST_BIN(m_pipeline), videoMuxer))
+
250  ORIGINATE_ERROR("Failed to add video muxer to pipeline");
+
251  unrefer.cancel();
+
252 
+
253  // create the sink
+
254  GstElement *videoSink = gst_element_factory_make("filesink", NULL);
+
255  if (!videoSink)
+
256  ORIGINATE_ERROR("Failed to create video sink");
+
257  unrefer.set(videoSink);
+
258  if (!gst_bin_add(GST_BIN(m_pipeline), videoSink))
+
259  ORIGINATE_ERROR("Failed to add video sink to pipeline");
+
260  unrefer.cancel();
+
261 
+
262  g_object_set(G_OBJECT(videoSink), "location", videoFileName.c_str(), NULL);
+
263 
+
264  // @todo 'Floating point exception' and error 'Framerate set to : 0 at
+
265  // NvxVideoEncoderSetParameter' when no setting the framerate. '0' should be VFR, use 30
+
266  // instead
+
267  if (frameRate == 0.0f)
+
268  frameRate = 30.0f;
+
269 
+
270  // create a caps filter
+
271  GstCaps *caps = gst_caps_new_simple("video/x-raw",
+
272  "format", G_TYPE_STRING, "NV12",
+
273  "width", G_TYPE_INT, width,
+
274  "height", G_TYPE_INT, height,
+
275  "framerate", GST_TYPE_FRACTION, static_cast<gint>(frameRate * 100.f), 100,
+
276  NULL);
+
277  if (!caps)
+
278  ORIGINATE_ERROR("Failed to create caps");
+
279 
+
280  GstCapsFeatures *feature = gst_caps_features_new("memory:NVMM", NULL);
+
281  if (!feature)
+
282  {
+
283  gst_caps_unref(caps);
+
284  ORIGINATE_ERROR("Failed to create caps feature");
+
285  }
+
286 
+
287  gst_caps_set_features(caps, 0, feature);
+
288 
+
289  // link the source to the queue via the capture filter
+
290  if (!gst_element_link_filtered(videoSource, queue, caps))
+
291  {
+
292  gst_caps_unref(caps);
+
293  ORIGINATE_ERROR("Failed to link source to queue");
+
294  }
+
295  gst_caps_unref(caps);
+
296 
+
297  // link the queue to the encoder
+
298  if (!gst_element_link(queue, videoEncoder))
+
299  ORIGINATE_ERROR("Failed to link queue to encoder");
+
300 
+
301  // link the encoder pad to the muxer
+
302  if (videoFileType == VIDEO_FILE_TYPE_H265)
+
303  {
+
304  // H265 has a identity muxer, need to link directly
+
305  if (!gst_element_link(videoEncoder, videoMuxer))
+
306  ORIGINATE_ERROR("Failed to link encoder to muxer");
+
307  }
+
308  else
+
309  {
+
310  if (!gst_element_link_pads(videoEncoder, "src", videoMuxer, "video_%u"))
+
311  ORIGINATE_ERROR("Failed to link encoder to muxer pad");
+
312  }
+
313 
+
314  // link the muxer to the sink
+
315  if (!gst_element_link(videoMuxer, videoSink))
+
316  ORIGINATE_ERROR("Failed to link muxer to sink");
+
317 
+
318  return true;
+
319 #else // GST_SUPPORTED
+
320  ORIGINATE_ERROR("Not supported");
+
321 #endif // GST_SUPPORTED
+
322 }
+
323 
+
324 #ifdef GST_SUPPORTED
+
325 /**
+
326  * Modify object flag values by name.
+
327  */
+
328 static bool objectModifyFlags(GObject *obj, const char *flagName, const char *valueName, bool set)
+
329 {
+
330  guint count;
+
331  GParamSpec **spec = g_object_class_list_properties(G_OBJECT_GET_CLASS(obj), &count);
+
332 
+
333  for (guint index = 0; index < count; ++index)
+
334  {
+
335  GParamSpec *param = spec[index];
+
336  if (strcmp(param->name, flagName) == 0)
+
337  {
+
338  if (!G_IS_PARAM_SPEC_FLAGS(param))
+
339  ORIGINATE_ERROR("Param '%s' is not a flag", flagName);
+
340 
+
341  GParamSpecFlags *pflags = G_PARAM_SPEC_FLAGS(param);
+
342  GFlagsValue *value = g_flags_get_value_by_nick(pflags->flags_class, valueName);
+
343  if (!value)
+
344  ORIGINATE_ERROR("Value '%s' of flag '%s' not found", valueName, flagName);
+
345 
+
346  gint flags;
+
347  g_object_get(obj, flagName, &flags, NULL);
+
348  if (set)
+
349  flags |= value->value;
+
350  else
+
351  flags &= ~value->value;
+
352  g_object_set(obj, flagName, flags, NULL);
+
353 
+
354  return true;
+
355  }
+
356  }
+
357 
+
358  ORIGINATE_ERROR("Param '%s' not found", flagName);
+
359 }
+
360 #endif // GST_SUPPORTED
+
361 
+
362 bool VideoPipeline::setupForPlayback(EGLStreamKHR *videoStream, const char *fileName)
+
363 {
+
364 #ifdef GST_SUPPORTED
+
365  // Init gstreamer
+
366  gst_init(NULL, NULL);
+
367 
+
368  // Create the source element
+
369  m_pipeline = gst_element_factory_make("playbin", "play");
+
370  if (!m_pipeline)
+
371  ORIGINATE_ERROR("Failed to create playback pipeline");
+
372 
+
373  // set the uri
+
374  char *uri = gst_filename_to_uri(fileName, NULL);
+
375  g_object_set(G_OBJECT(m_pipeline), "uri", uri, NULL);
+
376  g_free(uri);
+
377  uri = NULL;
+
378 
+
379  PROPAGATE_ERROR(objectModifyFlags(G_OBJECT(m_pipeline), "flags", "text", false));
+
380  PROPAGATE_ERROR(objectModifyFlags(G_OBJECT(m_pipeline), "flags", "native-video", true));
+
381 
+
382  // create the audio sink
+
383  GstElement *audioSink = gst_element_factory_make("autoaudiosink", "audio_sink");
+
384  if (!audioSink)
+
385  ORIGINATE_ERROR("Failed to create audio sink");
+
386 
+
387  // set the audio sink of the pipeline
+
388  g_object_set(G_OBJECT(m_pipeline), "audio-sink", audioSink, NULL);
+
389 
+
390  // Create the sink bin, this will hold the video converter and the video sink
+
391  GstElement *videoSinkBin = gst_bin_new("video_sink_bin");
+
392  if (!videoSinkBin)
+
393  ORIGINATE_ERROR("Failed to create video sink bin");
+
394 
+
395  // set the video sink of the pipeline
+
396  g_object_set(G_OBJECT(m_pipeline), "video-sink", videoSinkBin, NULL);
+
397 
+
398  // Create the video converted
+
399  GstElement *videoConvert = gst_element_factory_make("nvvidconv", "video converter");
+
400  if (!videoConvert)
+
401  ORIGINATE_ERROR("Failed to create video converter");
+
402  GstUnrefer<GstElement> unrefer(videoConvert);
+
403  if (!gst_bin_add(GST_BIN(videoSinkBin), videoConvert))
+
404  ORIGINATE_ERROR("Failed to add video convert to video sink bin");
+
405  unrefer.cancel();
+
406 
+
407  // Create the video sink
+
408  GstElement *videoSink = gst_element_factory_make("nvvideosink", "video sink");
+
409  if (!videoSink)
+
410  ORIGINATE_ERROR("Failed to create video sink");
+
411  unrefer.set(videoSink);
+
412  if (!gst_bin_add(GST_BIN(videoSinkBin), videoSink))
+
413  ORIGINATE_ERROR("Failed to add video sink to video sink bin");
+
414  unrefer.cancel();
+
415 
+
416  // configure video sink
+
417  g_object_set(G_OBJECT(videoSink), "display", Composer::getInstance().getEGLDisplay(), NULL);
+
418  // get the EGL stream
+
419  *videoStream = EGL_NO_STREAM_KHR;
+
420  g_object_get(G_OBJECT(videoSink), "stream", videoStream, NULL);
+
421  if (*videoStream == EGL_NO_STREAM_KHR)
+
422  ORIGINATE_ERROR("Failed to get EGL stream from video sink");
+
423 
+
424  if (!gst_element_link(videoConvert, videoSink))
+
425  ORIGINATE_ERROR("Failed to link video convert to video sink");
+
426 
+
427  // create a ghost pad so that the pipeline can connect to the bin as a sink
+
428  GstPad *pad = gst_element_get_static_pad(videoConvert, "sink");
+
429  if (!pad)
+
430  ORIGINATE_ERROR("Failed to get sink pad of video convert");
+
431  GstUnrefer<GstPad> padUnrefer(pad);
+
432  GstPad *ghostPad = gst_ghost_pad_new("sink", pad);
+
433  if (!ghostPad)
+
434  ORIGINATE_ERROR("Failed to create the ghost pad");
+
435  GstUnrefer<GstPad> ghostPadUnrefer(ghostPad);
+
436  if (!gst_pad_set_active(ghostPad, TRUE))
+
437  ORIGINATE_ERROR("Failed to set pad active");
+
438  if (!gst_element_add_pad(videoSinkBin, ghostPad))
+
439  ORIGINATE_ERROR("Failed to add pad");
+
440  ghostPadUnrefer.cancel();
+
441  padUnrefer.release();
+
442 
+
443  return true;
+
444 #else // GST_SUPPORTED
+
445  ORIGINATE_ERROR("Not supported");
+
446 #endif // GST_SUPPORTED
+
447 }
+
448 
+ +
450 {
+
451 #ifdef GST_SUPPORTED
+
452  if (!m_pipeline)
+
453  ORIGINATE_ERROR("Video pipeline is not set up");
+
454 
+
455  if (m_state != GST_STATE_PLAYING)
+
456  {
+
457  // set to playing state
+
458  if (gst_element_set_state(m_pipeline, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE)
+
459  ORIGINATE_ERROR("Failed to set playing state");
+
460 
+
461  m_state = GST_STATE_PLAYING;
+
462 
+
463  /* Dump Capture - Playing Pipeline into the dot file
+
464  * Set environment variable "export GST_DEBUG_DUMP_DOT_DIR=/tmp"
+
465  * Run argus_camera and 0.00.00.*-argus_camera.dot
+
466  * file will be generated.
+
467  * Run "dot -Tpng 0.00.00.*-argus_camera.dot > image.png"
+
468  * image.png will display the running capture pipeline.
+
469  * */
+
470  GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS(GST_BIN(m_pipeline),
+
471  GST_DEBUG_GRAPH_SHOW_ALL, "argus_camera");
+
472  }
+
473 
+
474  return true;
+
475 #else // GST_SUPPORTED
+
476  ORIGINATE_ERROR("Not supported");
+
477 #endif // GST_SUPPORTED
+
478 }
+
479 
+ +
481 {
+
482 #ifdef GST_SUPPORTED
+
483  if (!m_pipeline)
+
484  ORIGINATE_ERROR("Video pipeline is not set up");
+
485 
+
486  if (m_state != GST_STATE_PAUSED)
+
487  {
+
488  if (gst_element_set_state(m_pipeline, GST_STATE_PAUSED) == GST_STATE_CHANGE_FAILURE)
+
489  ORIGINATE_ERROR("Failed to set pause state");
+
490  m_state = GST_STATE_PAUSED;
+
491  }
+
492 
+
493  return true;
+
494 #else // GST_SUPPORTED
+
495  ORIGINATE_ERROR("Not supported");
+
496 #endif // GST_SUPPORTED
+
497 }
+
498 
+
499 
+ +
501 {
+
502 #ifdef GST_SUPPORTED
+
503  if (!m_pipeline)
+
504  ORIGINATE_ERROR("Video pipeline is not set up");
+
505 
+
506  GstState newState = GST_STATE_NULL;
+
507  if (m_state == GST_STATE_PLAYING)
+
508  newState = GST_STATE_PAUSED;
+
509  else if (m_state == GST_STATE_PAUSED)
+
510  newState = GST_STATE_PLAYING;
+
511  else
+
512  ORIGINATE_ERROR("Invalid state");
+
513 
+
514  if (gst_element_set_state(m_pipeline, newState) == GST_STATE_CHANGE_FAILURE)
+
515  ORIGINATE_ERROR("Failed to set pause state");
+
516 
+
517  m_state = newState;
+
518 
+
519  return true;
+
520 #else // GST_SUPPORTED
+
521  ORIGINATE_ERROR("Not supported");
+
522 #endif // GST_SUPPORTED
+
523 }
+
524 
+ +
526 {
+
527 #ifdef GST_SUPPORTED
+
528  if (!m_pipeline)
+
529  ORIGINATE_ERROR("Video pipeline is not set up");
+
530 
+
531  if (!gst_element_seek_simple(m_pipeline, GST_FORMAT_TIME,
+
532  static_cast<GstSeekFlags>(GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT), 0))
+
533  {
+
534  ORIGINATE_ERROR("Failed to rewind");
+
535  }
+
536 
+
537  return true;
+
538 #else // GST_SUPPORTED
+
539  ORIGINATE_ERROR("Not supported");
+
540 #endif // GST_SUPPORTED
+
541 }
+
542 
+ +
544 {
+
545 #ifdef GST_SUPPORTED
+
546  if (!m_pipeline)
+
547  ORIGINATE_ERROR("Video pipeline is not set up");
+
548 
+
549  if ((m_state == GST_STATE_PLAYING) || (m_state == GST_STATE_PAUSED))
+
550  {
+
551  // check if there is a video encoder
+
552  GstElement *videoEncoder = gst_bin_get_by_name(GST_BIN(m_pipeline), s_videoEncoderName);
+
553  if (videoEncoder)
+
554  {
+
555  // send the end of stream event
+
556  GstPad *pad = gst_element_get_static_pad(videoEncoder, "sink");
+
557  if (!pad)
+
558  ORIGINATE_ERROR("Failed to get 'sink' pad");
+
559  GstUnrefer<GstPad> padUnrefer(pad);
+
560  if (!gst_pad_send_event(pad, gst_event_new_eos()))
+
561  ORIGINATE_ERROR("Failed to send end of stream event encoder");
+
562  padUnrefer.release();
+
563 
+
564  // wait for the event to go through
+
565  GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(m_pipeline));
+
566  if (!bus)
+
567  ORIGINATE_ERROR("Failed to get bus");
+
568  GstUnrefer<GstBus> busUnrefer(bus);
+
569  if (!gst_bus_poll(bus, GST_MESSAGE_EOS, GST_CLOCK_TIME_NONE))
+
570  ORIGINATE_ERROR("Failed to wait for the eof event");
+
571  busUnrefer.release();
+
572  }
+
573 
+
574  // stop the pipeline
+
575  if (gst_element_set_state(m_pipeline, GST_STATE_NULL) != GST_STATE_CHANGE_SUCCESS)
+
576  ORIGINATE_ERROR("Failed to stop pipeline");
+
577 
+
578  m_state = GST_STATE_NULL;
+
579  }
+
580 
+
581  return true;
+
582 #else // GST_SUPPORTED
+
583  ORIGINATE_ERROR("Not supported");
+
584 #endif // GST_SUPPORTED
+
585 }
+
586 
+ +
588 {
+
589 #ifdef GST_SUPPORTED
+
590  if (m_pipeline)
+
591  {
+
592  PROPAGATE_ERROR(stop());
+
593 
+
594  // delete pipeline
+
595  gst_object_unref(GST_OBJECT(m_pipeline));
+
596 
+
597  m_pipeline = NULL;
+
598  }
+
599 
+
600  return true;
+
601 #else // GST_SUPPORTED
+
602  ORIGINATE_ERROR("Not supported");
+
603 #endif // GST_SUPPORTED
+
604 }
+
605 
+
606 /*static*/ const char* VideoPipeline::getFileExtension(VideoFileType fileType)
+
607 {
+
608  switch (fileType)
+
609  {
+
610  case VIDEO_FILE_TYPE_MP4:
+
611  return "mp4";
+
612  case VIDEO_FILE_TYPE_3GP:
+
613  return "3gp";
+
614  case VIDEO_FILE_TYPE_AVI:
+
615  return "avi";
+
616  case VIDEO_FILE_TYPE_MKV:
+
617  return "mkv";
+ +
619  return "h265";
+
620  default:
+
621  break;
+
622  }
+
623 
+
624  return "Unhandled video file type";
+
625 }
+
626 
+
627 bool VideoPipeline::getAspectRatio(float *aspectRatio) const
+
628 {
+
629  if (aspectRatio == NULL)
+
630  ORIGINATE_ERROR("'aspectRatio' is NULL");
+
631 #ifdef GST_SUPPORTED
+
632  if ((m_state != GST_STATE_PLAYING) && (m_state != GST_STATE_PAUSED))
+
633  ORIGINATE_ERROR("Must be in paused or playing state.");
+
634 
+
635  GstState state = GST_STATE_NULL;
+
636  while ((state != GST_STATE_PLAYING) && (state != GST_STATE_PAUSED))
+
637  {
+
638  if (gst_element_get_state(m_pipeline, &state, NULL, GST_CLOCK_TIME_NONE) ==
+
639  GST_STATE_CHANGE_FAILURE)
+
640  {
+
641  ORIGINATE_ERROR("gst_element_get_state failed");
+
642  }
+
643  }
+
644 
+
645  // Retrieve the Caps at the entrance of the video sink
+
646  GstElement *videoSink;
+
647  g_object_get(m_pipeline, "video-sink", &videoSink, NULL);
+
648  if (!videoSink)
+
649  ORIGINATE_ERROR("Failed to get video-sink");
+
650  GstUnrefer<GstElement> videoSinkUnrefer(videoSink);
+
651 
+
652  GstPad *videoSinkPad = gst_element_get_static_pad(videoSink, "sink");
+
653  if (!videoSinkPad)
+
654  ORIGINATE_ERROR("Failed to get video-sink pad");
+
655 
+
656  GstCaps *caps = gst_pad_get_current_caps(videoSinkPad);
+
657  if (!caps)
+
658  ORIGINATE_ERROR("Failed to get video-sink pad caps");
+
659 
+
660  *aspectRatio = 1.0f;
+
661 
+
662  GstStructure *structure = gst_caps_get_structure(caps, 0);
+
663  if (!structure)
+
664  {
+
665  gst_caps_unref(caps);
+
666  ORIGINATE_ERROR("Failed to get caps structure");
+
667  }
+
668 
+
669  gint width, height;
+
670  gint pixelAspectRatioNumerator, pixelAspectRatioDenominator;
+
671 
+
672  if (!gst_structure_get_int(structure, "width", &width) ||
+
673  !gst_structure_get_int(structure, "height", &height) ||
+
674  !gst_structure_get_fraction(structure, "pixel-aspect-ratio",
+
675  &pixelAspectRatioNumerator, &pixelAspectRatioDenominator))
+
676  {
+
677  gst_caps_unref(caps);
+
678  ORIGINATE_ERROR("Failed to get structure values");
+
679  }
+
680 
+
681  *aspectRatio = (float)width / (float)height;
+
682  *aspectRatio *= (float)pixelAspectRatioNumerator / (float)pixelAspectRatioDenominator;
+
683 
+
684  gst_caps_unref(caps);
+
685 
+
686  return true;
+
687 #else // GST_SUPPORTED
+
688  ORIGINATE_ERROR("Not supported");
+
689 #endif // GST_SUPPORTED
+
690 }
+
691 
+ +
693 {
+
694 #ifdef GST_SUPPORTED
+
695  return true;
+
696 #else // GST_SUPPORTED
+
697  return false;
+
698 #endif // GST_SUPPORTED
+
699 }
+
700 
+
701 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8h.html new file mode 100644 index 0000000..2fe896c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: common/VideoPipeline.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
VideoPipeline.h File Reference
+
+
+
#include <EGL/egl.h>
+#include <EGL/eglext.h>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::VideoPipeline
 Record a video from a EGL stream. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8h_source.html new file mode 100644 index 0000000..ef045ad --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoPipeline_8h_source.html @@ -0,0 +1,282 @@ + + + + + +Argus Camera Sample: common/VideoPipeline.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
VideoPipeline.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef VIDEO_PIPELINE_H
+
30 #define VIDEO_PIPELINE_H
+
31 
+
32 #include <EGL/egl.h>
+
33 #include <EGL/eglext.h>
+
34 
+
35 #ifdef GST_SUPPORTED
+
36 #include <gst/gst.h>
+
37 #endif
+
38 
+
39 namespace ArgusSamples
+
40 {
+
41 
+
42 /**
+
43  * Record a video from a EGL stream
+
44  */
+ +
46 {
+
47 public:
+
48  VideoPipeline();
+ +
50 
+
51  /**
+
52  * Supported video formats
+
53  */
+
54  typedef enum
+
55  {
+ + + + +
60  } VideoFormat;
+
61 
+
62  /**
+
63  * Video BitRate presets
+
64  */
+
65  typedef enum
+
66  {
+
67  VIDEO_BITRATE_4M = 4000000,
+
68  VIDEO_BITRATE_8M = 8000000,
+
69  VIDEO_BITRATE_14M = 14000000,
+
70  VIDEO_BITRATE_20M = 20000000,
+
71  VIDEO_BITRATE_MAX = 240000000
+
72  } VideoBitRate;
+
73 
+
74  /**
+
75  * Supported video file types
+
76  */
+
77  typedef enum
+
78  {
+ + + + + +
84  } VideoFileType;
+
85 
+
86  /**
+
87  * Video AVC profile types, each profile indicates support for various
+
88  * performance bounds and different annexes.
+
89  */
+
90  typedef enum {
+ + + + + +
96  VIDEO_AVC_PROFILE_MAX = 0x7FFFFFFF
+ +
98 
+
99  /**
+
100  * Destroy the video pipeline
+
101  */
+
102  bool destroy();
+
103 
+
104  /**
+
105  * Setup the video pipeline for recording
+
106  *
+
107  * @param[in] videoStream EGL stream to record from
+
108  * @param[in] width Width of the recorded video
+
109  * @param[in] height Height of the recorded video
+
110  * @param[in] frameRate Frame rate
+
111  * @param[in] fileName File name
+
112  * @param[in] videoFormat Video format
+
113  * @param[in] videoFileType Video file type
+
114  * @param[in] bitRate Bitrate, if 0 the bitrate will be selected depending on the
+
115  * resolution
+
116  */
+
117  bool setupForRecording(EGLStreamKHR videoStream, uint32_t width, uint32_t height,
+
118  float frameRate, const char *fileName,
+
119  VideoFormat videoFormat = VIDEO_FORMAT_H265,
+
120  VideoFileType videoFileType = VIDEO_FILE_TYPE_MKV, uint32_t bitRate = 0);
+
121 
+
122  /**
+
123  * Setup the video pipeline for playback
+
124  *
+
125  * @param[out] videoStream EGL stream
+
126  * @param[in] fileName File name
+
127  */
+
128  bool setupForPlayback(EGLStreamKHR *videoStream, const char *fileName);
+
129 
+
130  /**
+
131  * Start recording/playback
+
132  */
+
133  bool start();
+
134 
+
135  /**
+
136  * Pause recording/playback
+
137  */
+
138  bool pause();
+
139 
+
140  /**
+
141  * Toggle recording/playback
+
142  */
+
143  bool toggle();
+
144 
+
145  /**
+
146  * Rewind (playback only)
+
147  */
+
148  bool rewind();
+
149 
+
150  /**
+
151  * Stop recording/playback
+
152  */
+
153  bool stop();
+
154 
+
155  /**
+
156  * Get the file extension for a video file type.
+
157  */
+
158  static const char* getFileExtension(VideoFileType fileType);
+
159 
+
160  /**
+
161  * Get the aspect ratio of the video. The video has to be in paused or playing state.
+
162  *
+
163  * @param aspectRatio [out]
+
164  */
+
165  bool getAspectRatio(float *aspectRatio) const;
+
166 
+
167  /**
+
168  * Get indicator of video recording being supported
+
169  */
+
170  static bool isSupported();
+
171 
+
172 private:
+
173 #ifdef GST_SUPPORTED
+
174  GstState m_state;
+
175 
+
176  GstElement *m_pipeline;
+
177 #endif
+
178 };
+
179 
+
180 }; // namespace ArgusSamples
+
181 
+
182 #endif // VIDEO_PIPELINE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8cpp.html new file mode 100644 index 0000000..f99f08e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8cpp.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: modules/tasks/VideoRecord.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
VideoRecord.cpp File Reference
+
+
+
#include <sstream>
+#include <iomanip>
+#include "VideoRecord.h"
+#include "Composer.h"
+#include "Dispatcher.h"
+#include "Error.h"
+#include "EventThread.h"
+#include "PerfTracker.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8cpp_source.html new file mode 100644 index 0000000..dd45fdf --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8cpp_source.html @@ -0,0 +1,456 @@ + + + + + +Argus Camera Sample: modules/tasks/VideoRecord.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
VideoRecord.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 
+
30 #include <sstream>
+
31 #include <iomanip>
+
32 
+
33 #include "VideoRecord.h"
+
34 #include "Composer.h"
+
35 #include "Dispatcher.h"
+
36 #include "Error.h"
+
37 #include "EventThread.h"
+
38 #include "PerfTracker.h"
+
39 
+
40 namespace ArgusSamples
+
41 {
+
42 
+ +
44  : m_initialized(false)
+
45  , m_running(false)
+
46  , m_wasRunning(false)
+
47  , m_prevRunning(false)
+
48  , m_recording(false)
+
49  , m_captureIndex(0)
+
50  , m_videoPipeline(NULL)
+
51 {
+
52 }
+
53 
+ +
55 {
+
56  shutdown();
+
57 }
+
58 
+ +
60 {
+
61  if (m_initialized)
+
62  return true;
+
63 
+
64  Dispatcher &dispatcher = Dispatcher::getInstance();
+
65 
+
66  PROPAGATE_ERROR(dispatcher.m_deviceOpen.registerObserver(this,
+
67  static_cast<IObserver::CallbackFunction>(&TaskVideoRecord::onDeviceOpenChanged)));
+
68  PROPAGATE_ERROR(dispatcher.m_sensorModeValid.registerObserver(this,
+
69  static_cast<IObserver::CallbackFunction>(&TaskVideoRecord::onSensorModeValidChanged)));
+
70  PROPAGATE_ERROR(dispatcher.m_outputSize.registerObserver(this,
+
71  static_cast<IObserver::CallbackFunction>(&TaskVideoRecord::restartStreams)));
+
72  PROPAGATE_ERROR(dispatcher.m_captureYuvFormat.registerObserver(this,
+
73  static_cast<IObserver::CallbackFunction>(&TaskVideoRecord::restartStreams)));
+
74 
+
75  m_perfTracker.reset(new SessionPerfTracker());
+
76  if (!m_perfTracker)
+
77  ORIGINATE_ERROR("Out of memory");
+
78 
+
79  m_initialized = true;
+
80 
+
81  return true;
+
82 }
+
83 
+
84 bool TaskVideoRecord::restartStreams(__attribute__((unused)) const Observed &source)
+
85 {
+
86  if (m_running)
+
87  {
+
88  PROPAGATE_ERROR(stop());
+
89  PROPAGATE_ERROR(start());
+
90  }
+
91  return true;
+
92 }
+
93 
+
94 bool TaskVideoRecord::onDeviceOpenChanged(const Observed &source)
+
95 {
+
96  const bool isOpen = static_cast<const Value<bool>&>(source).get();
+
97 
+
98  // If the current device is closed the request needs to be recreated on the new device. Stop
+
99  // and then start when the device is opened again.
+
100  if (!isOpen)
+
101  {
+ +
103  PROPAGATE_ERROR(stop());
+
104  }
+
105  else if (m_wasRunning)
+
106  {
+
107  m_wasRunning = false;
+
108  PROPAGATE_ERROR(start());
+
109  }
+
110 
+
111  return true;
+
112 }
+
113 
+
114 bool TaskVideoRecord::onSensorModeValidChanged(const Observed &source)
+
115 {
+
116  const bool isTrue = static_cast<const Value<bool>&>(source).get();
+
117 
+
118  if (!isTrue)
+
119  {
+ +
121  if (m_running)
+
122  {
+
123  PROPAGATE_ERROR(stop());
+
124  }
+
125  }
+
126  else if (m_prevRunning)
+
127  {
+
128  m_prevRunning = false;
+
129  PROPAGATE_ERROR(start());
+
130  }
+
131 
+
132  return true;
+
133 }
+
134 
+ +
136 {
+
137  if (!m_initialized)
+
138  ORIGINATE_ERROR("Not initialized");
+
139 
+
140  if (m_running)
+
141  return true;
+
142 
+
143  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_TASK_START));
+
144 
+
145  Dispatcher &dispatcher = Dispatcher::getInstance();
+
146  Composer &composer = Composer::getInstance();
+
147 
+
148  PROPAGATE_ERROR(dispatcher.createRequest(m_request, Argus::CAPTURE_INTENT_VIDEO_RECORD));
+
149 
+
150  // Create the preview stream
+
151  PROPAGATE_ERROR(dispatcher.createOutputStream(m_request.get(), false, m_previewStream));
+
152 
+
153  // bind the preview stream to the composer
+
154  Argus::IEGLOutputStream *iEGLOutputStream =
+
155  Argus::interface_cast<Argus::IEGLOutputStream>(m_previewStream.get());
+
156  if (!iEGLOutputStream)
+
157  ORIGINATE_ERROR("Failed to get IEGLOutputStream interface");
+
158 
+
159  PROPAGATE_ERROR(composer.bindStream(iEGLOutputStream->getEGLStream()));
+
160 
+
161  // Enable the preview stream
+
162  PROPAGATE_ERROR(dispatcher.enableOutputStream(m_request.get(), m_previewStream.get()));
+
163 
+
164  const Argus::Size2D<uint32_t> streamSize = iEGLOutputStream->getResolution();
+
165  PROPAGATE_ERROR(composer.setStreamAspectRatio(iEGLOutputStream->getEGLStream(),
+
166  (float)streamSize.width() / (float)streamSize.height()));
+
167  PROPAGATE_ERROR(composer.setStreamActive(iEGLOutputStream->getEGLStream(), true));
+
168 
+
169  // start the preview
+
170  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_ISSUE_CAPTURE));
+
171  PROPAGATE_ERROR(dispatcher.startRepeat(m_request.get()));
+
172 
+
173  m_running = true;
+
174 
+
175  return true;
+
176 }
+
177 
+ +
179 {
+
180  if (!m_initialized)
+
181  ORIGINATE_ERROR("Not initialized");
+
182  if (!m_running)
+
183  return true;
+
184 
+
185  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_REQUESTED));
+
186 
+
187  if (m_recording)
+
188  PROPAGATE_ERROR(stopRecording());
+
189 
+
190  Dispatcher &dispatcher = Dispatcher::getInstance();
+
191 
+
192  // stop the repeating request
+
193  PROPAGATE_ERROR(dispatcher.stopRepeat());
+
194 
+
195  PROPAGATE_ERROR(dispatcher.waitForIdle());
+
196  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_FLUSH_DONE));
+
197 
+
198  if (m_previewStream)
+
199  {
+
200  if (m_request)
+
201  PROPAGATE_ERROR(dispatcher.disableOutputStream(m_request.get(), m_previewStream.get()));
+
202 
+
203  Argus::IEGLOutputStream *iEGLOutputStream =
+
204  Argus::interface_cast<Argus::IEGLOutputStream>(m_previewStream);
+
205  if (!iEGLOutputStream)
+
206  ORIGINATE_ERROR("Failed to get IEGLOutputStream interface");
+
207 
+
208  // disconnect the EGL stream
+
209  iEGLOutputStream->disconnect();
+
210 
+
211  // unbind the preview stream from the composer
+
212  PROPAGATE_ERROR(Composer::getInstance().unbindStream(iEGLOutputStream->getEGLStream()));
+
213 
+
214  m_previewStream.reset();
+
215  }
+
216  PROPAGATE_ERROR_CONTINUE(m_request.reset());
+
217 
+
218  PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_DONE));
+
219 
+
220  m_running = false;
+
221 
+
222  return true;
+
223 }
+
224 
+ +
226 {
+
227  if (!m_initialized)
+
228  ORIGINATE_ERROR("Not initialized");
+
229  if (!m_running)
+
230  ORIGINATE_ERROR("Not running");
+
231  if (m_recording)
+
232  ORIGINATE_ERROR("Recording had already been started, can't start again");
+
233 
+
234  Dispatcher &dispatcher = Dispatcher::getInstance();
+
235 
+
236  // setup the video pipeline with the video stream
+ +
238  if (!m_videoPipeline)
+
239  ORIGINATE_ERROR("Out of memory");
+
240 
+
241  // Create the video output stream
+
242  PROPAGATE_ERROR(dispatcher.createOutputStream(m_request.get(), false, m_videoStream));
+
243 
+
244  Argus::Size2D<uint32_t> outputSize;
+
245  PROPAGATE_ERROR(dispatcher.getOutputSize(&outputSize));
+
246 
+
247  // build the file name
+
248  std::ostringstream fileName;
+
249  fileName << dispatcher.m_outputPath.get();
+
250  if (dispatcher.m_outputPath.get() != "/dev/null")
+
251  fileName << "/video" << std::setfill('0') << std::setw(4) << m_captureIndex;
+
252  ++m_captureIndex;
+
253 
+
254  PROPAGATE_ERROR(m_videoPipeline->setupForRecording(
+
255  Argus::interface_cast<Argus::IEGLOutputStream>(m_videoStream)->getEGLStream(),
+
256  outputSize.width(), outputSize.height(),
+
257  dispatcher.m_frameRate.get(), fileName.str().c_str(), dispatcher.m_videoFormat.get(),
+
258  dispatcher.m_videoFileType.get(), dispatcher.m_videoBitRate.get()));
+
259 
+
260  // start recording
+
261  PROPAGATE_ERROR(m_videoPipeline->start());
+
262 
+
263  // Enable the video output stream
+
264  PROPAGATE_ERROR(dispatcher.enableOutputStream(m_request.get(), m_videoStream.get()));
+
265 
+
266  // restart the repeating request to ensure the changed request is executed
+
267  PROPAGATE_ERROR(dispatcher.startRepeat(m_request.get()));
+
268 
+
269  PROPAGATE_ERROR(dispatcher.message("Started recording video at %dx%d, saving to '%s'\n",
+
270  outputSize.width(), outputSize.height(), fileName.str().c_str()));
+
271 
+
272  m_recording = true;
+
273 
+
274  return true;
+
275 }
+
276 
+ +
278 {
+
279  if (!m_initialized)
+
280  ORIGINATE_ERROR("Not initialized");
+
281 
+
282  if (!m_recording)
+
283  ORIGINATE_ERROR("Recording had not been started, can't stop");
+
284 
+
285  Dispatcher &dispatcher = Dispatcher::getInstance();
+
286 
+
287  // stop the repeating request
+
288  PROPAGATE_ERROR(dispatcher.stopRepeat());
+
289 
+
290  // stop recording
+
291  PROPAGATE_ERROR(m_videoPipeline->stop());
+
292 
+
293  // Wait until all pending captures are done before destroying the stream
+
294  PROPAGATE_ERROR(dispatcher.waitForIdle());
+
295 
+
296  if (m_videoStream)
+
297  {
+
298  // disable the output stream
+
299  PROPAGATE_ERROR(dispatcher.disableOutputStream(m_request.get(), m_videoStream.get()));
+
300  m_videoStream.reset();
+
301  }
+
302 
+
303  // start the repeating request again to get the preview working
+
304  PROPAGATE_ERROR(dispatcher.startRepeat(m_request.get()));
+
305 
+
306  if (m_videoPipeline)
+
307  {
+
308  // destroy the video pipeline
+
309  PROPAGATE_ERROR(m_videoPipeline->destroy());
+
310  delete m_videoPipeline;
+
311  m_videoPipeline = NULL;
+
312  }
+
313 
+
314  PROPAGATE_ERROR(dispatcher.message("Stopped recording video\n"));
+
315 
+
316  m_recording = false;
+
317 
+
318  return true;
+
319 }
+
320 
+ +
322 {
+
323  if (m_recording)
+
324  PROPAGATE_ERROR(stopRecording());
+
325  else
+
326  PROPAGATE_ERROR(startRecording());
+
327  return true;
+
328 }
+
329 
+ +
331 {
+
332  if (!m_initialized)
+
333  return true;
+
334 
+
335  PROPAGATE_ERROR_CONTINUE(stop());
+
336 
+
337  PROPAGATE_ERROR_CONTINUE(m_perfTracker->shutdown());
+
338  m_perfTracker.reset();
+
339 
+
340  Dispatcher &dispatcher = Dispatcher::getInstance();
+
341 
+
342  PROPAGATE_ERROR_CONTINUE(dispatcher.m_outputSize.unregisterObserver(this,
+
343  static_cast<IObserver::CallbackFunction>(&TaskVideoRecord::restartStreams)));
+
344  PROPAGATE_ERROR_CONTINUE(dispatcher.m_sensorModeValid.unregisterObserver(this,
+
345  static_cast<IObserver::CallbackFunction>(&TaskVideoRecord::onSensorModeValidChanged)));
+
346  PROPAGATE_ERROR_CONTINUE(dispatcher.m_deviceOpen.unregisterObserver(this,
+
347  static_cast<IObserver::CallbackFunction>(&TaskVideoRecord::onDeviceOpenChanged)));
+
348  PROPAGATE_ERROR_CONTINUE(dispatcher.m_captureYuvFormat.unregisterObserver(this,
+
349  static_cast<IObserver::CallbackFunction>(&TaskVideoRecord::restartStreams)));
+
350 
+
351  m_initialized = false;
+
352 
+
353  return true;
+
354 }
+
355 
+
356 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8h.html new file mode 100644 index 0000000..5790421 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8h.html @@ -0,0 +1,120 @@ + + + + + +Argus Camera Sample: modules/tasks/VideoRecord.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
VideoRecord.h File Reference
+
+
+
#include <Argus/Argus.h>
+#include "ITask.h"
+#include "UniquePointer.h"
+#include "IObserver.h"
+#include "TrackedUniqueObject.h"
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  ArgusSamples::TaskVideoRecord
 This task records a video and saves it to a file using gstreamer. More...
+ + +

+Namespaces

namespace  ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8h_source.html new file mode 100644 index 0000000..ad43f7b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/VideoRecord_8h_source.html @@ -0,0 +1,208 @@ + + + + + +Argus Camera Sample: modules/tasks/VideoRecord.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
VideoRecord.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #ifndef TASK_VIDEO_RECORD_H
+
30 #define TASK_VIDEO_RECORD_H
+
31 
+
32 #include <Argus/Argus.h>
+
33 
+
34 #include "ITask.h"
+
35 #include "UniquePointer.h"
+
36 #include "IObserver.h"
+
37 #include "TrackedUniqueObject.h"
+
38 
+
39 namespace ArgusSamples
+
40 {
+
41 
+
42 class SessionPerfTracker;
+
43 class VideoPipeline;
+
44 
+
45 /**
+
46  * This task records a video and saves it to a file using gstreamer. It also creates a preview
+
47  * stream and display it using the composer.
+
48  */
+
49 class TaskVideoRecord : public ITask, public IObserver
+
50 {
+
51 public:
+ +
53  virtual ~TaskVideoRecord();
+
54 
+
55  virtual bool initialize();
+
56  virtual bool shutdown();
+
57 
+
58  virtual bool start();
+
59  virtual bool stop();
+
60 
+
61  /**
+
62  * Start recording
+
63  */
+
64  bool startRecording();
+
65  /**
+
66  * Stop recording
+
67  */
+
68  bool stopRecording();
+
69  /**
+
70  * Toggle recording
+
71  */
+
72  bool toggleRecording();
+
73 
+
74 private:
+
75  bool m_initialized; ///< set if initialized
+
76  bool m_running; ///< set if preview is running
+
77  bool m_wasRunning; ///< set if was running before the device had been closed
+
78  bool m_prevRunning; ///< set if was running before the sensorModeValid is set to false
+
79  bool m_recording; ///< if set recording is active
+
80  uint32_t m_captureIndex; ///< Incrementing capture index
+
81 
+
82  VideoPipeline *m_videoPipeline; ///< video pipeline
+
83 
+
84  UniquePointer<SessionPerfTracker> m_perfTracker;
+
85 
+ +
87  Argus::UniqueObj<Argus::OutputStream> m_videoStream; ///< Argus video output stream
+
88  Argus::UniqueObj<Argus::OutputStream> m_previewStream; ///< Argus preview output stream
+
89 
+
90  /**
+
91  * Callback when the device is opened/closed.
+
92  */
+
93  bool onDeviceOpenChanged(const Observed &source);
+
94 
+
95  /**
+
96  * Callback when the sensorModeValid is changed.
+
97  */
+
98  bool onSensorModeValidChanged(const Observed &source);
+
99 
+
100  /**
+
101  * Restart when output size changes
+
102  */
+
103  bool restartStreams(const Observed &source);
+
104 };
+
105 
+
106 }; // namespace ArgusSamples
+
107 
+
108 #endif // TASK_VIDEO_RECORD_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8cpp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8cpp.html new file mode 100644 index 0000000..f9faf41 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8cpp.html @@ -0,0 +1,124 @@ + + + + + +Argus Camera Sample: modules/XMLConfig.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
XMLConfig.cpp File Reference
+
+
+
#include <string>
+#include <fstream>
+#include <stdio.h>
+#include <expat.h>
+#include "XMLConfig.h"
+#include "Dispatcher.h"
+#include "UniquePointer.h"
+
+

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+ + + + + +

+Functions

bool ArgusSamples::loadConfig (const char *configFile)
 Load configuration from XMl file.
bool ArgusSamples::saveConfig (const char *configFile)
 Save configuration to a XMl file.
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8cpp_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8cpp_source.html new file mode 100644 index 0000000..dc68540 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8cpp_source.html @@ -0,0 +1,540 @@ + + + + + +Argus Camera Sample: modules/XMLConfig.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
XMLConfig.cpp
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 #include <string>
+
30 #include <fstream>
+
31 #include <stdio.h>
+
32 
+
33 #include <expat.h>
+
34 
+
35 #include "XMLConfig.h"
+
36 #include "Dispatcher.h"
+
37 #include "UniquePointer.h"
+
38 
+
39 namespace ArgusSamples
+
40 {
+
41 
+
42 // XML version
+
43 static const char *VERSION = "1.0";
+
44 
+
45 // element names
+
46 static const char *ELEMENT_DEVICE_INDEX = "deviceIndex";
+
47 static const char *ELEMENT_VERBOSE = "verbose";
+
48 static const char *ELEMENT_KPI = "kpi";
+
49 static const char *ELEMENT_EXPOSURE_TIME_RANGE = "exposureTimeRange";
+
50 static const char *ELEMENT_GAIN_RANGE = "gainRange";
+
51 static const char *ELEMENT_SENSOR_MODE_INDEX = "sensorModeIndex";
+
52 static const char *ELEMENT_FRAME_RATE = "frameRate";
+
53 static const char *ELEMENT_FOCUS_POSITION = "focusPosition";
+
54 static const char *ELEMENT_APERTURE_POSITION = "aperturePosition";
+
55 static const char *ELEMENT_APERTURE_MOTOR_SPEED = "apertureMotorSpeed";
+
56 static const char *ELEMENT_CAPTURE_YUV_FORMAT = "captureYuvFormat";
+
57 static const char *ELEMENT_AE_ANTIBANDING_MODE = "aeAntibandingMode";
+
58 static const char *ELEMENT_AE_LOCK = "aeLock";
+
59 static const char *ELEMENT_AWB_LOCK = "awbLock";
+
60 static const char *ELEMENT_AWB_MODE = "awbMode";
+
61 static const char *ELEMENT_EXPOSURE_COMPENSATION = "exposureCompensation";
+
62 static const char *ELEMENT_ISP_DIGITAL_GAIN_RANGE = "ispDigitalGainRange";
+
63 static const char *ELEMENT_DENOISE_MODE = "denoiseMode";
+
64 static const char *ELEMENT_STILL_FILE_TYPE = "stillFileType";
+
65 static const char *ELEMENT_VIDEO_FORMAT = "videoFormat";
+
66 static const char *ELEMENT_VIDEO_FILE_TYPE = "videoFileType";
+
67 static const char *ELEMENT_VIDEO_BIT_RATE = "videoBitRate";
+
68 static const char *ELEMENT_OUTPUT_SIZE = "outputSize";
+
69 static const char *ELEMENT_OUTPUT_PATH = "outputPath";
+
70 static const char *ELEMENT_DE_FOG_ENABLE = "deFogEnable";
+
71 static const char *ELEMENT_DE_FOG_AMOUNT = "deFogAmount";
+
72 static const char *ELEMENT_DE_FOG_QUALITY = "deFogQaulity";
+
73 
+
74 static void XMLCALL xmlHandleData(void *parser, const char *s, int len)
+
75 {
+
76  XML_Parser p = (XML_Parser)parser;
+
77  std::string *data = reinterpret_cast<std::string*>(XML_GetUserData(p));
+
78 
+
79  data->append(s, len);
+
80 }
+
81 
+
82 static void XMLCALL xmlStartElement(void *parser, const char *name, const char **atts)
+
83 {
+
84  XML_Parser p = (XML_Parser)parser;
+
85 
+
86  if (strcmp(name, "argusconfig") == 0)
+
87  {
+
88  const char **curAtt = atts;
+
89 
+
90  while (*curAtt != NULL)
+
91  {
+
92  const char *attribute = curAtt[0];
+
93  const char *value = curAtt[1];
+
94 
+
95  if (strcmp(attribute, "version") == 0)
+
96  {
+
97  if (strcmp(value, VERSION) != 0)
+
98  {
+
99  ORIGINATE_ERROR_FAIL("Unsupported version '%s' expected version '%s'",
+
100  value, VERSION);
+
101  }
+
102  }
+
103  else
+
104  ORIGINATE_ERROR_FAIL("Found unexpected attribute '%s'", attribute);
+
105  curAtt += 2;
+
106  }
+
107  }
+
108 
+
109  XML_SetCharacterDataHandler(p, xmlHandleData);
+
110 
+
111  return;
+
112 
+
113 fail:
+
114  XML_StopParser(p, XML_FALSE);
+
115 }
+
116 
+
117 /**
+
118  * Check if an element matches the value name, if this is the case set the value to 'dataStr'
+
119  * @param [in] elementName current element
+
120  * @param [in] dataStr data for that element
+
121  * @param [in] valueName value name
+
122  * @param [in] value value to update with dataStr if there is a match
+
123  * @param [out] match set if there was a match
+
124  */
+
125 template<typename T> static bool checkValue(const char *elementName, const char *dataStr,
+
126  const char *valueName, Value<T> &value, bool *match)
+
127 {
+
128  if (strcmp(elementName, valueName) == 0)
+
129  {
+
130  PROPAGATE_ERROR(value.setFromString(dataStr));
+
131  *match = true;
+
132  }
+
133 
+
134  return true;
+
135 }
+
136 
+
137 static void XMLCALL xmlEndElement(void *parser, const char *name)
+
138 {
+
139  Dispatcher &dispatcher = Dispatcher::getInstance();
+
140  XML_Parser p = (XML_Parser)parser;
+
141  std::string *data = reinterpret_cast<std::string*>(XML_GetUserData(p));
+
142 
+
143  if (strcmp(name, ELEMENT_DEVICE_INDEX) == 0)
+
144  {
+
145  PROPAGATE_ERROR_FAIL(dispatcher.m_deviceIndex.setFromString(data->c_str()));
+
146  }
+
147  else if (strcmp(name, ELEMENT_VERBOSE) == 0)
+
148  {
+
149  PROPAGATE_ERROR_FAIL(dispatcher.m_verbose.setFromString(data->c_str()));
+
150  }
+
151  else if (strcmp(name, ELEMENT_KPI) == 0)
+
152  {
+
153  PROPAGATE_ERROR_FAIL(dispatcher.m_kpi.setFromString(data->c_str()));
+
154  }
+
155  else if (strcmp(name, ELEMENT_EXPOSURE_TIME_RANGE) == 0)
+
156  {
+
157  PROPAGATE_ERROR_FAIL(dispatcher.m_exposureTimeRange.setFromString(data->c_str()));
+
158  }
+
159  else if (strcmp(name, ELEMENT_GAIN_RANGE) == 0)
+
160  {
+
161  PROPAGATE_ERROR_FAIL(dispatcher.m_gainRange.setFromString(data->c_str()));
+
162  }
+
163  else if (strcmp(name, ELEMENT_SENSOR_MODE_INDEX) == 0)
+
164  {
+
165  PROPAGATE_ERROR_FAIL(dispatcher.m_sensorModeIndex.setFromString(data->c_str()));
+
166  }
+
167  else if (strcmp(name, ELEMENT_FRAME_RATE) == 0)
+
168  {
+
169  PROPAGATE_ERROR_FAIL(dispatcher.m_frameRate.setFromString(data->c_str()));
+
170  }
+
171  else if (strcmp(name, ELEMENT_FOCUS_POSITION) == 0)
+
172  {
+
173  PROPAGATE_ERROR_FAIL(dispatcher.m_focusPosition.setFromString(data->c_str()));
+
174  }
+
175  else if (strcmp(name, ELEMENT_APERTURE_POSITION) == 0)
+
176  {
+
177  PROPAGATE_ERROR_FAIL(dispatcher.m_aperturePosition.setFromString(data->c_str()));
+
178  }
+
179  else if (strcmp(name, ELEMENT_APERTURE_MOTOR_SPEED) == 0)
+
180  {
+
181  PROPAGATE_ERROR_FAIL(dispatcher.m_apertureMotorSpeed.setFromString(data->c_str()));
+
182  }
+
183  else if (strcmp(name, ELEMENT_CAPTURE_YUV_FORMAT) == 0)
+
184  {
+
185  PROPAGATE_ERROR_FAIL(dispatcher.m_captureYuvFormat.setFromString(data->c_str()));
+
186  }
+
187  else if (strcmp(name, ELEMENT_DENOISE_MODE) == 0)
+
188  {
+
189  PROPAGATE_ERROR_FAIL(dispatcher.m_denoiseMode.setFromString(data->c_str()));
+
190  }
+
191  else if (strcmp(name, ELEMENT_AE_ANTIBANDING_MODE) == 0)
+
192  {
+
193  PROPAGATE_ERROR_FAIL(dispatcher.m_aeAntibandingMode.setFromString(data->c_str()));
+
194  }
+
195  else if (strcmp(name, ELEMENT_AE_LOCK) == 0)
+
196  {
+
197  PROPAGATE_ERROR_FAIL(dispatcher.m_aeLock.setFromString(data->c_str()));
+
198  }
+
199  else if (strcmp(name, ELEMENT_AWB_LOCK) == 0)
+
200  {
+
201  PROPAGATE_ERROR_FAIL(dispatcher.m_awbLock.setFromString(data->c_str()));
+
202  }
+
203  else if (strcmp(name, ELEMENT_AWB_MODE) == 0)
+
204  {
+
205  PROPAGATE_ERROR_FAIL(dispatcher.m_awbMode.setFromString(data->c_str()));
+
206  }
+
207  else if (strcmp(name, ELEMENT_EXPOSURE_COMPENSATION) == 0)
+
208  {
+
209  PROPAGATE_ERROR_FAIL(dispatcher.m_exposureCompensation.setFromString(data->c_str()));
+
210  }
+
211  else if (strcmp(name, ELEMENT_ISP_DIGITAL_GAIN_RANGE) == 0)
+
212  {
+
213  PROPAGATE_ERROR_FAIL(dispatcher.m_ispDigitalGainRange.setFromString(data->c_str()));
+
214  }
+
215  else if (strcmp(name, ELEMENT_STILL_FILE_TYPE) == 0)
+
216  {
+
217  PROPAGATE_ERROR_FAIL(dispatcher.m_stillFileType.setFromString(data->c_str()));
+
218  }
+
219  else if (strcmp(name, ELEMENT_VIDEO_FORMAT) == 0)
+
220  {
+
221  PROPAGATE_ERROR_FAIL(dispatcher.m_videoFormat.setFromString(data->c_str()));
+
222  }
+
223  else if (strcmp(name, ELEMENT_VIDEO_FILE_TYPE) == 0)
+
224  {
+
225  PROPAGATE_ERROR_FAIL(dispatcher.m_videoFileType.setFromString(data->c_str()));
+
226  }
+
227  else if (strcmp(name, ELEMENT_VIDEO_BIT_RATE) == 0)
+
228  {
+
229  PROPAGATE_ERROR_FAIL(dispatcher.m_videoBitRate.setFromString(data->c_str()));
+
230  }
+
231  else if (strcmp(name, ELEMENT_OUTPUT_SIZE) == 0)
+
232  {
+
233  PROPAGATE_ERROR_FAIL(dispatcher.m_outputSize.setFromString(data->c_str()));
+
234  }
+
235  else if (strcmp(name, ELEMENT_OUTPUT_PATH) == 0)
+
236  {
+
237  PROPAGATE_ERROR_FAIL(dispatcher.m_outputPath.set(*data));
+
238  }
+
239  else if (strcmp(name, ELEMENT_DE_FOG_ENABLE) == 0)
+
240  {
+
241  PROPAGATE_ERROR_FAIL(dispatcher.m_deFogEnable.setFromString(data->c_str()));
+
242  }
+
243  else if (strcmp(name, ELEMENT_DE_FOG_AMOUNT) == 0)
+
244  {
+
245  PROPAGATE_ERROR_FAIL(dispatcher.m_deFogAmount.setFromString(data->c_str()));
+
246  }
+
247  else if (strcmp(name, ELEMENT_DE_FOG_QUALITY) == 0)
+
248  {
+
249  PROPAGATE_ERROR_FAIL(dispatcher.m_deFogQuality.setFromString(data->c_str()));
+
250  }
+
251  else if (strcmp(name, "argusconfig") == 0)
+
252  {
+
253  }
+
254  else
+
255  {
+
256  ORIGINATE_ERROR_FAIL("Unhandled element '%s'.", name);
+
257  }
+
258 
+
259  XML_SetCharacterDataHandler(p, NULL);
+
260  data->clear();
+
261 
+
262  return;
+
263 
+
264 fail:
+
265  XML_StopParser(p, XML_FALSE);
+
266 }
+
267 
+
268 bool loadConfig(const char *configFile)
+
269 {
+
270  if (configFile == NULL)
+
271  ORIGINATE_ERROR("'configFile' is NULL");
+
272 
+
273  FILE *xmlFile;
+
274  bool success = true;
+
275  long ftellResult;
+
276  size_t fileSize;
+
277  UniquePointer<char> fileData;
+
278  XML_Parser parser = NULL;
+
279  std::string data;
+
280 
+
281  // open the file
+
282  xmlFile = fopen(configFile, "rb");
+
283  if (xmlFile == NULL)
+
284  ORIGINATE_ERROR_FAIL("Failed to open file %s", configFile);
+
285 
+
286  // get file size
+
287  if (fseek(xmlFile, 0, SEEK_END) != 0)
+
288  ORIGINATE_ERROR_FAIL("Failed to read buffer file %s", configFile);
+
289 
+
290  ftellResult = ftell(xmlFile);
+
291  if (ftellResult == -1)
+
292  ORIGINATE_ERROR_FAIL("Failed to read buffer file %s", configFile);
+
293  if (ftellResult == 0)
+
294  ORIGINATE_ERROR_FAIL("Empty file %s", configFile);
+
295 
+
296  fileSize = ftellResult;
+
297 
+
298  if (fseek(xmlFile, 0, SEEK_SET) != 0)
+
299  ORIGINATE_ERROR_FAIL("Failed to read buffer file %s", configFile);
+
300 
+
301  // allocate buffer
+
302  fileData.reset(new char[fileSize + 1]);
+
303  if (!fileData)
+
304  ORIGINATE_ERROR_FAIL("Out of memory");
+
305 
+
306  // read from file to buffer
+
307  if (fread(fileData.get(), fileSize, 1, xmlFile) != 1)
+
308  ORIGINATE_ERROR_FAIL("Failed to read buffer file %s", configFile);
+
309  // terminate string
+
310  fileData.get()[fileSize] = 0;
+
311 
+
312  // create XML parser
+
313  parser = XML_ParserCreate(NULL);
+
314  if (parser == NULL)
+
315  ORIGINATE_ERROR_FAIL("Failed to create parser");
+
316 
+
317  XML_UseParserAsHandlerArg(parser);
+
318  // the user data is a string, the XML data handler appens to this, the end element handler
+
319  // then uses it to set the values
+
320  XML_SetUserData(parser, &data);
+
321  XML_SetElementHandler(parser, xmlStartElement, xmlEndElement);
+
322 
+
323  // start parsing
+
324  if (XML_Parse(parser, fileData.get(), (int)fileSize, 1) == XML_STATUS_ERROR)
+
325  {
+
326  // on failure print the line and column number and the line in which the error occured
+
327  const XML_Size lineNumber = XML_GetCurrentLineNumber(parser);
+
328  const XML_Size columnNumber = XML_GetCurrentColumnNumber(parser);
+
329  const XML_Index byteIndex = XML_GetCurrentByteIndex(parser);
+
330 
+
331  std::string line;
+
332 
+
333  if ((byteIndex >= 0) && (static_cast<size_t>(byteIndex) < fileSize))
+
334  {
+
335  // find line start
+
336  size_t lineStart = static_cast<size_t>(byteIndex);
+
337  while ((lineStart > 0) && (fileData.get()[lineStart] != '\n'))
+
338  --lineStart;
+
339  // point after new line
+
340  if (fileData.get()[lineStart] == '\n')
+
341  ++lineStart;
+
342 
+
343  // find line end
+
344  size_t lineEnd = static_cast<size_t>(lineStart);
+
345  while ((lineEnd < fileSize) && (fileData.get()[lineEnd] != '\n'))
+
346  ++lineEnd;
+
347 
+
348  line.append(&fileData.get()[lineStart], lineEnd - lineStart);
+
349  }
+
350  else
+
351  {
+
352  line += "-";
+
353  }
+
354 
+
355  ORIGINATE_ERROR_FAIL("%s at line %lu:%lu:\n%s",
+
356  XML_ErrorString(XML_GetErrorCode(parser)),
+
357  lineNumber, columnNumber, line.c_str());
+
358  }
+
359 
+
360  goto succeeded;
+
361 
+
362 fail:
+
363  success = false;
+
364 
+
365 succeeded:
+
366  if (parser != 0)
+
367  XML_ParserFree(parser);
+
368  if (xmlFile != NULL)
+
369  fclose(xmlFile);
+
370 
+
371  return success;
+
372 }
+
373 
+
374 // write an string to XML
+
375 static void writeValue(std::ofstream &stream, const char *name, const std::string& string)
+
376 {
+
377  stream << " <" << name << ">" << string << "</" << name << ">" << std::endl;
+
378 }
+
379 
+
380 // write an value to XML
+
381 template<typename T> static void writeValue(std::ofstream &stream, const char *name,
+
382  const Value<T> &value)
+
383 {
+
384  writeValue(stream, name, value.toString());
+
385 }
+
386 
+
387 bool saveConfig(const char *configFile)
+
388 {
+
389  if (configFile == NULL)
+
390  ORIGINATE_ERROR("'configFile' is NULL");
+
391 
+
392  Dispatcher &dispatcher = Dispatcher::getInstance();
+
393 
+
394  // open the stream
+
395  std::ofstream stream(configFile, std::ofstream::out);
+
396  if (!stream.is_open())
+
397  ORIGINATE_ERROR("Failed to open file '%s' for saving.", configFile);
+
398 
+
399  // header
+
400  stream << "<?xml version='1.0' encoding='utf-8'?>" << std::endl;
+
401  stream << "<argusconfig version='" << VERSION << "'>" << std::endl;
+
402 
+
403  // write the value
+
404  writeValue(stream, ELEMENT_DEVICE_INDEX, dispatcher.m_deviceIndex);
+
405  writeValue(stream, ELEMENT_VERBOSE, dispatcher.m_verbose);
+
406  writeValue(stream, ELEMENT_KPI, dispatcher.m_kpi);
+
407  writeValue(stream, ELEMENT_EXPOSURE_TIME_RANGE, dispatcher.m_exposureTimeRange);
+
408  writeValue(stream, ELEMENT_GAIN_RANGE, dispatcher.m_gainRange);
+
409  writeValue(stream, ELEMENT_SENSOR_MODE_INDEX, dispatcher.m_sensorModeIndex);
+
410  writeValue(stream, ELEMENT_FRAME_RATE, dispatcher.m_frameRate);
+
411  writeValue(stream, ELEMENT_FOCUS_POSITION, dispatcher.m_focusPosition);
+
412  writeValue(stream, ELEMENT_APERTURE_POSITION, dispatcher.m_aperturePosition);
+
413  writeValue(stream, ELEMENT_APERTURE_MOTOR_SPEED, dispatcher.m_apertureMotorSpeed);
+
414  writeValue(stream, ELEMENT_CAPTURE_YUV_FORMAT, dispatcher.m_captureYuvFormat);
+
415  writeValue(stream, ELEMENT_DENOISE_MODE, dispatcher.m_denoiseMode);
+
416  writeValue(stream, ELEMENT_AE_ANTIBANDING_MODE, dispatcher.m_aeAntibandingMode);
+
417  writeValue(stream, ELEMENT_AE_LOCK, dispatcher.m_aeLock);
+
418  writeValue(stream, ELEMENT_AWB_LOCK, dispatcher.m_awbLock);
+
419  writeValue(stream, ELEMENT_AWB_MODE, dispatcher.m_awbMode);
+
420  writeValue(stream, ELEMENT_EXPOSURE_COMPENSATION, dispatcher.m_exposureCompensation);
+
421  writeValue(stream, ELEMENT_ISP_DIGITAL_GAIN_RANGE, dispatcher.m_ispDigitalGainRange);
+
422  writeValue(stream, ELEMENT_STILL_FILE_TYPE, dispatcher.m_stillFileType);
+
423  writeValue(stream, ELEMENT_VIDEO_FORMAT, dispatcher.m_videoFormat);
+
424  writeValue(stream, ELEMENT_VIDEO_FILE_TYPE, dispatcher.m_videoFileType);
+
425  writeValue(stream, ELEMENT_VIDEO_BIT_RATE, dispatcher.m_videoBitRate);
+
426  writeValue(stream, ELEMENT_OUTPUT_SIZE, dispatcher.m_outputSize);
+
427  writeValue(stream, ELEMENT_OUTPUT_PATH, dispatcher.m_outputPath.get());
+
428  writeValue(stream, ELEMENT_DE_FOG_ENABLE, dispatcher.m_deFogEnable);
+
429  writeValue(stream, ELEMENT_DE_FOG_AMOUNT, dispatcher.m_deFogAmount);
+
430  writeValue(stream, ELEMENT_DE_FOG_QUALITY, dispatcher.m_deFogQuality);
+
431 
+
432  // footer
+
433  stream << "</argusconfig>" << std::endl;
+
434 
+
435  stream.close();
+
436 
+
437  return true;
+
438 }
+
439 
+
440 }; // namespace ArgusSamples
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8h.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8h.html new file mode 100644 index 0000000..dc773bf --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8h.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: modules/XMLConfig.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
XMLConfig.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + +

+Namespaces

namespace  ArgusSamples
+ + + + + +

+Functions

bool ArgusSamples::loadConfig (const char *configFile)
 Load configuration from XMl file.
bool ArgusSamples::saveConfig (const char *configFile)
 Save configuration to a XMl file.
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8h_source.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8h_source.html new file mode 100644 index 0000000..72b8ae6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/XMLConfig_8h_source.html @@ -0,0 +1,150 @@ + + + + + +Argus Camera Sample: modules/XMLConfig.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
XMLConfig.h
+
+
+Go to the documentation of this file.
1 /* Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved.
+
2  *
+
3  * Redistribution and use in source and binary forms, with or without
+
4  * modification, are permitted provided that the following conditions
+
5  * are met:
+
6  * * Redistributions of source code must retain the above copyright
+
7  * notice, this list of conditions and the following disclaimer.
+
8  * * Redistributions in binary form must reproduce the above copyright
+
9  * notice, this list of conditions and the following disclaimer in the
+
10  * documentation and/or other materials provided with the distribution.
+
11  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
12  * contributors may be used to endorse or promote products derived
+
13  * from this software without specific prior written permission.
+
14  *
+
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
18  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
26  */
+
27 
+
28 #ifndef CAMERA_MODULES_XML_CONFIG_H
+
29 #define CAMERA_MODULES_XML_CONFIG_H
+
30 
+
31 namespace ArgusSamples
+
32 {
+
33 
+
34 /**
+
35  * Load configuration from XMl file.
+
36  *
+
37  * @param configFile [in]
+
38  */
+
39 bool loadConfig(const char *configFile);
+
40 
+
41 /**
+
42  * Save configuration to a XMl file.
+
43  *
+
44  * @param configFile [in]
+
45  */
+
46 bool saveConfig(const char *configFile);
+
47 
+
48 }; // namespace ArgusSamples
+
49 
+
50 #endif // CAMERA_MODULES_XML_CONFIG_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/annotated.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/annotated.html new file mode 100644 index 0000000..a0245d6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/annotated.html @@ -0,0 +1,149 @@ + + + + + +Argus Camera Sample: Class List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
oNArgus
|\NExt
\NArgusSamples
 oCConditionVariableConditional
 oCMutexMutex
 oCScopedMutexAn RAII-style class for acquiring a Mutex
 oCScopedGuardRAII-syle class performing an action when control flow leaves the scope
 oCTimeValueA time value
 oCGstUnreferRAII helper class for calling gst_object_unref on exit from a block or function
 oCVideoPipelineRecord a video from a EGL stream
 oCIObserverForInterfaceAn observer for an Argus interface
 oCDenoiseSettingsObserverDenoise settings observer
 oCEdgeEnhanceSettingsObserverEdge enhancement settings observer
 oCSourceSettingsObserverSource settings observer
 oCAutoControlSettingsObserverAuto control settings observer
 oCDeFogSettingsObserverDeFog settings observer
 oCDispatcherThe dispatcher is called by clients like the command line interface
 |\CActiveSession
 oCEventThreadThe EventThread is querying events from the session
 oCITaskBase class for tasks
 oCPerfTrackerUsed to track global performance events
 oCSessionPerfTrackerUsed to track session performance events
 oCGalleryItemRepresents an item in the gallery
 oCGalleryItemImageA gallery image
 oCGalleryItemVideoA gallery video
 oCGalleryThreadThis class handles creation of a thread scanning for supported images/videos, loading them and writing the content to an EGLStream
 oCTaskGalleryThis task implements a gallery to review images and videos
 oCTaskMultiExposureThis task captures multiple streams with different exposure compensation values
 |\CExpLevelFor each exposure level there is one request where the exposure compensation is set to the correct value
 oCTaskMultiSessionThis task creates one session for each available sensor
 |\CSessionFor each device there is one session with a request
 oCTaskStillCaptureThis task captures still images
 oCTaskVideoRecordThis task records a video and saves it to a file using gstreamer
 oCTrackerA class tracking an Argus object through the TrackedUniqueObj below
 oCTrackedUniqueObjThis class helps track construction and destruction of Argus objects
 oCComposerThe composer is used to render multiple EGL streams into the windows
 |\CStreamEach bound EGL stream has a stream consumer and can be active or inactive
 oCStreamConsumerThe stream consumer is connecting to a EGL stream and consumes the frames into a GL texture
 oCCameraApp
 oCAppModuleCaptureThe capture app module adds functionality to capture still images and save them as files
 oCAppBase class for apps
 oCAppModuleGenericThe base app module provides basic settings common to all app modules
 oCIAppModuleA application module exposes command line options, GUI elements and executes tasks
 oCAppModuleGalleryThe gallery app module adds functionality to review images and videos
 oCAppModuleMultiExposureThe multi exposure app module adds functionality to capture multiple streams with different exposure compensation values
 oCAppModuleMultiSessionThe multi session app module adds functionality for adding multiple sessions where each session uses a different sensor
 \CAppModuleVideoThe video app module adds functionality to record a video and save it
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/bc_s.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/bc_s.png new file mode 100644 index 0000000..25e3beb Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/bc_s.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/bdwn.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/bdwn.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1App-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1App-members.html new file mode 100644 index 0000000..ccc765e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1App-members.html @@ -0,0 +1,114 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::App Member List
+
+
+ +

This is the complete list of members for ArgusSamples::App, including all inherited members.

+ + + + + + + + + + +
App(const char *appName)ArgusSamples::Appexplicit
App()ArgusSamples::Appprivate
initialize()ArgusSamples::Appvirtual
m_optionsArgusSamples::Appprotected
onKey(const Key &key)ArgusSamples::Appprotectedvirtual
run(int argc, char **argv)ArgusSamples::App
shutdown()ArgusSamples::Appvirtual
start()=0ArgusSamples::Apppure virtual
~App()ArgusSamples::Appvirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1App.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1App.html new file mode 100644 index 0000000..6a0d0a1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1App.html @@ -0,0 +1,390 @@ + + + + + +Argus Camera Sample: ArgusSamples::App Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::App Class Reference
+
+
+ +

Base class for apps. + More...

+ +

#include <App.h>

+
+Inheritance diagram for ArgusSamples::App:
+
+
+ + +ArgusSamples::CameraApp + +
+ +

List of all members.

+ + + + + + + + +

+Public Member Functions

 App (const char *appName)
virtual ~App ()
virtual bool initialize ()
virtual bool shutdown ()
virtual bool start ()=0
bool run (int argc, char **argv)
+ + + +

+Protected Member Functions

IKeyObserver methods
virtual bool onKey (const Key &key)
+ + +

+Protected Attributes

Options m_options
+ + + +

+Private Member Functions

 App ()
 Hide default constructor.
+

Detailed Description

+

Base class for apps.

+ +

Definition at line 41 of file App.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::App::App (const char * appName)
+
+explicit
+
+ +

Definition at line 39 of file App.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::App::~App ()
+
+virtual
+
+ +

Definition at line 44 of file App.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::App::App ()
+
+private
+
+ +

Hide default constructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::App::initialize ()
+
+virtual
+
+ +

Reimplemented in ArgusSamples::CameraApp.

+ +

Definition at line 49 of file App.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::App::onKey (const Key & key)
+
+protectedvirtual
+
+ +

Reimplemented in ArgusSamples::CameraApp.

+ +

Definition at line 157 of file App.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::App::run (int argc,
char ** argv 
)
+
+ +

Definition at line 79 of file App.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::App::shutdown ()
+
+virtual
+
+ +

Reimplemented in ArgusSamples::CameraApp.

+ +

Definition at line 63 of file App.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::App::start ()
+
+pure virtual
+
+ +

Implemented in ArgusSamples::CameraApp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Options ArgusSamples::App::m_options
+
+protected
+
+ +

Definition at line 59 of file App.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1App.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1App.png new file mode 100644 index 0000000..832e553 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1App.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleCapture-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleCapture-members.html new file mode 100644 index 0000000..e59a8dc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleCapture-members.html @@ -0,0 +1,121 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::AppModuleCapture Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleCapture.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleCapture.html new file mode 100644 index 0000000..1600f66 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleCapture.html @@ -0,0 +1,575 @@ + + + + + +Argus Camera Sample: ArgusSamples::AppModuleCapture Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::AppModuleCapture Class Reference
+
+
+ +

The capture app module adds functionality to capture still images and save them as files. + More...

+ +

#include <AppModuleCapture.h>

+
+Inheritance diagram for ArgusSamples::AppModuleCapture:
+
+
+ + +ArgusSamples::IAppModule + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + +

+Public Member Functions

 AppModuleCapture ()
virtual ~AppModuleCapture ()
IAppModule methods
virtual bool initialize (Options &options)
 Initialize.
virtual bool shutdown ()
 Shut down.
virtual bool start (Window::IGuiMenuBar *iGuiMenuBar=NULL, Window::IGuiContainer *iGuiContainerConfig=NULL)
 Start the module.
virtual bool stop ()
 Stop the module.
- Public Member Functions inherited from ArgusSamples::IAppModule
 IAppModule ()
virtual ~IAppModule ()
+ + + + +

+Static Public Member Functions

option callbacks
static bool still (void *userPtr, const char *optArg)
static bool capture (void *userPtr, const char *optArg)
+ + + +

+Private Member Functions

IKeyObserver methods
virtual bool onKey (const Key &key)
+ + + + + + + + + + + +

+Private Attributes

bool m_initialized
 set if initialized
bool m_running
 set if running
TaskStillCapture m_stillCapture
 still capure task
Window::IGuiContainer * m_guiContainerConfig
 configuration GUI container
Window::IGuiContainerGrid * m_guiConfig
 configuration GUI
+

Detailed Description

+

The capture app module adds functionality to capture still images and save them as files.

+ +

Definition at line 42 of file AppModuleCapture.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::AppModuleCapture::AppModuleCapture ()
+
+ +

Definition at line 83 of file AppModuleCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::AppModuleCapture::~AppModuleCapture ()
+
+virtual
+
+ +

Definition at line 91 of file AppModuleCapture.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleCapture::capture (void * userPtr,
const char * optArg 
)
+
+static
+
+ +

Definition at line 74 of file AppModuleCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AppModuleCapture::initialize (Options & options)
+
+virtual
+
+ +

Initialize.

+
Parameters:
+ + +
[in]optionseach app module can add options
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 96 of file AppModuleCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AppModuleCapture::onKey (const Key & key)
+
+privatevirtual
+
+ +

Definition at line 205 of file AppModuleCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleCapture::shutdown ()
+
+virtual
+
+ +

Shut down.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 117 of file AppModuleCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleCapture::start (Window::IGuiMenuBar * iGuiMenuBar = NULL,
Window::IGuiContainer * iGuiContainerConfig = NULL 
)
+
+virtual
+
+ +

Start the module.

+
Parameters:
+ + + +
[in]iGuiMenuBaroptional, the module can add menu items to this menu bar
[in]iGuiContainerConfigoptional, the module can add configuration options to this container
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 135 of file AppModuleCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleCapture::still (void * userPtr,
const char * optArg 
)
+
+static
+
+ +

Definition at line 42 of file AppModuleCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleCapture::stop ()
+
+virtual
+
+ +

Stop the module.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 187 of file AppModuleCapture.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Window::IGuiContainerGrid* ArgusSamples::AppModuleCapture::m_guiConfig
+
+private
+
+ +

configuration GUI

+ +

Definition at line 69 of file AppModuleCapture.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Window::IGuiContainer* ArgusSamples::AppModuleCapture::m_guiContainerConfig
+
+private
+
+ +

configuration GUI container

+ +

Definition at line 68 of file AppModuleCapture.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::AppModuleCapture::m_initialized
+
+private
+
+ +

set if initialized

+ +

Definition at line 64 of file AppModuleCapture.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::AppModuleCapture::m_running
+
+private
+
+ +

set if running

+ +

Definition at line 65 of file AppModuleCapture.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TaskStillCapture ArgusSamples::AppModuleCapture::m_stillCapture
+
+private
+
+ +

still capure task

+ +

Definition at line 66 of file AppModuleCapture.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleCapture.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleCapture.png new file mode 100644 index 0000000..bc5fcda Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleCapture.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGallery-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGallery-members.html new file mode 100644 index 0000000..ee03e6f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGallery-members.html @@ -0,0 +1,123 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::AppModuleGallery Member List
+
+
+ +

This is the complete list of members for ArgusSamples::AppModuleGallery, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
AppModuleGallery()ArgusSamples::AppModuleGallery
IAppModule()ArgusSamples::IAppModuleinline
initialize(Options &options)ArgusSamples::AppModuleGalleryvirtual
m_galleryArgusSamples::AppModuleGalleryprivate
m_guiConfigArgusSamples::AppModuleGalleryprivate
m_guiContainerConfigArgusSamples::AppModuleGalleryprivate
m_initializedArgusSamples::AppModuleGalleryprivate
m_runningArgusSamples::AppModuleGalleryprivate
nextItem(void *userPtr, const char *optArg)ArgusSamples::AppModuleGallerystatic
onKey(const Key &key)ArgusSamples::AppModuleGalleryprivatevirtual
prevItem(void *userPtr, const char *optArg)ArgusSamples::AppModuleGallerystatic
rewind(void *userPtr, const char *optArg)ArgusSamples::AppModuleGallerystatic
shutdown()ArgusSamples::AppModuleGalleryvirtual
start(Window::IGuiMenuBar *iGuiMenuBar=NULL, Window::IGuiContainer *iGuiContainerConfig=NULL)ArgusSamples::AppModuleGalleryvirtual
stop()ArgusSamples::AppModuleGalleryvirtual
togglePlayBack(void *userPtr, const char *optArg)ArgusSamples::AppModuleGallerystatic
~AppModuleGallery()ArgusSamples::AppModuleGalleryvirtual
~IAppModule()ArgusSamples::IAppModuleinlinevirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGallery.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGallery.html new file mode 100644 index 0000000..477c189 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGallery.html @@ -0,0 +1,649 @@ + + + + + +Argus Camera Sample: ArgusSamples::AppModuleGallery Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::AppModuleGallery Class Reference
+
+
+ +

The gallery app module adds functionality to review images and videos. + More...

+ +

#include <AppModuleGallery.h>

+
+Inheritance diagram for ArgusSamples::AppModuleGallery:
+
+
+ + +ArgusSamples::IAppModule + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + +

+Public Member Functions

 AppModuleGallery ()
virtual ~AppModuleGallery ()
IAppModule methods
virtual bool initialize (Options &options)
 Initialize.
virtual bool shutdown ()
 Shut down.
virtual bool start (Window::IGuiMenuBar *iGuiMenuBar=NULL, Window::IGuiContainer *iGuiContainerConfig=NULL)
 Start the module.
virtual bool stop ()
 Stop the module.
- Public Member Functions inherited from ArgusSamples::IAppModule
 IAppModule ()
virtual ~IAppModule ()
+ + + + + + +

+Static Public Member Functions

option callbacks
static bool prevItem (void *userPtr, const char *optArg)
static bool nextItem (void *userPtr, const char *optArg)
static bool togglePlayBack (void *userPtr, const char *optArg)
static bool rewind (void *userPtr, const char *optArg)
+ + + +

+Private Member Functions

IKeyObserver methods
virtual bool onKey (const Key &key)
+ + + + + + + + + + + +

+Private Attributes

bool m_initialized
 set if initialized
bool m_running
 set if running
TaskGallery m_gallery
 gallery task
Window::IGuiContainer * m_guiContainerConfig
 configuration GUI container
Window::IGuiContainerGrid * m_guiConfig
 configuration GUI
+

Detailed Description

+

The gallery app module adds functionality to review images and videos.

+ +

Definition at line 41 of file AppModuleGallery.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::AppModuleGallery::AppModuleGallery ()
+
+ +

Definition at line 73 of file AppModuleGallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::AppModuleGallery::~AppModuleGallery ()
+
+virtual
+
+ +

Definition at line 81 of file AppModuleGallery.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AppModuleGallery::initialize (Options & options)
+
+virtual
+
+ +

Initialize.

+
Parameters:
+ + +
[in]optionseach app module can add options
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 86 of file AppModuleGallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleGallery::nextItem (void * userPtr,
const char * optArg 
)
+
+static
+
+ +

Definition at line 46 of file AppModuleGallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AppModuleGallery::onKey (const Key & key)
+
+privatevirtual
+
+ +

Definition at line 188 of file AppModuleGallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleGallery::prevItem (void * userPtr,
const char * optArg 
)
+
+static
+
+ +

Definition at line 37 of file AppModuleGallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleGallery::rewind (void * userPtr,
const char * optArg 
)
+
+static
+
+ +

Definition at line 64 of file AppModuleGallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleGallery::shutdown ()
+
+virtual
+
+ +

Shut down.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 98 of file AppModuleGallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleGallery::start (Window::IGuiMenuBar * iGuiMenuBar = NULL,
Window::IGuiContainer * iGuiContainerConfig = NULL 
)
+
+virtual
+
+ +

Start the module.

+
Parameters:
+ + + +
[in]iGuiMenuBaroptional, the module can add menu items to this menu bar
[in]iGuiContainerConfigoptional, the module can add configuration options to this container
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 112 of file AppModuleGallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleGallery::stop ()
+
+virtual
+
+ +

Stop the module.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 170 of file AppModuleGallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleGallery::togglePlayBack (void * userPtr,
const char * optArg 
)
+
+static
+
+ +

Definition at line 55 of file AppModuleGallery.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
TaskGallery ArgusSamples::AppModuleGallery::m_gallery
+
+private
+
+ +

gallery task

+ +

Definition at line 67 of file AppModuleGallery.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Window::IGuiContainerGrid* ArgusSamples::AppModuleGallery::m_guiConfig
+
+private
+
+ +

configuration GUI

+ +

Definition at line 70 of file AppModuleGallery.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Window::IGuiContainer* ArgusSamples::AppModuleGallery::m_guiContainerConfig
+
+private
+
+ +

configuration GUI container

+ +

Definition at line 69 of file AppModuleGallery.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::AppModuleGallery::m_initialized
+
+private
+
+ +

set if initialized

+ +

Definition at line 65 of file AppModuleGallery.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::AppModuleGallery::m_running
+
+private
+
+ +

set if running

+ +

Definition at line 66 of file AppModuleGallery.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGallery.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGallery.png new file mode 100644 index 0000000..94aec05 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGallery.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGeneric-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGeneric-members.html new file mode 100644 index 0000000..7e1f144 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGeneric-members.html @@ -0,0 +1,122 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::AppModuleGeneric Member List
+
+
+ +

This is the complete list of members for ArgusSamples::AppModuleGeneric, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
AppModuleGeneric()ArgusSamples::AppModuleGeneric
IAppModule()ArgusSamples::IAppModuleinline
info(void *userPtr, const char *optArg)ArgusSamples::AppModuleGenericstatic
initialize(Options &options)ArgusSamples::AppModuleGenericvirtual
loadConfig(void *userPtr, const char *optArg)ArgusSamples::AppModuleGenericstatic
m_guiConfigArgusSamples::AppModuleGenericprivate
m_guiContainerConfigArgusSamples::AppModuleGenericprivate
m_guiMenuBarArgusSamples::AppModuleGenericprivate
m_initializedArgusSamples::AppModuleGenericprivate
m_runningArgusSamples::AppModuleGenericprivate
quit(void *userPtr, const char *optArg)ArgusSamples::AppModuleGenericstatic
saveConfig(void *userPtr, const char *optArg)ArgusSamples::AppModuleGenericstatic
shutdown()ArgusSamples::AppModuleGenericvirtual
start(Window::IGuiMenuBar *iGuiMenuBar=NULL, Window::IGuiContainer *iGuiContainerConfig=NULL)ArgusSamples::AppModuleGenericvirtual
stop()ArgusSamples::AppModuleGenericvirtual
~AppModuleGeneric()ArgusSamples::AppModuleGenericvirtual
~IAppModule()ArgusSamples::IAppModuleinlinevirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGeneric.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGeneric.html new file mode 100644 index 0000000..cc1cf31 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGeneric.html @@ -0,0 +1,620 @@ + + + + + +Argus Camera Sample: ArgusSamples::AppModuleGeneric Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::AppModuleGeneric Class Reference
+
+
+ +

The base app module provides basic settings common to all app modules. + More...

+ +

#include <AppModuleGeneric.h>

+
+Inheritance diagram for ArgusSamples::AppModuleGeneric:
+
+
+ + +ArgusSamples::IAppModule + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + +

+Public Member Functions

 AppModuleGeneric ()
virtual ~AppModuleGeneric ()
IAppModule methods
virtual bool initialize (Options &options)
 Initialize.
virtual bool shutdown ()
 Shut down.
virtual bool start (Window::IGuiMenuBar *iGuiMenuBar=NULL, Window::IGuiContainer *iGuiContainerConfig=NULL)
 Start the module.
virtual bool stop ()
 Stop the module.
- Public Member Functions inherited from ArgusSamples::IAppModule
 IAppModule ()
virtual ~IAppModule ()
+ + + + + + +

+Static Public Member Functions

option callbacks
static bool info (void *userPtr, const char *optArg)
static bool loadConfig (void *userPtr, const char *optArg)
static bool saveConfig (void *userPtr, const char *optArg)
static bool quit (void *userPtr, const char *optArg)
+ + + + + + + + + + + +

+Private Attributes

bool m_initialized
 set if initialized
bool m_running
 set if running
Window::IGuiMenuBar * m_guiMenuBar
 menu bar
Window::IGuiContainer * m_guiContainerConfig
 configuration GUI container
Window::IGuiContainerGrid * m_guiConfig
 configuration GUI
+

Detailed Description

+

The base app module provides basic settings common to all app modules.

+ +

Definition at line 41 of file AppModuleGeneric.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::AppModuleGeneric::AppModuleGeneric ()
+
+ +

Definition at line 86 of file AppModuleGeneric.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::AppModuleGeneric::~AppModuleGeneric ()
+
+virtual
+
+ +

Definition at line 95 of file AppModuleGeneric.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleGeneric::info (void * userPtr,
const char * optArg 
)
+
+static
+
+ +

Definition at line 49 of file AppModuleGeneric.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AppModuleGeneric::initialize (Options & options)
+
+virtual
+
+ +

Initialize.

+
Parameters:
+ + +
[in]optionseach app module can add options
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 100 of file AppModuleGeneric.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleGeneric::loadConfig (void * userPtr,
const char * optArg 
)
+
+static
+
+
Todo:
ask for file if called from GUI
+ +

Definition at line 58 of file AppModuleGeneric.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleGeneric::quit (void * userPtr,
const char * optArg 
)
+
+static
+
+ +

Definition at line 80 of file AppModuleGeneric.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleGeneric::saveConfig (void * userPtr,
const char * optArg 
)
+
+static
+
+
Todo:
ask for file if called from GUI
+ +

Definition at line 69 of file AppModuleGeneric.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleGeneric::shutdown ()
+
+virtual
+
+ +

Shut down.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 247 of file AppModuleGeneric.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleGeneric::start (Window::IGuiMenuBar * iGuiMenuBar = NULL,
Window::IGuiContainer * iGuiContainerConfig = NULL 
)
+
+virtual
+
+ +

Start the module.

+
Parameters:
+ + + +
[in]iGuiMenuBaroptional, the module can add menu items to this menu bar
[in]iGuiContainerConfigoptional, the module can add configuration options to this container
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 262 of file AppModuleGeneric.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleGeneric::stop ()
+
+virtual
+
+ +

Stop the module.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 399 of file AppModuleGeneric.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Window::IGuiContainerGrid* ArgusSamples::AppModuleGeneric::m_guiConfig
+
+private
+
+ +

configuration GUI

+ +

Definition at line 69 of file AppModuleGeneric.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Window::IGuiContainer* ArgusSamples::AppModuleGeneric::m_guiContainerConfig
+
+private
+
+ +

configuration GUI container

+ +

Definition at line 68 of file AppModuleGeneric.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Window::IGuiMenuBar* ArgusSamples::AppModuleGeneric::m_guiMenuBar
+
+private
+
+ +

menu bar

+ +

Definition at line 67 of file AppModuleGeneric.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::AppModuleGeneric::m_initialized
+
+private
+
+ +

set if initialized

+ +

Definition at line 65 of file AppModuleGeneric.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::AppModuleGeneric::m_running
+
+private
+
+ +

set if running

+ +

Definition at line 66 of file AppModuleGeneric.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGeneric.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGeneric.png new file mode 100644 index 0000000..b22a682 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleGeneric.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiExposure-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiExposure-members.html new file mode 100644 index 0000000..b6c3455 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiExposure-members.html @@ -0,0 +1,118 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::AppModuleMultiExposure Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiExposure.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiExposure.html new file mode 100644 index 0000000..7096776 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiExposure.html @@ -0,0 +1,466 @@ + + + + + +Argus Camera Sample: ArgusSamples::AppModuleMultiExposure Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::AppModuleMultiExposure Class Reference
+
+
+ +

The multi exposure app module adds functionality to capture multiple streams with different exposure compensation values. + More...

+ +

#include <AppModuleMultiExposure.h>

+
+Inheritance diagram for ArgusSamples::AppModuleMultiExposure:
+
+
+ + +ArgusSamples::IAppModule + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + +

+Public Member Functions

 AppModuleMultiExposure ()
virtual ~AppModuleMultiExposure ()
IAppModule methods
virtual bool initialize (Options &options)
 Initialize.
virtual bool shutdown ()
 Shut down.
virtual bool start (Window::IGuiMenuBar *iGuiMenuBar=NULL, Window::IGuiContainer *iGuiContainerConfig=NULL)
 Start the module.
virtual bool stop ()
 Stop the module.
- Public Member Functions inherited from ArgusSamples::IAppModule
 IAppModule ()
virtual ~IAppModule ()
+ + + + + + + + + + + +

+Private Attributes

bool m_initialized
 set if initialized
bool m_running
 set if running
TaskMultiExposure m_multiExposure
 multi exposure task
Window::IGuiContainer * m_guiContainerConfig
 configuration GUI container
Window::IGuiContainerGrid * m_guiConfig
 configuration GUI
+

Detailed Description

+

The multi exposure app module adds functionality to capture multiple streams with different exposure compensation values.

+ +

Definition at line 42 of file AppModuleMultiExposure.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::AppModuleMultiExposure::AppModuleMultiExposure ()
+
+ +

Definition at line 36 of file AppModuleMultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::AppModuleMultiExposure::~AppModuleMultiExposure ()
+
+virtual
+
+ +

Definition at line 44 of file AppModuleMultiExposure.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AppModuleMultiExposure::initialize (Options & options)
+
+virtual
+
+ +

Initialize.

+
Parameters:
+ + +
[in]optionseach app module can add options
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 49 of file AppModuleMultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleMultiExposure::shutdown ()
+
+virtual
+
+ +

Shut down.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 68 of file AppModuleMultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleMultiExposure::start (Window::IGuiMenuBar * iGuiMenuBar = NULL,
Window::IGuiContainer * iGuiContainerConfig = NULL 
)
+
+virtual
+
+ +

Start the module.

+
Parameters:
+ + + +
[in]iGuiMenuBaroptional, the module can add menu items to this menu bar
[in]iGuiContainerConfigoptional, the module can add configuration options to this container
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 87 of file AppModuleMultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleMultiExposure::stop ()
+
+virtual
+
+ +

Stop the module.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 129 of file AppModuleMultiExposure.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Window::IGuiContainerGrid* ArgusSamples::AppModuleMultiExposure::m_guiConfig
+
+private
+
+ +

configuration GUI

+ +

Definition at line 63 of file AppModuleMultiExposure.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Window::IGuiContainer* ArgusSamples::AppModuleMultiExposure::m_guiContainerConfig
+
+private
+
+ +

configuration GUI container

+ +

Definition at line 62 of file AppModuleMultiExposure.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::AppModuleMultiExposure::m_initialized
+
+private
+
+ +

set if initialized

+ +

Definition at line 58 of file AppModuleMultiExposure.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TaskMultiExposure ArgusSamples::AppModuleMultiExposure::m_multiExposure
+
+private
+
+ +

multi exposure task

+ +

Definition at line 60 of file AppModuleMultiExposure.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::AppModuleMultiExposure::m_running
+
+private
+
+ +

set if running

+ +

Definition at line 59 of file AppModuleMultiExposure.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiExposure.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiExposure.png new file mode 100644 index 0000000..d0c9ca0 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiExposure.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiSession-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiSession-members.html new file mode 100644 index 0000000..47f7ef2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiSession-members.html @@ -0,0 +1,115 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::AppModuleMultiSession Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiSession.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiSession.html new file mode 100644 index 0000000..d32e4a9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiSession.html @@ -0,0 +1,388 @@ + + + + + +Argus Camera Sample: ArgusSamples::AppModuleMultiSession Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::AppModuleMultiSession Class Reference
+
+
+ +

The multi session app module adds functionality for adding multiple sessions where each session uses a different sensor. + More...

+ +

#include <AppModuleMultiSession.h>

+
+Inheritance diagram for ArgusSamples::AppModuleMultiSession:
+
+
+ + +ArgusSamples::IAppModule + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + +

+Public Member Functions

 AppModuleMultiSession ()
virtual ~AppModuleMultiSession ()
IAppModule methods
virtual bool initialize (Options &options)
 Initialize.
virtual bool shutdown ()
 Shut down.
virtual bool start (Window::IGuiMenuBar *iGuiMenuBar=NULL, Window::IGuiContainer *iGuiContainerConfig=NULL)
 Start the module.
virtual bool stop ()
 Stop the module.
- Public Member Functions inherited from ArgusSamples::IAppModule
 IAppModule ()
virtual ~IAppModule ()
+ + + + + +

+Private Attributes

bool m_initialized
 set if initialized
TaskMultiSession m_multiSession
 multi session task
+

Detailed Description

+

The multi session app module adds functionality for adding multiple sessions where each session uses a different sensor.

+ +

Definition at line 42 of file AppModuleMultiSession.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::AppModuleMultiSession::AppModuleMultiSession ()
+
+ +

Definition at line 39 of file AppModuleMultiSession.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::AppModuleMultiSession::~AppModuleMultiSession ()
+
+virtual
+
+ +

Definition at line 44 of file AppModuleMultiSession.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AppModuleMultiSession::initialize (Options & options)
+
+virtual
+
+ +

Initialize.

+
Parameters:
+ + +
[in]optionseach app module can add options
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 49 of file AppModuleMultiSession.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleMultiSession::shutdown ()
+
+virtual
+
+ +

Shut down.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 65 of file AppModuleMultiSession.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleMultiSession::start (Window::IGuiMenuBar * iGuiMenuBar = NULL,
Window::IGuiContainer * iGuiContainerConfig = NULL 
)
+
+virtual
+
+ +

Start the module.

+
Parameters:
+ + + +
[in]iGuiMenuBaroptional, the module can add menu items to this menu bar
[in]iGuiContainerConfigoptional, the module can add configuration options to this container
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 76 of file AppModuleMultiSession.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleMultiSession::stop ()
+
+virtual
+
+ +

Stop the module.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 83 of file AppModuleMultiSession.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::AppModuleMultiSession::m_initialized
+
+private
+
+ +

set if initialized

+ +

Definition at line 58 of file AppModuleMultiSession.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TaskMultiSession ArgusSamples::AppModuleMultiSession::m_multiSession
+
+private
+
+ +

multi session task

+ +

Definition at line 59 of file AppModuleMultiSession.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiSession.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiSession.png new file mode 100644 index 0000000..b163b7c Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleMultiSession.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleVideo-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleVideo-members.html new file mode 100644 index 0000000..95465ef --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleVideo-members.html @@ -0,0 +1,121 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::AppModuleVideo Member List
+
+
+ +

This is the complete list of members for ArgusSamples::AppModuleVideo, including all inherited members.

+ + + + + + + + + + + + + + + + + +
AppModuleVideo()ArgusSamples::AppModuleVideo
IAppModule()ArgusSamples::IAppModuleinline
initialize(Options &options)ArgusSamples::AppModuleVideovirtual
m_guiConfigArgusSamples::AppModuleVideoprivate
m_guiContainerConfigArgusSamples::AppModuleVideoprivate
m_initializedArgusSamples::AppModuleVideoprivate
m_runningArgusSamples::AppModuleVideoprivate
m_videoRecordArgusSamples::AppModuleVideoprivate
onKey(const Key &key)ArgusSamples::AppModuleVideoprivatevirtual
shutdown()ArgusSamples::AppModuleVideovirtual
start(Window::IGuiMenuBar *iGuiMenuBar=NULL, Window::IGuiContainer *iGuiContainerConfig=NULL)ArgusSamples::AppModuleVideovirtual
stop()ArgusSamples::AppModuleVideovirtual
toggleRecording(void *userPtr, const char *optArg)ArgusSamples::AppModuleVideostatic
video(void *userPtr, const char *optArg)ArgusSamples::AppModuleVideostatic
~AppModuleVideo()ArgusSamples::AppModuleVideovirtual
~IAppModule()ArgusSamples::IAppModuleinlinevirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleVideo.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleVideo.html new file mode 100644 index 0000000..f5f8b61 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleVideo.html @@ -0,0 +1,575 @@ + + + + + +Argus Camera Sample: ArgusSamples::AppModuleVideo Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::AppModuleVideo Class Reference
+
+
+ +

The video app module adds functionality to record a video and save it. + More...

+ +

#include <AppModuleVideo.h>

+
+Inheritance diagram for ArgusSamples::AppModuleVideo:
+
+
+ + +ArgusSamples::IAppModule + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + +

+Public Member Functions

 AppModuleVideo ()
virtual ~AppModuleVideo ()
IAppModule methods
virtual bool initialize (Options &options)
 Initialize.
virtual bool shutdown ()
 Shut down.
virtual bool start (Window::IGuiMenuBar *iGuiMenuBar=NULL, Window::IGuiContainer *iGuiContainerConfig=NULL)
 Start the module.
virtual bool stop ()
 Stop the module.
- Public Member Functions inherited from ArgusSamples::IAppModule
 IAppModule ()
virtual ~IAppModule ()
+ + + + +

+Static Public Member Functions

option callbacks
static bool video (void *userPtr, const char *optArg)
static bool toggleRecording (void *userPtr, const char *optArg)
+ + + +

+Private Member Functions

IKeyObserver methods
virtual bool onKey (const Key &key)
+ + + + + + + + + + + +

+Private Attributes

bool m_initialized
 set if initialized
bool m_running
 set if running
TaskVideoRecord m_videoRecord
 video recording task
Window::IGuiContainer * m_guiContainerConfig
 configuration GUI container
Window::IGuiContainerGrid * m_guiConfig
 configuration GUI
+

Detailed Description

+

The video app module adds functionality to record a video and save it.

+ +

Definition at line 41 of file AppModuleVideo.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::AppModuleVideo::AppModuleVideo ()
+
+ +

Definition at line 102 of file AppModuleVideo.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::AppModuleVideo::~AppModuleVideo ()
+
+virtual
+
+ +

Definition at line 110 of file AppModuleVideo.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AppModuleVideo::initialize (Options & options)
+
+virtual
+
+ +

Initialize.

+
Parameters:
+ + +
[in]optionseach app module can add options
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 115 of file AppModuleVideo.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AppModuleVideo::onKey (const Key & key)
+
+privatevirtual
+
+ +

Definition at line 246 of file AppModuleVideo.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleVideo::shutdown ()
+
+virtual
+
+ +

Shut down.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 145 of file AppModuleVideo.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleVideo::start (Window::IGuiMenuBar * iGuiMenuBar = NULL,
Window::IGuiContainer * iGuiContainerConfig = NULL 
)
+
+virtual
+
+ +

Start the module.

+
Parameters:
+ + + +
[in]iGuiMenuBaroptional, the module can add menu items to this menu bar
[in]iGuiContainerConfigoptional, the module can add configuration options to this container
+
+
+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 164 of file AppModuleVideo.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::AppModuleVideo::stop ()
+
+virtual
+
+ +

Stop the module.

+ +

Implements ArgusSamples::IAppModule.

+ +

Definition at line 228 of file AppModuleVideo.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleVideo::toggleRecording (void * userPtr,
const char * optArg 
)
+
+static
+
+ +

Definition at line 93 of file AppModuleVideo.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::AppModuleVideo::video (void * userPtr,
const char * optArg 
)
+
+static
+
+ +

Definition at line 45 of file AppModuleVideo.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Window::IGuiContainerGrid* ArgusSamples::AppModuleVideo::m_guiConfig
+
+private
+
+ +

configuration GUI

+ +

Definition at line 68 of file AppModuleVideo.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Window::IGuiContainer* ArgusSamples::AppModuleVideo::m_guiContainerConfig
+
+private
+
+ +

configuration GUI container

+ +

Definition at line 67 of file AppModuleVideo.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::AppModuleVideo::m_initialized
+
+private
+
+ +

set if initialized

+ +

Definition at line 63 of file AppModuleVideo.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::AppModuleVideo::m_running
+
+private
+
+ +

set if running

+ +

Definition at line 64 of file AppModuleVideo.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TaskVideoRecord ArgusSamples::AppModuleVideo::m_videoRecord
+
+private
+
+ +

video recording task

+ +

Definition at line 65 of file AppModuleVideo.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleVideo.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleVideo.png new file mode 100644 index 0000000..20c8d7f Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AppModuleVideo.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AutoControlSettingsObserver-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AutoControlSettingsObserver-members.html new file mode 100644 index 0000000..3001f66 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AutoControlSettingsObserver-members.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::AutoControlSettingsObserver Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AutoControlSettingsObserver.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AutoControlSettingsObserver.html new file mode 100644 index 0000000..1597365 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AutoControlSettingsObserver.html @@ -0,0 +1,446 @@ + + + + + +Argus Camera Sample: ArgusSamples::AutoControlSettingsObserver Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::AutoControlSettingsObserver Class Reference
+
+
+ +

Auto control settings observer. + More...

+
+Inheritance diagram for ArgusSamples::AutoControlSettingsObserver:
+
+
+ + +ArgusSamples::IObserverForInterface + +
+ +

List of all members.

+ + + + + + + + +

+Public Member Functions

 AutoControlSettingsObserver (Argus::IAutoControlSettings *iAutoControlSettings)
virtual ~AutoControlSettingsObserver ()
virtual bool isInterface (Argus::Interface *interface) const
 Check if this is the observer for the given interface.
- Public Member Functions inherited from ArgusSamples::IObserverForInterface
virtual ~IObserverForInterface ()
+ + + + + + + + +

+Private Member Functions

bool onAeAntibandingModeChanged (const Observed &source)
bool onAeLockChanged (const Observed &source)
bool onAwbLockChanged (const Observed &source)
bool onAwbModeChanged (const Observed &source)
bool onExposureCompensationChanged (const Observed &source)
bool onIspDigitalGainRangeChanged (const Observed &source)
bool onAcRegionChanged (const Observed &source)
+ + +

+Private Attributes

Argus::IAutoControlSettings * m_iAutoControlSettings
+

Detailed Description

+

Auto control settings observer.

+

Update Argus auto control settings if values which are set through the auto control settings change.

+ +

Definition at line 471 of file Dispatcher.cpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::AutoControlSettingsObserver::AutoControlSettingsObserver (Argus::IAutoControlSettings * iAutoControlSettings)
+
+inline
+
+ +

Definition at line 474 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::AutoControlSettingsObserver::~AutoControlSettingsObserver ()
+
+inlinevirtual
+
+ +

Definition at line 505 of file Dispatcher.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool ArgusSamples::AutoControlSettingsObserver::isInterface (Argus::Interface * interface) const
+
+inlinevirtual
+
+ +

Check if this is the observer for the given interface.

+
Parameters:
+ + +
interface[in]
+
+
+ +

Implements ArgusSamples::IObserverForInterface.

+ +

Definition at line 535 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AutoControlSettingsObserver::onAcRegionChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 633 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AutoControlSettingsObserver::onAeAntibandingModeChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 541 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AutoControlSettingsObserver::onAeLockChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 558 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AutoControlSettingsObserver::onAwbLockChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 572 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AutoControlSettingsObserver::onAwbModeChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 586 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AutoControlSettingsObserver::onExposureCompensationChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 600 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::AutoControlSettingsObserver::onIspDigitalGainRangeChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 617 of file Dispatcher.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Argus::IAutoControlSettings* ArgusSamples::AutoControlSettingsObserver::m_iAutoControlSettings
+
+private
+
+ +

Definition at line 672 of file Dispatcher.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AutoControlSettingsObserver.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AutoControlSettingsObserver.png new file mode 100644 index 0000000..cac075f Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1AutoControlSettingsObserver.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1CameraApp-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1CameraApp-members.html new file mode 100644 index 0000000..0cae603 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1CameraApp-members.html @@ -0,0 +1,124 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::CameraApp Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1CameraApp.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1CameraApp.html new file mode 100644 index 0000000..aa1e49a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1CameraApp.html @@ -0,0 +1,539 @@ + + + + + +Argus Camera Sample: ArgusSamples::CameraApp Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::CameraApp Class Reference
+
+
+
+Inheritance diagram for ArgusSamples::CameraApp:
+
+
+ + +ArgusSamples::App + +
+ +

List of all members.

+ + + + + + + + + + + + +

+Public Member Functions

 CameraApp (const char *appName)
 ~CameraApp ()
App methods
virtual bool initialize ()
virtual bool shutdown ()
virtual bool start ()
- Public Member Functions inherited from ArgusSamples::App
 App (const char *appName)
virtual ~App ()
bool run (int argc, char **argv)
+ + + + + + +

+Private Member Functions

 CameraApp ()
 Hide default constructor.
bool onModuleChanged (const Observed &source)
IKeyObserver methods
virtual bool onKey (const Key &key)
+ + + + + + + + + + + + + + +

+Private Attributes

AppModuleGeneric m_moduleGeneric
Value< Modulesm_module
 active module
Modules m_prevModule
 previously active module
Modules m_activeModuleBeforeGallery
 active module when switching to gallery
std::vector< IAppModule * > m_modules
 all modules
Window::IGuiMenuBar * m_iGuiMenuBar
 menu bar
Window::IGuiContainer * m_iGuiContainerConfig
 container for config GUI elements
+ + + + +

+Additional Inherited Members

IKeyObserver methods
- Protected Attributes inherited from ArgusSamples::App
Options m_options
+

Detailed Description

+
+

Definition at line 103 of file Main.cpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::CameraApp::CameraApp (const char * appName)
+
+explicit
+
+ +

Definition at line 142 of file Main.cpp.

+ +
+
+ +
+
+ + + + + + + +
ArgusSamples::CameraApp::~CameraApp ()
+
+ +

Definition at line 154 of file Main.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::CameraApp::CameraApp ()
+
+private
+
+ +

Hide default constructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::CameraApp::initialize ()
+
+virtual
+
+ +

Reimplemented from ArgusSamples::App.

+ +

Definition at line 159 of file Main.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::CameraApp::onKey (const Key & key)
+
+privatevirtual
+
+ +

Reimplemented from ArgusSamples::App.

+ +

Definition at line 287 of file Main.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::CameraApp::onModuleChanged (const Observed & source)
+
+private
+
+ +

Definition at line 335 of file Main.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::CameraApp::shutdown ()
+
+virtual
+
+ +

Reimplemented from ArgusSamples::App.

+ +

Definition at line 240 of file Main.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::CameraApp::start ()
+
+virtual
+
+ +

Implements ArgusSamples::App.

+ +

Definition at line 263 of file Main.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Modules ArgusSamples::CameraApp::m_activeModuleBeforeGallery
+
+private
+
+ +

active module when switching to gallery

+ +

Definition at line 134 of file Main.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Window::IGuiContainer* ArgusSamples::CameraApp::m_iGuiContainerConfig
+
+private
+
+ +

container for config GUI elements

+ +

Definition at line 139 of file Main.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Window::IGuiMenuBar* ArgusSamples::CameraApp::m_iGuiMenuBar
+
+private
+
+ +

menu bar

+ +

Definition at line 138 of file Main.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Value<Modules> ArgusSamples::CameraApp::m_module
+
+private
+
+ +

active module

+ +

Definition at line 131 of file Main.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
AppModuleGeneric ArgusSamples::CameraApp::m_moduleGeneric
+
+private
+
+ +

Definition at line 129 of file Main.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<IAppModule*> ArgusSamples::CameraApp::m_modules
+
+private
+
+ +

all modules

+ +

Definition at line 136 of file Main.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Modules ArgusSamples::CameraApp::m_prevModule
+
+private
+
+ +

previously active module

+ +

Definition at line 132 of file Main.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1CameraApp.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1CameraApp.png new file mode 100644 index 0000000..e3abd6f Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1CameraApp.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer-members.html new file mode 100644 index 0000000..d89c97d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer-members.html @@ -0,0 +1,133 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::Composer Member List
+
+
+ +

This is the complete list of members for ArgusSamples::Composer, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bindStream(EGLStreamKHR eglStream)ArgusSamples::Composer
Composer()ArgusSamples::Composerprivate
Composer(const Composer &)ArgusSamples::Composerprivate
getEGLDisplay()ArgusSamples::Composerinline
getInstance()ArgusSamples::Composerstatic
initialize()ArgusSamples::Composerprivate
m_contextArgusSamples::Composerprivate
m_displayArgusSamples::Composerprivate
m_initializedArgusSamples::Composerprivate
m_mutexArgusSamples::Composerprivate
m_programArgusSamples::Composerprivate
m_streamsArgusSamples::Composerprivate
m_vboArgusSamples::Composerprivate
m_windowAspectRatioArgusSamples::Composerprivate
m_windowHeightArgusSamples::Composerprivate
m_windowWidthArgusSamples::Composerprivate
onResize(uint32_t width, uint32_t height)ArgusSamples::Composerprivatevirtual
operator=(const Composer &)ArgusSamples::Composerprivate
renderStreams(uint32_t activeStreams)ArgusSamples::Composerprivate
setStreamActive(EGLStreamKHR eglStream, bool active)ArgusSamples::Composer
setStreamAspectRatio(EGLStreamKHR eglStream, float aspectRatio)ArgusSamples::Composer
shutdown()ArgusSamples::Composer
StreamList typedefArgusSamples::Composerprivate
threadExecute()ArgusSamples::Composerprivatevirtual
threadInitialize()ArgusSamples::Composerprivatevirtual
threadShutdown()ArgusSamples::Composerprivatevirtual
unbindStream(EGLStreamKHR eglStream)ArgusSamples::Composer
~Composer()ArgusSamples::Composerprivate
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer.html new file mode 100644 index 0000000..44c0aa2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer.html @@ -0,0 +1,922 @@ + + + + + +Argus Camera Sample: ArgusSamples::Composer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

The composer is used to render multiple EGL streams into the windows. + More...

+ +

#include <Composer.h>

+ +

List of all members.

+ + + + +

+Classes

class  Stream
 Each bound EGL stream has a stream consumer and can be active or inactive. More...
+ + + + + + + + + + + + + +

+Public Member Functions

bool shutdown ()
 Shutdown, free all resources.
bool bindStream (EGLStreamKHR eglStream)
 Bind an EGL stream.
bool unbindStream (EGLStreamKHR eglStream)
 Unbind a bound EGL stream.
bool setStreamActive (EGLStreamKHR eglStream, bool active)
 Set the active state of the stream, only active streams are rendered.
bool setStreamAspectRatio (EGLStreamKHR eglStream, float aspectRatio)
 Set the stream aspect ratio.
EGLDisplay getEGLDisplay ()
 Get the EGL display.
+ + + +

+Static Public Member Functions

static ComposergetInstance ()
 Get the composer instance.
+ + + +

+Private Types

typedef std::list< StreamStreamList
 a list of streams
+ + + + + + + + + + + + + +

+Private Member Functions

 Composer ()
 ~Composer ()
 Composer (const Composer &)
Composeroperator= (const Composer &)
bool initialize ()
bool renderStreams (uint32_t activeStreams)
Thread methods
virtual bool threadInitialize ()
virtual bool threadExecute ()
virtual bool threadShutdown ()
IResizeObserver methods
virtual bool onResize (uint32_t width, uint32_t height)
+ + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

bool m_initialized
 set if initialized
EGLDisplayHolder m_display
 EGL display.
GLContext m_context
 GL context.
uint32_t m_program
 program to render streams
uint32_t m_vbo
 vertex buffer object
uint32_t m_windowWidth
 window width
uint32_t m_windowHeight
 window height
float m_windowAspectRatio
 window aspect ratio
Mutex m_mutex
 to protect access to the stream array
StreamList m_streams
 the list of composed streams
+

Detailed Description

+

The composer is used to render multiple EGL streams into the windows.

+

The streams are arranged into a regular grid.

+ +

Definition at line 51 of file Composer.h.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef std::list<Stream> ArgusSamples::Composer::StreamList
+
+private
+
+ +

a list of streams

+ +

Definition at line 160 of file Composer.h.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::Composer::Composer ()
+
+private
+
+ +

Definition at line 48 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::Composer::~Composer ()
+
+private
+
+ +

Definition at line 58 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::Composer::Composer (const Composer)
+
+private
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
bool ArgusSamples::Composer::bindStream (EGLStreamKHR eglStream)
+
+ +

Bind an EGL stream.

+

A bound and active stream is rendered. Newly bound streams are inactive.

+
Parameters:
+ + +
eglStream[in]
+
+
+ +

Definition at line 129 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
EGLDisplay ArgusSamples::Composer::getEGLDisplay ()
+
+inline
+
+ +

Get the EGL display.

+ +

Definition at line 97 of file Composer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Composer & ArgusSamples::Composer::getInstance ()
+
+static
+
+ +

Get the composer instance.

+ +

Definition at line 64 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::Composer::initialize ()
+
+private
+
+ +

Definition at line 85 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Composer::onResize (uint32_t width,
uint32_t height 
)
+
+privatevirtual
+
+ +

Definition at line 214 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Composer& ArgusSamples::Composer::operator= (const Composer)
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Composer::renderStreams (uint32_t activeStreams)
+
+private
+
+ +

Definition at line 277 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Composer::setStreamActive (EGLStreamKHR eglStream,
bool active 
)
+
+ +

Set the active state of the stream, only active streams are rendered.

+
Parameters:
+ + + +
eglStream[in]
active[in]
+
+
+ +

Definition at line 176 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Composer::setStreamAspectRatio (EGLStreamKHR eglStream,
float aspectRatio 
)
+
+ +

Set the stream aspect ratio.

+
Parameters:
+ + + +
eglStream[in]
aspectRatio[in] aspect ration of the images transported by the stream
+
+
+ +

Definition at line 195 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::Composer::shutdown ()
+
+ +

Shutdown, free all resources.

+ +

Definition at line 110 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::Composer::threadExecute ()
+
+privatevirtual
+
+ +

Definition at line 342 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::Composer::threadInitialize ()
+
+privatevirtual
+
+ +

Definition at line 222 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::Composer::threadShutdown ()
+
+privatevirtual
+
+ +

Definition at line 396 of file Composer.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::Composer::unbindStream (EGLStreamKHR eglStream)
+
+ +

Unbind a bound EGL stream.

+
Parameters:
+ + +
eglStream[in]
+
+
+ +

Definition at line 156 of file Composer.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
GLContext ArgusSamples::Composer::m_context
+
+private
+
+ +

GL context.

+ +

Definition at line 133 of file Composer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
EGLDisplayHolder ArgusSamples::Composer::m_display
+
+private
+
+ +

EGL display.

+ +

Definition at line 131 of file Composer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::Composer::m_initialized
+
+private
+
+ +

set if initialized

+ +

Definition at line 129 of file Composer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Mutex ArgusSamples::Composer::m_mutex
+
+private
+
+ +

to protect access to the stream array

+ +

Definition at line 140 of file Composer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint32_t ArgusSamples::Composer::m_program
+
+private
+
+ +

program to render streams

+ +

Definition at line 134 of file Composer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
StreamList ArgusSamples::Composer::m_streams
+
+private
+
+ +

the list of composed streams

+ +

Definition at line 161 of file Composer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint32_t ArgusSamples::Composer::m_vbo
+
+private
+
+ +

vertex buffer object

+ +

Definition at line 135 of file Composer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
float ArgusSamples::Composer::m_windowAspectRatio
+
+private
+
+ +

window aspect ratio

+ +

Definition at line 138 of file Composer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint32_t ArgusSamples::Composer::m_windowHeight
+
+private
+
+ +

window height

+ +

Definition at line 137 of file Composer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint32_t ArgusSamples::Composer::m_windowWidth
+
+private
+
+ +

window width

+ +

Definition at line 136 of file Composer.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer_1_1Stream-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer_1_1Stream-members.html new file mode 100644 index 0000000..58e36fd --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer_1_1Stream-members.html @@ -0,0 +1,109 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::Composer::Stream Member List
+
+
+ +

This is the complete list of members for ArgusSamples::Composer::Stream, including all inherited members.

+ + + + + +
m_activeArgusSamples::Composer::Stream
m_consumerArgusSamples::Composer::Stream
m_shutdownArgusSamples::Composer::Stream
Stream(StreamConsumer *consumer)ArgusSamples::Composer::Streaminlineexplicit
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer_1_1Stream.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer_1_1Stream.html new file mode 100644 index 0000000..b0cae7c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Composer_1_1Stream.html @@ -0,0 +1,207 @@ + + + + + +Argus Camera Sample: ArgusSamples::Composer::Stream Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::Composer::Stream Class Reference
+
+
+ +

Each bound EGL stream has a stream consumer and can be active or inactive. + More...

+ +

List of all members.

+ + + +

+Public Member Functions

 Stream (StreamConsumer *consumer)
+ + + + + + + +

+Public Attributes

StreamConsumerm_consumer
 the stream consumer
bool m_active
 if set then the stream is active and rendered
bool m_shutdown
 shutdown and remove the stream
+

Detailed Description

+

Each bound EGL stream has a stream consumer and can be active or inactive.

+ +

Definition at line 145 of file Composer.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::Composer::Stream::Stream (StreamConsumerconsumer)
+
+inlineexplicit
+
+ +

Definition at line 148 of file Composer.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
bool ArgusSamples::Composer::Stream::m_active
+
+ +

if set then the stream is active and rendered

+ +

Definition at line 156 of file Composer.h.

+ +
+
+ +
+
+ + + + +
StreamConsumer* ArgusSamples::Composer::Stream::m_consumer
+
+ +

the stream consumer

+ +

Definition at line 155 of file Composer.h.

+ +
+
+ +
+
+ + + + +
bool ArgusSamples::Composer::Stream::m_shutdown
+
+ +

shutdown and remove the stream

+ +

Definition at line 157 of file Composer.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ConditionVariable-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ConditionVariable-members.html new file mode 100644 index 0000000..966f025 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ConditionVariable-members.html @@ -0,0 +1,116 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::ConditionVariable Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ConditionVariable.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ConditionVariable.html new file mode 100644 index 0000000..d52c93d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ConditionVariable.html @@ -0,0 +1,389 @@ + + + + + +Argus Camera Sample: ArgusSamples::ConditionVariable Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::ConditionVariable Class Reference
+
+
+ +

Conditional. + More...

+ +

#include <ConditionVariable.h>

+ +

List of all members.

+ + + + + + + + + + + + + + +

+Public Member Functions

 ConditionVariable ()
 ~ConditionVariable ()
bool initialize ()
 Create the underlying condition variable.
bool shutdown ()
 Destroy the underlying condition variable.
bool broadcast () const
 Broadcast the condition variable.
bool signal () const
 Signal the condition variable.
bool wait (const Mutex &mutex) const
 Wait on the condition variable.
+ + + + +

+Private Member Functions

 ConditionVariable (ConditionVariable &other)
 Hide copy constructor and assignment operator.
const ConditionVariableoperator= (const ConditionVariable &)
+ + + + +

+Private Attributes

bool m_initialized
pthread_cond_t m_cond
 pthread conditional variable, this is 'mutable' so that 'const' functions can be used.
+

Detailed Description

+

Conditional.

+ +

Definition at line 42 of file ConditionVariable.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::ConditionVariable::ConditionVariable ()
+
+ +

Definition at line 35 of file ConditionVariable.cpp.

+ +
+
+ +
+
+ + + + + + + +
ArgusSamples::ConditionVariable::~ConditionVariable ()
+
+ +

Definition at line 40 of file ConditionVariable.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::ConditionVariable::ConditionVariable (ConditionVariableother)
+
+private
+
+ +

Hide copy constructor and assignment operator.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
bool ArgusSamples::ConditionVariable::broadcast () const
+
+ +

Broadcast the condition variable.

+

This method is declared const for convenience.

+ +

Definition at line 69 of file ConditionVariable.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::ConditionVariable::initialize ()
+
+ +

Create the underlying condition variable.

+

This method must be called before any other methods.

+ +

Definition at line 45 of file ConditionVariable.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const ConditionVariable& ArgusSamples::ConditionVariable::operator= (const ConditionVariable)
+
+private
+
+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::ConditionVariable::shutdown ()
+
+ +

Destroy the underlying condition variable.

+

After this call, this object can no longer be used (until and unless a future call to initialize()). Calling this method if the object is not initialized generates no error, but silently returns.

+ +

Definition at line 57 of file ConditionVariable.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::ConditionVariable::signal () const
+
+ +

Signal the condition variable.

+

This method is declared const for convenience.

+ +

Definition at line 79 of file ConditionVariable.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::ConditionVariable::wait (const Mutexmutex) const
+
+ +

Wait on the condition variable.

+

This method is declared const for convenience.

+
Parameters:
+ + +
[in]mutexThe mutex that will be released while waiting. When multiple threads are waiting concurrently, they must all be using the same mutex.
+
+
+ +

Definition at line 89 of file ConditionVariable.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
pthread_cond_t ArgusSamples::ConditionVariable::m_cond
+
+mutableprivate
+
+ +

pthread conditional variable, this is 'mutable' so that 'const' functions can be used.

+ +

Definition at line 83 of file ConditionVariable.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::ConditionVariable::m_initialized
+
+private
+
+ +

Definition at line 79 of file ConditionVariable.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DeFogSettingsObserver-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DeFogSettingsObserver-members.html new file mode 100644 index 0000000..789dc13 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DeFogSettingsObserver-members.html @@ -0,0 +1,113 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::DeFogSettingsObserver Member List
+
+
+ +

This is the complete list of members for ArgusSamples::DeFogSettingsObserver, including all inherited members.

+ + + + + + + + + +
DeFogSettingsObserver(Argus::Ext::IDeFogSettings *iDeFogSettings)ArgusSamples::DeFogSettingsObserverinline
isInterface(Argus::Interface *interface) const ArgusSamples::DeFogSettingsObserverinlinevirtual
m_iDeFogSettingsArgusSamples::DeFogSettingsObserverprivate
onDeFogAmountChanged(const Observed &source)ArgusSamples::DeFogSettingsObserverinlineprivate
onDeFogEnableChanged(const Observed &source)ArgusSamples::DeFogSettingsObserverinlineprivate
onDeFogQualityChanged(const Observed &source)ArgusSamples::DeFogSettingsObserverinlineprivate
~DeFogSettingsObserver()ArgusSamples::DeFogSettingsObserverinlinevirtual
~IObserverForInterface()ArgusSamples::IObserverForInterfaceinlinevirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DeFogSettingsObserver.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DeFogSettingsObserver.html new file mode 100644 index 0000000..e062d15 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DeFogSettingsObserver.html @@ -0,0 +1,338 @@ + + + + + +Argus Camera Sample: ArgusSamples::DeFogSettingsObserver Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::DeFogSettingsObserver Class Reference
+
+
+ +

DeFog settings observer. + More...

+
+Inheritance diagram for ArgusSamples::DeFogSettingsObserver:
+
+
+ + +ArgusSamples::IObserverForInterface + +
+ +

List of all members.

+ + + + + + + + +

+Public Member Functions

 DeFogSettingsObserver (Argus::Ext::IDeFogSettings *iDeFogSettings)
virtual ~DeFogSettingsObserver ()
virtual bool isInterface (Argus::Interface *interface) const
 Check if this is the observer for the given interface.
- Public Member Functions inherited from ArgusSamples::IObserverForInterface
virtual ~IObserverForInterface ()
+ + + + +

+Private Member Functions

bool onDeFogEnableChanged (const Observed &source)
bool onDeFogAmountChanged (const Observed &source)
bool onDeFogQualityChanged (const Observed &source)
+ + +

+Private Attributes

Argus::Ext::IDeFogSettings * m_iDeFogSettings
+

Detailed Description

+

DeFog settings observer.

+

Update Argus DeFog settings if values which are set through the DeFog settings change.

+ +

Definition at line 679 of file Dispatcher.cpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::DeFogSettingsObserver::DeFogSettingsObserver (Argus::Ext::IDeFogSettings * iDeFogSettings)
+
+inline
+
+ +

Definition at line 682 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::DeFogSettingsObserver::~DeFogSettingsObserver ()
+
+inlinevirtual
+
+ +

Definition at line 695 of file Dispatcher.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool ArgusSamples::DeFogSettingsObserver::isInterface (Argus::Interface * interface) const
+
+inlinevirtual
+
+ +

Check if this is the observer for the given interface.

+
Parameters:
+ + +
interface[in]
+
+
+ +

Implements ArgusSamples::IObserverForInterface.

+ +

Definition at line 707 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::DeFogSettingsObserver::onDeFogAmountChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 726 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::DeFogSettingsObserver::onDeFogEnableChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 713 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::DeFogSettingsObserver::onDeFogQualityChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 740 of file Dispatcher.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Argus::Ext::IDeFogSettings* ArgusSamples::DeFogSettingsObserver::m_iDeFogSettings
+
+private
+
+ +

Definition at line 754 of file Dispatcher.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DeFogSettingsObserver.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DeFogSettingsObserver.png new file mode 100644 index 0000000..91497f0 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DeFogSettingsObserver.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DenoiseSettingsObserver-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DenoiseSettingsObserver-members.html new file mode 100644 index 0000000..426be45 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DenoiseSettingsObserver-members.html @@ -0,0 +1,112 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::DenoiseSettingsObserver Member List
+
+
+ +

This is the complete list of members for ArgusSamples::DenoiseSettingsObserver, including all inherited members.

+ + + + + + + + +
DenoiseSettingsObserver(Argus::IDenoiseSettings *iDenoiseSettings)ArgusSamples::DenoiseSettingsObserverinline
isInterface(Argus::Interface *interface) const ArgusSamples::DenoiseSettingsObserverinlinevirtual
m_iDenoiseSettingsArgusSamples::DenoiseSettingsObserverprivate
onDenoiseModeChanged(const Observed &source)ArgusSamples::DenoiseSettingsObserverinlineprivate
onDenoiseStrengthChanged(const Observed &source)ArgusSamples::DenoiseSettingsObserverinlineprivate
~DenoiseSettingsObserver()ArgusSamples::DenoiseSettingsObserverinlinevirtual
~IObserverForInterface()ArgusSamples::IObserverForInterfaceinlinevirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DenoiseSettingsObserver.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DenoiseSettingsObserver.html new file mode 100644 index 0000000..76fe2c4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DenoiseSettingsObserver.html @@ -0,0 +1,311 @@ + + + + + +Argus Camera Sample: ArgusSamples::DenoiseSettingsObserver Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::DenoiseSettingsObserver Class Reference
+
+
+ +

Denoise settings observer. + More...

+
+Inheritance diagram for ArgusSamples::DenoiseSettingsObserver:
+
+
+ + +ArgusSamples::IObserverForInterface + +
+ +

List of all members.

+ + + + + + + + +

+Public Member Functions

 DenoiseSettingsObserver (Argus::IDenoiseSettings *iDenoiseSettings)
virtual ~DenoiseSettingsObserver ()
virtual bool isInterface (Argus::Interface *interface) const
 Check if this is the observer for the given interface.
- Public Member Functions inherited from ArgusSamples::IObserverForInterface
virtual ~IObserverForInterface ()
+ + + +

+Private Member Functions

bool onDenoiseModeChanged (const Observed &source)
bool onDenoiseStrengthChanged (const Observed &source)
+ + +

+Private Attributes

Argus::IDenoiseSettings * m_iDenoiseSettings
+

Detailed Description

+

Denoise settings observer.

+

Update Argus denoise settings when values change.

+ +

Definition at line 76 of file Dispatcher.cpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::DenoiseSettingsObserver::DenoiseSettingsObserver (Argus::IDenoiseSettings * iDenoiseSettings)
+
+inline
+
+ +

Definition at line 79 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::DenoiseSettingsObserver::~DenoiseSettingsObserver ()
+
+inlinevirtual
+
+ +

Definition at line 92 of file Dispatcher.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool ArgusSamples::DenoiseSettingsObserver::isInterface (Argus::Interface * interface) const
+
+inlinevirtual
+
+ +

Check if this is the observer for the given interface.

+
Parameters:
+ + +
interface[in]
+
+
+ +

Implements ArgusSamples::IObserverForInterface.

+ +

Definition at line 104 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::DenoiseSettingsObserver::onDenoiseModeChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 110 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::DenoiseSettingsObserver::onDenoiseStrengthChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 124 of file Dispatcher.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Argus::IDenoiseSettings* ArgusSamples::DenoiseSettingsObserver::m_iDenoiseSettings
+
+private
+
+ +

Definition at line 141 of file Dispatcher.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DenoiseSettingsObserver.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DenoiseSettingsObserver.png new file mode 100644 index 0000000..811fbe8 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1DenoiseSettingsObserver.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher-members.html new file mode 100644 index 0000000..13267e9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher-members.html @@ -0,0 +1,205 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::Dispatcher Member List
+
+
+ +

This is the complete list of members for ArgusSamples::Dispatcher, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ActiveSessionList typedefArgusSamples::Dispatcherprivate
capture(Argus::Request *request, Argus::CaptureSession *session=NULL)ArgusSamples::Dispatcher
closeSession()ArgusSamples::Dispatcherprivate
createEventQueue(const std::vector< Argus::EventType > &eventTypes, Argus::UniqueObj< Argus::EventQueue > &eventQueue, Argus::CaptureSession *session=NULL)ArgusSamples::Dispatcher
createOutputStream(Argus::Request *request, bool enableMetadata, Argus::UniqueObj< Argus::OutputStream > &stream, Argus::CaptureSession *session=NULL)ArgusSamples::Dispatcher
createRequest(TrackedUniqueObj< Argus::Request > &request, Argus::CaptureIntent captureIntent, Argus::CaptureSession *session=NULL)ArgusSamples::Dispatcher
createSession(TrackedUniqueObj< Argus::CaptureSession > &session, uint32_t deviceIndex)ArgusSamples::Dispatcher
createSession()ArgusSamples::Dispatcherprivate
disableOutputStream(Argus::Request *request, Argus::OutputStream *stream)ArgusSamples::Dispatcher
Dispatcher()ArgusSamples::Dispatcherprivate
Dispatcher(const Dispatcher &)ArgusSamples::Dispatcherprivate
dumpSessionInfo() const ArgusSamples::Dispatcher
enableOutputStream(Argus::Request *request, Argus::OutputStream *stream)ArgusSamples::Dispatcher
getDeviceApertureMotorSpeedRange() const ArgusSamples::Dispatcher
getDeviceAperturePositionRange() const ArgusSamples::Dispatcher
getDeviceCount() const ArgusSamples::Dispatcher
getDeviceFocusPositionRange() const ArgusSamples::Dispatcher
getInfo(std::string &info) const ArgusSamples::Dispatcher
getInstance()ArgusSamples::Dispatcherstatic
getOutputSize(Argus::Size2D< uint32_t > *size) const ArgusSamples::Dispatcher
getSensorMode(uint32_t sensorModeIndex, Argus::SensorMode **sensorMode) const ArgusSamples::Dispatcher
initialize()ArgusSamples::Dispatcherprivate
m_acRegionHorizontalArgusSamples::Dispatcher
m_acRegionVerticalArgusSamples::Dispatcher
m_activeSessionsArgusSamples::Dispatcherprivate
m_aeAntibandingModeArgusSamples::Dispatcher
m_aeLockArgusSamples::Dispatcher
m_apertureFnumArgusSamples::Dispatcher
m_apertureMotorSpeedArgusSamples::Dispatcher
m_aperturePositionArgusSamples::Dispatcher
m_awbLockArgusSamples::Dispatcher
m_awbModeArgusSamples::Dispatcher
m_cameraDevicesArgusSamples::Dispatcherprivate
m_cameraProviderArgusSamples::Dispatcherprivate
m_captureSessionArgusSamples::Dispatcherprivate
m_captureYuvFormatArgusSamples::Dispatcher
m_deFogAmountArgusSamples::Dispatcher
m_deFogEnableArgusSamples::Dispatcher
m_deFogQualityArgusSamples::Dispatcher
m_denoiseModeArgusSamples::Dispatcher
m_denoiseStrengthArgusSamples::Dispatcher
m_deviceApertureFnumsArgusSamples::Dispatcherprivate
m_deviceApertureMotorSpeedRangeArgusSamples::Dispatcherprivate
m_deviceAperturePositionRangeArgusSamples::Dispatcherprivate
m_deviceExposureCompensationRangeArgusSamples::Dispatcherprivate
m_deviceFocusPositionRangeArgusSamples::Dispatcherprivate
m_deviceIndexArgusSamples::Dispatcher
m_deviceIspDigitalGainRangeArgusSamples::Dispatcherprivate
m_deviceOpenArgusSamples::Dispatcher
m_edgeEnhanceModeArgusSamples::Dispatcher
m_edgeEnhanceStrengthArgusSamples::Dispatcher
m_exposureCompensationArgusSamples::Dispatcher
m_exposureTimeRangeArgusSamples::Dispatcher
m_focusPositionArgusSamples::Dispatcher
m_frameRateArgusSamples::Dispatcher
m_gainRangeArgusSamples::Dispatcher
m_iCameraProviderArgusSamples::Dispatcherprivate
m_initializedArgusSamples::Dispatcherprivate
m_ispDigitalGainRangeArgusSamples::Dispatcher
m_kpiArgusSamples::Dispatcher
m_observersArgusSamples::Dispatcherprivate
m_outputPathArgusSamples::Dispatcher
m_outputSizeArgusSamples::Dispatcher
m_sensorAnalogGainRangeArgusSamples::Dispatcherprivate
m_sensorExposureTimeRangeArgusSamples::Dispatcherprivate
m_sensorFrameRateRangeArgusSamples::Dispatcherprivate
m_sensorModeIndexArgusSamples::Dispatcher
m_sensorModesArgusSamples::Dispatcherprivate
m_sensorModeValidArgusSamples::Dispatcher
m_stillFileTypeArgusSamples::Dispatcher
m_verboseArgusSamples::Dispatcher
m_videoBitRateArgusSamples::Dispatcher
m_videoFileTypeArgusSamples::Dispatcher
m_videoFormatArgusSamples::Dispatcher
maxBurstRequests(Argus::CaptureSession *session=NULL)ArgusSamples::Dispatcher
message(const char *msg,...)ArgusSamples::Dispatcher
onDeviceIndexChanged(const Observed &source)ArgusSamples::Dispatcherprivate
onSensorModeIndexChanged(const Observed &source)ArgusSamples::Dispatcherprivate
operator=(const Dispatcher &)ArgusSamples::Dispatcherprivate
registerObserver(Argus::IDenoiseSettings *iDenoiseSettings)ArgusSamples::Dispatcherprivate
registerObserver(Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings)ArgusSamples::Dispatcherprivate
registerObserver(Argus::ISourceSettings *iSourceSettings)ArgusSamples::Dispatcherprivate
registerObserver(Argus::IAutoControlSettings *iAutoControlSettings)ArgusSamples::Dispatcherprivate
registerObserver(Argus::Ext::IDeFogSettings *iDeFogSettings)ArgusSamples::Dispatcherprivate
restartActiveRequests()ArgusSamples::Dispatcher
shutdown()ArgusSamples::Dispatcher
startRepeat(Argus::Request *request, Argus::CaptureSession *session=NULL)ArgusSamples::Dispatcher
startRepeatBurst(const std::vector< const Argus::Request * > &requestList, Argus::CaptureSession *session=NULL)ArgusSamples::Dispatcher
stopRepeat(Argus::CaptureSession *session=NULL)ArgusSamples::Dispatcher
supportsExtension(const Argus::ExtensionName &extension) const ArgusSamples::Dispatcher
track(Argus::CaptureSession *session)ArgusSamples::Dispatcherprivatevirtual
track(Argus::Request *request)ArgusSamples::Dispatcherprivatevirtual
unregisterObserver(Argus::Interface *interface)ArgusSamples::Dispatcherprivate
untrack(Argus::CaptureSession *session)ArgusSamples::Dispatcherprivatevirtual
untrack(Argus::Request *request)ArgusSamples::Dispatcherprivatevirtual
waitForEvents(Argus::EventQueue *eventQueue, TimeValue timeout=TimeValue::infinite(), Argus::CaptureSession *session=NULL)ArgusSamples::Dispatcher
waitForIdle(Argus::CaptureSession *session=NULL)ArgusSamples::Dispatcher
~Dispatcher()ArgusSamples::Dispatcherprivate
Tracker< Argus::~Tracker()ArgusSamples::Tracker< Argus::CaptureSession >inlinevirtual
Tracker< Argus::Request >::~Tracker()ArgusSamples::Tracker< Argus::Request >inlinevirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher.html new file mode 100644 index 0000000..f29a1d5 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher.html @@ -0,0 +1,2622 @@ + + + + + +Argus Camera Sample: ArgusSamples::Dispatcher Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

The dispatcher is called by clients like the command line interface. + More...

+ +

#include <Dispatcher.h>

+
+Inheritance diagram for ArgusSamples::Dispatcher:
+
+
+ + +ArgusSamples::Tracker< Argus::CaptureSession > +ArgusSamples::Tracker< Argus::Request > + +
+ +

List of all members.

+ + + +

+Classes

class  ActiveSession
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool shutdown ()
 Shutdown, free all resources.
bool supportsExtension (const Argus::ExtensionName &extension) const
 Returns whether or not an extension is supported.
bool getInfo (std::string &info) const
 Get an information string.
bool getSensorMode (uint32_t sensorModeIndex, Argus::SensorMode **sensorMode) const
 Get the sensor mode for a given index.
Argus::Range< int32_t > getDeviceFocusPositionRange () const
 Returns the range of focuser positions of the current device.
Argus::Range< int32_t > getDeviceAperturePositionRange () const
 Returns the range of aperture positions of the current device.
Argus::Range< float > getDeviceApertureMotorSpeedRange () const
 Returns the range of aperture motor positions per second of the current device.
bool getOutputSize (Argus::Size2D< uint32_t > *size) const
 Get the output size.
uint32_t getDeviceCount () const
 Get the amount of available camera devices.
bool createSession (TrackedUniqueObj< Argus::CaptureSession > &session, uint32_t deviceIndex)
 Create a capture session using the device index.
bool waitForEvents (Argus::EventQueue *eventQueue, TimeValue timeout=TimeValue::infinite(), Argus::CaptureSession *session=NULL)
 Wait for events from the specific session.
bool dumpSessionInfo () const
 Dump runtime information for a session.
bool createRequest (TrackedUniqueObj< Argus::Request > &request, Argus::CaptureIntent captureIntent, Argus::CaptureSession *session=NULL)
 Create a request for a session.
bool createEventQueue (const std::vector< Argus::EventType > &eventTypes, Argus::UniqueObj< Argus::EventQueue > &eventQueue, Argus::CaptureSession *session=NULL)
 create a event queue
bool capture (Argus::Request *request, Argus::CaptureSession *session=NULL)
 Submits a single capture request for a session.
bool startRepeat (Argus::Request *request, Argus::CaptureSession *session=NULL)
 Start a repeating request for a session.
bool startRepeatBurst (const std::vector< const Argus::Request * > &requestList, Argus::CaptureSession *session=NULL)
 Start a repeating burst request for a session.
bool stopRepeat (Argus::CaptureSession *session=NULL)
 Clears the repeating request for a session.
bool restartActiveRequests ()
 Restart the currently active requests to pick up changed settings.
uint32_t maxBurstRequests (Argus::CaptureSession *session=NULL)
 Returns the maximum number of capture requests for a session that can be included in a burst capture.
bool waitForIdle (Argus::CaptureSession *session=NULL)
 Wait until all pending captures for a session are complete.
bool createOutputStream (Argus::Request *request, bool enableMetadata, Argus::UniqueObj< Argus::OutputStream > &stream, Argus::CaptureSession *session=NULL)
 Create an output stream of an request of a session.
bool enableOutputStream (Argus::Request *request, Argus::OutputStream *stream)
 Enable an output stream of an request.
bool disableOutputStream (Argus::Request *request, Argus::OutputStream *stream)
 Disable an output stream of an request.
bool message (const char *msg,...)
 Output a message if verbose mode is enabled.
- Public Member Functions inherited from ArgusSamples::Tracker< Argus::CaptureSession >
virtual ~Tracker ()
- Public Member Functions inherited from ArgusSamples::Tracker< Argus::Request >
virtual ~Tracker ()
+ + + +

+Static Public Member Functions

static DispatchergetInstance ()
 Get the dispatcher instance.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

Value< uint32_t > m_deviceIndex
 the device index
Value< bool > m_deviceOpen
 if set then the device is open
Value< bool > m_sensorModeValid
Value< bool > m_verbose
 if set verbose mode is enabled and messages are printed
Value< bool > m_kpi
 if set kpi mode is enabled and kpi number are printed
Value< Argus::Range< uint64_t > > m_exposureTimeRange
 exposure time range
Value< Argus::Range< float > > m_gainRange
 gain range
Value< uint32_t > m_sensorModeIndex
 the sensor mode index
Value< float > m_frameRate
 in frames per second
Value< int32_t > m_focusPosition
 focus position
Value< int32_t > m_aperturePosition
 aperture position
Value< float > m_apertureFnum
 aperture position
Value< float > m_apertureMotorSpeed
 aperture motor steps/second
Value< Argus::PixelFormat > m_captureYuvFormat
 NV12 vs. P016 YUV color depth.
Value< Argus::DenoiseMode > m_denoiseMode
 denoise mode
Value< float > m_denoiseStrength
 denoise strength
Value< Argus::EdgeEnhanceMode > m_edgeEnhanceMode
 edge enhancement mode
Value< float > m_edgeEnhanceStrength
 edge enhancement strength
Value< Argus::AeAntibandingMode > m_aeAntibandingMode
 auto exposure antibanding mode
Value< bool > m_aeLock
 auto exposure lock
Value< bool > m_awbLock
 auto white balance lock
Value< Argus::AwbMode > m_awbMode
 auto white balance mode
Value< float > m_exposureCompensation
 exposure compensation
Value< Argus::Range< float > > m_ispDigitalGainRange
 ISP digital Gain Range.
Value< Argus::Range< uint32_t > > m_acRegionHorizontal
 auto control region horizontal
Value< Argus::Range< uint32_t > > m_acRegionVertical
 auto control region vertical
Value< StillFileTypem_stillFileType
 the still image file format
Value< VideoPipeline::VideoFormatm_videoFormat
 the video format
Value
+< VideoPipeline::VideoFileType
m_videoFileType
 the video file type
Value< uint32_t > m_videoBitRate
 the video bit rate
Value< Argus::Size2D< uint32_t > > m_outputSize
 output size
Value< std::string > m_outputPath
 output path
Value< bool > m_deFogEnable
 enable
Value< float > m_deFogAmount
 amount of fog to be removed. Range 0.0 - 1.0 (none - all)
Value< float > m_deFogQuality
 quality of the effect. Range 0.0 - 1.0 (low - high)
+ + +

+Private Types

typedef std::list< ActiveSessionActiveSessionList
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Member Functions

 Dispatcher ()
 ~Dispatcher ()
 Dispatcher (const Dispatcher &)
Dispatcheroperator= (const Dispatcher &)
bool initialize ()
 Initialize the dispatcher.
bool createSession ()
 Create the internal session.
bool closeSession ()
 Close the internal session.
bool track (Argus::CaptureSession *session)
 Start tracking a session.
bool untrack (Argus::CaptureSession *session)
 No longer track a session.
bool track (Argus::Request *request)
 Start tracking a request.
bool untrack (Argus::Request *request)
 No longer track a request.
bool registerObserver (Argus::IDenoiseSettings *iDenoiseSettings)
 Register an IDenoiseSettings observer.
bool registerObserver (Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings)
 Register an IEdgeEnhanceSettings observer.
bool registerObserver (Argus::ISourceSettings *iSourceSettings)
 Register an ISourceSettings observer.
bool registerObserver (Argus::IAutoControlSettings *iAutoControlSettings)
 Register an IAutoControlSettings observer.
bool registerObserver (Argus::Ext::IDeFogSettings *iDeFogSettings)
 Register an IDeFogSettings observer.
bool unregisterObserver (Argus::Interface *interface)
 Unregister an interface which had been registered as an observer.
bool onDeviceIndexChanged (const Observed &source)
 Callback when the device index changes.
bool onSensorModeIndexChanged (const Observed &source)
 Callback when the sensor mode index changes.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

std::vector< Argus::SensorMode * > m_sensorModes
 sensor modes
Value< Argus::Range< int32_t > > m_deviceFocusPositionRange
 device focus position range
Value< Argus::Range< int32_t > > m_deviceAperturePositionRange
 device aperture position range
std::vector< float > m_deviceApertureFnums
 device aperture fnum available values
Value< Argus::Range< float > > m_deviceApertureMotorSpeedRange
 device aperture motor speed range
Value< Argus::Range< float > > m_deviceExposureCompensationRange
 exposure compensation range
Value< Argus::Range
+< Argus::Range< float > > > 
m_deviceIspDigitalGainRange
 device isp digital gain range
Value< Argus::Range
+< Argus::Range< uint64_t > > > 
m_sensorExposureTimeRange
 exposure time range
Value< Argus::Range
+< Argus::Range< float > > > 
m_sensorAnalogGainRange
 analog gain range
Value< Argus::Range< float > > m_sensorFrameRateRange
 frame rate range
bool m_initialized
 if set the dispatcher is initialized
std::list
+< IObserverForInterface * > 
m_observers
Argus::UniqueObj
+< Argus::CameraProvider > 
m_cameraProvider
 camera provider
Argus::ICameraProvider * m_iCameraProvider
 camera provider interface
std::vector
+< Argus::CameraDevice * > 
m_cameraDevices
 a list of available devices
TrackedUniqueObj
+< Argus::CaptureSession > 
m_captureSession
 internal capture session
ActiveSessionList m_activeSessions
+

Detailed Description

+

The dispatcher is called by clients like the command line interface.

+

It provides functions to set properties like the camera device index or the sensor mode. It also implements services to open devices, sessions and create requests. It also maintains an internal capture session which is used when only a single session is required.

+ +

Definition at line 60 of file Dispatcher.h.

+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
typedef std::list<ActiveSession> ArgusSamples::Dispatcher::ActiveSessionList
+
+private
+
+ +

Definition at line 422 of file Dispatcher.h.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::Dispatcher::Dispatcher ()
+
+private
+
+ +

Definition at line 841 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::Dispatcher::~Dispatcher ()
+
+private
+
+ +

Definition at line 913 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::Dispatcher::Dispatcher (const Dispatcher)
+
+private
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::capture (Argus::Request * request,
Argus::CaptureSession * session = NULL 
)
+
+ +

Submits a single capture request for a session.

+
Parameters:
+ + + +
request[in] capture request
session[in] capture session (optional, if NULL the internal session is used)
+
+
+ +

Definition at line 1658 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::Dispatcher::closeSession ()
+
+private
+
+ +

Close the internal session.

+ +

Definition at line 1452 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::createEventQueue (const std::vector< Argus::EventType > & eventTypes,
Argus::UniqueObj< Argus::EventQueue > & eventQueue,
Argus::CaptureSession * session = NULL 
)
+
+ +

create a event queue

+
Parameters:
+ + + + +
eventTypes[in]
eventQueue[out] created event queue
session[in] capture session (optional, if NULL the internal session is used)
+
+
+ +

Definition at line 1634 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::createOutputStream (Argus::Request * request,
bool enableMetadata,
Argus::UniqueObj< Argus::OutputStream > & stream,
Argus::CaptureSession * session = NULL 
)
+
+ +

Create an output stream of an request of a session.

+
Parameters:
+ + + + + +
request[in] request
enableMetadata[in] whether or not to enable meatdata for the stream
stream[out] the created Argus output stream
session[in] capture session (optional, if NULL the internal session is used)
+
+
+ +

Definition at line 1867 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::createRequest (TrackedUniqueObj< Argus::Request > & request,
Argus::CaptureIntent captureIntent,
Argus::CaptureSession * session = NULL 
)
+
+ +

Create a request for a session.

+
Parameters:
+ + + + +
request[out] created request
captureIntent[in] capture intent
session[in] capture session (optional, if NULL the internal session is used)
+
+
+ +

Definition at line 1501 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::createSession (TrackedUniqueObj< Argus::CaptureSession > & session,
uint32_t deviceIndex 
)
+
+ +

Create a capture session using the device index.

+ +

Definition at line 1395 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::Dispatcher::createSession ()
+
+private
+
+ +

Create the internal session.

+ +

Definition at line 1439 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::disableOutputStream (Argus::Request * request,
Argus::OutputStream * stream 
)
+
+ +

Disable an output stream of an request.

+ +

Definition at line 1924 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::Dispatcher::dumpSessionInfo () const
+
+ +

Dump runtime information for a session.

+ +

Definition at line 1418 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::enableOutputStream (Argus::Request * request,
Argus::OutputStream * stream 
)
+
+ +

Enable an output stream of an request.

+ +

Definition at line 1911 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + +
Argus::Range< float > ArgusSamples::Dispatcher::getDeviceApertureMotorSpeedRange () const
+
+ +

Returns the range of aperture motor positions per second of the current device.

+

The units are aperture motor steps/second.

+ +

Definition at line 1383 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + +
Argus::Range< int32_t > ArgusSamples::Dispatcher::getDeviceAperturePositionRange () const
+
+ +

Returns the range of aperture positions of the current device.

+

The units are aperture positions.

+ +

Definition at line 1378 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + +
uint32_t ArgusSamples::Dispatcher::getDeviceCount () const
+
+ +

Get the amount of available camera devices.

+ +

Definition at line 1388 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + +
Argus::Range< int32_t > ArgusSamples::Dispatcher::getDeviceFocusPositionRange () const
+
+ +

Returns the range of focuser positions of the current device.

+

The units are focuser steps.

+ +

Definition at line 1373 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::Dispatcher::getInfo (std::string & info) const
+
+ +

Get an information string.

+ +

Definition at line 1194 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Dispatcher & ArgusSamples::Dispatcher::getInstance ()
+
+static
+
+ +

Get the dispatcher instance.

+ +

Definition at line 919 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::Dispatcher::getOutputSize (Argus::Size2D< uint32_t > * size) const
+
+ +

Get the output size.

+ +

Definition at line 1845 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::getSensorMode (uint32_t sensorModeIndex,
Argus::SensorMode ** sensorMode 
) const
+
+ +

Get the sensor mode for a given index.

+
Parameters:
+ + + +
sensorModeIndex[in]
sensorMode[out]
+
+
+ +

Definition at line 1361 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::Dispatcher::initialize ()
+
+private
+
+ +

Initialize the dispatcher.

+ +

Definition at line 940 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + +
uint32_t ArgusSamples::Dispatcher::maxBurstRequests (Argus::CaptureSession * session = NULL)
+
+ +

Returns the maximum number of capture requests for a session that can be included in a burst capture.

+
Parameters:
+ + +
session[in] capture session (optional, if NULL the internal session is used)
+
+
+ +

Definition at line 1805 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::message (const char * msg,
 ... 
)
+
+ +

Output a message if verbose mode is enabled.

+ +

Definition at line 2013 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::onDeviceIndexChanged (const Observed & source)
+
+private
+
+ +

Callback when the device index changes.

+ +

Definition at line 992 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::onSensorModeIndexChanged (const Observed & source)
+
+private
+
+ +

Callback when the sensor mode index changes.

+ +

Definition at line 1129 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Dispatcher& ArgusSamples::Dispatcher::operator= (const Dispatcher)
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::registerObserver (Argus::IDenoiseSettings * iDenoiseSettings)
+
+private
+
+ +

Register an IDenoiseSettings observer.

+ +

Definition at line 1937 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::registerObserver (Argus::IEdgeEnhanceSettings * iEdgeEnhanceSettings)
+
+private
+
+ +

Register an IEdgeEnhanceSettings observer.

+ +

Definition at line 1949 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::registerObserver (Argus::ISourceSettings * iSourceSettings)
+
+private
+
+ +

Register an ISourceSettings observer.

+ +

Definition at line 1961 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::registerObserver (Argus::IAutoControlSettings * iAutoControlSettings)
+
+private
+
+ +

Register an IAutoControlSettings observer.

+ +

Definition at line 1973 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::registerObserver (Argus::Ext::IDeFogSettings * iDeFogSettings)
+
+private
+
+ +

Register an IDeFogSettings observer.

+ +

Definition at line 1985 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::Dispatcher::restartActiveRequests ()
+
+ +

Restart the currently active requests to pick up changed settings.

+ +

Definition at line 1783 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::Dispatcher::shutdown ()
+
+ +

Shutdown, free all resources.

+ +

Definition at line 972 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::startRepeat (Argus::Request * request,
Argus::CaptureSession * session = NULL 
)
+
+ +

Start a repeating request for a session.

+
Parameters:
+ + + +
request[in] request
session[in] capture session (optional, if NULL the internal session is used)
+
+
+ +

Definition at line 1678 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::startRepeatBurst (const std::vector< const Argus::Request * > & requestList,
Argus::CaptureSession * session = NULL 
)
+
+ +

Start a repeating burst request for a session.

+
Parameters:
+ + + +
requestList[in] burst request
session[in] capture session (optional, if NULL the internal session is used)
+
+
+ +

Definition at line 1713 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::Dispatcher::stopRepeat (Argus::CaptureSession * session = NULL)
+
+ +

Clears the repeating request for a session.

+
Parameters:
+ + +
session[in] capture session (optional, if NULL the internal session is used)
+
+
+ +

Definition at line 1749 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::Dispatcher::supportsExtension (const Argus::ExtensionName & extension) const
+
+ +

Returns whether or not an extension is supported.

+ +

Definition at line 1189 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::track (Argus::CaptureSession * session)
+
+privatevirtual
+
+ +

Start tracking a session.

+ +

Implements ArgusSamples::Tracker< Argus::CaptureSession >.

+ +

Definition at line 1458 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::track (Argus::Request * request)
+
+privatevirtual
+
+ +

Start tracking a request.

+ +

Implements ArgusSamples::Tracker< Argus::Request >.

+ +

Definition at line 1576 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::unregisterObserver (Argus::Interface * interface)
+
+private
+
+ +

Unregister an interface which had been registered as an observer.

+ +

Definition at line 1997 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::untrack (Argus::CaptureSession * session)
+
+privatevirtual
+
+ +

No longer track a session.

+ +

Implements ArgusSamples::Tracker< Argus::CaptureSession >.

+ +

Definition at line 1464 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::Dispatcher::untrack (Argus::Request * request)
+
+privatevirtual
+
+ +

No longer track a request.

+ +

Implements ArgusSamples::Tracker< Argus::Request >.

+ +

Definition at line 1581 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool ArgusSamples::Dispatcher::waitForEvents (Argus::EventQueue * eventQueue,
TimeValue timeout = TimeValue::infinite(),
Argus::CaptureSession * session = NULL 
)
+
+ +

Wait for events from the specific session.

+
Parameters:
+ + + + +
eventQueue[in] event queue to transfer events to
timeout[in] maximum time (in nanoseconds) to wait for new events.
session[in] capture session (optional, if NULL the internal session is used)
+
+
+ +

Definition at line 1479 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::Dispatcher::waitForIdle (Argus::CaptureSession * session = NULL)
+
+ +

Wait until all pending captures for a session are complete.

+
Parameters:
+ + +
session[in] capture session (optional, if NULL the internal session is used)
+
+
+ +

Definition at line 1825 of file Dispatcher.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
Value<Argus::Range<uint32_t> > ArgusSamples::Dispatcher::m_acRegionHorizontal
+
+ +

auto control region horizontal

+ +

Definition at line 297 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<Argus::Range<uint32_t> > ArgusSamples::Dispatcher::m_acRegionVertical
+
+ +

auto control region vertical

+ +

Definition at line 298 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
ActiveSessionList ArgusSamples::Dispatcher::m_activeSessions
+
+private
+
+ +

Definition at line 423 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<Argus::AeAntibandingMode> ArgusSamples::Dispatcher::m_aeAntibandingMode
+
+ +

auto exposure antibanding mode

+ +

Definition at line 291 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<bool> ArgusSamples::Dispatcher::m_aeLock
+
+ +

auto exposure lock

+ +

Definition at line 292 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<float> ArgusSamples::Dispatcher::m_apertureFnum
+
+ +

aperture position

+ +

Definition at line 278 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<float> ArgusSamples::Dispatcher::m_apertureMotorSpeed
+
+ +

aperture motor steps/second

+ +

Definition at line 279 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<int32_t> ArgusSamples::Dispatcher::m_aperturePosition
+
+ +

aperture position

+ +

Definition at line 277 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<bool> ArgusSamples::Dispatcher::m_awbLock
+
+ +

auto white balance lock

+ +

Definition at line 293 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<Argus::AwbMode> ArgusSamples::Dispatcher::m_awbMode
+
+ +

auto white balance mode

+ +

Definition at line 294 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<Argus::CameraDevice*> ArgusSamples::Dispatcher::m_cameraDevices
+
+private
+
+ +

a list of available devices

+ +

Definition at line 407 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Argus::UniqueObj<Argus::CameraProvider> ArgusSamples::Dispatcher::m_cameraProvider
+
+private
+
+ +

camera provider

+ +

Definition at line 404 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TrackedUniqueObj<Argus::CaptureSession> ArgusSamples::Dispatcher::m_captureSession
+
+private
+
+ +

internal capture session

+ +

Definition at line 409 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<Argus::PixelFormat> ArgusSamples::Dispatcher::m_captureYuvFormat
+
+ +

NV12 vs. P016 YUV color depth.

+ +

Definition at line 280 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<float> ArgusSamples::Dispatcher::m_deFogAmount
+
+ +

amount of fog to be removed. Range 0.0 - 1.0 (none - all)

+ +

Definition at line 314 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<bool> ArgusSamples::Dispatcher::m_deFogEnable
+
+ +

enable

+ +

Definition at line 313 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<float> ArgusSamples::Dispatcher::m_deFogQuality
+
+ +

quality of the effect. Range 0.0 - 1.0 (low - high)

+ +

Definition at line 315 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<Argus::DenoiseMode> ArgusSamples::Dispatcher::m_denoiseMode
+
+ +

denoise mode

+ +

Definition at line 283 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<float> ArgusSamples::Dispatcher::m_denoiseStrength
+
+ +

denoise strength

+ +

Definition at line 284 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<float> ArgusSamples::Dispatcher::m_deviceApertureFnums
+
+private
+
+ +

device aperture fnum available values

+ +

Definition at line 250 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Value<Argus::Range<float> > ArgusSamples::Dispatcher::m_deviceApertureMotorSpeedRange
+
+private
+
+ +

device aperture motor speed range

+ +

Definition at line 251 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Value<Argus::Range<int32_t> > ArgusSamples::Dispatcher::m_deviceAperturePositionRange
+
+private
+
+ +

device aperture position range

+ +

Definition at line 249 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Value<Argus::Range<float> > ArgusSamples::Dispatcher::m_deviceExposureCompensationRange
+
+private
+
+ +

exposure compensation range

+ +

Definition at line 252 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Value<Argus::Range<int32_t> > ArgusSamples::Dispatcher::m_deviceFocusPositionRange
+
+private
+
+ +

device focus position range

+ +

Definition at line 248 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<uint32_t> ArgusSamples::Dispatcher::m_deviceIndex
+
+ +

the device index

+ +

Definition at line 264 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Value<Argus::Range<Argus::Range<float> > > ArgusSamples::Dispatcher::m_deviceIspDigitalGainRange
+
+private
+
+ +

device isp digital gain range

+ +

Definition at line 254 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<bool> ArgusSamples::Dispatcher::m_deviceOpen
+
+ +

if set then the device is open

+ +

Definition at line 265 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<Argus::EdgeEnhanceMode> ArgusSamples::Dispatcher::m_edgeEnhanceMode
+
+ +

edge enhancement mode

+ +

Definition at line 287 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<float> ArgusSamples::Dispatcher::m_edgeEnhanceStrength
+
+ +

edge enhancement strength

+ +

Definition at line 288 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<float> ArgusSamples::Dispatcher::m_exposureCompensation
+
+ +

exposure compensation

+ +

Definition at line 295 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<Argus::Range<uint64_t> > ArgusSamples::Dispatcher::m_exposureTimeRange
+
+ +

exposure time range

+ +

Definition at line 272 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<int32_t> ArgusSamples::Dispatcher::m_focusPosition
+
+ +

focus position

+ +

Definition at line 276 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<float> ArgusSamples::Dispatcher::m_frameRate
+
+ +

in frames per second

+ +

Definition at line 275 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<Argus::Range<float> > ArgusSamples::Dispatcher::m_gainRange
+
+ +

gain range

+ +

Definition at line 273 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Argus::ICameraProvider* ArgusSamples::Dispatcher::m_iCameraProvider
+
+private
+
+ +

camera provider interface

+ +

Definition at line 405 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::Dispatcher::m_initialized
+
+private
+
+ +

if set the dispatcher is initialized

+ +

Definition at line 400 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<Argus::Range<float> > ArgusSamples::Dispatcher::m_ispDigitalGainRange
+
+ +

ISP digital Gain Range.

+ +

Definition at line 296 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<bool> ArgusSamples::Dispatcher::m_kpi
+
+ +

if set kpi mode is enabled and kpi number are printed

+ +

Definition at line 269 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::list<IObserverForInterface*> ArgusSamples::Dispatcher::m_observers
+
+private
+
+ +

Definition at line 402 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<std::string> ArgusSamples::Dispatcher::m_outputPath
+
+ +

output path

+ +

Definition at line 310 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<Argus::Size2D<uint32_t> > ArgusSamples::Dispatcher::m_outputSize
+
+ +

output size

+ +

Definition at line 309 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Value<Argus::Range<Argus::Range<float> > > ArgusSamples::Dispatcher::m_sensorAnalogGainRange
+
+private
+
+ +

analog gain range

+ +

Definition at line 260 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Value<Argus::Range<Argus::Range<uint64_t> > > ArgusSamples::Dispatcher::m_sensorExposureTimeRange
+
+private
+
+ +

exposure time range

+ +

Definition at line 258 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Value<Argus::Range<float> > ArgusSamples::Dispatcher::m_sensorFrameRateRange
+
+private
+
+ +

frame rate range

+ +

Definition at line 261 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<uint32_t> ArgusSamples::Dispatcher::m_sensorModeIndex
+
+ +

the sensor mode index

+ +

Definition at line 274 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<Argus::SensorMode*> ArgusSamples::Dispatcher::m_sensorModes
+
+private
+
+ +

sensor modes

+ +

Definition at line 247 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<bool> ArgusSamples::Dispatcher::m_sensorModeValid
+
+ +

Definition at line 266 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<StillFileType> ArgusSamples::Dispatcher::m_stillFileType
+
+ +

the still image file format

+ +

Definition at line 301 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<bool> ArgusSamples::Dispatcher::m_verbose
+
+ +

if set verbose mode is enabled and messages are printed

+ +

Definition at line 268 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<uint32_t> ArgusSamples::Dispatcher::m_videoBitRate
+
+ +

the video bit rate

+ +

Definition at line 306 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<VideoPipeline::VideoFileType> ArgusSamples::Dispatcher::m_videoFileType
+
+ +

the video file type

+ +

Definition at line 305 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Value<VideoPipeline::VideoFormat> ArgusSamples::Dispatcher::m_videoFormat
+
+ +

the video format

+ +

Definition at line 304 of file Dispatcher.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher.png new file mode 100644 index 0000000..9bd86ca Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher_1_1ActiveSession-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher_1_1ActiveSession-members.html new file mode 100644 index 0000000..035b918 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher_1_1ActiveSession-members.html @@ -0,0 +1,108 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::Dispatcher::ActiveSession Member List
+
+
+ +

This is the complete list of members for ArgusSamples::Dispatcher::ActiveSession, including all inherited members.

+ + + + +
ActiveSession(Argus::CaptureSession *session)ArgusSamples::Dispatcher::ActiveSessioninline
m_requestsArgusSamples::Dispatcher::ActiveSession
m_sessionArgusSamples::Dispatcher::ActiveSession
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher_1_1ActiveSession.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher_1_1ActiveSession.html new file mode 100644 index 0000000..8051ad0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Dispatcher_1_1ActiveSession.html @@ -0,0 +1,180 @@ + + + + + +Argus Camera Sample: ArgusSamples::Dispatcher::ActiveSession Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::Dispatcher::ActiveSession Class Reference
+
+
+ +

List of all members.

+ + + +

+Public Member Functions

 ActiveSession (Argus::CaptureSession *session)
+ + + +

+Public Attributes

Argus::CaptureSession * m_session
std::vector< const
+Argus::Request * > 
m_requests
+

Detailed Description

+
+

Definition at line 411 of file Dispatcher.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::Dispatcher::ActiveSession::ActiveSession (Argus::CaptureSession * session)
+
+inline
+
+ +

Definition at line 414 of file Dispatcher.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
std::vector<const Argus::Request*> ArgusSamples::Dispatcher::ActiveSession::m_requests
+
+ +

Definition at line 420 of file Dispatcher.h.

+ +
+
+ +
+
+ + + + +
Argus::CaptureSession* ArgusSamples::Dispatcher::ActiveSession::m_session
+
+ +

Definition at line 419 of file Dispatcher.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EdgeEnhanceSettingsObserver-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EdgeEnhanceSettingsObserver-members.html new file mode 100644 index 0000000..0041b24 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EdgeEnhanceSettingsObserver-members.html @@ -0,0 +1,112 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::EdgeEnhanceSettingsObserver Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EdgeEnhanceSettingsObserver.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EdgeEnhanceSettingsObserver.html new file mode 100644 index 0000000..d6e6839 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EdgeEnhanceSettingsObserver.html @@ -0,0 +1,311 @@ + + + + + +Argus Camera Sample: ArgusSamples::EdgeEnhanceSettingsObserver Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::EdgeEnhanceSettingsObserver Class Reference
+
+
+ +

Edge enhancement settings observer. + More...

+
+Inheritance diagram for ArgusSamples::EdgeEnhanceSettingsObserver:
+
+
+ + +ArgusSamples::IObserverForInterface + +
+ +

List of all members.

+ + + + + + + + +

+Public Member Functions

 EdgeEnhanceSettingsObserver (Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings)
virtual ~EdgeEnhanceSettingsObserver ()
virtual bool isInterface (Argus::Interface *interface) const
 Check if this is the observer for the given interface.
- Public Member Functions inherited from ArgusSamples::IObserverForInterface
virtual ~IObserverForInterface ()
+ + + +

+Private Member Functions

bool onEdgeEnhanceModeChanged (const Observed &source)
bool onEdgeEnhanceStrengthChanged (const Observed &source)
+ + +

+Private Attributes

Argus::IEdgeEnhanceSettings * m_iEdgeEnhanceSettings
+

Detailed Description

+

Edge enhancement settings observer.

+

Update Argus edge enhance settings when values change.

+ +

Definition at line 147 of file Dispatcher.cpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::EdgeEnhanceSettingsObserver::EdgeEnhanceSettingsObserver (Argus::IEdgeEnhanceSettings * iEdgeEnhanceSettings)
+
+inline
+
+ +

Definition at line 150 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::EdgeEnhanceSettingsObserver::~EdgeEnhanceSettingsObserver ()
+
+inlinevirtual
+
+ +

Definition at line 163 of file Dispatcher.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool ArgusSamples::EdgeEnhanceSettingsObserver::isInterface (Argus::Interface * interface) const
+
+inlinevirtual
+
+ +

Check if this is the observer for the given interface.

+
Parameters:
+ + +
interface[in]
+
+
+ +

Implements ArgusSamples::IObserverForInterface.

+ +

Definition at line 175 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::EdgeEnhanceSettingsObserver::onEdgeEnhanceModeChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 181 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::EdgeEnhanceSettingsObserver::onEdgeEnhanceStrengthChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 198 of file Dispatcher.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Argus::IEdgeEnhanceSettings* ArgusSamples::EdgeEnhanceSettingsObserver::m_iEdgeEnhanceSettings
+
+private
+
+ +

Definition at line 215 of file Dispatcher.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EdgeEnhanceSettingsObserver.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EdgeEnhanceSettingsObserver.png new file mode 100644 index 0000000..a668ad8 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EdgeEnhanceSettingsObserver.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EventThread-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EventThread-members.html new file mode 100644 index 0000000..8f87401 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EventThread-members.html @@ -0,0 +1,113 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::EventThread Member List
+
+
+ +

This is the complete list of members for ArgusSamples::EventThread, including all inherited members.

+ + + + + + + + + +
EventThread(Argus::CaptureSession *session, SessionPerfTracker *sessionPerfTracker)ArgusSamples::EventThreadexplicit
m_eventQueueArgusSamples::EventThreadprivate
m_sessionArgusSamples::EventThreadprivate
m_sessionPerfTrackerArgusSamples::EventThreadprivate
threadExecute()ArgusSamples::EventThreadprotectedvirtual
threadInitialize()ArgusSamples::EventThreadprotectedvirtual
threadShutdown()ArgusSamples::EventThreadprotectedvirtual
~EventThread()ArgusSamples::EventThreadvirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EventThread.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EventThread.html new file mode 100644 index 0000000..9958abc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1EventThread.html @@ -0,0 +1,347 @@ + + + + + +Argus Camera Sample: ArgusSamples::EventThread Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::EventThread Class Reference
+
+
+ +

The EventThread is querying events from the session. + More...

+ +

#include <EventThread.h>

+ +

List of all members.

+ + + + +

+Public Member Functions

 EventThread (Argus::CaptureSession *session, SessionPerfTracker *sessionPerfTracker)
virtual ~EventThread ()
+ + + + +

+Protected Member Functions

virtual bool threadInitialize ()
virtual bool threadExecute ()
virtual bool threadShutdown ()
+ + + + +

+Private Attributes

Argus::CaptureSession * m_session
Argus::UniqueObj
+< Argus::EventQueue > 
m_eventQueue
SessionPerfTrackerm_sessionPerfTracker
+

Detailed Description

+

The EventThread is querying events from the session.

+

It does some analysis and then pass the info to a sessionPerfTracker.

+ +

Definition at line 45 of file EventThread.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ArgusSamples::EventThread::EventThread (Argus::CaptureSession * session,
SessionPerfTrackersessionPerfTracker 
)
+
+explicit
+
+ +

Definition at line 38 of file EventThread.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::EventThread::~EventThread ()
+
+virtual
+
+ +

Definition at line 45 of file EventThread.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::EventThread::threadExecute ()
+
+protectedvirtual
+
+
Todo:
IEvent documentation says the time value is in nano seconds, but actually it's in micro seconds.
+ +

Definition at line 60 of file EventThread.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::EventThread::threadInitialize ()
+
+protectedvirtual
+
+ +

Definition at line 49 of file EventThread.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::EventThread::threadShutdown ()
+
+protectedvirtual
+
+ +

Definition at line 155 of file EventThread.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Argus::UniqueObj<Argus::EventQueue> ArgusSamples::EventThread::m_eventQueue
+
+private
+
+ +

Definition at line 59 of file EventThread.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Argus::CaptureSession* ArgusSamples::EventThread::m_session
+
+private
+
+ +

Definition at line 58 of file EventThread.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
SessionPerfTracker* ArgusSamples::EventThread::m_sessionPerfTracker
+
+private
+
+ +

Definition at line 60 of file EventThread.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItem-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItem-members.html new file mode 100644 index 0000000..ae9031f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItem-members.html @@ -0,0 +1,123 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::GalleryItem Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItem.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItem.html new file mode 100644 index 0000000..e5cd806 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItem.html @@ -0,0 +1,596 @@ + + + + + +Argus Camera Sample: ArgusSamples::GalleryItem Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::GalleryItem Class Reference
+
+
+ +

Represents an item in the gallery. + More...

+
+Inheritance diagram for ArgusSamples::GalleryItem:
+
+
+ + +ArgusSamples::GalleryItemImage +ArgusSamples::GalleryItemVideo + +
+ +

List of all members.

+ + + + +

+Public Types

enum  Type { TYPE_IMAGE, +TYPE_VIDEO, +TYPE_INVALID + }
 item types More...
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 GalleryItem (const char *fileName, time_t modTime)
virtual ~GalleryItem ()
virtual bool initialize ()=0
 Initialize.
virtual bool shutdown ()=0
 shutdown
virtual bool startDisplay ()
 Start the display.
virtual bool pauseDisplay ()
 Pause the display.
virtual bool togglePlayBack ()
 Toggle playback.
virtual bool rewind ()
 Rewind.
virtual Type getType () const =0
 Get the item type.
const std::string & getFileName () const
 Get the file name.
+ + +

+Protected Member Functions

 GalleryItem ()
+ + + +

+Protected Attributes

std::string m_fileName
time_t m_modTime
+ + + +

+Friends

bool operator< (const GalleryItem &l, const GalleryItem &r)
 Compare function for sort().
+

Detailed Description

+

Represents an item in the gallery.

+ +

Definition at line 76 of file Gallery.cpp.

+

Member Enumeration Documentation

+ +
+
+ +

item types

+
Enumerator:
+ + + +
TYPE_IMAGE  +
TYPE_VIDEO  +
TYPE_INVALID  +
+
+
+ +

Definition at line 92 of file Gallery.cpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ArgusSamples::GalleryItem::GalleryItem (const char * fileName,
time_t modTime 
)
+
+inline
+
+ +

Definition at line 79 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::GalleryItem::~GalleryItem ()
+
+inlinevirtual
+
+ +

Definition at line 85 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::GalleryItem::GalleryItem ()
+
+protected
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
const std::string& ArgusSamples::GalleryItem::getFileName () const
+
+inline
+
+ +

Get the file name.

+ +

Definition at line 146 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Type ArgusSamples::GalleryItem::getType () const
+
+pure virtual
+
+ +

Get the item type.

+ +

Implemented in ArgusSamples::GalleryItemVideo, and ArgusSamples::GalleryItemImage.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::GalleryItem::initialize ()
+
+pure virtual
+
+ +

Initialize.

+ +

Implemented in ArgusSamples::GalleryItemVideo, and ArgusSamples::GalleryItemImage.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::GalleryItem::pauseDisplay ()
+
+inlinevirtual
+
+ +

Pause the display.

+ +

Reimplemented in ArgusSamples::GalleryItemVideo.

+ +

Definition at line 126 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::GalleryItem::rewind ()
+
+inlinevirtual
+
+ +

Rewind.

+ +

Reimplemented in ArgusSamples::GalleryItemVideo.

+ +

Definition at line 136 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::GalleryItem::shutdown ()
+
+pure virtual
+
+ +

shutdown

+ +

Implemented in ArgusSamples::GalleryItemVideo, and ArgusSamples::GalleryItemImage.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::GalleryItem::startDisplay ()
+
+inlinevirtual
+
+ +

Start the display.

+ +

Reimplemented in ArgusSamples::GalleryItemVideo.

+ +

Definition at line 121 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::GalleryItem::togglePlayBack ()
+
+inlinevirtual
+
+ +

Toggle playback.

+ +

Reimplemented in ArgusSamples::GalleryItemVideo.

+ +

Definition at line 131 of file Gallery.cpp.

+ +
+
+

Friends And Related Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool operator< (const GalleryIteml,
const GalleryItemr 
)
+
+friend
+
+ +

Compare function for sort().

+

Returns true if the first argument goes before the second argument, and false otherwise.

+ +

Definition at line 103 of file Gallery.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::string ArgusSamples::GalleryItem::m_fileName
+
+protected
+
+ +

Definition at line 152 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
time_t ArgusSamples::GalleryItem::m_modTime
+
+protected
+
+ +

Definition at line 153 of file Gallery.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItem.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItem.png new file mode 100644 index 0000000..9171f54 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItem.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemImage-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemImage-members.html new file mode 100644 index 0000000..6b5d063 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemImage-members.html @@ -0,0 +1,130 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::GalleryItemImage Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemImage.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemImage.html new file mode 100644 index 0000000..f2b99c2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemImage.html @@ -0,0 +1,468 @@ + + + + + +Argus Camera Sample: ArgusSamples::GalleryItemImage Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::GalleryItemImage Class Reference
+
+
+ +

A gallery image. + More...

+
+Inheritance diagram for ArgusSamples::GalleryItemImage:
+
+
+ + +ArgusSamples::GalleryItem + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 GalleryItemImage (const char *fileName, time_t modTime)
virtual ~GalleryItemImage ()
size_t getWidth () const
size_t getHeight () const
const uint8_t * getData () const
GalleryItem methods
virtual Type getType () const
 Get the item type.
virtual bool initialize ()
 Initialize.
virtual bool shutdown ()
 shutdown
- Public Member Functions inherited from ArgusSamples::GalleryItem
 GalleryItem (const char *fileName, time_t modTime)
virtual ~GalleryItem ()
virtual bool startDisplay ()
 Start the display.
virtual bool pauseDisplay ()
 Pause the display.
virtual bool togglePlayBack ()
 Toggle playback.
virtual bool rewind ()
 Rewind.
const std::string & getFileName () const
 Get the file name.
+ + + + +

+Private Attributes

size_t m_width
size_t m_height
std::vector< uint8_t > m_data
+ + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from ArgusSamples::GalleryItem
enum  Type { TYPE_IMAGE, +TYPE_VIDEO, +TYPE_INVALID + }
 item types More...
- Protected Member Functions inherited from ArgusSamples::GalleryItem
 GalleryItem ()
- Protected Attributes inherited from ArgusSamples::GalleryItem
std::string m_fileName
time_t m_modTime
+

Detailed Description

+

A gallery image.

+

Can load JPEG images. Holds image data in CPU memory.

+ +

Definition at line 170 of file Gallery.cpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ArgusSamples::GalleryItemImage::GalleryItemImage (const char * fileName,
time_t modTime 
)
+
+inline
+
+ +

Definition at line 173 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::GalleryItemImage::~GalleryItemImage ()
+
+inlinevirtual
+
+ +

Definition at line 180 of file Gallery.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
const uint8_t* ArgusSamples::GalleryItemImage::getData () const
+
+inline
+
+ +

Definition at line 205 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t ArgusSamples::GalleryItemImage::getHeight () const
+
+inline
+
+ +

Definition at line 200 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Type ArgusSamples::GalleryItemImage::getType () const
+
+inlinevirtual
+
+ +

Get the item type.

+ +

Implements ArgusSamples::GalleryItem.

+ +

Definition at line 187 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t ArgusSamples::GalleryItemImage::getWidth () const
+
+inline
+
+ +

Definition at line 195 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryItemImage::initialize ()
+
+virtual
+
+ +

Initialize.

+ +

Implements ArgusSamples::GalleryItem.

+ +

Definition at line 216 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryItemImage::shutdown ()
+
+virtual
+
+ +

shutdown

+ +

Implements ArgusSamples::GalleryItem.

+ +

Definition at line 282 of file Gallery.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::vector<uint8_t> ArgusSamples::GalleryItemImage::m_data
+
+private
+
+ +

Definition at line 213 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
size_t ArgusSamples::GalleryItemImage::m_height
+
+private
+
+ +

Definition at line 212 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
size_t ArgusSamples::GalleryItemImage::m_width
+
+private
+
+ +

Definition at line 211 of file Gallery.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemImage.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemImage.png new file mode 100644 index 0000000..d2c37d8 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemImage.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemVideo-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemVideo-members.html new file mode 100644 index 0000000..2bfe594 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemVideo-members.html @@ -0,0 +1,127 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::GalleryItemVideo Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemVideo.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemVideo.html new file mode 100644 index 0000000..8038e1d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemVideo.html @@ -0,0 +1,512 @@ + + + + + +Argus Camera Sample: ArgusSamples::GalleryItemVideo Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::GalleryItemVideo Class Reference
+
+
+ +

A gallery video. + More...

+
+Inheritance diagram for ArgusSamples::GalleryItemVideo:
+
+
+ + +ArgusSamples::GalleryItem + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 GalleryItemVideo (const char *fileName, time_t modTime)
virtual ~GalleryItemVideo ()
EGLStreamKHR getEGLStream () const
GalleryItem methods
virtual Type getType () const
 Get the item type.
virtual bool initialize ()
 Initialize.
virtual bool shutdown ()
 shutdown
virtual bool startDisplay ()
 Start the display.
virtual bool pauseDisplay ()
 Pause the display.
virtual bool togglePlayBack ()
 Toggle playback.
virtual bool rewind ()
 Rewind.
- Public Member Functions inherited from ArgusSamples::GalleryItem
 GalleryItem (const char *fileName, time_t modTime)
virtual ~GalleryItem ()
const std::string & getFileName () const
 Get the file name.
+ + + + +

+Private Attributes

VideoPipelinem_pipeline
EGLStreamKHR m_eglStream
 ! playback pipeline
+ + + + + + + + + +

+Additional Inherited Members

- Public Types inherited from ArgusSamples::GalleryItem
enum  Type { TYPE_IMAGE, +TYPE_VIDEO, +TYPE_INVALID + }
 item types More...
- Protected Member Functions inherited from ArgusSamples::GalleryItem
 GalleryItem ()
- Protected Attributes inherited from ArgusSamples::GalleryItem
std::string m_fileName
time_t m_modTime
+

Detailed Description

+

A gallery video.

+

Outputs to an EGL stream.

+ +

Definition at line 293 of file Gallery.cpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ArgusSamples::GalleryItemVideo::GalleryItemVideo (const char * fileName,
time_t modTime 
)
+
+inline
+
+ +

Definition at line 296 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::GalleryItemVideo::~GalleryItemVideo ()
+
+inlinevirtual
+
+ +

Definition at line 303 of file Gallery.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
EGLStreamKHR ArgusSamples::GalleryItemVideo::getEGLStream () const
+
+inline
+
+ +

Definition at line 322 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Type ArgusSamples::GalleryItemVideo::getType () const
+
+inlinevirtual
+
+ +

Get the item type.

+ +

Implements ArgusSamples::GalleryItem.

+ +

Definition at line 310 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryItemVideo::initialize ()
+
+virtual
+
+ +

Initialize.

+ +

Implements ArgusSamples::GalleryItem.

+ +

Definition at line 332 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryItemVideo::pauseDisplay ()
+
+virtual
+
+ +

Pause the display.

+ +

Reimplemented from ArgusSamples::GalleryItem.

+ +

Definition at line 376 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryItemVideo::rewind ()
+
+virtual
+
+ +

Rewind.

+ +

Reimplemented from ArgusSamples::GalleryItem.

+ +

Definition at line 394 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryItemVideo::shutdown ()
+
+virtual
+
+ +

shutdown

+ +

Implements ArgusSamples::GalleryItem.

+ +

Definition at line 355 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryItemVideo::startDisplay ()
+
+virtual
+
+ +

Start the display.

+ +

Reimplemented from ArgusSamples::GalleryItem.

+ +

Definition at line 366 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryItemVideo::togglePlayBack ()
+
+virtual
+
+ +

Toggle playback.

+ +

Reimplemented from ArgusSamples::GalleryItem.

+ +

Definition at line 385 of file Gallery.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
EGLStreamKHR ArgusSamples::GalleryItemVideo::m_eglStream
+
+private
+
+ +

! playback pipeline

+ +

Definition at line 329 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
VideoPipeline* ArgusSamples::GalleryItemVideo::m_pipeline
+
+private
+
+ +

Definition at line 328 of file Gallery.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemVideo.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemVideo.png new file mode 100644 index 0000000..bd6aaa9 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryItemVideo.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryThread-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryThread-members.html new file mode 100644 index 0000000..c49b5a8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryThread-members.html @@ -0,0 +1,142 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::GalleryThread Member List
+
+
+ +

This is the complete list of members for ArgusSamples::GalleryThread, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
buildItemList()ArgusSamples::GalleryThreadprivate
Command enum nameArgusSamples::GalleryThread
COMMAND_NEXT enum valueArgusSamples::GalleryThread
COMMAND_NONE enum valueArgusSamples::GalleryThread
COMMAND_PREV enum valueArgusSamples::GalleryThread
COMMAND_REWIND enum valueArgusSamples::GalleryThread
COMMAND_SHUTDOWN enum valueArgusSamples::GalleryThread
COMMAND_START enum valueArgusSamples::GalleryThread
COMMAND_STOP enum valueArgusSamples::GalleryThread
COMMAND_TOGGLE_PLAY_BACK enum valueArgusSamples::GalleryThread
execute(Command command)ArgusSamples::GalleryThread
GalleryItemList typedefArgusSamples::GalleryThread
GalleryThread()ArgusSamples::GalleryThread
getOutputStream() const ArgusSamples::GalleryThreadinlineprivate
initialize()ArgusSamples::GalleryThread
m_cmdCondArgusSamples::GalleryThreadprivate
m_cmdListArgusSamples::GalleryThreadprivate
m_cmdMutexArgusSamples::GalleryThreadprivate
m_contextArgusSamples::GalleryThreadprivate
m_copyProgramArgusSamples::GalleryThreadprivate
m_curItemArgusSamples::GalleryThreadprivate
m_eglImageOutputStreamArgusSamples::GalleryThreadprivate
m_eglOutputSurfaceArgusSamples::GalleryThreadprivate
m_itemListArgusSamples::GalleryThreadprivate
m_textureIDArgusSamples::GalleryThreadprivate
m_vboArgusSamples::GalleryThreadprivate
pauseDisplay()ArgusSamples::GalleryThreadprivate
rewind()ArgusSamples::GalleryThreadprivate
shutdown()ArgusSamples::GalleryThread
start()ArgusSamples::GalleryThreadprivate
startDisplay()ArgusSamples::GalleryThreadprivate
stop()ArgusSamples::GalleryThreadprivate
threadExecute()ArgusSamples::GalleryThreadprivatevirtual
threadInitialize()ArgusSamples::GalleryThreadprivatevirtual
threadShutdown()ArgusSamples::GalleryThreadprivatevirtual
togglePlayBack()ArgusSamples::GalleryThreadprivate
~GalleryThread()ArgusSamples::GalleryThread
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryThread.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryThread.html new file mode 100644 index 0000000..1c3ea38 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GalleryThread.html @@ -0,0 +1,863 @@ + + + + + +Argus Camera Sample: ArgusSamples::GalleryThread Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::GalleryThread Class Reference
+
+
+ +

This class handles creation of a thread scanning for supported images/videos, loading them and writing the content to an EGLStream. + More...

+ +

List of all members.

+ + + + +

+Public Types

enum  Command {
+  COMMAND_NONE, +COMMAND_SHUTDOWN, +COMMAND_NEXT, +COMMAND_PREV, +
+  COMMAND_START, +COMMAND_TOGGLE_PLAY_BACK, +COMMAND_REWIND, +COMMAND_STOP +
+ }
typedef std::list< GalleryItem * > GalleryItemList
+ + + + + + + +

+Public Member Functions

 GalleryThread ()
 ~GalleryThread ()
bool initialize ()
bool shutdown ()
bool execute (Command command)
 Execute a command.
+ + + + + + + + + + + + + + + + +

+Private Member Functions

virtual bool threadInitialize ()
virtual bool threadExecute ()
virtual bool threadShutdown ()
bool buildItemList ()
 Builds a list of gallery items by scanning the output path for image and video files.
bool start ()
 Start.
bool stop ()
 Stop.
bool startDisplay ()
bool pauseDisplay ()
bool togglePlayBack ()
bool rewind ()
EGLStreamKHR getOutputStream () const
 Get the current output stream.
+ + + + + + + + + + + + + + + +

+Private Attributes

ConditionVariable m_cmdCond
Mutex m_cmdMutex
 command condition variable
std::list< Ordered< Command > > m_cmdList
 command mutex
GLContext m_context
 command list, written by parent thread
EGLSurface m_eglOutputSurface
EGLStreamHolder m_eglImageOutputStream
GLuint m_textureID
GLuint m_copyProgram
GLuint m_vbo
GalleryItemList m_itemList
GalleryItemList::iterator m_curItem
+

Detailed Description

+

This class handles creation of a thread scanning for supported images/videos, loading them and writing the content to an EGLStream.

+ +

Definition at line 407 of file Gallery.cpp.

+

Member Typedef Documentation

+ +
+
+ +

Definition at line 428 of file Gallery.cpp.

+ +
+
+

Member Enumeration Documentation

+ +
+
+
Enumerator:
+ + + + + + + + +
COMMAND_NONE  +
COMMAND_SHUTDOWN  +

shutdown

+
COMMAND_NEXT  +

next item

+
COMMAND_PREV  +

previous item

+
COMMAND_START  +

start replay

+
COMMAND_TOGGLE_PLAY_BACK  +

toggle playback

+
COMMAND_REWIND  +

rewind

+
COMMAND_STOP  +

stop replay

+
+
+
+ +

Definition at line 416 of file Gallery.cpp.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::GalleryThread::GalleryThread ()
+
+ +

Definition at line 489 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + + + +
ArgusSamples::GalleryThread::~GalleryThread ()
+
+ +

Definition at line 498 of file Gallery.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryThread::buildItemList ()
+
+private
+
+ +

Builds a list of gallery items by scanning the output path for image and video files.

+

The list is sorted with the newest files first.

+ +

Definition at line 537 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::GalleryThread::execute (Command command)
+
+ +

Execute a command.

+ +

Definition at line 520 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
EGLStreamKHR ArgusSamples::GalleryThread::getOutputStream () const
+
+inlineprivate
+
+ +

Get the current output stream.

+ +

Definition at line 469 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::GalleryThread::initialize ()
+
+ +

Definition at line 503 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryThread::pauseDisplay ()
+
+private
+
+ +

Definition at line 794 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryThread::rewind ()
+
+private
+
+ +

Definition at line 815 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::GalleryThread::shutdown ()
+
+ +

Definition at line 512 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryThread::start ()
+
+private
+
+ +

Start.

+

Build the item list.

+ +

Definition at line 712 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryThread::startDisplay ()
+
+private
+
+ +

Definition at line 742 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryThread::stop ()
+
+private
+
+ +

Stop.

+

Pause display and free the item list.

+ +

Definition at line 730 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryThread::threadExecute ()
+
+privatevirtual
+
+ +

Definition at line 825 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryThread::threadInitialize ()
+
+privatevirtual
+
+
Todo:
Using 1920x1080 for now. Should use the image size, but this would require creating
+ +

Definition at line 635 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryThread::threadShutdown ()
+
+privatevirtual
+
+ +

Definition at line 885 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::GalleryThread::togglePlayBack ()
+
+private
+
+ +

Definition at line 805 of file Gallery.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
ConditionVariable ArgusSamples::GalleryThread::m_cmdCond
+
+private
+
+ +

Definition at line 436 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::list<Ordered<Command> > ArgusSamples::GalleryThread::m_cmdList
+
+private
+
+ +

command mutex

+ +

Definition at line 438 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Mutex ArgusSamples::GalleryThread::m_cmdMutex
+
+private
+
+ +

command condition variable

+ +

Definition at line 437 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
GLContext ArgusSamples::GalleryThread::m_context
+
+private
+
+ +

command list, written by parent thread

+ +

Definition at line 440 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
GLuint ArgusSamples::GalleryThread::m_copyProgram
+
+private
+
+ +

Definition at line 446 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
GalleryItemList::iterator ArgusSamples::GalleryThread::m_curItem
+
+private
+
+ +

Definition at line 450 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
EGLStreamHolder ArgusSamples::GalleryThread::m_eglImageOutputStream
+
+private
+
+ +

Definition at line 444 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
EGLSurface ArgusSamples::GalleryThread::m_eglOutputSurface
+
+private
+
+ +

Definition at line 443 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
GalleryItemList ArgusSamples::GalleryThread::m_itemList
+
+private
+
+ +

Definition at line 449 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
GLuint ArgusSamples::GalleryThread::m_textureID
+
+private
+
+ +

Definition at line 445 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + +
GLuint ArgusSamples::GalleryThread::m_vbo
+
+private
+
+ +

Definition at line 447 of file Gallery.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GstUnrefer-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GstUnrefer-members.html new file mode 100644 index 0000000..8d8cdbb --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GstUnrefer-members.html @@ -0,0 +1,115 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::GstUnrefer< T > Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GstUnrefer.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GstUnrefer.html new file mode 100644 index 0000000..92a19e3 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1GstUnrefer.html @@ -0,0 +1,429 @@ + + + + + +Argus Camera Sample: ArgusSamples::GstUnrefer< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::GstUnrefer< T > Class Template Reference
+
+
+ +

RAII helper class for calling gst_object_unref on exit from a block or function. + More...

+ +

List of all members.

+ + + + + + + + + + + + + +

+Public Member Functions

 GstUnrefer (T *p)
 GstUnrefer ()
 ~GstUnrefer ()
void cancel ()
 Cancel the unref.
void release ()
 Unref the object now.
void set (T *p)
 Set the object to be unrefed.
T * get () const
 Get the object.
+ + + + + +

+Private Member Functions

 GstUnrefer (GstUnrefer &other)
 Not implemented – use default constructor.
GstUnreferoperator= (GstUnrefer &)
 Not implemented.
+ + +

+Private Attributes

T * m_p
+

Detailed Description

+

template<typename T>
+class ArgusSamples::GstUnrefer< T >

+ +

RAII helper class for calling gst_object_unref on exit from a block or function.

+ +

Definition at line 60 of file VideoPipeline.cpp.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
ArgusSamples::GstUnrefer< T >::GstUnrefer (T * p)
+
+inlineexplicit
+
+ +

Definition at line 63 of file VideoPipeline.cpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
ArgusSamples::GstUnrefer< T >::GstUnrefer ()
+
+inline
+
+ +

Definition at line 67 of file VideoPipeline.cpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
ArgusSamples::GstUnrefer< T >::~GstUnrefer ()
+
+inline
+
+ +

Definition at line 71 of file VideoPipeline.cpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
ArgusSamples::GstUnrefer< T >::GstUnrefer (GstUnrefer< T > & other)
+
+private
+
+ +

Not implemented – use default constructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
void ArgusSamples::GstUnrefer< T >::cancel ()
+
+inline
+
+ +

Cancel the unref.

+ +

Definition at line 77 of file VideoPipeline.cpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T* ArgusSamples::GstUnrefer< T >::get () const
+
+inline
+
+ +

Get the object.

+ +

Definition at line 98 of file VideoPipeline.cpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
GstUnrefer& ArgusSamples::GstUnrefer< T >::operator= (GstUnrefer< T > & )
+
+private
+
+ +

Not implemented.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
void ArgusSamples::GstUnrefer< T >::release ()
+
+inline
+
+ +

Unref the object now.

+ +

Definition at line 83 of file VideoPipeline.cpp.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
void ArgusSamples::GstUnrefer< T >::set (T * p)
+
+inline
+
+ +

Set the object to be unrefed.

+ +

Definition at line 91 of file VideoPipeline.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
T* ArgusSamples::GstUnrefer< T >::m_p
+
+private
+
+ +

Definition at line 104 of file VideoPipeline.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IAppModule-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IAppModule-members.html new file mode 100644 index 0000000..ebb70a2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IAppModule-members.html @@ -0,0 +1,111 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::IAppModule Member List
+
+
+ +

This is the complete list of members for ArgusSamples::IAppModule, including all inherited members.

+ + + + + + + +
IAppModule()ArgusSamples::IAppModuleinline
initialize(Options &options)=0ArgusSamples::IAppModulepure virtual
shutdown()=0ArgusSamples::IAppModulepure virtual
start(Window::IGuiMenuBar *iGuiMenuBar=NULL, Window::IGuiContainer *iGuiContainerConfig=NULL)=0ArgusSamples::IAppModulepure virtual
stop()=0ArgusSamples::IAppModulepure virtual
~IAppModule()ArgusSamples::IAppModuleinlinevirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IAppModule.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IAppModule.html new file mode 100644 index 0000000..209f16b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IAppModule.html @@ -0,0 +1,331 @@ + + + + + +Argus Camera Sample: ArgusSamples::IAppModule Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::IAppModule Class Reference
+
+
+ +

A application module exposes command line options, GUI elements and executes tasks. + More...

+ +

#include <IAppModule.h>

+
+Inheritance diagram for ArgusSamples::IAppModule:
+
+
+ + +ArgusSamples::AppModuleCapture +ArgusSamples::AppModuleGallery +ArgusSamples::AppModuleGeneric +ArgusSamples::AppModuleMultiExposure +ArgusSamples::AppModuleMultiSession +ArgusSamples::AppModuleVideo + +
+ +

List of all members.

+ + + + + + + + + + + + +

+Public Member Functions

 IAppModule ()
virtual ~IAppModule ()
virtual bool initialize (Options &options)=0
 Initialize.
virtual bool shutdown ()=0
 Shut down.
virtual bool start (Window::IGuiMenuBar *iGuiMenuBar=NULL, Window::IGuiContainer *iGuiContainerConfig=NULL)=0
 Start the module.
virtual bool stop ()=0
 Stop the module.
+

Detailed Description

+

A application module exposes command line options, GUI elements and executes tasks.

+ +

Definition at line 42 of file IAppModule.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::IAppModule::IAppModule ()
+
+inline
+
+ +

Definition at line 45 of file IAppModule.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::IAppModule::~IAppModule ()
+
+inlinevirtual
+
+ +

Definition at line 46 of file IAppModule.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool ArgusSamples::IAppModule::initialize (Options & options)
+
+pure virtual
+
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::IAppModule::shutdown ()
+
+pure virtual
+
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool ArgusSamples::IAppModule::start (Window::IGuiMenuBar * iGuiMenuBar = NULL,
Window::IGuiContainer * iGuiContainerConfig = NULL 
)
+
+pure virtual
+
+ +

Start the module.

+
Parameters:
+ + + +
[in]iGuiMenuBaroptional, the module can add menu items to this menu bar
[in]iGuiContainerConfigoptional, the module can add configuration options to this container
+
+
+ +

Implemented in ArgusSamples::AppModuleCapture, ArgusSamples::AppModuleMultiExposure, ArgusSamples::AppModuleMultiSession, ArgusSamples::AppModuleGeneric, ArgusSamples::AppModuleGallery, and ArgusSamples::AppModuleVideo.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::IAppModule::stop ()
+
+pure virtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IAppModule.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IAppModule.png new file mode 100644 index 0000000..c88e5e7 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IAppModule.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IObserverForInterface-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IObserverForInterface-members.html new file mode 100644 index 0000000..7899dc8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IObserverForInterface-members.html @@ -0,0 +1,107 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::IObserverForInterface Member List
+
+
+ +

This is the complete list of members for ArgusSamples::IObserverForInterface, including all inherited members.

+ + + +
isInterface(Argus::Interface *interface) const =0ArgusSamples::IObserverForInterfacepure virtual
~IObserverForInterface()ArgusSamples::IObserverForInterfaceinlinevirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IObserverForInterface.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IObserverForInterface.html new file mode 100644 index 0000000..265177e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IObserverForInterface.html @@ -0,0 +1,197 @@ + + + + + +Argus Camera Sample: ArgusSamples::IObserverForInterface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::IObserverForInterface Class Reference
+
+
+ +

An observer for an Argus interface. + More...

+
+Inheritance diagram for ArgusSamples::IObserverForInterface:
+
+
+ + +ArgusSamples::AutoControlSettingsObserver +ArgusSamples::DeFogSettingsObserver +ArgusSamples::DenoiseSettingsObserver +ArgusSamples::EdgeEnhanceSettingsObserver +ArgusSamples::SourceSettingsObserver + +
+ +

List of all members.

+ + + + + +

+Public Member Functions

virtual ~IObserverForInterface ()
virtual bool isInterface (Argus::Interface *interface) const =0
 Check if this is the observer for the given interface.
+

Detailed Description

+

An observer for an Argus interface.

+ +

Definition at line 60 of file Dispatcher.cpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::IObserverForInterface::~IObserverForInterface ()
+
+inlinevirtual
+
+ +

Definition at line 63 of file Dispatcher.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool ArgusSamples::IObserverForInterface::isInterface (Argus::Interface * interface) const
+
+pure virtual
+
+ +

Check if this is the observer for the given interface.

+
Parameters:
+ + +
interface[in]
+
+
+ +

Implemented in ArgusSamples::DeFogSettingsObserver, ArgusSamples::AutoControlSettingsObserver, ArgusSamples::SourceSettingsObserver, ArgusSamples::EdgeEnhanceSettingsObserver, and ArgusSamples::DenoiseSettingsObserver.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IObserverForInterface.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IObserverForInterface.png new file mode 100644 index 0000000..35d5d7c Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1IObserverForInterface.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ITask-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ITask-members.html new file mode 100644 index 0000000..13fd68a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ITask-members.html @@ -0,0 +1,111 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::ITask Member List
+
+
+ +

This is the complete list of members for ArgusSamples::ITask, including all inherited members.

+ + + + + + + +
initialize()=0ArgusSamples::ITaskpure virtual
ITask()ArgusSamples::ITaskinline
shutdown()=0ArgusSamples::ITaskpure virtual
start()=0ArgusSamples::ITaskpure virtual
stop()=0ArgusSamples::ITaskpure virtual
~ITask()ArgusSamples::ITaskinlinevirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ITask.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ITask.html new file mode 100644 index 0000000..dfe7f6d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ITask.html @@ -0,0 +1,306 @@ + + + + + +Argus Camera Sample: ArgusSamples::ITask Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::ITask Class Reference
+
+
+ +

Base class for tasks. + More...

+ +

#include <ITask.h>

+
+Inheritance diagram for ArgusSamples::ITask:
+
+
+ + +ArgusSamples::TaskGallery +ArgusSamples::TaskMultiExposure +ArgusSamples::TaskMultiSession +ArgusSamples::TaskStillCapture +ArgusSamples::TaskVideoRecord + +
+ +

List of all members.

+ + + + + + + + + + + + +

+Public Member Functions

 ITask ()
virtual ~ITask ()
virtual bool initialize ()=0
 Initialize.
virtual bool shutdown ()=0
 Shutdown.
virtual bool start ()=0
 Start.
virtual bool stop ()=0
 Stop.
+

Detailed Description

+

Base class for tasks.

+

Tasks provide functionality like capturing of still images or video recording.

+ +

Definition at line 40 of file ITask.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::ITask::ITask ()
+
+inline
+
+ +

Definition at line 43 of file ITask.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::ITask::~ITask ()
+
+inlinevirtual
+
+ +

Definition at line 44 of file ITask.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::ITask::initialize ()
+
+pure virtual
+
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::ITask::shutdown ()
+
+pure virtual
+
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::ITask::start ()
+
+pure virtual
+
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool ArgusSamples::ITask::stop ()
+
+pure virtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ITask.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ITask.png new file mode 100644 index 0000000..d1c44b2 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ITask.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Mutex-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Mutex-members.html new file mode 100644 index 0000000..bf3a3ee --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Mutex-members.html @@ -0,0 +1,117 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::Mutex Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Mutex.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Mutex.html new file mode 100644 index 0000000..16ad35b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Mutex.html @@ -0,0 +1,414 @@ + + + + + +Argus Camera Sample: ArgusSamples::Mutex Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::Mutex Class Reference
+
+
+ +

Mutex. + More...

+ +

#include <Mutex.h>

+ +

List of all members.

+ + + + + + + + + + + + +

+Public Member Functions

 Mutex ()
 ~Mutex ()
bool initialize ()
 Create the underlying mutex.
bool shutdown ()
 Destroy the underlying mutex.
bool lock () const
 Lock the mutex.
bool unlock () const
 Unlock the mutex.
+ + + + + +

+Private Member Functions

 Mutex (Mutex &other)
 Hide copy constructor and assignment operator.
const Mutexoperator= (const Mutex &)
pthread_mutex_t * getPThreadMutex () const
+ + + + +

+Private Attributes

bool m_initialized
pthread_mutex_t m_mutex
 pthread mutex, this is 'mutable' so that 'const' functions can be used.
+ + +

+Friends

class ConditionVariable
+

Detailed Description

+

Mutex.

+ +

Definition at line 44 of file Mutex.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::Mutex::Mutex ()
+
+ +

Definition at line 35 of file Mutex.cpp.

+ +
+
+ +
+
+ + + + + + + +
ArgusSamples::Mutex::~Mutex ()
+
+ +

Definition at line 40 of file Mutex.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::Mutex::Mutex (Mutexother)
+
+private
+
+ +

Hide copy constructor and assignment operator.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
pthread_mutex_t* ArgusSamples::Mutex::getPThreadMutex () const
+
+inlineprivate
+
+ +

Definition at line 87 of file Mutex.h.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::Mutex::initialize ()
+
+ +

Create the underlying mutex.

+

This method must be called before any other methods.

+ +

Definition at line 45 of file Mutex.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::Mutex::lock () const
+
+ +

Lock the mutex.

+

This method is declared const for convenience.

+ +

Definition at line 69 of file Mutex.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const Mutex& ArgusSamples::Mutex::operator= (const Mutex)
+
+private
+
+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::Mutex::shutdown ()
+
+ +

Destroy the underlying mutex.

+

After this call, this object can no longer be used (until and unless a future call to initialize()). Calling this method if the object is not initialized generates no error, but silently returns.

+ +

Definition at line 57 of file Mutex.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::Mutex::unlock () const
+
+ +

Unlock the mutex.

+

This method is declared const for convenience.

+ +

Definition at line 80 of file Mutex.cpp.

+ +
+
+

Friends And Related Function Documentation

+ +
+
+ + + + + +
+ + + + +
friend class ConditionVariable
+
+friend
+
+ +

Definition at line 85 of file Mutex.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::Mutex::m_initialized
+
+private
+
+ +

Definition at line 73 of file Mutex.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
pthread_mutex_t ArgusSamples::Mutex::m_mutex
+
+mutableprivate
+
+ +

pthread mutex, this is 'mutable' so that 'const' functions can be used.

+ +

Definition at line 77 of file Mutex.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1PerfTracker-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1PerfTracker-members.html new file mode 100644 index 0000000..9320428 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1PerfTracker-members.html @@ -0,0 +1,120 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::PerfTracker Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1PerfTracker.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1PerfTracker.html new file mode 100644 index 0000000..45554a2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1PerfTracker.html @@ -0,0 +1,519 @@ + + + + + +Argus Camera Sample: ArgusSamples::PerfTracker Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Used to track global performance events. + More...

+ +

#include <PerfTracker.h>

+ +

List of all members.

+ + + + + + + +

+Public Member Functions

bool onEvent (GlobalEvent event)
 Trigger a global event.
const TimeValueappStartTime () const
const TimeValueappInitializedTime () const
uint32_t getNewSessionID ()
+ + + +

+Static Public Member Functions

static PerfTrackergetInstance ()
 Get the window instance.
+ + + + + + +

+Private Member Functions

 PerfTracker ()
 ~PerfTracker ()
 PerfTracker (const PerfTracker &)
PerfTrackeroperator= (const PerfTracker &)
bool initialize ()
+ + + + + + +

+Private Attributes

TimeValue m_appStartTime
TimeValue m_appInitializedTime
TimeValue m_firstDisplayTime
uint64_t m_displayCount
Ordered< uint32_t > m_sessionId
+

Detailed Description

+

Used to track global performance events.

+ +

Definition at line 58 of file PerfTracker.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::PerfTracker::PerfTracker ()
+
+private
+
+ +

Definition at line 44 of file PerfTracker.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::PerfTracker::~PerfTracker ()
+
+private
+
+ +

Definition at line 49 of file PerfTracker.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::PerfTracker::PerfTracker (const PerfTracker)
+
+private
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
const TimeValue& ArgusSamples::PerfTracker::appInitializedTime () const
+
+inline
+
+
Returns:
the point in time when app initialization finished
+ +

Definition at line 84 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const TimeValue& ArgusSamples::PerfTracker::appStartTime () const
+
+inline
+
+
Returns:
the point in time when the app had been started
+ +

Definition at line 76 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
PerfTracker & ArgusSamples::PerfTracker::getInstance ()
+
+static
+
+ +

Get the window instance.

+ +

Definition at line 60 of file PerfTracker.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
uint32_t ArgusSamples::PerfTracker::getNewSessionID ()
+
+inline
+
+
Returns:
a new session Id
+ +

Definition at line 92 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::PerfTracker::initialize ()
+
+private
+
+ +

Definition at line 53 of file PerfTracker.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::PerfTracker::onEvent (GlobalEvent event)
+
+ +

Trigger a global event.

+
Parameters:
+ + +
type[in] event type
+
+
+ +

Definition at line 81 of file PerfTracker.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
PerfTracker& ArgusSamples::PerfTracker::operator= (const PerfTracker)
+
+private
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
TimeValue ArgusSamples::PerfTracker::m_appInitializedTime
+
+private
+
+ +

Definition at line 109 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TimeValue ArgusSamples::PerfTracker::m_appStartTime
+
+private
+
+ +

Definition at line 108 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::PerfTracker::m_displayCount
+
+private
+
+ +

Definition at line 112 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TimeValue ArgusSamples::PerfTracker::m_firstDisplayTime
+
+private
+
+ +

Definition at line 111 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Ordered<uint32_t> ArgusSamples::PerfTracker::m_sessionId
+
+private
+
+ +

Definition at line 114 of file PerfTracker.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedGuard-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedGuard-members.html new file mode 100644 index 0000000..1694376 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedGuard-members.html @@ -0,0 +1,115 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::ScopedGuard< T > Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedGuard.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedGuard.html new file mode 100644 index 0000000..8577f5e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedGuard.html @@ -0,0 +1,438 @@ + + + + + +Argus Camera Sample: ArgusSamples::ScopedGuard< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::ScopedGuard< T > Class Template Reference
+
+
+ +

RAII-syle class performing an action when control flow leaves the scope. + More...

+ +

#include <ScopedGuard.h>

+ +

List of all members.

+ + + + +

+Public Types

typedef bool(T::* ActionType )()
 Action function type.
+ + + + + + + +

+Public Member Functions

 ScopedGuard (T *object, ActionType action)
 Constructor.
 ~ScopedGuard ()
 Destructor.
void cancel ()
 Cancel the action associated with this instance.
+ + + + + + + +

+Private Member Functions

void leaveScope ()
 Called when leaving the scope.
 ScopedGuard ()
 Hide default/copy constructor and assignment operator.
 ScopedGuard (ScopedGuard &other)
const ScopedGuardoperator= (const ScopedGuard &)
+ + + +

+Private Attributes

T * m_object
ActionType m_action
+

Detailed Description

+

template<typename T>
+class ArgusSamples::ScopedGuard< T >

+ +

RAII-syle class performing an action when control flow leaves the scope.

+

Typically the action to be performed is to undo a previous action in case of an error.

+ +

Definition at line 39 of file ScopedGuard.h.

+

Member Typedef Documentation

+ +
+
+
+template<typename T >
+ + + + +
typedef bool(T::* ArgusSamples::ScopedGuard< T >::ActionType)()
+
+ +

Action function type.

+ +

Definition at line 45 of file ScopedGuard.h.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
ArgusSamples::ScopedGuard< T >::ScopedGuard (T * object,
ActionType action 
)
+
+inline
+
+ +

Constructor.

+
Parameters:
+ + + +
object[in] the object to perform the action on
action[in] the action to perform
+
+
+ +

Definition at line 53 of file ScopedGuard.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
ArgusSamples::ScopedGuard< T >::~ScopedGuard ()
+
+inline
+
+ +

Destructor.

+ +

Definition at line 61 of file ScopedGuard.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
ArgusSamples::ScopedGuard< T >::ScopedGuard ()
+
+private
+
+ +

Hide default/copy constructor and assignment operator.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
ArgusSamples::ScopedGuard< T >::ScopedGuard (ScopedGuard< T > & other)
+
+private
+
+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
void ArgusSamples::ScopedGuard< T >::cancel ()
+
+inline
+
+ +

Cancel the action associated with this instance.

+ +

Definition at line 69 of file ScopedGuard.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
void ArgusSamples::ScopedGuard< T >::leaveScope ()
+
+inlineprivate
+
+ +

Called when leaving the scope.

+

Calls action and resets the action.

+ +

Definition at line 81 of file ScopedGuard.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
const ScopedGuard& ArgusSamples::ScopedGuard< T >::operator= (const ScopedGuard< T > & )
+
+private
+
+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
ActionType ArgusSamples::ScopedGuard< T >::m_action
+
+private
+
+ +

Definition at line 76 of file ScopedGuard.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
T* ArgusSamples::ScopedGuard< T >::m_object
+
+private
+
+ +

Definition at line 75 of file ScopedGuard.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedMutex-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedMutex-members.html new file mode 100644 index 0000000..04b980c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedMutex-members.html @@ -0,0 +1,113 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::ScopedMutex Member List
+
+
+ +

This is the complete list of members for ArgusSamples::ScopedMutex, including all inherited members.

+ + + + + + + + + +
expectLocked() const ArgusSamples::ScopedMutexinline
m_isLockedArgusSamples::ScopedMutexprivate
m_mutexArgusSamples::ScopedMutexprivate
operator=(const ScopedMutex &)ArgusSamples::ScopedMutexprivate
ScopedMutex(Mutex &mutex)ArgusSamples::ScopedMutexinlineexplicit
ScopedMutex()ArgusSamples::ScopedMutexprivate
ScopedMutex(ScopedMutex &other)ArgusSamples::ScopedMutexprivate
~ScopedMutex()ArgusSamples::ScopedMutexinline
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedMutex.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedMutex.html new file mode 100644 index 0000000..eea9347 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1ScopedMutex.html @@ -0,0 +1,336 @@ + + + + + +Argus Camera Sample: ArgusSamples::ScopedMutex Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::ScopedMutex Class Reference
+
+
+ +

An RAII-style class for acquiring a Mutex. + More...

+ +

#include <Mutex.h>

+ +

List of all members.

+ + + + + +

+Public Member Functions

 ScopedMutex (Mutex &mutex)
 ~ScopedMutex ()
bool expectLocked () const
+ + + + + +

+Private Member Functions

 ScopedMutex ()
 Hide default/copy constructor and assignment operator.
 ScopedMutex (ScopedMutex &other)
ScopedMutexoperator= (const ScopedMutex &)
+ + + +

+Private Attributes

Mutexm_mutex
bool m_isLocked
+

Detailed Description

+

An RAII-style class for acquiring a Mutex.

+

The mutex is acquired in the constructor and released in the destructor. This class is NOT to be subclassed.

+ +

Definition at line 98 of file Mutex.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::ScopedMutex::ScopedMutex (Mutexmutex)
+
+inlineexplicit
+
+ +

Definition at line 101 of file Mutex.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::ScopedMutex::~ScopedMutex ()
+
+inline
+
+ +

Definition at line 108 of file Mutex.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::ScopedMutex::ScopedMutex ()
+
+private
+
+ +

Hide default/copy constructor and assignment operator.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::ScopedMutex::ScopedMutex (ScopedMutexother)
+
+private
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::ScopedMutex::expectLocked () const
+
+inline
+
+ +

Definition at line 114 of file Mutex.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ScopedMutex& ArgusSamples::ScopedMutex::operator= (const ScopedMutex)
+
+private
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::ScopedMutex::m_isLocked
+
+private
+
+ +

Definition at line 123 of file Mutex.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Mutex* ArgusSamples::ScopedMutex::m_mutex
+
+private
+
+ +

Definition at line 122 of file Mutex.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SessionPerfTracker-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SessionPerfTracker-members.html new file mode 100644 index 0000000..163ea9a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SessionPerfTracker-members.html @@ -0,0 +1,143 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::SessionPerfTracker Member List
+
+
+ +

This is the complete list of members for ArgusSamples::SessionPerfTracker, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
m_closeDoneTimeArgusSamples::SessionPerfTrackerprivate
m_closeRequestedTimeArgusSamples::SessionPerfTrackerprivate
m_countFramePeriodArgusSamples::SessionPerfTrackerprivate
m_countLatencyArgusSamples::SessionPerfTrackerprivate
m_eventThreadArgusSamples::SessionPerfTrackerprivate
m_firstRequestReceivedTimeArgusSamples::SessionPerfTrackerprivate
m_flushDoneTimeArgusSamples::SessionPerfTrackerprivate
m_idArgusSamples::SessionPerfTrackerprivate
m_issueCaptureTimeArgusSamples::SessionPerfTrackerprivate
m_lastFrameCountArgusSamples::SessionPerfTrackerprivate
m_maxFramePeriodArgusSamples::SessionPerfTrackerprivate
m_maxLatencyArgusSamples::SessionPerfTrackerprivate
m_minFramePeriodArgusSamples::SessionPerfTrackerprivate
m_minLatencyArgusSamples::SessionPerfTrackerprivate
m_numberframesReceivedArgusSamples::SessionPerfTrackerprivate
m_previousKpiArgusSamples::SessionPerfTrackerprivate
m_previousSensorTimeArgusSamples::SessionPerfTrackerprivate
m_requestReceivedTimeArgusSamples::SessionPerfTrackerprivate
m_sessionArgusSamples::SessionPerfTrackerprivate
m_statsCountFramePeriodArgusSamples::SessionPerfTrackerprivate
m_statsCountLatencyArgusSamples::SessionPerfTrackerprivate
m_statsFrameDropCountArgusSamples::SessionPerfTrackerprivate
m_statsMaxFramePeriodArgusSamples::SessionPerfTrackerprivate
m_statsMaxLatencyArgusSamples::SessionPerfTrackerprivate
m_statsMinFramePeriodArgusSamples::SessionPerfTrackerprivate
m_statsMinLatencyArgusSamples::SessionPerfTrackerprivate
m_statsOutOfOrderCountArgusSamples::SessionPerfTrackerprivate
m_statsSumFramePeriodArgusSamples::SessionPerfTrackerprivate
m_statsSumLatencyArgusSamples::SessionPerfTrackerprivate
m_sumFramePeriodArgusSamples::SessionPerfTrackerprivate
m_sumLatencyArgusSamples::SessionPerfTrackerprivate
m_taskStartTimeArgusSamples::SessionPerfTrackerprivate
m_totalFrameDropArgusSamples::SessionPerfTrackerprivate
onEvent(SessionEvent event, uint64_t value=0)ArgusSamples::SessionPerfTracker
SessionPerfTracker()ArgusSamples::SessionPerfTracker
setSession(Argus::CaptureSession *session)ArgusSamples::SessionPerfTracker
shutdown()ArgusSamples::SessionPerfTracker
~SessionPerfTracker()ArgusSamples::SessionPerfTracker
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SessionPerfTracker.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SessionPerfTracker.html new file mode 100644 index 0000000..c44d2eb --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SessionPerfTracker.html @@ -0,0 +1,1014 @@ + + + + + +Argus Camera Sample: ArgusSamples::SessionPerfTracker Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::SessionPerfTracker Class Reference
+
+
+ +

Used to track session performance events. + More...

+ +

#include <PerfTracker.h>

+ +

List of all members.

+ + + + + + + + + + +

+Public Member Functions

 SessionPerfTracker ()
 ~SessionPerfTracker ()
bool shutdown ()
 Shutdown the session performance tracker.
bool setSession (Argus::CaptureSession *session)
 Set the capture session to track.
bool onEvent (SessionEvent event, uint64_t value=0)
 Trigger a session event.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

uint32_t m_id
Argus::CaptureSession * m_session
UniquePointer< EventThreadm_eventThread
TimeValue m_taskStartTime
TimeValue m_issueCaptureTime
TimeValue m_requestReceivedTime
TimeValue m_firstRequestReceivedTime
uint64_t m_numberframesReceived
TimeValue m_closeRequestedTime
TimeValue m_flushDoneTime
TimeValue m_closeDoneTime
uint64_t m_lastFrameCount
int64_t m_totalFrameDrop
uint64_t m_minLatency
uint64_t m_maxLatency
uint64_t m_sumLatency
uint64_t m_countLatency
uint64_t m_previousSensorTime
uint64_t m_minFramePeriod
uint64_t m_maxFramePeriod
uint64_t m_sumFramePeriod
int64_t m_countFramePeriod
uint64_t m_statsMinLatency
uint64_t m_statsMaxLatency
uint64_t m_statsSumLatency
uint64_t m_statsCountLatency
uint64_t m_statsMinFramePeriod
uint64_t m_statsMaxFramePeriod
uint64_t m_statsSumFramePeriod
uint64_t m_statsCountFramePeriod
uint32_t m_statsFrameDropCount
uint32_t m_statsOutOfOrderCount
bool m_previousKpi
+

Detailed Description

+

Used to track session performance events.

+ +

Definition at line 136 of file PerfTracker.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::SessionPerfTracker::SessionPerfTracker ()
+
+ +

Definition at line 127 of file PerfTracker.cpp.

+ +
+
+ +
+
+ + + + + + + +
ArgusSamples::SessionPerfTracker::~SessionPerfTracker ()
+
+ +

Definition at line 157 of file PerfTracker.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::SessionPerfTracker::onEvent (SessionEvent event,
uint64_t value = 0 
)
+
+ +

Trigger a session event.

+
Parameters:
+ + + +
type[in] event type
type[in] event type
+
+
+ +

Definition at line 179 of file PerfTracker.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::SessionPerfTracker::setSession (Argus::CaptureSession * session)
+
+ +

Set the capture session to track.

+

If not set the internal dispatcher session is tracked.

+
Parameters:
+ + +
session[in] capture session
+
+
+ +

Definition at line 173 of file PerfTracker.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::SessionPerfTracker::shutdown ()
+
+ +

Shutdown the session performance tracker.

+ +

Definition at line 162 of file PerfTracker.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
TimeValue ArgusSamples::SessionPerfTracker::m_closeDoneTime
+
+private
+
+ +

Definition at line 177 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TimeValue ArgusSamples::SessionPerfTracker::m_closeRequestedTime
+
+private
+
+ +

Definition at line 175 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
int64_t ArgusSamples::SessionPerfTracker::m_countFramePeriod
+
+private
+
+ +

Definition at line 191 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_countLatency
+
+private
+
+ +

Definition at line 185 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
UniquePointer<EventThread> ArgusSamples::SessionPerfTracker::m_eventThread
+
+private
+
+ +

Definition at line 166 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TimeValue ArgusSamples::SessionPerfTracker::m_firstRequestReceivedTime
+
+private
+
+ +

Definition at line 172 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TimeValue ArgusSamples::SessionPerfTracker::m_flushDoneTime
+
+private
+
+ +

Definition at line 176 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint32_t ArgusSamples::SessionPerfTracker::m_id
+
+private
+
+ +

Definition at line 163 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TimeValue ArgusSamples::SessionPerfTracker::m_issueCaptureTime
+
+private
+
+ +

Definition at line 169 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_lastFrameCount
+
+private
+
+ +

Definition at line 179 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_maxFramePeriod
+
+private
+
+ +

Definition at line 189 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_maxLatency
+
+private
+
+ +

Definition at line 183 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_minFramePeriod
+
+private
+
+ +

Definition at line 188 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_minLatency
+
+private
+
+ +

Definition at line 182 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_numberframesReceived
+
+private
+
+ +

Definition at line 173 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::SessionPerfTracker::m_previousKpi
+
+private
+
+ +

Definition at line 204 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_previousSensorTime
+
+private
+
+ +

Definition at line 187 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TimeValue ArgusSamples::SessionPerfTracker::m_requestReceivedTime
+
+private
+
+ +

Definition at line 170 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Argus::CaptureSession* ArgusSamples::SessionPerfTracker::m_session
+
+private
+
+ +

Definition at line 165 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_statsCountFramePeriod
+
+private
+
+ +

Definition at line 200 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_statsCountLatency
+
+private
+
+ +

Definition at line 196 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint32_t ArgusSamples::SessionPerfTracker::m_statsFrameDropCount
+
+private
+
+ +

Definition at line 201 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_statsMaxFramePeriod
+
+private
+
+ +

Definition at line 198 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_statsMaxLatency
+
+private
+
+ +

Definition at line 194 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_statsMinFramePeriod
+
+private
+
+ +

Definition at line 197 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_statsMinLatency
+
+private
+
+ +

Definition at line 193 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint32_t ArgusSamples::SessionPerfTracker::m_statsOutOfOrderCount
+
+private
+
+ +

Definition at line 202 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_statsSumFramePeriod
+
+private
+
+ +

Definition at line 199 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_statsSumLatency
+
+private
+
+ +

Definition at line 195 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_sumFramePeriod
+
+private
+
+ +

Definition at line 190 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint64_t ArgusSamples::SessionPerfTracker::m_sumLatency
+
+private
+
+ +

Definition at line 184 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TimeValue ArgusSamples::SessionPerfTracker::m_taskStartTime
+
+private
+
+ +

Definition at line 168 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
int64_t ArgusSamples::SessionPerfTracker::m_totalFrameDrop
+
+private
+
+ +

Definition at line 180 of file PerfTracker.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SourceSettingsObserver-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SourceSettingsObserver-members.html new file mode 100644 index 0000000..5a62f2b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SourceSettingsObserver-members.html @@ -0,0 +1,119 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::SourceSettingsObserver Member List
+
+
+ +

This is the complete list of members for ArgusSamples::SourceSettingsObserver, including all inherited members.

+ + + + + + + + + + + + + + + +
isInterface(Argus::Interface *interface) const ArgusSamples::SourceSettingsObserverinlinevirtual
m_iSourceSettingsArgusSamples::SourceSettingsObserverprivate
onApertureFnumChanged(const Observed &source)ArgusSamples::SourceSettingsObserverinlineprivate
onApertureMotorSpeedChanged(const Observed &source)ArgusSamples::SourceSettingsObserverinlineprivate
onAperturePositionChanged(const Observed &source)ArgusSamples::SourceSettingsObserverinlineprivate
onCaptureYuvFormatChanged(const Observed &source)ArgusSamples::SourceSettingsObserverinlineprivate
onExposureTimeRangeChanged(const Observed &source)ArgusSamples::SourceSettingsObserverinlineprivate
onFocusPositionChanged(const Observed &source)ArgusSamples::SourceSettingsObserverinlineprivate
onFrameRateChanged(const Observed &source)ArgusSamples::SourceSettingsObserverinlineprivate
onGainRangeChanged(const Observed &source)ArgusSamples::SourceSettingsObserverinlineprivate
onSensorModeChanged(const Observed &source)ArgusSamples::SourceSettingsObserverinlineprivate
SourceSettingsObserver(Argus::ISourceSettings *iSourceSettings)ArgusSamples::SourceSettingsObserverinline
~IObserverForInterface()ArgusSamples::IObserverForInterfaceinlinevirtual
~SourceSettingsObserver()ArgusSamples::SourceSettingsObserverinlinevirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SourceSettingsObserver.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SourceSettingsObserver.html new file mode 100644 index 0000000..4a0a817 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SourceSettingsObserver.html @@ -0,0 +1,500 @@ + + + + + +Argus Camera Sample: ArgusSamples::SourceSettingsObserver Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::SourceSettingsObserver Class Reference
+
+
+ +

Source settings observer. + More...

+
+Inheritance diagram for ArgusSamples::SourceSettingsObserver:
+
+
+ + +ArgusSamples::IObserverForInterface + +
+ +

List of all members.

+ + + + + + + + +

+Public Member Functions

 SourceSettingsObserver (Argus::ISourceSettings *iSourceSettings)
virtual ~SourceSettingsObserver ()
virtual bool isInterface (Argus::Interface *interface) const
 Check if this is the observer for the given interface.
- Public Member Functions inherited from ArgusSamples::IObserverForInterface
virtual ~IObserverForInterface ()
+ + + + + + + + + + +

+Private Member Functions

bool onExposureTimeRangeChanged (const Observed &source)
bool onGainRangeChanged (const Observed &source)
bool onSensorModeChanged (const Observed &source)
bool onCaptureYuvFormatChanged (const Observed &source)
bool onFocusPositionChanged (const Observed &source)
bool onAperturePositionChanged (const Observed &source)
bool onApertureFnumChanged (const Observed &source)
bool onApertureMotorSpeedChanged (const Observed &source)
bool onFrameRateChanged (const Observed &source)
+ + +

+Private Attributes

Argus::ISourceSettings * m_iSourceSettings
+

Detailed Description

+

Source settings observer.

+

Update Argus source settings if values which are set through the source settings change.

+ +

Definition at line 222 of file Dispatcher.cpp.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::SourceSettingsObserver::SourceSettingsObserver (Argus::ISourceSettings * iSourceSettings)
+
+inline
+
+ +

Definition at line 225 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::SourceSettingsObserver::~SourceSettingsObserver ()
+
+inlinevirtual
+
+ +

Definition at line 259 of file Dispatcher.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool ArgusSamples::SourceSettingsObserver::isInterface (Argus::Interface * interface) const
+
+inlinevirtual
+
+ +

Check if this is the observer for the given interface.

+
Parameters:
+ + +
interface[in]
+
+
+ +

Implements ArgusSamples::IObserverForInterface.

+ +

Definition at line 292 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::SourceSettingsObserver::onApertureFnumChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 394 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::SourceSettingsObserver::onApertureMotorSpeedChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 411 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::SourceSettingsObserver::onAperturePositionChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 377 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::SourceSettingsObserver::onCaptureYuvFormatChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 346 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::SourceSettingsObserver::onExposureTimeRangeChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 298 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::SourceSettingsObserver::onFocusPositionChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 360 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::SourceSettingsObserver::onFrameRateChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 428 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::SourceSettingsObserver::onGainRangeChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 315 of file Dispatcher.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::SourceSettingsObserver::onSensorModeChanged (const Observed & source)
+
+inlineprivate
+
+ +

Definition at line 329 of file Dispatcher.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Argus::ISourceSettings* ArgusSamples::SourceSettingsObserver::m_iSourceSettings
+
+private
+
+ +

Definition at line 464 of file Dispatcher.cpp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SourceSettingsObserver.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SourceSettingsObserver.png new file mode 100644 index 0000000..beba32d Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1SourceSettingsObserver.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1StreamConsumer-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1StreamConsumer-members.html new file mode 100644 index 0000000..f22c52c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1StreamConsumer-members.html @@ -0,0 +1,121 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::StreamConsumer Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1StreamConsumer.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1StreamConsumer.html new file mode 100644 index 0000000..7739fdc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1StreamConsumer.html @@ -0,0 +1,492 @@ + + + + + +Argus Camera Sample: ArgusSamples::StreamConsumer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::StreamConsumer Class Reference
+
+
+ +

The stream consumer is connecting to a EGL stream and consumes the frames into a GL texture. + More...

+ +

#include <StreamConsumer.h>

+ +

List of all members.

+ + + + + + + + + + + + + +

+Public Member Functions

 StreamConsumer (EGLStreamKHR eglStream)
 ~StreamConsumer ()
bool initialize ()
bool shutdown ()
bool isEGLStream (EGLStreamKHR eglStream) const
uint32_t getStreamTextureID () const
bool setStreamAspectRatio (float aspectRatio)
float getStreamAspectRatio () const
EGLint getStreamState () const
bool acquire (bool *acquiredNewFrame)
 Check the stream state and acquire a new frame if available.
+ + + +

+Private Member Functions

 StreamConsumer ()
 Hide default constructor.
+ + + + + + + + +

+Private Attributes

bool m_initialized
EGLStreamKHR m_eglStream
EGLint m_streamState
 cached stream state
uint32_t m_streamTexture
float m_aspectRatio
 aspect ration of the images transported by the stream
+

Detailed Description

+

The stream consumer is connecting to a EGL stream and consumes the frames into a GL texture.

+ +

Definition at line 41 of file StreamConsumer.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::StreamConsumer::StreamConsumer (EGLStreamKHR eglStream)
+
+explicit
+
+ +

Definition at line 44 of file StreamConsumer.cpp.

+ +
+
+ +
+
+ + + + + + + +
ArgusSamples::StreamConsumer::~StreamConsumer ()
+
+ +

Definition at line 53 of file StreamConsumer.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::StreamConsumer::StreamConsumer ()
+
+private
+
+ +

Hide default constructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
bool ArgusSamples::StreamConsumer::acquire (bool * acquiredNewFrame)
+
+ +

Check the stream state and acquire a new frame if available.

+
Parameters:
+ + +
acquiredNewFrame[out] set to true if a new frame had been acquired
+
+
+ +

Definition at line 116 of file StreamConsumer.cpp.

+ +
+
+ +
+
+ + + + + + + +
float ArgusSamples::StreamConsumer::getStreamAspectRatio () const
+
+ +

Definition at line 111 of file StreamConsumer.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
EGLint ArgusSamples::StreamConsumer::getStreamState () const
+
+inline
+
+
Returns:
the cached stream state
+ +

Definition at line 59 of file StreamConsumer.h.

+ +
+
+ +
+
+ + + + + + + +
uint32_t ArgusSamples::StreamConsumer::getStreamTextureID () const
+
+ +

Definition at line 100 of file StreamConsumer.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::StreamConsumer::initialize ()
+
+ +

Definition at line 59 of file StreamConsumer.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::StreamConsumer::isEGLStream (EGLStreamKHR eglStream) const
+
+ +

Definition at line 95 of file StreamConsumer.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::StreamConsumer::setStreamAspectRatio (float aspectRatio)
+
+ +

Definition at line 105 of file StreamConsumer.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::StreamConsumer::shutdown ()
+
+ +

Definition at line 82 of file StreamConsumer.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
float ArgusSamples::StreamConsumer::m_aspectRatio
+
+private
+
+ +

aspect ration of the images transported by the stream

+ +

Definition at line 76 of file StreamConsumer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
EGLStreamKHR ArgusSamples::StreamConsumer::m_eglStream
+
+private
+
+ +

Definition at line 73 of file StreamConsumer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::StreamConsumer::m_initialized
+
+private
+
+ +

Definition at line 72 of file StreamConsumer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
EGLint ArgusSamples::StreamConsumer::m_streamState
+
+private
+
+ +

cached stream state

+ +

Definition at line 74 of file StreamConsumer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint32_t ArgusSamples::StreamConsumer::m_streamTexture
+
+private
+
+ +

Definition at line 75 of file StreamConsumer.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskGallery-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskGallery-members.html new file mode 100644 index 0000000..81b37da --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskGallery-members.html @@ -0,0 +1,120 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::TaskGallery Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskGallery.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskGallery.html new file mode 100644 index 0000000..d9b5db2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskGallery.html @@ -0,0 +1,473 @@ + + + + + +Argus Camera Sample: ArgusSamples::TaskGallery Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::TaskGallery Class Reference
+
+
+ +

This task implements a gallery to review images and videos. + More...

+ +

#include <Gallery.h>

+
+Inheritance diagram for ArgusSamples::TaskGallery:
+
+
+ + +ArgusSamples::ITask + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TaskGallery ()
virtual ~TaskGallery ()
bool togglePlayBack ()
 Toggle playback.
bool rewind ()
 Rewind.
bool prevItem ()
 Display next item.
bool nextItem ()
 Display previous item.
ITask methods
virtual bool initialize ()
 Initialize.
virtual bool shutdown ()
 Shutdown.
virtual bool start ()
 Start.
virtual bool stop ()
 Stop.
- Public Member Functions inherited from ArgusSamples::ITask
 ITask ()
virtual ~ITask ()
+ + + + + + + +

+Private Attributes

bool m_initialized
 set if initialized
bool m_running
 set if running
GalleryThreadm_thread
 gallery thread
+

Detailed Description

+

This task implements a gallery to review images and videos.

+ +

Definition at line 43 of file Gallery.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::TaskGallery::TaskGallery ()
+
+ +

Definition at line 916 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::TaskGallery::~TaskGallery ()
+
+virtual
+
+ +

Definition at line 923 of file Gallery.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskGallery::initialize ()
+
+virtual
+
+ +

Initialize.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 928 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::TaskGallery::nextItem ()
+
+ +

Display previous item.

+ +

Definition at line 1024 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::TaskGallery::prevItem ()
+
+ +

Display next item.

+ +

Definition at line 1015 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::TaskGallery::rewind ()
+
+ +

Rewind.

+ +

Definition at line 1006 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskGallery::shutdown ()
+
+virtual
+
+ +

Shutdown.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 938 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskGallery::start ()
+
+virtual
+
+ +

Start.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 951 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskGallery::stop ()
+
+virtual
+
+ +

Stop.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 975 of file Gallery.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::TaskGallery::togglePlayBack ()
+
+ +

Toggle playback.

+ +

Definition at line 997 of file Gallery.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskGallery::m_initialized
+
+private
+
+ +

set if initialized

+ +

Definition at line 79 of file Gallery.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskGallery::m_running
+
+private
+
+ +

set if running

+ +

Definition at line 80 of file Gallery.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
GalleryThread* ArgusSamples::TaskGallery::m_thread
+
+private
+
+ +

gallery thread

+ +

Definition at line 81 of file Gallery.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskGallery.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskGallery.png new file mode 100644 index 0000000..b3dac39 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskGallery.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure-members.html new file mode 100644 index 0000000..9fb625d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure-members.html @@ -0,0 +1,126 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::TaskMultiExposure Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure.html new file mode 100644 index 0000000..4557503 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure.html @@ -0,0 +1,668 @@ + + + + + +Argus Camera Sample: ArgusSamples::TaskMultiExposure Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::TaskMultiExposure Class Reference
+
+
+ +

This task captures multiple streams with different exposure compensation values. + More...

+ +

#include <MultiExposure.h>

+
+Inheritance diagram for ArgusSamples::TaskMultiExposure:
+
+
+ + +ArgusSamples::ITask + +
+ +

List of all members.

+ + + + +

+Classes

class  ExpLevel
 For each exposure level there is one request where the exposure compensation is set to the correct value. More...
+ + + + + + + + + + + + + + + +

+Public Member Functions

 TaskMultiExposure ()
virtual ~TaskMultiExposure ()
ITask methods
virtual bool initialize ()
 Initialize.
virtual bool shutdown ()
 Shutdown.
virtual bool start ()
 Start.
virtual bool stop ()
 Stop.
- Public Member Functions inherited from ArgusSamples::ITask
 ITask ()
virtual ~ITask ()
+ + + + + +

+Public Attributes

Value< uint32_t > m_exposureSteps
 steps within the exposure range
Value< Argus::Range< float > > m_exposureRange
 in eV, e.g.
+ + + + + + + + + + + +

+Private Member Functions

bool onDeviceOpenChanged (const Observed &source)
 Callback when the device is opened/closed.
bool onSensorModeValidChanged (const Observed &source)
 Callback when the sensorModeValid is changed.
bool onParametersChanged (const Observed &source)
 Callback when the exposure range or steps changes.
bool shutdownExpLevels ()
 Shut down the exposure level streams.
bool restartStreams (const Observed &source)
 Restart when output size changes.
+ + + + + + + + + + + + + +

+Private Attributes

Value< Argus::Range< uint32_t > > m_exposureStepsRange
 allowed exposure steps
bool m_initialized
 -1 eV to +2 eV
bool m_running
 set if preview is running
bool m_wasRunning
 set if was running before the device had been closed
bool m_prevRunning
 set if was running before the sensorModeValid is set to false
std::list< ExpLevel * > m_expLevels
 exposure level
+

Detailed Description

+

This task captures multiple streams with different exposure compensation values.

+ +

Definition at line 47 of file MultiExposure.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::TaskMultiExposure::TaskMultiExposure ()
+
+ +

Definition at line 40 of file MultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::TaskMultiExposure::~TaskMultiExposure ()
+
+virtual
+
+ +

Definition at line 55 of file MultiExposure.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskMultiExposure::initialize ()
+
+virtual
+
+ +

Initialize.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 150 of file MultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskMultiExposure::onDeviceOpenChanged (const Observed & source)
+
+private
+
+ +

Callback when the device is opened/closed.

+ +

Definition at line 232 of file MultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskMultiExposure::onParametersChanged (const Observed & source)
+
+private
+
+ +

Callback when the exposure range or steps changes.

+ +

Definition at line 279 of file MultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskMultiExposure::onSensorModeValidChanged (const Observed & source)
+
+private
+
+ +

Callback when the sensorModeValid is changed.

+ +

Definition at line 258 of file MultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskMultiExposure::restartStreams (const Observed & source)
+
+private
+
+ +

Restart when output size changes.

+ +

Definition at line 222 of file MultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskMultiExposure::shutdown ()
+
+virtual
+
+ +

Shutdown.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 177 of file MultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskMultiExposure::shutdownExpLevels ()
+
+private
+
+ +

Shut down the exposure level streams.

+ +

Definition at line 205 of file MultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskMultiExposure::start ()
+
+virtual
+
+ +

Start.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 294 of file MultiExposure.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskMultiExposure::stop ()
+
+virtual
+
+ +

Stop.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 353 of file MultiExposure.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::list<ExpLevel*> ArgusSamples::TaskMultiExposure::m_expLevels
+
+private
+
+ +

exposure level

+ +

Definition at line 94 of file MultiExposure.h.

+ +
+
+ +
+
+ + + + +
Value<Argus::Range<float> > ArgusSamples::TaskMultiExposure::m_exposureRange
+
+ +

in eV, e.g.

+

-1,2 results in exposures from

+ +

Definition at line 68 of file MultiExposure.h.

+ +
+
+ +
+
+ + + + +
Value<uint32_t> ArgusSamples::TaskMultiExposure::m_exposureSteps
+
+ +

steps within the exposure range

+ +

Definition at line 67 of file MultiExposure.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Value<Argus::Range<uint32_t> > ArgusSamples::TaskMultiExposure::m_exposureStepsRange
+
+private
+
+ +

allowed exposure steps

+ +

Definition at line 64 of file MultiExposure.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskMultiExposure::m_initialized
+
+private
+
+ +

-1 eV to +2 eV

+

set if initialized

+ +

Definition at line 72 of file MultiExposure.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskMultiExposure::m_prevRunning
+
+private
+
+ +

set if was running before the sensorModeValid is set to false

+ +

Definition at line 75 of file MultiExposure.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskMultiExposure::m_running
+
+private
+
+ +

set if preview is running

+ +

Definition at line 73 of file MultiExposure.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskMultiExposure::m_wasRunning
+
+private
+
+ +

set if was running before the device had been closed

+ +

Definition at line 74 of file MultiExposure.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure.png new file mode 100644 index 0000000..6a13750 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel-members.html new file mode 100644 index 0000000..c26c0d9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel-members.html @@ -0,0 +1,111 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::TaskMultiExposure::ExpLevel Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html new file mode 100644 index 0000000..33131d7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html @@ -0,0 +1,239 @@ + + + + + +Argus Camera Sample: ArgusSamples::TaskMultiExposure::ExpLevel Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::TaskMultiExposure::ExpLevel Class Reference
+
+
+ +

For each exposure level there is one request where the exposure compensation is set to the correct value. + More...

+ +

List of all members.

+ + + + + + +

+Public Member Functions

 ExpLevel ()
 ~ExpLevel ()
bool shutdown ()
bool initialize (float exposureCompensation)
+ + + + + +

+Public Attributes

TrackedUniqueObj< Argus::Request > m_request
 Argus request.
Argus::UniqueObj
+< Argus::OutputStream > 
m_outputStream
 Argus output stream.
+

Detailed Description

+

For each exposure level there is one request where the exposure compensation is set to the correct value.

+

Each request outputs to a stream which is rendered.

+ +

Definition at line 81 of file MultiExposure.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::TaskMultiExposure::ExpLevel::ExpLevel ()
+
+ +

Definition at line 60 of file MultiExposure.cpp.

+ +
+
+ +
+
+ + + + + + + +
ArgusSamples::TaskMultiExposure::ExpLevel::~ExpLevel ()
+
+ +

Definition at line 64 of file MultiExposure.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
bool ArgusSamples::TaskMultiExposure::ExpLevel::initialize (float exposureCompensation)
+
+ +

Definition at line 69 of file MultiExposure.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::TaskMultiExposure::ExpLevel::shutdown ()
+
+ +

Definition at line 116 of file MultiExposure.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
Argus::UniqueObj<Argus::OutputStream> ArgusSamples::TaskMultiExposure::ExpLevel::m_outputStream
+
+ +

Argus output stream.

+ +

Definition at line 91 of file MultiExposure.h.

+ +
+
+ +
+
+ + + + +
TrackedUniqueObj<Argus::Request> ArgusSamples::TaskMultiExposure::ExpLevel::m_request
+
+ +

Argus request.

+ +

Definition at line 90 of file MultiExposure.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession-members.html new file mode 100644 index 0000000..ce16dad --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession-members.html @@ -0,0 +1,121 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::TaskMultiSession Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession.html new file mode 100644 index 0000000..66e4153 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession.html @@ -0,0 +1,530 @@ + + + + + +Argus Camera Sample: ArgusSamples::TaskMultiSession Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::TaskMultiSession Class Reference
+
+
+ +

This task creates one session for each available sensor. + More...

+ +

#include <MultiSession.h>

+
+Inheritance diagram for ArgusSamples::TaskMultiSession:
+
+
+ + +ArgusSamples::ITask + +
+ +

List of all members.

+ + + + +

+Classes

class  Session
 For each device there is one session with a request. More...
+ + + + + + + + + + + + + + + +

+Public Member Functions

 TaskMultiSession ()
virtual ~TaskMultiSession ()
ITask methods
virtual bool initialize ()
 Initialize.
virtual bool shutdown ()
 Shutdown.
virtual bool start ()
 Start.
virtual bool stop ()
 Stop.
- Public Member Functions inherited from ArgusSamples::ITask
 ITask ()
virtual ~ITask ()
+ + + +

+Public Attributes

Value< std::vector< uint32_t > > m_multiDevices
 multiple devices
+ + + + + + +

+Private Member Functions

bool shutdownSessions ()
bool onSensorModeValidChanged (const Observed &source)
 Callback when the sensorModeValid is changed.
bool restartStreams (const Observed &source)
 Restart when output size changes.
+ + + + + + + + +

+Private Attributes

bool m_initialized
 set if initialized
bool m_running
 set if preview is running
bool m_prevRunning
 set if was running before the sensorModeValid is set to false
std::list< Session * > m_sessions
+

Detailed Description

+

This task creates one session for each available sensor.

+ +

Definition at line 51 of file MultiSession.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::TaskMultiSession::TaskMultiSession ()
+
+ +

Definition at line 42 of file MultiSession.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::TaskMultiSession::~TaskMultiSession ()
+
+virtual
+
+ +

Definition at line 49 of file MultiSession.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskMultiSession::initialize ()
+
+virtual
+
+ +

Initialize.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 176 of file MultiSession.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskMultiSession::onSensorModeValidChanged (const Observed & source)
+
+private
+
+ +

Callback when the sensorModeValid is changed.

+ +

Definition at line 311 of file MultiSession.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskMultiSession::restartStreams (const Observed & source)
+
+private
+
+ +

Restart when output size changes.

+ +

Definition at line 332 of file MultiSession.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskMultiSession::shutdown ()
+
+virtual
+
+ +

Shutdown.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 191 of file MultiSession.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskMultiSession::shutdownSessions ()
+
+private
+
+ +

Definition at line 209 of file MultiSession.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskMultiSession::start ()
+
+virtual
+
+ +

Start.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 226 of file MultiSession.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskMultiSession::stop ()
+
+virtual
+
+ +

Stop.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 293 of file MultiSession.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskMultiSession::m_initialized
+
+private
+
+ +

set if initialized

+ +

Definition at line 66 of file MultiSession.h.

+ +
+
+ +
+
+ + + + +
Value<std::vector<uint32_t> > ArgusSamples::TaskMultiSession::m_multiDevices
+
+ +

multiple devices

+ +

Definition at line 107 of file MultiSession.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskMultiSession::m_prevRunning
+
+private
+
+ +

set if was running before the sensorModeValid is set to false

+ +

Definition at line 68 of file MultiSession.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskMultiSession::m_running
+
+private
+
+ +

set if preview is running

+ +

Definition at line 67 of file MultiSession.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::list<Session*> ArgusSamples::TaskMultiSession::m_sessions
+
+private
+
+ +

Definition at line 92 of file MultiSession.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession.png new file mode 100644 index 0000000..33e9f12 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession_1_1Session-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession_1_1Session-members.html new file mode 100644 index 0000000..0390988 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession_1_1Session-members.html @@ -0,0 +1,115 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::TaskMultiSession::Session Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession_1_1Session.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession_1_1Session.html new file mode 100644 index 0000000..84fe904 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskMultiSession_1_1Session.html @@ -0,0 +1,309 @@ + + + + + +Argus Camera Sample: ArgusSamples::TaskMultiSession::Session Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::TaskMultiSession::Session Class Reference
+
+
+ +

For each device there is one session with a request. + More...

+ +

List of all members.

+ + + + + + + + +

+Public Member Functions

 Session ()
 ~Session ()
bool shutdown ()
bool start ()
bool stop ()
bool initialize (uint32_t deviceIndex)
+ + + + + + + + +

+Public Attributes

TrackedUniqueObj
+< Argus::CaptureSession > 
m_session
 Argus session.
TrackedUniqueObj< Argus::Request > m_request
 Argus request.
Argus::UniqueObj
+< Argus::OutputStream > 
m_outputStream
 Argus output stream.
UniquePointer< SessionPerfTrackerm_perfTracker
+

Detailed Description

+

For each device there is one session with a request.

+

Each request outputs to a stream which is rendered.

+ +

Definition at line 74 of file MultiSession.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::TaskMultiSession::Session::Session ()
+
+ +

Definition at line 54 of file MultiSession.cpp.

+ +
+
+ +
+
+ + + + + + + +
ArgusSamples::TaskMultiSession::Session::~Session ()
+
+ +

Definition at line 58 of file MultiSession.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
bool ArgusSamples::TaskMultiSession::Session::initialize (uint32_t deviceIndex)
+
+ +

Definition at line 63 of file MultiSession.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::TaskMultiSession::Session::shutdown ()
+
+ +

Definition at line 137 of file MultiSession.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::TaskMultiSession::Session::start ()
+
+ +

Definition at line 106 of file MultiSession.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::TaskMultiSession::Session::stop ()
+
+ +

Definition at line 121 of file MultiSession.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
Argus::UniqueObj<Argus::OutputStream> ArgusSamples::TaskMultiSession::Session::m_outputStream
+
+ +

Argus output stream.

+ +

Definition at line 87 of file MultiSession.h.

+ +
+
+ +
+
+ + + + +
UniquePointer<SessionPerfTracker> ArgusSamples::TaskMultiSession::Session::m_perfTracker
+
+ +

Definition at line 89 of file MultiSession.h.

+ +
+
+ +
+
+ + + + +
TrackedUniqueObj<Argus::Request> ArgusSamples::TaskMultiSession::Session::m_request
+
+ +

Argus request.

+ +

Definition at line 86 of file MultiSession.h.

+ +
+
+ +
+
+ + + + +
TrackedUniqueObj<Argus::CaptureSession> ArgusSamples::TaskMultiSession::Session::m_session
+
+ +

Argus session.

+ +

Definition at line 85 of file MultiSession.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskStillCapture-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskStillCapture-members.html new file mode 100644 index 0000000..d412843 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskStillCapture-members.html @@ -0,0 +1,125 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::TaskStillCapture Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskStillCapture.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskStillCapture.html new file mode 100644 index 0000000..97863e3 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskStillCapture.html @@ -0,0 +1,631 @@ + + + + + +Argus Camera Sample: ArgusSamples::TaskStillCapture Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::TaskStillCapture Class Reference
+
+
+ +

This task captures still images. + More...

+ +

#include <StillCapture.h>

+
+Inheritance diagram for ArgusSamples::TaskStillCapture:
+
+
+ + +ArgusSamples::ITask + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 TaskStillCapture ()
virtual ~TaskStillCapture ()
virtual bool initialize ()
 Initialize.
virtual bool shutdown ()
 Shutdown.
virtual bool start ()
 Start.
virtual bool stop ()
 Stop.
bool execute ()
 Capture one image.
- Public Member Functions inherited from ArgusSamples::ITask
 ITask ()
virtual ~ITask ()
+ + + + + + + +

+Private Member Functions

bool onDeviceOpenChanged (const Observed &source)
 Callback when the device is opened/closed.
bool onSensorModeValidChanged (const Observed &source)
 Callback when the sensorModeValid is changed.
bool restartStreams (const Observed &source)
 Restart when output size changes.
+ + + + + + + + + + + + + + + + +

+Private Attributes

bool m_initialized
 set if initialized
bool m_running
 set if preview is running
bool m_wasRunning
 set if was running before the device had been closed
bool m_prevRunning
 set if was running before the sensorModeValid is set to false
uint32_t m_captureIndex
 Incrementing capture index.
UniquePointer< SessionPerfTrackerm_perfTracker
TrackedUniqueObj< Argus::Request > m_previewRequest
 Argus preview request.
Argus::UniqueObj
+< Argus::OutputStream > 
m_previewStream
 Argus preview stream.
+

Detailed Description

+

This task captures still images.

+ +

Definition at line 48 of file StillCapture.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::TaskStillCapture::TaskStillCapture ()
+
+ +

Definition at line 43 of file StillCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::TaskStillCapture::~TaskStillCapture ()
+
+virtual
+
+ +

Definition at line 52 of file StillCapture.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
bool ArgusSamples::TaskStillCapture::execute ()
+
+ +

Capture one image.

+ +

Definition at line 222 of file StillCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskStillCapture::initialize ()
+
+virtual
+
+ +

Initialize.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 57 of file StillCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskStillCapture::onDeviceOpenChanged (const Observed & source)
+
+private
+
+ +

Callback when the device is opened/closed.

+ +

Definition at line 93 of file StillCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskStillCapture::onSensorModeValidChanged (const Observed & source)
+
+private
+
+ +

Callback when the sensorModeValid is changed.

+ +

Definition at line 113 of file StillCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskStillCapture::restartStreams (const Observed & source)
+
+private
+
+ +

Restart when output size changes.

+ +

Definition at line 83 of file StillCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskStillCapture::shutdown ()
+
+virtual
+
+ +

Shutdown.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 361 of file StillCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskStillCapture::start ()
+
+virtual
+
+ +

Start.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 134 of file StillCapture.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskStillCapture::stop ()
+
+virtual
+
+ +

Stop.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 177 of file StillCapture.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
uint32_t ArgusSamples::TaskStillCapture::m_captureIndex
+
+private
+
+ +

Incrementing capture index.

+ +

Definition at line 70 of file StillCapture.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskStillCapture::m_initialized
+
+private
+
+ +

set if initialized

+ +

Definition at line 66 of file StillCapture.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
UniquePointer<SessionPerfTracker> ArgusSamples::TaskStillCapture::m_perfTracker
+
+private
+
+ +

Definition at line 72 of file StillCapture.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TrackedUniqueObj<Argus::Request> ArgusSamples::TaskStillCapture::m_previewRequest
+
+private
+
+ +

Argus preview request.

+ +

Definition at line 74 of file StillCapture.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Argus::UniqueObj<Argus::OutputStream> ArgusSamples::TaskStillCapture::m_previewStream
+
+private
+
+ +

Argus preview stream.

+ +

Definition at line 75 of file StillCapture.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskStillCapture::m_prevRunning
+
+private
+
+ +

set if was running before the sensorModeValid is set to false

+ +

Definition at line 69 of file StillCapture.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskStillCapture::m_running
+
+private
+
+ +

set if preview is running

+ +

Definition at line 67 of file StillCapture.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskStillCapture::m_wasRunning
+
+private
+
+ +

set if was running before the device had been closed

+ +

Definition at line 68 of file StillCapture.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskStillCapture.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskStillCapture.png new file mode 100644 index 0000000..e4ccf33 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskStillCapture.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskVideoRecord-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskVideoRecord-members.html new file mode 100644 index 0000000..b084d58 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskVideoRecord-members.html @@ -0,0 +1,130 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::TaskVideoRecord Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskVideoRecord.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskVideoRecord.html new file mode 100644 index 0000000..790c148 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskVideoRecord.html @@ -0,0 +1,753 @@ + + + + + +Argus Camera Sample: ArgusSamples::TaskVideoRecord Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::TaskVideoRecord Class Reference
+
+
+ +

This task records a video and saves it to a file using gstreamer. + More...

+ +

#include <VideoRecord.h>

+
+Inheritance diagram for ArgusSamples::TaskVideoRecord:
+
+
+ + +ArgusSamples::ITask + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TaskVideoRecord ()
virtual ~TaskVideoRecord ()
virtual bool initialize ()
 Initialize.
virtual bool shutdown ()
 Shutdown.
virtual bool start ()
 Start.
virtual bool stop ()
 Stop.
bool startRecording ()
 Start recording.
bool stopRecording ()
 Stop recording.
bool toggleRecording ()
 Toggle recording.
- Public Member Functions inherited from ArgusSamples::ITask
 ITask ()
virtual ~ITask ()
+ + + + + + + +

+Private Member Functions

bool onDeviceOpenChanged (const Observed &source)
 Callback when the device is opened/closed.
bool onSensorModeValidChanged (const Observed &source)
 Callback when the sensorModeValid is changed.
bool restartStreams (const Observed &source)
 Restart when output size changes.
+ + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

bool m_initialized
 set if initialized
bool m_running
 set if preview is running
bool m_wasRunning
 set if was running before the device had been closed
bool m_prevRunning
 set if was running before the sensorModeValid is set to false
bool m_recording
 if set recording is active
uint32_t m_captureIndex
 Incrementing capture index.
VideoPipelinem_videoPipeline
 video pipeline
UniquePointer< SessionPerfTrackerm_perfTracker
TrackedUniqueObj< Argus::Request > m_request
 Argus request.
Argus::UniqueObj
+< Argus::OutputStream > 
m_videoStream
 Argus video output stream.
Argus::UniqueObj
+< Argus::OutputStream > 
m_previewStream
 Argus preview output stream.
+

Detailed Description

+

This task records a video and saves it to a file using gstreamer.

+

It also creates a preview stream and display it using the composer.

+ +

Definition at line 49 of file VideoRecord.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::TaskVideoRecord::TaskVideoRecord ()
+
+ +

Definition at line 43 of file VideoRecord.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::TaskVideoRecord::~TaskVideoRecord ()
+
+virtual
+
+ +

Definition at line 54 of file VideoRecord.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskVideoRecord::initialize ()
+
+virtual
+
+ +

Initialize.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 59 of file VideoRecord.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskVideoRecord::onDeviceOpenChanged (const Observed & source)
+
+private
+
+ +

Callback when the device is opened/closed.

+ +

Definition at line 94 of file VideoRecord.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskVideoRecord::onSensorModeValidChanged (const Observed & source)
+
+private
+
+ +

Callback when the sensorModeValid is changed.

+ +

Definition at line 114 of file VideoRecord.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TaskVideoRecord::restartStreams (const Observed & source)
+
+private
+
+ +

Restart when output size changes.

+ +

Definition at line 84 of file VideoRecord.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskVideoRecord::shutdown ()
+
+virtual
+
+ +

Shutdown.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 330 of file VideoRecord.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskVideoRecord::start ()
+
+virtual
+
+ +

Start.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 135 of file VideoRecord.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::TaskVideoRecord::startRecording ()
+
+ +

Start recording.

+ +

Definition at line 225 of file VideoRecord.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::TaskVideoRecord::stop ()
+
+virtual
+
+ +

Stop.

+ +

Implements ArgusSamples::ITask.

+ +

Definition at line 178 of file VideoRecord.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::TaskVideoRecord::stopRecording ()
+
+ +

Stop recording.

+ +

Definition at line 277 of file VideoRecord.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::TaskVideoRecord::toggleRecording ()
+
+ +

Toggle recording.

+ +

Definition at line 321 of file VideoRecord.cpp.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
uint32_t ArgusSamples::TaskVideoRecord::m_captureIndex
+
+private
+
+ +

Incrementing capture index.

+ +

Definition at line 80 of file VideoRecord.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskVideoRecord::m_initialized
+
+private
+
+ +

set if initialized

+ +

Definition at line 75 of file VideoRecord.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
UniquePointer<SessionPerfTracker> ArgusSamples::TaskVideoRecord::m_perfTracker
+
+private
+
+ +

Definition at line 84 of file VideoRecord.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Argus::UniqueObj<Argus::OutputStream> ArgusSamples::TaskVideoRecord::m_previewStream
+
+private
+
+ +

Argus preview output stream.

+ +

Definition at line 88 of file VideoRecord.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskVideoRecord::m_prevRunning
+
+private
+
+ +

set if was running before the sensorModeValid is set to false

+ +

Definition at line 78 of file VideoRecord.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskVideoRecord::m_recording
+
+private
+
+ +

if set recording is active

+ +

Definition at line 79 of file VideoRecord.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
TrackedUniqueObj<Argus::Request> ArgusSamples::TaskVideoRecord::m_request
+
+private
+
+ +

Argus request.

+ +

Definition at line 86 of file VideoRecord.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskVideoRecord::m_running
+
+private
+
+ +

set if preview is running

+ +

Definition at line 76 of file VideoRecord.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
VideoPipeline* ArgusSamples::TaskVideoRecord::m_videoPipeline
+
+private
+
+ +

video pipeline

+ +

Definition at line 82 of file VideoRecord.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Argus::UniqueObj<Argus::OutputStream> ArgusSamples::TaskVideoRecord::m_videoStream
+
+private
+
+ +

Argus video output stream.

+ +

Definition at line 87 of file VideoRecord.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool ArgusSamples::TaskVideoRecord::m_wasRunning
+
+private
+
+ +

set if was running before the device had been closed

+ +

Definition at line 77 of file VideoRecord.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskVideoRecord.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskVideoRecord.png new file mode 100644 index 0000000..08badcb Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TaskVideoRecord.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TimeValue-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TimeValue-members.html new file mode 100644 index 0000000..1f5d8a0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TimeValue-members.html @@ -0,0 +1,137 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::TimeValue Member List
+
+
+ +

This is the complete list of members for ArgusSamples::TimeValue, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CyclesPerSecType typedefArgusSamples::TimeValue
fromCycelsPerSec(CyclesPerSecType cyclesPerSec)ArgusSamples::TimeValueinlinestatic
fromMSec(MSecType mSec)ArgusSamples::TimeValueinlinestatic
fromNSec(NSecType nSec)ArgusSamples::TimeValueinlinestatic
fromSec(float sec)ArgusSamples::TimeValueinlinestatic
fromSec(SecType sec)ArgusSamples::TimeValueinlinestatic
fromUSec(USecType uSec)ArgusSamples::TimeValueinlinestatic
infinite()ArgusSamples::TimeValueinlinestatic
m_nSecArgusSamples::TimeValueprivate
MSecType typedefArgusSamples::TimeValue
NSecType typedefArgusSamples::TimeValue
operator!=(const TimeValue &rhs) const ArgusSamples::TimeValueinline
operator+(const TimeValue &rhs) const ArgusSamples::TimeValueinline
operator-(const TimeValue &rhs) const ArgusSamples::TimeValueinline
operator<(const TimeValue &rhs) const ArgusSamples::TimeValueinline
operator<=(const TimeValue &rhs) const ArgusSamples::TimeValueinline
operator==(const TimeValue &rhs) const ArgusSamples::TimeValueinline
operator>(const TimeValue &rhs) const ArgusSamples::TimeValueinline
operator>=(const TimeValue &rhs) const ArgusSamples::TimeValueinline
SecType typedefArgusSamples::TimeValue
setFromMSec(MSecType mSec)ArgusSamples::TimeValueinline
setFromNSec(NSecType nSec)ArgusSamples::TimeValueinline
setFromSec(SecType sec)ArgusSamples::TimeValueinline
setFromUSec(USecType uSec)ArgusSamples::TimeValueinline
TimeValue()ArgusSamples::TimeValueinline
TimeValue(NSecType value)ArgusSamples::TimeValueinlineprivate
toCyclesPerSec() const ArgusSamples::TimeValueinline
toMSec() const ArgusSamples::TimeValueinline
toNSec() const ArgusSamples::TimeValueinline
toSec() const ArgusSamples::TimeValueinline
toUSec() const ArgusSamples::TimeValueinline
USecType typedefArgusSamples::TimeValue
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TimeValue.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TimeValue.html new file mode 100644 index 0000000..6983e5b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TimeValue.html @@ -0,0 +1,939 @@ + + + + + +Argus Camera Sample: ArgusSamples::TimeValue Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

A time value. + More...

+ +

#include <Util.h>

+ +

List of all members.

+ + + + + + + + +

+Public Types

typedef uint64_t SecType
 Types used for values with various units.
typedef uint64_t MSecType
typedef uint64_t USecType
typedef uint64_t NSecType
typedef float CyclesPerSecType
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TimeValue ()
void setFromSec (SecType sec)
void setFromMSec (MSecType mSec)
void setFromUSec (USecType uSec)
void setFromNSec (NSecType nSec)
SecType toSec () const
MSecType toMSec () const
USecType toUSec () const
NSecType toNSec () const
CyclesPerSecType toCyclesPerSec () const
bool operator== (const TimeValue &rhs) const
bool operator!= (const TimeValue &rhs) const
bool operator< (const TimeValue &rhs) const
bool operator>= (const TimeValue &rhs) const
bool operator<= (const TimeValue &rhs) const
bool operator> (const TimeValue &rhs) const
TimeValue operator+ (const TimeValue &rhs) const
TimeValue operator- (const TimeValue &rhs) const
+ + + + + + + + +

+Static Public Member Functions

static TimeValue infinite ()
static TimeValue fromSec (float sec)
static TimeValue fromSec (SecType sec)
static TimeValue fromMSec (MSecType mSec)
static TimeValue fromUSec (USecType uSec)
static TimeValue fromNSec (NSecType nSec)
static TimeValue fromCycelsPerSec (CyclesPerSecType cyclesPerSec)
+ + +

+Private Member Functions

 TimeValue (NSecType value)
+ + +

+Private Attributes

NSecType m_nSec
+

Detailed Description

+

A time value.

+

Supports conversion to different time units.

+ +

Definition at line 41 of file Util.h.

+

Member Typedef Documentation

+ +
+
+ +

Definition at line 56 of file Util.h.

+ +
+
+ +
+
+ + + + +
typedef uint64_t ArgusSamples::TimeValue::MSecType
+
+ +

Definition at line 53 of file Util.h.

+ +
+
+ +
+
+ + + + +
typedef uint64_t ArgusSamples::TimeValue::NSecType
+
+ +

Definition at line 55 of file Util.h.

+ +
+
+ +
+
+ + + + +
typedef uint64_t ArgusSamples::TimeValue::SecType
+
+ +

Types used for values with various units.

+ +

Definition at line 52 of file Util.h.

+ +
+
+ +
+
+ + + + +
typedef uint64_t ArgusSamples::TimeValue::USecType
+
+ +

Definition at line 54 of file Util.h.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
ArgusSamples::TimeValue::TimeValue ()
+
+inline
+
+ +

Definition at line 44 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
ArgusSamples::TimeValue::TimeValue (NSecType value)
+
+inlineprivate
+
+ +

Definition at line 187 of file Util.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
static TimeValue ArgusSamples::TimeValue::fromCycelsPerSec (CyclesPerSecType cyclesPerSec)
+
+inlinestatic
+
+ +

Definition at line 90 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static TimeValue ArgusSamples::TimeValue::fromMSec (MSecType mSec)
+
+inlinestatic
+
+ +

Definition at line 75 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static TimeValue ArgusSamples::TimeValue::fromNSec (NSecType nSec)
+
+inlinestatic
+
+ +

Definition at line 85 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static TimeValue ArgusSamples::TimeValue::fromSec (float sec)
+
+inlinestatic
+
+ +

Definition at line 65 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static TimeValue ArgusSamples::TimeValue::fromSec (SecType sec)
+
+inlinestatic
+
+ +

Definition at line 70 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static TimeValue ArgusSamples::TimeValue::fromUSec (USecType uSec)
+
+inlinestatic
+
+ +

Definition at line 80 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static TimeValue ArgusSamples::TimeValue::infinite ()
+
+inlinestatic
+
+ +

Definition at line 59 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TimeValue::operator!= (const TimeValuerhs) const
+
+inline
+
+ +

Definition at line 151 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
TimeValue ArgusSamples::TimeValue::operator+ (const TimeValuerhs) const
+
+inline
+
+ +

Definition at line 176 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
TimeValue ArgusSamples::TimeValue::operator- (const TimeValuerhs) const
+
+inline
+
+ +

Definition at line 181 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TimeValue::operator< (const TimeValuerhs) const
+
+inline
+
+ +

Definition at line 156 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TimeValue::operator<= (const TimeValuerhs) const
+
+inline
+
+ +

Definition at line 166 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TimeValue::operator== (const TimeValuerhs) const
+
+inline
+
+ +

Definition at line 146 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TimeValue::operator> (const TimeValuerhs) const
+
+inline
+
+ +

Definition at line 171 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool ArgusSamples::TimeValue::operator>= (const TimeValuerhs) const
+
+inline
+
+ +

Definition at line 161 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ArgusSamples::TimeValue::setFromMSec (MSecType mSec)
+
+inline
+
+ +

Definition at line 101 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ArgusSamples::TimeValue::setFromNSec (NSecType nSec)
+
+inline
+
+ +

Definition at line 111 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ArgusSamples::TimeValue::setFromSec (SecType sec)
+
+inline
+
+ +

Definition at line 96 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ArgusSamples::TimeValue::setFromUSec (USecType uSec)
+
+inline
+
+ +

Definition at line 106 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
CyclesPerSecType ArgusSamples::TimeValue::toCyclesPerSec () const
+
+inline
+
+ +

Definition at line 137 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
MSecType ArgusSamples::TimeValue::toMSec () const
+
+inline
+
+ +

Definition at line 122 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
NSecType ArgusSamples::TimeValue::toNSec () const
+
+inline
+
+ +

Definition at line 132 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SecType ArgusSamples::TimeValue::toSec () const
+
+inline
+
+ +

Definition at line 117 of file Util.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
USecType ArgusSamples::TimeValue::toUSec () const
+
+inline
+
+ +

Definition at line 127 of file Util.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
NSecType ArgusSamples::TimeValue::m_nSec
+
+private
+
+ +

Definition at line 192 of file Util.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TrackedUniqueObj-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TrackedUniqueObj-members.html new file mode 100644 index 0000000..be37e12 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TrackedUniqueObj-members.html @@ -0,0 +1,113 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::TrackedUniqueObj< T > Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TrackedUniqueObj.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TrackedUniqueObj.html new file mode 100644 index 0000000..42d6ef8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1TrackedUniqueObj.html @@ -0,0 +1,364 @@ + + + + + +Argus Camera Sample: ArgusSamples::TrackedUniqueObj< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::TrackedUniqueObj< T > Class Template Reference
+
+
+ +

This class helps track construction and destruction of Argus objects. + More...

+ +

#include <TrackedUniqueObject.h>

+ +

List of all members.

+ + + + + + + +

+Public Member Functions

 TrackedUniqueObj ()
 ~TrackedUniqueObj ()
T * get () const
bool reset (T *obj=NULL, Tracker< T > *tracker=NULL)
 operator bool () const
+ + + +

+Private Attributes

Tracker< T > * m_tracker
Argus::UniqueObj< T > m_obj
+ + +

+Friends

class Tracker< T >
+

Detailed Description

+

template<typename T>
+class ArgusSamples::TrackedUniqueObj< T >

+ +

This class helps track construction and destruction of Argus objects.

+

Tracker classes are using it to track Argus objects. It exposes several functions of the Argus::UniqueObj class to allow it to be seamlessly replaced by a TrackedUniqueObj.

+ +

Definition at line 65 of file TrackedUniqueObject.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
ArgusSamples::TrackedUniqueObj< T >::TrackedUniqueObj ()
+
+inline
+
+ +

Definition at line 68 of file TrackedUniqueObject.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
ArgusSamples::TrackedUniqueObj< T >::~TrackedUniqueObj ()
+
+inline
+
+ +

Definition at line 73 of file TrackedUniqueObject.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T* ArgusSamples::TrackedUniqueObj< T >::get () const
+
+inline
+
+ +

Definition at line 78 of file TrackedUniqueObject.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
ArgusSamples::TrackedUniqueObj< T >::operator bool () const
+
+inline
+
+ +

Definition at line 109 of file TrackedUniqueObject.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::TrackedUniqueObj< T >::reset (T * obj = NULL,
Tracker< T > * tracker = NULL 
)
+
+inline
+
+ +

Definition at line 83 of file TrackedUniqueObject.h.

+ +
+
+

Friends And Related Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
friend class Tracker< T >
+
+friend
+
+ +

Definition at line 115 of file TrackedUniqueObject.h.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
Argus::UniqueObj<T> ArgusSamples::TrackedUniqueObj< T >::m_obj
+
+private
+
+ +

Definition at line 119 of file TrackedUniqueObject.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
Tracker<T>* ArgusSamples::TrackedUniqueObj< T >::m_tracker
+
+private
+
+ +

Definition at line 118 of file TrackedUniqueObject.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Tracker-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Tracker-members.html new file mode 100644 index 0000000..3689971 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Tracker-members.html @@ -0,0 +1,108 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::Tracker< T > Member List
+
+
+ +

This is the complete list of members for ArgusSamples::Tracker< T >, including all inherited members.

+ + + + +
track(T *obj)=0ArgusSamples::Tracker< T >pure virtual
untrack(T *ob)=0ArgusSamples::Tracker< T >pure virtual
~Tracker()ArgusSamples::Tracker< T >inlinevirtual
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Tracker.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Tracker.html new file mode 100644 index 0000000..528dbb5 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1Tracker.html @@ -0,0 +1,220 @@ + + + + + +Argus Camera Sample: ArgusSamples::Tracker< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::Tracker< T > Class Template Reference
+
+
+ +

A class tracking an Argus object through the TrackedUniqueObj below. + More...

+ +

#include <TrackedUniqueObject.h>

+ +

List of all members.

+ + + + + + + +

+Public Member Functions

virtual ~Tracker ()
virtual bool track (T *obj)=0
 Called when the object is assigned to a TrackedUniqueObj.
virtual bool untrack (T *ob)=0
 Called when the object is removed from a TrackedUniqueObj.
+

Detailed Description

+

template<typename T>
+class ArgusSamples::Tracker< T >

+ +

A class tracking an Argus object through the TrackedUniqueObj below.

+

The track/untrack functions are called whenever an Argus object is assigend to/removed from the TrackedUniqueObj object.

+ +

Definition at line 41 of file TrackedUniqueObject.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
virtual ArgusSamples::Tracker< T >::~Tracker ()
+
+inlinevirtual
+
+ +

Definition at line 44 of file TrackedUniqueObject.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
virtual bool ArgusSamples::Tracker< T >::track (T * obj)
+
+pure virtual
+
+ +

Called when the object is assigned to a TrackedUniqueObj.

+ +

Implemented in ArgusSamples::Dispatcher, and ArgusSamples::Dispatcher.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
virtual bool ArgusSamples::Tracker< T >::untrack (T * ob)
+
+pure virtual
+
+ +

Called when the object is removed from a TrackedUniqueObj.

+ +

Implemented in ArgusSamples::Dispatcher, and ArgusSamples::Dispatcher.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1VideoPipeline-members.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1VideoPipeline-members.html new file mode 100644 index 0000000..c59c918 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1VideoPipeline-members.html @@ -0,0 +1,142 @@ + + + + + +Argus Camera Sample: Member List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ArgusSamples::VideoPipeline Member List
+
+
+ +

This is the complete list of members for ArgusSamples::VideoPipeline, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
destroy()ArgusSamples::VideoPipeline
getAspectRatio(float *aspectRatio) const ArgusSamples::VideoPipeline
getFileExtension(VideoFileType fileType)ArgusSamples::VideoPipelinestatic
isSupported()ArgusSamples::VideoPipelinestatic
pause()ArgusSamples::VideoPipeline
rewind()ArgusSamples::VideoPipeline
setupForPlayback(EGLStreamKHR *videoStream, const char *fileName)ArgusSamples::VideoPipeline
setupForRecording(EGLStreamKHR videoStream, uint32_t width, uint32_t height, float frameRate, const char *fileName, VideoFormat videoFormat=VIDEO_FORMAT_H265, VideoFileType videoFileType=VIDEO_FILE_TYPE_MKV, uint32_t bitRate=0)ArgusSamples::VideoPipeline
start()ArgusSamples::VideoPipeline
stop()ArgusSamples::VideoPipeline
toggle()ArgusSamples::VideoPipeline
VIDEO_AVC_PROFILE_BASELINE enum valueArgusSamples::VideoPipeline
VIDEO_AVC_PROFILE_EXTENDED enum valueArgusSamples::VideoPipeline
VIDEO_AVC_PROFILE_HIGH enum valueArgusSamples::VideoPipeline
VIDEO_AVC_PROFILE_HIGH10 enum valueArgusSamples::VideoPipeline
VIDEO_AVC_PROFILE_MAIN enum valueArgusSamples::VideoPipeline
VIDEO_AVC_PROFILE_MAX enum valueArgusSamples::VideoPipeline
VIDEO_BITRATE_14M enum valueArgusSamples::VideoPipeline
VIDEO_BITRATE_20M enum valueArgusSamples::VideoPipeline
VIDEO_BITRATE_4M enum valueArgusSamples::VideoPipeline
VIDEO_BITRATE_8M enum valueArgusSamples::VideoPipeline
VIDEO_BITRATE_MAX enum valueArgusSamples::VideoPipeline
VIDEO_FILE_TYPE_3GP enum valueArgusSamples::VideoPipeline
VIDEO_FILE_TYPE_AVI enum valueArgusSamples::VideoPipeline
VIDEO_FILE_TYPE_H265 enum valueArgusSamples::VideoPipeline
VIDEO_FILE_TYPE_MKV enum valueArgusSamples::VideoPipeline
VIDEO_FILE_TYPE_MP4 enum valueArgusSamples::VideoPipeline
VIDEO_FORMAT_H264 enum valueArgusSamples::VideoPipeline
VIDEO_FORMAT_H265 enum valueArgusSamples::VideoPipeline
VIDEO_FORMAT_VP8 enum valueArgusSamples::VideoPipeline
VIDEO_FORMAT_VP9 enum valueArgusSamples::VideoPipeline
VideoAvcProfileType enum nameArgusSamples::VideoPipeline
VideoBitRate enum nameArgusSamples::VideoPipeline
VideoFileType enum nameArgusSamples::VideoPipeline
VideoFormat enum nameArgusSamples::VideoPipeline
VideoPipeline()ArgusSamples::VideoPipeline
~VideoPipeline()ArgusSamples::VideoPipeline
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1VideoPipeline.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1VideoPipeline.html new file mode 100644 index 0000000..adde178 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classArgusSamples_1_1VideoPipeline.html @@ -0,0 +1,661 @@ + + + + + +Argus Camera Sample: ArgusSamples::VideoPipeline Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ArgusSamples::VideoPipeline Class Reference
+
+
+ +

Record a video from a EGL stream. + More...

+ +

#include <VideoPipeline.h>

+ +

List of all members.

+ + + + + + + + + + +

+Public Types

enum  VideoFormat { VIDEO_FORMAT_H264, +VIDEO_FORMAT_H265, +VIDEO_FORMAT_VP8, +VIDEO_FORMAT_VP9 + }
 Supported video formats. More...
enum  VideoBitRate {
+  VIDEO_BITRATE_4M = 4000000, +VIDEO_BITRATE_8M = 8000000, +VIDEO_BITRATE_14M = 14000000, +VIDEO_BITRATE_20M = 20000000, +
+  VIDEO_BITRATE_MAX = 240000000 +
+ }
 Video BitRate presets. More...
enum  VideoFileType {
+  VIDEO_FILE_TYPE_MP4, +VIDEO_FILE_TYPE_3GP, +VIDEO_FILE_TYPE_AVI, +VIDEO_FILE_TYPE_MKV, +
+  VIDEO_FILE_TYPE_H265 +
+ }
 Supported video file types. More...
enum  VideoAvcProfileType {
+  VIDEO_AVC_PROFILE_BASELINE = 0x01, +VIDEO_AVC_PROFILE_MAIN = 0x02, +VIDEO_AVC_PROFILE_EXTENDED = 0x04, +VIDEO_AVC_PROFILE_HIGH = 0x08, +
+  VIDEO_AVC_PROFILE_HIGH10 = 0x10, +VIDEO_AVC_PROFILE_MAX = 0x7FFFFFFF +
+ }
 Video AVC profile types, each profile indicates support for various performance bounds and different annexes. More...
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 VideoPipeline ()
 ~VideoPipeline ()
bool destroy ()
 Destroy the video pipeline.
bool setupForRecording (EGLStreamKHR videoStream, uint32_t width, uint32_t height, float frameRate, const char *fileName, VideoFormat videoFormat=VIDEO_FORMAT_H265, VideoFileType videoFileType=VIDEO_FILE_TYPE_MKV, uint32_t bitRate=0)
 Setup the video pipeline for recording.
bool setupForPlayback (EGLStreamKHR *videoStream, const char *fileName)
 Setup the video pipeline for playback.
bool start ()
 Start recording/playback.
bool pause ()
 Pause recording/playback.
bool toggle ()
 Toggle recording/playback.
bool rewind ()
 Rewind (playback only)
bool stop ()
 Stop recording/playback.
bool getAspectRatio (float *aspectRatio) const
 Get the aspect ratio of the video.
+ + + + + +

+Static Public Member Functions

static const char * getFileExtension (VideoFileType fileType)
 Get the file extension for a video file type.
static bool isSupported ()
 Get indicator of video recording being supported.
+

Detailed Description

+

Record a video from a EGL stream.

+ +

Definition at line 45 of file VideoPipeline.h.

+

Member Enumeration Documentation

+ +
+
+ +

Video AVC profile types, each profile indicates support for various performance bounds and different annexes.

+
Enumerator:
+ + + + + + +
VIDEO_AVC_PROFILE_BASELINE  +
VIDEO_AVC_PROFILE_MAIN  +
VIDEO_AVC_PROFILE_EXTENDED  +
VIDEO_AVC_PROFILE_HIGH  +
VIDEO_AVC_PROFILE_HIGH10  +
VIDEO_AVC_PROFILE_MAX  +
+
+
+ +

Definition at line 90 of file VideoPipeline.h.

+ +
+
+ +
+
+ +

Video BitRate presets.

+
Enumerator:
+ + + + + +
VIDEO_BITRATE_4M  +
VIDEO_BITRATE_8M  +
VIDEO_BITRATE_14M  +
VIDEO_BITRATE_20M  +
VIDEO_BITRATE_MAX  +
+
+
+ +

Definition at line 65 of file VideoPipeline.h.

+ +
+
+ +
+
+ +

Supported video file types.

+
Enumerator:
+ + + + + +
VIDEO_FILE_TYPE_MP4  +
VIDEO_FILE_TYPE_3GP  +
VIDEO_FILE_TYPE_AVI  +
VIDEO_FILE_TYPE_MKV  +
VIDEO_FILE_TYPE_H265  +
+
+
+ +

Definition at line 77 of file VideoPipeline.h.

+ +
+
+ +
+
+ +

Supported video formats.

+
Enumerator:
+ + + + +
VIDEO_FORMAT_H264  +
VIDEO_FORMAT_H265  +
VIDEO_FORMAT_VP8  +
VIDEO_FORMAT_VP9  +
+
+
+ +

Definition at line 54 of file VideoPipeline.h.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
ArgusSamples::VideoPipeline::VideoPipeline ()
+
+ +

Definition at line 41 of file VideoPipeline.cpp.

+ +
+
+ +
+
+ + + + + + + +
ArgusSamples::VideoPipeline::~VideoPipeline ()
+
+ +

Definition at line 49 of file VideoPipeline.cpp.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
bool ArgusSamples::VideoPipeline::destroy ()
+
+ +

Destroy the video pipeline.

+ +

Definition at line 587 of file VideoPipeline.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::VideoPipeline::getAspectRatio (float * aspectRatio) const
+
+ +

Get the aspect ratio of the video.

+

The video has to be in paused or playing state.

+
Parameters:
+ + +
aspectRatio[out]
+
+
+ +

Definition at line 627 of file VideoPipeline.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const char * ArgusSamples::VideoPipeline::getFileExtension (VideoFileType fileType)
+
+static
+
+ +

Get the file extension for a video file type.

+ +

Definition at line 606 of file VideoPipeline.cpp.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool ArgusSamples::VideoPipeline::isSupported ()
+
+static
+
+ +

Get indicator of video recording being supported.

+ +

Definition at line 692 of file VideoPipeline.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::VideoPipeline::pause ()
+
+ +

Pause recording/playback.

+ +

Definition at line 480 of file VideoPipeline.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::VideoPipeline::rewind ()
+
+ +

Rewind (playback only)

+ +

Definition at line 525 of file VideoPipeline.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool ArgusSamples::VideoPipeline::setupForPlayback (EGLStreamKHR * videoStream,
const char * fileName 
)
+
+ +

Setup the video pipeline for playback.

+
Parameters:
+ + + +
[out]videoStreamEGL stream
[in]fileNameFile name
+
+
+ +

Definition at line 362 of file VideoPipeline.cpp.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool ArgusSamples::VideoPipeline::setupForRecording (EGLStreamKHR videoStream,
uint32_t width,
uint32_t height,
float frameRate,
const char * fileName,
VideoFormat videoFormat = VIDEO_FORMAT_H265,
VideoFileType videoFileType = VIDEO_FILE_TYPE_MKV,
uint32_t bitRate = 0 
)
+
+ +

Setup the video pipeline for recording.

+
Parameters:
+ + + + + + + + + +
[in]videoStreamEGL stream to record from
[in]widthWidth of the recorded video
[in]heightHeight of the recorded video
[in]frameRateFrame rate
[in]fileNameFile name
[in]videoFormatVideo format
[in]videoFileTypeVideo file type
[in]bitRateBitrate, if 0 the bitrate will be selected depending on the resolution
+
+
+ +

Definition at line 112 of file VideoPipeline.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::VideoPipeline::start ()
+
+ +

Start recording/playback.

+ +

Definition at line 449 of file VideoPipeline.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::VideoPipeline::stop ()
+
+ +

Stop recording/playback.

+ +

Definition at line 543 of file VideoPipeline.cpp.

+ +
+
+ +
+
+ + + + + + + +
bool ArgusSamples::VideoPipeline::toggle ()
+
+ +

Toggle recording/playback.

+ +

Definition at line 500 of file VideoPipeline.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classes.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classes.html new file mode 100644 index 0000000..c7702c4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/classes.html @@ -0,0 +1,129 @@ + + + + + +Argus Camera Sample: Class Index + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class Index
+
+
+
A | C | D | E | G | I | M | P | S | T | V
+ + + + + + + + + + + + + + + + + +
  A  
+
Composer (ArgusSamples)   GalleryItemImage (ArgusSamples)   
  S  
+
TaskStillCapture (ArgusSamples)   
ConditionVariable (ArgusSamples)   GalleryItemVideo (ArgusSamples)   TaskVideoRecord (ArgusSamples)   
Dispatcher::ActiveSession (ArgusSamples)   
  D  
+
GalleryThread (ArgusSamples)   ScopedGuard (ArgusSamples)   TimeValue (ArgusSamples)   
App (ArgusSamples)   GstUnrefer (ArgusSamples)   ScopedMutex (ArgusSamples)   TrackedUniqueObj (ArgusSamples)   
AppModuleCapture (ArgusSamples)   DeFogSettingsObserver (ArgusSamples)   
  I  
+
TaskMultiSession::Session (ArgusSamples)   Tracker (ArgusSamples)   
AppModuleGallery (ArgusSamples)   DenoiseSettingsObserver (ArgusSamples)   SessionPerfTracker (ArgusSamples)   
  V  
+
AppModuleGeneric (ArgusSamples)   Dispatcher (ArgusSamples)   IAppModule (ArgusSamples)   SourceSettingsObserver (ArgusSamples)   
AppModuleMultiExposure (ArgusSamples)   
  E  
+
IObserverForInterface (ArgusSamples)   Composer::Stream (ArgusSamples)   VideoPipeline (ArgusSamples)   
AppModuleMultiSession (ArgusSamples)   ITask (ArgusSamples)   StreamConsumer (ArgusSamples)   
AppModuleVideo (ArgusSamples)   EdgeEnhanceSettingsObserver (ArgusSamples)   
  M  
+
  T  
+
AutoControlSettingsObserver (ArgusSamples)   EventThread (ArgusSamples)   
  C  
+
TaskMultiExposure::ExpLevel (ArgusSamples)   Mutex (ArgusSamples)   TaskGallery (ArgusSamples)   
  G  
+
  P  
+
TaskMultiExposure (ArgusSamples)   
CameraApp (ArgusSamples)   TaskMultiSession (ArgusSamples)   
GalleryItem (ArgusSamples)   PerfTracker (ArgusSamples)   
+
A | C | D | E | G | I | M | P | S | T | V
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/closed.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/closed.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_042e14a6c298d5608bdc146d868bd84d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_042e14a6c298d5608bdc146d868bd84d.html new file mode 100644 index 0000000..aacd8ee --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_042e14a6c298d5608bdc146d868bd84d.html @@ -0,0 +1,109 @@ + + + + + +Argus Camera Sample: modules/tasks/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
tasks Directory Reference
+
+
+ + + + + + + + + + + + + +

+Files

file  Gallery.cpp [code]
 Gallery implementation file.
file  Gallery.h [code]
file  MultiExposure.cpp [code]
file  MultiExposure.h [code]
file  MultiSession.cpp [code]
file  MultiSession.h [code]
file  StillCapture.cpp [code]
file  StillCapture.h [code]
file  VideoRecord.cpp [code]
file  VideoRecord.h [code]
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_1788f8309b1a812dcb800a185471cf6c.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_1788f8309b1a812dcb800a185471cf6c.html new file mode 100644 index 0000000..9648663 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_1788f8309b1a812dcb800a185471cf6c.html @@ -0,0 +1,105 @@ + + + + + +Argus Camera Sample: ui/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
ui Directory Reference
+
+
+ + + + + + + + + +

+Directories

directory  camera
directory  capture
directory  common
directory  gallery
directory  multiExposure
directory  multiSession
directory  video
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_2c07d30112fe8b5639734e89eec4bc37.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_2c07d30112fe8b5639734e89eec4bc37.html new file mode 100644 index 0000000..4679221 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_2c07d30112fe8b5639734e89eec4bc37.html @@ -0,0 +1,100 @@ + + + + + +Argus Camera Sample: ui/video/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
video Directory Reference
+
+
+ + + + +

+Files

file  AppModuleVideo.cpp [code]
file  AppModuleVideo.h [code]
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_3f5494b8100d5317b32b520f0477fb2d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_3f5494b8100d5317b32b520f0477fb2d.html new file mode 100644 index 0000000..3549432 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_3f5494b8100d5317b32b520f0477fb2d.html @@ -0,0 +1,100 @@ + + + + + +Argus Camera Sample: ui/capture/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
capture Directory Reference
+
+
+ + + + +

+Files

file  AppModuleCapture.cpp [code]
file  AppModuleCapture.h [code]
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_5ac401f2c66fdcfaf7d9bc34b8165934.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_5ac401f2c66fdcfaf7d9bc34b8165934.html new file mode 100644 index 0000000..9be0ab1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_5ac401f2c66fdcfaf7d9bc34b8165934.html @@ -0,0 +1,103 @@ + + + + + +Argus Camera Sample: ui/common/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
common Directory Reference
+
+
+ + + + + + + +

+Files

file  App.cpp [code]
file  App.h [code]
file  AppModuleGeneric.cpp [code]
file  AppModuleGeneric.h [code]
file  IAppModule.h [code]
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_682b429b2297791ae46566f111e63837.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_682b429b2297791ae46566f111e63837.html new file mode 100644 index 0000000..524fdd2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_682b429b2297791ae46566f111e63837.html @@ -0,0 +1,100 @@ + + + + + +Argus Camera Sample: ui/multiExposure/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
multiExposure Directory Reference
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_94d849f4bc8cfd036d448caca8fa39a3.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_94d849f4bc8cfd036d448caca8fa39a3.html new file mode 100644 index 0000000..2558132 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_94d849f4bc8cfd036d448caca8fa39a3.html @@ -0,0 +1,100 @@ + + + + + +Argus Camera Sample: ui/gallery/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
gallery Directory Reference
+
+
+ + + + +

+Files

file  AppModuleGallery.cpp [code]
file  AppModuleGallery.h [code]
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_99f374e801d5335bf69d878eef6275de.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_99f374e801d5335bf69d878eef6275de.html new file mode 100644 index 0000000..6e18625 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_99f374e801d5335bf69d878eef6275de.html @@ -0,0 +1,100 @@ + + + + + +Argus Camera Sample: ui/multiSession/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
multiSession Directory Reference
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html new file mode 100644 index 0000000..bffb070 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_bdd9a5d540de89e9fe90efdfc6973a4f.html @@ -0,0 +1,107 @@ + + + + + +Argus Camera Sample: common/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
common Directory Reference
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_c813e58ebc5940d0d68b56bc7c54b97d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_c813e58ebc5940d0d68b56bc7c54b97d.html new file mode 100644 index 0000000..17f3c76 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_c813e58ebc5940d0d68b56bc7c54b97d.html @@ -0,0 +1,99 @@ + + + + + +Argus Camera Sample: ui/camera/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
camera Directory Reference
+
+
+ + + +

+Files

file  Main.cpp [code]
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_d10aa5f1e26260a914a037377583e9a7.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_d10aa5f1e26260a914a037377583e9a7.html new file mode 100644 index 0000000..f2db3d0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_d10aa5f1e26260a914a037377583e9a7.html @@ -0,0 +1,102 @@ + + + + + +Argus Camera Sample: renderer/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
renderer Directory Reference
+
+
+ + + + + + +

+Files

file  Composer.cpp [code]
file  Composer.h [code]
file  StreamConsumer.cpp [code]
file  StreamConsumer.h [code]
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_e05d7e2b1ecd646af5bb94391405f3b5.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_e05d7e2b1ecd646af5bb94391405f3b5.html new file mode 100644 index 0000000..13aff74 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dir_e05d7e2b1ecd646af5bb94391405f3b5.html @@ -0,0 +1,112 @@ + + + + + +Argus Camera Sample: modules/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
modules Directory Reference
+
+
+ + + +

+Directories

directory  tasks
+ + + + + + + + + + + +

+Files

file  Dispatcher.cpp [code]
file  Dispatcher.h [code]
file  EventThread.cpp [code]
file  EventThread.h [code]
file  ITask.h [code]
file  PerfTracker.cpp [code]
file  PerfTracker.h [code]
file  TrackedUniqueObject.h [code]
file  XMLConfig.cpp [code]
file  XMLConfig.h [code]
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/doxygen.css b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/doxygen.css new file mode 100644 index 0000000..ceac83e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/doxygen.css @@ -0,0 +1,1133 @@ +/* The standard CSS for doxygen */ + +body, table, div, p, dl { + font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; + font-size: 13px; + line-height: 1.3; +} + +/* @group Heading Levels */ + +h1 { + font-size: 150%; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2 { + font-size: 120%; +} + +h3 { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px; + margin: 4px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; +} + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #C4CFE5; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + width: 100%; + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + margin-left: 5px; + font-size: 8pt; + padding-left: 5px; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 7px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/doxygen.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/doxygen.png new file mode 100644 index 0000000..3ff17d8 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/doxygen.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dynsections.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dynsections.js new file mode 100644 index 0000000..116542f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/dynsections.js @@ -0,0 +1,78 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + +Argus Camera Sample: File List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
File List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2blank.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2blank.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2blank.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2cl.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2cl.png new file mode 100644 index 0000000..132f657 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2cl.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2doc.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2doc.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2folderclosed.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2folderclosed.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2folderopen.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2folderopen.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2lastnode.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2lastnode.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2lastnode.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2link.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2link.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2link.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2mlastnode.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2mlastnode.png new file mode 100644 index 0000000..0b63f6d Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2mlastnode.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2mnode.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2mnode.png new file mode 100644 index 0000000..0b63f6d Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2mnode.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2mo.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2mo.png new file mode 100644 index 0000000..4bfb80f Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2mo.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2node.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2node.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2node.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2ns.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2ns.png new file mode 100644 index 0000000..72e3d71 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2ns.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2plastnode.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2plastnode.png new file mode 100644 index 0000000..c6ee22f Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2plastnode.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2pnode.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2pnode.png new file mode 100644 index 0000000..c6ee22f Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2pnode.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2splitbar.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2splitbar.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2vertline.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2vertline.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/ftv2vertline.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions.html new file mode 100644 index 0000000..09c12ea --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions.html @@ -0,0 +1,176 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x62.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x62.html new file mode 100644 index 0000000..3ce8251 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x62.html @@ -0,0 +1,143 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- b -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x63.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x63.html new file mode 100644 index 0000000..c40f142 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x63.html @@ -0,0 +1,197 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- c -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x64.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x64.html new file mode 100644 index 0000000..ff2d4fa --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x64.html @@ -0,0 +1,152 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- d -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x65.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x65.html new file mode 100644 index 0000000..f26528c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x65.html @@ -0,0 +1,153 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- e -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x66.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x66.html new file mode 100644 index 0000000..922f8a7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x66.html @@ -0,0 +1,149 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- f -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x67.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x67.html new file mode 100644 index 0000000..c157717 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x67.html @@ -0,0 +1,229 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- g -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x69.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x69.html new file mode 100644 index 0000000..dcdbdc9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x69.html @@ -0,0 +1,189 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6c.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6c.html new file mode 100644 index 0000000..d9bce33 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6c.html @@ -0,0 +1,143 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- l -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6d.html new file mode 100644 index 0000000..c851837 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6d.html @@ -0,0 +1,714 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- m -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6e.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6e.html new file mode 100644 index 0000000..8e25d56 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6e.html @@ -0,0 +1,141 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- n -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6f.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6f.html new file mode 100644 index 0000000..a2b06ec --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x6f.html @@ -0,0 +1,278 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- o -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x70.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x70.html new file mode 100644 index 0000000..ab63d55 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x70.html @@ -0,0 +1,149 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- p -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x71.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x71.html new file mode 100644 index 0000000..d6ce825 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x71.html @@ -0,0 +1,137 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- q -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x72.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x72.html new file mode 100644 index 0000000..b9a5523 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x72.html @@ -0,0 +1,166 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x73.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x73.html new file mode 100644 index 0000000..2264202 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x73.html @@ -0,0 +1,297 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- s -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x74.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x74.html new file mode 100644 index 0000000..bed42fe --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x74.html @@ -0,0 +1,219 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- t -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x75.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x75.html new file mode 100644 index 0000000..af308c7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x75.html @@ -0,0 +1,150 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- u -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x76.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x76.html new file mode 100644 index 0000000..140af23 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x76.html @@ -0,0 +1,212 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- v -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x77.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x77.html new file mode 100644 index 0000000..63a8930 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x77.html @@ -0,0 +1,143 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- w -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x7e.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x7e.html new file mode 100644 index 0000000..cb181e3 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_0x7e.html @@ -0,0 +1,257 @@ + + + + + +Argus Camera Sample: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- ~ -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_enum.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_enum.html new file mode 100644 index 0000000..ea27951 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_enum.html @@ -0,0 +1,125 @@ + + + + + +Argus Camera Sample: Class Members - Enumerations + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_eval.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_eval.html new file mode 100644 index 0000000..eff6210 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_eval.html @@ -0,0 +1,217 @@ + + + + + +Argus Camera Sample: Class Members - Enumerator + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- c -

+ + +

- t -

+ + +

- v -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func.html new file mode 100644 index 0000000..e8c1d28 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func.html @@ -0,0 +1,170 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- a -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x62.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x62.html new file mode 100644 index 0000000..b617583 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x62.html @@ -0,0 +1,143 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- b -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x63.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x63.html new file mode 100644 index 0000000..9322935 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x63.html @@ -0,0 +1,166 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- c -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x64.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x64.html new file mode 100644 index 0000000..d2062f0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x64.html @@ -0,0 +1,152 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- d -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x65.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x65.html new file mode 100644 index 0000000..28539f6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x65.html @@ -0,0 +1,153 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- e -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x66.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x66.html new file mode 100644 index 0000000..35ecd5c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x66.html @@ -0,0 +1,149 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- f -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x67.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x67.html new file mode 100644 index 0000000..f311a1c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x67.html @@ -0,0 +1,226 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- g -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x69.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x69.html new file mode 100644 index 0000000..f6a9ad0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x69.html @@ -0,0 +1,189 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6c.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6c.html new file mode 100644 index 0000000..b1dd462 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6c.html @@ -0,0 +1,143 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- l -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6d.html new file mode 100644 index 0000000..77595db --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6d.html @@ -0,0 +1,143 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- m -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6e.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6e.html new file mode 100644 index 0000000..d4aefd4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6e.html @@ -0,0 +1,138 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- n -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6f.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6f.html new file mode 100644 index 0000000..cba035f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x6f.html @@ -0,0 +1,277 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- o -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x70.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x70.html new file mode 100644 index 0000000..4e2dd56 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x70.html @@ -0,0 +1,149 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x71.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x71.html new file mode 100644 index 0000000..63ca80b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x71.html @@ -0,0 +1,137 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- q -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x72.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x72.html new file mode 100644 index 0000000..d272759 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x72.html @@ -0,0 +1,166 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x73.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x73.html new file mode 100644 index 0000000..fca834c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x73.html @@ -0,0 +1,291 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- s -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x74.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x74.html new file mode 100644 index 0000000..f6a583e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x74.html @@ -0,0 +1,204 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x75.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x75.html new file mode 100644 index 0000000..1bc3900 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x75.html @@ -0,0 +1,147 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- u -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x76.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x76.html new file mode 100644 index 0000000..9de0d3a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x76.html @@ -0,0 +1,140 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- v -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x77.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x77.html new file mode 100644 index 0000000..a87defe --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x77.html @@ -0,0 +1,143 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- w -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x7e.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x7e.html new file mode 100644 index 0000000..5405eb4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_func_0x7e.html @@ -0,0 +1,257 @@ + + + + + +Argus Camera Sample: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- ~ -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_rela.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_rela.html new file mode 100644 index 0000000..5ca8b15 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_rela.html @@ -0,0 +1,116 @@ + + + + + +Argus Camera Sample: Class Members - Related Functions + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_type.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_type.html new file mode 100644 index 0000000..41592e3 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_type.html @@ -0,0 +1,134 @@ + + + + + +Argus Camera Sample: Class Members - Typedefs + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_vars.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_vars.html new file mode 100644 index 0000000..7ccdaa7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/functions_vars.html @@ -0,0 +1,682 @@ + + + + + +Argus Camera Sample: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- m -

+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/globals.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/globals.html new file mode 100644 index 0000000..78f068d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/globals.html @@ -0,0 +1,128 @@ + + + + + +Argus Camera Sample: File Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all file members with links to the files they belong to:
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/globals_defs.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/globals_defs.html new file mode 100644 index 0000000..a43e65b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/globals_defs.html @@ -0,0 +1,125 @@ + + + + + +Argus Camera Sample: File Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/globals_func.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/globals_func.html new file mode 100644 index 0000000..12c7f78 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/globals_func.html @@ -0,0 +1,104 @@ + + + + + +Argus Camera Sample: File Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/hierarchy.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/hierarchy.html new file mode 100644 index 0000000..353244d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/hierarchy.html @@ -0,0 +1,149 @@ + + + + + +Argus Camera Sample: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
oCArgusSamples::Dispatcher::ActiveSession
oCArgusSamples::AppBase class for apps
|\CArgusSamples::CameraApp
oCArgusSamples::ComposerThe composer is used to render multiple EGL streams into the windows
oCArgusSamples::ConditionVariableConditional
oCArgusSamples::EventThreadThe EventThread is querying events from the session
oCArgusSamples::TaskMultiExposure::ExpLevelFor each exposure level there is one request where the exposure compensation is set to the correct value
oCArgusSamples::GalleryItemRepresents an item in the gallery
|oCArgusSamples::GalleryItemImageA gallery image
|\CArgusSamples::GalleryItemVideoA gallery video
oCArgusSamples::GalleryThreadThis class handles creation of a thread scanning for supported images/videos, loading them and writing the content to an EGLStream
oCArgusSamples::GstUnrefer< T >RAII helper class for calling gst_object_unref on exit from a block or function
oCArgusSamples::IAppModuleA application module exposes command line options, GUI elements and executes tasks
|oCArgusSamples::AppModuleCaptureThe capture app module adds functionality to capture still images and save them as files
|oCArgusSamples::AppModuleGalleryThe gallery app module adds functionality to review images and videos
|oCArgusSamples::AppModuleGenericThe base app module provides basic settings common to all app modules
|oCArgusSamples::AppModuleMultiExposureThe multi exposure app module adds functionality to capture multiple streams with different exposure compensation values
|oCArgusSamples::AppModuleMultiSessionThe multi session app module adds functionality for adding multiple sessions where each session uses a different sensor
|\CArgusSamples::AppModuleVideoThe video app module adds functionality to record a video and save it
oCArgusSamples::IObserverForInterfaceAn observer for an Argus interface
|oCArgusSamples::AutoControlSettingsObserverAuto control settings observer
|oCArgusSamples::DeFogSettingsObserverDeFog settings observer
|oCArgusSamples::DenoiseSettingsObserverDenoise settings observer
|oCArgusSamples::EdgeEnhanceSettingsObserverEdge enhancement settings observer
|\CArgusSamples::SourceSettingsObserverSource settings observer
oCArgusSamples::ITaskBase class for tasks
|oCArgusSamples::TaskGalleryThis task implements a gallery to review images and videos
|oCArgusSamples::TaskMultiExposureThis task captures multiple streams with different exposure compensation values
|oCArgusSamples::TaskMultiSessionThis task creates one session for each available sensor
|oCArgusSamples::TaskStillCaptureThis task captures still images
|\CArgusSamples::TaskVideoRecordThis task records a video and saves it to a file using gstreamer
oCArgusSamples::MutexMutex
oCArgusSamples::PerfTrackerUsed to track global performance events
oCArgusSamples::ScopedGuard< T >RAII-syle class performing an action when control flow leaves the scope
oCArgusSamples::ScopedMutexAn RAII-style class for acquiring a Mutex
oCArgusSamples::TaskMultiSession::SessionFor each device there is one session with a request
oCArgusSamples::SessionPerfTrackerUsed to track session performance events
oCArgusSamples::Composer::StreamEach bound EGL stream has a stream consumer and can be active or inactive
oCArgusSamples::StreamConsumerThe stream consumer is connecting to a EGL stream and consumes the frames into a GL texture
oCArgusSamples::TimeValueA time value
oCArgusSamples::TrackedUniqueObj< T >This class helps track construction and destruction of Argus objects
oCArgusSamples::Tracker< T >A class tracking an Argus object through the TrackedUniqueObj below
oCArgusSamples::Tracker< Argus::CaptureSession >
|\CArgusSamples::DispatcherThe dispatcher is called by clients like the command line interface
oCArgusSamples::Tracker< Argus::Request >
|\CArgusSamples::DispatcherThe dispatcher is called by clients like the command line interface
\CArgusSamples::VideoPipelineRecord a video from a EGL stream
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/index.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/index.html new file mode 100644 index 0000000..49f9b0f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/index.html @@ -0,0 +1,90 @@ + + + + + +Argus Camera Sample: Main Page + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
Argus Camera Sample Documentation
+
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/jquery.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/jquery.js new file mode 100644 index 0000000..63939e7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/jquery.js @@ -0,0 +1,8 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")), +f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c) +{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaceArgus.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaceArgus.html new file mode 100644 index 0000000..8ca5434 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaceArgus.html @@ -0,0 +1,103 @@ + + + + + +Argus Camera Sample: Argus Namespace Reference + + + + + + + + + +
+
+
+ + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+ + + + + + + + + + +
+ +
+ + +
+ +
+
Argus Namespace Reference
+
+
+ + + +

+Namespaces

namespace  Ext
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaceArgusSamples.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaceArgusSamples.html new file mode 100644 index 0000000..65238ce --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaceArgusSamples.html @@ -0,0 +1,444 @@ + + + + + +Argus Camera Sample: ArgusSamples Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
ArgusSamples Namespace Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  ConditionVariable
 Conditional. More...
class  Mutex
 Mutex. More...
class  ScopedMutex
 An RAII-style class for acquiring a Mutex. More...
class  ScopedGuard
 RAII-syle class performing an action when control flow leaves the scope. More...
class  TimeValue
 A time value. More...
class  GstUnrefer
 RAII helper class for calling gst_object_unref on exit from a block or function. More...
class  VideoPipeline
 Record a video from a EGL stream. More...
class  IObserverForInterface
 An observer for an Argus interface. More...
class  DenoiseSettingsObserver
 Denoise settings observer. More...
class  EdgeEnhanceSettingsObserver
 Edge enhancement settings observer. More...
class  SourceSettingsObserver
 Source settings observer. More...
class  AutoControlSettingsObserver
 Auto control settings observer. More...
class  DeFogSettingsObserver
 DeFog settings observer. More...
class  Dispatcher
 The dispatcher is called by clients like the command line interface. More...
class  EventThread
 The EventThread is querying events from the session. More...
class  ITask
 Base class for tasks. More...
class  PerfTracker
 Used to track global performance events. More...
class  SessionPerfTracker
 Used to track session performance events. More...
class  GalleryItem
 Represents an item in the gallery. More...
class  GalleryItemImage
 A gallery image. More...
class  GalleryItemVideo
 A gallery video. More...
class  GalleryThread
 This class handles creation of a thread scanning for supported images/videos, loading them and writing the content to an EGLStream. More...
class  TaskGallery
 This task implements a gallery to review images and videos. More...
class  TaskMultiExposure
 This task captures multiple streams with different exposure compensation values. More...
class  TaskMultiSession
 This task creates one session for each available sensor. More...
class  TaskStillCapture
 This task captures still images. More...
class  TaskVideoRecord
 This task records a video and saves it to a file using gstreamer. More...
class  Tracker
 A class tracking an Argus object through the TrackedUniqueObj below. More...
class  TrackedUniqueObj
 This class helps track construction and destruction of Argus objects. More...
class  Composer
 The composer is used to render multiple EGL streams into the windows. More...
class  StreamConsumer
 The stream consumer is connecting to a EGL stream and consumes the frames into a GL texture. More...
class  CameraApp
class  AppModuleCapture
 The capture app module adds functionality to capture still images and save them as files. More...
class  App
 Base class for apps. More...
class  AppModuleGeneric
 The base app module provides basic settings common to all app modules. More...
class  IAppModule
 A application module exposes command line options, GUI elements and executes tasks. More...
class  AppModuleGallery
 The gallery app module adds functionality to review images and videos. More...
class  AppModuleMultiExposure
 The multi exposure app module adds functionality to capture multiple streams with different exposure compensation values. More...
class  AppModuleMultiSession
 The multi session app module adds functionality for adding multiple sessions where each session uses a different sensor. More...
class  AppModuleVideo
 The video app module adds functionality to record a video and save it. More...
+ + + + + + + + +

+Enumerations

enum  StillFileType { STILL_FILE_TYPE_JPG, +STILL_FILE_TYPE_HEADERLESS + }
enum  GlobalEvent { GLOBAL_EVENT_APP_START, +GLOBAL_EVENT_APP_INITIALIZED, +GLOBAL_EVENT_DISPLAY + }
 Global events. More...
enum  SessionEvent {
+  SESSION_EVENT_TASK_START, +SESSION_EVENT_ISSUE_CAPTURE, +SESSION_EVENT_REQUEST_RECEIVED, +SESSION_EVENT_REQUEST_LATENCY, +
+  SESSION_EVENT_FRAME_PERIOD, +SESSION_EVENT_FRAME_COUNT, +SESSION_EVENT_CLOSE_REQUESTED, +SESSION_EVENT_FLUSH_DONE, +
+  SESSION_EVENT_CLOSE_DONE +
+ }
 Session events. More...
enum  Modules {
+  MODULE_CAPTURE, +MODULE_VIDEO, +MODULE_MULTI_EXPOSURE, +MODULE_MULTI_SESSION, +
+  MODULE_FIRST = MODULE_CAPTURE, +MODULE_LAST = MODULE_MULTI_SESSION, +MODULE_COUNT, +MODULE_INVALID = -1 +
+ }
 Supported modules. More...
+ + + + + + + +

+Functions

TimeValue getCurrentTime ()
bool validateOutputPath (const char *filename)
bool loadConfig (const char *configFile)
 Load configuration from XMl file.
bool saveConfig (const char *configFile)
 Save configuration to a XMl file.
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum ArgusSamples::GlobalEvent
+
+ +

Global events.

+
Enumerator:
+ + + +
GLOBAL_EVENT_APP_START  +
GLOBAL_EVENT_APP_INITIALIZED  +
GLOBAL_EVENT_DISPLAY  +
+
+
+ +

Definition at line 48 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + +
enum ArgusSamples::Modules
+
+ +

Supported modules.

+
Enumerator:
+ + + + + + + + +
MODULE_CAPTURE  +
MODULE_VIDEO  +
MODULE_MULTI_EXPOSURE  +
MODULE_MULTI_SESSION  +
MODULE_FIRST  +
MODULE_LAST  +
MODULE_COUNT  +
MODULE_INVALID  +
+
+
+ +

Definition at line 70 of file Main.cpp.

+ +
+
+ +
+
+ + + + +
enum ArgusSamples::SessionEvent
+
+ +

Session events.

+
Enumerator:
+ + + + + + + + + +
SESSION_EVENT_TASK_START  +
SESSION_EVENT_ISSUE_CAPTURE  +
SESSION_EVENT_REQUEST_RECEIVED  +
SESSION_EVENT_REQUEST_LATENCY  +
SESSION_EVENT_FRAME_PERIOD  +
SESSION_EVENT_FRAME_COUNT  +
SESSION_EVENT_CLOSE_REQUESTED  +
SESSION_EVENT_FLUSH_DONE  +
SESSION_EVENT_CLOSE_DONE  +
+
+
+ +

Definition at line 120 of file PerfTracker.h.

+ +
+
+ +
+
+ + + + +
enum ArgusSamples::StillFileType
+
+

Supported still image file formats

+
Enumerator:
+ + +
STILL_FILE_TYPE_JPG  +
STILL_FILE_TYPE_HEADERLESS  +
+
+
+ +

Definition at line 208 of file Util.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + +
TimeValue ArgusSamples::getCurrentTime ()
+
+

Get the current time.

+ +

Definition at line 42 of file Util.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::loadConfig (const char * configFile)
+
+ +

Load configuration from XMl file.

+
Parameters:
+ + +
configFile[in]
+
+
+ +

Definition at line 268 of file XMLConfig.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::saveConfig (const char * configFile)
+
+ +

Save configuration to a XMl file.

+
Parameters:
+ + +
configFile[in]
+
+
+ +

Definition at line 387 of file XMLConfig.cpp.

+ +
+
+ +
+
+ + + + + + + + +
bool ArgusSamples::validateOutputPath (const char * filename)
+
+ +

Definition at line 53 of file Util.cpp.

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaceArgus_1_1Ext.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaceArgus_1_1Ext.html new file mode 100644 index 0000000..ba0ca54 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaceArgus_1_1Ext.html @@ -0,0 +1,100 @@ + + + + + +Argus Camera Sample: Argus::Ext Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext Namespace Reference
+
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers.html new file mode 100644 index 0000000..edc7701 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers.html @@ -0,0 +1,192 @@ + + + + + +Argus Camera Sample: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers_enum.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers_enum.html new file mode 100644 index 0000000..46820cc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers_enum.html @@ -0,0 +1,114 @@ + + + + + +Argus Camera Sample: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers_eval.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers_eval.html new file mode 100644 index 0000000..fd00b36 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers_eval.html @@ -0,0 +1,168 @@ + + + + + +Argus Camera Sample: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers_func.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers_func.html new file mode 100644 index 0000000..490bc90 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespacemembers_func.html @@ -0,0 +1,114 @@ + + + + + +Argus Camera Sample: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaces.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaces.html new file mode 100644 index 0000000..91b5270 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/namespaces.html @@ -0,0 +1,103 @@ + + + + + +Argus Camera Sample: Namespace List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Namespace List
+
+
+
Here is a list of all namespaces with brief descriptions:
+
[detail level 12]
+ + + +
oNArgus
|\NExt
\NArgusSamples
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/nav_f.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/nav_f.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/nav_g.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/nav_g.png new file mode 100644 index 0000000..8c6c13e Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/nav_g.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/nav_h.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/nav_h.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/open.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/open.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/pages.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/pages.html new file mode 100644 index 0000000..9d0c7a9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/pages.html @@ -0,0 +1,95 @@ + + + + + +Argus Camera Sample: Related Pages + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
Related Pages
+
+
+
Here is a list of all related documentation pages:
+ + +
\Todo List
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_5f.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_5f.html new file mode 100644 index 0000000..1f27755 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_5f.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_5f.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_5f.js new file mode 100644 index 0000000..f00e7df --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_5f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5fstdc_5fformat_5fmacros',['__STDC_FORMAT_MACROS',['../PerfTracker_8cpp.html#aacbb9e1f38be71e22df1584a37c56693',1,'PerfTracker.cpp']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_61.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_61.html new file mode 100644 index 0000000..a3164d5 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_61.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_61.js new file mode 100644 index 0000000..1d146ce --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_61.js @@ -0,0 +1,43 @@ +var searchData= +[ + ['acquire',['acquire',['../classArgusSamples_1_1StreamConsumer.html#a0fc52da91949ba7f0d68c8a8df4fd880',1,'ArgusSamples::StreamConsumer']]], + ['actiontype',['ActionType',['../classArgusSamples_1_1ScopedGuard.html#a57d7aa83a93915fcede2efe2ee86ab69',1,'ArgusSamples::ScopedGuard']]], + ['activesession',['ActiveSession',['../classArgusSamples_1_1Dispatcher_1_1ActiveSession.html',1,'ArgusSamples::Dispatcher']]], + ['activesession',['ActiveSession',['../classArgusSamples_1_1Dispatcher_1_1ActiveSession.html#a908dfbc3fd815f4904700088e7e4aff5',1,'ArgusSamples::Dispatcher::ActiveSession']]], + ['activesessionlist',['ActiveSessionList',['../classArgusSamples_1_1Dispatcher.html#a3c97783b88bc5913eb3bc76cfe766723',1,'ArgusSamples::Dispatcher']]], + ['app',['App',['../classArgusSamples_1_1App.html',1,'ArgusSamples']]], + ['app',['App',['../classArgusSamples_1_1App.html#a7c85ccdeda41d3907409c78e98dc2fdc',1,'ArgusSamples::App::App(const char *appName)'],['../classArgusSamples_1_1App.html#ad7bdfcac95720b7b205849717559613d',1,'ArgusSamples::App::App()']]], + ['app_2ecpp',['App.cpp',['../App_8cpp.html',1,'']]], + ['app_2eh',['App.h',['../App_8h.html',1,'']]], + ['appinitializedtime',['appInitializedTime',['../classArgusSamples_1_1PerfTracker.html#a8d933b2c8d880baef9b10780d1e1211a',1,'ArgusSamples::PerfTracker']]], + ['appmodulecapture',['AppModuleCapture',['../classArgusSamples_1_1AppModuleCapture.html#aedc6dd5dda6060718fe5fab2bb427a26',1,'ArgusSamples::AppModuleCapture']]], + ['appmodulecapture',['AppModuleCapture',['../classArgusSamples_1_1AppModuleCapture.html',1,'ArgusSamples']]], + ['appmodulecapture_2ecpp',['AppModuleCapture.cpp',['../AppModuleCapture_8cpp.html',1,'']]], + ['appmodulecapture_2eh',['AppModuleCapture.h',['../AppModuleCapture_8h.html',1,'']]], + ['appmodulegallery',['AppModuleGallery',['../classArgusSamples_1_1AppModuleGallery.html',1,'ArgusSamples']]], + ['appmodulegallery',['AppModuleGallery',['../classArgusSamples_1_1AppModuleGallery.html#a9d859e715ab7965016b497de90500bbf',1,'ArgusSamples::AppModuleGallery']]], + ['appmodulegallery_2ecpp',['AppModuleGallery.cpp',['../AppModuleGallery_8cpp.html',1,'']]], + ['appmodulegallery_2eh',['AppModuleGallery.h',['../AppModuleGallery_8h.html',1,'']]], + ['appmodulegeneric',['AppModuleGeneric',['../classArgusSamples_1_1AppModuleGeneric.html',1,'ArgusSamples']]], + ['appmodulegeneric',['AppModuleGeneric',['../classArgusSamples_1_1AppModuleGeneric.html#af75b9ddca895b116a5afeaf20e9bcd07',1,'ArgusSamples::AppModuleGeneric']]], + ['appmodulegeneric_2ecpp',['AppModuleGeneric.cpp',['../AppModuleGeneric_8cpp.html',1,'']]], + ['appmodulegeneric_2eh',['AppModuleGeneric.h',['../AppModuleGeneric_8h.html',1,'']]], + ['appmodulemultiexposure',['AppModuleMultiExposure',['../classArgusSamples_1_1AppModuleMultiExposure.html#af21e8bc3c39468c612f583cc417d0b02',1,'ArgusSamples::AppModuleMultiExposure']]], + ['appmodulemultiexposure',['AppModuleMultiExposure',['../classArgusSamples_1_1AppModuleMultiExposure.html',1,'ArgusSamples']]], + ['appmodulemultiexposure_2ecpp',['AppModuleMultiExposure.cpp',['../AppModuleMultiExposure_8cpp.html',1,'']]], + ['appmodulemultiexposure_2eh',['AppModuleMultiExposure.h',['../AppModuleMultiExposure_8h.html',1,'']]], + ['appmodulemultisession',['AppModuleMultiSession',['../classArgusSamples_1_1AppModuleMultiSession.html',1,'ArgusSamples']]], + ['appmodulemultisession',['AppModuleMultiSession',['../classArgusSamples_1_1AppModuleMultiSession.html#a44c4419ba4c5f2d367e7ab3a1a91b1e3',1,'ArgusSamples::AppModuleMultiSession']]], + ['appmodulemultisession_2ecpp',['AppModuleMultiSession.cpp',['../AppModuleMultiSession_8cpp.html',1,'']]], + ['appmodulemultisession_2eh',['AppModuleMultiSession.h',['../AppModuleMultiSession_8h.html',1,'']]], + ['appmodulevideo',['AppModuleVideo',['../classArgusSamples_1_1AppModuleVideo.html',1,'ArgusSamples']]], + ['appmodulevideo',['AppModuleVideo',['../classArgusSamples_1_1AppModuleVideo.html#a9d8e033c72885de5145ff5cc8b5e9dd5',1,'ArgusSamples::AppModuleVideo']]], + ['appmodulevideo_2ecpp',['AppModuleVideo.cpp',['../AppModuleVideo_8cpp.html',1,'']]], + ['appmodulevideo_2eh',['AppModuleVideo.h',['../AppModuleVideo_8h.html',1,'']]], + ['appstarttime',['appStartTime',['../classArgusSamples_1_1PerfTracker.html#a9399526161b05c4fa2adee877d281c98',1,'ArgusSamples::PerfTracker']]], + ['argus',['Argus',['../namespaceArgus.html',1,'']]], + ['argussamples',['ArgusSamples',['../namespaceArgusSamples.html',1,'']]], + ['autocontrolsettingsobserver',['AutoControlSettingsObserver',['../classArgusSamples_1_1AutoControlSettingsObserver.html#a6bae4169d71e3d9a488db5c275c3041b',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['autocontrolsettingsobserver',['AutoControlSettingsObserver',['../classArgusSamples_1_1AutoControlSettingsObserver.html',1,'ArgusSamples']]], + ['ext',['Ext',['../namespaceArgus_1_1Ext.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_62.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_62.html new file mode 100644 index 0000000..ee8871c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_62.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_62.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_62.js new file mode 100644 index 0000000..530d0e1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_62.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['bindstream',['bindStream',['../classArgusSamples_1_1Composer.html#ae1ac6b8500980c96a41ba3e82238f8a7',1,'ArgusSamples::Composer']]], + ['broadcast',['broadcast',['../classArgusSamples_1_1ConditionVariable.html#aad90db4443b209bc2eadad939cb63cb6',1,'ArgusSamples::ConditionVariable']]], + ['builditemlist',['buildItemList',['../classArgusSamples_1_1GalleryThread.html#a1f2d02f0ee0f8626d5c31bfa20818d11',1,'ArgusSamples::GalleryThread']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_63.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_63.html new file mode 100644 index 0000000..56b5ad1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_63.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_63.js new file mode 100644 index 0000000..d74543a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_63.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['cameraapp',['CameraApp',['../classArgusSamples_1_1CameraApp.html',1,'ArgusSamples']]], + ['cameraapp',['CameraApp',['../classArgusSamples_1_1CameraApp.html#afcb48d1278e008166b2f98d97a8e3b11',1,'ArgusSamples::CameraApp::CameraApp(const char *appName)'],['../classArgusSamples_1_1CameraApp.html#a215820fc1fe69237bcbcbe2a4ae8144a',1,'ArgusSamples::CameraApp::CameraApp()']]], + ['cancel',['cancel',['../classArgusSamples_1_1ScopedGuard.html#a7fd04f423f475e7c2a15663f6cae9dc5',1,'ArgusSamples::ScopedGuard::cancel()'],['../classArgusSamples_1_1GstUnrefer.html#ae8af68c70ed2bc33e0d197640d448a72',1,'ArgusSamples::GstUnrefer::cancel()']]], + ['capture',['capture',['../classArgusSamples_1_1Dispatcher.html#aa347666fbb1535e25e41dad372ad08e7',1,'ArgusSamples::Dispatcher::capture()'],['../classArgusSamples_1_1AppModuleCapture.html#afe7c7e9b8448ed10aef3d9b148d30489',1,'ArgusSamples::AppModuleCapture::capture()']]], + ['closesession',['closeSession',['../classArgusSamples_1_1Dispatcher.html#a9b07cf8d67afb5a703adfaaa6244e8af',1,'ArgusSamples::Dispatcher']]], + ['command',['Command',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6',1,'ArgusSamples::GalleryThread']]], + ['command_5fnext',['COMMAND_NEXT',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6ac5d87e502d5661c8941d3ad5b612dbf5',1,'ArgusSamples::GalleryThread']]], + ['command_5fnone',['COMMAND_NONE',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6a8cd730e5dda947265d73df22832f478a',1,'ArgusSamples::GalleryThread']]], + ['command_5fprev',['COMMAND_PREV',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6adfac9d6d088e6981c4e18365a2bedfb1',1,'ArgusSamples::GalleryThread']]], + ['command_5frewind',['COMMAND_REWIND',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6a57e5295da08593484efa482b9cf23af7',1,'ArgusSamples::GalleryThread']]], + ['command_5fshutdown',['COMMAND_SHUTDOWN',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6af920fb85b1923f6d1cd4f9350d13a2c2',1,'ArgusSamples::GalleryThread']]], + ['command_5fstart',['COMMAND_START',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6afeabc75dbedd6548b00e44c4d4d722d2',1,'ArgusSamples::GalleryThread']]], + ['command_5fstop',['COMMAND_STOP',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6a40da628d98c65e823e2c803f59b0b4c6',1,'ArgusSamples::GalleryThread']]], + ['command_5ftoggle_5fplay_5fback',['COMMAND_TOGGLE_PLAY_BACK',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6a81d5afcf19db9714f2d2ece908f75760',1,'ArgusSamples::GalleryThread']]], + ['composer',['Composer',['../classArgusSamples_1_1Composer.html',1,'ArgusSamples']]], + ['composer',['Composer',['../classArgusSamples_1_1Composer.html#a02fce0645f38f0918ebd0691e783f7f0',1,'ArgusSamples::Composer::Composer()'],['../classArgusSamples_1_1Composer.html#aee3d5f466fb74106baa4c8e2eb8378d4',1,'ArgusSamples::Composer::Composer(const Composer &)']]], + ['composer_2ecpp',['Composer.cpp',['../Composer_8cpp.html',1,'']]], + ['composer_2eh',['Composer.h',['../Composer_8h.html',1,'']]], + ['conditionvariable',['ConditionVariable',['../classArgusSamples_1_1Mutex.html#ab270e49e575fdf0fe1a4f2ee911df116',1,'ArgusSamples::Mutex::ConditionVariable()'],['../classArgusSamples_1_1ConditionVariable.html#a0aeddda770be0f9a981749de2f5fa075',1,'ArgusSamples::ConditionVariable::ConditionVariable()'],['../classArgusSamples_1_1ConditionVariable.html#aca7e0cde87dae7a727ae544b316d6117',1,'ArgusSamples::ConditionVariable::ConditionVariable(ConditionVariable &other)']]], + ['conditionvariable',['ConditionVariable',['../classArgusSamples_1_1ConditionVariable.html',1,'ArgusSamples']]], + ['conditionvariable_2ecpp',['ConditionVariable.cpp',['../ConditionVariable_8cpp.html',1,'']]], + ['conditionvariable_2eh',['ConditionVariable.h',['../ConditionVariable_8h.html',1,'']]], + ['create_5fgui_5felement',['CREATE_GUI_ELEMENT',['../AppModuleGeneric_8cpp.html#a3f96fbbdc5c40043550facbec7ff433c',1,'CREATE_GUI_ELEMENT(): AppModuleGeneric.cpp'],['../AppModuleMultiExposure_8cpp.html#a3f96fbbdc5c40043550facbec7ff433c',1,'CREATE_GUI_ELEMENT(): AppModuleMultiExposure.cpp'],['../AppModuleVideo_8cpp.html#a3f96fbbdc5c40043550facbec7ff433c',1,'CREATE_GUI_ELEMENT(): AppModuleVideo.cpp']]], + ['create_5fgui_5felement_5fcombo_5fbox',['CREATE_GUI_ELEMENT_COMBO_BOX',['../AppModuleCapture_8cpp.html#af03c1a79306988f5506786978ef0c2b2',1,'CREATE_GUI_ELEMENT_COMBO_BOX(): AppModuleCapture.cpp'],['../AppModuleGeneric_8cpp.html#af03c1a79306988f5506786978ef0c2b2',1,'CREATE_GUI_ELEMENT_COMBO_BOX(): AppModuleGeneric.cpp'],['../AppModuleVideo_8cpp.html#af03c1a79306988f5506786978ef0c2b2',1,'CREATE_GUI_ELEMENT_COMBO_BOX(): AppModuleVideo.cpp']]], + ['create_5fgui_5felement_5fpath_5fchooser',['CREATE_GUI_ELEMENT_PATH_CHOOSER',['../AppModuleGeneric_8cpp.html#a2d5dd2ef45ca53dd6aa2109d7bc11fe5',1,'AppModuleGeneric.cpp']]], + ['createeventqueue',['createEventQueue',['../classArgusSamples_1_1Dispatcher.html#abb5aa94a3d2b3b97cd0e7ff1af01956c',1,'ArgusSamples::Dispatcher']]], + ['createoutputstream',['createOutputStream',['../classArgusSamples_1_1Dispatcher.html#afb6e811e4f2803a3a7a03801273884e3',1,'ArgusSamples::Dispatcher']]], + ['createrequest',['createRequest',['../classArgusSamples_1_1Dispatcher.html#a5230bb19a7696753cceb7f26489637e9',1,'ArgusSamples::Dispatcher']]], + ['createsession',['createSession',['../classArgusSamples_1_1Dispatcher.html#ad0460b6111a8aada3963ab717624ca77',1,'ArgusSamples::Dispatcher::createSession(TrackedUniqueObj< Argus::CaptureSession > &session, uint32_t deviceIndex)'],['../classArgusSamples_1_1Dispatcher.html#ae52e4a7d4af5917400bb5761fb7816ea',1,'ArgusSamples::Dispatcher::createSession()']]], + ['cyclespersectype',['CyclesPerSecType',['../classArgusSamples_1_1TimeValue.html#a242c37ad84166418f0f3c58da5c5a489',1,'ArgusSamples::TimeValue']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_64.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_64.html new file mode 100644 index 0000000..b53ff08 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_64.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_64.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_64.js new file mode 100644 index 0000000..cc8898d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_64.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['default_5fconfig_5ffile',['DEFAULT_CONFIG_FILE',['../AppModuleGeneric_8cpp.html#a33cca38c576ada1ba69225b47cd975a4',1,'AppModuleGeneric.cpp']]], + ['defogsettingsobserver',['DeFogSettingsObserver',['../classArgusSamples_1_1DeFogSettingsObserver.html',1,'ArgusSamples']]], + ['defogsettingsobserver',['DeFogSettingsObserver',['../classArgusSamples_1_1DeFogSettingsObserver.html#a7b968f422a50aa5ff0325c97c54284d5',1,'ArgusSamples::DeFogSettingsObserver']]], + ['denoisesettingsobserver',['DenoiseSettingsObserver',['../classArgusSamples_1_1DenoiseSettingsObserver.html',1,'ArgusSamples']]], + ['denoisesettingsobserver',['DenoiseSettingsObserver',['../classArgusSamples_1_1DenoiseSettingsObserver.html#a529698522c37e0bfaf7c19f7638237ca',1,'ArgusSamples::DenoiseSettingsObserver']]], + ['destroy',['destroy',['../classArgusSamples_1_1VideoPipeline.html#ad320779625f140f9f9d265c3116698c1',1,'ArgusSamples::VideoPipeline']]], + ['disableoutputstream',['disableOutputStream',['../classArgusSamples_1_1Dispatcher.html#a17e198e250297f918e57c19cf8ff9e19',1,'ArgusSamples::Dispatcher']]], + ['dispatcher',['Dispatcher',['../classArgusSamples_1_1Dispatcher.html#a662dc6f191ea694261ccfb2e6a7ceb29',1,'ArgusSamples::Dispatcher::Dispatcher()'],['../classArgusSamples_1_1Dispatcher.html#ac14686e335f62e0cb1336c59dfc11099',1,'ArgusSamples::Dispatcher::Dispatcher(const Dispatcher &)']]], + ['dispatcher',['Dispatcher',['../classArgusSamples_1_1Dispatcher.html',1,'ArgusSamples']]], + ['dispatcher_2ecpp',['Dispatcher.cpp',['../Dispatcher_8cpp.html',1,'']]], + ['dispatcher_2eh',['Dispatcher.h',['../Dispatcher_8h.html',1,'']]], + ['dumpsessioninfo',['dumpSessionInfo',['../classArgusSamples_1_1Dispatcher.html#adb94dac8944d6b4943e112443a75012a',1,'ArgusSamples::Dispatcher']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_65.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_65.html new file mode 100644 index 0000000..66cc834 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_65.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_65.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_65.js new file mode 100644 index 0000000..47cabd4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_65.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['edgeenhancesettingsobserver',['EdgeEnhanceSettingsObserver',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html',1,'ArgusSamples']]], + ['edgeenhancesettingsobserver',['EdgeEnhanceSettingsObserver',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a1bf7bfd943dcadf645c1f31678e22d76',1,'ArgusSamples::EdgeEnhanceSettingsObserver']]], + ['enableoutputstream',['enableOutputStream',['../classArgusSamples_1_1Dispatcher.html#a5a846ad6a463912eea6e37bf3036ef06',1,'ArgusSamples::Dispatcher']]], + ['eventthread',['EventThread',['../classArgusSamples_1_1EventThread.html',1,'ArgusSamples']]], + ['eventthread',['EventThread',['../classArgusSamples_1_1EventThread.html#a5f187ecd9c5a7dbebd010913bd2bffae',1,'ArgusSamples::EventThread']]], + ['eventthread_2ecpp',['EventThread.cpp',['../EventThread_8cpp.html',1,'']]], + ['eventthread_2eh',['EventThread.h',['../EventThread_8h.html',1,'']]], + ['execute',['execute',['../classArgusSamples_1_1GalleryThread.html#ac3be9cd60626ec1e8bc60d365313d1b9',1,'ArgusSamples::GalleryThread::execute()'],['../classArgusSamples_1_1TaskStillCapture.html#af270c36097f09f8728c106047700c40c',1,'ArgusSamples::TaskStillCapture::execute()']]], + ['expectlocked',['expectLocked',['../classArgusSamples_1_1ScopedMutex.html#a0d6f7d7a8e4e691ff4aea3a776e6f41a',1,'ArgusSamples::ScopedMutex']]], + ['explevel',['ExpLevel',['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html',1,'ArgusSamples::TaskMultiExposure']]], + ['explevel',['ExpLevel',['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#ac3601088e86016135f9129dbda8d9de6',1,'ArgusSamples::TaskMultiExposure::ExpLevel']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_66.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_66.html new file mode 100644 index 0000000..3d1f8b3 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_66.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_66.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_66.js new file mode 100644 index 0000000..5c53ec7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_66.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['fromcycelspersec',['fromCycelsPerSec',['../classArgusSamples_1_1TimeValue.html#aa166c2d772180d07e8a6c35b54f6a442',1,'ArgusSamples::TimeValue']]], + ['frommsec',['fromMSec',['../classArgusSamples_1_1TimeValue.html#a770f7c7e8357bef3b35294178ed91a86',1,'ArgusSamples::TimeValue']]], + ['fromnsec',['fromNSec',['../classArgusSamples_1_1TimeValue.html#ae747d20f2ff0a1e4ccc027b862d34c10',1,'ArgusSamples::TimeValue']]], + ['fromsec',['fromSec',['../classArgusSamples_1_1TimeValue.html#a39a72ad9408ccdf22097b9357fc879af',1,'ArgusSamples::TimeValue::fromSec(float sec)'],['../classArgusSamples_1_1TimeValue.html#ac12a7b5ad3c90da50d5fb4a3eb7ca1e7',1,'ArgusSamples::TimeValue::fromSec(SecType sec)']]], + ['fromusec',['fromUSec',['../classArgusSamples_1_1TimeValue.html#a974f2f7130e7b4d921abcb46df66c3f2',1,'ArgusSamples::TimeValue']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_67.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_67.html new file mode 100644 index 0000000..41a459a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_67.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_67.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_67.js new file mode 100644 index 0000000..de7cdff --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_67.js @@ -0,0 +1,46 @@ +var searchData= +[ + ['gallery_2ecpp',['Gallery.cpp',['../Gallery_8cpp.html',1,'']]], + ['gallery_2eh',['Gallery.h',['../Gallery_8h.html',1,'']]], + ['galleryitem',['GalleryItem',['../classArgusSamples_1_1GalleryItem.html#ab1ae78ddbdd4ff2378aadb257c3905f6',1,'ArgusSamples::GalleryItem::GalleryItem(const char *fileName, time_t modTime)'],['../classArgusSamples_1_1GalleryItem.html#ae1452d1184491c7ab8bd770e6e905bcb',1,'ArgusSamples::GalleryItem::GalleryItem()']]], + ['galleryitem',['GalleryItem',['../classArgusSamples_1_1GalleryItem.html',1,'ArgusSamples']]], + ['galleryitemimage',['GalleryItemImage',['../classArgusSamples_1_1GalleryItemImage.html',1,'ArgusSamples']]], + ['galleryitemimage',['GalleryItemImage',['../classArgusSamples_1_1GalleryItemImage.html#a5c00165c0add390ba455bfc48dc21068',1,'ArgusSamples::GalleryItemImage']]], + ['galleryitemlist',['GalleryItemList',['../classArgusSamples_1_1GalleryThread.html#af0542d7c8db94e3f7f9404ecdf160bad',1,'ArgusSamples::GalleryThread']]], + ['galleryitemvideo',['GalleryItemVideo',['../classArgusSamples_1_1GalleryItemVideo.html#ade37284d0655d9ddfe733bb72d4f724f',1,'ArgusSamples::GalleryItemVideo']]], + ['galleryitemvideo',['GalleryItemVideo',['../classArgusSamples_1_1GalleryItemVideo.html',1,'ArgusSamples']]], + ['gallerythread',['GalleryThread',['../classArgusSamples_1_1GalleryThread.html',1,'ArgusSamples']]], + ['gallerythread',['GalleryThread',['../classArgusSamples_1_1GalleryThread.html#a26d24564ff889340fe8990a864f59477',1,'ArgusSamples::GalleryThread']]], + ['get',['get',['../classArgusSamples_1_1GstUnrefer.html#a2eef3eb9fc6cfb71c57788cea4d4178d',1,'ArgusSamples::GstUnrefer::get()'],['../classArgusSamples_1_1TrackedUniqueObj.html#aa1bd2ace6028d9e18416cdc3f9d226d7',1,'ArgusSamples::TrackedUniqueObj::get()']]], + ['getaspectratio',['getAspectRatio',['../classArgusSamples_1_1VideoPipeline.html#afd8697188b988e814b98dc634453a654',1,'ArgusSamples::VideoPipeline']]], + ['getcurrenttime',['getCurrentTime',['../namespaceArgusSamples.html#aabd2eb9c698c8f52b1ec2fa287e0908d',1,'ArgusSamples']]], + ['getdata',['getData',['../classArgusSamples_1_1GalleryItemImage.html#aefcafe95f70b7a0d58a3f33a05be7381',1,'ArgusSamples::GalleryItemImage']]], + ['getdeviceaperturemotorspeedrange',['getDeviceApertureMotorSpeedRange',['../classArgusSamples_1_1Dispatcher.html#a4a2bbce98a470cae10fd46195e749284',1,'ArgusSamples::Dispatcher']]], + ['getdeviceaperturepositionrange',['getDeviceAperturePositionRange',['../classArgusSamples_1_1Dispatcher.html#a2b093a05797e23a0dfe6be68471db2f5',1,'ArgusSamples::Dispatcher']]], + ['getdevicecount',['getDeviceCount',['../classArgusSamples_1_1Dispatcher.html#afb00309553d55ef37c1e2f2245c777f4',1,'ArgusSamples::Dispatcher']]], + ['getdevicefocuspositionrange',['getDeviceFocusPositionRange',['../classArgusSamples_1_1Dispatcher.html#abfeb9bf507628bcc70c3b685fe76c311',1,'ArgusSamples::Dispatcher']]], + ['getegldisplay',['getEGLDisplay',['../classArgusSamples_1_1Composer.html#adcf36f916f350b3bc301f54f55106c97',1,'ArgusSamples::Composer']]], + ['geteglstream',['getEGLStream',['../classArgusSamples_1_1GalleryItemVideo.html#a6f96989bf7ee3efb307f51bdd34a0fde',1,'ArgusSamples::GalleryItemVideo']]], + ['getfileextension',['getFileExtension',['../classArgusSamples_1_1VideoPipeline.html#a6bd711d871b1f3d3a63b532c77d714da',1,'ArgusSamples::VideoPipeline']]], + ['getfilename',['getFileName',['../classArgusSamples_1_1GalleryItem.html#a1257150c9eaf6aba937a0cdc3d65147f',1,'ArgusSamples::GalleryItem']]], + ['getheight',['getHeight',['../classArgusSamples_1_1GalleryItemImage.html#a5e5ce4987cd3a3f9ca530bb17963b9c8',1,'ArgusSamples::GalleryItemImage']]], + ['getinfo',['getInfo',['../classArgusSamples_1_1Dispatcher.html#a336bef8e2a26de1e0f5d1ea85cb599f6',1,'ArgusSamples::Dispatcher']]], + ['getinstance',['getInstance',['../classArgusSamples_1_1Dispatcher.html#a27c03ac9165a07afd38f5bdc27ac275e',1,'ArgusSamples::Dispatcher::getInstance()'],['../classArgusSamples_1_1PerfTracker.html#af2a0116401e186ddc69c31bb35cef9b6',1,'ArgusSamples::PerfTracker::getInstance()'],['../classArgusSamples_1_1Composer.html#ab5414e37a967badf08f0046cf2f26d17',1,'ArgusSamples::Composer::getInstance()']]], + ['getnewsessionid',['getNewSessionID',['../classArgusSamples_1_1PerfTracker.html#a7c1289cefda89cced98d7e8f93ee0ffe',1,'ArgusSamples::PerfTracker']]], + ['getoutputsize',['getOutputSize',['../classArgusSamples_1_1Dispatcher.html#acf3c377c9e25ba7d2bf03b463b24e572',1,'ArgusSamples::Dispatcher']]], + ['getoutputstream',['getOutputStream',['../classArgusSamples_1_1GalleryThread.html#a7cba48026b0b5bf7c289c9ced777b7c9',1,'ArgusSamples::GalleryThread']]], + ['getpthreadmutex',['getPThreadMutex',['../classArgusSamples_1_1Mutex.html#a454e4397e737c4ee8e1bed8c43e24e10',1,'ArgusSamples::Mutex']]], + ['getsensormode',['getSensorMode',['../classArgusSamples_1_1Dispatcher.html#a4743dad610a1a11955df10f2bb816e7f',1,'ArgusSamples::Dispatcher']]], + ['getstreamaspectratio',['getStreamAspectRatio',['../classArgusSamples_1_1StreamConsumer.html#ae93d5a2f0e1ecaa4e7fd4ab29c7bbc7d',1,'ArgusSamples::StreamConsumer']]], + ['getstreamstate',['getStreamState',['../classArgusSamples_1_1StreamConsumer.html#a3933de802ee5caa7e1054ff7a570cab0',1,'ArgusSamples::StreamConsumer']]], + ['getstreamtextureid',['getStreamTextureID',['../classArgusSamples_1_1StreamConsumer.html#ac618fbb6ec2fd0cb953725eaed9f5068',1,'ArgusSamples::StreamConsumer']]], + ['gettype',['getType',['../classArgusSamples_1_1GalleryItem.html#a13c2129c83685b4906b7ac833698b78a',1,'ArgusSamples::GalleryItem::getType()'],['../classArgusSamples_1_1GalleryItemImage.html#acb1e5fc3e059cc8576af3783a5989a8b',1,'ArgusSamples::GalleryItemImage::getType()'],['../classArgusSamples_1_1GalleryItemVideo.html#a92484bcee6f5b81c1b51b3fd7f1dee90',1,'ArgusSamples::GalleryItemVideo::getType()']]], + ['getwidth',['getWidth',['../classArgusSamples_1_1GalleryItemImage.html#a3cce8d4f3e91bc05b2e0653907c04740',1,'ArgusSamples::GalleryItemImage']]], + ['gl_5fglext_5fprototypes',['GL_GLEXT_PROTOTYPES',['../Gallery_8cpp.html#a120fb070bddb21f0bd899f50252c4cb5',1,'GL_GLEXT_PROTOTYPES(): Gallery.cpp'],['../Composer_8cpp.html#a120fb070bddb21f0bd899f50252c4cb5',1,'GL_GLEXT_PROTOTYPES(): Composer.cpp'],['../StreamConsumer_8cpp.html#a120fb070bddb21f0bd899f50252c4cb5',1,'GL_GLEXT_PROTOTYPES(): StreamConsumer.cpp']]], + ['global_5fevent_5fapp_5finitialized',['GLOBAL_EVENT_APP_INITIALIZED',['../namespaceArgusSamples.html#ab27a7f01bc9a65a0022709c05c8f29b4aa7e7f304d2c8a63762ec9d63caad5e4a',1,'ArgusSamples']]], + ['global_5fevent_5fapp_5fstart',['GLOBAL_EVENT_APP_START',['../namespaceArgusSamples.html#ab27a7f01bc9a65a0022709c05c8f29b4a8939e24ab7f734bf020e9e594a302447',1,'ArgusSamples']]], + ['global_5fevent_5fdisplay',['GLOBAL_EVENT_DISPLAY',['../namespaceArgusSamples.html#ab27a7f01bc9a65a0022709c05c8f29b4aa17e110896996ce9d855a78297f70029',1,'ArgusSamples']]], + ['globalevent',['GlobalEvent',['../namespaceArgusSamples.html#ab27a7f01bc9a65a0022709c05c8f29b4',1,'ArgusSamples']]], + ['gstunrefer',['GstUnrefer',['../classArgusSamples_1_1GstUnrefer.html#a7072ba6bfe7cf2ce3efde28082e409c6',1,'ArgusSamples::GstUnrefer::GstUnrefer(T *p)'],['../classArgusSamples_1_1GstUnrefer.html#a5d2e795daba5a6d1d12ad2ee1461605b',1,'ArgusSamples::GstUnrefer::GstUnrefer()'],['../classArgusSamples_1_1GstUnrefer.html#a0d521b0e8e4a4896f5dfcedec0bf8034',1,'ArgusSamples::GstUnrefer::GstUnrefer(GstUnrefer &other)']]], + ['gstunrefer',['GstUnrefer',['../classArgusSamples_1_1GstUnrefer.html',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_69.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_69.html new file mode 100644 index 0000000..1a00b55 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_69.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_69.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_69.js new file mode 100644 index 0000000..0a5a594 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_69.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['iappmodule',['IAppModule',['../classArgusSamples_1_1IAppModule.html',1,'ArgusSamples']]], + ['iappmodule',['IAppModule',['../classArgusSamples_1_1IAppModule.html#a0c18a8a792e1da3ea6f9a8b7592d2a7a',1,'ArgusSamples::IAppModule']]], + ['iappmodule_2eh',['IAppModule.h',['../IAppModule_8h.html',1,'']]], + ['infinite',['infinite',['../classArgusSamples_1_1TimeValue.html#a219468b789b81e21580e641ada39e800',1,'ArgusSamples::TimeValue']]], + ['info',['info',['../classArgusSamples_1_1AppModuleGeneric.html#a3e29a9691571ae9ff7476b9ecfbe180b',1,'ArgusSamples::AppModuleGeneric']]], + ['initialize',['initialize',['../classArgusSamples_1_1ConditionVariable.html#a5f896a8d46016ebd9b0ea22af70006a2',1,'ArgusSamples::ConditionVariable::initialize()'],['../classArgusSamples_1_1Mutex.html#ab8d8b96aa573b87267a33926f995b54e',1,'ArgusSamples::Mutex::initialize()'],['../classArgusSamples_1_1Dispatcher.html#a96489be07c841a020c8298e869aea26f',1,'ArgusSamples::Dispatcher::initialize()'],['../classArgusSamples_1_1ITask.html#a667493a1aae5fcd54cde4c447e43d4f5',1,'ArgusSamples::ITask::initialize()'],['../classArgusSamples_1_1PerfTracker.html#a65422ffb2aecec8aef0cbf5b16352363',1,'ArgusSamples::PerfTracker::initialize()'],['../classArgusSamples_1_1GalleryItem.html#a571062797f738175e71cff9b76d0974d',1,'ArgusSamples::GalleryItem::initialize()'],['../classArgusSamples_1_1GalleryItemImage.html#a6787bec0a6c9d5a58340b4cf1780df20',1,'ArgusSamples::GalleryItemImage::initialize()'],['../classArgusSamples_1_1GalleryItemVideo.html#a8e249ec7030e8092658248e4683ea5c5',1,'ArgusSamples::GalleryItemVideo::initialize()'],['../classArgusSamples_1_1GalleryThread.html#a1186576444659a43c92b50fca0d79b5e',1,'ArgusSamples::GalleryThread::initialize()'],['../classArgusSamples_1_1TaskGallery.html#a429be15094915506dc792e119a9ef2a8',1,'ArgusSamples::TaskGallery::initialize()'],['../classArgusSamples_1_1TaskMultiExposure.html#aaf5d9c41f374d63864658ed91994ff5a',1,'ArgusSamples::TaskMultiExposure::initialize()'],['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#ae666afa543c453341ceaeeeb6eac4260',1,'ArgusSamples::TaskMultiExposure::ExpLevel::initialize()'],['../classArgusSamples_1_1TaskMultiSession.html#ac4a5c60483701597e3993de571eeb8f3',1,'ArgusSamples::TaskMultiSession::initialize()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#aeedeeeac75287de1f2dcaa5602965d1a',1,'ArgusSamples::TaskMultiSession::Session::initialize()'],['../classArgusSamples_1_1TaskStillCapture.html#ade81b0f85ee819d5f3e0581c7b5b64d9',1,'ArgusSamples::TaskStillCapture::initialize()'],['../classArgusSamples_1_1TaskVideoRecord.html#a721db3422a0f4a257c2fb9edf6cdfa08',1,'ArgusSamples::TaskVideoRecord::initialize()'],['../classArgusSamples_1_1Composer.html#a7a9d1d85d583c069251b962dd185539b',1,'ArgusSamples::Composer::initialize()'],['../classArgusSamples_1_1StreamConsumer.html#aab6b96e7569bfadff2f2641aa163dca4',1,'ArgusSamples::StreamConsumer::initialize()'],['../classArgusSamples_1_1CameraApp.html#a2a241abb2f5dae8e4b36df963412054a',1,'ArgusSamples::CameraApp::initialize()'],['../classArgusSamples_1_1AppModuleCapture.html#a72759a9523f523a5492b21bcb2e9d5ec',1,'ArgusSamples::AppModuleCapture::initialize()'],['../classArgusSamples_1_1App.html#a30110fcd3c585e5ed7fea8548bb55b3f',1,'ArgusSamples::App::initialize()'],['../classArgusSamples_1_1AppModuleGeneric.html#a1686ebc3219c3a0870003714b571d0b5',1,'ArgusSamples::AppModuleGeneric::initialize()'],['../classArgusSamples_1_1IAppModule.html#ad30cfdacb8ef6de9a89055a54035f183',1,'ArgusSamples::IAppModule::initialize()'],['../classArgusSamples_1_1AppModuleGallery.html#a298558396682f8eab6d15275d59884fc',1,'ArgusSamples::AppModuleGallery::initialize()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#acba80f2522a340c0bab01b25ee93bcbd',1,'ArgusSamples::AppModuleMultiExposure::initialize()'],['../classArgusSamples_1_1AppModuleMultiSession.html#a6e52012a8e1422e82a656b545d59db9b',1,'ArgusSamples::AppModuleMultiSession::initialize()'],['../classArgusSamples_1_1AppModuleVideo.html#a05eb1f40836d5d9886fdbc08dd0bcfc7',1,'ArgusSamples::AppModuleVideo::initialize()']]], + ['iobserverforinterface',['IObserverForInterface',['../classArgusSamples_1_1IObserverForInterface.html',1,'ArgusSamples']]], + ['iseglstream',['isEGLStream',['../classArgusSamples_1_1StreamConsumer.html#aaa78fdc9618d0baf29aa710ea0e512c5',1,'ArgusSamples::StreamConsumer']]], + ['isinterface',['isInterface',['../classArgusSamples_1_1IObserverForInterface.html#af3995c20e07afeaa717a1511ac217305',1,'ArgusSamples::IObserverForInterface::isInterface()'],['../classArgusSamples_1_1DenoiseSettingsObserver.html#aedc546b86ce9a922ebab962ae5b3accc',1,'ArgusSamples::DenoiseSettingsObserver::isInterface()'],['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a3d37cc771f11cb0e4a2d38fcac7083d9',1,'ArgusSamples::EdgeEnhanceSettingsObserver::isInterface()'],['../classArgusSamples_1_1SourceSettingsObserver.html#a0a640d6d498f7d3ef37731caa8524404',1,'ArgusSamples::SourceSettingsObserver::isInterface()'],['../classArgusSamples_1_1AutoControlSettingsObserver.html#a621be80058fa09c5e5c68be736b94c10',1,'ArgusSamples::AutoControlSettingsObserver::isInterface()'],['../classArgusSamples_1_1DeFogSettingsObserver.html#a319b81d2943beb1a980f694745daaa8f',1,'ArgusSamples::DeFogSettingsObserver::isInterface()']]], + ['issupported',['isSupported',['../classArgusSamples_1_1VideoPipeline.html#a22f6c2b824d2568a1e419983b8f3833e',1,'ArgusSamples::VideoPipeline']]], + ['itask',['ITask',['../classArgusSamples_1_1ITask.html#a6073cd9834619b5265eb81aac0fc0a90',1,'ArgusSamples::ITask']]], + ['itask',['ITask',['../classArgusSamples_1_1ITask.html',1,'ArgusSamples']]], + ['itask_2eh',['ITask.h',['../ITask_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6c.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6c.html new file mode 100644 index 0000000..f6383cc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6c.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6c.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6c.js new file mode 100644 index 0000000..d7c0467 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['leavescope',['leaveScope',['../classArgusSamples_1_1ScopedGuard.html#a48fd268e3d0d7049f96d7d74515c36aa',1,'ArgusSamples::ScopedGuard']]], + ['loadconfig',['loadConfig',['../classArgusSamples_1_1AppModuleGeneric.html#aae35970d9152926e8831b27b820206e9',1,'ArgusSamples::AppModuleGeneric::loadConfig()'],['../namespaceArgusSamples.html#a41db422469cba993afc3e96da42f9519',1,'ArgusSamples::loadConfig()']]], + ['lock',['lock',['../classArgusSamples_1_1Mutex.html#aadad032498bfaf91e4c528418247f201',1,'ArgusSamples::Mutex']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6d.html new file mode 100644 index 0000000..2e27d4d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6d.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6d.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6d.js new file mode 100644 index 0000000..f277638 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6d.js @@ -0,0 +1,197 @@ +var searchData= +[ + ['m_5facregionhorizontal',['m_acRegionHorizontal',['../classArgusSamples_1_1Dispatcher.html#a81c1d90f8cfc8e80a7778b935915c2e1',1,'ArgusSamples::Dispatcher']]], + ['m_5facregionvertical',['m_acRegionVertical',['../classArgusSamples_1_1Dispatcher.html#a66f6f7b86a8ae1d1a89a3fdf01ff6d32',1,'ArgusSamples::Dispatcher']]], + ['m_5faction',['m_action',['../classArgusSamples_1_1ScopedGuard.html#a465bea49dbcbc6bfb490e38c508e4f16',1,'ArgusSamples::ScopedGuard']]], + ['m_5factive',['m_active',['../classArgusSamples_1_1Composer_1_1Stream.html#a284925368d3aead389e98ec9a6aebfce',1,'ArgusSamples::Composer::Stream']]], + ['m_5factivemodulebeforegallery',['m_activeModuleBeforeGallery',['../classArgusSamples_1_1CameraApp.html#a0e7cc0d073cdf129f7098e8d155371da',1,'ArgusSamples::CameraApp']]], + ['m_5factivesessions',['m_activeSessions',['../classArgusSamples_1_1Dispatcher.html#a7b7e52f39861a5adc1865a1f488c08d9',1,'ArgusSamples::Dispatcher']]], + ['m_5faeantibandingmode',['m_aeAntibandingMode',['../classArgusSamples_1_1Dispatcher.html#a9463e69aef8b0916d25a7c763d91e09c',1,'ArgusSamples::Dispatcher']]], + ['m_5faelock',['m_aeLock',['../classArgusSamples_1_1Dispatcher.html#ada1027fdb2c86ef4eb1ec4eecd18fe38',1,'ArgusSamples::Dispatcher']]], + ['m_5faperturefnum',['m_apertureFnum',['../classArgusSamples_1_1Dispatcher.html#abb90f565e0ed7246ab8406b2afd0f7c2',1,'ArgusSamples::Dispatcher']]], + ['m_5faperturemotorspeed',['m_apertureMotorSpeed',['../classArgusSamples_1_1Dispatcher.html#ae0ee8ca0931ad1afd73da58b6cdedd2b',1,'ArgusSamples::Dispatcher']]], + ['m_5fapertureposition',['m_aperturePosition',['../classArgusSamples_1_1Dispatcher.html#a1ae16f74647d27f9b6195b863b7f82d7',1,'ArgusSamples::Dispatcher']]], + ['m_5fappinitializedtime',['m_appInitializedTime',['../classArgusSamples_1_1PerfTracker.html#abf73bc3693d53ccb08461aa422996d63',1,'ArgusSamples::PerfTracker']]], + ['m_5fappstarttime',['m_appStartTime',['../classArgusSamples_1_1PerfTracker.html#a3e95997081f2a3042808367936a86a05',1,'ArgusSamples::PerfTracker']]], + ['m_5faspectratio',['m_aspectRatio',['../classArgusSamples_1_1StreamConsumer.html#acf684d43af62338c668cf3aa149a8120',1,'ArgusSamples::StreamConsumer']]], + ['m_5fawblock',['m_awbLock',['../classArgusSamples_1_1Dispatcher.html#a5a53d18b59f9578e86c56a08f41ea668',1,'ArgusSamples::Dispatcher']]], + ['m_5fawbmode',['m_awbMode',['../classArgusSamples_1_1Dispatcher.html#a8944490c738d0ef15f97ed20b25f0069',1,'ArgusSamples::Dispatcher']]], + ['m_5fcameradevices',['m_cameraDevices',['../classArgusSamples_1_1Dispatcher.html#a902b1c2e88cc03ad79fb717bd237070d',1,'ArgusSamples::Dispatcher']]], + ['m_5fcameraprovider',['m_cameraProvider',['../classArgusSamples_1_1Dispatcher.html#add22db57f3d976201b183d0ec0ea7051',1,'ArgusSamples::Dispatcher']]], + ['m_5fcaptureindex',['m_captureIndex',['../classArgusSamples_1_1TaskStillCapture.html#afb9fe6f6a509b7146579e8e590a593cf',1,'ArgusSamples::TaskStillCapture::m_captureIndex()'],['../classArgusSamples_1_1TaskVideoRecord.html#a2f0d61b80c6330a8485f5b9facab71ce',1,'ArgusSamples::TaskVideoRecord::m_captureIndex()']]], + ['m_5fcapturesession',['m_captureSession',['../classArgusSamples_1_1Dispatcher.html#a5a8172a3a24b5fa79cb5903bd74f78de',1,'ArgusSamples::Dispatcher']]], + ['m_5fcaptureyuvformat',['m_captureYuvFormat',['../classArgusSamples_1_1Dispatcher.html#a88f7550345ac8ac69e1a4d3ff5d6cb18',1,'ArgusSamples::Dispatcher']]], + ['m_5fclosedonetime',['m_closeDoneTime',['../classArgusSamples_1_1SessionPerfTracker.html#a3ddb416207284cfe8405ab5ecfcb5fa8',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fcloserequestedtime',['m_closeRequestedTime',['../classArgusSamples_1_1SessionPerfTracker.html#a44e7783422f4727244aaae8042fc0a26',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fcmdcond',['m_cmdCond',['../classArgusSamples_1_1GalleryThread.html#a08a903fe168325cd49d8edec261371cf',1,'ArgusSamples::GalleryThread']]], + ['m_5fcmdlist',['m_cmdList',['../classArgusSamples_1_1GalleryThread.html#af0fb1655f89e4d514b8c2adea2a5ff86',1,'ArgusSamples::GalleryThread']]], + ['m_5fcmdmutex',['m_cmdMutex',['../classArgusSamples_1_1GalleryThread.html#ae4ee7890b2b4104130fe7ec288841497',1,'ArgusSamples::GalleryThread']]], + ['m_5fcond',['m_cond',['../classArgusSamples_1_1ConditionVariable.html#a358f9a6e2945a34c0f8bf15f2b023583',1,'ArgusSamples::ConditionVariable']]], + ['m_5fconsumer',['m_consumer',['../classArgusSamples_1_1Composer_1_1Stream.html#aa3a1f6f9d41756d663dbe86a3f8d59a0',1,'ArgusSamples::Composer::Stream']]], + ['m_5fcontext',['m_context',['../classArgusSamples_1_1GalleryThread.html#abd98811a1cdd53ff5c84e96676ec25ee',1,'ArgusSamples::GalleryThread::m_context()'],['../classArgusSamples_1_1Composer.html#a8f7392e15158da922d796926911a6eff',1,'ArgusSamples::Composer::m_context()']]], + ['m_5fcopyprogram',['m_copyProgram',['../classArgusSamples_1_1GalleryThread.html#af8b88059ead0dbadc2e236c6501cb308',1,'ArgusSamples::GalleryThread']]], + ['m_5fcountframeperiod',['m_countFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#a29a4fcf0563c4daf8de4b1fab7c9df6d',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fcountlatency',['m_countLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a6bfc95b523af1f22711b143e3e3882c3',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fcuritem',['m_curItem',['../classArgusSamples_1_1GalleryThread.html#a7015998bd94727a2b017807d1051f603',1,'ArgusSamples::GalleryThread']]], + ['m_5fdata',['m_data',['../classArgusSamples_1_1GalleryItemImage.html#a33cfe6cefe80f234bcc23495475e44f1',1,'ArgusSamples::GalleryItemImage']]], + ['m_5fdefogamount',['m_deFogAmount',['../classArgusSamples_1_1Dispatcher.html#a061aeb1c250b374a0f71663cdcd1465d',1,'ArgusSamples::Dispatcher']]], + ['m_5fdefogenable',['m_deFogEnable',['../classArgusSamples_1_1Dispatcher.html#a3ccbe5bc9f09609efdbc64a910fb6a18',1,'ArgusSamples::Dispatcher']]], + ['m_5fdefogquality',['m_deFogQuality',['../classArgusSamples_1_1Dispatcher.html#af83353b9655952d56c22e873b4603767',1,'ArgusSamples::Dispatcher']]], + ['m_5fdenoisemode',['m_denoiseMode',['../classArgusSamples_1_1Dispatcher.html#a7d169063dc67800a0efeedb78d0636f0',1,'ArgusSamples::Dispatcher']]], + ['m_5fdenoisestrength',['m_denoiseStrength',['../classArgusSamples_1_1Dispatcher.html#adefbcf91c816f34132b20378942c84bb',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceaperturefnums',['m_deviceApertureFnums',['../classArgusSamples_1_1Dispatcher.html#a6866eee2f51aa5e8ca5b7e907fdbd484',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceaperturemotorspeedrange',['m_deviceApertureMotorSpeedRange',['../classArgusSamples_1_1Dispatcher.html#ad2b8c89f2f4a9800ca9d0680b0eb4cf8',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceaperturepositionrange',['m_deviceAperturePositionRange',['../classArgusSamples_1_1Dispatcher.html#ab0289b1fb0d428a57633290e5a2320b8',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceexposurecompensationrange',['m_deviceExposureCompensationRange',['../classArgusSamples_1_1Dispatcher.html#a5645e9564525f1466a5080328b6e79cd',1,'ArgusSamples::Dispatcher']]], + ['m_5fdevicefocuspositionrange',['m_deviceFocusPositionRange',['../classArgusSamples_1_1Dispatcher.html#a0842e825fc277c2c7175f70554ab565c',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceindex',['m_deviceIndex',['../classArgusSamples_1_1Dispatcher.html#af51769c785ccf5bb6b575f354275eadb',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceispdigitalgainrange',['m_deviceIspDigitalGainRange',['../classArgusSamples_1_1Dispatcher.html#a7018cfba2077334b12e1fdbc9fee2b2b',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceopen',['m_deviceOpen',['../classArgusSamples_1_1Dispatcher.html#ae3406ae84f82a8778196cf64502cc033',1,'ArgusSamples::Dispatcher']]], + ['m_5fdisplay',['m_display',['../classArgusSamples_1_1Composer.html#afc0ce9ab1b449b38ee284ab841eb8e63',1,'ArgusSamples::Composer']]], + ['m_5fdisplaycount',['m_displayCount',['../classArgusSamples_1_1PerfTracker.html#a5cb1267e6649f0b7ad9440e8987600d2',1,'ArgusSamples::PerfTracker']]], + ['m_5fedgeenhancemode',['m_edgeEnhanceMode',['../classArgusSamples_1_1Dispatcher.html#ae0bd2ba7e721cebe14810c440aea2f71',1,'ArgusSamples::Dispatcher']]], + ['m_5fedgeenhancestrength',['m_edgeEnhanceStrength',['../classArgusSamples_1_1Dispatcher.html#ab86f867cfcb439ac870580e110aef534',1,'ArgusSamples::Dispatcher']]], + ['m_5feglimageoutputstream',['m_eglImageOutputStream',['../classArgusSamples_1_1GalleryThread.html#a4f679bacf9bddbb8c2ee2b2dca94a594',1,'ArgusSamples::GalleryThread']]], + ['m_5fegloutputsurface',['m_eglOutputSurface',['../classArgusSamples_1_1GalleryThread.html#a51664065b38c61cb5c9ce87ba65ff0c6',1,'ArgusSamples::GalleryThread']]], + ['m_5feglstream',['m_eglStream',['../classArgusSamples_1_1GalleryItemVideo.html#a0e4b979747d57ac2adb49d1aa55e560d',1,'ArgusSamples::GalleryItemVideo::m_eglStream()'],['../classArgusSamples_1_1StreamConsumer.html#a3b3c6702d62bbc602a36962c35fca9d2',1,'ArgusSamples::StreamConsumer::m_eglStream()']]], + ['m_5feventqueue',['m_eventQueue',['../classArgusSamples_1_1EventThread.html#ae4737f9bed932ccc8a8fc30da2f8e1c3',1,'ArgusSamples::EventThread']]], + ['m_5feventthread',['m_eventThread',['../classArgusSamples_1_1SessionPerfTracker.html#a1d50f5ee5122776bfb763e3532f2c32b',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fexplevels',['m_expLevels',['../classArgusSamples_1_1TaskMultiExposure.html#a86e00ac4af4f2113e25a772e3079fdcd',1,'ArgusSamples::TaskMultiExposure']]], + ['m_5fexposurecompensation',['m_exposureCompensation',['../classArgusSamples_1_1Dispatcher.html#a97143dd6789825553983066e368e2ccd',1,'ArgusSamples::Dispatcher']]], + ['m_5fexposurerange',['m_exposureRange',['../classArgusSamples_1_1TaskMultiExposure.html#a0ed7cfb2d98a655ffed1d49ba8b54de3',1,'ArgusSamples::TaskMultiExposure']]], + ['m_5fexposuresteps',['m_exposureSteps',['../classArgusSamples_1_1TaskMultiExposure.html#aea419c3736e088bf2cd4c109a747942e',1,'ArgusSamples::TaskMultiExposure']]], + ['m_5fexposurestepsrange',['m_exposureStepsRange',['../classArgusSamples_1_1TaskMultiExposure.html#a29050e7e88ed516272024bc99f3bc1b8',1,'ArgusSamples::TaskMultiExposure']]], + ['m_5fexposuretimerange',['m_exposureTimeRange',['../classArgusSamples_1_1Dispatcher.html#a831b15c216817e984f26ab5b7e50e7ec',1,'ArgusSamples::Dispatcher']]], + ['m_5ffilename',['m_fileName',['../classArgusSamples_1_1GalleryItem.html#a5426a2acf2214f834fbefa77fab678a0',1,'ArgusSamples::GalleryItem']]], + ['m_5ffirstdisplaytime',['m_firstDisplayTime',['../classArgusSamples_1_1PerfTracker.html#a9008160b53fe10263b08b0e67ef34d42',1,'ArgusSamples::PerfTracker']]], + ['m_5ffirstrequestreceivedtime',['m_firstRequestReceivedTime',['../classArgusSamples_1_1SessionPerfTracker.html#afdd102803e2ae3c5f1c1da0322f12f1f',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fflushdonetime',['m_flushDoneTime',['../classArgusSamples_1_1SessionPerfTracker.html#a7340d50dba1aa2dd819cd103fa862cfd',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5ffocusposition',['m_focusPosition',['../classArgusSamples_1_1Dispatcher.html#ad4d7716e1f707e380662c016eec141db',1,'ArgusSamples::Dispatcher']]], + ['m_5fframerate',['m_frameRate',['../classArgusSamples_1_1Dispatcher.html#a1ff8796985cb48416ecb2006cfbf0682',1,'ArgusSamples::Dispatcher']]], + ['m_5fgainrange',['m_gainRange',['../classArgusSamples_1_1Dispatcher.html#a204b37120a0964e6c8581cb24396f322',1,'ArgusSamples::Dispatcher']]], + ['m_5fgallery',['m_gallery',['../classArgusSamples_1_1AppModuleGallery.html#a5c519a08c67749969c253d05c96ffe64',1,'ArgusSamples::AppModuleGallery']]], + ['m_5fguiconfig',['m_guiConfig',['../classArgusSamples_1_1AppModuleCapture.html#af061ccff6871a6c7467741512003f350',1,'ArgusSamples::AppModuleCapture::m_guiConfig()'],['../classArgusSamples_1_1AppModuleGeneric.html#a688994584da153c3cf5cd3462c5b9308',1,'ArgusSamples::AppModuleGeneric::m_guiConfig()'],['../classArgusSamples_1_1AppModuleGallery.html#a291707008a5b734c6b6c5b2b0f548fb8',1,'ArgusSamples::AppModuleGallery::m_guiConfig()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a550ecb0f6dbd5b3b05bda839b9ec5080',1,'ArgusSamples::AppModuleMultiExposure::m_guiConfig()'],['../classArgusSamples_1_1AppModuleVideo.html#ade723928bae54797959b0ba5726732c1',1,'ArgusSamples::AppModuleVideo::m_guiConfig()']]], + ['m_5fguicontainerconfig',['m_guiContainerConfig',['../classArgusSamples_1_1AppModuleCapture.html#a7deeb6c6ead323ac4ccbce67b617b604',1,'ArgusSamples::AppModuleCapture::m_guiContainerConfig()'],['../classArgusSamples_1_1AppModuleGeneric.html#ae6068019da61bd2bc38562bb6ddfa95a',1,'ArgusSamples::AppModuleGeneric::m_guiContainerConfig()'],['../classArgusSamples_1_1AppModuleGallery.html#a11864dc5ce704012dd052a3ccc66757a',1,'ArgusSamples::AppModuleGallery::m_guiContainerConfig()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a93c5dfe3403e3059c04c0c4c36fd0ba2',1,'ArgusSamples::AppModuleMultiExposure::m_guiContainerConfig()'],['../classArgusSamples_1_1AppModuleVideo.html#a56336582d1d3f504b86b3e05dd43f776',1,'ArgusSamples::AppModuleVideo::m_guiContainerConfig()']]], + ['m_5fguimenubar',['m_guiMenuBar',['../classArgusSamples_1_1AppModuleGeneric.html#a03f8ee9f12ea83c0c568264dab2c701f',1,'ArgusSamples::AppModuleGeneric']]], + ['m_5fheight',['m_height',['../classArgusSamples_1_1GalleryItemImage.html#ab392779c40645bebf702088afbeda69e',1,'ArgusSamples::GalleryItemImage']]], + ['m_5fiautocontrolsettings',['m_iAutoControlSettings',['../classArgusSamples_1_1AutoControlSettingsObserver.html#ad77be17b865f804065a7b271766ad3b5',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['m_5ficameraprovider',['m_iCameraProvider',['../classArgusSamples_1_1Dispatcher.html#ae4aeb8a6292fddebfa2b586541de9a3c',1,'ArgusSamples::Dispatcher']]], + ['m_5fid',['m_id',['../classArgusSamples_1_1SessionPerfTracker.html#ab89ad0cc63d5f9bb6f97e07e2ee75963',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fidefogsettings',['m_iDeFogSettings',['../classArgusSamples_1_1DeFogSettingsObserver.html#a8a3912902333486796ba194b9fc33246',1,'ArgusSamples::DeFogSettingsObserver']]], + ['m_5fidenoisesettings',['m_iDenoiseSettings',['../classArgusSamples_1_1DenoiseSettingsObserver.html#ac84648edf27a874f95d5b025ee094e97',1,'ArgusSamples::DenoiseSettingsObserver']]], + ['m_5fiedgeenhancesettings',['m_iEdgeEnhanceSettings',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a43c29bdc48a6af1a03d4dcaba10bacee',1,'ArgusSamples::EdgeEnhanceSettingsObserver']]], + ['m_5figuicontainerconfig',['m_iGuiContainerConfig',['../classArgusSamples_1_1CameraApp.html#a9614be1e6933aa3bf80a57b22bae4be4',1,'ArgusSamples::CameraApp']]], + ['m_5figuimenubar',['m_iGuiMenuBar',['../classArgusSamples_1_1CameraApp.html#afa0fb058dc723f53e3befa52494d824c',1,'ArgusSamples::CameraApp']]], + ['m_5finitialized',['m_initialized',['../classArgusSamples_1_1ConditionVariable.html#ae378c0af18fdcf6d074907206c1d36b4',1,'ArgusSamples::ConditionVariable::m_initialized()'],['../classArgusSamples_1_1Mutex.html#aea63f90eaf7e8a56fb2936ebf4e3596c',1,'ArgusSamples::Mutex::m_initialized()'],['../classArgusSamples_1_1Dispatcher.html#aa0b5f0f55fe6ac705647f7b26f4b71da',1,'ArgusSamples::Dispatcher::m_initialized()'],['../classArgusSamples_1_1TaskGallery.html#a8142b3cf57aa1427028681ff98413a2a',1,'ArgusSamples::TaskGallery::m_initialized()'],['../classArgusSamples_1_1TaskMultiExposure.html#aac782749d02412f13244b8e600537c96',1,'ArgusSamples::TaskMultiExposure::m_initialized()'],['../classArgusSamples_1_1TaskMultiSession.html#a32ad985fc5a86d51464f1ce026d87bba',1,'ArgusSamples::TaskMultiSession::m_initialized()'],['../classArgusSamples_1_1TaskStillCapture.html#a0611c811496a43985efac4e710c448e6',1,'ArgusSamples::TaskStillCapture::m_initialized()'],['../classArgusSamples_1_1TaskVideoRecord.html#a0fd91ecacd11696de1722a1590dedf22',1,'ArgusSamples::TaskVideoRecord::m_initialized()'],['../classArgusSamples_1_1Composer.html#a1ba0585c1c0843c269c0dc0ae92013ff',1,'ArgusSamples::Composer::m_initialized()'],['../classArgusSamples_1_1StreamConsumer.html#acb02c477f6a39dfb0b4c51137c0caab2',1,'ArgusSamples::StreamConsumer::m_initialized()'],['../classArgusSamples_1_1AppModuleCapture.html#ab6eefcbf2808bfc71c4c04fb79603583',1,'ArgusSamples::AppModuleCapture::m_initialized()'],['../classArgusSamples_1_1AppModuleGeneric.html#a047f017e745427486f9a218171877587',1,'ArgusSamples::AppModuleGeneric::m_initialized()'],['../classArgusSamples_1_1AppModuleGallery.html#a14c0b8f385f5bbf30d857dbe6b3adc97',1,'ArgusSamples::AppModuleGallery::m_initialized()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a4ca63ce7f581b9c9d2aa764851b0491a',1,'ArgusSamples::AppModuleMultiExposure::m_initialized()'],['../classArgusSamples_1_1AppModuleMultiSession.html#aa2cd2e19348b179e51f11413897a9abc',1,'ArgusSamples::AppModuleMultiSession::m_initialized()'],['../classArgusSamples_1_1AppModuleVideo.html#ae5fd64a0e718ca05b0986b2ced6f0d10',1,'ArgusSamples::AppModuleVideo::m_initialized()']]], + ['m_5fislocked',['m_isLocked',['../classArgusSamples_1_1ScopedMutex.html#ae924ac3c4e8da1ed1928f9a74872c81e',1,'ArgusSamples::ScopedMutex']]], + ['m_5fisourcesettings',['m_iSourceSettings',['../classArgusSamples_1_1SourceSettingsObserver.html#a80cac48b6f37b4525c59b5a2fae120e7',1,'ArgusSamples::SourceSettingsObserver']]], + ['m_5fispdigitalgainrange',['m_ispDigitalGainRange',['../classArgusSamples_1_1Dispatcher.html#a5cdae77340392be2884df7eec6e6e3bf',1,'ArgusSamples::Dispatcher']]], + ['m_5fissuecapturetime',['m_issueCaptureTime',['../classArgusSamples_1_1SessionPerfTracker.html#a77fbdb9afc76d664d88dcab5a011d57b',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fitemlist',['m_itemList',['../classArgusSamples_1_1GalleryThread.html#ae9ccd8811cc4cf109d6b92b0a045d6ad',1,'ArgusSamples::GalleryThread']]], + ['m_5fkpi',['m_kpi',['../classArgusSamples_1_1Dispatcher.html#a2e001f477d06cc5b03614f280d60be7c',1,'ArgusSamples::Dispatcher']]], + ['m_5flastframecount',['m_lastFrameCount',['../classArgusSamples_1_1SessionPerfTracker.html#a182131bb8aa1e59e079a4396667e20f5',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fmaxframeperiod',['m_maxFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#a83c9fd0ff6ee656a8a6740d4e1833848',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fmaxlatency',['m_maxLatency',['../classArgusSamples_1_1SessionPerfTracker.html#afce13d63e328db5d6c0823efe784815e',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fminframeperiod',['m_minFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#a53fc5ea7b8f23b3342bd267893da6de4',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fminlatency',['m_minLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a937f4ac6bd30e30844cbb1e97c825740',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fmodtime',['m_modTime',['../classArgusSamples_1_1GalleryItem.html#a1d6843a881ea24e7cbeaa4cab8028348',1,'ArgusSamples::GalleryItem']]], + ['m_5fmodule',['m_module',['../classArgusSamples_1_1CameraApp.html#acd26fd901be23c8f33a266c89f150f12',1,'ArgusSamples::CameraApp']]], + ['m_5fmodulegeneric',['m_moduleGeneric',['../classArgusSamples_1_1CameraApp.html#af18cca74ea551836dbd0f525b0bbe104',1,'ArgusSamples::CameraApp']]], + ['m_5fmodules',['m_modules',['../classArgusSamples_1_1CameraApp.html#a502a243f425d7a352d84a36cb2d075b6',1,'ArgusSamples::CameraApp']]], + ['m_5fmultidevices',['m_multiDevices',['../classArgusSamples_1_1TaskMultiSession.html#a173499f5075d7ad394cd3d41cfd0672c',1,'ArgusSamples::TaskMultiSession']]], + ['m_5fmultiexposure',['m_multiExposure',['../classArgusSamples_1_1AppModuleMultiExposure.html#ad5e763258220f21c1516474f169969ef',1,'ArgusSamples::AppModuleMultiExposure']]], + ['m_5fmultisession',['m_multiSession',['../classArgusSamples_1_1AppModuleMultiSession.html#a8557e1685e11e1867bae605f0ce6aa52',1,'ArgusSamples::AppModuleMultiSession']]], + ['m_5fmutex',['m_mutex',['../classArgusSamples_1_1Mutex.html#ae808e03f1120c78c412a3565b47f9486',1,'ArgusSamples::Mutex::m_mutex()'],['../classArgusSamples_1_1ScopedMutex.html#ae5dea8620bef827375bbaea192ecf6cc',1,'ArgusSamples::ScopedMutex::m_mutex()'],['../classArgusSamples_1_1Composer.html#af50b711d820a37c2e8c45904f6a25254',1,'ArgusSamples::Composer::m_mutex()']]], + ['m_5fnsec',['m_nSec',['../classArgusSamples_1_1TimeValue.html#affdcccde7cd27f77b3c66a106c83b401',1,'ArgusSamples::TimeValue']]], + ['m_5fnumberframesreceived',['m_numberframesReceived',['../classArgusSamples_1_1SessionPerfTracker.html#ae023ec0f84def1e14dbc210e7b6e03fa',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fobj',['m_obj',['../classArgusSamples_1_1TrackedUniqueObj.html#a040e53b6de59222a70519850ef914397',1,'ArgusSamples::TrackedUniqueObj']]], + ['m_5fobject',['m_object',['../classArgusSamples_1_1ScopedGuard.html#ac7e1d472b57a8a0b5402838877267e5d',1,'ArgusSamples::ScopedGuard']]], + ['m_5fobservers',['m_observers',['../classArgusSamples_1_1Dispatcher.html#a4604c49757a59841f0da083ce1b8c4e6',1,'ArgusSamples::Dispatcher']]], + ['m_5foptions',['m_options',['../classArgusSamples_1_1App.html#a54a7baffee7ad152c61cfd024f77b6b3',1,'ArgusSamples::App']]], + ['m_5foutputpath',['m_outputPath',['../classArgusSamples_1_1Dispatcher.html#aba5c2f3770b182bf0faa3f86433b0b97',1,'ArgusSamples::Dispatcher']]], + ['m_5foutputsize',['m_outputSize',['../classArgusSamples_1_1Dispatcher.html#a67c7dfd5ed14c9a2fe8960a3b118b978',1,'ArgusSamples::Dispatcher']]], + ['m_5foutputstream',['m_outputStream',['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#aba51fc6029266097dc159e1d69b93f66',1,'ArgusSamples::TaskMultiExposure::ExpLevel::m_outputStream()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#afc0ef7ada8453b8d10f0c558805ea656',1,'ArgusSamples::TaskMultiSession::Session::m_outputStream()']]], + ['m_5fp',['m_p',['../classArgusSamples_1_1GstUnrefer.html#aa68308b41add011c78be805c9ff987f8',1,'ArgusSamples::GstUnrefer']]], + ['m_5fperftracker',['m_perfTracker',['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a9d217af5656a51403e0b1d87cf7c068b',1,'ArgusSamples::TaskMultiSession::Session::m_perfTracker()'],['../classArgusSamples_1_1TaskStillCapture.html#ab8abaa019cd61954ae430d665f6acfc5',1,'ArgusSamples::TaskStillCapture::m_perfTracker()'],['../classArgusSamples_1_1TaskVideoRecord.html#a45851e33287aa82cc7877ae594c4c62a',1,'ArgusSamples::TaskVideoRecord::m_perfTracker()']]], + ['m_5fpipeline',['m_pipeline',['../classArgusSamples_1_1GalleryItemVideo.html#a90c40efd2c04b2a0067d4183e74324f6',1,'ArgusSamples::GalleryItemVideo']]], + ['m_5fpreviewrequest',['m_previewRequest',['../classArgusSamples_1_1TaskStillCapture.html#a2b5bcde355ef0bdb0e8f13697f2caf25',1,'ArgusSamples::TaskStillCapture']]], + ['m_5fpreviewstream',['m_previewStream',['../classArgusSamples_1_1TaskStillCapture.html#a99cdb83b0f34e19c9515ba0200124a67',1,'ArgusSamples::TaskStillCapture::m_previewStream()'],['../classArgusSamples_1_1TaskVideoRecord.html#a02af2370d41f9fde0641927104b8fa28',1,'ArgusSamples::TaskVideoRecord::m_previewStream()']]], + ['m_5fpreviouskpi',['m_previousKpi',['../classArgusSamples_1_1SessionPerfTracker.html#a73d4bc089f4143f3f8a358ea3656677c',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fprevioussensortime',['m_previousSensorTime',['../classArgusSamples_1_1SessionPerfTracker.html#aefb236040ca655058e3dad77d1361553',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fprevmodule',['m_prevModule',['../classArgusSamples_1_1CameraApp.html#a8eb6046681e73af1645ff99b3bba724b',1,'ArgusSamples::CameraApp']]], + ['m_5fprevrunning',['m_prevRunning',['../classArgusSamples_1_1TaskMultiExposure.html#a5b262e3a48eb74a6c02292240eebe80b',1,'ArgusSamples::TaskMultiExposure::m_prevRunning()'],['../classArgusSamples_1_1TaskMultiSession.html#aa45b4ccd6b39cdd8d5e722bd3865c7bb',1,'ArgusSamples::TaskMultiSession::m_prevRunning()'],['../classArgusSamples_1_1TaskStillCapture.html#a85ede1920ed11460c7feefd4cc811b3f',1,'ArgusSamples::TaskStillCapture::m_prevRunning()'],['../classArgusSamples_1_1TaskVideoRecord.html#a6cd927410f4d357c7fe179842772320c',1,'ArgusSamples::TaskVideoRecord::m_prevRunning()']]], + ['m_5fprogram',['m_program',['../classArgusSamples_1_1Composer.html#a6add3386f515c670ad4bd708bd6e8aad',1,'ArgusSamples::Composer']]], + ['m_5frecording',['m_recording',['../classArgusSamples_1_1TaskVideoRecord.html#adb2634ef800ce334deeedc3006a09331',1,'ArgusSamples::TaskVideoRecord']]], + ['m_5frequest',['m_request',['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#a7aac9c7b6dad0213e5d0a8b672a47b66',1,'ArgusSamples::TaskMultiExposure::ExpLevel::m_request()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a96612bcc7e6b59617ebe41793bf4eddb',1,'ArgusSamples::TaskMultiSession::Session::m_request()'],['../classArgusSamples_1_1TaskVideoRecord.html#a5c4916b17802a76dab527231a1381d98',1,'ArgusSamples::TaskVideoRecord::m_request()']]], + ['m_5frequestreceivedtime',['m_requestReceivedTime',['../classArgusSamples_1_1SessionPerfTracker.html#a0a3adf49285e704111a5863d9b3b262b',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5frequests',['m_requests',['../classArgusSamples_1_1Dispatcher_1_1ActiveSession.html#a8f693444ab1584c81e8542b14b06c258',1,'ArgusSamples::Dispatcher::ActiveSession']]], + ['m_5frunning',['m_running',['../classArgusSamples_1_1TaskGallery.html#a4d3d96fa9538cc9186ae449d0e151db9',1,'ArgusSamples::TaskGallery::m_running()'],['../classArgusSamples_1_1TaskMultiExposure.html#a25bf4de932c2c7f8d610a56b87f57e35',1,'ArgusSamples::TaskMultiExposure::m_running()'],['../classArgusSamples_1_1TaskMultiSession.html#ae44bb7248f6ce3278790e687c3866b39',1,'ArgusSamples::TaskMultiSession::m_running()'],['../classArgusSamples_1_1TaskStillCapture.html#aa158d0c007dcb294d050c5bb57265d32',1,'ArgusSamples::TaskStillCapture::m_running()'],['../classArgusSamples_1_1TaskVideoRecord.html#a318a82bcfaa993a072e55c0707a0c8e8',1,'ArgusSamples::TaskVideoRecord::m_running()'],['../classArgusSamples_1_1AppModuleCapture.html#a79a35b19b888285eab4c2ab968a9080f',1,'ArgusSamples::AppModuleCapture::m_running()'],['../classArgusSamples_1_1AppModuleGeneric.html#a6cf63e4c7a7d54eb3b28125c52e7c6be',1,'ArgusSamples::AppModuleGeneric::m_running()'],['../classArgusSamples_1_1AppModuleGallery.html#a22bf8ab0dd2068b7970267fe113d96b0',1,'ArgusSamples::AppModuleGallery::m_running()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#ad67211bd86ab92e92e7b72e27693c8d5',1,'ArgusSamples::AppModuleMultiExposure::m_running()'],['../classArgusSamples_1_1AppModuleVideo.html#a0c90dc3f14761539a47fadf8cbcac212',1,'ArgusSamples::AppModuleVideo::m_running()']]], + ['m_5fsensoranaloggainrange',['m_sensorAnalogGainRange',['../classArgusSamples_1_1Dispatcher.html#acb1b4b67f9ed9d7e6e37735e0d358ee1',1,'ArgusSamples::Dispatcher']]], + ['m_5fsensorexposuretimerange',['m_sensorExposureTimeRange',['../classArgusSamples_1_1Dispatcher.html#a8762f3b46361030434f8ca6c05212b8b',1,'ArgusSamples::Dispatcher']]], + ['m_5fsensorframeraterange',['m_sensorFrameRateRange',['../classArgusSamples_1_1Dispatcher.html#a6876340ad28c6ed5a46b1140f155f1a5',1,'ArgusSamples::Dispatcher']]], + ['m_5fsensormodeindex',['m_sensorModeIndex',['../classArgusSamples_1_1Dispatcher.html#a32a96f4bf3ee698e0e3faab6b216847d',1,'ArgusSamples::Dispatcher']]], + ['m_5fsensormodes',['m_sensorModes',['../classArgusSamples_1_1Dispatcher.html#a4a04377544c33d8f8b651b68e5c80e71',1,'ArgusSamples::Dispatcher']]], + ['m_5fsensormodevalid',['m_sensorModeValid',['../classArgusSamples_1_1Dispatcher.html#a13e947ca02d4ca32fa94ea3bff00fac8',1,'ArgusSamples::Dispatcher']]], + ['m_5fsession',['m_session',['../classArgusSamples_1_1Dispatcher_1_1ActiveSession.html#a8ae2e0dedb94312ecdf1d5d11dde0690',1,'ArgusSamples::Dispatcher::ActiveSession::m_session()'],['../classArgusSamples_1_1EventThread.html#a0190f466222ad44488f1ae28a9692e5d',1,'ArgusSamples::EventThread::m_session()'],['../classArgusSamples_1_1SessionPerfTracker.html#a945b55221b6931ab907dcf5a2b8b68ed',1,'ArgusSamples::SessionPerfTracker::m_session()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a1f06c618542aa0aea92dacec3df51d64',1,'ArgusSamples::TaskMultiSession::Session::m_session()']]], + ['m_5fsessionid',['m_sessionId',['../classArgusSamples_1_1PerfTracker.html#adb3786e69deb31f265f5a7c6b13896ee',1,'ArgusSamples::PerfTracker']]], + ['m_5fsessionperftracker',['m_sessionPerfTracker',['../classArgusSamples_1_1EventThread.html#af0b4590350fc96130bdba0ce9b3fd330',1,'ArgusSamples::EventThread']]], + ['m_5fsessions',['m_sessions',['../classArgusSamples_1_1TaskMultiSession.html#a5599ff165466fd36a737a4b71f27862a',1,'ArgusSamples::TaskMultiSession']]], + ['m_5fshutdown',['m_shutdown',['../classArgusSamples_1_1Composer_1_1Stream.html#a12533f09aee3ec29ad831c8351ecf0f2',1,'ArgusSamples::Composer::Stream']]], + ['m_5fstatscountframeperiod',['m_statsCountFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#aeac927365cf07427c68d797a7cc6195b',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatscountlatency',['m_statsCountLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a8ed8991cda6db38fa185525a86b5fb53',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsframedropcount',['m_statsFrameDropCount',['../classArgusSamples_1_1SessionPerfTracker.html#a8d257b1c9791ff68d509b45944e2802d',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsmaxframeperiod',['m_statsMaxFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#a59fe8f0a7a94784b9cb60d915c59de11',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsmaxlatency',['m_statsMaxLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a8c37aa06e587c35e1b591172bc9fb4fa',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsminframeperiod',['m_statsMinFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#a07608665a748582bd0242efc0ac5fe9b',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsminlatency',['m_statsMinLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a703202dd17cb8dce51d38478f6f4d23f',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsoutofordercount',['m_statsOutOfOrderCount',['../classArgusSamples_1_1SessionPerfTracker.html#a6a7bc0a0eea06a7129f55561562732c3',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatssumframeperiod',['m_statsSumFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#aa9b8af892320694baf748190734b4adf',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatssumlatency',['m_statsSumLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a1acaa6e251256c7c2ec8c9990913fec3',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstillcapture',['m_stillCapture',['../classArgusSamples_1_1AppModuleCapture.html#a800b4f46e6fdecb87e0ae86b2cf45f8f',1,'ArgusSamples::AppModuleCapture']]], + ['m_5fstillfiletype',['m_stillFileType',['../classArgusSamples_1_1Dispatcher.html#a2e1c10949f85d0d5934da42bd920e5b4',1,'ArgusSamples::Dispatcher']]], + ['m_5fstreams',['m_streams',['../classArgusSamples_1_1Composer.html#a382201a7f9d8d7c86d7b636c5a1dba37',1,'ArgusSamples::Composer']]], + ['m_5fstreamstate',['m_streamState',['../classArgusSamples_1_1StreamConsumer.html#ad1906bd74feedeff7c2d8e729bea63fc',1,'ArgusSamples::StreamConsumer']]], + ['m_5fstreamtexture',['m_streamTexture',['../classArgusSamples_1_1StreamConsumer.html#ab6c5eca0db513574d70c8db571bbf9c6',1,'ArgusSamples::StreamConsumer']]], + ['m_5fsumframeperiod',['m_sumFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#aab7acc5c338014ec0aa70bbfa6c1935f',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fsumlatency',['m_sumLatency',['../classArgusSamples_1_1SessionPerfTracker.html#aa7d0113afac004116741917f28ebc46c',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5ftaskstarttime',['m_taskStartTime',['../classArgusSamples_1_1SessionPerfTracker.html#ae3b01075658dd6e392f7d0d3287ac299',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5ftextureid',['m_textureID',['../classArgusSamples_1_1GalleryThread.html#a949e1c5f798beffcc88d3d3d8068197e',1,'ArgusSamples::GalleryThread']]], + ['m_5fthread',['m_thread',['../classArgusSamples_1_1TaskGallery.html#a62658f6b3745ef0d80f78816c5b335fb',1,'ArgusSamples::TaskGallery']]], + ['m_5ftotalframedrop',['m_totalFrameDrop',['../classArgusSamples_1_1SessionPerfTracker.html#ac588d1f22ff259b3cdf88f2e0cfe4742',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5ftracker',['m_tracker',['../classArgusSamples_1_1TrackedUniqueObj.html#af767a3ca5f26ae83279546189ec03000',1,'ArgusSamples::TrackedUniqueObj']]], + ['m_5fvbo',['m_vbo',['../classArgusSamples_1_1GalleryThread.html#a93dd7d33eebfce929714979d1a4c75fa',1,'ArgusSamples::GalleryThread::m_vbo()'],['../classArgusSamples_1_1Composer.html#ad9fbf443f7110342cda837cc539c5244',1,'ArgusSamples::Composer::m_vbo()']]], + ['m_5fverbose',['m_verbose',['../classArgusSamples_1_1Dispatcher.html#a4eb653fefb1d498310bca643e1c1f8a9',1,'ArgusSamples::Dispatcher']]], + ['m_5fvideobitrate',['m_videoBitRate',['../classArgusSamples_1_1Dispatcher.html#ad4a1b34fc39ffa86df0fba12e6c0ce64',1,'ArgusSamples::Dispatcher']]], + ['m_5fvideofiletype',['m_videoFileType',['../classArgusSamples_1_1Dispatcher.html#a9611fc594a72a0b179fb11e14f975a7a',1,'ArgusSamples::Dispatcher']]], + ['m_5fvideoformat',['m_videoFormat',['../classArgusSamples_1_1Dispatcher.html#acd9236f88d7181656ab9e200a514ddb8',1,'ArgusSamples::Dispatcher']]], + ['m_5fvideopipeline',['m_videoPipeline',['../classArgusSamples_1_1TaskVideoRecord.html#a60e2691264f607709f4b9226b411e5f8',1,'ArgusSamples::TaskVideoRecord']]], + ['m_5fvideorecord',['m_videoRecord',['../classArgusSamples_1_1AppModuleVideo.html#a09969e8a5d19da63804ac5e2c1ccd4b2',1,'ArgusSamples::AppModuleVideo']]], + ['m_5fvideostream',['m_videoStream',['../classArgusSamples_1_1TaskVideoRecord.html#a37214425b8651910066f774741a52a79',1,'ArgusSamples::TaskVideoRecord']]], + ['m_5fwasrunning',['m_wasRunning',['../classArgusSamples_1_1TaskMultiExposure.html#a3afcfebbf91e53223b061e673ff3b38e',1,'ArgusSamples::TaskMultiExposure::m_wasRunning()'],['../classArgusSamples_1_1TaskStillCapture.html#aa29dcbe5a25ff01fca0e9e13283b2b18',1,'ArgusSamples::TaskStillCapture::m_wasRunning()'],['../classArgusSamples_1_1TaskVideoRecord.html#a67da6dafb37185b515adf0761531d9fc',1,'ArgusSamples::TaskVideoRecord::m_wasRunning()']]], + ['m_5fwidth',['m_width',['../classArgusSamples_1_1GalleryItemImage.html#a4b284f0e0d920721f601239102e0b44f',1,'ArgusSamples::GalleryItemImage']]], + ['m_5fwindowaspectratio',['m_windowAspectRatio',['../classArgusSamples_1_1Composer.html#ad8fbe97bade15ae4134a204dbbd7f227',1,'ArgusSamples::Composer']]], + ['m_5fwindowheight',['m_windowHeight',['../classArgusSamples_1_1Composer.html#aac9016a400fc9563754b114fec5af656',1,'ArgusSamples::Composer']]], + ['m_5fwindowwidth',['m_windowWidth',['../classArgusSamples_1_1Composer.html#a9329b060d732975361a6b8e67735e995',1,'ArgusSamples::Composer']]], + ['main',['main',['../Main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'Main.cpp']]], + ['main_2ecpp',['Main.cpp',['../Main_8cpp.html',1,'']]], + ['maxburstrequests',['maxBurstRequests',['../classArgusSamples_1_1Dispatcher.html#a22c8adba268c263857fa5d677e58e60d',1,'ArgusSamples::Dispatcher']]], + ['message',['message',['../classArgusSamples_1_1Dispatcher.html#a6fd8b82bf276e3d3ebf0f8dee616ba3c',1,'ArgusSamples::Dispatcher']]], + ['module_5fcapture',['MODULE_CAPTURE',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3a35b06160cb0633eebc1bc8a6324819be',1,'ArgusSamples']]], + ['module_5fcount',['MODULE_COUNT',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3ac9fa88d2c3b788200697e8251cd40fcb',1,'ArgusSamples']]], + ['module_5ffirst',['MODULE_FIRST',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3a332697d31bd4d57d4f7d254d80614344',1,'ArgusSamples']]], + ['module_5finvalid',['MODULE_INVALID',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3ae91f4304d7776f80f43904ce0fa0e16d',1,'ArgusSamples']]], + ['module_5flast',['MODULE_LAST',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3a1bcc086bea73284b23530f72928d2bd0',1,'ArgusSamples']]], + ['module_5fmulti_5fexposure',['MODULE_MULTI_EXPOSURE',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3ae64049711c736d6064196bb6c55cad1a',1,'ArgusSamples']]], + ['module_5fmulti_5fsession',['MODULE_MULTI_SESSION',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3a3a3e136c42987e865cecd7482aa74f93',1,'ArgusSamples']]], + ['module_5fvideo',['MODULE_VIDEO',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3a10437d51884cf2a1a83c9f9df5ef461b',1,'ArgusSamples']]], + ['modules',['Modules',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3',1,'ArgusSamples']]], + ['msectype',['MSecType',['../classArgusSamples_1_1TimeValue.html#a235f74cd4602948b500de3d7a3b05016',1,'ArgusSamples::TimeValue']]], + ['multiexposure_2ecpp',['MultiExposure.cpp',['../MultiExposure_8cpp.html',1,'']]], + ['multiexposure_2eh',['MultiExposure.h',['../MultiExposure_8h.html',1,'']]], + ['multisession_2ecpp',['MultiSession.cpp',['../MultiSession_8cpp.html',1,'']]], + ['multisession_2eh',['MultiSession.h',['../MultiSession_8h.html',1,'']]], + ['mutex',['Mutex',['../classArgusSamples_1_1Mutex.html',1,'ArgusSamples']]], + ['mutex',['Mutex',['../classArgusSamples_1_1Mutex.html#a2c8312081a9f5029df7046539568de7c',1,'ArgusSamples::Mutex::Mutex()'],['../classArgusSamples_1_1Mutex.html#a69674606a33e096a602a8a4453aee8b5',1,'ArgusSamples::Mutex::Mutex(Mutex &other)']]], + ['mutex_2ecpp',['Mutex.cpp',['../Mutex_8cpp.html',1,'']]], + ['mutex_2eh',['Mutex.h',['../Mutex_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6e.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6e.html new file mode 100644 index 0000000..1f92ee5 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6e.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6e.js new file mode 100644 index 0000000..3c382ac --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['nextitem',['nextItem',['../classArgusSamples_1_1TaskGallery.html#a7255393535a1d6c44c84b047580cca0c',1,'ArgusSamples::TaskGallery::nextItem()'],['../classArgusSamples_1_1AppModuleGallery.html#a6c4785496b7e5e29b856184875f9e018',1,'ArgusSamples::AppModuleGallery::nextItem()']]], + ['nsectype',['NSecType',['../classArgusSamples_1_1TimeValue.html#a1ecf21e80d1cd4af94eda84fcb082288',1,'ArgusSamples::TimeValue']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6f.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6f.html new file mode 100644 index 0000000..61827e8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6f.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6f.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6f.js new file mode 100644 index 0000000..a157d4a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_6f.js @@ -0,0 +1,45 @@ +var searchData= +[ + ['onacregionchanged',['onAcRegionChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#a592d881109de6eb8c1de9b5b6dabc94e',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onaeantibandingmodechanged',['onAeAntibandingModeChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#aed117146c09d51bd8aecf379ea0d449c',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onaelockchanged',['onAeLockChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#af22e8f676aed3b0f8e207b24a0eeb4bd',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onaperturefnumchanged',['onApertureFnumChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a8abd24b3e3efe21517738510723899e3',1,'ArgusSamples::SourceSettingsObserver']]], + ['onaperturemotorspeedchanged',['onApertureMotorSpeedChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#ade3ebfdd6de6c7c2f0ba416fac8004ef',1,'ArgusSamples::SourceSettingsObserver']]], + ['onaperturepositionchanged',['onAperturePositionChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a4fb6f1e46911a13e3bf85a12880f9f82',1,'ArgusSamples::SourceSettingsObserver']]], + ['onawblockchanged',['onAwbLockChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#aa6709360bb8c91bd679bbd1bf3e18204',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onawbmodechanged',['onAwbModeChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#a4614ae347126f51c7cac17f10dd32e7e',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['oncaptureyuvformatchanged',['onCaptureYuvFormatChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#ad8c60c613eef7c03b4bd0be544831a83',1,'ArgusSamples::SourceSettingsObserver']]], + ['ondefogamountchanged',['onDeFogAmountChanged',['../classArgusSamples_1_1DeFogSettingsObserver.html#a23dad1383d26fa0b27a123be2ff374c0',1,'ArgusSamples::DeFogSettingsObserver']]], + ['ondefogenablechanged',['onDeFogEnableChanged',['../classArgusSamples_1_1DeFogSettingsObserver.html#a1765a06b40f743cc06f0d2ab77878529',1,'ArgusSamples::DeFogSettingsObserver']]], + ['ondefogqualitychanged',['onDeFogQualityChanged',['../classArgusSamples_1_1DeFogSettingsObserver.html#a71605677e278239f985f4d0ed00de9f8',1,'ArgusSamples::DeFogSettingsObserver']]], + ['ondenoisemodechanged',['onDenoiseModeChanged',['../classArgusSamples_1_1DenoiseSettingsObserver.html#a64fad1360d1eda89f1d01b0cf593611b',1,'ArgusSamples::DenoiseSettingsObserver']]], + ['ondenoisestrengthchanged',['onDenoiseStrengthChanged',['../classArgusSamples_1_1DenoiseSettingsObserver.html#a5f5514b92aaa330add38c29e4fcef403',1,'ArgusSamples::DenoiseSettingsObserver']]], + ['ondeviceindexchanged',['onDeviceIndexChanged',['../classArgusSamples_1_1Dispatcher.html#a271bd50e07152395cc38d9aa3ba8d221',1,'ArgusSamples::Dispatcher']]], + ['ondeviceopenchanged',['onDeviceOpenChanged',['../classArgusSamples_1_1TaskMultiExposure.html#a426dcd26ee6d01e865f8851f0f550298',1,'ArgusSamples::TaskMultiExposure::onDeviceOpenChanged()'],['../classArgusSamples_1_1TaskStillCapture.html#a216bfc2b791163e21fae0492af8498a7',1,'ArgusSamples::TaskStillCapture::onDeviceOpenChanged()'],['../classArgusSamples_1_1TaskVideoRecord.html#a26fde817b1419a6f116931ecefdf08d2',1,'ArgusSamples::TaskVideoRecord::onDeviceOpenChanged()']]], + ['onedgeenhancemodechanged',['onEdgeEnhanceModeChanged',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a011d7719a5c0def88384febf7dc7c185',1,'ArgusSamples::EdgeEnhanceSettingsObserver']]], + ['onedgeenhancestrengthchanged',['onEdgeEnhanceStrengthChanged',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a1720c4fee0e277548f0abdf540d3d665',1,'ArgusSamples::EdgeEnhanceSettingsObserver']]], + ['onevent',['onEvent',['../classArgusSamples_1_1PerfTracker.html#a8e075e88828ce69f409fc62accd87e21',1,'ArgusSamples::PerfTracker::onEvent()'],['../classArgusSamples_1_1SessionPerfTracker.html#adc0d9a7ed537ce62f2172eb5d4d3014a',1,'ArgusSamples::SessionPerfTracker::onEvent()']]], + ['onexposurecompensationchanged',['onExposureCompensationChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#a24e95c542dca94c0144d5e00e8a21c86',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onexposuretimerangechanged',['onExposureTimeRangeChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#aa7f7f31c628321259d663fc7e642a3aa',1,'ArgusSamples::SourceSettingsObserver']]], + ['onfocuspositionchanged',['onFocusPositionChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a7812e47102163133915bdf3e43dc3ad1',1,'ArgusSamples::SourceSettingsObserver']]], + ['onframeratechanged',['onFrameRateChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a0169529dfb6a53b6b1a1249b7a5ad379',1,'ArgusSamples::SourceSettingsObserver']]], + ['ongainrangechanged',['onGainRangeChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a75f6325de1c0178e6ce58166b51a7bd6',1,'ArgusSamples::SourceSettingsObserver']]], + ['onispdigitalgainrangechanged',['onIspDigitalGainRangeChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#af8a5bffa13eb5003446d42958d5d8f6f',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onkey',['onKey',['../classArgusSamples_1_1CameraApp.html#a7763a2793577772f4a3d595ee2dc9670',1,'ArgusSamples::CameraApp::onKey()'],['../classArgusSamples_1_1AppModuleCapture.html#a14bb924a18f011836c6bee764a10effc',1,'ArgusSamples::AppModuleCapture::onKey()'],['../classArgusSamples_1_1App.html#a504d5c60fb3b59c67daf9db712b6c564',1,'ArgusSamples::App::onKey()'],['../classArgusSamples_1_1AppModuleGallery.html#a5f5504774f497ffe2bae35650bed0323',1,'ArgusSamples::AppModuleGallery::onKey()'],['../classArgusSamples_1_1AppModuleVideo.html#a2a2830c2cace376c48386b0ad0490cd2',1,'ArgusSamples::AppModuleVideo::onKey()']]], + ['onmodulechanged',['onModuleChanged',['../classArgusSamples_1_1CameraApp.html#a19d3b5bd2fd5461b26668663ae72a69f',1,'ArgusSamples::CameraApp']]], + ['onparameterschanged',['onParametersChanged',['../classArgusSamples_1_1TaskMultiExposure.html#a164065090a7a102f5b4d43ae41218cce',1,'ArgusSamples::TaskMultiExposure']]], + ['onresize',['onResize',['../classArgusSamples_1_1Composer.html#a8cb864fdeccb8d76c8c08f0b73a85710',1,'ArgusSamples::Composer']]], + ['onsensormodechanged',['onSensorModeChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a9ce50ea522004a2f316d9a4027d9dc62',1,'ArgusSamples::SourceSettingsObserver']]], + ['onsensormodeindexchanged',['onSensorModeIndexChanged',['../classArgusSamples_1_1Dispatcher.html#a7ab03520fa70d5036d42d9d7399a7e2a',1,'ArgusSamples::Dispatcher']]], + ['onsensormodevalidchanged',['onSensorModeValidChanged',['../classArgusSamples_1_1TaskMultiExposure.html#a9ebc361b5a6af351c71d335a7715d33b',1,'ArgusSamples::TaskMultiExposure::onSensorModeValidChanged()'],['../classArgusSamples_1_1TaskMultiSession.html#a50f7c59bd79b83e32cab81acc49b866d',1,'ArgusSamples::TaskMultiSession::onSensorModeValidChanged()'],['../classArgusSamples_1_1TaskStillCapture.html#a2df2e81fe7dc899486e21c532869f4da',1,'ArgusSamples::TaskStillCapture::onSensorModeValidChanged()'],['../classArgusSamples_1_1TaskVideoRecord.html#ae87d88f3a594f9b2fb724395311c5e1a',1,'ArgusSamples::TaskVideoRecord::onSensorModeValidChanged()']]], + ['operator_20bool',['operator bool',['../classArgusSamples_1_1TrackedUniqueObj.html#ab0b7d9ed41b50e54b2117ddfc42a137b',1,'ArgusSamples::TrackedUniqueObj']]], + ['operator_21_3d',['operator!=',['../classArgusSamples_1_1TimeValue.html#a44857f827a5b5514727ce71fe3a1742f',1,'ArgusSamples::TimeValue']]], + ['operator_2b',['operator+',['../classArgusSamples_1_1TimeValue.html#aa198ab14451bf0e2d760880d3ed55e46',1,'ArgusSamples::TimeValue']]], + ['operator_2d',['operator-',['../classArgusSamples_1_1TimeValue.html#a3b7e7757bdb2b0d6331955c4272503a2',1,'ArgusSamples::TimeValue']]], + ['operator_3c',['operator<',['../classArgusSamples_1_1TimeValue.html#a67185c646a852de06c5d9ef8ee53c9c1',1,'ArgusSamples::TimeValue::operator<()'],['../classArgusSamples_1_1GalleryItem.html#a51173c635562826ebe9dfaf260a04777',1,'ArgusSamples::GalleryItem::operator<()']]], + ['operator_3c_3d',['operator<=',['../classArgusSamples_1_1TimeValue.html#a3972ff088b804cf4f3bfa9ffb4f0f89a',1,'ArgusSamples::TimeValue']]], + ['operator_3d',['operator=',['../classArgusSamples_1_1ConditionVariable.html#ac6af05bee1801719ee03814d05624792',1,'ArgusSamples::ConditionVariable::operator=()'],['../classArgusSamples_1_1Mutex.html#a95789911c1cef4f73933151bd2c77298',1,'ArgusSamples::Mutex::operator=()'],['../classArgusSamples_1_1ScopedMutex.html#ae7881ef122c0b557947e6067782612b5',1,'ArgusSamples::ScopedMutex::operator=()'],['../classArgusSamples_1_1ScopedGuard.html#a91be247c5cf6f33da670efd051644430',1,'ArgusSamples::ScopedGuard::operator=()'],['../classArgusSamples_1_1GstUnrefer.html#a0c331e4c4e592f76b3a91852b32040b9',1,'ArgusSamples::GstUnrefer::operator=()'],['../classArgusSamples_1_1Dispatcher.html#a56ffac0706f9ac0b5a61be64534cdb44',1,'ArgusSamples::Dispatcher::operator=()'],['../classArgusSamples_1_1PerfTracker.html#a1a14f727ae3642b6c7ccc8d7cf6ba24f',1,'ArgusSamples::PerfTracker::operator=()'],['../classArgusSamples_1_1Composer.html#ac0f3d88a285a429f5d5ae0d106712dd6',1,'ArgusSamples::Composer::operator=()']]], + ['operator_3d_3d',['operator==',['../classArgusSamples_1_1TimeValue.html#a0768396d059d79fddd55b30fbd016149',1,'ArgusSamples::TimeValue']]], + ['operator_3e',['operator>',['../classArgusSamples_1_1TimeValue.html#aca5932ea45df54d1e9562c8754d05dc7',1,'ArgusSamples::TimeValue']]], + ['operator_3e_3d',['operator>=',['../classArgusSamples_1_1TimeValue.html#a702fe5f2eb2a990dee5b598d39d69625',1,'ArgusSamples::TimeValue']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_70.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_70.html new file mode 100644 index 0000000..0340151 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_70.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_70.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_70.js new file mode 100644 index 0000000..41bb23f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_70.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['pause',['pause',['../classArgusSamples_1_1VideoPipeline.html#aa82f8ea43a91f20faaf4b157e4e7eec6',1,'ArgusSamples::VideoPipeline']]], + ['pausedisplay',['pauseDisplay',['../classArgusSamples_1_1GalleryItem.html#ae118cb11753dab241d4a054f92045645',1,'ArgusSamples::GalleryItem::pauseDisplay()'],['../classArgusSamples_1_1GalleryItemVideo.html#a7be59949c3564749b290421b82af340f',1,'ArgusSamples::GalleryItemVideo::pauseDisplay()'],['../classArgusSamples_1_1GalleryThread.html#af93aade75f8ba7ddf7c5d07ccefb6123',1,'ArgusSamples::GalleryThread::pauseDisplay()']]], + ['perftracker',['PerfTracker',['../classArgusSamples_1_1PerfTracker.html',1,'ArgusSamples']]], + ['perftracker',['PerfTracker',['../classArgusSamples_1_1PerfTracker.html#a5d6e000ef61a1e6fb1b4076d7b245f41',1,'ArgusSamples::PerfTracker::PerfTracker()'],['../classArgusSamples_1_1PerfTracker.html#af0613429b5c25db088c43a35742f4e3c',1,'ArgusSamples::PerfTracker::PerfTracker(const PerfTracker &)']]], + ['perftracker_2ecpp',['PerfTracker.cpp',['../PerfTracker_8cpp.html',1,'']]], + ['perftracker_2eh',['PerfTracker.h',['../PerfTracker_8h.html',1,'']]], + ['previtem',['prevItem',['../classArgusSamples_1_1TaskGallery.html#a19f1b79ab1d8b6b6c5738a5e05b6de54',1,'ArgusSamples::TaskGallery::prevItem()'],['../classArgusSamples_1_1AppModuleGallery.html#a354e056d93f7de8993c00ee213052ea3',1,'ArgusSamples::AppModuleGallery::prevItem()']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_71.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_71.html new file mode 100644 index 0000000..b4dc1e6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_71.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_71.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_71.js new file mode 100644 index 0000000..d3f907d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_71.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['quit',['quit',['../classArgusSamples_1_1AppModuleGeneric.html#a693fd4647e4946cdc8307293d4f91325',1,'ArgusSamples::AppModuleGeneric']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_72.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_72.html new file mode 100644 index 0000000..0ab18d6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_72.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_72.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_72.js new file mode 100644 index 0000000..3751cab --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_72.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['registerobserver',['registerObserver',['../classArgusSamples_1_1Dispatcher.html#a63a676332f2a2c5b37a2a24da06c192e',1,'ArgusSamples::Dispatcher::registerObserver(Argus::IDenoiseSettings *iDenoiseSettings)'],['../classArgusSamples_1_1Dispatcher.html#a428e69f84fde8688fdc65a0ed93022f1',1,'ArgusSamples::Dispatcher::registerObserver(Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings)'],['../classArgusSamples_1_1Dispatcher.html#a88c686e55ccf45d6258ac9457b9c5e30',1,'ArgusSamples::Dispatcher::registerObserver(Argus::ISourceSettings *iSourceSettings)'],['../classArgusSamples_1_1Dispatcher.html#ab2339e709650990b7ebf75941a079ed0',1,'ArgusSamples::Dispatcher::registerObserver(Argus::IAutoControlSettings *iAutoControlSettings)'],['../classArgusSamples_1_1Dispatcher.html#a1c98d830f43ea8d9929699b1d7c5a26b',1,'ArgusSamples::Dispatcher::registerObserver(Argus::Ext::IDeFogSettings *iDeFogSettings)']]], + ['release',['release',['../classArgusSamples_1_1GstUnrefer.html#a9b2eff4bd286c7fcf831aeacef24b29b',1,'ArgusSamples::GstUnrefer']]], + ['renderstreams',['renderStreams',['../classArgusSamples_1_1Composer.html#a20dcb7e93a96ad8168a11375cee520b7',1,'ArgusSamples::Composer']]], + ['reset',['reset',['../classArgusSamples_1_1TrackedUniqueObj.html#a57d12be3f9a54f78dadb193e731c434c',1,'ArgusSamples::TrackedUniqueObj']]], + ['restartactiverequests',['restartActiveRequests',['../classArgusSamples_1_1Dispatcher.html#aeb6abbf009db4153c69a8b81fe1258a8',1,'ArgusSamples::Dispatcher']]], + ['restartstreams',['restartStreams',['../classArgusSamples_1_1TaskMultiExposure.html#a82d38086037bcaf8f871787b73351af5',1,'ArgusSamples::TaskMultiExposure::restartStreams()'],['../classArgusSamples_1_1TaskMultiSession.html#ab9738c9bae9dcbf2a6dfc7c205c48cda',1,'ArgusSamples::TaskMultiSession::restartStreams()'],['../classArgusSamples_1_1TaskStillCapture.html#a30c6aa5eede194e6cb811ceb6d52f861',1,'ArgusSamples::TaskStillCapture::restartStreams()'],['../classArgusSamples_1_1TaskVideoRecord.html#acf4dffcb3c5808142b4e5c38ac3ed01a',1,'ArgusSamples::TaskVideoRecord::restartStreams()']]], + ['rewind',['rewind',['../classArgusSamples_1_1VideoPipeline.html#a4946203b8180205f9c233a26d1c513ab',1,'ArgusSamples::VideoPipeline::rewind()'],['../classArgusSamples_1_1GalleryItem.html#a4e88c325e615b80de45ac5a6e6cbb15e',1,'ArgusSamples::GalleryItem::rewind()'],['../classArgusSamples_1_1GalleryItemVideo.html#ae4dd8de2e205ca1127010064c819e554',1,'ArgusSamples::GalleryItemVideo::rewind()'],['../classArgusSamples_1_1GalleryThread.html#ae0a05b7fa509ae2f2558648d0bbe37dd',1,'ArgusSamples::GalleryThread::rewind()'],['../classArgusSamples_1_1TaskGallery.html#a1317a8b851490342c1ee1332f21cc4cf',1,'ArgusSamples::TaskGallery::rewind()'],['../classArgusSamples_1_1AppModuleGallery.html#a7d91831eb06daea4823e35c0ca9575f9',1,'ArgusSamples::AppModuleGallery::rewind()']]], + ['run',['run',['../classArgusSamples_1_1App.html#aa1ec1f82360ef4cf873f2af7c7cd3df5',1,'ArgusSamples::App']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_73.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_73.html new file mode 100644 index 0000000..1ec8f17 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_73.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_73.js new file mode 100644 index 0000000..d785118 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_73.js @@ -0,0 +1,62 @@ +var searchData= +[ + ['saveconfig',['saveConfig',['../classArgusSamples_1_1AppModuleGeneric.html#ae473bb5c74a2d656a3c986ec7cc1bc62',1,'ArgusSamples::AppModuleGeneric::saveConfig()'],['../namespaceArgusSamples.html#a5486dd80a389008bdffdc827e841f027',1,'ArgusSamples::saveConfig()']]], + ['scopedguard',['ScopedGuard',['../classArgusSamples_1_1ScopedGuard.html',1,'ArgusSamples']]], + ['scopedguard',['ScopedGuard',['../classArgusSamples_1_1ScopedGuard.html#a712165da779d24f9601249b95661e29a',1,'ArgusSamples::ScopedGuard::ScopedGuard(T *object, ActionType action)'],['../classArgusSamples_1_1ScopedGuard.html#af4b3c93fc7b1393745ad5a3294f478f0',1,'ArgusSamples::ScopedGuard::ScopedGuard()'],['../classArgusSamples_1_1ScopedGuard.html#a637d3f340f8ecbbaf5cd464a4d042321',1,'ArgusSamples::ScopedGuard::ScopedGuard(ScopedGuard &other)']]], + ['scopedguard_2eh',['ScopedGuard.h',['../ScopedGuard_8h.html',1,'']]], + ['scopedmutex',['ScopedMutex',['../classArgusSamples_1_1ScopedMutex.html',1,'ArgusSamples']]], + ['scopedmutex',['ScopedMutex',['../classArgusSamples_1_1ScopedMutex.html#a353e140f6de85084e4faeee3c3085133',1,'ArgusSamples::ScopedMutex::ScopedMutex(Mutex &mutex)'],['../classArgusSamples_1_1ScopedMutex.html#a53e9e3ff7db21670b51c6fecf8d34165',1,'ArgusSamples::ScopedMutex::ScopedMutex()'],['../classArgusSamples_1_1ScopedMutex.html#aad4e52daec1dd937ffd6c632eb646258',1,'ArgusSamples::ScopedMutex::ScopedMutex(ScopedMutex &other)']]], + ['sectype',['SecType',['../classArgusSamples_1_1TimeValue.html#ad74a2e3f2e6ddc43b4e386bca6febfb5',1,'ArgusSamples::TimeValue']]], + ['session',['Session',['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#ae0e240209377a03fdee6b277e18592ef',1,'ArgusSamples::TaskMultiSession::Session']]], + ['session',['Session',['../classArgusSamples_1_1TaskMultiSession_1_1Session.html',1,'ArgusSamples::TaskMultiSession']]], + ['session_5fevent_5fclose_5fdone',['SESSION_EVENT_CLOSE_DONE',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea4d1ee9d07bacba26206e9b1ceecefb42',1,'ArgusSamples']]], + ['session_5fevent_5fclose_5frequested',['SESSION_EVENT_CLOSE_REQUESTED',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aeaab0a9cde2374642cea90ff6ec293ddb1',1,'ArgusSamples']]], + ['session_5fevent_5fflush_5fdone',['SESSION_EVENT_FLUSH_DONE',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aeaa03f0ff521b8de0101807fe3c6d098b8',1,'ArgusSamples']]], + ['session_5fevent_5fframe_5fcount',['SESSION_EVENT_FRAME_COUNT',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aeac4a2488f7df844d47e3c318fcf081cf9',1,'ArgusSamples']]], + ['session_5fevent_5fframe_5fperiod',['SESSION_EVENT_FRAME_PERIOD',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea801b89f6348c40982d02460be47ecfd1',1,'ArgusSamples']]], + ['session_5fevent_5fissue_5fcapture',['SESSION_EVENT_ISSUE_CAPTURE',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea8ea1134833437dd0fe2f3b580d0571be',1,'ArgusSamples']]], + ['session_5fevent_5frequest_5flatency',['SESSION_EVENT_REQUEST_LATENCY',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea8f0bc14f9a47211478c30cd558451f93',1,'ArgusSamples']]], + ['session_5fevent_5frequest_5freceived',['SESSION_EVENT_REQUEST_RECEIVED',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea147fd2ad27b15c2e2e878223ddbcf4b7',1,'ArgusSamples']]], + ['session_5fevent_5ftask_5fstart',['SESSION_EVENT_TASK_START',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea85445eefb47dca84b24e3975771ff831',1,'ArgusSamples']]], + ['sessionevent',['SessionEvent',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5ae',1,'ArgusSamples']]], + ['sessionperftracker',['SessionPerfTracker',['../classArgusSamples_1_1SessionPerfTracker.html',1,'ArgusSamples']]], + ['sessionperftracker',['SessionPerfTracker',['../classArgusSamples_1_1SessionPerfTracker.html#a727415e1a9b4497fad223d9b04ba49df',1,'ArgusSamples::SessionPerfTracker']]], + ['set',['set',['../classArgusSamples_1_1GstUnrefer.html#ac92a1e4773d5bf886ee3e77af0e33a7e',1,'ArgusSamples::GstUnrefer']]], + ['setfrommsec',['setFromMSec',['../classArgusSamples_1_1TimeValue.html#a476565005bdbd80104587686b1047faf',1,'ArgusSamples::TimeValue']]], + ['setfromnsec',['setFromNSec',['../classArgusSamples_1_1TimeValue.html#ad113b9f2d59c5d14dd04bd83fe4c1b59',1,'ArgusSamples::TimeValue']]], + ['setfromsec',['setFromSec',['../classArgusSamples_1_1TimeValue.html#a5da60aaf65e0f12bd7fe2cffb3b26858',1,'ArgusSamples::TimeValue']]], + ['setfromusec',['setFromUSec',['../classArgusSamples_1_1TimeValue.html#a5ab1368938f245318fca2aea9bb6bcb9',1,'ArgusSamples::TimeValue']]], + ['setsession',['setSession',['../classArgusSamples_1_1SessionPerfTracker.html#a261fa1374330f3b553253354c31d1057',1,'ArgusSamples::SessionPerfTracker']]], + ['setstreamactive',['setStreamActive',['../classArgusSamples_1_1Composer.html#a42b34192fe14c8073d586661b1a22dfa',1,'ArgusSamples::Composer']]], + ['setstreamaspectratio',['setStreamAspectRatio',['../classArgusSamples_1_1Composer.html#a112f1fdcda5e34fa562099407196e13a',1,'ArgusSamples::Composer::setStreamAspectRatio()'],['../classArgusSamples_1_1StreamConsumer.html#aa31559d4aac5d964fc7a16fade758d1f',1,'ArgusSamples::StreamConsumer::setStreamAspectRatio()']]], + ['setupforplayback',['setupForPlayback',['../classArgusSamples_1_1VideoPipeline.html#a30ecd44f5bfc3333d3595123b843bdb1',1,'ArgusSamples::VideoPipeline']]], + ['setupforrecording',['setupForRecording',['../classArgusSamples_1_1VideoPipeline.html#af6ca1a5d8153cad619812186ed11042c',1,'ArgusSamples::VideoPipeline']]], + ['shutdown',['shutdown',['../classArgusSamples_1_1ConditionVariable.html#a9e3e6eb9ba64faf0fc55617bfdb29f58',1,'ArgusSamples::ConditionVariable::shutdown()'],['../classArgusSamples_1_1Mutex.html#a1a2ce518248636494d06dfda61847818',1,'ArgusSamples::Mutex::shutdown()'],['../classArgusSamples_1_1Dispatcher.html#ae6b3f51394a03f158b1531ac58f50eec',1,'ArgusSamples::Dispatcher::shutdown()'],['../classArgusSamples_1_1ITask.html#a5891b29c51e0651bf870936a51af4bcb',1,'ArgusSamples::ITask::shutdown()'],['../classArgusSamples_1_1SessionPerfTracker.html#a2a72c6e76df636dcc2eff8b570f0748a',1,'ArgusSamples::SessionPerfTracker::shutdown()'],['../classArgusSamples_1_1GalleryItem.html#a91446eed2e58d2dd1f9d0ceeff841146',1,'ArgusSamples::GalleryItem::shutdown()'],['../classArgusSamples_1_1GalleryItemImage.html#a092f74303994334648c53ad0d2ecb191',1,'ArgusSamples::GalleryItemImage::shutdown()'],['../classArgusSamples_1_1GalleryItemVideo.html#a3282a22aff50e94472d03da783d8230d',1,'ArgusSamples::GalleryItemVideo::shutdown()'],['../classArgusSamples_1_1GalleryThread.html#a7b4e218670d8df0c3b3f9772eff20c20',1,'ArgusSamples::GalleryThread::shutdown()'],['../classArgusSamples_1_1TaskGallery.html#a17674ab89f90986e43e52c65d2a49d8f',1,'ArgusSamples::TaskGallery::shutdown()'],['../classArgusSamples_1_1TaskMultiExposure.html#a6a5b8655485040985cebfb51d8e63579',1,'ArgusSamples::TaskMultiExposure::shutdown()'],['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#a5c88a460519f0f4b707fad17e97cb1de',1,'ArgusSamples::TaskMultiExposure::ExpLevel::shutdown()'],['../classArgusSamples_1_1TaskMultiSession.html#a8a8e67e9603566b69105357d0c396205',1,'ArgusSamples::TaskMultiSession::shutdown()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a4bc691025d80a2bbf85276824c807138',1,'ArgusSamples::TaskMultiSession::Session::shutdown()'],['../classArgusSamples_1_1TaskStillCapture.html#a5484e90bf1dc608c385dea11d547a90a',1,'ArgusSamples::TaskStillCapture::shutdown()'],['../classArgusSamples_1_1TaskVideoRecord.html#a71f6add4abdfb25a602429647a01eba1',1,'ArgusSamples::TaskVideoRecord::shutdown()'],['../classArgusSamples_1_1Composer.html#aef2e50e7322725b391fb04d6bb6483c0',1,'ArgusSamples::Composer::shutdown()'],['../classArgusSamples_1_1StreamConsumer.html#a1594213ed82947225de4d0db8bfe2304',1,'ArgusSamples::StreamConsumer::shutdown()'],['../classArgusSamples_1_1CameraApp.html#ac4f8f868f7e5b072e8ed359cae5d1006',1,'ArgusSamples::CameraApp::shutdown()'],['../classArgusSamples_1_1AppModuleCapture.html#aac8c08cfcd50bb639025dab4ef16a40a',1,'ArgusSamples::AppModuleCapture::shutdown()'],['../classArgusSamples_1_1App.html#adfc951e6ce4ef00bb34e8f22d251c574',1,'ArgusSamples::App::shutdown()'],['../classArgusSamples_1_1AppModuleGeneric.html#a879857ca8eb91a46984f5bea7c7126e8',1,'ArgusSamples::AppModuleGeneric::shutdown()'],['../classArgusSamples_1_1IAppModule.html#a21b3ed7a5f65dfd7aebd5ebbc966cc98',1,'ArgusSamples::IAppModule::shutdown()'],['../classArgusSamples_1_1AppModuleGallery.html#a171a0b37be53786f32b328883a60b8e9',1,'ArgusSamples::AppModuleGallery::shutdown()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a2909e07e4fda0bdfd738e51d73c2de3c',1,'ArgusSamples::AppModuleMultiExposure::shutdown()'],['../classArgusSamples_1_1AppModuleMultiSession.html#abba5483871d8bacfc0702daf4f1346c8',1,'ArgusSamples::AppModuleMultiSession::shutdown()'],['../classArgusSamples_1_1AppModuleVideo.html#a3e1c7bf820f1a84ecf4e0e88dc77ed54',1,'ArgusSamples::AppModuleVideo::shutdown()']]], + ['shutdownexplevels',['shutdownExpLevels',['../classArgusSamples_1_1TaskMultiExposure.html#a37a93c8cca9ef03c55c1e7adf9ed8782',1,'ArgusSamples::TaskMultiExposure']]], + ['shutdownsessions',['shutdownSessions',['../classArgusSamples_1_1TaskMultiSession.html#ae3429057c7a5c302d234de0e96f73727',1,'ArgusSamples::TaskMultiSession']]], + ['signal',['signal',['../classArgusSamples_1_1ConditionVariable.html#a958b3ea988ad62605358c91dcf5f8fee',1,'ArgusSamples::ConditionVariable']]], + ['sourcesettingsobserver',['SourceSettingsObserver',['../classArgusSamples_1_1SourceSettingsObserver.html#a3c4f1919efac6e8e4da69faf5e1169f8',1,'ArgusSamples::SourceSettingsObserver']]], + ['sourcesettingsobserver',['SourceSettingsObserver',['../classArgusSamples_1_1SourceSettingsObserver.html',1,'ArgusSamples']]], + ['start',['start',['../classArgusSamples_1_1VideoPipeline.html#a91f957052743673835d39fcfdb91c13a',1,'ArgusSamples::VideoPipeline::start()'],['../classArgusSamples_1_1ITask.html#a80bafe246911afeb08d21c6d33f9cade',1,'ArgusSamples::ITask::start()'],['../classArgusSamples_1_1GalleryThread.html#a9a3bdf0b1382042db9e98799b3c5d6d9',1,'ArgusSamples::GalleryThread::start()'],['../classArgusSamples_1_1TaskGallery.html#aa34c7e9ce5f6b906c0c56fb434c02352',1,'ArgusSamples::TaskGallery::start()'],['../classArgusSamples_1_1TaskMultiExposure.html#a98dfbb03d0cb913f118f60c4e491d428',1,'ArgusSamples::TaskMultiExposure::start()'],['../classArgusSamples_1_1TaskMultiSession.html#ae7d2daea71e6ab806cb39c857e6ea0b2',1,'ArgusSamples::TaskMultiSession::start()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a3c81c9c3858b95bfe2455f84230eaa48',1,'ArgusSamples::TaskMultiSession::Session::start()'],['../classArgusSamples_1_1TaskStillCapture.html#a54427c90d47e216fc5daeb715afee224',1,'ArgusSamples::TaskStillCapture::start()'],['../classArgusSamples_1_1TaskVideoRecord.html#ae62a5bdab9592462d9398812edead5df',1,'ArgusSamples::TaskVideoRecord::start()'],['../classArgusSamples_1_1CameraApp.html#a1241e6d4ede1c297d8ad9edb0afbd5cf',1,'ArgusSamples::CameraApp::start()'],['../classArgusSamples_1_1AppModuleCapture.html#afa70c2e8d828660a6e64e326d3a6c2e2',1,'ArgusSamples::AppModuleCapture::start()'],['../classArgusSamples_1_1App.html#a53fa8b2aaf2f425832ba2526edca0f6f',1,'ArgusSamples::App::start()'],['../classArgusSamples_1_1AppModuleGeneric.html#a380e94f57e73c5de69a0037a514f89b4',1,'ArgusSamples::AppModuleGeneric::start()'],['../classArgusSamples_1_1IAppModule.html#a6c52e1cfeb5ea97703b4307b4e9c15fa',1,'ArgusSamples::IAppModule::start()'],['../classArgusSamples_1_1AppModuleGallery.html#a1a60cfc88aad84c85b6274bce727fd83',1,'ArgusSamples::AppModuleGallery::start()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a27f8598d608b1d84341c5aff4721f8ab',1,'ArgusSamples::AppModuleMultiExposure::start()'],['../classArgusSamples_1_1AppModuleMultiSession.html#ac8fde2461d384d35aec117876f88fa66',1,'ArgusSamples::AppModuleMultiSession::start()'],['../classArgusSamples_1_1AppModuleVideo.html#a728bc8c47f4f959a80b200dab1faaf27',1,'ArgusSamples::AppModuleVideo::start()']]], + ['startdisplay',['startDisplay',['../classArgusSamples_1_1GalleryItem.html#a614a5c10f4f6cd7225aaaa89d6fe3f2e',1,'ArgusSamples::GalleryItem::startDisplay()'],['../classArgusSamples_1_1GalleryItemVideo.html#a8e43d21e16adf5e9ca3f5e885e0fc136',1,'ArgusSamples::GalleryItemVideo::startDisplay()'],['../classArgusSamples_1_1GalleryThread.html#a4687029627813897584f3625f77b6319',1,'ArgusSamples::GalleryThread::startDisplay()']]], + ['startrecording',['startRecording',['../classArgusSamples_1_1TaskVideoRecord.html#a505e72006639bb21d34b6be3f3f83f33',1,'ArgusSamples::TaskVideoRecord']]], + ['startrepeat',['startRepeat',['../classArgusSamples_1_1Dispatcher.html#a2696f47fc256f0c057d45eb8f3502c08',1,'ArgusSamples::Dispatcher']]], + ['startrepeatburst',['startRepeatBurst',['../classArgusSamples_1_1Dispatcher.html#aae0e595eb78bff9283d2edbb262fd81f',1,'ArgusSamples::Dispatcher']]], + ['still',['still',['../classArgusSamples_1_1AppModuleCapture.html#a11e4865a2b387cb1f28f64b70c3bcb17',1,'ArgusSamples::AppModuleCapture']]], + ['still_5ffile_5ftype_5fheaderless',['STILL_FILE_TYPE_HEADERLESS',['../namespaceArgusSamples.html#a96301db36b4f4acefb8cf04a7211aa11aa7900da32e45d477ae934bcef77095af',1,'ArgusSamples']]], + ['still_5ffile_5ftype_5fjpg',['STILL_FILE_TYPE_JPG',['../namespaceArgusSamples.html#a96301db36b4f4acefb8cf04a7211aa11a49e30043e64dde815f00aa6c028840e9',1,'ArgusSamples']]], + ['stillcapture_2ecpp',['StillCapture.cpp',['../StillCapture_8cpp.html',1,'']]], + ['stillcapture_2eh',['StillCapture.h',['../StillCapture_8h.html',1,'']]], + ['stillfiletype',['StillFileType',['../namespaceArgusSamples.html#a96301db36b4f4acefb8cf04a7211aa11',1,'ArgusSamples']]], + ['stop',['stop',['../classArgusSamples_1_1VideoPipeline.html#a997cc043b35470c89b5448563c39b79f',1,'ArgusSamples::VideoPipeline::stop()'],['../classArgusSamples_1_1ITask.html#ab3d17813e200c57cb68f048604a2ea4a',1,'ArgusSamples::ITask::stop()'],['../classArgusSamples_1_1GalleryThread.html#af7634b703504519475fa5c930ad6c450',1,'ArgusSamples::GalleryThread::stop()'],['../classArgusSamples_1_1TaskGallery.html#a302cd359adb86edadb98b1c52e7e7d37',1,'ArgusSamples::TaskGallery::stop()'],['../classArgusSamples_1_1TaskMultiExposure.html#a0c85b9544c71cd4e76c4e0766341e64f',1,'ArgusSamples::TaskMultiExposure::stop()'],['../classArgusSamples_1_1TaskMultiSession.html#ace05514f0f4fb17010c1a6d45bfbb69c',1,'ArgusSamples::TaskMultiSession::stop()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a1d05c20759173b7a1b55bf15c8636f47',1,'ArgusSamples::TaskMultiSession::Session::stop()'],['../classArgusSamples_1_1TaskStillCapture.html#a482a9eb34a137c5dde1f04d716e83f7c',1,'ArgusSamples::TaskStillCapture::stop()'],['../classArgusSamples_1_1TaskVideoRecord.html#abf26bc879d4a9cbe64969ec2787dac28',1,'ArgusSamples::TaskVideoRecord::stop()'],['../classArgusSamples_1_1AppModuleCapture.html#aea5578bbf4c91a35eea15d97db6f2be9',1,'ArgusSamples::AppModuleCapture::stop()'],['../classArgusSamples_1_1AppModuleGeneric.html#a98b3c24d0e71c18262e7ba4244f10acd',1,'ArgusSamples::AppModuleGeneric::stop()'],['../classArgusSamples_1_1IAppModule.html#a3df2a5c47957dfd4fe90f3d2e6b681df',1,'ArgusSamples::IAppModule::stop()'],['../classArgusSamples_1_1AppModuleGallery.html#a0cdca814f7ac9359dcebb540dad1d70a',1,'ArgusSamples::AppModuleGallery::stop()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a2e1f55aa31be327744406addc29d28c0',1,'ArgusSamples::AppModuleMultiExposure::stop()'],['../classArgusSamples_1_1AppModuleMultiSession.html#aa5abd6d2efc9125b3bddcda0d6c28587',1,'ArgusSamples::AppModuleMultiSession::stop()'],['../classArgusSamples_1_1AppModuleVideo.html#ac8a1ccf48d756142df5243c64e95b65d',1,'ArgusSamples::AppModuleVideo::stop()']]], + ['stoprecording',['stopRecording',['../classArgusSamples_1_1TaskVideoRecord.html#aaef17b0be6940cf48941ceb228460d9e',1,'ArgusSamples::TaskVideoRecord']]], + ['stoprepeat',['stopRepeat',['../classArgusSamples_1_1Dispatcher.html#ae936f648a632695a64d928e4f86a26b0',1,'ArgusSamples::Dispatcher']]], + ['stream',['Stream',['../classArgusSamples_1_1Composer_1_1Stream.html',1,'ArgusSamples::Composer']]], + ['stream',['Stream',['../classArgusSamples_1_1Composer_1_1Stream.html#adca544a97adbcccced6bce22d7981da3',1,'ArgusSamples::Composer::Stream']]], + ['streamconsumer',['StreamConsumer',['../classArgusSamples_1_1StreamConsumer.html',1,'ArgusSamples']]], + ['streamconsumer',['StreamConsumer',['../classArgusSamples_1_1StreamConsumer.html#add0fc3248eb7febf993e9ffd9e7f535e',1,'ArgusSamples::StreamConsumer::StreamConsumer(EGLStreamKHR eglStream)'],['../classArgusSamples_1_1StreamConsumer.html#a4222e51fa0eb62bd83e8df799abfa73b',1,'ArgusSamples::StreamConsumer::StreamConsumer()']]], + ['streamconsumer_2ecpp',['StreamConsumer.cpp',['../StreamConsumer_8cpp.html',1,'']]], + ['streamconsumer_2eh',['StreamConsumer.h',['../StreamConsumer_8h.html',1,'']]], + ['streamlist',['StreamList',['../classArgusSamples_1_1Composer.html#afc7cca44d4eb196e7005062af32cc5ff',1,'ArgusSamples::Composer']]], + ['supportsextension',['supportsExtension',['../classArgusSamples_1_1Dispatcher.html#abd6a0f1ac8bc8c3567aa7896a5426f1d',1,'ArgusSamples::Dispatcher']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_74.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_74.html new file mode 100644 index 0000000..fdc6589 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_74.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_74.js new file mode 100644 index 0000000..49953cb --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_74.js @@ -0,0 +1,41 @@ +var searchData= +[ + ['taskgallery',['TaskGallery',['../classArgusSamples_1_1TaskGallery.html',1,'ArgusSamples']]], + ['taskgallery',['TaskGallery',['../classArgusSamples_1_1TaskGallery.html#aac353c627a932e20a15637b878569d72',1,'ArgusSamples::TaskGallery']]], + ['taskmultiexposure',['TaskMultiExposure',['../classArgusSamples_1_1TaskMultiExposure.html',1,'ArgusSamples']]], + ['taskmultiexposure',['TaskMultiExposure',['../classArgusSamples_1_1TaskMultiExposure.html#a908ce0135a570955d90fa1b301e220fb',1,'ArgusSamples::TaskMultiExposure']]], + ['taskmultisession',['TaskMultiSession',['../classArgusSamples_1_1TaskMultiSession.html#a360402fe92889c722c70bc220b976fc6',1,'ArgusSamples::TaskMultiSession']]], + ['taskmultisession',['TaskMultiSession',['../classArgusSamples_1_1TaskMultiSession.html',1,'ArgusSamples']]], + ['taskstillcapture',['TaskStillCapture',['../classArgusSamples_1_1TaskStillCapture.html',1,'ArgusSamples']]], + ['taskstillcapture',['TaskStillCapture',['../classArgusSamples_1_1TaskStillCapture.html#a76b4bb0a3b7597c8bc801a3b3ac1bd97',1,'ArgusSamples::TaskStillCapture']]], + ['taskvideorecord',['TaskVideoRecord',['../classArgusSamples_1_1TaskVideoRecord.html#aac1b183a6af7d47800988de1f3746cac',1,'ArgusSamples::TaskVideoRecord']]], + ['taskvideorecord',['TaskVideoRecord',['../classArgusSamples_1_1TaskVideoRecord.html',1,'ArgusSamples']]], + ['threadexecute',['threadExecute',['../classArgusSamples_1_1EventThread.html#ae6815a4aa478333976c608cec5cfbe6f',1,'ArgusSamples::EventThread::threadExecute()'],['../classArgusSamples_1_1GalleryThread.html#a1446f604f7ebd0f4b8007615c1cc37c5',1,'ArgusSamples::GalleryThread::threadExecute()'],['../classArgusSamples_1_1Composer.html#ac59c900b72da84a9e90f72a6b2d7f8e4',1,'ArgusSamples::Composer::threadExecute()']]], + ['threadinitialize',['threadInitialize',['../classArgusSamples_1_1EventThread.html#a1ca2fcbe920c3c5ee7802fe92352a512',1,'ArgusSamples::EventThread::threadInitialize()'],['../classArgusSamples_1_1GalleryThread.html#a48ab0860cfc6fb0ed83c92343583d5be',1,'ArgusSamples::GalleryThread::threadInitialize()'],['../classArgusSamples_1_1Composer.html#a18a108f1f95d8f07a43f578d4934f03d',1,'ArgusSamples::Composer::threadInitialize()']]], + ['threadshutdown',['threadShutdown',['../classArgusSamples_1_1EventThread.html#ab638abeda6897a6154b6e6c0a495ac47',1,'ArgusSamples::EventThread::threadShutdown()'],['../classArgusSamples_1_1GalleryThread.html#abe95500abd87e88f74976622242fb7c0',1,'ArgusSamples::GalleryThread::threadShutdown()'],['../classArgusSamples_1_1Composer.html#aa8ce4888acda5bf8c5fe412d581f8061',1,'ArgusSamples::Composer::threadShutdown()']]], + ['timevalue',['TimeValue',['../classArgusSamples_1_1TimeValue.html#a1e32ff1527702a162d08de8aaffb6fe7',1,'ArgusSamples::TimeValue::TimeValue()'],['../classArgusSamples_1_1TimeValue.html#abb3d70c3c2e5ccd0bda30ebc0e2ed946',1,'ArgusSamples::TimeValue::TimeValue(NSecType value)']]], + ['timevalue',['TimeValue',['../classArgusSamples_1_1TimeValue.html',1,'ArgusSamples']]], + ['tocyclespersec',['toCyclesPerSec',['../classArgusSamples_1_1TimeValue.html#af9090b278527d319d996c70bc0a21704',1,'ArgusSamples::TimeValue']]], + ['todo_20list',['Todo List',['../todo.html',1,'']]], + ['toggle',['toggle',['../classArgusSamples_1_1VideoPipeline.html#a1533499b26cf33f84bf298ac752849d0',1,'ArgusSamples::VideoPipeline']]], + ['toggleplayback',['togglePlayBack',['../classArgusSamples_1_1GalleryItem.html#a942a777c507ceb8660b0522f04adb4ab',1,'ArgusSamples::GalleryItem::togglePlayBack()'],['../classArgusSamples_1_1GalleryItemVideo.html#a9da8cac83de3d8f74c2c18d73a3cb40c',1,'ArgusSamples::GalleryItemVideo::togglePlayBack()'],['../classArgusSamples_1_1GalleryThread.html#a9c4be9815c4d62786cd3fcfce31e5c8b',1,'ArgusSamples::GalleryThread::togglePlayBack()'],['../classArgusSamples_1_1TaskGallery.html#a39ea1cc7dece34a69b708f7b85dad8eb',1,'ArgusSamples::TaskGallery::togglePlayBack()'],['../classArgusSamples_1_1AppModuleGallery.html#adeabf7923495c1899a2b0d9d756cf500',1,'ArgusSamples::AppModuleGallery::togglePlayBack()']]], + ['togglerecording',['toggleRecording',['../classArgusSamples_1_1TaskVideoRecord.html#a96459f98102e91826def10d8ffeb767f',1,'ArgusSamples::TaskVideoRecord::toggleRecording()'],['../classArgusSamples_1_1AppModuleVideo.html#abca1250255406e50124741aaab73969d',1,'ArgusSamples::AppModuleVideo::toggleRecording()']]], + ['tomsec',['toMSec',['../classArgusSamples_1_1TimeValue.html#a79b43b5b0dcaed9323203e25aecde979',1,'ArgusSamples::TimeValue']]], + ['tonsec',['toNSec',['../classArgusSamples_1_1TimeValue.html#a72f2e4701ae67b9702e35709072bcff4',1,'ArgusSamples::TimeValue']]], + ['tosec',['toSec',['../classArgusSamples_1_1TimeValue.html#a3da2d1b4baa85cdd82849f60432a4d99',1,'ArgusSamples::TimeValue']]], + ['tousec',['toUSec',['../classArgusSamples_1_1TimeValue.html#a536e28ab949f4a38278c43f0b3bc51fa',1,'ArgusSamples::TimeValue']]], + ['track',['track',['../classArgusSamples_1_1Dispatcher.html#a6d32aac6ebe915a7b50fcec8722ad1d8',1,'ArgusSamples::Dispatcher::track(Argus::CaptureSession *session)'],['../classArgusSamples_1_1Dispatcher.html#ab4ce83bafd8a59a16ab1bb904810f3e1',1,'ArgusSamples::Dispatcher::track(Argus::Request *request)'],['../classArgusSamples_1_1Tracker.html#a114c7ca03b1075fc5c7a09d2d3e64487',1,'ArgusSamples::Tracker::track()']]], + ['trackeduniqueobj',['TrackedUniqueObj',['../classArgusSamples_1_1TrackedUniqueObj.html#aee7fad1d6e1f77007e18ac04eb9fc005',1,'ArgusSamples::TrackedUniqueObj']]], + ['trackeduniqueobj',['TrackedUniqueObj',['../classArgusSamples_1_1TrackedUniqueObj.html',1,'ArgusSamples']]], + ['trackeduniqueobj_3c_20argus_3a_3acapturesession_20_3e',['TrackedUniqueObj< Argus::CaptureSession >',['../classArgusSamples_1_1TrackedUniqueObj.html',1,'ArgusSamples']]], + ['trackeduniqueobj_3c_20argus_3a_3arequest_20_3e',['TrackedUniqueObj< Argus::Request >',['../classArgusSamples_1_1TrackedUniqueObj.html',1,'ArgusSamples']]], + ['trackeduniqueobject_2eh',['TrackedUniqueObject.h',['../TrackedUniqueObject_8h.html',1,'']]], + ['tracker',['Tracker',['../classArgusSamples_1_1Tracker.html',1,'ArgusSamples']]], + ['tracker_3c_20argus_3a_3acapturesession_20_3e',['Tracker< Argus::CaptureSession >',['../classArgusSamples_1_1Tracker.html',1,'ArgusSamples']]], + ['tracker_3c_20argus_3a_3arequest_20_3e',['Tracker< Argus::Request >',['../classArgusSamples_1_1Tracker.html',1,'ArgusSamples']]], + ['tracker_3c_20t_20_3e',['Tracker< T >',['../classArgusSamples_1_1TrackedUniqueObj.html#ae0338ea06b831b6b6a8e17ad0081a062',1,'ArgusSamples::TrackedUniqueObj']]], + ['type',['Type',['../classArgusSamples_1_1GalleryItem.html#a6bffae895927eb4b5331dd796018d087',1,'ArgusSamples::GalleryItem']]], + ['type_5fimage',['TYPE_IMAGE',['../classArgusSamples_1_1GalleryItem.html#a6bffae895927eb4b5331dd796018d087a3c56018385823873324e250ba649bddc',1,'ArgusSamples::GalleryItem']]], + ['type_5finvalid',['TYPE_INVALID',['../classArgusSamples_1_1GalleryItem.html#a6bffae895927eb4b5331dd796018d087a50c41f9c0e004e49a84da8129bf0b3a7',1,'ArgusSamples::GalleryItem']]], + ['type_5fvideo',['TYPE_VIDEO',['../classArgusSamples_1_1GalleryItem.html#a6bffae895927eb4b5331dd796018d087aba2eba8ee8c4e249b7d6f6ded2c32eba',1,'ArgusSamples::GalleryItem']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_75.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_75.html new file mode 100644 index 0000000..ab8455e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_75.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_75.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_75.js new file mode 100644 index 0000000..5702657 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_75.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['unbindstream',['unbindStream',['../classArgusSamples_1_1Composer.html#a6347dc6d9b4f5ee16ddda277f190ec86',1,'ArgusSamples::Composer']]], + ['unlock',['unlock',['../classArgusSamples_1_1Mutex.html#a8c8d914842c32cbff4b02c9649185a07',1,'ArgusSamples::Mutex']]], + ['unregisterobserver',['unregisterObserver',['../classArgusSamples_1_1Dispatcher.html#a9dc7c9645ab888e08c604b0a80649d7a',1,'ArgusSamples::Dispatcher']]], + ['untrack',['untrack',['../classArgusSamples_1_1Dispatcher.html#a48d68988b95e254f5dc285a666d871ed',1,'ArgusSamples::Dispatcher::untrack(Argus::CaptureSession *session)'],['../classArgusSamples_1_1Dispatcher.html#a9a52613319da907f82d77904ae37e188',1,'ArgusSamples::Dispatcher::untrack(Argus::Request *request)'],['../classArgusSamples_1_1Tracker.html#aeb9c7ae7c10822e57ca3f5ca63d6a729',1,'ArgusSamples::Tracker::untrack()']]], + ['usectype',['USecType',['../classArgusSamples_1_1TimeValue.html#a93d42a4029f30b323e8ff2a6f35bbdd2',1,'ArgusSamples::TimeValue']]], + ['util_2ecpp',['Util.cpp',['../Util_8cpp.html',1,'']]], + ['util_2eh',['Util.h',['../Util_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_76.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_76.html new file mode 100644 index 0000000..0ff5edd --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_76.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_76.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_76.js new file mode 100644 index 0000000..9ffe31c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_76.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['validateoutputpath',['validateOutputPath',['../namespaceArgusSamples.html#af8203c2aa25588f5ca141cdddbceaa9f',1,'ArgusSamples']]], + ['video',['video',['../classArgusSamples_1_1AppModuleVideo.html#aef412736c034c38c3ea6d2ed105def80',1,'ArgusSamples::AppModuleVideo']]], + ['video_5favc_5fprofile_5fbaseline',['VIDEO_AVC_PROFILE_BASELINE',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3faf0b38c9c2b229e01928efed9874000ed',1,'ArgusSamples::VideoPipeline']]], + ['video_5favc_5fprofile_5fextended',['VIDEO_AVC_PROFILE_EXTENDED',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3fa8e1647c2e4b49b5fa16dee42328342e1',1,'ArgusSamples::VideoPipeline']]], + ['video_5favc_5fprofile_5fhigh',['VIDEO_AVC_PROFILE_HIGH',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3fa10dae87844852a76bed1d03b067e8114',1,'ArgusSamples::VideoPipeline']]], + ['video_5favc_5fprofile_5fhigh10',['VIDEO_AVC_PROFILE_HIGH10',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3fac690b29d3c89a35c0075765766649c35',1,'ArgusSamples::VideoPipeline']]], + ['video_5favc_5fprofile_5fmain',['VIDEO_AVC_PROFILE_MAIN',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3fa2b4b56086e93ede0c2bb1222e5308ab9',1,'ArgusSamples::VideoPipeline']]], + ['video_5favc_5fprofile_5fmax',['VIDEO_AVC_PROFILE_MAX',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3fa23c6a37da7b5d8645ff10a030775dc23',1,'ArgusSamples::VideoPipeline']]], + ['video_5fbitrate_5f14m',['VIDEO_BITRATE_14M',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841aa62996f5027f2bf3ac43d79ac487e3b39',1,'ArgusSamples::VideoPipeline']]], + ['video_5fbitrate_5f20m',['VIDEO_BITRATE_20M',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841aac580e82a2fb87c4161e4bd88bf18db43',1,'ArgusSamples::VideoPipeline']]], + ['video_5fbitrate_5f4m',['VIDEO_BITRATE_4M',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841aa7883fd3daf5abb844075df13af719c1f',1,'ArgusSamples::VideoPipeline']]], + ['video_5fbitrate_5f8m',['VIDEO_BITRATE_8M',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841aa62ae052f1af1544a70d090eccd30f64f',1,'ArgusSamples::VideoPipeline']]], + ['video_5fbitrate_5fmax',['VIDEO_BITRATE_MAX',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841aa4a7e07724ddc165287a8332fb7d4fbc8',1,'ArgusSamples::VideoPipeline']]], + ['video_5ffile_5ftype_5f3gp',['VIDEO_FILE_TYPE_3GP',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94a311766661182b7e4e2ccfcec45371753',1,'ArgusSamples::VideoPipeline']]], + ['video_5ffile_5ftype_5favi',['VIDEO_FILE_TYPE_AVI',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94a39591f068de1259ab7fb508d5d3709a0',1,'ArgusSamples::VideoPipeline']]], + ['video_5ffile_5ftype_5fh265',['VIDEO_FILE_TYPE_H265',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94a0e0bae332edfbea095b24e66fc3b0081',1,'ArgusSamples::VideoPipeline']]], + ['video_5ffile_5ftype_5fmkv',['VIDEO_FILE_TYPE_MKV',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94ac87f7d31fed6e7333be25b305f5640ca',1,'ArgusSamples::VideoPipeline']]], + ['video_5ffile_5ftype_5fmp4',['VIDEO_FILE_TYPE_MP4',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94a0d71edc5f9212eff6496e6b1d88fe396',1,'ArgusSamples::VideoPipeline']]], + ['video_5fformat_5fh264',['VIDEO_FORMAT_H264',['../classArgusSamples_1_1VideoPipeline.html#a230816b2fbb715977081ef3626687989a72105cf323d104e225ec0105323f26f4',1,'ArgusSamples::VideoPipeline']]], + ['video_5fformat_5fh265',['VIDEO_FORMAT_H265',['../classArgusSamples_1_1VideoPipeline.html#a230816b2fbb715977081ef3626687989a8d944945a5327f75954d96c55bc02a0e',1,'ArgusSamples::VideoPipeline']]], + ['video_5fformat_5fvp8',['VIDEO_FORMAT_VP8',['../classArgusSamples_1_1VideoPipeline.html#a230816b2fbb715977081ef3626687989a15d1fdd7be8d72c43242ed3f2e1b6c15',1,'ArgusSamples::VideoPipeline']]], + ['video_5fformat_5fvp9',['VIDEO_FORMAT_VP9',['../classArgusSamples_1_1VideoPipeline.html#a230816b2fbb715977081ef3626687989a09c87bb02a23de15b216864dd4f26f8a',1,'ArgusSamples::VideoPipeline']]], + ['videoavcprofiletype',['VideoAvcProfileType',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3f',1,'ArgusSamples::VideoPipeline']]], + ['videobitrate',['VideoBitRate',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841a',1,'ArgusSamples::VideoPipeline']]], + ['videofiletype',['VideoFileType',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94',1,'ArgusSamples::VideoPipeline']]], + ['videoformat',['VideoFormat',['../classArgusSamples_1_1VideoPipeline.html#a230816b2fbb715977081ef3626687989',1,'ArgusSamples::VideoPipeline']]], + ['videopipeline',['VideoPipeline',['../classArgusSamples_1_1VideoPipeline.html',1,'ArgusSamples']]], + ['videopipeline',['VideoPipeline',['../classArgusSamples_1_1VideoPipeline.html#aaa2ffb6e7b9a3b85a007135d99fd5f90',1,'ArgusSamples::VideoPipeline']]], + ['videopipeline_2ecpp',['VideoPipeline.cpp',['../VideoPipeline_8cpp.html',1,'']]], + ['videopipeline_2eh',['VideoPipeline.h',['../VideoPipeline_8h.html',1,'']]], + ['videorecord_2ecpp',['VideoRecord.cpp',['../VideoRecord_8cpp.html',1,'']]], + ['videorecord_2eh',['VideoRecord.h',['../VideoRecord_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_77.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_77.html new file mode 100644 index 0000000..73323d3 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_77.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_77.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_77.js new file mode 100644 index 0000000..ab6de6a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_77.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['wait',['wait',['../classArgusSamples_1_1ConditionVariable.html#a920acd53e8542fecf770ef4caefed0c0',1,'ArgusSamples::ConditionVariable']]], + ['waitforevents',['waitForEvents',['../classArgusSamples_1_1Dispatcher.html#a86a3ac2e693c463d38ed00caee29f850',1,'ArgusSamples::Dispatcher']]], + ['waitforidle',['waitForIdle',['../classArgusSamples_1_1Dispatcher.html#ae963c69efb96293eaf52243efcbc3d9a',1,'ArgusSamples::Dispatcher']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_78.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_78.html new file mode 100644 index 0000000..10780d6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_78.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_78.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_78.js new file mode 100644 index 0000000..60ccf40 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_78.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['xmlconfig_2ecpp',['XMLConfig.cpp',['../XMLConfig_8cpp.html',1,'']]], + ['xmlconfig_2eh',['XMLConfig.h',['../XMLConfig_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_7e.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_7e.html new file mode 100644 index 0000000..63512c6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_7e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_7e.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_7e.js new file mode 100644 index 0000000..9451453 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/all_7e.js @@ -0,0 +1,44 @@ +var searchData= +[ + ['_7eapp',['~App',['../classArgusSamples_1_1App.html#a61915773426e7ae9c305e830530aac9a',1,'ArgusSamples::App']]], + ['_7eappmodulecapture',['~AppModuleCapture',['../classArgusSamples_1_1AppModuleCapture.html#a51b26e4cf8464a0bf36ff69d21c113a3',1,'ArgusSamples::AppModuleCapture']]], + ['_7eappmodulegallery',['~AppModuleGallery',['../classArgusSamples_1_1AppModuleGallery.html#a084b343dadbad89d8d10a7b4956cae1a',1,'ArgusSamples::AppModuleGallery']]], + ['_7eappmodulegeneric',['~AppModuleGeneric',['../classArgusSamples_1_1AppModuleGeneric.html#aa047df3df194915aea01f4739e91b0f8',1,'ArgusSamples::AppModuleGeneric']]], + ['_7eappmodulemultiexposure',['~AppModuleMultiExposure',['../classArgusSamples_1_1AppModuleMultiExposure.html#a33fe025a1c90ca2e949fb150997e307e',1,'ArgusSamples::AppModuleMultiExposure']]], + ['_7eappmodulemultisession',['~AppModuleMultiSession',['../classArgusSamples_1_1AppModuleMultiSession.html#a0c6bbc283c044f59648176e3a82e340f',1,'ArgusSamples::AppModuleMultiSession']]], + ['_7eappmodulevideo',['~AppModuleVideo',['../classArgusSamples_1_1AppModuleVideo.html#a154442f37e9b873859f5054826a58e57',1,'ArgusSamples::AppModuleVideo']]], + ['_7eautocontrolsettingsobserver',['~AutoControlSettingsObserver',['../classArgusSamples_1_1AutoControlSettingsObserver.html#a0dac4fd3b1f06b1c1a1d84d766d7f9bf',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['_7ecameraapp',['~CameraApp',['../classArgusSamples_1_1CameraApp.html#a85b0e0e1767e149334576b21cacb2155',1,'ArgusSamples::CameraApp']]], + ['_7ecomposer',['~Composer',['../classArgusSamples_1_1Composer.html#a050cccd08ca80c089cde8f9f4449a5cf',1,'ArgusSamples::Composer']]], + ['_7econditionvariable',['~ConditionVariable',['../classArgusSamples_1_1ConditionVariable.html#ace2d4aacbb463159a55d3d7b020e3e95',1,'ArgusSamples::ConditionVariable']]], + ['_7edefogsettingsobserver',['~DeFogSettingsObserver',['../classArgusSamples_1_1DeFogSettingsObserver.html#adf34aaf9e10b967eb431961fc34de8ed',1,'ArgusSamples::DeFogSettingsObserver']]], + ['_7edenoisesettingsobserver',['~DenoiseSettingsObserver',['../classArgusSamples_1_1DenoiseSettingsObserver.html#a57b255718468d39058c38296aa0f8f20',1,'ArgusSamples::DenoiseSettingsObserver']]], + ['_7edispatcher',['~Dispatcher',['../classArgusSamples_1_1Dispatcher.html#a2d9c6c41c85a0e9703f134ff2776bbf6',1,'ArgusSamples::Dispatcher']]], + ['_7eedgeenhancesettingsobserver',['~EdgeEnhanceSettingsObserver',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a0719c999568f2e6eba9f3594114ec795',1,'ArgusSamples::EdgeEnhanceSettingsObserver']]], + ['_7eeventthread',['~EventThread',['../classArgusSamples_1_1EventThread.html#a4d1286000b3de80da07f6b96265997be',1,'ArgusSamples::EventThread']]], + ['_7eexplevel',['~ExpLevel',['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#a9918b19ae429b43242d03604cd5fef01',1,'ArgusSamples::TaskMultiExposure::ExpLevel']]], + ['_7egalleryitem',['~GalleryItem',['../classArgusSamples_1_1GalleryItem.html#ac6923612e56a878f3c4de2c5bd62bf01',1,'ArgusSamples::GalleryItem']]], + ['_7egalleryitemimage',['~GalleryItemImage',['../classArgusSamples_1_1GalleryItemImage.html#a8bd7f7cb78371422f770561a0e5925ff',1,'ArgusSamples::GalleryItemImage']]], + ['_7egalleryitemvideo',['~GalleryItemVideo',['../classArgusSamples_1_1GalleryItemVideo.html#a4d65469c466cb637a01993e37fd8a006',1,'ArgusSamples::GalleryItemVideo']]], + ['_7egallerythread',['~GalleryThread',['../classArgusSamples_1_1GalleryThread.html#a29d83dc069e22de04832285d44c81cbd',1,'ArgusSamples::GalleryThread']]], + ['_7egstunrefer',['~GstUnrefer',['../classArgusSamples_1_1GstUnrefer.html#a18cafa4928ee25bb9d250fe2642eacb7',1,'ArgusSamples::GstUnrefer']]], + ['_7eiappmodule',['~IAppModule',['../classArgusSamples_1_1IAppModule.html#a7d396aa3025ba1258313af3626f5c83f',1,'ArgusSamples::IAppModule']]], + ['_7eiobserverforinterface',['~IObserverForInterface',['../classArgusSamples_1_1IObserverForInterface.html#ade91a1f29d84f78726246391d7925cf5',1,'ArgusSamples::IObserverForInterface']]], + ['_7eitask',['~ITask',['../classArgusSamples_1_1ITask.html#add9eda05dcee82060a10df177d8658fb',1,'ArgusSamples::ITask']]], + ['_7emutex',['~Mutex',['../classArgusSamples_1_1Mutex.html#aadb858bcd27edb91ed94de5dfcfb1d25',1,'ArgusSamples::Mutex']]], + ['_7eperftracker',['~PerfTracker',['../classArgusSamples_1_1PerfTracker.html#a4b9ea090694f1abf06bdbcd5b4e63812',1,'ArgusSamples::PerfTracker']]], + ['_7escopedguard',['~ScopedGuard',['../classArgusSamples_1_1ScopedGuard.html#aa051e79bdbbc9e0a85ee2f1dfa8a09ca',1,'ArgusSamples::ScopedGuard']]], + ['_7escopedmutex',['~ScopedMutex',['../classArgusSamples_1_1ScopedMutex.html#a5d2775e5093c3ea8f5fc6430263711a7',1,'ArgusSamples::ScopedMutex']]], + ['_7esession',['~Session',['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a8065e5ea2be7c99dbddccacd5dfe7938',1,'ArgusSamples::TaskMultiSession::Session']]], + ['_7esessionperftracker',['~SessionPerfTracker',['../classArgusSamples_1_1SessionPerfTracker.html#a1d26af32936c7cf48ee9f192fefe5055',1,'ArgusSamples::SessionPerfTracker']]], + ['_7esourcesettingsobserver',['~SourceSettingsObserver',['../classArgusSamples_1_1SourceSettingsObserver.html#a927b0332eb42c7e7b14802a060afa2ad',1,'ArgusSamples::SourceSettingsObserver']]], + ['_7estreamconsumer',['~StreamConsumer',['../classArgusSamples_1_1StreamConsumer.html#adbf2d3dc79e296039ec5d0f430a8367c',1,'ArgusSamples::StreamConsumer']]], + ['_7etaskgallery',['~TaskGallery',['../classArgusSamples_1_1TaskGallery.html#a6a81d5250cfc03f0c955964ad64c1b63',1,'ArgusSamples::TaskGallery']]], + ['_7etaskmultiexposure',['~TaskMultiExposure',['../classArgusSamples_1_1TaskMultiExposure.html#ae8eede4f0c503ea79454eaafbb6b8697',1,'ArgusSamples::TaskMultiExposure']]], + ['_7etaskmultisession',['~TaskMultiSession',['../classArgusSamples_1_1TaskMultiSession.html#aa1e0158b9d7599042f45fb82cb06051d',1,'ArgusSamples::TaskMultiSession']]], + ['_7etaskstillcapture',['~TaskStillCapture',['../classArgusSamples_1_1TaskStillCapture.html#ade79f5c4ce1202d5df81908a24e7aee7',1,'ArgusSamples::TaskStillCapture']]], + ['_7etaskvideorecord',['~TaskVideoRecord',['../classArgusSamples_1_1TaskVideoRecord.html#a582195eddb9146d47e22cf4ab72a6636',1,'ArgusSamples::TaskVideoRecord']]], + ['_7etrackeduniqueobj',['~TrackedUniqueObj',['../classArgusSamples_1_1TrackedUniqueObj.html#a159e640f1ae8279de7e10769fa2f8aa2',1,'ArgusSamples::TrackedUniqueObj']]], + ['_7etracker',['~Tracker',['../classArgusSamples_1_1Tracker.html#aaf5dc8cd092e94eccfdb45e155ef7864',1,'ArgusSamples::Tracker']]], + ['_7evideopipeline',['~VideoPipeline',['../classArgusSamples_1_1VideoPipeline.html#a50bc49eabc110cbd3ae9227bc141746d',1,'ArgusSamples::VideoPipeline']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_61.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_61.html new file mode 100644 index 0000000..85e5d72 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_61.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_61.js new file mode 100644 index 0000000..c80b008 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_61.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['activesession',['ActiveSession',['../classArgusSamples_1_1Dispatcher_1_1ActiveSession.html',1,'ArgusSamples::Dispatcher']]], + ['app',['App',['../classArgusSamples_1_1App.html',1,'ArgusSamples']]], + ['appmodulecapture',['AppModuleCapture',['../classArgusSamples_1_1AppModuleCapture.html',1,'ArgusSamples']]], + ['appmodulegallery',['AppModuleGallery',['../classArgusSamples_1_1AppModuleGallery.html',1,'ArgusSamples']]], + ['appmodulegeneric',['AppModuleGeneric',['../classArgusSamples_1_1AppModuleGeneric.html',1,'ArgusSamples']]], + ['appmodulemultiexposure',['AppModuleMultiExposure',['../classArgusSamples_1_1AppModuleMultiExposure.html',1,'ArgusSamples']]], + ['appmodulemultisession',['AppModuleMultiSession',['../classArgusSamples_1_1AppModuleMultiSession.html',1,'ArgusSamples']]], + ['appmodulevideo',['AppModuleVideo',['../classArgusSamples_1_1AppModuleVideo.html',1,'ArgusSamples']]], + ['autocontrolsettingsobserver',['AutoControlSettingsObserver',['../classArgusSamples_1_1AutoControlSettingsObserver.html',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_63.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_63.html new file mode 100644 index 0000000..72c66b9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_63.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_63.js new file mode 100644 index 0000000..82019b2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_63.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['cameraapp',['CameraApp',['../classArgusSamples_1_1CameraApp.html',1,'ArgusSamples']]], + ['composer',['Composer',['../classArgusSamples_1_1Composer.html',1,'ArgusSamples']]], + ['conditionvariable',['ConditionVariable',['../classArgusSamples_1_1ConditionVariable.html',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_64.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_64.html new file mode 100644 index 0000000..5902708 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_64.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_64.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_64.js new file mode 100644 index 0000000..a1132c4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_64.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['defogsettingsobserver',['DeFogSettingsObserver',['../classArgusSamples_1_1DeFogSettingsObserver.html',1,'ArgusSamples']]], + ['denoisesettingsobserver',['DenoiseSettingsObserver',['../classArgusSamples_1_1DenoiseSettingsObserver.html',1,'ArgusSamples']]], + ['dispatcher',['Dispatcher',['../classArgusSamples_1_1Dispatcher.html',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_65.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_65.html new file mode 100644 index 0000000..15f57eb --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_65.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_65.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_65.js new file mode 100644 index 0000000..56796aa --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_65.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['edgeenhancesettingsobserver',['EdgeEnhanceSettingsObserver',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html',1,'ArgusSamples']]], + ['eventthread',['EventThread',['../classArgusSamples_1_1EventThread.html',1,'ArgusSamples']]], + ['explevel',['ExpLevel',['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html',1,'ArgusSamples::TaskMultiExposure']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_67.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_67.html new file mode 100644 index 0000000..78b514d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_67.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_67.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_67.js new file mode 100644 index 0000000..32ca062 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_67.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['galleryitem',['GalleryItem',['../classArgusSamples_1_1GalleryItem.html',1,'ArgusSamples']]], + ['galleryitemimage',['GalleryItemImage',['../classArgusSamples_1_1GalleryItemImage.html',1,'ArgusSamples']]], + ['galleryitemvideo',['GalleryItemVideo',['../classArgusSamples_1_1GalleryItemVideo.html',1,'ArgusSamples']]], + ['gallerythread',['GalleryThread',['../classArgusSamples_1_1GalleryThread.html',1,'ArgusSamples']]], + ['gstunrefer',['GstUnrefer',['../classArgusSamples_1_1GstUnrefer.html',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_69.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_69.html new file mode 100644 index 0000000..961dbea --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_69.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_69.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_69.js new file mode 100644 index 0000000..47e6a24 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_69.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['iappmodule',['IAppModule',['../classArgusSamples_1_1IAppModule.html',1,'ArgusSamples']]], + ['iobserverforinterface',['IObserverForInterface',['../classArgusSamples_1_1IObserverForInterface.html',1,'ArgusSamples']]], + ['itask',['ITask',['../classArgusSamples_1_1ITask.html',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_6d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_6d.html new file mode 100644 index 0000000..abe6f0d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_6d.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_6d.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_6d.js new file mode 100644 index 0000000..3195b78 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_6d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mutex',['Mutex',['../classArgusSamples_1_1Mutex.html',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_70.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_70.html new file mode 100644 index 0000000..e4b5208 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_70.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_70.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_70.js new file mode 100644 index 0000000..a0c7332 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_70.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['perftracker',['PerfTracker',['../classArgusSamples_1_1PerfTracker.html',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_73.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_73.html new file mode 100644 index 0000000..a1bf0b9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_73.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_73.js new file mode 100644 index 0000000..1f3594a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_73.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['scopedguard',['ScopedGuard',['../classArgusSamples_1_1ScopedGuard.html',1,'ArgusSamples']]], + ['scopedmutex',['ScopedMutex',['../classArgusSamples_1_1ScopedMutex.html',1,'ArgusSamples']]], + ['session',['Session',['../classArgusSamples_1_1TaskMultiSession_1_1Session.html',1,'ArgusSamples::TaskMultiSession']]], + ['sessionperftracker',['SessionPerfTracker',['../classArgusSamples_1_1SessionPerfTracker.html',1,'ArgusSamples']]], + ['sourcesettingsobserver',['SourceSettingsObserver',['../classArgusSamples_1_1SourceSettingsObserver.html',1,'ArgusSamples']]], + ['stream',['Stream',['../classArgusSamples_1_1Composer_1_1Stream.html',1,'ArgusSamples::Composer']]], + ['streamconsumer',['StreamConsumer',['../classArgusSamples_1_1StreamConsumer.html',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_74.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_74.html new file mode 100644 index 0000000..f7f27ce --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_74.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_74.js new file mode 100644 index 0000000..9f7e36c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_74.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['taskgallery',['TaskGallery',['../classArgusSamples_1_1TaskGallery.html',1,'ArgusSamples']]], + ['taskmultiexposure',['TaskMultiExposure',['../classArgusSamples_1_1TaskMultiExposure.html',1,'ArgusSamples']]], + ['taskmultisession',['TaskMultiSession',['../classArgusSamples_1_1TaskMultiSession.html',1,'ArgusSamples']]], + ['taskstillcapture',['TaskStillCapture',['../classArgusSamples_1_1TaskStillCapture.html',1,'ArgusSamples']]], + ['taskvideorecord',['TaskVideoRecord',['../classArgusSamples_1_1TaskVideoRecord.html',1,'ArgusSamples']]], + ['timevalue',['TimeValue',['../classArgusSamples_1_1TimeValue.html',1,'ArgusSamples']]], + ['trackeduniqueobj',['TrackedUniqueObj',['../classArgusSamples_1_1TrackedUniqueObj.html',1,'ArgusSamples']]], + ['trackeduniqueobj_3c_20argus_3a_3acapturesession_20_3e',['TrackedUniqueObj< Argus::CaptureSession >',['../classArgusSamples_1_1TrackedUniqueObj.html',1,'ArgusSamples']]], + ['trackeduniqueobj_3c_20argus_3a_3arequest_20_3e',['TrackedUniqueObj< Argus::Request >',['../classArgusSamples_1_1TrackedUniqueObj.html',1,'ArgusSamples']]], + ['tracker',['Tracker',['../classArgusSamples_1_1Tracker.html',1,'ArgusSamples']]], + ['tracker_3c_20argus_3a_3acapturesession_20_3e',['Tracker< Argus::CaptureSession >',['../classArgusSamples_1_1Tracker.html',1,'ArgusSamples']]], + ['tracker_3c_20argus_3a_3arequest_20_3e',['Tracker< Argus::Request >',['../classArgusSamples_1_1Tracker.html',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_76.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_76.html new file mode 100644 index 0000000..f470eb9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_76.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_76.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_76.js new file mode 100644 index 0000000..0b307da --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/classes_76.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['videopipeline',['VideoPipeline',['../classArgusSamples_1_1VideoPipeline.html',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/close.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/close.png new file mode 100644 index 0000000..9342d3d Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/close.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_5f.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_5f.html new file mode 100644 index 0000000..548a824 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_5f.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_5f.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_5f.js new file mode 100644 index 0000000..f00e7df --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_5f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5fstdc_5fformat_5fmacros',['__STDC_FORMAT_MACROS',['../PerfTracker_8cpp.html#aacbb9e1f38be71e22df1584a37c56693',1,'PerfTracker.cpp']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_63.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_63.html new file mode 100644 index 0000000..35ff8ae --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_63.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_63.js new file mode 100644 index 0000000..16c8a21 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_63.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['create_5fgui_5felement',['CREATE_GUI_ELEMENT',['../AppModuleGeneric_8cpp.html#a3f96fbbdc5c40043550facbec7ff433c',1,'CREATE_GUI_ELEMENT(): AppModuleGeneric.cpp'],['../AppModuleMultiExposure_8cpp.html#a3f96fbbdc5c40043550facbec7ff433c',1,'CREATE_GUI_ELEMENT(): AppModuleMultiExposure.cpp'],['../AppModuleVideo_8cpp.html#a3f96fbbdc5c40043550facbec7ff433c',1,'CREATE_GUI_ELEMENT(): AppModuleVideo.cpp']]], + ['create_5fgui_5felement_5fcombo_5fbox',['CREATE_GUI_ELEMENT_COMBO_BOX',['../AppModuleCapture_8cpp.html#af03c1a79306988f5506786978ef0c2b2',1,'CREATE_GUI_ELEMENT_COMBO_BOX(): AppModuleCapture.cpp'],['../AppModuleGeneric_8cpp.html#af03c1a79306988f5506786978ef0c2b2',1,'CREATE_GUI_ELEMENT_COMBO_BOX(): AppModuleGeneric.cpp'],['../AppModuleVideo_8cpp.html#af03c1a79306988f5506786978ef0c2b2',1,'CREATE_GUI_ELEMENT_COMBO_BOX(): AppModuleVideo.cpp']]], + ['create_5fgui_5felement_5fpath_5fchooser',['CREATE_GUI_ELEMENT_PATH_CHOOSER',['../AppModuleGeneric_8cpp.html#a2d5dd2ef45ca53dd6aa2109d7bc11fe5',1,'AppModuleGeneric.cpp']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_64.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_64.html new file mode 100644 index 0000000..7b428bd --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_64.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_64.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_64.js new file mode 100644 index 0000000..89fc304 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_64.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['default_5fconfig_5ffile',['DEFAULT_CONFIG_FILE',['../AppModuleGeneric_8cpp.html#a33cca38c576ada1ba69225b47cd975a4',1,'AppModuleGeneric.cpp']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_67.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_67.html new file mode 100644 index 0000000..d211bf1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_67.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_67.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_67.js new file mode 100644 index 0000000..ebb2bfc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/defines_67.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gl_5fglext_5fprototypes',['GL_GLEXT_PROTOTYPES',['../Gallery_8cpp.html#a120fb070bddb21f0bd899f50252c4cb5',1,'GL_GLEXT_PROTOTYPES(): Gallery.cpp'],['../Composer_8cpp.html#a120fb070bddb21f0bd899f50252c4cb5',1,'GL_GLEXT_PROTOTYPES(): Composer.cpp'],['../StreamConsumer_8cpp.html#a120fb070bddb21f0bd899f50252c4cb5',1,'GL_GLEXT_PROTOTYPES(): StreamConsumer.cpp']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_63.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_63.html new file mode 100644 index 0000000..6cee236 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_63.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_63.js new file mode 100644 index 0000000..13142f9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_63.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['command',['Command',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6',1,'ArgusSamples::GalleryThread']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_67.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_67.html new file mode 100644 index 0000000..2030456 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_67.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_67.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_67.js new file mode 100644 index 0000000..0d1673c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_67.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['globalevent',['GlobalEvent',['../namespaceArgusSamples.html#ab27a7f01bc9a65a0022709c05c8f29b4',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_6d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_6d.html new file mode 100644 index 0000000..0469029 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_6d.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_6d.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_6d.js new file mode 100644 index 0000000..653d626 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_6d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['modules',['Modules',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_73.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_73.html new file mode 100644 index 0000000..3f157e6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_73.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_73.js new file mode 100644 index 0000000..dedaa0b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_73.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['sessionevent',['SessionEvent',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5ae',1,'ArgusSamples']]], + ['stillfiletype',['StillFileType',['../namespaceArgusSamples.html#a96301db36b4f4acefb8cf04a7211aa11',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_74.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_74.html new file mode 100644 index 0000000..0689138 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_74.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_74.js new file mode 100644 index 0000000..9eb3842 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_74.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['type',['Type',['../classArgusSamples_1_1GalleryItem.html#a6bffae895927eb4b5331dd796018d087',1,'ArgusSamples::GalleryItem']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_76.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_76.html new file mode 100644 index 0000000..d9a6203 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_76.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_76.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_76.js new file mode 100644 index 0000000..4513130 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enums_76.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['videoavcprofiletype',['VideoAvcProfileType',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3f',1,'ArgusSamples::VideoPipeline']]], + ['videobitrate',['VideoBitRate',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841a',1,'ArgusSamples::VideoPipeline']]], + ['videofiletype',['VideoFileType',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94',1,'ArgusSamples::VideoPipeline']]], + ['videoformat',['VideoFormat',['../classArgusSamples_1_1VideoPipeline.html#a230816b2fbb715977081ef3626687989',1,'ArgusSamples::VideoPipeline']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_63.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_63.html new file mode 100644 index 0000000..7399d30 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_63.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_63.js new file mode 100644 index 0000000..93612b9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_63.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['command_5fnext',['COMMAND_NEXT',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6ac5d87e502d5661c8941d3ad5b612dbf5',1,'ArgusSamples::GalleryThread']]], + ['command_5fnone',['COMMAND_NONE',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6a8cd730e5dda947265d73df22832f478a',1,'ArgusSamples::GalleryThread']]], + ['command_5fprev',['COMMAND_PREV',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6adfac9d6d088e6981c4e18365a2bedfb1',1,'ArgusSamples::GalleryThread']]], + ['command_5frewind',['COMMAND_REWIND',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6a57e5295da08593484efa482b9cf23af7',1,'ArgusSamples::GalleryThread']]], + ['command_5fshutdown',['COMMAND_SHUTDOWN',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6af920fb85b1923f6d1cd4f9350d13a2c2',1,'ArgusSamples::GalleryThread']]], + ['command_5fstart',['COMMAND_START',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6afeabc75dbedd6548b00e44c4d4d722d2',1,'ArgusSamples::GalleryThread']]], + ['command_5fstop',['COMMAND_STOP',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6a40da628d98c65e823e2c803f59b0b4c6',1,'ArgusSamples::GalleryThread']]], + ['command_5ftoggle_5fplay_5fback',['COMMAND_TOGGLE_PLAY_BACK',['../classArgusSamples_1_1GalleryThread.html#a958bca2a4623e227f9def2d2f24075c6a81d5afcf19db9714f2d2ece908f75760',1,'ArgusSamples::GalleryThread']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_67.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_67.html new file mode 100644 index 0000000..e5b804e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_67.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_67.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_67.js new file mode 100644 index 0000000..e547e41 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_67.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['global_5fevent_5fapp_5finitialized',['GLOBAL_EVENT_APP_INITIALIZED',['../namespaceArgusSamples.html#ab27a7f01bc9a65a0022709c05c8f29b4aa7e7f304d2c8a63762ec9d63caad5e4a',1,'ArgusSamples']]], + ['global_5fevent_5fapp_5fstart',['GLOBAL_EVENT_APP_START',['../namespaceArgusSamples.html#ab27a7f01bc9a65a0022709c05c8f29b4a8939e24ab7f734bf020e9e594a302447',1,'ArgusSamples']]], + ['global_5fevent_5fdisplay',['GLOBAL_EVENT_DISPLAY',['../namespaceArgusSamples.html#ab27a7f01bc9a65a0022709c05c8f29b4aa17e110896996ce9d855a78297f70029',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_6d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_6d.html new file mode 100644 index 0000000..5e0c86b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_6d.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_6d.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_6d.js new file mode 100644 index 0000000..0a0d27b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_6d.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['module_5fcapture',['MODULE_CAPTURE',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3a35b06160cb0633eebc1bc8a6324819be',1,'ArgusSamples']]], + ['module_5fcount',['MODULE_COUNT',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3ac9fa88d2c3b788200697e8251cd40fcb',1,'ArgusSamples']]], + ['module_5ffirst',['MODULE_FIRST',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3a332697d31bd4d57d4f7d254d80614344',1,'ArgusSamples']]], + ['module_5finvalid',['MODULE_INVALID',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3ae91f4304d7776f80f43904ce0fa0e16d',1,'ArgusSamples']]], + ['module_5flast',['MODULE_LAST',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3a1bcc086bea73284b23530f72928d2bd0',1,'ArgusSamples']]], + ['module_5fmulti_5fexposure',['MODULE_MULTI_EXPOSURE',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3ae64049711c736d6064196bb6c55cad1a',1,'ArgusSamples']]], + ['module_5fmulti_5fsession',['MODULE_MULTI_SESSION',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3a3a3e136c42987e865cecd7482aa74f93',1,'ArgusSamples']]], + ['module_5fvideo',['MODULE_VIDEO',['../namespaceArgusSamples.html#a755ad51d4b26bff4c5cf73beca888ef3a10437d51884cf2a1a83c9f9df5ef461b',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_73.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_73.html new file mode 100644 index 0000000..f2f7db4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_73.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_73.js new file mode 100644 index 0000000..f82bdd7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_73.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['session_5fevent_5fclose_5fdone',['SESSION_EVENT_CLOSE_DONE',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea4d1ee9d07bacba26206e9b1ceecefb42',1,'ArgusSamples']]], + ['session_5fevent_5fclose_5frequested',['SESSION_EVENT_CLOSE_REQUESTED',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aeaab0a9cde2374642cea90ff6ec293ddb1',1,'ArgusSamples']]], + ['session_5fevent_5fflush_5fdone',['SESSION_EVENT_FLUSH_DONE',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aeaa03f0ff521b8de0101807fe3c6d098b8',1,'ArgusSamples']]], + ['session_5fevent_5fframe_5fcount',['SESSION_EVENT_FRAME_COUNT',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aeac4a2488f7df844d47e3c318fcf081cf9',1,'ArgusSamples']]], + ['session_5fevent_5fframe_5fperiod',['SESSION_EVENT_FRAME_PERIOD',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea801b89f6348c40982d02460be47ecfd1',1,'ArgusSamples']]], + ['session_5fevent_5fissue_5fcapture',['SESSION_EVENT_ISSUE_CAPTURE',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea8ea1134833437dd0fe2f3b580d0571be',1,'ArgusSamples']]], + ['session_5fevent_5frequest_5flatency',['SESSION_EVENT_REQUEST_LATENCY',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea8f0bc14f9a47211478c30cd558451f93',1,'ArgusSamples']]], + ['session_5fevent_5frequest_5freceived',['SESSION_EVENT_REQUEST_RECEIVED',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea147fd2ad27b15c2e2e878223ddbcf4b7',1,'ArgusSamples']]], + ['session_5fevent_5ftask_5fstart',['SESSION_EVENT_TASK_START',['../namespaceArgusSamples.html#a72833a481ac325fdef97a3c77e46e5aea85445eefb47dca84b24e3975771ff831',1,'ArgusSamples']]], + ['still_5ffile_5ftype_5fheaderless',['STILL_FILE_TYPE_HEADERLESS',['../namespaceArgusSamples.html#a96301db36b4f4acefb8cf04a7211aa11aa7900da32e45d477ae934bcef77095af',1,'ArgusSamples']]], + ['still_5ffile_5ftype_5fjpg',['STILL_FILE_TYPE_JPG',['../namespaceArgusSamples.html#a96301db36b4f4acefb8cf04a7211aa11a49e30043e64dde815f00aa6c028840e9',1,'ArgusSamples']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_74.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_74.html new file mode 100644 index 0000000..4ffcb3e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_74.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_74.js new file mode 100644 index 0000000..67cbc0d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_74.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['type_5fimage',['TYPE_IMAGE',['../classArgusSamples_1_1GalleryItem.html#a6bffae895927eb4b5331dd796018d087a3c56018385823873324e250ba649bddc',1,'ArgusSamples::GalleryItem']]], + ['type_5finvalid',['TYPE_INVALID',['../classArgusSamples_1_1GalleryItem.html#a6bffae895927eb4b5331dd796018d087a50c41f9c0e004e49a84da8129bf0b3a7',1,'ArgusSamples::GalleryItem']]], + ['type_5fvideo',['TYPE_VIDEO',['../classArgusSamples_1_1GalleryItem.html#a6bffae895927eb4b5331dd796018d087aba2eba8ee8c4e249b7d6f6ded2c32eba',1,'ArgusSamples::GalleryItem']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_76.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_76.html new file mode 100644 index 0000000..87b4985 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_76.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_76.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_76.js new file mode 100644 index 0000000..c477e73 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/enumvalues_76.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['video_5favc_5fprofile_5fbaseline',['VIDEO_AVC_PROFILE_BASELINE',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3faf0b38c9c2b229e01928efed9874000ed',1,'ArgusSamples::VideoPipeline']]], + ['video_5favc_5fprofile_5fextended',['VIDEO_AVC_PROFILE_EXTENDED',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3fa8e1647c2e4b49b5fa16dee42328342e1',1,'ArgusSamples::VideoPipeline']]], + ['video_5favc_5fprofile_5fhigh',['VIDEO_AVC_PROFILE_HIGH',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3fa10dae87844852a76bed1d03b067e8114',1,'ArgusSamples::VideoPipeline']]], + ['video_5favc_5fprofile_5fhigh10',['VIDEO_AVC_PROFILE_HIGH10',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3fac690b29d3c89a35c0075765766649c35',1,'ArgusSamples::VideoPipeline']]], + ['video_5favc_5fprofile_5fmain',['VIDEO_AVC_PROFILE_MAIN',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3fa2b4b56086e93ede0c2bb1222e5308ab9',1,'ArgusSamples::VideoPipeline']]], + ['video_5favc_5fprofile_5fmax',['VIDEO_AVC_PROFILE_MAX',['../classArgusSamples_1_1VideoPipeline.html#ad17a45da8be75b9931df020a9493fe3fa23c6a37da7b5d8645ff10a030775dc23',1,'ArgusSamples::VideoPipeline']]], + ['video_5fbitrate_5f14m',['VIDEO_BITRATE_14M',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841aa62996f5027f2bf3ac43d79ac487e3b39',1,'ArgusSamples::VideoPipeline']]], + ['video_5fbitrate_5f20m',['VIDEO_BITRATE_20M',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841aac580e82a2fb87c4161e4bd88bf18db43',1,'ArgusSamples::VideoPipeline']]], + ['video_5fbitrate_5f4m',['VIDEO_BITRATE_4M',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841aa7883fd3daf5abb844075df13af719c1f',1,'ArgusSamples::VideoPipeline']]], + ['video_5fbitrate_5f8m',['VIDEO_BITRATE_8M',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841aa62ae052f1af1544a70d090eccd30f64f',1,'ArgusSamples::VideoPipeline']]], + ['video_5fbitrate_5fmax',['VIDEO_BITRATE_MAX',['../classArgusSamples_1_1VideoPipeline.html#a44ac1825d79e55b3d0d2832001c3841aa4a7e07724ddc165287a8332fb7d4fbc8',1,'ArgusSamples::VideoPipeline']]], + ['video_5ffile_5ftype_5f3gp',['VIDEO_FILE_TYPE_3GP',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94a311766661182b7e4e2ccfcec45371753',1,'ArgusSamples::VideoPipeline']]], + ['video_5ffile_5ftype_5favi',['VIDEO_FILE_TYPE_AVI',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94a39591f068de1259ab7fb508d5d3709a0',1,'ArgusSamples::VideoPipeline']]], + ['video_5ffile_5ftype_5fh265',['VIDEO_FILE_TYPE_H265',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94a0e0bae332edfbea095b24e66fc3b0081',1,'ArgusSamples::VideoPipeline']]], + ['video_5ffile_5ftype_5fmkv',['VIDEO_FILE_TYPE_MKV',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94ac87f7d31fed6e7333be25b305f5640ca',1,'ArgusSamples::VideoPipeline']]], + ['video_5ffile_5ftype_5fmp4',['VIDEO_FILE_TYPE_MP4',['../classArgusSamples_1_1VideoPipeline.html#a8713cede5289d2d95b2a66d57a64ff94a0d71edc5f9212eff6496e6b1d88fe396',1,'ArgusSamples::VideoPipeline']]], + ['video_5fformat_5fh264',['VIDEO_FORMAT_H264',['../classArgusSamples_1_1VideoPipeline.html#a230816b2fbb715977081ef3626687989a72105cf323d104e225ec0105323f26f4',1,'ArgusSamples::VideoPipeline']]], + ['video_5fformat_5fh265',['VIDEO_FORMAT_H265',['../classArgusSamples_1_1VideoPipeline.html#a230816b2fbb715977081ef3626687989a8d944945a5327f75954d96c55bc02a0e',1,'ArgusSamples::VideoPipeline']]], + ['video_5fformat_5fvp8',['VIDEO_FORMAT_VP8',['../classArgusSamples_1_1VideoPipeline.html#a230816b2fbb715977081ef3626687989a15d1fdd7be8d72c43242ed3f2e1b6c15',1,'ArgusSamples::VideoPipeline']]], + ['video_5fformat_5fvp9',['VIDEO_FORMAT_VP9',['../classArgusSamples_1_1VideoPipeline.html#a230816b2fbb715977081ef3626687989a09c87bb02a23de15b216864dd4f26f8a',1,'ArgusSamples::VideoPipeline']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_61.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_61.html new file mode 100644 index 0000000..5a8e454 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_61.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_61.js new file mode 100644 index 0000000..30c9c29 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_61.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['app_2ecpp',['App.cpp',['../App_8cpp.html',1,'']]], + ['app_2eh',['App.h',['../App_8h.html',1,'']]], + ['appmodulecapture_2ecpp',['AppModuleCapture.cpp',['../AppModuleCapture_8cpp.html',1,'']]], + ['appmodulecapture_2eh',['AppModuleCapture.h',['../AppModuleCapture_8h.html',1,'']]], + ['appmodulegallery_2ecpp',['AppModuleGallery.cpp',['../AppModuleGallery_8cpp.html',1,'']]], + ['appmodulegallery_2eh',['AppModuleGallery.h',['../AppModuleGallery_8h.html',1,'']]], + ['appmodulegeneric_2ecpp',['AppModuleGeneric.cpp',['../AppModuleGeneric_8cpp.html',1,'']]], + ['appmodulegeneric_2eh',['AppModuleGeneric.h',['../AppModuleGeneric_8h.html',1,'']]], + ['appmodulemultiexposure_2ecpp',['AppModuleMultiExposure.cpp',['../AppModuleMultiExposure_8cpp.html',1,'']]], + ['appmodulemultiexposure_2eh',['AppModuleMultiExposure.h',['../AppModuleMultiExposure_8h.html',1,'']]], + ['appmodulemultisession_2ecpp',['AppModuleMultiSession.cpp',['../AppModuleMultiSession_8cpp.html',1,'']]], + ['appmodulemultisession_2eh',['AppModuleMultiSession.h',['../AppModuleMultiSession_8h.html',1,'']]], + ['appmodulevideo_2ecpp',['AppModuleVideo.cpp',['../AppModuleVideo_8cpp.html',1,'']]], + ['appmodulevideo_2eh',['AppModuleVideo.h',['../AppModuleVideo_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_63.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_63.html new file mode 100644 index 0000000..6611a5b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_63.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_63.js new file mode 100644 index 0000000..ae70d98 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_63.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['composer_2ecpp',['Composer.cpp',['../Composer_8cpp.html',1,'']]], + ['composer_2eh',['Composer.h',['../Composer_8h.html',1,'']]], + ['conditionvariable_2ecpp',['ConditionVariable.cpp',['../ConditionVariable_8cpp.html',1,'']]], + ['conditionvariable_2eh',['ConditionVariable.h',['../ConditionVariable_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_64.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_64.html new file mode 100644 index 0000000..1a32bf8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_64.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_64.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_64.js new file mode 100644 index 0000000..56086b8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_64.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dispatcher_2ecpp',['Dispatcher.cpp',['../Dispatcher_8cpp.html',1,'']]], + ['dispatcher_2eh',['Dispatcher.h',['../Dispatcher_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_65.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_65.html new file mode 100644 index 0000000..1eadd1b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_65.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_65.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_65.js new file mode 100644 index 0000000..bcb1bae --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_65.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['eventthread_2ecpp',['EventThread.cpp',['../EventThread_8cpp.html',1,'']]], + ['eventthread_2eh',['EventThread.h',['../EventThread_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_67.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_67.html new file mode 100644 index 0000000..d5df283 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_67.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_67.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_67.js new file mode 100644 index 0000000..16953c6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_67.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['gallery_2ecpp',['Gallery.cpp',['../Gallery_8cpp.html',1,'']]], + ['gallery_2eh',['Gallery.h',['../Gallery_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_69.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_69.html new file mode 100644 index 0000000..7fbd757 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_69.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_69.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_69.js new file mode 100644 index 0000000..1243f4f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_69.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['iappmodule_2eh',['IAppModule.h',['../IAppModule_8h.html',1,'']]], + ['itask_2eh',['ITask.h',['../ITask_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_6d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_6d.html new file mode 100644 index 0000000..d9d9300 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_6d.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_6d.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_6d.js new file mode 100644 index 0000000..121db92 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_6d.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['main_2ecpp',['Main.cpp',['../Main_8cpp.html',1,'']]], + ['multiexposure_2ecpp',['MultiExposure.cpp',['../MultiExposure_8cpp.html',1,'']]], + ['multiexposure_2eh',['MultiExposure.h',['../MultiExposure_8h.html',1,'']]], + ['multisession_2ecpp',['MultiSession.cpp',['../MultiSession_8cpp.html',1,'']]], + ['multisession_2eh',['MultiSession.h',['../MultiSession_8h.html',1,'']]], + ['mutex_2ecpp',['Mutex.cpp',['../Mutex_8cpp.html',1,'']]], + ['mutex_2eh',['Mutex.h',['../Mutex_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_70.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_70.html new file mode 100644 index 0000000..abcae9a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_70.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_70.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_70.js new file mode 100644 index 0000000..0f9288a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_70.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['perftracker_2ecpp',['PerfTracker.cpp',['../PerfTracker_8cpp.html',1,'']]], + ['perftracker_2eh',['PerfTracker.h',['../PerfTracker_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_73.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_73.html new file mode 100644 index 0000000..e0de9e6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_73.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_73.js new file mode 100644 index 0000000..faaa414 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_73.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['scopedguard_2eh',['ScopedGuard.h',['../ScopedGuard_8h.html',1,'']]], + ['stillcapture_2ecpp',['StillCapture.cpp',['../StillCapture_8cpp.html',1,'']]], + ['stillcapture_2eh',['StillCapture.h',['../StillCapture_8h.html',1,'']]], + ['streamconsumer_2ecpp',['StreamConsumer.cpp',['../StreamConsumer_8cpp.html',1,'']]], + ['streamconsumer_2eh',['StreamConsumer.h',['../StreamConsumer_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_74.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_74.html new file mode 100644 index 0000000..017b3fe --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_74.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_74.js new file mode 100644 index 0000000..1ab714d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_74.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['trackeduniqueobject_2eh',['TrackedUniqueObject.h',['../TrackedUniqueObject_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_75.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_75.html new file mode 100644 index 0000000..8ea7b3d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_75.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_75.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_75.js new file mode 100644 index 0000000..33d4468 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_75.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['util_2ecpp',['Util.cpp',['../Util_8cpp.html',1,'']]], + ['util_2eh',['Util.h',['../Util_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_76.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_76.html new file mode 100644 index 0000000..e53e134 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_76.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_76.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_76.js new file mode 100644 index 0000000..51768ac --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_76.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['videopipeline_2ecpp',['VideoPipeline.cpp',['../VideoPipeline_8cpp.html',1,'']]], + ['videopipeline_2eh',['VideoPipeline.h',['../VideoPipeline_8h.html',1,'']]], + ['videorecord_2ecpp',['VideoRecord.cpp',['../VideoRecord_8cpp.html',1,'']]], + ['videorecord_2eh',['VideoRecord.h',['../VideoRecord_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_78.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_78.html new file mode 100644 index 0000000..4938827 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_78.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_78.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_78.js new file mode 100644 index 0000000..60ccf40 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/files_78.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['xmlconfig_2ecpp',['XMLConfig.cpp',['../XMLConfig_8cpp.html',1,'']]], + ['xmlconfig_2eh',['XMLConfig.h',['../XMLConfig_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_61.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_61.html new file mode 100644 index 0000000..7f39533 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_61.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_61.js new file mode 100644 index 0000000..aa4c16f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_61.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['acquire',['acquire',['../classArgusSamples_1_1StreamConsumer.html#a0fc52da91949ba7f0d68c8a8df4fd880',1,'ArgusSamples::StreamConsumer']]], + ['activesession',['ActiveSession',['../classArgusSamples_1_1Dispatcher_1_1ActiveSession.html#a908dfbc3fd815f4904700088e7e4aff5',1,'ArgusSamples::Dispatcher::ActiveSession']]], + ['app',['App',['../classArgusSamples_1_1App.html#a7c85ccdeda41d3907409c78e98dc2fdc',1,'ArgusSamples::App::App(const char *appName)'],['../classArgusSamples_1_1App.html#ad7bdfcac95720b7b205849717559613d',1,'ArgusSamples::App::App()']]], + ['appinitializedtime',['appInitializedTime',['../classArgusSamples_1_1PerfTracker.html#a8d933b2c8d880baef9b10780d1e1211a',1,'ArgusSamples::PerfTracker']]], + ['appmodulecapture',['AppModuleCapture',['../classArgusSamples_1_1AppModuleCapture.html#aedc6dd5dda6060718fe5fab2bb427a26',1,'ArgusSamples::AppModuleCapture']]], + ['appmodulegallery',['AppModuleGallery',['../classArgusSamples_1_1AppModuleGallery.html#a9d859e715ab7965016b497de90500bbf',1,'ArgusSamples::AppModuleGallery']]], + ['appmodulegeneric',['AppModuleGeneric',['../classArgusSamples_1_1AppModuleGeneric.html#af75b9ddca895b116a5afeaf20e9bcd07',1,'ArgusSamples::AppModuleGeneric']]], + ['appmodulemultiexposure',['AppModuleMultiExposure',['../classArgusSamples_1_1AppModuleMultiExposure.html#af21e8bc3c39468c612f583cc417d0b02',1,'ArgusSamples::AppModuleMultiExposure']]], + ['appmodulemultisession',['AppModuleMultiSession',['../classArgusSamples_1_1AppModuleMultiSession.html#a44c4419ba4c5f2d367e7ab3a1a91b1e3',1,'ArgusSamples::AppModuleMultiSession']]], + ['appmodulevideo',['AppModuleVideo',['../classArgusSamples_1_1AppModuleVideo.html#a9d8e033c72885de5145ff5cc8b5e9dd5',1,'ArgusSamples::AppModuleVideo']]], + ['appstarttime',['appStartTime',['../classArgusSamples_1_1PerfTracker.html#a9399526161b05c4fa2adee877d281c98',1,'ArgusSamples::PerfTracker']]], + ['autocontrolsettingsobserver',['AutoControlSettingsObserver',['../classArgusSamples_1_1AutoControlSettingsObserver.html#a6bae4169d71e3d9a488db5c275c3041b',1,'ArgusSamples::AutoControlSettingsObserver']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_62.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_62.html new file mode 100644 index 0000000..def0606 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_62.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_62.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_62.js new file mode 100644 index 0000000..530d0e1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_62.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['bindstream',['bindStream',['../classArgusSamples_1_1Composer.html#ae1ac6b8500980c96a41ba3e82238f8a7',1,'ArgusSamples::Composer']]], + ['broadcast',['broadcast',['../classArgusSamples_1_1ConditionVariable.html#aad90db4443b209bc2eadad939cb63cb6',1,'ArgusSamples::ConditionVariable']]], + ['builditemlist',['buildItemList',['../classArgusSamples_1_1GalleryThread.html#a1f2d02f0ee0f8626d5c31bfa20818d11',1,'ArgusSamples::GalleryThread']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_63.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_63.html new file mode 100644 index 0000000..9ebe11d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_63.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_63.js new file mode 100644 index 0000000..e7ff084 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_63.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['cameraapp',['CameraApp',['../classArgusSamples_1_1CameraApp.html#afcb48d1278e008166b2f98d97a8e3b11',1,'ArgusSamples::CameraApp::CameraApp(const char *appName)'],['../classArgusSamples_1_1CameraApp.html#a215820fc1fe69237bcbcbe2a4ae8144a',1,'ArgusSamples::CameraApp::CameraApp()']]], + ['cancel',['cancel',['../classArgusSamples_1_1ScopedGuard.html#a7fd04f423f475e7c2a15663f6cae9dc5',1,'ArgusSamples::ScopedGuard::cancel()'],['../classArgusSamples_1_1GstUnrefer.html#ae8af68c70ed2bc33e0d197640d448a72',1,'ArgusSamples::GstUnrefer::cancel()']]], + ['capture',['capture',['../classArgusSamples_1_1Dispatcher.html#aa347666fbb1535e25e41dad372ad08e7',1,'ArgusSamples::Dispatcher::capture()'],['../classArgusSamples_1_1AppModuleCapture.html#afe7c7e9b8448ed10aef3d9b148d30489',1,'ArgusSamples::AppModuleCapture::capture()']]], + ['closesession',['closeSession',['../classArgusSamples_1_1Dispatcher.html#a9b07cf8d67afb5a703adfaaa6244e8af',1,'ArgusSamples::Dispatcher']]], + ['composer',['Composer',['../classArgusSamples_1_1Composer.html#a02fce0645f38f0918ebd0691e783f7f0',1,'ArgusSamples::Composer::Composer()'],['../classArgusSamples_1_1Composer.html#aee3d5f466fb74106baa4c8e2eb8378d4',1,'ArgusSamples::Composer::Composer(const Composer &)']]], + ['conditionvariable',['ConditionVariable',['../classArgusSamples_1_1ConditionVariable.html#a0aeddda770be0f9a981749de2f5fa075',1,'ArgusSamples::ConditionVariable::ConditionVariable()'],['../classArgusSamples_1_1ConditionVariable.html#aca7e0cde87dae7a727ae544b316d6117',1,'ArgusSamples::ConditionVariable::ConditionVariable(ConditionVariable &other)']]], + ['createeventqueue',['createEventQueue',['../classArgusSamples_1_1Dispatcher.html#abb5aa94a3d2b3b97cd0e7ff1af01956c',1,'ArgusSamples::Dispatcher']]], + ['createoutputstream',['createOutputStream',['../classArgusSamples_1_1Dispatcher.html#afb6e811e4f2803a3a7a03801273884e3',1,'ArgusSamples::Dispatcher']]], + ['createrequest',['createRequest',['../classArgusSamples_1_1Dispatcher.html#a5230bb19a7696753cceb7f26489637e9',1,'ArgusSamples::Dispatcher']]], + ['createsession',['createSession',['../classArgusSamples_1_1Dispatcher.html#ad0460b6111a8aada3963ab717624ca77',1,'ArgusSamples::Dispatcher::createSession(TrackedUniqueObj< Argus::CaptureSession > &session, uint32_t deviceIndex)'],['../classArgusSamples_1_1Dispatcher.html#ae52e4a7d4af5917400bb5761fb7816ea',1,'ArgusSamples::Dispatcher::createSession()']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_64.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_64.html new file mode 100644 index 0000000..d8b6394 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_64.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_64.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_64.js new file mode 100644 index 0000000..e0154f2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_64.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['defogsettingsobserver',['DeFogSettingsObserver',['../classArgusSamples_1_1DeFogSettingsObserver.html#a7b968f422a50aa5ff0325c97c54284d5',1,'ArgusSamples::DeFogSettingsObserver']]], + ['denoisesettingsobserver',['DenoiseSettingsObserver',['../classArgusSamples_1_1DenoiseSettingsObserver.html#a529698522c37e0bfaf7c19f7638237ca',1,'ArgusSamples::DenoiseSettingsObserver']]], + ['destroy',['destroy',['../classArgusSamples_1_1VideoPipeline.html#ad320779625f140f9f9d265c3116698c1',1,'ArgusSamples::VideoPipeline']]], + ['disableoutputstream',['disableOutputStream',['../classArgusSamples_1_1Dispatcher.html#a17e198e250297f918e57c19cf8ff9e19',1,'ArgusSamples::Dispatcher']]], + ['dispatcher',['Dispatcher',['../classArgusSamples_1_1Dispatcher.html#a662dc6f191ea694261ccfb2e6a7ceb29',1,'ArgusSamples::Dispatcher::Dispatcher()'],['../classArgusSamples_1_1Dispatcher.html#ac14686e335f62e0cb1336c59dfc11099',1,'ArgusSamples::Dispatcher::Dispatcher(const Dispatcher &)']]], + ['dumpsessioninfo',['dumpSessionInfo',['../classArgusSamples_1_1Dispatcher.html#adb94dac8944d6b4943e112443a75012a',1,'ArgusSamples::Dispatcher']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_65.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_65.html new file mode 100644 index 0000000..a77deba --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_65.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_65.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_65.js new file mode 100644 index 0000000..cc4a141 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_65.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['edgeenhancesettingsobserver',['EdgeEnhanceSettingsObserver',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a1bf7bfd943dcadf645c1f31678e22d76',1,'ArgusSamples::EdgeEnhanceSettingsObserver']]], + ['enableoutputstream',['enableOutputStream',['../classArgusSamples_1_1Dispatcher.html#a5a846ad6a463912eea6e37bf3036ef06',1,'ArgusSamples::Dispatcher']]], + ['eventthread',['EventThread',['../classArgusSamples_1_1EventThread.html#a5f187ecd9c5a7dbebd010913bd2bffae',1,'ArgusSamples::EventThread']]], + ['execute',['execute',['../classArgusSamples_1_1GalleryThread.html#ac3be9cd60626ec1e8bc60d365313d1b9',1,'ArgusSamples::GalleryThread::execute()'],['../classArgusSamples_1_1TaskStillCapture.html#af270c36097f09f8728c106047700c40c',1,'ArgusSamples::TaskStillCapture::execute()']]], + ['expectlocked',['expectLocked',['../classArgusSamples_1_1ScopedMutex.html#a0d6f7d7a8e4e691ff4aea3a776e6f41a',1,'ArgusSamples::ScopedMutex']]], + ['explevel',['ExpLevel',['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#ac3601088e86016135f9129dbda8d9de6',1,'ArgusSamples::TaskMultiExposure::ExpLevel']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_66.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_66.html new file mode 100644 index 0000000..319a531 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_66.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_66.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_66.js new file mode 100644 index 0000000..5c53ec7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_66.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['fromcycelspersec',['fromCycelsPerSec',['../classArgusSamples_1_1TimeValue.html#aa166c2d772180d07e8a6c35b54f6a442',1,'ArgusSamples::TimeValue']]], + ['frommsec',['fromMSec',['../classArgusSamples_1_1TimeValue.html#a770f7c7e8357bef3b35294178ed91a86',1,'ArgusSamples::TimeValue']]], + ['fromnsec',['fromNSec',['../classArgusSamples_1_1TimeValue.html#ae747d20f2ff0a1e4ccc027b862d34c10',1,'ArgusSamples::TimeValue']]], + ['fromsec',['fromSec',['../classArgusSamples_1_1TimeValue.html#a39a72ad9408ccdf22097b9357fc879af',1,'ArgusSamples::TimeValue::fromSec(float sec)'],['../classArgusSamples_1_1TimeValue.html#ac12a7b5ad3c90da50d5fb4a3eb7ca1e7',1,'ArgusSamples::TimeValue::fromSec(SecType sec)']]], + ['fromusec',['fromUSec',['../classArgusSamples_1_1TimeValue.html#a974f2f7130e7b4d921abcb46df66c3f2',1,'ArgusSamples::TimeValue']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_67.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_67.html new file mode 100644 index 0000000..d0ab42a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_67.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_67.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_67.js new file mode 100644 index 0000000..b4aabc1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_67.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['galleryitem',['GalleryItem',['../classArgusSamples_1_1GalleryItem.html#ab1ae78ddbdd4ff2378aadb257c3905f6',1,'ArgusSamples::GalleryItem::GalleryItem(const char *fileName, time_t modTime)'],['../classArgusSamples_1_1GalleryItem.html#ae1452d1184491c7ab8bd770e6e905bcb',1,'ArgusSamples::GalleryItem::GalleryItem()']]], + ['galleryitemimage',['GalleryItemImage',['../classArgusSamples_1_1GalleryItemImage.html#a5c00165c0add390ba455bfc48dc21068',1,'ArgusSamples::GalleryItemImage']]], + ['galleryitemvideo',['GalleryItemVideo',['../classArgusSamples_1_1GalleryItemVideo.html#ade37284d0655d9ddfe733bb72d4f724f',1,'ArgusSamples::GalleryItemVideo']]], + ['gallerythread',['GalleryThread',['../classArgusSamples_1_1GalleryThread.html#a26d24564ff889340fe8990a864f59477',1,'ArgusSamples::GalleryThread']]], + ['get',['get',['../classArgusSamples_1_1GstUnrefer.html#a2eef3eb9fc6cfb71c57788cea4d4178d',1,'ArgusSamples::GstUnrefer::get()'],['../classArgusSamples_1_1TrackedUniqueObj.html#aa1bd2ace6028d9e18416cdc3f9d226d7',1,'ArgusSamples::TrackedUniqueObj::get()']]], + ['getaspectratio',['getAspectRatio',['../classArgusSamples_1_1VideoPipeline.html#afd8697188b988e814b98dc634453a654',1,'ArgusSamples::VideoPipeline']]], + ['getcurrenttime',['getCurrentTime',['../namespaceArgusSamples.html#aabd2eb9c698c8f52b1ec2fa287e0908d',1,'ArgusSamples']]], + ['getdata',['getData',['../classArgusSamples_1_1GalleryItemImage.html#aefcafe95f70b7a0d58a3f33a05be7381',1,'ArgusSamples::GalleryItemImage']]], + ['getdeviceaperturemotorspeedrange',['getDeviceApertureMotorSpeedRange',['../classArgusSamples_1_1Dispatcher.html#a4a2bbce98a470cae10fd46195e749284',1,'ArgusSamples::Dispatcher']]], + ['getdeviceaperturepositionrange',['getDeviceAperturePositionRange',['../classArgusSamples_1_1Dispatcher.html#a2b093a05797e23a0dfe6be68471db2f5',1,'ArgusSamples::Dispatcher']]], + ['getdevicecount',['getDeviceCount',['../classArgusSamples_1_1Dispatcher.html#afb00309553d55ef37c1e2f2245c777f4',1,'ArgusSamples::Dispatcher']]], + ['getdevicefocuspositionrange',['getDeviceFocusPositionRange',['../classArgusSamples_1_1Dispatcher.html#abfeb9bf507628bcc70c3b685fe76c311',1,'ArgusSamples::Dispatcher']]], + ['getegldisplay',['getEGLDisplay',['../classArgusSamples_1_1Composer.html#adcf36f916f350b3bc301f54f55106c97',1,'ArgusSamples::Composer']]], + ['geteglstream',['getEGLStream',['../classArgusSamples_1_1GalleryItemVideo.html#a6f96989bf7ee3efb307f51bdd34a0fde',1,'ArgusSamples::GalleryItemVideo']]], + ['getfileextension',['getFileExtension',['../classArgusSamples_1_1VideoPipeline.html#a6bd711d871b1f3d3a63b532c77d714da',1,'ArgusSamples::VideoPipeline']]], + ['getfilename',['getFileName',['../classArgusSamples_1_1GalleryItem.html#a1257150c9eaf6aba937a0cdc3d65147f',1,'ArgusSamples::GalleryItem']]], + ['getheight',['getHeight',['../classArgusSamples_1_1GalleryItemImage.html#a5e5ce4987cd3a3f9ca530bb17963b9c8',1,'ArgusSamples::GalleryItemImage']]], + ['getinfo',['getInfo',['../classArgusSamples_1_1Dispatcher.html#a336bef8e2a26de1e0f5d1ea85cb599f6',1,'ArgusSamples::Dispatcher']]], + ['getinstance',['getInstance',['../classArgusSamples_1_1Dispatcher.html#a27c03ac9165a07afd38f5bdc27ac275e',1,'ArgusSamples::Dispatcher::getInstance()'],['../classArgusSamples_1_1PerfTracker.html#af2a0116401e186ddc69c31bb35cef9b6',1,'ArgusSamples::PerfTracker::getInstance()'],['../classArgusSamples_1_1Composer.html#ab5414e37a967badf08f0046cf2f26d17',1,'ArgusSamples::Composer::getInstance()']]], + ['getnewsessionid',['getNewSessionID',['../classArgusSamples_1_1PerfTracker.html#a7c1289cefda89cced98d7e8f93ee0ffe',1,'ArgusSamples::PerfTracker']]], + ['getoutputsize',['getOutputSize',['../classArgusSamples_1_1Dispatcher.html#acf3c377c9e25ba7d2bf03b463b24e572',1,'ArgusSamples::Dispatcher']]], + ['getoutputstream',['getOutputStream',['../classArgusSamples_1_1GalleryThread.html#a7cba48026b0b5bf7c289c9ced777b7c9',1,'ArgusSamples::GalleryThread']]], + ['getpthreadmutex',['getPThreadMutex',['../classArgusSamples_1_1Mutex.html#a454e4397e737c4ee8e1bed8c43e24e10',1,'ArgusSamples::Mutex']]], + ['getsensormode',['getSensorMode',['../classArgusSamples_1_1Dispatcher.html#a4743dad610a1a11955df10f2bb816e7f',1,'ArgusSamples::Dispatcher']]], + ['getstreamaspectratio',['getStreamAspectRatio',['../classArgusSamples_1_1StreamConsumer.html#ae93d5a2f0e1ecaa4e7fd4ab29c7bbc7d',1,'ArgusSamples::StreamConsumer']]], + ['getstreamstate',['getStreamState',['../classArgusSamples_1_1StreamConsumer.html#a3933de802ee5caa7e1054ff7a570cab0',1,'ArgusSamples::StreamConsumer']]], + ['getstreamtextureid',['getStreamTextureID',['../classArgusSamples_1_1StreamConsumer.html#ac618fbb6ec2fd0cb953725eaed9f5068',1,'ArgusSamples::StreamConsumer']]], + ['gettype',['getType',['../classArgusSamples_1_1GalleryItem.html#a13c2129c83685b4906b7ac833698b78a',1,'ArgusSamples::GalleryItem::getType()'],['../classArgusSamples_1_1GalleryItemImage.html#acb1e5fc3e059cc8576af3783a5989a8b',1,'ArgusSamples::GalleryItemImage::getType()'],['../classArgusSamples_1_1GalleryItemVideo.html#a92484bcee6f5b81c1b51b3fd7f1dee90',1,'ArgusSamples::GalleryItemVideo::getType()']]], + ['getwidth',['getWidth',['../classArgusSamples_1_1GalleryItemImage.html#a3cce8d4f3e91bc05b2e0653907c04740',1,'ArgusSamples::GalleryItemImage']]], + ['gstunrefer',['GstUnrefer',['../classArgusSamples_1_1GstUnrefer.html#a7072ba6bfe7cf2ce3efde28082e409c6',1,'ArgusSamples::GstUnrefer::GstUnrefer(T *p)'],['../classArgusSamples_1_1GstUnrefer.html#a5d2e795daba5a6d1d12ad2ee1461605b',1,'ArgusSamples::GstUnrefer::GstUnrefer()'],['../classArgusSamples_1_1GstUnrefer.html#a0d521b0e8e4a4896f5dfcedec0bf8034',1,'ArgusSamples::GstUnrefer::GstUnrefer(GstUnrefer &other)']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_69.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_69.html new file mode 100644 index 0000000..e204197 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_69.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_69.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_69.js new file mode 100644 index 0000000..b9c39b4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_69.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['iappmodule',['IAppModule',['../classArgusSamples_1_1IAppModule.html#a0c18a8a792e1da3ea6f9a8b7592d2a7a',1,'ArgusSamples::IAppModule']]], + ['infinite',['infinite',['../classArgusSamples_1_1TimeValue.html#a219468b789b81e21580e641ada39e800',1,'ArgusSamples::TimeValue']]], + ['info',['info',['../classArgusSamples_1_1AppModuleGeneric.html#a3e29a9691571ae9ff7476b9ecfbe180b',1,'ArgusSamples::AppModuleGeneric']]], + ['initialize',['initialize',['../classArgusSamples_1_1ConditionVariable.html#a5f896a8d46016ebd9b0ea22af70006a2',1,'ArgusSamples::ConditionVariable::initialize()'],['../classArgusSamples_1_1Mutex.html#ab8d8b96aa573b87267a33926f995b54e',1,'ArgusSamples::Mutex::initialize()'],['../classArgusSamples_1_1Dispatcher.html#a96489be07c841a020c8298e869aea26f',1,'ArgusSamples::Dispatcher::initialize()'],['../classArgusSamples_1_1ITask.html#a667493a1aae5fcd54cde4c447e43d4f5',1,'ArgusSamples::ITask::initialize()'],['../classArgusSamples_1_1PerfTracker.html#a65422ffb2aecec8aef0cbf5b16352363',1,'ArgusSamples::PerfTracker::initialize()'],['../classArgusSamples_1_1GalleryItem.html#a571062797f738175e71cff9b76d0974d',1,'ArgusSamples::GalleryItem::initialize()'],['../classArgusSamples_1_1GalleryItemImage.html#a6787bec0a6c9d5a58340b4cf1780df20',1,'ArgusSamples::GalleryItemImage::initialize()'],['../classArgusSamples_1_1GalleryItemVideo.html#a8e249ec7030e8092658248e4683ea5c5',1,'ArgusSamples::GalleryItemVideo::initialize()'],['../classArgusSamples_1_1GalleryThread.html#a1186576444659a43c92b50fca0d79b5e',1,'ArgusSamples::GalleryThread::initialize()'],['../classArgusSamples_1_1TaskGallery.html#a429be15094915506dc792e119a9ef2a8',1,'ArgusSamples::TaskGallery::initialize()'],['../classArgusSamples_1_1TaskMultiExposure.html#aaf5d9c41f374d63864658ed91994ff5a',1,'ArgusSamples::TaskMultiExposure::initialize()'],['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#ae666afa543c453341ceaeeeb6eac4260',1,'ArgusSamples::TaskMultiExposure::ExpLevel::initialize()'],['../classArgusSamples_1_1TaskMultiSession.html#ac4a5c60483701597e3993de571eeb8f3',1,'ArgusSamples::TaskMultiSession::initialize()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#aeedeeeac75287de1f2dcaa5602965d1a',1,'ArgusSamples::TaskMultiSession::Session::initialize()'],['../classArgusSamples_1_1TaskStillCapture.html#ade81b0f85ee819d5f3e0581c7b5b64d9',1,'ArgusSamples::TaskStillCapture::initialize()'],['../classArgusSamples_1_1TaskVideoRecord.html#a721db3422a0f4a257c2fb9edf6cdfa08',1,'ArgusSamples::TaskVideoRecord::initialize()'],['../classArgusSamples_1_1Composer.html#a7a9d1d85d583c069251b962dd185539b',1,'ArgusSamples::Composer::initialize()'],['../classArgusSamples_1_1StreamConsumer.html#aab6b96e7569bfadff2f2641aa163dca4',1,'ArgusSamples::StreamConsumer::initialize()'],['../classArgusSamples_1_1CameraApp.html#a2a241abb2f5dae8e4b36df963412054a',1,'ArgusSamples::CameraApp::initialize()'],['../classArgusSamples_1_1AppModuleCapture.html#a72759a9523f523a5492b21bcb2e9d5ec',1,'ArgusSamples::AppModuleCapture::initialize()'],['../classArgusSamples_1_1App.html#a30110fcd3c585e5ed7fea8548bb55b3f',1,'ArgusSamples::App::initialize()'],['../classArgusSamples_1_1AppModuleGeneric.html#a1686ebc3219c3a0870003714b571d0b5',1,'ArgusSamples::AppModuleGeneric::initialize()'],['../classArgusSamples_1_1IAppModule.html#ad30cfdacb8ef6de9a89055a54035f183',1,'ArgusSamples::IAppModule::initialize()'],['../classArgusSamples_1_1AppModuleGallery.html#a298558396682f8eab6d15275d59884fc',1,'ArgusSamples::AppModuleGallery::initialize()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#acba80f2522a340c0bab01b25ee93bcbd',1,'ArgusSamples::AppModuleMultiExposure::initialize()'],['../classArgusSamples_1_1AppModuleMultiSession.html#a6e52012a8e1422e82a656b545d59db9b',1,'ArgusSamples::AppModuleMultiSession::initialize()'],['../classArgusSamples_1_1AppModuleVideo.html#a05eb1f40836d5d9886fdbc08dd0bcfc7',1,'ArgusSamples::AppModuleVideo::initialize()']]], + ['iseglstream',['isEGLStream',['../classArgusSamples_1_1StreamConsumer.html#aaa78fdc9618d0baf29aa710ea0e512c5',1,'ArgusSamples::StreamConsumer']]], + ['isinterface',['isInterface',['../classArgusSamples_1_1IObserverForInterface.html#af3995c20e07afeaa717a1511ac217305',1,'ArgusSamples::IObserverForInterface::isInterface()'],['../classArgusSamples_1_1DenoiseSettingsObserver.html#aedc546b86ce9a922ebab962ae5b3accc',1,'ArgusSamples::DenoiseSettingsObserver::isInterface()'],['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a3d37cc771f11cb0e4a2d38fcac7083d9',1,'ArgusSamples::EdgeEnhanceSettingsObserver::isInterface()'],['../classArgusSamples_1_1SourceSettingsObserver.html#a0a640d6d498f7d3ef37731caa8524404',1,'ArgusSamples::SourceSettingsObserver::isInterface()'],['../classArgusSamples_1_1AutoControlSettingsObserver.html#a621be80058fa09c5e5c68be736b94c10',1,'ArgusSamples::AutoControlSettingsObserver::isInterface()'],['../classArgusSamples_1_1DeFogSettingsObserver.html#a319b81d2943beb1a980f694745daaa8f',1,'ArgusSamples::DeFogSettingsObserver::isInterface()']]], + ['issupported',['isSupported',['../classArgusSamples_1_1VideoPipeline.html#a22f6c2b824d2568a1e419983b8f3833e',1,'ArgusSamples::VideoPipeline']]], + ['itask',['ITask',['../classArgusSamples_1_1ITask.html#a6073cd9834619b5265eb81aac0fc0a90',1,'ArgusSamples::ITask']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6c.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6c.html new file mode 100644 index 0000000..da371cf --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6c.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6c.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6c.js new file mode 100644 index 0000000..d7c0467 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['leavescope',['leaveScope',['../classArgusSamples_1_1ScopedGuard.html#a48fd268e3d0d7049f96d7d74515c36aa',1,'ArgusSamples::ScopedGuard']]], + ['loadconfig',['loadConfig',['../classArgusSamples_1_1AppModuleGeneric.html#aae35970d9152926e8831b27b820206e9',1,'ArgusSamples::AppModuleGeneric::loadConfig()'],['../namespaceArgusSamples.html#a41db422469cba993afc3e96da42f9519',1,'ArgusSamples::loadConfig()']]], + ['lock',['lock',['../classArgusSamples_1_1Mutex.html#aadad032498bfaf91e4c528418247f201',1,'ArgusSamples::Mutex']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6d.html new file mode 100644 index 0000000..d01ac53 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6d.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6d.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6d.js new file mode 100644 index 0000000..88c73bf --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6d.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['main',['main',['../Main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'Main.cpp']]], + ['maxburstrequests',['maxBurstRequests',['../classArgusSamples_1_1Dispatcher.html#a22c8adba268c263857fa5d677e58e60d',1,'ArgusSamples::Dispatcher']]], + ['message',['message',['../classArgusSamples_1_1Dispatcher.html#a6fd8b82bf276e3d3ebf0f8dee616ba3c',1,'ArgusSamples::Dispatcher']]], + ['mutex',['Mutex',['../classArgusSamples_1_1Mutex.html#a2c8312081a9f5029df7046539568de7c',1,'ArgusSamples::Mutex::Mutex()'],['../classArgusSamples_1_1Mutex.html#a69674606a33e096a602a8a4453aee8b5',1,'ArgusSamples::Mutex::Mutex(Mutex &other)']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6e.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6e.html new file mode 100644 index 0000000..d734dd0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6e.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6e.js new file mode 100644 index 0000000..ed65b8c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nextitem',['nextItem',['../classArgusSamples_1_1TaskGallery.html#a7255393535a1d6c44c84b047580cca0c',1,'ArgusSamples::TaskGallery::nextItem()'],['../classArgusSamples_1_1AppModuleGallery.html#a6c4785496b7e5e29b856184875f9e018',1,'ArgusSamples::AppModuleGallery::nextItem()']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6f.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6f.html new file mode 100644 index 0000000..222f0f8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6f.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6f.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6f.js new file mode 100644 index 0000000..3df616e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_6f.js @@ -0,0 +1,45 @@ +var searchData= +[ + ['onacregionchanged',['onAcRegionChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#a592d881109de6eb8c1de9b5b6dabc94e',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onaeantibandingmodechanged',['onAeAntibandingModeChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#aed117146c09d51bd8aecf379ea0d449c',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onaelockchanged',['onAeLockChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#af22e8f676aed3b0f8e207b24a0eeb4bd',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onaperturefnumchanged',['onApertureFnumChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a8abd24b3e3efe21517738510723899e3',1,'ArgusSamples::SourceSettingsObserver']]], + ['onaperturemotorspeedchanged',['onApertureMotorSpeedChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#ade3ebfdd6de6c7c2f0ba416fac8004ef',1,'ArgusSamples::SourceSettingsObserver']]], + ['onaperturepositionchanged',['onAperturePositionChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a4fb6f1e46911a13e3bf85a12880f9f82',1,'ArgusSamples::SourceSettingsObserver']]], + ['onawblockchanged',['onAwbLockChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#aa6709360bb8c91bd679bbd1bf3e18204',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onawbmodechanged',['onAwbModeChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#a4614ae347126f51c7cac17f10dd32e7e',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['oncaptureyuvformatchanged',['onCaptureYuvFormatChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#ad8c60c613eef7c03b4bd0be544831a83',1,'ArgusSamples::SourceSettingsObserver']]], + ['ondefogamountchanged',['onDeFogAmountChanged',['../classArgusSamples_1_1DeFogSettingsObserver.html#a23dad1383d26fa0b27a123be2ff374c0',1,'ArgusSamples::DeFogSettingsObserver']]], + ['ondefogenablechanged',['onDeFogEnableChanged',['../classArgusSamples_1_1DeFogSettingsObserver.html#a1765a06b40f743cc06f0d2ab77878529',1,'ArgusSamples::DeFogSettingsObserver']]], + ['ondefogqualitychanged',['onDeFogQualityChanged',['../classArgusSamples_1_1DeFogSettingsObserver.html#a71605677e278239f985f4d0ed00de9f8',1,'ArgusSamples::DeFogSettingsObserver']]], + ['ondenoisemodechanged',['onDenoiseModeChanged',['../classArgusSamples_1_1DenoiseSettingsObserver.html#a64fad1360d1eda89f1d01b0cf593611b',1,'ArgusSamples::DenoiseSettingsObserver']]], + ['ondenoisestrengthchanged',['onDenoiseStrengthChanged',['../classArgusSamples_1_1DenoiseSettingsObserver.html#a5f5514b92aaa330add38c29e4fcef403',1,'ArgusSamples::DenoiseSettingsObserver']]], + ['ondeviceindexchanged',['onDeviceIndexChanged',['../classArgusSamples_1_1Dispatcher.html#a271bd50e07152395cc38d9aa3ba8d221',1,'ArgusSamples::Dispatcher']]], + ['ondeviceopenchanged',['onDeviceOpenChanged',['../classArgusSamples_1_1TaskMultiExposure.html#a426dcd26ee6d01e865f8851f0f550298',1,'ArgusSamples::TaskMultiExposure::onDeviceOpenChanged()'],['../classArgusSamples_1_1TaskStillCapture.html#a216bfc2b791163e21fae0492af8498a7',1,'ArgusSamples::TaskStillCapture::onDeviceOpenChanged()'],['../classArgusSamples_1_1TaskVideoRecord.html#a26fde817b1419a6f116931ecefdf08d2',1,'ArgusSamples::TaskVideoRecord::onDeviceOpenChanged()']]], + ['onedgeenhancemodechanged',['onEdgeEnhanceModeChanged',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a011d7719a5c0def88384febf7dc7c185',1,'ArgusSamples::EdgeEnhanceSettingsObserver']]], + ['onedgeenhancestrengthchanged',['onEdgeEnhanceStrengthChanged',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a1720c4fee0e277548f0abdf540d3d665',1,'ArgusSamples::EdgeEnhanceSettingsObserver']]], + ['onevent',['onEvent',['../classArgusSamples_1_1PerfTracker.html#a8e075e88828ce69f409fc62accd87e21',1,'ArgusSamples::PerfTracker::onEvent()'],['../classArgusSamples_1_1SessionPerfTracker.html#adc0d9a7ed537ce62f2172eb5d4d3014a',1,'ArgusSamples::SessionPerfTracker::onEvent()']]], + ['onexposurecompensationchanged',['onExposureCompensationChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#a24e95c542dca94c0144d5e00e8a21c86',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onexposuretimerangechanged',['onExposureTimeRangeChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#aa7f7f31c628321259d663fc7e642a3aa',1,'ArgusSamples::SourceSettingsObserver']]], + ['onfocuspositionchanged',['onFocusPositionChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a7812e47102163133915bdf3e43dc3ad1',1,'ArgusSamples::SourceSettingsObserver']]], + ['onframeratechanged',['onFrameRateChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a0169529dfb6a53b6b1a1249b7a5ad379',1,'ArgusSamples::SourceSettingsObserver']]], + ['ongainrangechanged',['onGainRangeChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a75f6325de1c0178e6ce58166b51a7bd6',1,'ArgusSamples::SourceSettingsObserver']]], + ['onispdigitalgainrangechanged',['onIspDigitalGainRangeChanged',['../classArgusSamples_1_1AutoControlSettingsObserver.html#af8a5bffa13eb5003446d42958d5d8f6f',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['onkey',['onKey',['../classArgusSamples_1_1CameraApp.html#a7763a2793577772f4a3d595ee2dc9670',1,'ArgusSamples::CameraApp::onKey()'],['../classArgusSamples_1_1AppModuleCapture.html#a14bb924a18f011836c6bee764a10effc',1,'ArgusSamples::AppModuleCapture::onKey()'],['../classArgusSamples_1_1App.html#a504d5c60fb3b59c67daf9db712b6c564',1,'ArgusSamples::App::onKey()'],['../classArgusSamples_1_1AppModuleGallery.html#a5f5504774f497ffe2bae35650bed0323',1,'ArgusSamples::AppModuleGallery::onKey()'],['../classArgusSamples_1_1AppModuleVideo.html#a2a2830c2cace376c48386b0ad0490cd2',1,'ArgusSamples::AppModuleVideo::onKey()']]], + ['onmodulechanged',['onModuleChanged',['../classArgusSamples_1_1CameraApp.html#a19d3b5bd2fd5461b26668663ae72a69f',1,'ArgusSamples::CameraApp']]], + ['onparameterschanged',['onParametersChanged',['../classArgusSamples_1_1TaskMultiExposure.html#a164065090a7a102f5b4d43ae41218cce',1,'ArgusSamples::TaskMultiExposure']]], + ['onresize',['onResize',['../classArgusSamples_1_1Composer.html#a8cb864fdeccb8d76c8c08f0b73a85710',1,'ArgusSamples::Composer']]], + ['onsensormodechanged',['onSensorModeChanged',['../classArgusSamples_1_1SourceSettingsObserver.html#a9ce50ea522004a2f316d9a4027d9dc62',1,'ArgusSamples::SourceSettingsObserver']]], + ['onsensormodeindexchanged',['onSensorModeIndexChanged',['../classArgusSamples_1_1Dispatcher.html#a7ab03520fa70d5036d42d9d7399a7e2a',1,'ArgusSamples::Dispatcher']]], + ['onsensormodevalidchanged',['onSensorModeValidChanged',['../classArgusSamples_1_1TaskMultiExposure.html#a9ebc361b5a6af351c71d335a7715d33b',1,'ArgusSamples::TaskMultiExposure::onSensorModeValidChanged()'],['../classArgusSamples_1_1TaskMultiSession.html#a50f7c59bd79b83e32cab81acc49b866d',1,'ArgusSamples::TaskMultiSession::onSensorModeValidChanged()'],['../classArgusSamples_1_1TaskStillCapture.html#a2df2e81fe7dc899486e21c532869f4da',1,'ArgusSamples::TaskStillCapture::onSensorModeValidChanged()'],['../classArgusSamples_1_1TaskVideoRecord.html#ae87d88f3a594f9b2fb724395311c5e1a',1,'ArgusSamples::TaskVideoRecord::onSensorModeValidChanged()']]], + ['operator_20bool',['operator bool',['../classArgusSamples_1_1TrackedUniqueObj.html#ab0b7d9ed41b50e54b2117ddfc42a137b',1,'ArgusSamples::TrackedUniqueObj']]], + ['operator_21_3d',['operator!=',['../classArgusSamples_1_1TimeValue.html#a44857f827a5b5514727ce71fe3a1742f',1,'ArgusSamples::TimeValue']]], + ['operator_2b',['operator+',['../classArgusSamples_1_1TimeValue.html#aa198ab14451bf0e2d760880d3ed55e46',1,'ArgusSamples::TimeValue']]], + ['operator_2d',['operator-',['../classArgusSamples_1_1TimeValue.html#a3b7e7757bdb2b0d6331955c4272503a2',1,'ArgusSamples::TimeValue']]], + ['operator_3c',['operator<',['../classArgusSamples_1_1TimeValue.html#a67185c646a852de06c5d9ef8ee53c9c1',1,'ArgusSamples::TimeValue']]], + ['operator_3c_3d',['operator<=',['../classArgusSamples_1_1TimeValue.html#a3972ff088b804cf4f3bfa9ffb4f0f89a',1,'ArgusSamples::TimeValue']]], + ['operator_3d',['operator=',['../classArgusSamples_1_1ConditionVariable.html#ac6af05bee1801719ee03814d05624792',1,'ArgusSamples::ConditionVariable::operator=()'],['../classArgusSamples_1_1Mutex.html#a95789911c1cef4f73933151bd2c77298',1,'ArgusSamples::Mutex::operator=()'],['../classArgusSamples_1_1ScopedMutex.html#ae7881ef122c0b557947e6067782612b5',1,'ArgusSamples::ScopedMutex::operator=()'],['../classArgusSamples_1_1ScopedGuard.html#a91be247c5cf6f33da670efd051644430',1,'ArgusSamples::ScopedGuard::operator=()'],['../classArgusSamples_1_1GstUnrefer.html#a0c331e4c4e592f76b3a91852b32040b9',1,'ArgusSamples::GstUnrefer::operator=()'],['../classArgusSamples_1_1Dispatcher.html#a56ffac0706f9ac0b5a61be64534cdb44',1,'ArgusSamples::Dispatcher::operator=()'],['../classArgusSamples_1_1PerfTracker.html#a1a14f727ae3642b6c7ccc8d7cf6ba24f',1,'ArgusSamples::PerfTracker::operator=()'],['../classArgusSamples_1_1Composer.html#ac0f3d88a285a429f5d5ae0d106712dd6',1,'ArgusSamples::Composer::operator=()']]], + ['operator_3d_3d',['operator==',['../classArgusSamples_1_1TimeValue.html#a0768396d059d79fddd55b30fbd016149',1,'ArgusSamples::TimeValue']]], + ['operator_3e',['operator>',['../classArgusSamples_1_1TimeValue.html#aca5932ea45df54d1e9562c8754d05dc7',1,'ArgusSamples::TimeValue']]], + ['operator_3e_3d',['operator>=',['../classArgusSamples_1_1TimeValue.html#a702fe5f2eb2a990dee5b598d39d69625',1,'ArgusSamples::TimeValue']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_70.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_70.html new file mode 100644 index 0000000..c62125e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_70.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_70.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_70.js new file mode 100644 index 0000000..c2a8f26 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_70.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['pause',['pause',['../classArgusSamples_1_1VideoPipeline.html#aa82f8ea43a91f20faaf4b157e4e7eec6',1,'ArgusSamples::VideoPipeline']]], + ['pausedisplay',['pauseDisplay',['../classArgusSamples_1_1GalleryItem.html#ae118cb11753dab241d4a054f92045645',1,'ArgusSamples::GalleryItem::pauseDisplay()'],['../classArgusSamples_1_1GalleryItemVideo.html#a7be59949c3564749b290421b82af340f',1,'ArgusSamples::GalleryItemVideo::pauseDisplay()'],['../classArgusSamples_1_1GalleryThread.html#af93aade75f8ba7ddf7c5d07ccefb6123',1,'ArgusSamples::GalleryThread::pauseDisplay()']]], + ['perftracker',['PerfTracker',['../classArgusSamples_1_1PerfTracker.html#a5d6e000ef61a1e6fb1b4076d7b245f41',1,'ArgusSamples::PerfTracker::PerfTracker()'],['../classArgusSamples_1_1PerfTracker.html#af0613429b5c25db088c43a35742f4e3c',1,'ArgusSamples::PerfTracker::PerfTracker(const PerfTracker &)']]], + ['previtem',['prevItem',['../classArgusSamples_1_1TaskGallery.html#a19f1b79ab1d8b6b6c5738a5e05b6de54',1,'ArgusSamples::TaskGallery::prevItem()'],['../classArgusSamples_1_1AppModuleGallery.html#a354e056d93f7de8993c00ee213052ea3',1,'ArgusSamples::AppModuleGallery::prevItem()']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_71.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_71.html new file mode 100644 index 0000000..af909d4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_71.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_71.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_71.js new file mode 100644 index 0000000..d3f907d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_71.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['quit',['quit',['../classArgusSamples_1_1AppModuleGeneric.html#a693fd4647e4946cdc8307293d4f91325',1,'ArgusSamples::AppModuleGeneric']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_72.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_72.html new file mode 100644 index 0000000..a4336f7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_72.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_72.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_72.js new file mode 100644 index 0000000..3751cab --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_72.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['registerobserver',['registerObserver',['../classArgusSamples_1_1Dispatcher.html#a63a676332f2a2c5b37a2a24da06c192e',1,'ArgusSamples::Dispatcher::registerObserver(Argus::IDenoiseSettings *iDenoiseSettings)'],['../classArgusSamples_1_1Dispatcher.html#a428e69f84fde8688fdc65a0ed93022f1',1,'ArgusSamples::Dispatcher::registerObserver(Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings)'],['../classArgusSamples_1_1Dispatcher.html#a88c686e55ccf45d6258ac9457b9c5e30',1,'ArgusSamples::Dispatcher::registerObserver(Argus::ISourceSettings *iSourceSettings)'],['../classArgusSamples_1_1Dispatcher.html#ab2339e709650990b7ebf75941a079ed0',1,'ArgusSamples::Dispatcher::registerObserver(Argus::IAutoControlSettings *iAutoControlSettings)'],['../classArgusSamples_1_1Dispatcher.html#a1c98d830f43ea8d9929699b1d7c5a26b',1,'ArgusSamples::Dispatcher::registerObserver(Argus::Ext::IDeFogSettings *iDeFogSettings)']]], + ['release',['release',['../classArgusSamples_1_1GstUnrefer.html#a9b2eff4bd286c7fcf831aeacef24b29b',1,'ArgusSamples::GstUnrefer']]], + ['renderstreams',['renderStreams',['../classArgusSamples_1_1Composer.html#a20dcb7e93a96ad8168a11375cee520b7',1,'ArgusSamples::Composer']]], + ['reset',['reset',['../classArgusSamples_1_1TrackedUniqueObj.html#a57d12be3f9a54f78dadb193e731c434c',1,'ArgusSamples::TrackedUniqueObj']]], + ['restartactiverequests',['restartActiveRequests',['../classArgusSamples_1_1Dispatcher.html#aeb6abbf009db4153c69a8b81fe1258a8',1,'ArgusSamples::Dispatcher']]], + ['restartstreams',['restartStreams',['../classArgusSamples_1_1TaskMultiExposure.html#a82d38086037bcaf8f871787b73351af5',1,'ArgusSamples::TaskMultiExposure::restartStreams()'],['../classArgusSamples_1_1TaskMultiSession.html#ab9738c9bae9dcbf2a6dfc7c205c48cda',1,'ArgusSamples::TaskMultiSession::restartStreams()'],['../classArgusSamples_1_1TaskStillCapture.html#a30c6aa5eede194e6cb811ceb6d52f861',1,'ArgusSamples::TaskStillCapture::restartStreams()'],['../classArgusSamples_1_1TaskVideoRecord.html#acf4dffcb3c5808142b4e5c38ac3ed01a',1,'ArgusSamples::TaskVideoRecord::restartStreams()']]], + ['rewind',['rewind',['../classArgusSamples_1_1VideoPipeline.html#a4946203b8180205f9c233a26d1c513ab',1,'ArgusSamples::VideoPipeline::rewind()'],['../classArgusSamples_1_1GalleryItem.html#a4e88c325e615b80de45ac5a6e6cbb15e',1,'ArgusSamples::GalleryItem::rewind()'],['../classArgusSamples_1_1GalleryItemVideo.html#ae4dd8de2e205ca1127010064c819e554',1,'ArgusSamples::GalleryItemVideo::rewind()'],['../classArgusSamples_1_1GalleryThread.html#ae0a05b7fa509ae2f2558648d0bbe37dd',1,'ArgusSamples::GalleryThread::rewind()'],['../classArgusSamples_1_1TaskGallery.html#a1317a8b851490342c1ee1332f21cc4cf',1,'ArgusSamples::TaskGallery::rewind()'],['../classArgusSamples_1_1AppModuleGallery.html#a7d91831eb06daea4823e35c0ca9575f9',1,'ArgusSamples::AppModuleGallery::rewind()']]], + ['run',['run',['../classArgusSamples_1_1App.html#aa1ec1f82360ef4cf873f2af7c7cd3df5',1,'ArgusSamples::App']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_73.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_73.html new file mode 100644 index 0000000..774d577 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_73.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_73.js new file mode 100644 index 0000000..d87f6b9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_73.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['saveconfig',['saveConfig',['../classArgusSamples_1_1AppModuleGeneric.html#ae473bb5c74a2d656a3c986ec7cc1bc62',1,'ArgusSamples::AppModuleGeneric::saveConfig()'],['../namespaceArgusSamples.html#a5486dd80a389008bdffdc827e841f027',1,'ArgusSamples::saveConfig()']]], + ['scopedguard',['ScopedGuard',['../classArgusSamples_1_1ScopedGuard.html#a712165da779d24f9601249b95661e29a',1,'ArgusSamples::ScopedGuard::ScopedGuard(T *object, ActionType action)'],['../classArgusSamples_1_1ScopedGuard.html#af4b3c93fc7b1393745ad5a3294f478f0',1,'ArgusSamples::ScopedGuard::ScopedGuard()'],['../classArgusSamples_1_1ScopedGuard.html#a637d3f340f8ecbbaf5cd464a4d042321',1,'ArgusSamples::ScopedGuard::ScopedGuard(ScopedGuard &other)']]], + ['scopedmutex',['ScopedMutex',['../classArgusSamples_1_1ScopedMutex.html#a353e140f6de85084e4faeee3c3085133',1,'ArgusSamples::ScopedMutex::ScopedMutex(Mutex &mutex)'],['../classArgusSamples_1_1ScopedMutex.html#a53e9e3ff7db21670b51c6fecf8d34165',1,'ArgusSamples::ScopedMutex::ScopedMutex()'],['../classArgusSamples_1_1ScopedMutex.html#aad4e52daec1dd937ffd6c632eb646258',1,'ArgusSamples::ScopedMutex::ScopedMutex(ScopedMutex &other)']]], + ['session',['Session',['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#ae0e240209377a03fdee6b277e18592ef',1,'ArgusSamples::TaskMultiSession::Session']]], + ['sessionperftracker',['SessionPerfTracker',['../classArgusSamples_1_1SessionPerfTracker.html#a727415e1a9b4497fad223d9b04ba49df',1,'ArgusSamples::SessionPerfTracker']]], + ['set',['set',['../classArgusSamples_1_1GstUnrefer.html#ac92a1e4773d5bf886ee3e77af0e33a7e',1,'ArgusSamples::GstUnrefer']]], + ['setfrommsec',['setFromMSec',['../classArgusSamples_1_1TimeValue.html#a476565005bdbd80104587686b1047faf',1,'ArgusSamples::TimeValue']]], + ['setfromnsec',['setFromNSec',['../classArgusSamples_1_1TimeValue.html#ad113b9f2d59c5d14dd04bd83fe4c1b59',1,'ArgusSamples::TimeValue']]], + ['setfromsec',['setFromSec',['../classArgusSamples_1_1TimeValue.html#a5da60aaf65e0f12bd7fe2cffb3b26858',1,'ArgusSamples::TimeValue']]], + ['setfromusec',['setFromUSec',['../classArgusSamples_1_1TimeValue.html#a5ab1368938f245318fca2aea9bb6bcb9',1,'ArgusSamples::TimeValue']]], + ['setsession',['setSession',['../classArgusSamples_1_1SessionPerfTracker.html#a261fa1374330f3b553253354c31d1057',1,'ArgusSamples::SessionPerfTracker']]], + ['setstreamactive',['setStreamActive',['../classArgusSamples_1_1Composer.html#a42b34192fe14c8073d586661b1a22dfa',1,'ArgusSamples::Composer']]], + ['setstreamaspectratio',['setStreamAspectRatio',['../classArgusSamples_1_1Composer.html#a112f1fdcda5e34fa562099407196e13a',1,'ArgusSamples::Composer::setStreamAspectRatio()'],['../classArgusSamples_1_1StreamConsumer.html#aa31559d4aac5d964fc7a16fade758d1f',1,'ArgusSamples::StreamConsumer::setStreamAspectRatio()']]], + ['setupforplayback',['setupForPlayback',['../classArgusSamples_1_1VideoPipeline.html#a30ecd44f5bfc3333d3595123b843bdb1',1,'ArgusSamples::VideoPipeline']]], + ['setupforrecording',['setupForRecording',['../classArgusSamples_1_1VideoPipeline.html#af6ca1a5d8153cad619812186ed11042c',1,'ArgusSamples::VideoPipeline']]], + ['shutdown',['shutdown',['../classArgusSamples_1_1ConditionVariable.html#a9e3e6eb9ba64faf0fc55617bfdb29f58',1,'ArgusSamples::ConditionVariable::shutdown()'],['../classArgusSamples_1_1Mutex.html#a1a2ce518248636494d06dfda61847818',1,'ArgusSamples::Mutex::shutdown()'],['../classArgusSamples_1_1Dispatcher.html#ae6b3f51394a03f158b1531ac58f50eec',1,'ArgusSamples::Dispatcher::shutdown()'],['../classArgusSamples_1_1ITask.html#a5891b29c51e0651bf870936a51af4bcb',1,'ArgusSamples::ITask::shutdown()'],['../classArgusSamples_1_1SessionPerfTracker.html#a2a72c6e76df636dcc2eff8b570f0748a',1,'ArgusSamples::SessionPerfTracker::shutdown()'],['../classArgusSamples_1_1GalleryItem.html#a91446eed2e58d2dd1f9d0ceeff841146',1,'ArgusSamples::GalleryItem::shutdown()'],['../classArgusSamples_1_1GalleryItemImage.html#a092f74303994334648c53ad0d2ecb191',1,'ArgusSamples::GalleryItemImage::shutdown()'],['../classArgusSamples_1_1GalleryItemVideo.html#a3282a22aff50e94472d03da783d8230d',1,'ArgusSamples::GalleryItemVideo::shutdown()'],['../classArgusSamples_1_1GalleryThread.html#a7b4e218670d8df0c3b3f9772eff20c20',1,'ArgusSamples::GalleryThread::shutdown()'],['../classArgusSamples_1_1TaskGallery.html#a17674ab89f90986e43e52c65d2a49d8f',1,'ArgusSamples::TaskGallery::shutdown()'],['../classArgusSamples_1_1TaskMultiExposure.html#a6a5b8655485040985cebfb51d8e63579',1,'ArgusSamples::TaskMultiExposure::shutdown()'],['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#a5c88a460519f0f4b707fad17e97cb1de',1,'ArgusSamples::TaskMultiExposure::ExpLevel::shutdown()'],['../classArgusSamples_1_1TaskMultiSession.html#a8a8e67e9603566b69105357d0c396205',1,'ArgusSamples::TaskMultiSession::shutdown()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a4bc691025d80a2bbf85276824c807138',1,'ArgusSamples::TaskMultiSession::Session::shutdown()'],['../classArgusSamples_1_1TaskStillCapture.html#a5484e90bf1dc608c385dea11d547a90a',1,'ArgusSamples::TaskStillCapture::shutdown()'],['../classArgusSamples_1_1TaskVideoRecord.html#a71f6add4abdfb25a602429647a01eba1',1,'ArgusSamples::TaskVideoRecord::shutdown()'],['../classArgusSamples_1_1Composer.html#aef2e50e7322725b391fb04d6bb6483c0',1,'ArgusSamples::Composer::shutdown()'],['../classArgusSamples_1_1StreamConsumer.html#a1594213ed82947225de4d0db8bfe2304',1,'ArgusSamples::StreamConsumer::shutdown()'],['../classArgusSamples_1_1CameraApp.html#ac4f8f868f7e5b072e8ed359cae5d1006',1,'ArgusSamples::CameraApp::shutdown()'],['../classArgusSamples_1_1AppModuleCapture.html#aac8c08cfcd50bb639025dab4ef16a40a',1,'ArgusSamples::AppModuleCapture::shutdown()'],['../classArgusSamples_1_1App.html#adfc951e6ce4ef00bb34e8f22d251c574',1,'ArgusSamples::App::shutdown()'],['../classArgusSamples_1_1AppModuleGeneric.html#a879857ca8eb91a46984f5bea7c7126e8',1,'ArgusSamples::AppModuleGeneric::shutdown()'],['../classArgusSamples_1_1IAppModule.html#a21b3ed7a5f65dfd7aebd5ebbc966cc98',1,'ArgusSamples::IAppModule::shutdown()'],['../classArgusSamples_1_1AppModuleGallery.html#a171a0b37be53786f32b328883a60b8e9',1,'ArgusSamples::AppModuleGallery::shutdown()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a2909e07e4fda0bdfd738e51d73c2de3c',1,'ArgusSamples::AppModuleMultiExposure::shutdown()'],['../classArgusSamples_1_1AppModuleMultiSession.html#abba5483871d8bacfc0702daf4f1346c8',1,'ArgusSamples::AppModuleMultiSession::shutdown()'],['../classArgusSamples_1_1AppModuleVideo.html#a3e1c7bf820f1a84ecf4e0e88dc77ed54',1,'ArgusSamples::AppModuleVideo::shutdown()']]], + ['shutdownexplevels',['shutdownExpLevels',['../classArgusSamples_1_1TaskMultiExposure.html#a37a93c8cca9ef03c55c1e7adf9ed8782',1,'ArgusSamples::TaskMultiExposure']]], + ['shutdownsessions',['shutdownSessions',['../classArgusSamples_1_1TaskMultiSession.html#ae3429057c7a5c302d234de0e96f73727',1,'ArgusSamples::TaskMultiSession']]], + ['signal',['signal',['../classArgusSamples_1_1ConditionVariable.html#a958b3ea988ad62605358c91dcf5f8fee',1,'ArgusSamples::ConditionVariable']]], + ['sourcesettingsobserver',['SourceSettingsObserver',['../classArgusSamples_1_1SourceSettingsObserver.html#a3c4f1919efac6e8e4da69faf5e1169f8',1,'ArgusSamples::SourceSettingsObserver']]], + ['start',['start',['../classArgusSamples_1_1VideoPipeline.html#a91f957052743673835d39fcfdb91c13a',1,'ArgusSamples::VideoPipeline::start()'],['../classArgusSamples_1_1ITask.html#a80bafe246911afeb08d21c6d33f9cade',1,'ArgusSamples::ITask::start()'],['../classArgusSamples_1_1GalleryThread.html#a9a3bdf0b1382042db9e98799b3c5d6d9',1,'ArgusSamples::GalleryThread::start()'],['../classArgusSamples_1_1TaskGallery.html#aa34c7e9ce5f6b906c0c56fb434c02352',1,'ArgusSamples::TaskGallery::start()'],['../classArgusSamples_1_1TaskMultiExposure.html#a98dfbb03d0cb913f118f60c4e491d428',1,'ArgusSamples::TaskMultiExposure::start()'],['../classArgusSamples_1_1TaskMultiSession.html#ae7d2daea71e6ab806cb39c857e6ea0b2',1,'ArgusSamples::TaskMultiSession::start()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a3c81c9c3858b95bfe2455f84230eaa48',1,'ArgusSamples::TaskMultiSession::Session::start()'],['../classArgusSamples_1_1TaskStillCapture.html#a54427c90d47e216fc5daeb715afee224',1,'ArgusSamples::TaskStillCapture::start()'],['../classArgusSamples_1_1TaskVideoRecord.html#ae62a5bdab9592462d9398812edead5df',1,'ArgusSamples::TaskVideoRecord::start()'],['../classArgusSamples_1_1CameraApp.html#a1241e6d4ede1c297d8ad9edb0afbd5cf',1,'ArgusSamples::CameraApp::start()'],['../classArgusSamples_1_1AppModuleCapture.html#afa70c2e8d828660a6e64e326d3a6c2e2',1,'ArgusSamples::AppModuleCapture::start()'],['../classArgusSamples_1_1App.html#a53fa8b2aaf2f425832ba2526edca0f6f',1,'ArgusSamples::App::start()'],['../classArgusSamples_1_1AppModuleGeneric.html#a380e94f57e73c5de69a0037a514f89b4',1,'ArgusSamples::AppModuleGeneric::start()'],['../classArgusSamples_1_1IAppModule.html#a6c52e1cfeb5ea97703b4307b4e9c15fa',1,'ArgusSamples::IAppModule::start()'],['../classArgusSamples_1_1AppModuleGallery.html#a1a60cfc88aad84c85b6274bce727fd83',1,'ArgusSamples::AppModuleGallery::start()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a27f8598d608b1d84341c5aff4721f8ab',1,'ArgusSamples::AppModuleMultiExposure::start()'],['../classArgusSamples_1_1AppModuleMultiSession.html#ac8fde2461d384d35aec117876f88fa66',1,'ArgusSamples::AppModuleMultiSession::start()'],['../classArgusSamples_1_1AppModuleVideo.html#a728bc8c47f4f959a80b200dab1faaf27',1,'ArgusSamples::AppModuleVideo::start()']]], + ['startdisplay',['startDisplay',['../classArgusSamples_1_1GalleryItem.html#a614a5c10f4f6cd7225aaaa89d6fe3f2e',1,'ArgusSamples::GalleryItem::startDisplay()'],['../classArgusSamples_1_1GalleryItemVideo.html#a8e43d21e16adf5e9ca3f5e885e0fc136',1,'ArgusSamples::GalleryItemVideo::startDisplay()'],['../classArgusSamples_1_1GalleryThread.html#a4687029627813897584f3625f77b6319',1,'ArgusSamples::GalleryThread::startDisplay()']]], + ['startrecording',['startRecording',['../classArgusSamples_1_1TaskVideoRecord.html#a505e72006639bb21d34b6be3f3f83f33',1,'ArgusSamples::TaskVideoRecord']]], + ['startrepeat',['startRepeat',['../classArgusSamples_1_1Dispatcher.html#a2696f47fc256f0c057d45eb8f3502c08',1,'ArgusSamples::Dispatcher']]], + ['startrepeatburst',['startRepeatBurst',['../classArgusSamples_1_1Dispatcher.html#aae0e595eb78bff9283d2edbb262fd81f',1,'ArgusSamples::Dispatcher']]], + ['still',['still',['../classArgusSamples_1_1AppModuleCapture.html#a11e4865a2b387cb1f28f64b70c3bcb17',1,'ArgusSamples::AppModuleCapture']]], + ['stop',['stop',['../classArgusSamples_1_1VideoPipeline.html#a997cc043b35470c89b5448563c39b79f',1,'ArgusSamples::VideoPipeline::stop()'],['../classArgusSamples_1_1ITask.html#ab3d17813e200c57cb68f048604a2ea4a',1,'ArgusSamples::ITask::stop()'],['../classArgusSamples_1_1GalleryThread.html#af7634b703504519475fa5c930ad6c450',1,'ArgusSamples::GalleryThread::stop()'],['../classArgusSamples_1_1TaskGallery.html#a302cd359adb86edadb98b1c52e7e7d37',1,'ArgusSamples::TaskGallery::stop()'],['../classArgusSamples_1_1TaskMultiExposure.html#a0c85b9544c71cd4e76c4e0766341e64f',1,'ArgusSamples::TaskMultiExposure::stop()'],['../classArgusSamples_1_1TaskMultiSession.html#ace05514f0f4fb17010c1a6d45bfbb69c',1,'ArgusSamples::TaskMultiSession::stop()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a1d05c20759173b7a1b55bf15c8636f47',1,'ArgusSamples::TaskMultiSession::Session::stop()'],['../classArgusSamples_1_1TaskStillCapture.html#a482a9eb34a137c5dde1f04d716e83f7c',1,'ArgusSamples::TaskStillCapture::stop()'],['../classArgusSamples_1_1TaskVideoRecord.html#abf26bc879d4a9cbe64969ec2787dac28',1,'ArgusSamples::TaskVideoRecord::stop()'],['../classArgusSamples_1_1AppModuleCapture.html#aea5578bbf4c91a35eea15d97db6f2be9',1,'ArgusSamples::AppModuleCapture::stop()'],['../classArgusSamples_1_1AppModuleGeneric.html#a98b3c24d0e71c18262e7ba4244f10acd',1,'ArgusSamples::AppModuleGeneric::stop()'],['../classArgusSamples_1_1IAppModule.html#a3df2a5c47957dfd4fe90f3d2e6b681df',1,'ArgusSamples::IAppModule::stop()'],['../classArgusSamples_1_1AppModuleGallery.html#a0cdca814f7ac9359dcebb540dad1d70a',1,'ArgusSamples::AppModuleGallery::stop()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a2e1f55aa31be327744406addc29d28c0',1,'ArgusSamples::AppModuleMultiExposure::stop()'],['../classArgusSamples_1_1AppModuleMultiSession.html#aa5abd6d2efc9125b3bddcda0d6c28587',1,'ArgusSamples::AppModuleMultiSession::stop()'],['../classArgusSamples_1_1AppModuleVideo.html#ac8a1ccf48d756142df5243c64e95b65d',1,'ArgusSamples::AppModuleVideo::stop()']]], + ['stoprecording',['stopRecording',['../classArgusSamples_1_1TaskVideoRecord.html#aaef17b0be6940cf48941ceb228460d9e',1,'ArgusSamples::TaskVideoRecord']]], + ['stoprepeat',['stopRepeat',['../classArgusSamples_1_1Dispatcher.html#ae936f648a632695a64d928e4f86a26b0',1,'ArgusSamples::Dispatcher']]], + ['stream',['Stream',['../classArgusSamples_1_1Composer_1_1Stream.html#adca544a97adbcccced6bce22d7981da3',1,'ArgusSamples::Composer::Stream']]], + ['streamconsumer',['StreamConsumer',['../classArgusSamples_1_1StreamConsumer.html#add0fc3248eb7febf993e9ffd9e7f535e',1,'ArgusSamples::StreamConsumer::StreamConsumer(EGLStreamKHR eglStream)'],['../classArgusSamples_1_1StreamConsumer.html#a4222e51fa0eb62bd83e8df799abfa73b',1,'ArgusSamples::StreamConsumer::StreamConsumer()']]], + ['supportsextension',['supportsExtension',['../classArgusSamples_1_1Dispatcher.html#abd6a0f1ac8bc8c3567aa7896a5426f1d',1,'ArgusSamples::Dispatcher']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_74.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_74.html new file mode 100644 index 0000000..e3c96c3 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_74.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_74.js new file mode 100644 index 0000000..19810eb --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_74.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['taskgallery',['TaskGallery',['../classArgusSamples_1_1TaskGallery.html#aac353c627a932e20a15637b878569d72',1,'ArgusSamples::TaskGallery']]], + ['taskmultiexposure',['TaskMultiExposure',['../classArgusSamples_1_1TaskMultiExposure.html#a908ce0135a570955d90fa1b301e220fb',1,'ArgusSamples::TaskMultiExposure']]], + ['taskmultisession',['TaskMultiSession',['../classArgusSamples_1_1TaskMultiSession.html#a360402fe92889c722c70bc220b976fc6',1,'ArgusSamples::TaskMultiSession']]], + ['taskstillcapture',['TaskStillCapture',['../classArgusSamples_1_1TaskStillCapture.html#a76b4bb0a3b7597c8bc801a3b3ac1bd97',1,'ArgusSamples::TaskStillCapture']]], + ['taskvideorecord',['TaskVideoRecord',['../classArgusSamples_1_1TaskVideoRecord.html#aac1b183a6af7d47800988de1f3746cac',1,'ArgusSamples::TaskVideoRecord']]], + ['threadexecute',['threadExecute',['../classArgusSamples_1_1EventThread.html#ae6815a4aa478333976c608cec5cfbe6f',1,'ArgusSamples::EventThread::threadExecute()'],['../classArgusSamples_1_1GalleryThread.html#a1446f604f7ebd0f4b8007615c1cc37c5',1,'ArgusSamples::GalleryThread::threadExecute()'],['../classArgusSamples_1_1Composer.html#ac59c900b72da84a9e90f72a6b2d7f8e4',1,'ArgusSamples::Composer::threadExecute()']]], + ['threadinitialize',['threadInitialize',['../classArgusSamples_1_1EventThread.html#a1ca2fcbe920c3c5ee7802fe92352a512',1,'ArgusSamples::EventThread::threadInitialize()'],['../classArgusSamples_1_1GalleryThread.html#a48ab0860cfc6fb0ed83c92343583d5be',1,'ArgusSamples::GalleryThread::threadInitialize()'],['../classArgusSamples_1_1Composer.html#a18a108f1f95d8f07a43f578d4934f03d',1,'ArgusSamples::Composer::threadInitialize()']]], + ['threadshutdown',['threadShutdown',['../classArgusSamples_1_1EventThread.html#ab638abeda6897a6154b6e6c0a495ac47',1,'ArgusSamples::EventThread::threadShutdown()'],['../classArgusSamples_1_1GalleryThread.html#abe95500abd87e88f74976622242fb7c0',1,'ArgusSamples::GalleryThread::threadShutdown()'],['../classArgusSamples_1_1Composer.html#aa8ce4888acda5bf8c5fe412d581f8061',1,'ArgusSamples::Composer::threadShutdown()']]], + ['timevalue',['TimeValue',['../classArgusSamples_1_1TimeValue.html#a1e32ff1527702a162d08de8aaffb6fe7',1,'ArgusSamples::TimeValue::TimeValue()'],['../classArgusSamples_1_1TimeValue.html#abb3d70c3c2e5ccd0bda30ebc0e2ed946',1,'ArgusSamples::TimeValue::TimeValue(NSecType value)']]], + ['tocyclespersec',['toCyclesPerSec',['../classArgusSamples_1_1TimeValue.html#af9090b278527d319d996c70bc0a21704',1,'ArgusSamples::TimeValue']]], + ['toggle',['toggle',['../classArgusSamples_1_1VideoPipeline.html#a1533499b26cf33f84bf298ac752849d0',1,'ArgusSamples::VideoPipeline']]], + ['toggleplayback',['togglePlayBack',['../classArgusSamples_1_1GalleryItem.html#a942a777c507ceb8660b0522f04adb4ab',1,'ArgusSamples::GalleryItem::togglePlayBack()'],['../classArgusSamples_1_1GalleryItemVideo.html#a9da8cac83de3d8f74c2c18d73a3cb40c',1,'ArgusSamples::GalleryItemVideo::togglePlayBack()'],['../classArgusSamples_1_1GalleryThread.html#a9c4be9815c4d62786cd3fcfce31e5c8b',1,'ArgusSamples::GalleryThread::togglePlayBack()'],['../classArgusSamples_1_1TaskGallery.html#a39ea1cc7dece34a69b708f7b85dad8eb',1,'ArgusSamples::TaskGallery::togglePlayBack()'],['../classArgusSamples_1_1AppModuleGallery.html#adeabf7923495c1899a2b0d9d756cf500',1,'ArgusSamples::AppModuleGallery::togglePlayBack()']]], + ['togglerecording',['toggleRecording',['../classArgusSamples_1_1TaskVideoRecord.html#a96459f98102e91826def10d8ffeb767f',1,'ArgusSamples::TaskVideoRecord::toggleRecording()'],['../classArgusSamples_1_1AppModuleVideo.html#abca1250255406e50124741aaab73969d',1,'ArgusSamples::AppModuleVideo::toggleRecording()']]], + ['tomsec',['toMSec',['../classArgusSamples_1_1TimeValue.html#a79b43b5b0dcaed9323203e25aecde979',1,'ArgusSamples::TimeValue']]], + ['tonsec',['toNSec',['../classArgusSamples_1_1TimeValue.html#a72f2e4701ae67b9702e35709072bcff4',1,'ArgusSamples::TimeValue']]], + ['tosec',['toSec',['../classArgusSamples_1_1TimeValue.html#a3da2d1b4baa85cdd82849f60432a4d99',1,'ArgusSamples::TimeValue']]], + ['tousec',['toUSec',['../classArgusSamples_1_1TimeValue.html#a536e28ab949f4a38278c43f0b3bc51fa',1,'ArgusSamples::TimeValue']]], + ['track',['track',['../classArgusSamples_1_1Dispatcher.html#a6d32aac6ebe915a7b50fcec8722ad1d8',1,'ArgusSamples::Dispatcher::track(Argus::CaptureSession *session)'],['../classArgusSamples_1_1Dispatcher.html#ab4ce83bafd8a59a16ab1bb904810f3e1',1,'ArgusSamples::Dispatcher::track(Argus::Request *request)'],['../classArgusSamples_1_1Tracker.html#a114c7ca03b1075fc5c7a09d2d3e64487',1,'ArgusSamples::Tracker::track()']]], + ['trackeduniqueobj',['TrackedUniqueObj',['../classArgusSamples_1_1TrackedUniqueObj.html#aee7fad1d6e1f77007e18ac04eb9fc005',1,'ArgusSamples::TrackedUniqueObj']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_75.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_75.html new file mode 100644 index 0000000..2d61754 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_75.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_75.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_75.js new file mode 100644 index 0000000..53f2390 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_75.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['unbindstream',['unbindStream',['../classArgusSamples_1_1Composer.html#a6347dc6d9b4f5ee16ddda277f190ec86',1,'ArgusSamples::Composer']]], + ['unlock',['unlock',['../classArgusSamples_1_1Mutex.html#a8c8d914842c32cbff4b02c9649185a07',1,'ArgusSamples::Mutex']]], + ['unregisterobserver',['unregisterObserver',['../classArgusSamples_1_1Dispatcher.html#a9dc7c9645ab888e08c604b0a80649d7a',1,'ArgusSamples::Dispatcher']]], + ['untrack',['untrack',['../classArgusSamples_1_1Dispatcher.html#a48d68988b95e254f5dc285a666d871ed',1,'ArgusSamples::Dispatcher::untrack(Argus::CaptureSession *session)'],['../classArgusSamples_1_1Dispatcher.html#a9a52613319da907f82d77904ae37e188',1,'ArgusSamples::Dispatcher::untrack(Argus::Request *request)'],['../classArgusSamples_1_1Tracker.html#aeb9c7ae7c10822e57ca3f5ca63d6a729',1,'ArgusSamples::Tracker::untrack()']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_76.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_76.html new file mode 100644 index 0000000..2ec0569 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_76.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_76.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_76.js new file mode 100644 index 0000000..1a36b9a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_76.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['validateoutputpath',['validateOutputPath',['../namespaceArgusSamples.html#af8203c2aa25588f5ca141cdddbceaa9f',1,'ArgusSamples']]], + ['video',['video',['../classArgusSamples_1_1AppModuleVideo.html#aef412736c034c38c3ea6d2ed105def80',1,'ArgusSamples::AppModuleVideo']]], + ['videopipeline',['VideoPipeline',['../classArgusSamples_1_1VideoPipeline.html#aaa2ffb6e7b9a3b85a007135d99fd5f90',1,'ArgusSamples::VideoPipeline']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_77.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_77.html new file mode 100644 index 0000000..8fe9755 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_77.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_77.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_77.js new file mode 100644 index 0000000..ab6de6a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_77.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['wait',['wait',['../classArgusSamples_1_1ConditionVariable.html#a920acd53e8542fecf770ef4caefed0c0',1,'ArgusSamples::ConditionVariable']]], + ['waitforevents',['waitForEvents',['../classArgusSamples_1_1Dispatcher.html#a86a3ac2e693c463d38ed00caee29f850',1,'ArgusSamples::Dispatcher']]], + ['waitforidle',['waitForIdle',['../classArgusSamples_1_1Dispatcher.html#ae963c69efb96293eaf52243efcbc3d9a',1,'ArgusSamples::Dispatcher']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_7e.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_7e.html new file mode 100644 index 0000000..fd1d3ce --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_7e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_7e.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_7e.js new file mode 100644 index 0000000..9451453 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/functions_7e.js @@ -0,0 +1,44 @@ +var searchData= +[ + ['_7eapp',['~App',['../classArgusSamples_1_1App.html#a61915773426e7ae9c305e830530aac9a',1,'ArgusSamples::App']]], + ['_7eappmodulecapture',['~AppModuleCapture',['../classArgusSamples_1_1AppModuleCapture.html#a51b26e4cf8464a0bf36ff69d21c113a3',1,'ArgusSamples::AppModuleCapture']]], + ['_7eappmodulegallery',['~AppModuleGallery',['../classArgusSamples_1_1AppModuleGallery.html#a084b343dadbad89d8d10a7b4956cae1a',1,'ArgusSamples::AppModuleGallery']]], + ['_7eappmodulegeneric',['~AppModuleGeneric',['../classArgusSamples_1_1AppModuleGeneric.html#aa047df3df194915aea01f4739e91b0f8',1,'ArgusSamples::AppModuleGeneric']]], + ['_7eappmodulemultiexposure',['~AppModuleMultiExposure',['../classArgusSamples_1_1AppModuleMultiExposure.html#a33fe025a1c90ca2e949fb150997e307e',1,'ArgusSamples::AppModuleMultiExposure']]], + ['_7eappmodulemultisession',['~AppModuleMultiSession',['../classArgusSamples_1_1AppModuleMultiSession.html#a0c6bbc283c044f59648176e3a82e340f',1,'ArgusSamples::AppModuleMultiSession']]], + ['_7eappmodulevideo',['~AppModuleVideo',['../classArgusSamples_1_1AppModuleVideo.html#a154442f37e9b873859f5054826a58e57',1,'ArgusSamples::AppModuleVideo']]], + ['_7eautocontrolsettingsobserver',['~AutoControlSettingsObserver',['../classArgusSamples_1_1AutoControlSettingsObserver.html#a0dac4fd3b1f06b1c1a1d84d766d7f9bf',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['_7ecameraapp',['~CameraApp',['../classArgusSamples_1_1CameraApp.html#a85b0e0e1767e149334576b21cacb2155',1,'ArgusSamples::CameraApp']]], + ['_7ecomposer',['~Composer',['../classArgusSamples_1_1Composer.html#a050cccd08ca80c089cde8f9f4449a5cf',1,'ArgusSamples::Composer']]], + ['_7econditionvariable',['~ConditionVariable',['../classArgusSamples_1_1ConditionVariable.html#ace2d4aacbb463159a55d3d7b020e3e95',1,'ArgusSamples::ConditionVariable']]], + ['_7edefogsettingsobserver',['~DeFogSettingsObserver',['../classArgusSamples_1_1DeFogSettingsObserver.html#adf34aaf9e10b967eb431961fc34de8ed',1,'ArgusSamples::DeFogSettingsObserver']]], + ['_7edenoisesettingsobserver',['~DenoiseSettingsObserver',['../classArgusSamples_1_1DenoiseSettingsObserver.html#a57b255718468d39058c38296aa0f8f20',1,'ArgusSamples::DenoiseSettingsObserver']]], + ['_7edispatcher',['~Dispatcher',['../classArgusSamples_1_1Dispatcher.html#a2d9c6c41c85a0e9703f134ff2776bbf6',1,'ArgusSamples::Dispatcher']]], + ['_7eedgeenhancesettingsobserver',['~EdgeEnhanceSettingsObserver',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a0719c999568f2e6eba9f3594114ec795',1,'ArgusSamples::EdgeEnhanceSettingsObserver']]], + ['_7eeventthread',['~EventThread',['../classArgusSamples_1_1EventThread.html#a4d1286000b3de80da07f6b96265997be',1,'ArgusSamples::EventThread']]], + ['_7eexplevel',['~ExpLevel',['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#a9918b19ae429b43242d03604cd5fef01',1,'ArgusSamples::TaskMultiExposure::ExpLevel']]], + ['_7egalleryitem',['~GalleryItem',['../classArgusSamples_1_1GalleryItem.html#ac6923612e56a878f3c4de2c5bd62bf01',1,'ArgusSamples::GalleryItem']]], + ['_7egalleryitemimage',['~GalleryItemImage',['../classArgusSamples_1_1GalleryItemImage.html#a8bd7f7cb78371422f770561a0e5925ff',1,'ArgusSamples::GalleryItemImage']]], + ['_7egalleryitemvideo',['~GalleryItemVideo',['../classArgusSamples_1_1GalleryItemVideo.html#a4d65469c466cb637a01993e37fd8a006',1,'ArgusSamples::GalleryItemVideo']]], + ['_7egallerythread',['~GalleryThread',['../classArgusSamples_1_1GalleryThread.html#a29d83dc069e22de04832285d44c81cbd',1,'ArgusSamples::GalleryThread']]], + ['_7egstunrefer',['~GstUnrefer',['../classArgusSamples_1_1GstUnrefer.html#a18cafa4928ee25bb9d250fe2642eacb7',1,'ArgusSamples::GstUnrefer']]], + ['_7eiappmodule',['~IAppModule',['../classArgusSamples_1_1IAppModule.html#a7d396aa3025ba1258313af3626f5c83f',1,'ArgusSamples::IAppModule']]], + ['_7eiobserverforinterface',['~IObserverForInterface',['../classArgusSamples_1_1IObserverForInterface.html#ade91a1f29d84f78726246391d7925cf5',1,'ArgusSamples::IObserverForInterface']]], + ['_7eitask',['~ITask',['../classArgusSamples_1_1ITask.html#add9eda05dcee82060a10df177d8658fb',1,'ArgusSamples::ITask']]], + ['_7emutex',['~Mutex',['../classArgusSamples_1_1Mutex.html#aadb858bcd27edb91ed94de5dfcfb1d25',1,'ArgusSamples::Mutex']]], + ['_7eperftracker',['~PerfTracker',['../classArgusSamples_1_1PerfTracker.html#a4b9ea090694f1abf06bdbcd5b4e63812',1,'ArgusSamples::PerfTracker']]], + ['_7escopedguard',['~ScopedGuard',['../classArgusSamples_1_1ScopedGuard.html#aa051e79bdbbc9e0a85ee2f1dfa8a09ca',1,'ArgusSamples::ScopedGuard']]], + ['_7escopedmutex',['~ScopedMutex',['../classArgusSamples_1_1ScopedMutex.html#a5d2775e5093c3ea8f5fc6430263711a7',1,'ArgusSamples::ScopedMutex']]], + ['_7esession',['~Session',['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a8065e5ea2be7c99dbddccacd5dfe7938',1,'ArgusSamples::TaskMultiSession::Session']]], + ['_7esessionperftracker',['~SessionPerfTracker',['../classArgusSamples_1_1SessionPerfTracker.html#a1d26af32936c7cf48ee9f192fefe5055',1,'ArgusSamples::SessionPerfTracker']]], + ['_7esourcesettingsobserver',['~SourceSettingsObserver',['../classArgusSamples_1_1SourceSettingsObserver.html#a927b0332eb42c7e7b14802a060afa2ad',1,'ArgusSamples::SourceSettingsObserver']]], + ['_7estreamconsumer',['~StreamConsumer',['../classArgusSamples_1_1StreamConsumer.html#adbf2d3dc79e296039ec5d0f430a8367c',1,'ArgusSamples::StreamConsumer']]], + ['_7etaskgallery',['~TaskGallery',['../classArgusSamples_1_1TaskGallery.html#a6a81d5250cfc03f0c955964ad64c1b63',1,'ArgusSamples::TaskGallery']]], + ['_7etaskmultiexposure',['~TaskMultiExposure',['../classArgusSamples_1_1TaskMultiExposure.html#ae8eede4f0c503ea79454eaafbb6b8697',1,'ArgusSamples::TaskMultiExposure']]], + ['_7etaskmultisession',['~TaskMultiSession',['../classArgusSamples_1_1TaskMultiSession.html#aa1e0158b9d7599042f45fb82cb06051d',1,'ArgusSamples::TaskMultiSession']]], + ['_7etaskstillcapture',['~TaskStillCapture',['../classArgusSamples_1_1TaskStillCapture.html#ade79f5c4ce1202d5df81908a24e7aee7',1,'ArgusSamples::TaskStillCapture']]], + ['_7etaskvideorecord',['~TaskVideoRecord',['../classArgusSamples_1_1TaskVideoRecord.html#a582195eddb9146d47e22cf4ab72a6636',1,'ArgusSamples::TaskVideoRecord']]], + ['_7etrackeduniqueobj',['~TrackedUniqueObj',['../classArgusSamples_1_1TrackedUniqueObj.html#a159e640f1ae8279de7e10769fa2f8aa2',1,'ArgusSamples::TrackedUniqueObj']]], + ['_7etracker',['~Tracker',['../classArgusSamples_1_1Tracker.html#aaf5dc8cd092e94eccfdb45e155ef7864',1,'ArgusSamples::Tracker']]], + ['_7evideopipeline',['~VideoPipeline',['../classArgusSamples_1_1VideoPipeline.html#a50bc49eabc110cbd3ae9227bc141746d',1,'ArgusSamples::VideoPipeline']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/mag_sel.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/mag_sel.png new file mode 100644 index 0000000..81f6040 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/mag_sel.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/namespaces_61.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/namespaces_61.html new file mode 100644 index 0000000..2ef4404 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/namespaces_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/namespaces_61.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/namespaces_61.js new file mode 100644 index 0000000..c46821a --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/namespaces_61.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['argus',['Argus',['../namespaceArgus.html',1,'']]], + ['argussamples',['ArgusSamples',['../namespaceArgusSamples.html',1,'']]], + ['ext',['Ext',['../namespaceArgus_1_1Ext.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/nomatches.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/pages_74.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/pages_74.html new file mode 100644 index 0000000..bbff83e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/pages_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/pages_74.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/pages_74.js new file mode 100644 index 0000000..441b2de --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/pages_74.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['todo_20list',['Todo List',['../todo.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_63.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_63.html new file mode 100644 index 0000000..94a3acc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_63.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_63.js new file mode 100644 index 0000000..bb0ed08 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_63.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['conditionvariable',['ConditionVariable',['../classArgusSamples_1_1Mutex.html#ab270e49e575fdf0fe1a4f2ee911df116',1,'ArgusSamples::Mutex']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_6f.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_6f.html new file mode 100644 index 0000000..22c66d8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_6f.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_6f.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_6f.js new file mode 100644 index 0000000..636f7a4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_6f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['operator_3c',['operator<',['../classArgusSamples_1_1GalleryItem.html#a51173c635562826ebe9dfaf260a04777',1,'ArgusSamples::GalleryItem']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_74.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_74.html new file mode 100644 index 0000000..71b5d17 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_74.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_74.js new file mode 100644 index 0000000..1ff2ced --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/related_74.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['tracker_3c_20t_20_3e',['Tracker< T >',['../classArgusSamples_1_1TrackedUniqueObj.html#ae0338ea06b831b6b6a8e17ad0081a062',1,'ArgusSamples::TrackedUniqueObj']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/search.css b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/search.css new file mode 100644 index 0000000..d18c1da --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/search.css @@ -0,0 +1,238 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:116px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/search.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/search.js new file mode 100644 index 0000000..b6ea2a7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/search.js @@ -0,0 +1,817 @@ +// Search script generated by doxygen +// Copyright (C) 2009 by Dimitri van Heesch. + +// The code in this file is loosly based on main.js, part of Natural Docs, +// which is Copyright (C) 2003-2008 Greg Valure +// Natural Docs is licensed under the GPL. + +var indexSectionsWithContent = +{ + 0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111101001111111111111000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101110101000100100110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101110101000100100111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111101001111111111110000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 5: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 6: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000100000110000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 7: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100000100000110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 8: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100000100000110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 9: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000001000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 10: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 11: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "files", + 4: "functions", + 5: "variables", + 6: "typedefs", + 7: "enums", + 8: "enumvalues", + 9: "related", + 10: "defines", + 11: "pages" +}; + +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var hexCode; + if (code<16) + { + hexCode="0"+code.toString(16); + } + else + { + hexCode=code.toString(16); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1') + { + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_61.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_61.js new file mode 100644 index 0000000..b0402d0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_61.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['actiontype',['ActionType',['../classArgusSamples_1_1ScopedGuard.html#a57d7aa83a93915fcede2efe2ee86ab69',1,'ArgusSamples::ScopedGuard']]], + ['activesessionlist',['ActiveSessionList',['../classArgusSamples_1_1Dispatcher.html#a3c97783b88bc5913eb3bc76cfe766723',1,'ArgusSamples::Dispatcher']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_63.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_63.html new file mode 100644 index 0000000..6aa327f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_63.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_63.js new file mode 100644 index 0000000..08f4eb1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_63.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cyclespersectype',['CyclesPerSecType',['../classArgusSamples_1_1TimeValue.html#a242c37ad84166418f0f3c58da5c5a489',1,'ArgusSamples::TimeValue']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_67.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_67.html new file mode 100644 index 0000000..a3e9b22 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_67.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_67.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_67.js new file mode 100644 index 0000000..d6e8fa0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_67.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['galleryitemlist',['GalleryItemList',['../classArgusSamples_1_1GalleryThread.html#af0542d7c8db94e3f7f9404ecdf160bad',1,'ArgusSamples::GalleryThread']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6d.html new file mode 100644 index 0000000..383ce5f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6d.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6d.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6d.js new file mode 100644 index 0000000..63c7f49 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['msectype',['MSecType',['../classArgusSamples_1_1TimeValue.html#a235f74cd4602948b500de3d7a3b05016',1,'ArgusSamples::TimeValue']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6e.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6e.html new file mode 100644 index 0000000..ebbf394 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6e.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6e.js new file mode 100644 index 0000000..9a83edf --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_6e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nsectype',['NSecType',['../classArgusSamples_1_1TimeValue.html#a1ecf21e80d1cd4af94eda84fcb082288',1,'ArgusSamples::TimeValue']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_73.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_73.html new file mode 100644 index 0000000..3f28c4d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_73.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_73.js new file mode 100644 index 0000000..01f06c1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_73.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['sectype',['SecType',['../classArgusSamples_1_1TimeValue.html#ad74a2e3f2e6ddc43b4e386bca6febfb5',1,'ArgusSamples::TimeValue']]], + ['streamlist',['StreamList',['../classArgusSamples_1_1Composer.html#afc7cca44d4eb196e7005062af32cc5ff',1,'ArgusSamples::Composer']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_75.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_75.html new file mode 100644 index 0000000..35bb005 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_75.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_75.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_75.js new file mode 100644 index 0000000..223abaf --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/typedefs_75.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['usectype',['USecType',['../classArgusSamples_1_1TimeValue.html#a93d42a4029f30b323e8ff2a6f35bbdd2',1,'ArgusSamples::TimeValue']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/variables_6d.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/variables_6d.html new file mode 100644 index 0000000..b7924e3 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/variables_6d.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/variables_6d.js b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/variables_6d.js new file mode 100644 index 0000000..494c30f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/search/variables_6d.js @@ -0,0 +1,175 @@ +var searchData= +[ + ['m_5facregionhorizontal',['m_acRegionHorizontal',['../classArgusSamples_1_1Dispatcher.html#a81c1d90f8cfc8e80a7778b935915c2e1',1,'ArgusSamples::Dispatcher']]], + ['m_5facregionvertical',['m_acRegionVertical',['../classArgusSamples_1_1Dispatcher.html#a66f6f7b86a8ae1d1a89a3fdf01ff6d32',1,'ArgusSamples::Dispatcher']]], + ['m_5faction',['m_action',['../classArgusSamples_1_1ScopedGuard.html#a465bea49dbcbc6bfb490e38c508e4f16',1,'ArgusSamples::ScopedGuard']]], + ['m_5factive',['m_active',['../classArgusSamples_1_1Composer_1_1Stream.html#a284925368d3aead389e98ec9a6aebfce',1,'ArgusSamples::Composer::Stream']]], + ['m_5factivemodulebeforegallery',['m_activeModuleBeforeGallery',['../classArgusSamples_1_1CameraApp.html#a0e7cc0d073cdf129f7098e8d155371da',1,'ArgusSamples::CameraApp']]], + ['m_5factivesessions',['m_activeSessions',['../classArgusSamples_1_1Dispatcher.html#a7b7e52f39861a5adc1865a1f488c08d9',1,'ArgusSamples::Dispatcher']]], + ['m_5faeantibandingmode',['m_aeAntibandingMode',['../classArgusSamples_1_1Dispatcher.html#a9463e69aef8b0916d25a7c763d91e09c',1,'ArgusSamples::Dispatcher']]], + ['m_5faelock',['m_aeLock',['../classArgusSamples_1_1Dispatcher.html#ada1027fdb2c86ef4eb1ec4eecd18fe38',1,'ArgusSamples::Dispatcher']]], + ['m_5faperturefnum',['m_apertureFnum',['../classArgusSamples_1_1Dispatcher.html#abb90f565e0ed7246ab8406b2afd0f7c2',1,'ArgusSamples::Dispatcher']]], + ['m_5faperturemotorspeed',['m_apertureMotorSpeed',['../classArgusSamples_1_1Dispatcher.html#ae0ee8ca0931ad1afd73da58b6cdedd2b',1,'ArgusSamples::Dispatcher']]], + ['m_5fapertureposition',['m_aperturePosition',['../classArgusSamples_1_1Dispatcher.html#a1ae16f74647d27f9b6195b863b7f82d7',1,'ArgusSamples::Dispatcher']]], + ['m_5fappinitializedtime',['m_appInitializedTime',['../classArgusSamples_1_1PerfTracker.html#abf73bc3693d53ccb08461aa422996d63',1,'ArgusSamples::PerfTracker']]], + ['m_5fappstarttime',['m_appStartTime',['../classArgusSamples_1_1PerfTracker.html#a3e95997081f2a3042808367936a86a05',1,'ArgusSamples::PerfTracker']]], + ['m_5faspectratio',['m_aspectRatio',['../classArgusSamples_1_1StreamConsumer.html#acf684d43af62338c668cf3aa149a8120',1,'ArgusSamples::StreamConsumer']]], + ['m_5fawblock',['m_awbLock',['../classArgusSamples_1_1Dispatcher.html#a5a53d18b59f9578e86c56a08f41ea668',1,'ArgusSamples::Dispatcher']]], + ['m_5fawbmode',['m_awbMode',['../classArgusSamples_1_1Dispatcher.html#a8944490c738d0ef15f97ed20b25f0069',1,'ArgusSamples::Dispatcher']]], + ['m_5fcameradevices',['m_cameraDevices',['../classArgusSamples_1_1Dispatcher.html#a902b1c2e88cc03ad79fb717bd237070d',1,'ArgusSamples::Dispatcher']]], + ['m_5fcameraprovider',['m_cameraProvider',['../classArgusSamples_1_1Dispatcher.html#add22db57f3d976201b183d0ec0ea7051',1,'ArgusSamples::Dispatcher']]], + ['m_5fcaptureindex',['m_captureIndex',['../classArgusSamples_1_1TaskStillCapture.html#afb9fe6f6a509b7146579e8e590a593cf',1,'ArgusSamples::TaskStillCapture::m_captureIndex()'],['../classArgusSamples_1_1TaskVideoRecord.html#a2f0d61b80c6330a8485f5b9facab71ce',1,'ArgusSamples::TaskVideoRecord::m_captureIndex()']]], + ['m_5fcapturesession',['m_captureSession',['../classArgusSamples_1_1Dispatcher.html#a5a8172a3a24b5fa79cb5903bd74f78de',1,'ArgusSamples::Dispatcher']]], + ['m_5fcaptureyuvformat',['m_captureYuvFormat',['../classArgusSamples_1_1Dispatcher.html#a88f7550345ac8ac69e1a4d3ff5d6cb18',1,'ArgusSamples::Dispatcher']]], + ['m_5fclosedonetime',['m_closeDoneTime',['../classArgusSamples_1_1SessionPerfTracker.html#a3ddb416207284cfe8405ab5ecfcb5fa8',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fcloserequestedtime',['m_closeRequestedTime',['../classArgusSamples_1_1SessionPerfTracker.html#a44e7783422f4727244aaae8042fc0a26',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fcmdcond',['m_cmdCond',['../classArgusSamples_1_1GalleryThread.html#a08a903fe168325cd49d8edec261371cf',1,'ArgusSamples::GalleryThread']]], + ['m_5fcmdlist',['m_cmdList',['../classArgusSamples_1_1GalleryThread.html#af0fb1655f89e4d514b8c2adea2a5ff86',1,'ArgusSamples::GalleryThread']]], + ['m_5fcmdmutex',['m_cmdMutex',['../classArgusSamples_1_1GalleryThread.html#ae4ee7890b2b4104130fe7ec288841497',1,'ArgusSamples::GalleryThread']]], + ['m_5fcond',['m_cond',['../classArgusSamples_1_1ConditionVariable.html#a358f9a6e2945a34c0f8bf15f2b023583',1,'ArgusSamples::ConditionVariable']]], + ['m_5fconsumer',['m_consumer',['../classArgusSamples_1_1Composer_1_1Stream.html#aa3a1f6f9d41756d663dbe86a3f8d59a0',1,'ArgusSamples::Composer::Stream']]], + ['m_5fcontext',['m_context',['../classArgusSamples_1_1GalleryThread.html#abd98811a1cdd53ff5c84e96676ec25ee',1,'ArgusSamples::GalleryThread::m_context()'],['../classArgusSamples_1_1Composer.html#a8f7392e15158da922d796926911a6eff',1,'ArgusSamples::Composer::m_context()']]], + ['m_5fcopyprogram',['m_copyProgram',['../classArgusSamples_1_1GalleryThread.html#af8b88059ead0dbadc2e236c6501cb308',1,'ArgusSamples::GalleryThread']]], + ['m_5fcountframeperiod',['m_countFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#a29a4fcf0563c4daf8de4b1fab7c9df6d',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fcountlatency',['m_countLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a6bfc95b523af1f22711b143e3e3882c3',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fcuritem',['m_curItem',['../classArgusSamples_1_1GalleryThread.html#a7015998bd94727a2b017807d1051f603',1,'ArgusSamples::GalleryThread']]], + ['m_5fdata',['m_data',['../classArgusSamples_1_1GalleryItemImage.html#a33cfe6cefe80f234bcc23495475e44f1',1,'ArgusSamples::GalleryItemImage']]], + ['m_5fdefogamount',['m_deFogAmount',['../classArgusSamples_1_1Dispatcher.html#a061aeb1c250b374a0f71663cdcd1465d',1,'ArgusSamples::Dispatcher']]], + ['m_5fdefogenable',['m_deFogEnable',['../classArgusSamples_1_1Dispatcher.html#a3ccbe5bc9f09609efdbc64a910fb6a18',1,'ArgusSamples::Dispatcher']]], + ['m_5fdefogquality',['m_deFogQuality',['../classArgusSamples_1_1Dispatcher.html#af83353b9655952d56c22e873b4603767',1,'ArgusSamples::Dispatcher']]], + ['m_5fdenoisemode',['m_denoiseMode',['../classArgusSamples_1_1Dispatcher.html#a7d169063dc67800a0efeedb78d0636f0',1,'ArgusSamples::Dispatcher']]], + ['m_5fdenoisestrength',['m_denoiseStrength',['../classArgusSamples_1_1Dispatcher.html#adefbcf91c816f34132b20378942c84bb',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceaperturefnums',['m_deviceApertureFnums',['../classArgusSamples_1_1Dispatcher.html#a6866eee2f51aa5e8ca5b7e907fdbd484',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceaperturemotorspeedrange',['m_deviceApertureMotorSpeedRange',['../classArgusSamples_1_1Dispatcher.html#ad2b8c89f2f4a9800ca9d0680b0eb4cf8',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceaperturepositionrange',['m_deviceAperturePositionRange',['../classArgusSamples_1_1Dispatcher.html#ab0289b1fb0d428a57633290e5a2320b8',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceexposurecompensationrange',['m_deviceExposureCompensationRange',['../classArgusSamples_1_1Dispatcher.html#a5645e9564525f1466a5080328b6e79cd',1,'ArgusSamples::Dispatcher']]], + ['m_5fdevicefocuspositionrange',['m_deviceFocusPositionRange',['../classArgusSamples_1_1Dispatcher.html#a0842e825fc277c2c7175f70554ab565c',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceindex',['m_deviceIndex',['../classArgusSamples_1_1Dispatcher.html#af51769c785ccf5bb6b575f354275eadb',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceispdigitalgainrange',['m_deviceIspDigitalGainRange',['../classArgusSamples_1_1Dispatcher.html#a7018cfba2077334b12e1fdbc9fee2b2b',1,'ArgusSamples::Dispatcher']]], + ['m_5fdeviceopen',['m_deviceOpen',['../classArgusSamples_1_1Dispatcher.html#ae3406ae84f82a8778196cf64502cc033',1,'ArgusSamples::Dispatcher']]], + ['m_5fdisplay',['m_display',['../classArgusSamples_1_1Composer.html#afc0ce9ab1b449b38ee284ab841eb8e63',1,'ArgusSamples::Composer']]], + ['m_5fdisplaycount',['m_displayCount',['../classArgusSamples_1_1PerfTracker.html#a5cb1267e6649f0b7ad9440e8987600d2',1,'ArgusSamples::PerfTracker']]], + ['m_5fedgeenhancemode',['m_edgeEnhanceMode',['../classArgusSamples_1_1Dispatcher.html#ae0bd2ba7e721cebe14810c440aea2f71',1,'ArgusSamples::Dispatcher']]], + ['m_5fedgeenhancestrength',['m_edgeEnhanceStrength',['../classArgusSamples_1_1Dispatcher.html#ab86f867cfcb439ac870580e110aef534',1,'ArgusSamples::Dispatcher']]], + ['m_5feglimageoutputstream',['m_eglImageOutputStream',['../classArgusSamples_1_1GalleryThread.html#a4f679bacf9bddbb8c2ee2b2dca94a594',1,'ArgusSamples::GalleryThread']]], + ['m_5fegloutputsurface',['m_eglOutputSurface',['../classArgusSamples_1_1GalleryThread.html#a51664065b38c61cb5c9ce87ba65ff0c6',1,'ArgusSamples::GalleryThread']]], + ['m_5feglstream',['m_eglStream',['../classArgusSamples_1_1GalleryItemVideo.html#a0e4b979747d57ac2adb49d1aa55e560d',1,'ArgusSamples::GalleryItemVideo::m_eglStream()'],['../classArgusSamples_1_1StreamConsumer.html#a3b3c6702d62bbc602a36962c35fca9d2',1,'ArgusSamples::StreamConsumer::m_eglStream()']]], + ['m_5feventqueue',['m_eventQueue',['../classArgusSamples_1_1EventThread.html#ae4737f9bed932ccc8a8fc30da2f8e1c3',1,'ArgusSamples::EventThread']]], + ['m_5feventthread',['m_eventThread',['../classArgusSamples_1_1SessionPerfTracker.html#a1d50f5ee5122776bfb763e3532f2c32b',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fexplevels',['m_expLevels',['../classArgusSamples_1_1TaskMultiExposure.html#a86e00ac4af4f2113e25a772e3079fdcd',1,'ArgusSamples::TaskMultiExposure']]], + ['m_5fexposurecompensation',['m_exposureCompensation',['../classArgusSamples_1_1Dispatcher.html#a97143dd6789825553983066e368e2ccd',1,'ArgusSamples::Dispatcher']]], + ['m_5fexposurerange',['m_exposureRange',['../classArgusSamples_1_1TaskMultiExposure.html#a0ed7cfb2d98a655ffed1d49ba8b54de3',1,'ArgusSamples::TaskMultiExposure']]], + ['m_5fexposuresteps',['m_exposureSteps',['../classArgusSamples_1_1TaskMultiExposure.html#aea419c3736e088bf2cd4c109a747942e',1,'ArgusSamples::TaskMultiExposure']]], + ['m_5fexposurestepsrange',['m_exposureStepsRange',['../classArgusSamples_1_1TaskMultiExposure.html#a29050e7e88ed516272024bc99f3bc1b8',1,'ArgusSamples::TaskMultiExposure']]], + ['m_5fexposuretimerange',['m_exposureTimeRange',['../classArgusSamples_1_1Dispatcher.html#a831b15c216817e984f26ab5b7e50e7ec',1,'ArgusSamples::Dispatcher']]], + ['m_5ffilename',['m_fileName',['../classArgusSamples_1_1GalleryItem.html#a5426a2acf2214f834fbefa77fab678a0',1,'ArgusSamples::GalleryItem']]], + ['m_5ffirstdisplaytime',['m_firstDisplayTime',['../classArgusSamples_1_1PerfTracker.html#a9008160b53fe10263b08b0e67ef34d42',1,'ArgusSamples::PerfTracker']]], + ['m_5ffirstrequestreceivedtime',['m_firstRequestReceivedTime',['../classArgusSamples_1_1SessionPerfTracker.html#afdd102803e2ae3c5f1c1da0322f12f1f',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fflushdonetime',['m_flushDoneTime',['../classArgusSamples_1_1SessionPerfTracker.html#a7340d50dba1aa2dd819cd103fa862cfd',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5ffocusposition',['m_focusPosition',['../classArgusSamples_1_1Dispatcher.html#ad4d7716e1f707e380662c016eec141db',1,'ArgusSamples::Dispatcher']]], + ['m_5fframerate',['m_frameRate',['../classArgusSamples_1_1Dispatcher.html#a1ff8796985cb48416ecb2006cfbf0682',1,'ArgusSamples::Dispatcher']]], + ['m_5fgainrange',['m_gainRange',['../classArgusSamples_1_1Dispatcher.html#a204b37120a0964e6c8581cb24396f322',1,'ArgusSamples::Dispatcher']]], + ['m_5fgallery',['m_gallery',['../classArgusSamples_1_1AppModuleGallery.html#a5c519a08c67749969c253d05c96ffe64',1,'ArgusSamples::AppModuleGallery']]], + ['m_5fguiconfig',['m_guiConfig',['../classArgusSamples_1_1AppModuleCapture.html#af061ccff6871a6c7467741512003f350',1,'ArgusSamples::AppModuleCapture::m_guiConfig()'],['../classArgusSamples_1_1AppModuleGeneric.html#a688994584da153c3cf5cd3462c5b9308',1,'ArgusSamples::AppModuleGeneric::m_guiConfig()'],['../classArgusSamples_1_1AppModuleGallery.html#a291707008a5b734c6b6c5b2b0f548fb8',1,'ArgusSamples::AppModuleGallery::m_guiConfig()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a550ecb0f6dbd5b3b05bda839b9ec5080',1,'ArgusSamples::AppModuleMultiExposure::m_guiConfig()'],['../classArgusSamples_1_1AppModuleVideo.html#ade723928bae54797959b0ba5726732c1',1,'ArgusSamples::AppModuleVideo::m_guiConfig()']]], + ['m_5fguicontainerconfig',['m_guiContainerConfig',['../classArgusSamples_1_1AppModuleCapture.html#a7deeb6c6ead323ac4ccbce67b617b604',1,'ArgusSamples::AppModuleCapture::m_guiContainerConfig()'],['../classArgusSamples_1_1AppModuleGeneric.html#ae6068019da61bd2bc38562bb6ddfa95a',1,'ArgusSamples::AppModuleGeneric::m_guiContainerConfig()'],['../classArgusSamples_1_1AppModuleGallery.html#a11864dc5ce704012dd052a3ccc66757a',1,'ArgusSamples::AppModuleGallery::m_guiContainerConfig()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a93c5dfe3403e3059c04c0c4c36fd0ba2',1,'ArgusSamples::AppModuleMultiExposure::m_guiContainerConfig()'],['../classArgusSamples_1_1AppModuleVideo.html#a56336582d1d3f504b86b3e05dd43f776',1,'ArgusSamples::AppModuleVideo::m_guiContainerConfig()']]], + ['m_5fguimenubar',['m_guiMenuBar',['../classArgusSamples_1_1AppModuleGeneric.html#a03f8ee9f12ea83c0c568264dab2c701f',1,'ArgusSamples::AppModuleGeneric']]], + ['m_5fheight',['m_height',['../classArgusSamples_1_1GalleryItemImage.html#ab392779c40645bebf702088afbeda69e',1,'ArgusSamples::GalleryItemImage']]], + ['m_5fiautocontrolsettings',['m_iAutoControlSettings',['../classArgusSamples_1_1AutoControlSettingsObserver.html#ad77be17b865f804065a7b271766ad3b5',1,'ArgusSamples::AutoControlSettingsObserver']]], + ['m_5ficameraprovider',['m_iCameraProvider',['../classArgusSamples_1_1Dispatcher.html#ae4aeb8a6292fddebfa2b586541de9a3c',1,'ArgusSamples::Dispatcher']]], + ['m_5fid',['m_id',['../classArgusSamples_1_1SessionPerfTracker.html#ab89ad0cc63d5f9bb6f97e07e2ee75963',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fidefogsettings',['m_iDeFogSettings',['../classArgusSamples_1_1DeFogSettingsObserver.html#a8a3912902333486796ba194b9fc33246',1,'ArgusSamples::DeFogSettingsObserver']]], + ['m_5fidenoisesettings',['m_iDenoiseSettings',['../classArgusSamples_1_1DenoiseSettingsObserver.html#ac84648edf27a874f95d5b025ee094e97',1,'ArgusSamples::DenoiseSettingsObserver']]], + ['m_5fiedgeenhancesettings',['m_iEdgeEnhanceSettings',['../classArgusSamples_1_1EdgeEnhanceSettingsObserver.html#a43c29bdc48a6af1a03d4dcaba10bacee',1,'ArgusSamples::EdgeEnhanceSettingsObserver']]], + ['m_5figuicontainerconfig',['m_iGuiContainerConfig',['../classArgusSamples_1_1CameraApp.html#a9614be1e6933aa3bf80a57b22bae4be4',1,'ArgusSamples::CameraApp']]], + ['m_5figuimenubar',['m_iGuiMenuBar',['../classArgusSamples_1_1CameraApp.html#afa0fb058dc723f53e3befa52494d824c',1,'ArgusSamples::CameraApp']]], + ['m_5finitialized',['m_initialized',['../classArgusSamples_1_1ConditionVariable.html#ae378c0af18fdcf6d074907206c1d36b4',1,'ArgusSamples::ConditionVariable::m_initialized()'],['../classArgusSamples_1_1Mutex.html#aea63f90eaf7e8a56fb2936ebf4e3596c',1,'ArgusSamples::Mutex::m_initialized()'],['../classArgusSamples_1_1Dispatcher.html#aa0b5f0f55fe6ac705647f7b26f4b71da',1,'ArgusSamples::Dispatcher::m_initialized()'],['../classArgusSamples_1_1TaskGallery.html#a8142b3cf57aa1427028681ff98413a2a',1,'ArgusSamples::TaskGallery::m_initialized()'],['../classArgusSamples_1_1TaskMultiExposure.html#aac782749d02412f13244b8e600537c96',1,'ArgusSamples::TaskMultiExposure::m_initialized()'],['../classArgusSamples_1_1TaskMultiSession.html#a32ad985fc5a86d51464f1ce026d87bba',1,'ArgusSamples::TaskMultiSession::m_initialized()'],['../classArgusSamples_1_1TaskStillCapture.html#a0611c811496a43985efac4e710c448e6',1,'ArgusSamples::TaskStillCapture::m_initialized()'],['../classArgusSamples_1_1TaskVideoRecord.html#a0fd91ecacd11696de1722a1590dedf22',1,'ArgusSamples::TaskVideoRecord::m_initialized()'],['../classArgusSamples_1_1Composer.html#a1ba0585c1c0843c269c0dc0ae92013ff',1,'ArgusSamples::Composer::m_initialized()'],['../classArgusSamples_1_1StreamConsumer.html#acb02c477f6a39dfb0b4c51137c0caab2',1,'ArgusSamples::StreamConsumer::m_initialized()'],['../classArgusSamples_1_1AppModuleCapture.html#ab6eefcbf2808bfc71c4c04fb79603583',1,'ArgusSamples::AppModuleCapture::m_initialized()'],['../classArgusSamples_1_1AppModuleGeneric.html#a047f017e745427486f9a218171877587',1,'ArgusSamples::AppModuleGeneric::m_initialized()'],['../classArgusSamples_1_1AppModuleGallery.html#a14c0b8f385f5bbf30d857dbe6b3adc97',1,'ArgusSamples::AppModuleGallery::m_initialized()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#a4ca63ce7f581b9c9d2aa764851b0491a',1,'ArgusSamples::AppModuleMultiExposure::m_initialized()'],['../classArgusSamples_1_1AppModuleMultiSession.html#aa2cd2e19348b179e51f11413897a9abc',1,'ArgusSamples::AppModuleMultiSession::m_initialized()'],['../classArgusSamples_1_1AppModuleVideo.html#ae5fd64a0e718ca05b0986b2ced6f0d10',1,'ArgusSamples::AppModuleVideo::m_initialized()']]], + ['m_5fislocked',['m_isLocked',['../classArgusSamples_1_1ScopedMutex.html#ae924ac3c4e8da1ed1928f9a74872c81e',1,'ArgusSamples::ScopedMutex']]], + ['m_5fisourcesettings',['m_iSourceSettings',['../classArgusSamples_1_1SourceSettingsObserver.html#a80cac48b6f37b4525c59b5a2fae120e7',1,'ArgusSamples::SourceSettingsObserver']]], + ['m_5fispdigitalgainrange',['m_ispDigitalGainRange',['../classArgusSamples_1_1Dispatcher.html#a5cdae77340392be2884df7eec6e6e3bf',1,'ArgusSamples::Dispatcher']]], + ['m_5fissuecapturetime',['m_issueCaptureTime',['../classArgusSamples_1_1SessionPerfTracker.html#a77fbdb9afc76d664d88dcab5a011d57b',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fitemlist',['m_itemList',['../classArgusSamples_1_1GalleryThread.html#ae9ccd8811cc4cf109d6b92b0a045d6ad',1,'ArgusSamples::GalleryThread']]], + ['m_5fkpi',['m_kpi',['../classArgusSamples_1_1Dispatcher.html#a2e001f477d06cc5b03614f280d60be7c',1,'ArgusSamples::Dispatcher']]], + ['m_5flastframecount',['m_lastFrameCount',['../classArgusSamples_1_1SessionPerfTracker.html#a182131bb8aa1e59e079a4396667e20f5',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fmaxframeperiod',['m_maxFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#a83c9fd0ff6ee656a8a6740d4e1833848',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fmaxlatency',['m_maxLatency',['../classArgusSamples_1_1SessionPerfTracker.html#afce13d63e328db5d6c0823efe784815e',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fminframeperiod',['m_minFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#a53fc5ea7b8f23b3342bd267893da6de4',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fminlatency',['m_minLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a937f4ac6bd30e30844cbb1e97c825740',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fmodtime',['m_modTime',['../classArgusSamples_1_1GalleryItem.html#a1d6843a881ea24e7cbeaa4cab8028348',1,'ArgusSamples::GalleryItem']]], + ['m_5fmodule',['m_module',['../classArgusSamples_1_1CameraApp.html#acd26fd901be23c8f33a266c89f150f12',1,'ArgusSamples::CameraApp']]], + ['m_5fmodulegeneric',['m_moduleGeneric',['../classArgusSamples_1_1CameraApp.html#af18cca74ea551836dbd0f525b0bbe104',1,'ArgusSamples::CameraApp']]], + ['m_5fmodules',['m_modules',['../classArgusSamples_1_1CameraApp.html#a502a243f425d7a352d84a36cb2d075b6',1,'ArgusSamples::CameraApp']]], + ['m_5fmultidevices',['m_multiDevices',['../classArgusSamples_1_1TaskMultiSession.html#a173499f5075d7ad394cd3d41cfd0672c',1,'ArgusSamples::TaskMultiSession']]], + ['m_5fmultiexposure',['m_multiExposure',['../classArgusSamples_1_1AppModuleMultiExposure.html#ad5e763258220f21c1516474f169969ef',1,'ArgusSamples::AppModuleMultiExposure']]], + ['m_5fmultisession',['m_multiSession',['../classArgusSamples_1_1AppModuleMultiSession.html#a8557e1685e11e1867bae605f0ce6aa52',1,'ArgusSamples::AppModuleMultiSession']]], + ['m_5fmutex',['m_mutex',['../classArgusSamples_1_1Mutex.html#ae808e03f1120c78c412a3565b47f9486',1,'ArgusSamples::Mutex::m_mutex()'],['../classArgusSamples_1_1ScopedMutex.html#ae5dea8620bef827375bbaea192ecf6cc',1,'ArgusSamples::ScopedMutex::m_mutex()'],['../classArgusSamples_1_1Composer.html#af50b711d820a37c2e8c45904f6a25254',1,'ArgusSamples::Composer::m_mutex()']]], + ['m_5fnsec',['m_nSec',['../classArgusSamples_1_1TimeValue.html#affdcccde7cd27f77b3c66a106c83b401',1,'ArgusSamples::TimeValue']]], + ['m_5fnumberframesreceived',['m_numberframesReceived',['../classArgusSamples_1_1SessionPerfTracker.html#ae023ec0f84def1e14dbc210e7b6e03fa',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fobj',['m_obj',['../classArgusSamples_1_1TrackedUniqueObj.html#a040e53b6de59222a70519850ef914397',1,'ArgusSamples::TrackedUniqueObj']]], + ['m_5fobject',['m_object',['../classArgusSamples_1_1ScopedGuard.html#ac7e1d472b57a8a0b5402838877267e5d',1,'ArgusSamples::ScopedGuard']]], + ['m_5fobservers',['m_observers',['../classArgusSamples_1_1Dispatcher.html#a4604c49757a59841f0da083ce1b8c4e6',1,'ArgusSamples::Dispatcher']]], + ['m_5foptions',['m_options',['../classArgusSamples_1_1App.html#a54a7baffee7ad152c61cfd024f77b6b3',1,'ArgusSamples::App']]], + ['m_5foutputpath',['m_outputPath',['../classArgusSamples_1_1Dispatcher.html#aba5c2f3770b182bf0faa3f86433b0b97',1,'ArgusSamples::Dispatcher']]], + ['m_5foutputsize',['m_outputSize',['../classArgusSamples_1_1Dispatcher.html#a67c7dfd5ed14c9a2fe8960a3b118b978',1,'ArgusSamples::Dispatcher']]], + ['m_5foutputstream',['m_outputStream',['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#aba51fc6029266097dc159e1d69b93f66',1,'ArgusSamples::TaskMultiExposure::ExpLevel::m_outputStream()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#afc0ef7ada8453b8d10f0c558805ea656',1,'ArgusSamples::TaskMultiSession::Session::m_outputStream()']]], + ['m_5fp',['m_p',['../classArgusSamples_1_1GstUnrefer.html#aa68308b41add011c78be805c9ff987f8',1,'ArgusSamples::GstUnrefer']]], + ['m_5fperftracker',['m_perfTracker',['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a9d217af5656a51403e0b1d87cf7c068b',1,'ArgusSamples::TaskMultiSession::Session::m_perfTracker()'],['../classArgusSamples_1_1TaskStillCapture.html#ab8abaa019cd61954ae430d665f6acfc5',1,'ArgusSamples::TaskStillCapture::m_perfTracker()'],['../classArgusSamples_1_1TaskVideoRecord.html#a45851e33287aa82cc7877ae594c4c62a',1,'ArgusSamples::TaskVideoRecord::m_perfTracker()']]], + ['m_5fpipeline',['m_pipeline',['../classArgusSamples_1_1GalleryItemVideo.html#a90c40efd2c04b2a0067d4183e74324f6',1,'ArgusSamples::GalleryItemVideo']]], + ['m_5fpreviewrequest',['m_previewRequest',['../classArgusSamples_1_1TaskStillCapture.html#a2b5bcde355ef0bdb0e8f13697f2caf25',1,'ArgusSamples::TaskStillCapture']]], + ['m_5fpreviewstream',['m_previewStream',['../classArgusSamples_1_1TaskStillCapture.html#a99cdb83b0f34e19c9515ba0200124a67',1,'ArgusSamples::TaskStillCapture::m_previewStream()'],['../classArgusSamples_1_1TaskVideoRecord.html#a02af2370d41f9fde0641927104b8fa28',1,'ArgusSamples::TaskVideoRecord::m_previewStream()']]], + ['m_5fpreviouskpi',['m_previousKpi',['../classArgusSamples_1_1SessionPerfTracker.html#a73d4bc089f4143f3f8a358ea3656677c',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fprevioussensortime',['m_previousSensorTime',['../classArgusSamples_1_1SessionPerfTracker.html#aefb236040ca655058e3dad77d1361553',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fprevmodule',['m_prevModule',['../classArgusSamples_1_1CameraApp.html#a8eb6046681e73af1645ff99b3bba724b',1,'ArgusSamples::CameraApp']]], + ['m_5fprevrunning',['m_prevRunning',['../classArgusSamples_1_1TaskMultiExposure.html#a5b262e3a48eb74a6c02292240eebe80b',1,'ArgusSamples::TaskMultiExposure::m_prevRunning()'],['../classArgusSamples_1_1TaskMultiSession.html#aa45b4ccd6b39cdd8d5e722bd3865c7bb',1,'ArgusSamples::TaskMultiSession::m_prevRunning()'],['../classArgusSamples_1_1TaskStillCapture.html#a85ede1920ed11460c7feefd4cc811b3f',1,'ArgusSamples::TaskStillCapture::m_prevRunning()'],['../classArgusSamples_1_1TaskVideoRecord.html#a6cd927410f4d357c7fe179842772320c',1,'ArgusSamples::TaskVideoRecord::m_prevRunning()']]], + ['m_5fprogram',['m_program',['../classArgusSamples_1_1Composer.html#a6add3386f515c670ad4bd708bd6e8aad',1,'ArgusSamples::Composer']]], + ['m_5frecording',['m_recording',['../classArgusSamples_1_1TaskVideoRecord.html#adb2634ef800ce334deeedc3006a09331',1,'ArgusSamples::TaskVideoRecord']]], + ['m_5frequest',['m_request',['../classArgusSamples_1_1TaskMultiExposure_1_1ExpLevel.html#a7aac9c7b6dad0213e5d0a8b672a47b66',1,'ArgusSamples::TaskMultiExposure::ExpLevel::m_request()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a96612bcc7e6b59617ebe41793bf4eddb',1,'ArgusSamples::TaskMultiSession::Session::m_request()'],['../classArgusSamples_1_1TaskVideoRecord.html#a5c4916b17802a76dab527231a1381d98',1,'ArgusSamples::TaskVideoRecord::m_request()']]], + ['m_5frequestreceivedtime',['m_requestReceivedTime',['../classArgusSamples_1_1SessionPerfTracker.html#a0a3adf49285e704111a5863d9b3b262b',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5frequests',['m_requests',['../classArgusSamples_1_1Dispatcher_1_1ActiveSession.html#a8f693444ab1584c81e8542b14b06c258',1,'ArgusSamples::Dispatcher::ActiveSession']]], + ['m_5frunning',['m_running',['../classArgusSamples_1_1TaskGallery.html#a4d3d96fa9538cc9186ae449d0e151db9',1,'ArgusSamples::TaskGallery::m_running()'],['../classArgusSamples_1_1TaskMultiExposure.html#a25bf4de932c2c7f8d610a56b87f57e35',1,'ArgusSamples::TaskMultiExposure::m_running()'],['../classArgusSamples_1_1TaskMultiSession.html#ae44bb7248f6ce3278790e687c3866b39',1,'ArgusSamples::TaskMultiSession::m_running()'],['../classArgusSamples_1_1TaskStillCapture.html#aa158d0c007dcb294d050c5bb57265d32',1,'ArgusSamples::TaskStillCapture::m_running()'],['../classArgusSamples_1_1TaskVideoRecord.html#a318a82bcfaa993a072e55c0707a0c8e8',1,'ArgusSamples::TaskVideoRecord::m_running()'],['../classArgusSamples_1_1AppModuleCapture.html#a79a35b19b888285eab4c2ab968a9080f',1,'ArgusSamples::AppModuleCapture::m_running()'],['../classArgusSamples_1_1AppModuleGeneric.html#a6cf63e4c7a7d54eb3b28125c52e7c6be',1,'ArgusSamples::AppModuleGeneric::m_running()'],['../classArgusSamples_1_1AppModuleGallery.html#a22bf8ab0dd2068b7970267fe113d96b0',1,'ArgusSamples::AppModuleGallery::m_running()'],['../classArgusSamples_1_1AppModuleMultiExposure.html#ad67211bd86ab92e92e7b72e27693c8d5',1,'ArgusSamples::AppModuleMultiExposure::m_running()'],['../classArgusSamples_1_1AppModuleVideo.html#a0c90dc3f14761539a47fadf8cbcac212',1,'ArgusSamples::AppModuleVideo::m_running()']]], + ['m_5fsensoranaloggainrange',['m_sensorAnalogGainRange',['../classArgusSamples_1_1Dispatcher.html#acb1b4b67f9ed9d7e6e37735e0d358ee1',1,'ArgusSamples::Dispatcher']]], + ['m_5fsensorexposuretimerange',['m_sensorExposureTimeRange',['../classArgusSamples_1_1Dispatcher.html#a8762f3b46361030434f8ca6c05212b8b',1,'ArgusSamples::Dispatcher']]], + ['m_5fsensorframeraterange',['m_sensorFrameRateRange',['../classArgusSamples_1_1Dispatcher.html#a6876340ad28c6ed5a46b1140f155f1a5',1,'ArgusSamples::Dispatcher']]], + ['m_5fsensormodeindex',['m_sensorModeIndex',['../classArgusSamples_1_1Dispatcher.html#a32a96f4bf3ee698e0e3faab6b216847d',1,'ArgusSamples::Dispatcher']]], + ['m_5fsensormodes',['m_sensorModes',['../classArgusSamples_1_1Dispatcher.html#a4a04377544c33d8f8b651b68e5c80e71',1,'ArgusSamples::Dispatcher']]], + ['m_5fsensormodevalid',['m_sensorModeValid',['../classArgusSamples_1_1Dispatcher.html#a13e947ca02d4ca32fa94ea3bff00fac8',1,'ArgusSamples::Dispatcher']]], + ['m_5fsession',['m_session',['../classArgusSamples_1_1Dispatcher_1_1ActiveSession.html#a8ae2e0dedb94312ecdf1d5d11dde0690',1,'ArgusSamples::Dispatcher::ActiveSession::m_session()'],['../classArgusSamples_1_1EventThread.html#a0190f466222ad44488f1ae28a9692e5d',1,'ArgusSamples::EventThread::m_session()'],['../classArgusSamples_1_1SessionPerfTracker.html#a945b55221b6931ab907dcf5a2b8b68ed',1,'ArgusSamples::SessionPerfTracker::m_session()'],['../classArgusSamples_1_1TaskMultiSession_1_1Session.html#a1f06c618542aa0aea92dacec3df51d64',1,'ArgusSamples::TaskMultiSession::Session::m_session()']]], + ['m_5fsessionid',['m_sessionId',['../classArgusSamples_1_1PerfTracker.html#adb3786e69deb31f265f5a7c6b13896ee',1,'ArgusSamples::PerfTracker']]], + ['m_5fsessionperftracker',['m_sessionPerfTracker',['../classArgusSamples_1_1EventThread.html#af0b4590350fc96130bdba0ce9b3fd330',1,'ArgusSamples::EventThread']]], + ['m_5fsessions',['m_sessions',['../classArgusSamples_1_1TaskMultiSession.html#a5599ff165466fd36a737a4b71f27862a',1,'ArgusSamples::TaskMultiSession']]], + ['m_5fshutdown',['m_shutdown',['../classArgusSamples_1_1Composer_1_1Stream.html#a12533f09aee3ec29ad831c8351ecf0f2',1,'ArgusSamples::Composer::Stream']]], + ['m_5fstatscountframeperiod',['m_statsCountFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#aeac927365cf07427c68d797a7cc6195b',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatscountlatency',['m_statsCountLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a8ed8991cda6db38fa185525a86b5fb53',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsframedropcount',['m_statsFrameDropCount',['../classArgusSamples_1_1SessionPerfTracker.html#a8d257b1c9791ff68d509b45944e2802d',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsmaxframeperiod',['m_statsMaxFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#a59fe8f0a7a94784b9cb60d915c59de11',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsmaxlatency',['m_statsMaxLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a8c37aa06e587c35e1b591172bc9fb4fa',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsminframeperiod',['m_statsMinFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#a07608665a748582bd0242efc0ac5fe9b',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsminlatency',['m_statsMinLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a703202dd17cb8dce51d38478f6f4d23f',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatsoutofordercount',['m_statsOutOfOrderCount',['../classArgusSamples_1_1SessionPerfTracker.html#a6a7bc0a0eea06a7129f55561562732c3',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatssumframeperiod',['m_statsSumFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#aa9b8af892320694baf748190734b4adf',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstatssumlatency',['m_statsSumLatency',['../classArgusSamples_1_1SessionPerfTracker.html#a1acaa6e251256c7c2ec8c9990913fec3',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fstillcapture',['m_stillCapture',['../classArgusSamples_1_1AppModuleCapture.html#a800b4f46e6fdecb87e0ae86b2cf45f8f',1,'ArgusSamples::AppModuleCapture']]], + ['m_5fstillfiletype',['m_stillFileType',['../classArgusSamples_1_1Dispatcher.html#a2e1c10949f85d0d5934da42bd920e5b4',1,'ArgusSamples::Dispatcher']]], + ['m_5fstreams',['m_streams',['../classArgusSamples_1_1Composer.html#a382201a7f9d8d7c86d7b636c5a1dba37',1,'ArgusSamples::Composer']]], + ['m_5fstreamstate',['m_streamState',['../classArgusSamples_1_1StreamConsumer.html#ad1906bd74feedeff7c2d8e729bea63fc',1,'ArgusSamples::StreamConsumer']]], + ['m_5fstreamtexture',['m_streamTexture',['../classArgusSamples_1_1StreamConsumer.html#ab6c5eca0db513574d70c8db571bbf9c6',1,'ArgusSamples::StreamConsumer']]], + ['m_5fsumframeperiod',['m_sumFramePeriod',['../classArgusSamples_1_1SessionPerfTracker.html#aab7acc5c338014ec0aa70bbfa6c1935f',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5fsumlatency',['m_sumLatency',['../classArgusSamples_1_1SessionPerfTracker.html#aa7d0113afac004116741917f28ebc46c',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5ftaskstarttime',['m_taskStartTime',['../classArgusSamples_1_1SessionPerfTracker.html#ae3b01075658dd6e392f7d0d3287ac299',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5ftextureid',['m_textureID',['../classArgusSamples_1_1GalleryThread.html#a949e1c5f798beffcc88d3d3d8068197e',1,'ArgusSamples::GalleryThread']]], + ['m_5fthread',['m_thread',['../classArgusSamples_1_1TaskGallery.html#a62658f6b3745ef0d80f78816c5b335fb',1,'ArgusSamples::TaskGallery']]], + ['m_5ftotalframedrop',['m_totalFrameDrop',['../classArgusSamples_1_1SessionPerfTracker.html#ac588d1f22ff259b3cdf88f2e0cfe4742',1,'ArgusSamples::SessionPerfTracker']]], + ['m_5ftracker',['m_tracker',['../classArgusSamples_1_1TrackedUniqueObj.html#af767a3ca5f26ae83279546189ec03000',1,'ArgusSamples::TrackedUniqueObj']]], + ['m_5fvbo',['m_vbo',['../classArgusSamples_1_1GalleryThread.html#a93dd7d33eebfce929714979d1a4c75fa',1,'ArgusSamples::GalleryThread::m_vbo()'],['../classArgusSamples_1_1Composer.html#ad9fbf443f7110342cda837cc539c5244',1,'ArgusSamples::Composer::m_vbo()']]], + ['m_5fverbose',['m_verbose',['../classArgusSamples_1_1Dispatcher.html#a4eb653fefb1d498310bca643e1c1f8a9',1,'ArgusSamples::Dispatcher']]], + ['m_5fvideobitrate',['m_videoBitRate',['../classArgusSamples_1_1Dispatcher.html#ad4a1b34fc39ffa86df0fba12e6c0ce64',1,'ArgusSamples::Dispatcher']]], + ['m_5fvideofiletype',['m_videoFileType',['../classArgusSamples_1_1Dispatcher.html#a9611fc594a72a0b179fb11e14f975a7a',1,'ArgusSamples::Dispatcher']]], + ['m_5fvideoformat',['m_videoFormat',['../classArgusSamples_1_1Dispatcher.html#acd9236f88d7181656ab9e200a514ddb8',1,'ArgusSamples::Dispatcher']]], + ['m_5fvideopipeline',['m_videoPipeline',['../classArgusSamples_1_1TaskVideoRecord.html#a60e2691264f607709f4b9226b411e5f8',1,'ArgusSamples::TaskVideoRecord']]], + ['m_5fvideorecord',['m_videoRecord',['../classArgusSamples_1_1AppModuleVideo.html#a09969e8a5d19da63804ac5e2c1ccd4b2',1,'ArgusSamples::AppModuleVideo']]], + ['m_5fvideostream',['m_videoStream',['../classArgusSamples_1_1TaskVideoRecord.html#a37214425b8651910066f774741a52a79',1,'ArgusSamples::TaskVideoRecord']]], + ['m_5fwasrunning',['m_wasRunning',['../classArgusSamples_1_1TaskMultiExposure.html#a3afcfebbf91e53223b061e673ff3b38e',1,'ArgusSamples::TaskMultiExposure::m_wasRunning()'],['../classArgusSamples_1_1TaskStillCapture.html#aa29dcbe5a25ff01fca0e9e13283b2b18',1,'ArgusSamples::TaskStillCapture::m_wasRunning()'],['../classArgusSamples_1_1TaskVideoRecord.html#a67da6dafb37185b515adf0761531d9fc',1,'ArgusSamples::TaskVideoRecord::m_wasRunning()']]], + ['m_5fwidth',['m_width',['../classArgusSamples_1_1GalleryItemImage.html#a4b284f0e0d920721f601239102e0b44f',1,'ArgusSamples::GalleryItemImage']]], + ['m_5fwindowaspectratio',['m_windowAspectRatio',['../classArgusSamples_1_1Composer.html#ad8fbe97bade15ae4134a204dbbd7f227',1,'ArgusSamples::Composer']]], + ['m_5fwindowheight',['m_windowHeight',['../classArgusSamples_1_1Composer.html#aac9016a400fc9563754b114fec5af656',1,'ArgusSamples::Composer']]], + ['m_5fwindowwidth',['m_windowWidth',['../classArgusSamples_1_1Composer.html#a9329b060d732975361a6b8e67735e995',1,'ArgusSamples::Composer']]] +]; diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_a.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_a.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_b.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_b.png new file mode 100644 index 0000000..258c141 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_b.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_h.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_h.png new file mode 100644 index 0000000..4ca9102 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_h.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_s.png b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tab_s.png differ diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tabs.css b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tabs.css new file mode 100644 index 0000000..2192056 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/tabs.css @@ -0,0 +1,59 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/todo.html b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/todo.html new file mode 100644 index 0000000..abd5f66 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/docs/doxygen/html/todo.html @@ -0,0 +1,100 @@ + + + + + +Argus Camera Sample: Todo List + + + + + + + + + +
+
+ + + + + + +
+
Argus Camera Sample +
+
Argus Camera Sample
+
+
+ + + + + + + + +
+ +
+ +
+
+
+
Todo List
+
+
+
+
Member ArgusSamples::AppModuleGeneric::loadConfig (void *userPtr, const char *optArg)
+
ask for file if called from GUI
+
Member ArgusSamples::AppModuleGeneric::saveConfig (void *userPtr, const char *optArg)
+
ask for file if called from GUI
+
Member ArgusSamples::EventThread::threadExecute ()
+
IEvent documentation says the time value is in nano seconds, but actually it's in micro seconds.
+
Member ArgusSamples::GalleryThread::threadInitialize ()
+
Using 1920x1080 for now. Should use the image size, but this would require creating
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/apps/camera/modules/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/modules/CMakeLists.txt new file mode 100644 index 0000000..74f26a7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/CMakeLists.txt @@ -0,0 +1,64 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +project(arguscameramodules) + +find_package(JPEG) + +set(SOURCES + tasks/Gallery.cpp + tasks/MultiExposure.cpp + tasks/MultiSession.cpp + tasks/StillCapture.cpp + tasks/VideoRecord.cpp + Dispatcher.cpp + EventThread.cpp + PerfTracker.cpp + XMLConfig.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EXPAT_INCLUDE_DIR} + ${JPEG_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/apps/camera/common + ${CMAKE_SOURCE_DIR}/apps/camera/renderer + ${CMAKE_SOURCE_DIR}/samples/utils + ${CMAKE_CURRENT_SOURCE_DIR} + ) + +add_library(${PROJECT_NAME} STATIC ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + ${EXPAT_LIBRARIES} + ${JPEG_LIBRARIES} + arguscameracommon + arguscamerarenderer + argussampleutils + ) diff --git a/jetson_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp b/jetson_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp new file mode 100644 index 0000000..6c0153e --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/Dispatcher.cpp @@ -0,0 +1,2033 @@ +/* + * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include + +#include +#include + +#include "Dispatcher.h" +#include "InitOnce.h" +#include "UniquePointer.h" +#include "Error.h" +#include "Util.h" +#include "Composer.h" +#include "Validator.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ArgusSamples +{ + +/** + * An observer for an Argus interface. + */ +class IObserverForInterface : public IObserver +{ +public: + virtual ~IObserverForInterface() { }; + + /** + * Check if this is the observer for the given interface. + * + * @param interface [in] + */ + virtual bool isInterface(Argus::Interface *interface) const = 0; +}; + +/** + * Denoise settings observer. Update Argus denoise settings when values change. + */ +class DenoiseSettingsObserver : public IObserverForInterface +{ +public: + DenoiseSettingsObserver(Argus::IDenoiseSettings *iDenoiseSettings) + : m_iDenoiseSettings(iDenoiseSettings) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_denoiseMode.registerObserver(this, + static_cast( + &DenoiseSettingsObserver::onDenoiseModeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_denoiseStrength.registerObserver(this, + static_cast( + &DenoiseSettingsObserver::onDenoiseStrengthChanged))); + } + + virtual ~DenoiseSettingsObserver() + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_denoiseStrength.unregisterObserver(this, + static_cast( + &DenoiseSettingsObserver::onDenoiseStrengthChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_denoiseMode.unregisterObserver(this, + static_cast( + &DenoiseSettingsObserver::onDenoiseModeChanged))); + } + + virtual bool isInterface(Argus::Interface *interface) const + { + return (interface == m_iDenoiseSettings); + } + +private: + bool onDenoiseModeChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_denoiseMode); + + if (m_iDenoiseSettings->setDenoiseMode(dispatcher.m_denoiseMode.get()) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to set the denoising mode"); + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onDenoiseStrengthChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_denoiseStrength); + + if (m_iDenoiseSettings->setDenoiseStrength(dispatcher.m_denoiseStrength.get()) != + Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set the denoise strength"); + } + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + Argus::IDenoiseSettings *m_iDenoiseSettings; +}; + +/** + * Edge enhancement settings observer. Update Argus edge enhance settings when values change. + */ +class EdgeEnhanceSettingsObserver : public IObserverForInterface +{ +public: + EdgeEnhanceSettingsObserver(Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings) + : m_iEdgeEnhanceSettings(iEdgeEnhanceSettings) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_edgeEnhanceMode.registerObserver(this, + static_cast( + &EdgeEnhanceSettingsObserver::onEdgeEnhanceModeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_edgeEnhanceStrength.registerObserver(this, + static_cast( + &EdgeEnhanceSettingsObserver::onEdgeEnhanceStrengthChanged))); + } + + virtual ~EdgeEnhanceSettingsObserver() + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_edgeEnhanceStrength.unregisterObserver(this, + static_cast( + &EdgeEnhanceSettingsObserver::onEdgeEnhanceStrengthChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_edgeEnhanceMode.unregisterObserver(this, + static_cast( + &EdgeEnhanceSettingsObserver::onEdgeEnhanceModeChanged))); + } + + virtual bool isInterface(Argus::Interface *interface) const + { + return (interface == m_iEdgeEnhanceSettings); + } + +private: + bool onEdgeEnhanceModeChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_edgeEnhanceMode); + + if (m_iEdgeEnhanceSettings->setEdgeEnhanceMode(dispatcher.m_edgeEnhanceMode.get()) + != Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set the edge enhancement mode"); + } + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onEdgeEnhanceStrengthChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_edgeEnhanceStrength); + + if (m_iEdgeEnhanceSettings->setEdgeEnhanceStrength(dispatcher.m_edgeEnhanceStrength.get()) + != Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set the edge enhancement strength"); + } + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + Argus::IEdgeEnhanceSettings *m_iEdgeEnhanceSettings; +}; + +/** + * Source settings observer. Update Argus source settings if values which are set through the + * source settings change. + */ +class SourceSettingsObserver : public IObserverForInterface +{ +public: + SourceSettingsObserver(Argus::ISourceSettings *iSourceSettings) + : m_iSourceSettings(iSourceSettings) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_exposureTimeRange.registerObserver(this, + static_cast( + &SourceSettingsObserver::onExposureTimeRangeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_gainRange.registerObserver(this, + static_cast( + &SourceSettingsObserver::onGainRangeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_sensorModeIndex.registerObserver(this, + static_cast( + &SourceSettingsObserver::onSensorModeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_frameRate.registerObserver(this, + static_cast( + &SourceSettingsObserver::onFrameRateChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_focusPosition.registerObserver(this, + static_cast( + &SourceSettingsObserver::onFocusPositionChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_aperturePosition.registerObserver(this, + static_cast( + &SourceSettingsObserver::onAperturePositionChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_apertureFnum.registerObserver(this, + static_cast( + &SourceSettingsObserver::onApertureFnumChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_apertureMotorSpeed.registerObserver(this, + static_cast( + &SourceSettingsObserver::onApertureMotorSpeedChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_captureYuvFormat.registerObserver(this, + static_cast( + &SourceSettingsObserver::onCaptureYuvFormatChanged))); + } + + virtual ~SourceSettingsObserver() + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_apertureMotorSpeed.unregisterObserver(this, + static_cast( + &SourceSettingsObserver::onApertureMotorSpeedChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_aperturePosition.unregisterObserver(this, + static_cast( + &SourceSettingsObserver::onAperturePositionChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_apertureFnum.unregisterObserver(this, + static_cast( + &SourceSettingsObserver::onApertureFnumChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_focusPosition.unregisterObserver(this, + static_cast( + &SourceSettingsObserver::onFocusPositionChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_frameRate.unregisterObserver(this, + static_cast( + &SourceSettingsObserver::onFrameRateChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_sensorModeIndex.unregisterObserver(this, + static_cast( + &SourceSettingsObserver::onSensorModeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_gainRange.unregisterObserver(this, + static_cast( + &SourceSettingsObserver::onGainRangeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_exposureTimeRange.unregisterObserver(this, + static_cast( + &SourceSettingsObserver::onExposureTimeRangeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_captureYuvFormat.unregisterObserver(this, + static_cast( + &SourceSettingsObserver::onCaptureYuvFormatChanged))); + } + + virtual bool isInterface(Argus::Interface *interface) const + { + return (interface == m_iSourceSettings); + } + +private: + bool onExposureTimeRangeChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_exposureTimeRange); + + if (m_iSourceSettings->setExposureTimeRange(dispatcher.m_exposureTimeRange.get()) != + Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set exposure time range"); + } + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onGainRangeChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_gainRange); + + if (m_iSourceSettings->setGainRange(dispatcher.m_gainRange.get()) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to set gain range"); + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onSensorModeChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_sensorModeIndex); + + Argus::SensorMode *sensorMode = NULL; + PROPAGATE_ERROR(dispatcher.getSensorMode(dispatcher.m_sensorModeIndex.get(), &sensorMode)); + + if (m_iSourceSettings->setSensorMode(sensorMode) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to set sensor mode"); + + PROPAGATE_ERROR(dispatcher.restartActiveRequests()); + + return true; + } + + bool onCaptureYuvFormatChanged(const Observed & source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_captureYuvFormat); + + // The Video/Still task will shut down and restart their + // EGLStreams, causing their underlying buffer pools to be reallocated. + // So there's not much else to do here. + PROPAGATE_ERROR(dispatcher.restartActiveRequests()); + + return true; + } + + bool onFocusPositionChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_focusPosition); + + if (m_iSourceSettings->setFocusPosition(dispatcher.m_focusPosition.get()) != + Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set focus position"); + } + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onAperturePositionChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_aperturePosition); + + if (m_iSourceSettings->setAperturePosition(dispatcher.m_aperturePosition.get()) != + Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set aperture motor step"); + } + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onApertureFnumChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_apertureFnum); + + if (m_iSourceSettings->setApertureFNumber(dispatcher.m_apertureFnum.get()) != + Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set aperture F-num"); + } + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onApertureMotorSpeedChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_apertureMotorSpeed); + + if (m_iSourceSettings->setApertureMotorSpeed(dispatcher.m_apertureMotorSpeed.get()) != + Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set aperture motor speed"); + } + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onFrameRateChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_frameRate); + + Argus::Range frameDurationRangeNs(0); + + if (dispatcher.m_frameRate.get() == 0.0f) + { + // a frame rate of zero means VFR, get the sensor frame duration and apply it to + // the source + Argus::SensorMode *sensorMode = NULL; + PROPAGATE_ERROR(dispatcher.getSensorMode(dispatcher.m_sensorModeIndex.get(), + &sensorMode)); + + Argus::ISensorMode *iSensorMode = + Argus::interface_cast(sensorMode); + + frameDurationRangeNs = iSensorMode->getFrameDurationRange(); + } + else + { + // frame rate is frames per second, frameduration is in nanoseconds + frameDurationRangeNs = + TimeValue::fromCycelsPerSec(dispatcher.m_frameRate.get()).toNSec(); + } + + if (m_iSourceSettings->setFrameDurationRange(frameDurationRangeNs) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to set frame duration range"); + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + Argus::ISourceSettings *m_iSourceSettings; +}; + +/** + * Auto control settings observer. Update Argus auto control settings if values which are set + * through the auto control settings change. + */ +class AutoControlSettingsObserver : public IObserverForInterface +{ +public: + AutoControlSettingsObserver(Argus::IAutoControlSettings *iAutoControlSettings) + : m_iAutoControlSettings(iAutoControlSettings) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_aeAntibandingMode.registerObserver(this, + static_cast( + &AutoControlSettingsObserver::onAeAntibandingModeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_aeLock.registerObserver(this, + static_cast( + &AutoControlSettingsObserver::onAeLockChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_awbLock.registerObserver(this, + static_cast( + &AutoControlSettingsObserver::onAwbLockChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_awbMode.registerObserver(this, + static_cast( + &AutoControlSettingsObserver::onAwbModeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_exposureCompensation.registerObserver(this, + static_cast( + &AutoControlSettingsObserver::onExposureCompensationChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_ispDigitalGainRange.registerObserver(this, + static_cast( + &AutoControlSettingsObserver::onIspDigitalGainRangeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_acRegionHorizontal.registerObserver(this, + static_cast( + &AutoControlSettingsObserver::onAcRegionChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_acRegionVertical.registerObserver(this, + static_cast( + &AutoControlSettingsObserver::onAcRegionChanged))); + } + + virtual ~AutoControlSettingsObserver() + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_ispDigitalGainRange.unregisterObserver(this, + static_cast( + &AutoControlSettingsObserver::onIspDigitalGainRangeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_exposureCompensation.unregisterObserver(this, + static_cast( + &AutoControlSettingsObserver::onExposureCompensationChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_awbMode.unregisterObserver(this, + static_cast( + &AutoControlSettingsObserver::onAwbModeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_awbLock.unregisterObserver(this, + static_cast( + &AutoControlSettingsObserver::onAwbLockChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_aeLock.unregisterObserver(this, + static_cast( + &AutoControlSettingsObserver::onAeLockChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_aeAntibandingMode.unregisterObserver(this, + static_cast( + &AutoControlSettingsObserver::onAeAntibandingModeChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_acRegionHorizontal.unregisterObserver(this, + static_cast( + &AutoControlSettingsObserver::onAcRegionChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_acRegionVertical.unregisterObserver(this, + static_cast( + &AutoControlSettingsObserver::onAcRegionChanged))); + } + + virtual bool isInterface(Argus::Interface *interface) const + { + return (interface == m_iAutoControlSettings); + } + +private: + bool onAeAntibandingModeChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_aeAntibandingMode); + + if (m_iAutoControlSettings->setAeAntibandingMode(dispatcher.m_aeAntibandingMode.get()) != + Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set the AE antibanding mode"); + } + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onAeLockChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_aeLock); + + if (m_iAutoControlSettings->setAeLock(dispatcher.m_aeLock.get()) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to set the AE lock"); + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onAwbLockChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_awbLock); + + if (m_iAutoControlSettings->setAwbLock(dispatcher.m_awbLock.get()) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to set the AWB lock"); + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onAwbModeChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_awbMode); + + if (m_iAutoControlSettings->setAwbMode(dispatcher.m_awbMode.get()) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to set the AWB mode"); + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onExposureCompensationChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_exposureCompensation); + + if (m_iAutoControlSettings->setExposureCompensation( + dispatcher.m_exposureCompensation.get()) != Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set the exposure compensation"); + } + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onIspDigitalGainRangeChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_ispDigitalGainRange); + + if (m_iAutoControlSettings->setIspDigitalGainRange( + dispatcher.m_ispDigitalGainRange.get()) != Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set the Isp Digital Gain Range"); + } + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onAcRegionChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert((&source == &dispatcher.m_acRegionHorizontal) || + (&source == &dispatcher.m_acRegionVertical)); + + Argus::Range horizontal = dispatcher.m_acRegionHorizontal.get(); + Argus::Range vertical = dispatcher.m_acRegionVertical.get(); + + if ((horizontal.min() < horizontal.max()) && + vertical.min() < vertical.max()) + { + // set bayerHistogram + Argus::Rectangle histRegion(horizontal.min(), vertical.min(), + horizontal.max(), vertical.max()); + + if (m_iAutoControlSettings->setBayerHistogramRegion(histRegion) != Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set the bayer histogram region"); + } + + // set AF + std::vector afRegions; + Argus::AcRegion oneRegion(horizontal.min(), vertical.min(), horizontal.max(), + vertical.max(), 1.0f); + afRegions.push_back(oneRegion); + + if (m_iAutoControlSettings->setAfRegions(afRegions) != Argus::STATUS_OK) + { + ORIGINATE_ERROR("Failed to set the af region"); + } + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + } + + return true; + } + + Argus::IAutoControlSettings *m_iAutoControlSettings; +}; + +/** + * DeFog settings observer. Update Argus DeFog settings if values which are set through the + * DeFog settings change. + */ +class DeFogSettingsObserver : public IObserverForInterface +{ +public: + DeFogSettingsObserver(Argus::Ext::IDeFogSettings *iDeFogSettings) + : m_iDeFogSettings(iDeFogSettings) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogEnable.registerObserver(this, + static_cast(&DeFogSettingsObserver::onDeFogEnableChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogAmount.registerObserver(this, + static_cast(&DeFogSettingsObserver::onDeFogAmountChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogQuality.registerObserver(this, + static_cast(&DeFogSettingsObserver::onDeFogQualityChanged))); + } + + virtual ~DeFogSettingsObserver() + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogQuality.unregisterObserver(this, + static_cast(&DeFogSettingsObserver::onDeFogQualityChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogAmount.unregisterObserver(this, + static_cast(&DeFogSettingsObserver::onDeFogAmountChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_deFogEnable.unregisterObserver(this, + static_cast(&DeFogSettingsObserver::onDeFogEnableChanged))); + } + + virtual bool isInterface(Argus::Interface *interface) const + { + return (interface == m_iDeFogSettings); + } + +private: + bool onDeFogEnableChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_deFogEnable); + + m_iDeFogSettings->setDeFogEnable(dispatcher.m_deFogEnable.get()); + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onDeFogAmountChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_deFogAmount); + + if (m_iDeFogSettings->setDeFogAmount(dispatcher.m_deFogAmount.get()) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to set the DeFog amount"); + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + bool onDeFogQualityChanged(const Observed &source) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + + assert(&source == &dispatcher.m_deFogQuality); + + if (m_iDeFogSettings->setDeFogQuality(dispatcher.m_deFogQuality.get()) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to set the DeFog quality"); + + PROPAGATE_ERROR(Dispatcher::getInstance().restartActiveRequests()); + + return true; + } + + Argus::Ext::IDeFogSettings *m_iDeFogSettings; +}; + +// valid YUV pixel formats +static const ValidatorEnum::ValueStringPair s_captureYuvFormatTypes[] = +{ + { Argus::PIXEL_FMT_YCbCr_420_888, "nv12" }, + { Argus::PIXEL_FMT_P016, "p016" } +}; + +// valid denoise modes +static const ValidatorEnum::ValueStringPair s_denoiseModes[] = +{ + { Argus::DENOISE_MODE_OFF, "off" }, + { Argus::DENOISE_MODE_FAST, "fast" }, + { Argus::DENOISE_MODE_HIGH_QUALITY, "highquality" } +}; + +// valid edge enhance modes +static const ValidatorEnum::ValueStringPair s_edgeEnhanceModes[] = +{ + { Argus::EDGE_ENHANCE_MODE_OFF, "off" }, + { Argus::EDGE_ENHANCE_MODE_FAST, "fast" }, + { Argus::EDGE_ENHANCE_MODE_HIGH_QUALITY, "highquality" } +}; + +// valid AE antibanding modes +static const ValidatorEnum::ValueStringPair s_aeAntibandingModes[] = +{ + { Argus::AE_ANTIBANDING_MODE_OFF, "off" }, + { Argus::AE_ANTIBANDING_MODE_AUTO, "auto" }, + { Argus::AE_ANTIBANDING_MODE_50HZ, "50hz" }, + { Argus::AE_ANTIBANDING_MODE_60HZ, "60hz" } +}; + +// valid AWB modes +static const ValidatorEnum::ValueStringPair s_awbModes[] = +{ + { Argus::AWB_MODE_OFF, "off" }, + { Argus::AWB_MODE_AUTO, "auto" }, + { Argus::AWB_MODE_INCANDESCENT, "incandescent" }, + { Argus::AWB_MODE_FLUORESCENT, "fluorescent" }, + { Argus::AWB_MODE_WARM_FLUORESCENT, "warmfluorescent" }, + { Argus::AWB_MODE_DAYLIGHT, "daylight" }, + { Argus::AWB_MODE_CLOUDY_DAYLIGHT, "cloudydaylight" }, + { Argus::AWB_MODE_TWILIGHT, "twilight" }, + { Argus::AWB_MODE_SHADE, "shade" }, + { Argus::AWB_MODE_MANUAL, "manual" } +}; + +// valid still file formats +static const ValidatorEnum::ValueStringPair s_stillFileTypes[] = +{ + { ArgusSamples::STILL_FILE_TYPE_JPG, "jpg" }, + { ArgusSamples::STILL_FILE_TYPE_HEADERLESS, "headerless" } +}; + +// valid video formats +static const ValidatorEnum::ValueStringPair s_videoFormats[] = +{ + { VideoPipeline::VIDEO_FORMAT_H264, "h264" }, + { VideoPipeline::VIDEO_FORMAT_H265, "h265" }, + { VideoPipeline::VIDEO_FORMAT_VP8, "vp8" }, + { VideoPipeline::VIDEO_FORMAT_VP9, "vp9" } +}; + +// valid video file types +static const ValidatorEnum::ValueStringPair s_videoFileTypes[] = +{ + { VideoPipeline::VIDEO_FILE_TYPE_MP4, "mp4" }, + { VideoPipeline::VIDEO_FILE_TYPE_3GP, "3gp" }, + { VideoPipeline::VIDEO_FILE_TYPE_AVI, "avi" }, + { VideoPipeline::VIDEO_FILE_TYPE_MKV, "mkv" }, + { VideoPipeline::VIDEO_FILE_TYPE_H265, "h265" } +}; + +static const Argus::Size2D s_outputSizes[] = +{ + Argus::Size2D(0, 0), // if size is 0,0 take the current sensor size + Argus::Size2D(176, 144), // QCIF + Argus::Size2D(320, 240), + Argus::Size2D(640, 480), + Argus::Size2D(1280, 720), // 720p HDTV + Argus::Size2D(1920, 1080), // 1080p HDTV + Argus::Size2D(3840, 2160), // 2160p 4K UHDTV +}; + +Dispatcher::Dispatcher() + : m_deviceFocusPositionRange(0) + , m_deviceAperturePositionRange(0) + , m_deviceApertureMotorSpeedRange(1.0f) + , m_deviceExposureCompensationRange(0.0f) + , m_deviceIspDigitalGainRange(Argus::Range(0.0f)) + , m_sensorExposureTimeRange(Argus::Range(0)) + , m_sensorAnalogGainRange(Argus::Range(0.0f)) + , m_sensorFrameRateRange(0.0f) + , m_deviceIndex(new ValidatorStdVector(&m_cameraDevices), 0) + , m_deviceOpen(false) + , m_sensorModeValid(false) + , m_verbose(false) + , m_kpi(false) + , m_exposureTimeRange(new ValidatorRange >(&m_sensorExposureTimeRange), + Argus::Range(0)) + , m_gainRange(new ValidatorRange >(&m_sensorAnalogGainRange), + Argus::Range(0.0f)) + , m_sensorModeIndex(new ValidatorEnum(), 0) + , m_frameRate(new ValidatorRange(&m_sensorFrameRateRange), 0.0f) + , m_focusPosition(new ValidatorRange(&m_deviceFocusPositionRange), 0) + , m_aperturePosition(new ValidatorRange(&m_deviceAperturePositionRange), 0) + , m_apertureFnum(new ValidatorEnum(), 0.0f) + , m_apertureMotorSpeed(new ValidatorRange(&m_deviceApertureMotorSpeedRange), 1.0f) + , m_captureYuvFormat(new ValidatorEnum( + s_captureYuvFormatTypes, + sizeof(s_captureYuvFormatTypes) / sizeof(s_captureYuvFormatTypes[0])), + Argus::PIXEL_FMT_YCbCr_420_888) + , m_denoiseMode(new ValidatorEnum( + s_denoiseModes, sizeof(s_denoiseModes) / sizeof(s_denoiseModes[0])), + Argus::DENOISE_MODE_FAST) + , m_denoiseStrength(new ValidatorRange(-1.0f, 1.0f), -1.0f) + , m_edgeEnhanceMode(new ValidatorEnum( + s_edgeEnhanceModes, sizeof(s_edgeEnhanceModes) / sizeof(s_edgeEnhanceModes[0])), + Argus::EDGE_ENHANCE_MODE_FAST) + , m_edgeEnhanceStrength(new ValidatorRange(-1.0f, 1.0f), -1.0f) + , m_aeAntibandingMode(new ValidatorEnum( + s_aeAntibandingModes, sizeof(s_aeAntibandingModes) / sizeof(s_aeAntibandingModes[0])), + Argus::AE_ANTIBANDING_MODE_AUTO) + , m_aeLock(false) + , m_awbLock(false) + , m_awbMode(new ValidatorEnum( + s_awbModes, sizeof(s_awbModes) / sizeof(s_awbModes[0])), + Argus::AWB_MODE_AUTO) + , m_exposureCompensation(new ValidatorRange(&m_deviceExposureCompensationRange), 0.0f) + , m_ispDigitalGainRange(new ValidatorRange >(&m_deviceIspDigitalGainRange), + Argus::Range(1.0f)) + , m_acRegionHorizontal(Argus::Range(0)) + , m_acRegionVertical(Argus::Range(0)) + , m_stillFileType(new ValidatorEnum( + s_stillFileTypes, sizeof(s_stillFileTypes) / sizeof(s_stillFileTypes[0])), + STILL_FILE_TYPE_JPG) + , m_videoFormat(new ValidatorEnum( + s_videoFormats, sizeof(s_videoFormats) / sizeof(s_videoFormats[0])), + VideoPipeline::VIDEO_FORMAT_H265) + , m_videoFileType(new ValidatorEnum( + s_videoFileTypes, sizeof(s_videoFileTypes) / sizeof(s_videoFileTypes[0])), + VideoPipeline::VIDEO_FILE_TYPE_MKV) + , m_videoBitRate(new ValidatorRange(0, VideoPipeline::VIDEO_BITRATE_MAX),0) + , m_outputSize(new ValidatorSize2D(s_outputSizes, + sizeof(s_outputSizes) / sizeof(s_outputSizes[0]), true /*allowArbitrarySizes*/), + Argus::Size2D(0, 0)) + , m_outputPath(".") + , m_deFogEnable(false) + , m_deFogAmount(new ValidatorRange(0.0f, 1.0f), 0.9f) + , m_deFogQuality(new ValidatorRange(0.0f, 1.0f), 0.14285f) + , m_initialized(false) + , m_iCameraProvider(NULL) +{ + PROPAGATE_ERROR_CONTINUE(initialize()); +} + +Dispatcher::~Dispatcher() +{ + if (!shutdown()) + REPORT_ERROR("Failed to shutdown"); +} + +Dispatcher &Dispatcher::getInstance() +{ + static InitOnce initOnce; + static Dispatcher instance; + + if (initOnce.begin()) + { + if (instance.initialize()) + { + initOnce.complete(); + } + else + { + initOnce.failed(); + REPORT_ERROR("Initalization failed"); + } + } + + return instance; +} + +bool Dispatcher::initialize() +{ + if (m_initialized) + return true; + + // Create the CameraProvider object and obtain its interface. + m_cameraProvider = Argus::UniqueObj(Argus::CameraProvider::create()); + m_iCameraProvider = Argus::interface_cast(m_cameraProvider); + if (!m_iCameraProvider) + ORIGINATE_ERROR("Failed to create CameraProvider"); + printf("Argus Version: %s\n", m_iCameraProvider->getVersion().c_str()); + + // Get the camera devices + m_iCameraProvider->getCameraDevices(&m_cameraDevices); + if (m_cameraDevices.size() == 0) + { + PROPAGATE_ERROR(shutdown()); + ORIGINATE_ERROR("No cameras available"); + } + + m_initialized = true; + + // register the device index observer after 'm_initialize' is set, the call back will be + // called immediately and assert that 'm_initialize' is set + PROPAGATE_ERROR_CONTINUE(m_deviceIndex.registerObserver(this, + static_cast(&Dispatcher::onDeviceIndexChanged))); + PROPAGATE_ERROR_CONTINUE(m_sensorModeIndex.registerObserver(this, + static_cast(&Dispatcher::onSensorModeIndexChanged))); + + return true; +} + +bool Dispatcher::shutdown() +{ + if (m_initialized) + { + m_initialized = false; + // unregister the device index observer in reverse order + PROPAGATE_ERROR_CONTINUE(m_sensorModeIndex.unregisterObserver(this, + static_cast(&Dispatcher::onSensorModeIndexChanged))); + PROPAGATE_ERROR_CONTINUE(m_deviceIndex.unregisterObserver(this, + static_cast(&Dispatcher::onDeviceIndexChanged))); + + PROPAGATE_ERROR_CONTINUE(closeSession()); + + m_cameraDevices.clear(); + m_cameraProvider.reset(); + } + + return true; +} + +bool Dispatcher::onDeviceIndexChanged(const Observed &source) +{ + assert(static_cast&>(source).get() == m_deviceIndex); + assert(m_initialized); + + // close the currently open device + if (m_deviceOpen) + { + PROPAGATE_ERROR(m_deviceOpen.set(false)); + + PROPAGATE_ERROR(closeSession()); + + // reset the current device properties + } + + // open the new device + const Argus::ICameraProperties *iCameraProperties = + Argus::interface_cast(m_cameraDevices[m_deviceIndex]); + if (!iCameraProperties) + ORIGINATE_ERROR("Failed to get ICameraProperties interface"); + + // get the sensor modes + if (iCameraProperties->getAllSensorModes(&m_sensorModes) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to get sensor modes"); + + if (m_sensorModes.size() == 0) + ORIGINATE_ERROR("No sensor modes found"); + + // get the focus position range + PROPAGATE_ERROR(m_deviceFocusPositionRange.set(iCameraProperties->getFocusPositionRange())); + + // get the aperture position range + PROPAGATE_ERROR(m_deviceAperturePositionRange.set(iCameraProperties->getAperturePositionRange())); + + // get the aperture Fnum available values + if(iCameraProperties->getAvailableApertureFNumbers(&m_deviceApertureFnums)) + ORIGINATE_ERROR("Failed to get Aperture Fnum"); + + ValidatorEnum* apertureFnumValidator = + static_cast*>(m_apertureFnum.getValidator()); + apertureFnumValidator->setValidValues(m_deviceApertureFnums); + // update the valid aperture F-num + PROPAGATE_ERROR(m_apertureFnum.set(m_deviceApertureFnums.front(), true /*forceNotify*/)); + + // get the aperture motor speed range + PROPAGATE_ERROR(m_deviceApertureMotorSpeedRange.set(iCameraProperties->getApertureMotorSpeedRange())); + + // get new limits + Argus::Range digitalGainRange = iCameraProperties->getIspDigitalGainRange(); + Argus::Range deviceExposureCompensationRange = + iCameraProperties->getExposureCompensationRange(); + + /* set ranges to unified range (to avoid errors when setting new values) + * Eg. Say Device 1 has range [-1,0] and Device 2 has range [1,2] .If current value is -1 and + * range is [-1,0] , setting the range to [1,2] would give error . Similarly, if current value + * is 1 , setting the range to [-1,0] would give error. Thus we set range to [-1,2] , set value + * to 1 and then set range to [1,2] to avoid errors. + */ + Argus::Range unifiedDigitalGainRange(0); + unifiedDigitalGainRange.min() = + std::min(m_deviceIspDigitalGainRange.get().min().min(), digitalGainRange.min()); + unifiedDigitalGainRange.max() = + std::max(m_deviceIspDigitalGainRange.get().max().max(), digitalGainRange.max()); + + Argus::Range unifiedExposureCompensationRange(0); + unifiedExposureCompensationRange.min() = + std::min(m_deviceExposureCompensationRange.get().min(), + deviceExposureCompensationRange.min()); + unifiedExposureCompensationRange.max() = + std::max(m_deviceExposureCompensationRange.get().max(), + deviceExposureCompensationRange.max()); + + PROPAGATE_ERROR(m_deviceIspDigitalGainRange.set( + Argus::Range >(unifiedDigitalGainRange))); + PROPAGATE_ERROR(m_deviceExposureCompensationRange.set( + Argus::Range (unifiedExposureCompensationRange))); + + // update dependent values + PROPAGATE_ERROR(m_ispDigitalGainRange.set(digitalGainRange)); + PROPAGATE_ERROR(m_exposureCompensation.set(0.0f)); + + // set to final range + PROPAGATE_ERROR(m_deviceIspDigitalGainRange.set(Argus::Range >( + digitalGainRange, digitalGainRange))); + PROPAGATE_ERROR(m_deviceExposureCompensationRange.set(Argus::Range ( + deviceExposureCompensationRange))); + + // add value/string pairs for each sensor mode index + std::vector::ValueStringPair> valueStringPairs; + valueStringPairs.resize(m_sensorModes.size()); + for (size_t index = 0; index < m_sensorModes.size(); ++index) + { + Argus::ISensorMode *sensorMode = + Argus::interface_cast(m_sensorModes[index]); + + valueStringPairs[index].value = (uint32_t)index; + + std::ostringstream stream; + stream << index << ": " + << sensorMode->getResolution().width() << "x" << sensorMode->getResolution().height(); + + Argus::Ext::IPwlWdrSensorMode* pwlMode = + Argus::interface_cast(m_sensorModes[index]); + + Argus::Ext::IDolWdrSensorMode* dolMode = + Argus::interface_cast(m_sensorModes[index]); + if (pwlMode) + { + stream << " @" << sensorMode->getInputBitDepth() << "bpp -> " << + sensorMode->getOutputBitDepth() << "bpp"; + } + else if (dolMode) + { + stream << " @" << sensorMode->getOutputBitDepth() << "bpp -> " << + dolMode->getExposureCount() << " exposure" << " DOL WDR"; + } + else + { + stream << " @" << sensorMode->getOutputBitDepth() << "bpp"; + } + + valueStringPairs[index].string = stream.str(); + } + // update the validator with the new value/string pairs + ValidatorEnum *validator = + static_cast*>(m_sensorModeIndex.getValidator()); + PROPAGATE_ERROR(validator->setValidValues(valueStringPairs.data(), valueStringPairs.size())); + + // set the sensor mode index (force notify observer because the sensor modes are different now + // although the sensor mode index could be the same) + PROPAGATE_ERROR(m_sensorModeIndex.set(0, true /*forceNotify*/)); + + PROPAGATE_ERROR(m_deviceOpen.set(true)); + + return true; +} + +bool Dispatcher::onSensorModeIndexChanged(const Observed &source) +{ + m_sensorModeValid.set(false); + assert(static_cast&>(source).get() == m_sensorModeIndex); + assert(m_initialized); + + Argus::ISensorMode *iSensorMode = + Argus::interface_cast(m_sensorModes[m_sensorModeIndex.get()]); + if (!iSensorMode) + ORIGINATE_ERROR("Failed to get ISensorMode interface"); + + // get new limits + Argus::Range sensorExposureTimeRange = iSensorMode->getExposureTimeRange(); + Argus::Range sensorAnalogGainRange = iSensorMode->getAnalogGainRange(); + Argus::Range sensorFrameDurationRange( + TimeValue::fromNSec(iSensorMode->getFrameDurationRange().min()), + TimeValue::fromNSec(iSensorMode->getFrameDurationRange().max())); + Argus::Range sensorFrameRateRange( + sensorFrameDurationRange.max().toCyclesPerSec(), + sensorFrameDurationRange.min().toCyclesPerSec()); + + // set ranges to unified range (to avoid errors when setting new values) + Argus::Range unifiedSensorExposureTimeRange(0); + unifiedSensorExposureTimeRange.min() = + std::min(m_sensorExposureTimeRange.get().min().min(), sensorExposureTimeRange.min()); + unifiedSensorExposureTimeRange.max() = + std::max(m_sensorExposureTimeRange.get().max().max(), sensorExposureTimeRange.max()); + Argus::Range unifiedSensorAnalogGainRange(0); + unifiedSensorAnalogGainRange.min() = + std::min(m_sensorAnalogGainRange.get().min().min(), sensorAnalogGainRange.min()); + unifiedSensorAnalogGainRange.max() = + std::max(m_sensorAnalogGainRange.get().max().max(), sensorAnalogGainRange.max()); + Argus::Range unifiedSensorFrameRateRange(0.0f); + unifiedSensorFrameRateRange.min() = + std::min(m_sensorFrameRateRange.get().min(), sensorFrameRateRange.min()); + unifiedSensorFrameRateRange.max() = + std::max(m_sensorFrameRateRange.get().max(), sensorFrameRateRange.max()); + + PROPAGATE_ERROR(m_sensorExposureTimeRange.set( + Argus::Range >(unifiedSensorExposureTimeRange))); + PROPAGATE_ERROR(m_sensorAnalogGainRange.set( + Argus::Range >(unifiedSensorAnalogGainRange))); + PROPAGATE_ERROR(m_sensorFrameRateRange.set(unifiedSensorFrameRateRange)); + + // update dependent values + PROPAGATE_ERROR(m_exposureTimeRange.set(sensorExposureTimeRange)); + PROPAGATE_ERROR(m_gainRange.set(sensorAnalogGainRange)); + PROPAGATE_ERROR(m_frameRate.set(sensorFrameRateRange.max())); + + // set to final ranges + PROPAGATE_ERROR(m_sensorExposureTimeRange.set(Argus::Range >( + sensorExposureTimeRange, sensorExposureTimeRange))); + PROPAGATE_ERROR(m_sensorAnalogGainRange.set(Argus::Range >( + sensorAnalogGainRange, sensorAnalogGainRange))); + PROPAGATE_ERROR(m_sensorFrameRateRange.set(sensorFrameRateRange)); + m_sensorModeValid.set(true); + + return true; +} + +bool Dispatcher::supportsExtension(const Argus::ExtensionName& extension) const +{ + return m_iCameraProvider->supportsExtension(extension); +} + +bool Dispatcher::getInfo(std::string &info) const +{ + std::ostringstream stream; + + assert(m_initialized); + + stream << "Argus extensions:" << std::endl; + stream << " BayerSharpnessMap: " << + (supportsExtension(Argus::EXT_BAYER_SHARPNESS_MAP) ? + "supported" : "not supported") << std::endl; + stream << " DebugCaptureSession: " << + (supportsExtension(Argus::EXT_DEBUG_CAPTURE_SESSION) ? + "supported" : "not supported") << std::endl; + stream << " DeFog: " << + (supportsExtension(Argus::EXT_DE_FOG) ? + "supported" : "not supported") << std::endl; + stream << " FaceDetect: " << + (supportsExtension(Argus::EXT_FACE_DETECT) ? + "supported" : "not supported") << std::endl; + stream << " InternalFrameCount: " << + (supportsExtension(Argus::EXT_INTERNAL_FRAME_COUNT) ? + "supported" : "not supported") << std::endl; + stream << " SensorPrivateMetadata: " << + (supportsExtension(Argus::EXT_SENSOR_PRIVATE_METADATA) ? + "supported" : "not supported") << std::endl; + + stream << "Number of camera devices: " << m_cameraDevices.size() << std::endl; + + for (uint32_t deviceIndex = 0; deviceIndex < m_cameraDevices.size(); ++deviceIndex) + { + stream << "Device: " << deviceIndex << std::endl; + + const Argus::ICameraProperties *iCameraProperties = + Argus::interface_cast(m_cameraDevices[deviceIndex]); + if (!iCameraProperties) + ORIGINATE_ERROR("Failed to get ICameraProperties interface"); + + stream << " Max AE Regions: " << + iCameraProperties->getMaxAeRegions() << std::endl; + stream << " Max AWB Regions: " << + iCameraProperties->getMaxAwbRegions() << std::endl; + stream << " Focus Position Range: " << + iCameraProperties->getFocusPositionRange().min() << " - " << + iCameraProperties->getFocusPositionRange().max() << std::endl; + stream << " Aperture Position Range: " << + iCameraProperties->getAperturePositionRange().min() << " - " << + iCameraProperties->getAperturePositionRange().max() << std::endl; + stream << " Aperture Motor Speed Range: " << + iCameraProperties->getApertureMotorSpeedRange().min() << " - " << + iCameraProperties->getApertureMotorSpeedRange().max() << std::endl; + stream << " Lens Aperture Available values: "; + std::vector availableFnums; + iCameraProperties->getAvailableApertureFNumbers(&availableFnums); + for (std::vector::iterator it = availableFnums.begin(); + it != availableFnums.end(); ++it) + { + stream << *it << ", "; + } + stream << std::endl; + + stream << " Isp Digital Gain Range: " << + iCameraProperties->getIspDigitalGainRange().min() << " - " << + iCameraProperties->getIspDigitalGainRange().max() << std::endl; + + // print the sensor modes + std::vector sensorModes; + iCameraProperties->getAllSensorModes(&sensorModes); + stream << " Number of sensor modes: " << sensorModes.size() << std::endl; + for (uint32_t sensorModeIndex = 0; sensorModeIndex < sensorModes.size(); ++sensorModeIndex) + { + Argus::ISensorMode *sensorMode = + Argus::interface_cast(sensorModes[sensorModeIndex]); + if (!sensorMode) + ORIGINATE_ERROR("Failed to get ISensorMode interface"); + + // convert ns to fps + float maximum_fps = TimeValue::fromNSec( + sensorMode->getFrameDurationRange().min()).toCyclesPerSec(); + float minimum_fps = TimeValue::fromNSec( + sensorMode->getFrameDurationRange().max()).toCyclesPerSec(); + + stream << " Sensor mode: " << sensorModeIndex << std::endl; + stream << " Resolution: " << + sensorMode->getResolution().width() << "x" << + sensorMode->getResolution().height() << std::endl; + stream << " Exposure time range: " << + sensorMode->getExposureTimeRange().min() << " - " << + sensorMode->getExposureTimeRange().max() << " ns" << std::endl; + stream << " Frame duration range: " << + sensorMode->getFrameDurationRange().min() << " - " << + sensorMode->getFrameDurationRange().max() << " ns" << std::endl; + stream << " Framerate range: " << + minimum_fps << " - " << + maximum_fps << " fps" << std::endl; + stream << " InputBitDepth: " << + sensorMode->getInputBitDepth() << std::endl; + stream << " OutputBitDepth: " << + sensorMode->getOutputBitDepth() << std::endl; + stream << " Analog gain range: " << + sensorMode->getAnalogGainRange().min() << " - " << + sensorMode->getAnalogGainRange().max() << std::endl; + + stream << " SensorModeType: " << + sensorMode->getSensorModeType().getName() << std::endl; + + Argus::Ext::IPwlWdrSensorMode* pwlMode = + Argus::interface_cast(sensorModes[sensorModeIndex]); + + Argus::Ext::IDolWdrSensorMode* dolMode = + Argus::interface_cast(sensorModes[sensorModeIndex]); + + if (pwlMode) + { + stream << " Piecewise Linear (PWL) WDR Extension supported with: " << + pwlMode->getControlPointCount() << " control points." << std::endl; + std::vector< Argus::Point2D > points; + Argus::Status status = pwlMode->getControlPoints(&points); + if (status != Argus::STATUS_OK) + ORIGINATE_ERROR("Error obtaining control points"); + stream << " - Control Points: " << std::endl; + for (uint32_t j = 0; j < pwlMode->getControlPointCount(); j++) + { + stream << " (" << points[j].x() << ", " << + points[j].y() << ")" << std::endl; + } + } + else if (dolMode) + { + stream << " Digital Overlap (DOL) WDR Extension supported with: " << std::endl << + " - Number of Exposures: " << + dolMode->getExposureCount() << std::endl << + " - Number of Optical Black Lines per exposure: " << + dolMode->getOpticalBlackRowCount() << std::endl << + " - Number of Line Info marker pixels per row per exposure: " << + dolMode->getLineInfoMarkerWidth() << std::endl << + " - Number of margin pixels on left per row per exposure: " << + dolMode->getLeftMarginWidth() << std::endl << + " - Number of margin pixels on right per row per exposure: " << + dolMode->getRightMarginWidth() << std::endl; + + std::vector verticalBlankPeriodRowCounts; + Argus::Status status = + dolMode->getVerticalBlankPeriodRowCount(&verticalBlankPeriodRowCounts); + if (status != Argus::STATUS_OK) + ORIGINATE_ERROR("Error obtaining vertical blank period offsets per exposure"); + stream << " - Vertical blank period section row counts per exposure: " + << std::endl; + for (uint32_t j = 0; j < verticalBlankPeriodRowCounts.size(); j++) + { + stream << " - VBP-section[" << j << "] : " + << verticalBlankPeriodRowCounts[j] << std::endl; + } + + stream << " - Physical Resolution: " << + dolMode->getPhysicalResolution().width() << "x" << + dolMode->getPhysicalResolution().height() << std::endl; + } + + stream << std::endl; + } + } + + info = stream.str(); + + return true; +} + +bool Dispatcher::getSensorMode(uint32_t sensorModeIndex, Argus::SensorMode **sensorMode) const +{ + assert(m_deviceOpen); + + if (sensorModeIndex >= m_sensorModes.size()) + ORIGINATE_ERROR("Invalid sensor mode index"); + + *sensorMode = m_sensorModes[sensorModeIndex]; + + return true; +} + +Argus::Range Dispatcher::getDeviceFocusPositionRange() const +{ + return m_deviceFocusPositionRange.get(); +} + +Argus::Range Dispatcher::getDeviceAperturePositionRange() const +{ + return m_deviceAperturePositionRange.get(); +} + +Argus::Range Dispatcher::getDeviceApertureMotorSpeedRange() const +{ + return m_deviceApertureMotorSpeedRange.get(); +} + +uint32_t Dispatcher::getDeviceCount() const +{ + assert(m_deviceOpen); + + return m_cameraDevices.size(); +} + +bool Dispatcher::createSession(TrackedUniqueObj &session, + uint32_t deviceIndex) +{ + assert(m_deviceOpen); + + if (deviceIndex > m_cameraDevices.size()) + ORIGINATE_ERROR("Invalid device index"); + + // close the internal session, it might be using the device which will be used by the new + // session + PROPAGATE_ERROR(closeSession()); + + // create the new capture session + Argus::UniqueObj newSession( + m_iCameraProvider->createCaptureSession(m_cameraDevices[deviceIndex])); + if (!newSession) + ORIGINATE_ERROR("Failed to create CaptureSession"); + + PROPAGATE_ERROR(session.reset(newSession.release(), this)); + + return true; +} + +bool Dispatcher::dumpSessionInfo() const +{ + for (ActiveSessionList::const_iterator it = m_activeSessions.begin(); it != m_activeSessions.end(); + ++it) + { + Argus::Ext::IDebugCaptureSession *iDebugCaptureSession = + Argus::interface_cast(it->m_session); + if (!iDebugCaptureSession) + ORIGINATE_ERROR("DebugCaptureSession extension not supported"); + + const Argus::Status status = iDebugCaptureSession->dump(STDOUT_FILENO); + if (status != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to get dump runtime info"); + } + + return true; +} + +/** + * Create the internal session + */ +bool Dispatcher::createSession() +{ + if (m_captureSession) + return true; + + PROPAGATE_ERROR(createSession(m_captureSession, m_deviceIndex)); + + return true; +} + +/** + * Close the internal session + */ +bool Dispatcher::closeSession() +{ + m_captureSession.reset(); + return true; +} + +bool Dispatcher::track(Argus::CaptureSession *session) +{ + m_activeSessions.push_back(ActiveSession(session)); + return true; +} + +bool Dispatcher::untrack(Argus::CaptureSession *session) +{ + for (ActiveSessionList::iterator it = m_activeSessions.begin(); it != m_activeSessions.end(); + ++it) + { + if (it->m_session == session) + { + m_activeSessions.erase(it); + return true; + } + } + + ORIGINATE_ERROR("Session not found"); +} + +bool Dispatcher::waitForEvents(Argus::EventQueue *eventQueue, TimeValue timeout, + Argus::CaptureSession *session) +{ + if (!session) + { + // use the internal session + PROPAGATE_ERROR(createSession()); + session = m_captureSession.get(); + } + + Argus::IEventProvider *iEventProvider = Argus::interface_cast(session); + if (!iEventProvider) + ORIGINATE_ERROR("Failed to get iEventProvider interface"); + + // wait for the events + const Argus::Status status = iEventProvider->waitForEvents(eventQueue, timeout.toNSec()); + if ((status != Argus::STATUS_OK) && (status != Argus::STATUS_TIMEOUT)) + ORIGINATE_ERROR("Failed to get events"); + + return true; +} + +bool Dispatcher::createRequest(TrackedUniqueObj &request, + Argus::CaptureIntent captureIntent, Argus::CaptureSession *session) +{ + if (!session) + { + // use the internal session + PROPAGATE_ERROR(createSession()); + session = m_captureSession.get(); + } + + Argus::ICaptureSession *iCaptureSession = + Argus::interface_cast(session); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to get ICaptureSession interface"); + + // Create request + Argus::UniqueObj newRequest = + Argus::UniqueObj(iCaptureSession->createRequest(captureIntent)); + if (!newRequest) + ORIGINATE_ERROR("Failed to create request"); + + // Setup request + Argus::IRequest *iRequest = Argus::interface_cast(newRequest); + if (!iRequest) + ORIGINATE_ERROR("Failed to get IRequest interface"); + + // get source settings interface + Argus::ISourceSettings *iSourceSettings = + Argus::interface_cast(iRequest->getSourceSettings()); + if (!iSourceSettings) + ORIGINATE_ERROR("Failed to get ISourceSettings interface"); + + // register the source settings observer + PROPAGATE_ERROR(registerObserver(iSourceSettings)); + + // get auto control settings interface + Argus::IAutoControlSettings *iAutoControlSettings = + Argus::interface_cast(iRequest->getAutoControlSettings()); + if (!iAutoControlSettings) + ORIGINATE_ERROR("Failed to get IAutoControlSettings interface"); + + // register the auto control settings observer + PROPAGATE_ERROR(registerObserver(iAutoControlSettings)); + + // register denoise settings interface + Argus::IDenoiseSettings *iDenoiseSettings = + Argus::interface_cast(newRequest); + if (!iDenoiseSettings) + ORIGINATE_ERROR("Failed to get IDenoiseSettings interface"); + PROPAGATE_ERROR(registerObserver(iDenoiseSettings)); + + // register edge enhance settings interface + Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings = + Argus::interface_cast(newRequest); + if (!iEdgeEnhanceSettings) + ORIGINATE_ERROR("Failed to get IEdgeEnhanceSettings interface"); + PROPAGATE_ERROR(registerObserver(iEdgeEnhanceSettings)); + + if (supportsExtension(Argus::EXT_DE_FOG)) + { + // get DeFog settings interface + Argus::Ext::IDeFogSettings *iDeFogSettings = + Argus::interface_cast(newRequest); + if (iDeFogSettings) + { + // register the DeFog settings observer + PROPAGATE_ERROR(registerObserver(iDeFogSettings)); + } + } + + PROPAGATE_ERROR(request.reset(newRequest.release(), this)); + + return true; +} + +bool Dispatcher::track(Argus::Request *request) +{ + return true; +} + +bool Dispatcher::untrack(Argus::Request *request) +{ + Argus::IRequest *iRequest = Argus::interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to get IRequest interface"); + + // get source settings interface + Argus::ISourceSettings *iSourceSettings = + Argus::interface_cast(iRequest->getSourceSettings()); + if (!iSourceSettings) + ORIGINATE_ERROR("Failed to get ISourceSettings interface"); + + // unregister the source settings observer + PROPAGATE_ERROR(unregisterObserver(iSourceSettings)); + + // get auto control settings interface + Argus::IAutoControlSettings *iAutoControlSettings = + Argus::interface_cast(iRequest->getAutoControlSettings()); + if (!iAutoControlSettings) + ORIGINATE_ERROR("Failed to get IAutoControlSettings interface"); + + // unregister the auto control settings observer + PROPAGATE_ERROR(unregisterObserver(iAutoControlSettings)); + + // unregister denoise settings interface + Argus::IDenoiseSettings *iDenoiseSettings = + Argus::interface_cast(request); + if (!iDenoiseSettings) + ORIGINATE_ERROR("Failed to get IDenoiseSettings interface"); + PROPAGATE_ERROR(unregisterObserver(iDenoiseSettings)); + + // unregister edge enhance settings interface + Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings = + Argus::interface_cast(request); + if (!iEdgeEnhanceSettings) + ORIGINATE_ERROR("Failed to get IEdgeEnhanceSettings interface"); + PROPAGATE_ERROR(unregisterObserver(iEdgeEnhanceSettings)); + + if (supportsExtension(Argus::EXT_DE_FOG)) + { + // get DeFog settings interface + Argus::Ext::IDeFogSettings *iDeFogSettings = + Argus::interface_cast(request); + if (iDeFogSettings) + { + // unregister the DeFog settings observer + PROPAGATE_ERROR(unregisterObserver(iDeFogSettings)); + } + } + + return true; +} + +bool Dispatcher::createEventQueue(const std::vector &eventTypes, + Argus::UniqueObj& eventQueue, Argus::CaptureSession *session) +{ + if (!session) + { + // use the internal session + PROPAGATE_ERROR(createSession()); + session = m_captureSession.get(); + } + + Argus::IEventProvider *iEventProvider = + Argus::interface_cast(session); + if (!iEventProvider) + ORIGINATE_ERROR("Failed to get IEventProvider interface"); + + Argus::EventQueue *newEventQueue = iEventProvider->createEventQueue(eventTypes); + if (!newEventQueue) + ORIGINATE_ERROR("Failed to create eventQueue"); + + eventQueue.reset(newEventQueue); + + return true; +} + +bool Dispatcher::capture(Argus::Request *request, Argus::CaptureSession *session) +{ + if (!session) + { + // use the internal session + PROPAGATE_ERROR(createSession()); + session = m_captureSession.get(); + } + + Argus::ICaptureSession *iCaptureSession = + Argus::interface_cast(session); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to get ICaptureSession interface"); + + if (iCaptureSession->capture(request, Argus::TIMEOUT_INFINITE) == 0) + ORIGINATE_ERROR("Failed to submit the still capture request"); + + return true; +} + +bool Dispatcher::startRepeat(Argus::Request *request, Argus::CaptureSession *session) +{ + if (!session) + { + // use the internal session + PROPAGATE_ERROR(createSession()); + session = m_captureSession.get(); + } + + Argus::ICaptureSession *iCaptureSession = + Argus::interface_cast(session); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to get ICaptureSession interface"); + + if (iCaptureSession->repeat(request) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to submit repeating capture request"); + + // add the request to the list of active requests for the session + bool found = false; + for (ActiveSessionList::iterator it = m_activeSessions.begin(); it != m_activeSessions.end(); + ++it) + { + if (it->m_session == session) + { + it->m_requests.push_back(request); + found = true; + break; + } + } + if (!found) + ORIGINATE_ERROR("Did not find the session in the list of active sessions"); + + return true; +} + +bool Dispatcher::startRepeatBurst(const std::vector& requestList, + Argus::CaptureSession *session) +{ + if (!session) + { + // use the internal session + PROPAGATE_ERROR(createSession()); + session = m_captureSession.get(); + } + + Argus::ICaptureSession *iCaptureSession = + Argus::interface_cast(session); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to get ICaptureSession interface"); + + if (iCaptureSession->repeatBurst(requestList) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to submit repeating burst request"); + + // add the requests to the list of active requests for the session + bool found = false; + for (ActiveSessionList::iterator it = m_activeSessions.begin(); it != m_activeSessions.end(); + ++it) + { + if (it->m_session == session) + { + it->m_requests.insert(it->m_requests.end(), requestList.begin(), requestList.end()); + found = true; + break; + } + } + if (!found) + ORIGINATE_ERROR("Did not find the session in the list of active sessions"); + + return true; +} + +bool Dispatcher::stopRepeat(Argus::CaptureSession *session) +{ + if (!session) + { + // use the internal session + PROPAGATE_ERROR(createSession()); + session = m_captureSession.get(); + } + + Argus::ICaptureSession *iCaptureSession = + Argus::interface_cast(session); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to get ICaptureSession interface"); + + iCaptureSession->stopRepeat(); + + // clear the list of active requests for the session + bool found = false; + for (ActiveSessionList::iterator it = m_activeSessions.begin(); it != m_activeSessions.end(); + ++it) + { + if (it->m_session == session) + { + it->m_requests.clear(); + found = true; + break; + } + } + if (!found) + ORIGINATE_ERROR("Did not find the session in the list of active sessions"); + + return true; +} + +bool Dispatcher::restartActiveRequests() +{ + for (ActiveSessionList::iterator it = m_activeSessions.begin(); it != m_activeSessions.end(); + ++it) + { + if (!it->m_requests.empty()) + { + Argus::ICaptureSession *iCaptureSession = + Argus::interface_cast(it->m_session); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to get ICaptureSession interface"); + + iCaptureSession->stopRepeat(); + + if (iCaptureSession->repeatBurst(it->m_requests) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to submit repeating burst request"); + } + } + + return true; +} + +uint32_t Dispatcher::maxBurstRequests(Argus::CaptureSession *session) +{ + if (!session) + { + // use the internal session + PROPAGATE_ERROR(createSession()); + session = m_captureSession.get(); + } + + Argus::ICaptureSession *iCaptureSession = + Argus::interface_cast(session); + if (!iCaptureSession) + { + REPORT_ERROR("Failed to get ICaptureSession interface"); + return 0; + } + + return iCaptureSession->maxBurstRequests(); +} + +bool Dispatcher::waitForIdle(Argus::CaptureSession *session) +{ + if (!session) + { + // use the internal session + PROPAGATE_ERROR(createSession()); + session = m_captureSession.get(); + } + + Argus::ICaptureSession *iCaptureSession = + Argus::interface_cast(session); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to get ICaptureSession interface"); + + if (iCaptureSession->waitForIdle() != Argus::STATUS_OK) + ORIGINATE_ERROR("Waiting for idle failed"); + + return true; +} + +bool Dispatcher::getOutputSize(Argus::Size2D *size) const +{ + // if width or height is 0 take the sensor size + if ((m_outputSize.get().width() == 0) || (m_outputSize.get().height() == 0)) + { + // the device needs to be open to get sensor modes + assert(m_deviceOpen); + + Argus::ISensorMode *sensorMode = + Argus::interface_cast(m_sensorModes[m_sensorModeIndex.get()]); + if (!sensorMode) + ORIGINATE_ERROR("Failed to get ISensorMode interface"); + *size = sensorMode->getResolution(); + } + else + { + *size = m_outputSize; + } + + return true; +} + +bool Dispatcher::createOutputStream(Argus::Request *request, bool enableMetadata, + Argus::UniqueObj &stream, Argus::CaptureSession *session) +{ + if (!session) + { + // use the internal session + PROPAGATE_ERROR(createSession()); + session = m_captureSession.get(); + } + + Argus::IRequest *iRequest = Argus::interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to get IRequest interface"); + + Argus::Size2D outputSize; + PROPAGATE_ERROR(getOutputSize(&outputSize)); + + Argus::ICaptureSession *iCaptureSession = + Argus::interface_cast(session); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to get ICaptureSession interface"); + + Argus::UniqueObj outputStreamSettings( + iCaptureSession->createOutputStreamSettings(Argus::STREAM_TYPE_EGL)); + Argus::IEGLOutputStreamSettings* iEGLOutputStreamSettings = + Argus::interface_cast(outputStreamSettings); + if (!iEGLOutputStreamSettings) + ORIGINATE_ERROR("Failed to get IEGLOutputStreamSettings interface"); + + iEGLOutputStreamSettings->setPixelFormat(m_captureYuvFormat.get()); + iEGLOutputStreamSettings->setResolution(outputSize); + iEGLOutputStreamSettings->setEGLDisplay(Composer::getInstance().getEGLDisplay()); + iEGLOutputStreamSettings->setMetadataEnable(enableMetadata); + + Argus::UniqueObj outputStream( + iCaptureSession->createOutputStream(outputStreamSettings.get())); + if (!outputStream) + ORIGINATE_ERROR("Failed to create OutputStream"); + + stream.reset(outputStream.release()); + + return true; +} + +bool Dispatcher::enableOutputStream(Argus::Request *request, Argus::OutputStream *stream) +{ + Argus::IRequest *iRequest = Argus::interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to get IRequest interface"); + + // Enable the stream + if (iRequest->enableOutputStream(stream) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to enable the output stream"); + + return true; +} + +bool Dispatcher::disableOutputStream(Argus::Request *request, Argus::OutputStream *stream) +{ + Argus::IRequest *iRequest = Argus::interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to get IRequest interface"); + + // Disable the stream + if (iRequest->disableOutputStream(stream) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to disable the output stream"); + + return true; +} + +bool Dispatcher::registerObserver(Argus::IDenoiseSettings *iDenoiseSettings) +{ + UniquePointer denoiseSettings; + + denoiseSettings.reset(new DenoiseSettingsObserver(iDenoiseSettings)); + if (!denoiseSettings) + ORIGINATE_ERROR("Out of memory"); + + m_observers.push_front(denoiseSettings.release()); + return true; +} + +bool Dispatcher::registerObserver(Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings) +{ + UniquePointer edgeEnhanceSettings; + + edgeEnhanceSettings.reset(new EdgeEnhanceSettingsObserver(iEdgeEnhanceSettings)); + if (!edgeEnhanceSettings) + ORIGINATE_ERROR("Out of memory"); + + m_observers.push_front(edgeEnhanceSettings.release()); + return true; +} + +bool Dispatcher::registerObserver(Argus::ISourceSettings *iSourceSettings) +{ + UniquePointer sourceSettings; + + sourceSettings.reset(new SourceSettingsObserver(iSourceSettings)); + if (!sourceSettings) + ORIGINATE_ERROR("Out of memory"); + + m_observers.push_front(sourceSettings.release()); + return true; +} + +bool Dispatcher::registerObserver(Argus::IAutoControlSettings *iAutoControlSettings) +{ + UniquePointer autoControlSettings; + + autoControlSettings.reset(new AutoControlSettingsObserver(iAutoControlSettings)); + if (!autoControlSettings) + ORIGINATE_ERROR("Out of memory"); + + m_observers.push_front(autoControlSettings.release()); + return true; +} + +bool Dispatcher::registerObserver(Argus::Ext::IDeFogSettings *iDeFogSettings) +{ + UniquePointer deFogSettings; + + deFogSettings.reset(new DeFogSettingsObserver(iDeFogSettings)); + if (!deFogSettings) + ORIGINATE_ERROR("Out of memory"); + + m_observers.push_front(deFogSettings.release()); + return true; +} + +bool Dispatcher::unregisterObserver(Argus::Interface *interface) +{ + for (std::list::iterator it = m_observers.begin(); + it != m_observers.end(); ++it) + { + if ((*it)->isInterface(interface)) + { + delete *it; + m_observers.erase(it); + return true; + } + } + + ORIGINATE_ERROR("Observer not found"); +} + +bool Dispatcher::message(const char *msg, ...) +{ + if (m_verbose) + { + va_list list; + + va_start(list, msg); + + if (vprintf(msg, list) < 0) + { + va_end(list); + ORIGINATE_ERROR("Failed to print message"); + } + + va_end(list); + } + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/modules/Dispatcher.h b/jetson_multimedia_api/argus/apps/camera/modules/Dispatcher.h new file mode 100644 index 0000000..48511cd --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/Dispatcher.h @@ -0,0 +1,428 @@ +/* + * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef DISPATCHER_H +#define DISPATCHER_H + +#include +#include +#include + +#include + +#include "Value.h" +#include "Error.h" +#include "VideoPipeline.h" +#include "IObserver.h" +#include "Util.h" +#include "TrackedUniqueObject.h" +#include "UniquePointer.h" + +namespace Argus { namespace Ext { class IDeFogSettings; } } + +namespace ArgusSamples +{ + +class IObserverForInterface; + +/** + * The dispatcher is called by clients like the command line interface. + * It provides functions to set properties like the camera device index or the sensor mode. It + * also implements services to open devices, sessions and create requests. + * It also maintains an internal capture session which is used when only a single session is + * required. + */ +class Dispatcher + : public IObserver + , public Tracker + , public Tracker +{ +public: + /** + * Get the dispatcher instance. + */ + static Dispatcher &getInstance(); + + /** + * Shutdown, free all resources + */ + bool shutdown(); + + /** + * Returns whether or not an extension is supported. + */ + bool supportsExtension(const Argus::ExtensionName& extension) const; + + /** + * Get an information string + */ + bool getInfo(std::string &info) const; + + /** + * Get the sensor mode for a given index + * + * @param sensorModeIndex [in] + * @param sensorMode [out] + */ + bool getSensorMode(uint32_t sensorModeIndex, Argus::SensorMode **sensorMode) const; + + /** + * Returns the range of focuser positions of the current device. + * The units are focuser steps. + */ + Argus::Range getDeviceFocusPositionRange() const; + + /** + * Returns the range of aperture positions of the current device. + * The units are aperture positions. + */ + Argus::Range getDeviceAperturePositionRange() const; + + /** + * Returns the range of aperture motor positions per second of the current device. + * The units are aperture motor steps/second. + */ + Argus::Range getDeviceApertureMotorSpeedRange() const; + + /** + * Get the output size + */ + bool getOutputSize(Argus::Size2D *size) const; + + /** + * Get the amount of available camera devices + */ + uint32_t getDeviceCount() const; + + /** + * Create a capture session using the device index + */ + bool createSession(TrackedUniqueObj &session, uint32_t deviceIndex); + + /** + * Wait for events from the specific session. + * + * @param eventQueue [in] event queue to transfer events to + * @param timeout [in] maximum time (in nanoseconds) to wait for new events. + * @param session [in] capture session (optional, if NULL the internal session is used) + */ + bool waitForEvents(Argus::EventQueue *eventQueue, TimeValue timeout = TimeValue::infinite(), + Argus::CaptureSession *session = NULL); + + /** + * Dump runtime information for a session. + */ + bool dumpSessionInfo() const; + + /** + * Create a request for a session + * + * @param request [out] created request + * @param captureIntent [in] capture intent + * @param session [in] capture session (optional, if NULL the internal session is used) + */ + bool createRequest(TrackedUniqueObj &request, + Argus::CaptureIntent captureIntent, Argus::CaptureSession *session = NULL); + + /** + * create a event queue + * + * @param eventTypes [in] + * @param eventQueue [out] created event queue + * @param session [in] capture session (optional, if NULL the internal session is used) + */ + bool createEventQueue(const std::vector &eventTypes, + Argus::UniqueObj &eventQueue, Argus::CaptureSession *session = NULL); + + + /** + * Submits a single capture request for a session + * + * @param request [in] capture request + * @param session [in] capture session (optional, if NULL the internal session is used) + */ + bool capture(Argus::Request *request, Argus::CaptureSession *session = NULL); + + /** + * Start a repeating request for a session + * + * @param request [in] request + * @param session [in] capture session (optional, if NULL the internal session is used) + */ + bool startRepeat(Argus::Request *request, Argus::CaptureSession *session = NULL); + + /** + * Start a repeating burst request for a session + * + * @param requestList [in] burst request + * @param session [in] capture session (optional, if NULL the internal session is used) + */ + bool startRepeatBurst(const std::vector& requestList, + Argus::CaptureSession *session = NULL); + + /** + * Clears the repeating request for a session + * + * @param session [in] capture session (optional, if NULL the internal session is used) + */ + bool stopRepeat(Argus::CaptureSession *session = NULL); + + /** + * Restart the currently active requests to pick up changed settings. + */ + bool restartActiveRequests(); + + /** + * Returns the maximum number of capture requests for a session that can be included in a + * burst capture. + * + * @param session [in] capture session (optional, if NULL the internal session is used) + */ + uint32_t maxBurstRequests(Argus::CaptureSession *session = NULL); + + /** + * Wait until all pending captures for a session are complete + * + * @param session [in] capture session (optional, if NULL the internal session is used) + */ + bool waitForIdle(Argus::CaptureSession *session = NULL); + + /** + * Create an output stream of an request of a session. + * + * @param request [in] request + * @param enableMetadata [in] whether or not to enable meatdata for the stream + * @param stream [out] the created Argus output stream + * @param session [in] capture session (optional, if NULL the internal session is used) + */ + bool createOutputStream(Argus::Request *request, bool enableMetadata, + Argus::UniqueObj &stream, + Argus::CaptureSession *session = NULL); + + /** + * Enable an output stream of an request + */ + bool enableOutputStream(Argus::Request *request, Argus::OutputStream *stream); + + /** + * Disable an output stream of an request + */ + bool disableOutputStream(Argus::Request *request, Argus::OutputStream *stream); + + /** + * Output a message if verbose mode is enabled + */ + bool message(const char *msg, ...); + +private: + // the current properties need to be initialized first, some Value<> members below use them + // for the validator + + // current device properties + std::vector m_sensorModes; ///< sensor modes + Value > m_deviceFocusPositionRange; ///< device focus position range + Value > m_deviceAperturePositionRange; ///< device aperture position range + std::vector m_deviceApertureFnums; ///< device aperture fnum available values + Value > m_deviceApertureMotorSpeedRange; ///< device aperture motor speed range + Value > m_deviceExposureCompensationRange; ///< exposure compensation range + Value > > + m_deviceIspDigitalGainRange; ///< device isp digital gain range + + // current sensor mode properties + Value > > + m_sensorExposureTimeRange; ///< exposure time range + Value > > + m_sensorAnalogGainRange; ///< analog gain range + Value > m_sensorFrameRateRange; ///< frame rate range + +public: + Value m_deviceIndex; ///< the device index + Value m_deviceOpen; ///< if set then the device is open + Value m_sensorModeValid; + + Value m_verbose; ///< if set verbose mode is enabled and messages are printed + Value m_kpi; ///< if set kpi mode is enabled and kpi number are printed + + // source settings + Value > m_exposureTimeRange; ///< exposure time range + Value > m_gainRange; ///< gain range + Value m_sensorModeIndex; ///< the sensor mode index + Value m_frameRate; ///< in frames per second + Value m_focusPosition; ///< focus position + Value m_aperturePosition; ///< aperture position + Value m_apertureFnum; ///< aperture position + Value m_apertureMotorSpeed; ///< aperture motor steps/second + Value m_captureYuvFormat; ///< NV12 vs. P016 YUV color depth + + // denoise settings + Value m_denoiseMode; ///< denoise mode + Value m_denoiseStrength; ///< denoise strength + + // edge enhance settings + Value m_edgeEnhanceMode; ///< edge enhancement mode + Value m_edgeEnhanceStrength; ///< edge enhancement strength + + // auto control settings + Value m_aeAntibandingMode; ///< auto exposure antibanding mode + Value m_aeLock; ///< auto exposure lock + Value m_awbLock; ///< auto white balance lock + Value m_awbMode; ///< auto white balance mode + Value m_exposureCompensation;///< exposure compensation + Value > m_ispDigitalGainRange;///< ISP digital Gain Range + Value > m_acRegionHorizontal; ///< auto control region horizontal + Value > m_acRegionVertical; ///< auto control region vertical + + // still settings + Value m_stillFileType; ///< the still image file format + + // video settings + Value m_videoFormat; ///< the video format + Value m_videoFileType; ///< the video file type + Value m_videoBitRate; ///< the video bit rate + + // output settings + Value > m_outputSize; ///< output size + Value m_outputPath; ///< output path + + // DeFog extension + Value m_deFogEnable; ///< enable + Value m_deFogAmount; ///< amount of fog to be removed. Range 0.0 - 1.0 (none - all) + Value m_deFogQuality; ///< quality of the effect. Range 0.0 - 1.0 (low - high) + +private: + Dispatcher(); + ~Dispatcher(); + + // this is a singleton, hide copy constructor etc. + Dispatcher(const Dispatcher&); + Dispatcher& operator=(const Dispatcher&); + + /** + * Initialize the dispatcher + */ + bool initialize(); + + /** + * Create the internal session + */ + bool createSession(); + + /** + * Close the internal session + */ + bool closeSession(); + + /** + * Start tracking a session + */ + bool track(Argus::CaptureSession *session); + + /** + * No longer track a session + */ + bool untrack(Argus::CaptureSession *session); + + /** + * Start tracking a request + */ + bool track(Argus::Request *request); + + /** + * No longer track a request + */ + bool untrack(Argus::Request *request); + + /** + * Register an IDenoiseSettings observer + */ + bool registerObserver(Argus::IDenoiseSettings *iDenoiseSettings); + + /** + * Register an IEdgeEnhanceSettings observer + */ + bool registerObserver(Argus::IEdgeEnhanceSettings *iEdgeEnhanceSettings); + + /** + * Register an ISourceSettings observer + */ + bool registerObserver(Argus::ISourceSettings *iSourceSettings); + + /** + * Register an IAutoControlSettings observer + */ + bool registerObserver(Argus::IAutoControlSettings *iAutoControlSettings); + + /** + * Register an IDeFogSettings observer + */ + bool registerObserver(Argus::Ext::IDeFogSettings *iDeFogSettings); + + /** + * Unregister an interface which had been registered as an observer. + */ + bool unregisterObserver(Argus::Interface *interface); + + /** + * Callback when the device index changes. + */ + bool onDeviceIndexChanged(const Observed &source); + + /** + * Callback when the sensor mode index changes. + */ + bool onSensorModeIndexChanged(const Observed &source); + + bool m_initialized; ///< if set the dispatcher is initialized + + std::list m_observers; + + Argus::UniqueObj m_cameraProvider; ///< camera provider + Argus::ICameraProvider *m_iCameraProvider; ///< camera provider interface + + std::vector m_cameraDevices; ///< a list of available devices + + TrackedUniqueObj m_captureSession; ///< internal capture session + + class ActiveSession + { + public: + ActiveSession(Argus::CaptureSession *session) + : m_session(session) + { + } + + Argus::CaptureSession *m_session; + std::vector m_requests; + }; + typedef std::list ActiveSessionList; + ActiveSessionList m_activeSessions; +}; + +}; // namespace ArgusSamples + +#endif // DISPATCHER_H diff --git a/jetson_multimedia_api/argus/apps/camera/modules/EventThread.cpp b/jetson_multimedia_api/argus/apps/camera/modules/EventThread.cpp new file mode 100644 index 0000000..e1ac45d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/EventThread.cpp @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "EventThread.h" +#include "Dispatcher.h" +#include "Util.h" +#include "PerfTracker.h" + +#include + +namespace ArgusSamples { + +EventThread::EventThread(Argus::CaptureSession *session, + SessionPerfTracker *sessionPerfTracker) + : m_session(session) + , m_sessionPerfTracker(sessionPerfTracker) +{ +} + +EventThread::~EventThread() +{ +} + +bool EventThread::threadInitialize() +{ + std::vector eventTypes; + eventTypes.push_back(Argus::EVENT_TYPE_CAPTURE_COMPLETE); + + PROPAGATE_ERROR(Dispatcher::getInstance().createEventQueue(eventTypes, m_eventQueue, + m_session)); + + return true; +} + +bool EventThread::threadExecute() +{ + Dispatcher &dispatcher = Dispatcher::getInstance(); + + // wait for events (use a time out to allow the thread to be shutdown even if there are no + // new events) + PROPAGATE_ERROR(dispatcher.waitForEvents(m_eventQueue.get(), TimeValue::fromMSec(100), + m_session)); + + Argus::IEventQueue *iEventQueue = + Argus::interface_cast(m_eventQueue.get()); + if (!iEventQueue) + ORIGINATE_ERROR("Failed to get iEventQueue"); + + for (uint32_t i = 0; i < iEventQueue->getSize(); i++) + { + const Argus::Event *event = iEventQueue->getEvent(i); + const Argus::IEvent *iEvent = Argus::interface_cast(event); + if (!iEvent) + ORIGINATE_ERROR("Failed to get IEvent interface"); + + if (iEvent->getEventType() == Argus::EVENT_TYPE_CAPTURE_COMPLETE) + { + PROPAGATE_ERROR(m_sessionPerfTracker->onEvent(SESSION_EVENT_REQUEST_RECEIVED)); + + const Argus::IEventCaptureComplete *iEventCaptureComplete + = Argus::interface_cast(event); + const Argus::CaptureMetadata *metaData = iEventCaptureComplete->getMetadata(); + if (metaData) + { + const Argus::ICaptureMetadata *iCaptureMeta = + Argus::interface_cast(metaData); + if (iCaptureMeta) + { + /// @todo IEvent documentation says the time value is in nano seconds, but + /// actually it's in micro seconds. + const TimeValue latency = + TimeValue::fromUSec(iEvent->getTime()) - + TimeValue::fromNSec(iCaptureMeta->getSensorTimestamp()); + PROPAGATE_ERROR(m_sessionPerfTracker->onEvent( + SESSION_EVENT_REQUEST_LATENCY, latency.toUSec())); + + const TimeValue sensorTime = + TimeValue::fromNSec(iCaptureMeta->getSensorTimestamp()); + PROPAGATE_ERROR(m_sessionPerfTracker->onEvent( + SESSION_EVENT_FRAME_PERIOD, sensorTime.toUSec())); + + // AF + std::vector< Argus::AcRegion > regions; + std::vector sharpnessScore; + if (iCaptureMeta->getAfRegions(®ions) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to get AF regions"); + + if (iCaptureMeta->getSharpnessScore(&sharpnessScore) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to get sharpness score"); + + PROPAGATE_ERROR(dispatcher.message("Focus control info: focuser position %d ", + iCaptureMeta->getFocuserPosition())); + for (uint32_t j = 0; j < regions.size(); j++) + { + PROPAGATE_ERROR(dispatcher.message(" region %d %d %d %d, score %f ", + regions[j].left(), regions[j].top(), regions[j].right(), + regions[j].bottom(), sharpnessScore[j])); + } + PROPAGATE_ERROR(dispatcher.message("\n")); + + // bayerHistogram + Argus::Rectangle region; + region = iCaptureMeta->getBayerHistogramRegion(); + PROPAGATE_ERROR(dispatcher.message("BayerHistogram region %d %d %d %d, \n", + region.left(), region.top(), region.right(), region.bottom())); + + // Flicker + Argus::AeFlickerState state = iCaptureMeta->getFlickerState(); + PROPAGATE_ERROR(dispatcher.message("Flicker state %s \n", state.getName())); + + PROPAGATE_ERROR(dispatcher.message("aperture info: aperture position %d \n", + iCaptureMeta->getAperturePosition())); + } + + const Argus::Ext::IInternalFrameCount *iInternalFrameCount = + Argus::interface_cast(metaData); + if (iInternalFrameCount) + { + const uint64_t currentFrameCount = iInternalFrameCount->getInternalFrameCount(); + PROPAGATE_ERROR(m_sessionPerfTracker->onEvent(SESSION_EVENT_FRAME_COUNT, + currentFrameCount)); + } + } + } + } + + return true; +} + +bool EventThread::threadShutdown() +{ + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/modules/EventThread.h b/jetson_multimedia_api/argus/apps/camera/modules/EventThread.h new file mode 100644 index 0000000..a2128a5 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/EventThread.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef EVENTTHREAD_H +#define EVENTTHREAD_H + +#include "Thread.h" + +#include + +namespace ArgusSamples +{ + +class SessionPerfTracker; + +/** + * The EventThread is querying events from the session. It does some analysis and then pass the + * info to a sessionPerfTracker. + */ +class EventThread : public Thread +{ +public: + explicit EventThread(Argus::CaptureSession *session, + SessionPerfTracker *sessionPerfTracker); + virtual ~EventThread(); + +protected: + virtual bool threadInitialize(); + virtual bool threadExecute(); + virtual bool threadShutdown(); + +private: + Argus::CaptureSession *m_session; + Argus::UniqueObj m_eventQueue; + SessionPerfTracker *m_sessionPerfTracker; +}; + +}; // namespace ArgusSamples + +#endif // EVENTTHREAD_H diff --git a/jetson_multimedia_api/argus/apps/camera/modules/ITask.h b/jetson_multimedia_api/argus/apps/camera/modules/ITask.h new file mode 100644 index 0000000..314d1cc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/ITask.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ITASK_H +#define ITASK_H + +namespace ArgusSamples +{ + +/** + * Base class for tasks. + * Tasks provide functionality like capturing of still images or video recording. + * + */ +class ITask +{ +public: + ITask() { }; + virtual ~ITask() { }; + + /** + * Initialize + */ + virtual bool initialize() = 0; + /** + * Shutdown + */ + virtual bool shutdown() = 0; + + /** + * Start + */ + virtual bool start() = 0; + /** + * Stop + */ + virtual bool stop() = 0; +}; + +}; // namespace ArgusSamples + +#endif // ITASK_H diff --git a/jetson_multimedia_api/argus/apps/camera/modules/PerfTracker.cpp b/jetson_multimedia_api/argus/apps/camera/modules/PerfTracker.cpp new file mode 100644 index 0000000..1a884e7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/PerfTracker.cpp @@ -0,0 +1,433 @@ +/* + * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "PerfTracker.h" + +#include +#define __STDC_FORMAT_MACROS +#include + +#include + +#include "Dispatcher.h" +#include "EventThread.h" +#include "InitOnce.h" + +namespace ArgusSamples +{ + +PerfTracker::PerfTracker() + : m_sessionId(0) +{ +} + +PerfTracker::~PerfTracker() +{ +} + +bool PerfTracker::initialize() +{ + m_sessionId = 0; + m_displayCount = 0; + return true; +} + +PerfTracker &PerfTracker::getInstance() +{ + static InitOnce initOnce; + static PerfTracker instance; + + if (initOnce.begin()) + { + if (instance.initialize()) + { + initOnce.complete(); + } + else + { + initOnce.failed(); + REPORT_ERROR("Initalization failed"); + } + } + + return instance; +} + +bool PerfTracker::onEvent(GlobalEvent event) +{ + switch (event) + { + case GLOBAL_EVENT_APP_START: + m_appStartTime = getCurrentTime(); + break; + case GLOBAL_EVENT_APP_INITIALIZED: + m_appInitializedTime = getCurrentTime(); + break; + case GLOBAL_EVENT_DISPLAY: + if (!Dispatcher::getInstance().m_kpi) + return true; + + if (m_firstDisplayTime == TimeValue()) + { + // start measurement + m_firstDisplayTime = getCurrentTime(); + } + else + { + const TimeValue curTime = getCurrentTime(); + + m_displayCount++; + + // print every second + if (curTime - m_firstDisplayTime > TimeValue::fromSec(1.f)) + { + const float frameRate = static_cast(m_displayCount) * + (curTime - m_firstDisplayTime).toCyclesPerSec(); + printf("PerfTracker: display frame rate %.2f frames per second\n", frameRate); + + // restart measurement + m_firstDisplayTime = getCurrentTime(); + m_displayCount = 0; + } + } + break; + default: + ORIGINATE_ERROR("Unhandled global event"); + break; + } + + return true; +} + +SessionPerfTracker::SessionPerfTracker() + : m_id(PerfTracker::getInstance().getNewSessionID()) + , m_session(NULL) + , m_firstRequestReceivedTime(TimeValue::infinite()) + , m_numberframesReceived(0) + , m_lastFrameCount(0) + , m_totalFrameDrop(0) + , m_minLatency(std::numeric_limits::max()) + , m_maxLatency(0) + , m_sumLatency(0) + , m_countLatency(0) + , m_previousSensorTime(0) + , m_minFramePeriod(std::numeric_limits::max()) + , m_maxFramePeriod(0) + , m_sumFramePeriod(0) + , m_countFramePeriod(-1) + , m_statsMinLatency(std::numeric_limits::max()) + , m_statsMaxLatency(0) + , m_statsSumLatency(0) + , m_statsCountLatency(0) + , m_statsMinFramePeriod(std::numeric_limits::max()) + , m_statsMaxFramePeriod(0) + , m_statsSumFramePeriod(0) + , m_statsCountFramePeriod(0) + , m_statsFrameDropCount(0) + , m_statsOutOfOrderCount(0) + , m_previousKpi(false) +{ +} + +SessionPerfTracker::~SessionPerfTracker() +{ + PROPAGATE_ERROR_CONTINUE(shutdown()); +} + +bool SessionPerfTracker::shutdown() +{ + if (m_eventThread) + { + PROPAGATE_ERROR_CONTINUE(m_eventThread->shutdown()); + m_eventThread.reset(); + } + + return true; +} + +bool SessionPerfTracker::setSession(Argus::CaptureSession *session) +{ + m_session = session; + return true; +} + +bool SessionPerfTracker::onEvent(SessionEvent event, uint64_t value) +{ + if (!Dispatcher::getInstance().m_kpi && !m_previousKpi) + return true; + + // switch kpi ON to OFF case + if (!Dispatcher::getInstance().m_kpi && m_previousKpi) + { + // take buffered info into account + m_statsMinLatency = (m_minLatency < m_statsMinLatency) ? + m_minLatency : m_statsMinLatency; + m_statsMaxLatency = (m_maxLatency < m_statsMaxLatency) ? + m_statsMaxLatency : m_maxLatency; + m_statsSumLatency += m_sumLatency; + m_statsCountLatency += m_countLatency; + m_statsMinFramePeriod = (m_minFramePeriod < m_statsMinFramePeriod) ? + m_minFramePeriod : m_statsMinFramePeriod; + m_statsMaxFramePeriod = (m_maxFramePeriod < m_statsMaxFramePeriod) ? + m_statsMaxFramePeriod : m_maxFramePeriod; + m_statsSumFramePeriod += m_sumFramePeriod; + m_statsCountFramePeriod += m_countFramePeriod; + + // print stats during the enabling kpi period + printf("===== PerfTracker %d Stats from %" PRIu64 " frames =====\n", + m_id, m_numberframesReceived); + printf("LATENCY : avg %.2f min %.2f max %.2f ms\n", + m_statsSumLatency / m_statsCountLatency / 1000.f, + m_statsMinLatency / 1000.f, m_statsMaxLatency / 1000.f); + printf("FRAMEPERIOD : avg %.2f min %.2f max %.2f ms\n", + m_statsSumFramePeriod / (m_statsCountFramePeriod + 1) / 1000.f, + m_statsMinFramePeriod / 1000.f, m_statsMaxFramePeriod / 1000.f); + printf("FRAMEDROP : %d frames\n", m_statsFrameDropCount); + printf("OUT OF ORDER: %d frames\n", m_statsOutOfOrderCount); + printf("===============================================\n"); + + // clean up stats + m_numberframesReceived = 0; + m_lastFrameCount = 0; + m_minLatency = std::numeric_limits::max(); + m_maxLatency = 0; + m_sumLatency = 0; + m_countLatency = 0; + m_minFramePeriod = std::numeric_limits::max(); + m_maxFramePeriod = 0; + m_sumFramePeriod= 0; + m_countFramePeriod = -1; + m_statsMinLatency = std::numeric_limits::max(); + m_statsMaxLatency = 0; + m_statsSumLatency = 0; + m_statsCountLatency = 0; + m_statsMinFramePeriod = std::numeric_limits::max(); + m_statsMaxFramePeriod = 0; + m_statsSumFramePeriod = 0; + m_statsCountFramePeriod = -1; + m_statsFrameDropCount = 0; + m_statsOutOfOrderCount = 0; + + m_previousKpi = Dispatcher::getInstance().m_kpi; + return true; + } + + m_previousKpi = Dispatcher::getInstance().m_kpi; + switch (event) + { + case SESSION_EVENT_TASK_START: + m_taskStartTime = getCurrentTime(); + printf("PerfTracker: app initial %" PRIu64 " ms\n", + (PerfTracker::getInstance().appInitializedTime() - + PerfTracker::getInstance().appStartTime()).toMSec()); + printf("PerfTracker %d: app intialized to task start %" PRIu64 " ms\n", m_id, + (m_taskStartTime - PerfTracker::getInstance().appInitializedTime()).toMSec()); + break; + case SESSION_EVENT_ISSUE_CAPTURE: + // captures are about to start, create the event thread which collects information on the + // captures received + if (!m_eventThread) + { + m_eventThread.reset(new EventThread(m_session, this)); + if (!m_eventThread) + ORIGINATE_ERROR("Failed to allocate EventThread"); + + PROPAGATE_ERROR(m_eventThread->initialize()); + PROPAGATE_ERROR(m_eventThread->waitRunning()); + } + + m_issueCaptureTime = getCurrentTime(); + printf("PerfTracker %d: task start to issue capture %" PRIu64 " ms\n", m_id, + (m_issueCaptureTime - m_taskStartTime).toMSec()); + break; + case SESSION_EVENT_REQUEST_RECEIVED: + m_requestReceivedTime = getCurrentTime(); + if (m_numberframesReceived == 0) + { + m_firstRequestReceivedTime = m_requestReceivedTime; + printf("PerfTracker %d: first request %" PRIu64 " ms\n", m_id, + (m_firstRequestReceivedTime - m_issueCaptureTime).toMSec()); + printf("PerfTracker %d: total launch time %" PRIu64 " ms\n", m_id, + (m_firstRequestReceivedTime - PerfTracker::getInstance().appStartTime()).toMSec()); + } + + m_numberframesReceived++; + // print only when receiving > 30 frames + if ((m_numberframesReceived % 30) == 2 && m_numberframesReceived >= 30) + { + const float frameRate = + static_cast(m_numberframesReceived - 1) * + (m_requestReceivedTime - m_firstRequestReceivedTime).toCyclesPerSec(); + printf("PerfTracker %d: frameRate %.2f frames per second at %" PRIu64 " Seconds\n", + m_id, + frameRate, + (m_requestReceivedTime - m_firstRequestReceivedTime).toSec()); + } + break; + case SESSION_EVENT_REQUEST_LATENCY: + m_minLatency = (m_minLatency < value) ? m_minLatency : value; + m_maxLatency = (m_maxLatency < value) ? value : m_maxLatency; + m_sumLatency += value; + m_countLatency += 1; + if ((m_numberframesReceived % 30) == 6) + { + const uint64_t latencyAverage = m_sumLatency / m_countLatency; + printf("PerfTracker %d: latency %.1f ms average, min %.1f max %.1f" \ + " from %" PRIu64 " frames\n", + m_id, latencyAverage / 1000.f, m_minLatency / 1000.f, + m_maxLatency / 1000.f, m_countLatency); + + // record all data in stats + m_statsMinLatency = (m_minLatency < m_statsMinLatency) ? + m_minLatency : m_statsMinLatency; + m_statsMaxLatency = (m_maxLatency < m_statsMaxLatency) ? + m_statsMaxLatency : m_maxLatency; + m_statsSumLatency += m_sumLatency; + m_statsCountLatency += m_countLatency; + + m_minLatency = std::numeric_limits::max(); + m_maxLatency = 0; + m_sumLatency = 0; + m_countLatency = 0; + } + break; + case SESSION_EVENT_FRAME_PERIOD: + { + // skip first run + if (m_countFramePeriod != -1) + { + // not record the old timestamp to m_previousSensorTime in this case + if (value < m_previousSensorTime) + { + printf("PerfTracker %d: warning: receive a frame out of order\n", m_id); + m_statsOutOfOrderCount += 1; + break; + } + const uint64_t framePeriod = value - m_previousSensorTime; + m_minFramePeriod = (m_minFramePeriod < framePeriod) ? + m_minFramePeriod : framePeriod; + m_maxFramePeriod = (m_maxFramePeriod < framePeriod) ? + framePeriod : m_maxFramePeriod; + m_sumFramePeriod += framePeriod; + m_countFramePeriod += 1; + if ((m_numberframesReceived % 30) == 6) + { + const uint64_t framePeriodAverage = m_sumFramePeriod / m_countFramePeriod; + printf("PerfTracker %d: frame period %.1f ms average, min %.1f" \ + " max %.1f from %" PRId64 " frames\n", + m_id, framePeriodAverage / 1000.f, m_minFramePeriod / 1000.f, + m_maxFramePeriod / 1000.f, m_countFramePeriod + 1); + + // record all data in stats + m_statsMinFramePeriod = (m_minFramePeriod < m_statsMinFramePeriod) ? + m_minFramePeriod : m_statsMinFramePeriod; + m_statsMaxFramePeriod = (m_maxFramePeriod < m_statsMaxFramePeriod) ? + m_statsMaxFramePeriod : m_maxFramePeriod; + m_statsSumFramePeriod += m_sumFramePeriod; + m_statsCountFramePeriod += m_countFramePeriod; + + m_minFramePeriod = std::numeric_limits::max(); + m_maxFramePeriod = 0; + m_sumFramePeriod= 0; + m_countFramePeriod = -1; + m_previousSensorTime = 0; + } + } + else + { + m_countFramePeriod += 1; + } + + m_previousSensorTime = value; + break; + } + case SESSION_EVENT_FRAME_COUNT: + { + const TimeValue currentTime = getCurrentTime(); + const uint64_t currentFrameCount = value; + int64_t currentFrameDrop = 0; + // start frame drop count from 2nd frame + if (m_lastFrameCount > 0) + { + // currentFrameDrop can be negative when metadata comes out of order + currentFrameDrop = currentFrameCount - m_lastFrameCount - 1; + m_totalFrameDrop += currentFrameDrop; + } + if (currentFrameDrop != 0) + { + printf("PerfTracker %d: framedrop current request %" PRId64 ", total %" PRId64 + ", Drop at %" PRIu64 " Seconds !\n", + m_id, currentFrameDrop, + m_totalFrameDrop, + (currentTime - m_firstRequestReceivedTime).toSec()); + m_statsFrameDropCount += currentFrameDrop; + } + else + { + if ((m_numberframesReceived % 30) == 4) + { + printf("PerfTracker %d: framedrop current request %" PRId64 ", total %" + PRId64 "\n", + m_id, currentFrameDrop, + m_totalFrameDrop); + } + } + + m_lastFrameCount = currentFrameCount; + break; + } + case SESSION_EVENT_CLOSE_REQUESTED: + m_closeRequestedTime = getCurrentTime(); + // captures are about to be stopped, destroy the event thread. + if (m_eventThread) + { + PROPAGATE_ERROR(m_eventThread->shutdown()); + m_eventThread.reset(); + } + break; + case SESSION_EVENT_FLUSH_DONE: + m_flushDoneTime = getCurrentTime(); + printf("PerfTracker %d: flush takes %" PRIu64 " ms\n", m_id, + (m_flushDoneTime - m_closeRequestedTime).toMSec()); + break; + case SESSION_EVENT_CLOSE_DONE: + m_closeDoneTime = getCurrentTime(); + printf("PerfTracker %d: device close takes %" PRIu64 " ms\n", m_id, + (m_closeDoneTime - m_flushDoneTime).toMSec()); + printf("PerfTracker %d: total close takes %" PRIu64 " ms\n", m_id, + (m_closeDoneTime - m_closeRequestedTime).toMSec()); + break; + default: + ORIGINATE_ERROR("Unhandled session event"); + break; + } + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/modules/PerfTracker.h b/jetson_multimedia_api/argus/apps/camera/modules/PerfTracker.h new file mode 100644 index 0000000..bf274e8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/PerfTracker.h @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef PERFTRACKER_H +#define PERFTRACKER_H + +#include + +#include "Util.h" // for TimeValue +#include "Ordered.h" +#include "UniquePointer.h" + +namespace Argus { class CaptureSession; } + +namespace ArgusSamples +{ + +class EventThread; + +/** + * Global events + */ +enum GlobalEvent +{ + GLOBAL_EVENT_APP_START, + GLOBAL_EVENT_APP_INITIALIZED, + GLOBAL_EVENT_DISPLAY +}; + +/** + * Used to track global performance events. + */ +class PerfTracker +{ +public: + /** + * Get the window instance. + */ + static PerfTracker &getInstance(); + + /** + * Trigger a global event. + * + * @param type [in] event type + */ + bool onEvent(GlobalEvent event); + + /** + * @returns the point in time when the app had been started + */ + const TimeValue& appStartTime() const + { + return m_appStartTime; + } + + /** + * @returns the point in time when app initialization finished + */ + const TimeValue& appInitializedTime() const + { + return m_appInitializedTime; + } + + /** + * @returns a new session Id + */ + uint32_t getNewSessionID() + { + return ++m_sessionId; + } + +private: + PerfTracker(); + ~PerfTracker(); + + // this is a singleton, hide copy constructor etc. + PerfTracker(const PerfTracker&); + PerfTracker& operator=(const PerfTracker&); + + bool initialize(); + + // global performance values + TimeValue m_appStartTime; + TimeValue m_appInitializedTime; + + TimeValue m_firstDisplayTime; //< time at which the first display event had been received + uint64_t m_displayCount; //< display events since first display time + + Ordered m_sessionId; +}; + +/** + * Session events + */ +enum SessionEvent +{ + SESSION_EVENT_TASK_START, + SESSION_EVENT_ISSUE_CAPTURE, + SESSION_EVENT_REQUEST_RECEIVED, + SESSION_EVENT_REQUEST_LATENCY, + SESSION_EVENT_FRAME_PERIOD, + SESSION_EVENT_FRAME_COUNT, + SESSION_EVENT_CLOSE_REQUESTED, + SESSION_EVENT_FLUSH_DONE, + SESSION_EVENT_CLOSE_DONE +}; + +/** + * Used to track session performance events. + */ +class SessionPerfTracker +{ +public: + SessionPerfTracker(); + ~SessionPerfTracker(); + + /** + * Shutdown the session performance tracker. + */ + bool shutdown(); + + /** + * Set the capture session to track. If not set the internal dispatcher session is tracked. + * + * @param session [in] capture session + */ + bool setSession(Argus::CaptureSession *session); + + /** + * Trigger a session event. + * + * @param type [in] event type + * @param type [in] event type + */ + bool onEvent(SessionEvent event, uint64_t value = 0); + +private: + uint32_t m_id; + + Argus::CaptureSession *m_session; + UniquePointer m_eventThread; + + TimeValue m_taskStartTime; + TimeValue m_issueCaptureTime; + TimeValue m_requestReceivedTime; + + TimeValue m_firstRequestReceivedTime; + uint64_t m_numberframesReceived; + + TimeValue m_closeRequestedTime; + TimeValue m_flushDoneTime; + TimeValue m_closeDoneTime; + + uint64_t m_lastFrameCount; + int64_t m_totalFrameDrop; + + uint64_t m_minLatency; + uint64_t m_maxLatency; + uint64_t m_sumLatency; + uint64_t m_countLatency; + + uint64_t m_previousSensorTime; + uint64_t m_minFramePeriod; + uint64_t m_maxFramePeriod; + uint64_t m_sumFramePeriod; + int64_t m_countFramePeriod; + + uint64_t m_statsMinLatency; + uint64_t m_statsMaxLatency; + uint64_t m_statsSumLatency; + uint64_t m_statsCountLatency; + uint64_t m_statsMinFramePeriod; + uint64_t m_statsMaxFramePeriod; + uint64_t m_statsSumFramePeriod; + uint64_t m_statsCountFramePeriod; + uint32_t m_statsFrameDropCount; + uint32_t m_statsOutOfOrderCount; + + bool m_previousKpi; +}; + + +}; // namespace ArgusSamples + +#endif //PERFTRACKER_H + diff --git a/jetson_multimedia_api/argus/apps/camera/modules/TrackedUniqueObject.h b/jetson_multimedia_api/argus/apps/camera/modules/TrackedUniqueObject.h new file mode 100644 index 0000000..d5f7ea4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/TrackedUniqueObject.h @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ARGUS_APPS_CAMERA_UI_COMMON_TRACKEDUNIQUEOBJECT_H +#define ARGUS_APPS_CAMERA_UI_COMMON_TRACKEDUNIQUEOBJECT_H + +#include "Error.h" + +namespace ArgusSamples +{ + +/** + * A class tracking an Argus object through the TrackedUniqueObj below. The track/untrack functions + * are called whenever an Argus object is assigend to/removed from the TrackedUniqueObj object. + */ +template class Tracker +{ +public: + virtual ~Tracker() + { + } + + /** + * Called when the object is assigned to a TrackedUniqueObj + */ + virtual bool track(T *obj) = 0; + + /** + * Called when the object is removed from a TrackedUniqueObj + */ + virtual bool untrack(T *ob) = 0; +}; + +/** + * This class helps track construction and destruction of Argus objects. Tracker classes are + * using it to track Argus objects. + * It exposes several functions of the Argus::UniqueObj class to allow it to be seamlessly + * replaced by a TrackedUniqueObj. + */ +template class TrackedUniqueObj +{ +public: + TrackedUniqueObj() + : m_tracker(NULL) + { + } + + ~TrackedUniqueObj() + { + PROPAGATE_ERROR_CONTINUE(reset()); + } + + T* get() const + { + return m_obj.get(); + } + + bool reset(T *obj = NULL, Tracker *tracker = NULL) + { + if (obj && !tracker) + ORIGINATE_ERROR("Need to specify a tracker if the object is set."); + + // untrack the previous object + if (m_obj) + { + assert(m_tracker); + PROPAGATE_ERROR(m_tracker->untrack(m_obj.get())); + } + + m_obj.reset(obj); + + // track the new object + if (m_obj) + { + assert(tracker); + m_tracker = tracker; + + PROPAGATE_ERROR(m_tracker->track(m_obj.get())); + } + + return true; + } + + operator bool() const + { + return !!m_obj; + } + + // allow this class to access private track/untrack functions from the Tracker class + friend class Tracker; + +private: + Tracker *m_tracker; + Argus::UniqueObj m_obj; +}; + +}; // namespace ArgusSamples + +#endif // ARGUS_APPS_CAMERA_UI_COMMON_TRACKEDUNIQUEOBJECT_H diff --git a/jetson_multimedia_api/argus/apps/camera/modules/XMLConfig.cpp b/jetson_multimedia_api/argus/apps/camera/modules/XMLConfig.cpp new file mode 100644 index 0000000..aa30eef --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/XMLConfig.cpp @@ -0,0 +1,440 @@ +/* + * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include + +#include + +#include "XMLConfig.h" +#include "Dispatcher.h" +#include "UniquePointer.h" + +namespace ArgusSamples +{ + +// XML version +static const char *VERSION = "1.0"; + +// element names +static const char *ELEMENT_DEVICE_INDEX = "deviceIndex"; +static const char *ELEMENT_VERBOSE = "verbose"; +static const char *ELEMENT_KPI = "kpi"; +static const char *ELEMENT_EXPOSURE_TIME_RANGE = "exposureTimeRange"; +static const char *ELEMENT_GAIN_RANGE = "gainRange"; +static const char *ELEMENT_SENSOR_MODE_INDEX = "sensorModeIndex"; +static const char *ELEMENT_FRAME_RATE = "frameRate"; +static const char *ELEMENT_FOCUS_POSITION = "focusPosition"; +static const char *ELEMENT_APERTURE_POSITION = "aperturePosition"; +static const char *ELEMENT_APERTURE_MOTOR_SPEED = "apertureMotorSpeed"; +static const char *ELEMENT_CAPTURE_YUV_FORMAT = "captureYuvFormat"; +static const char *ELEMENT_AE_ANTIBANDING_MODE = "aeAntibandingMode"; +static const char *ELEMENT_AE_LOCK = "aeLock"; +static const char *ELEMENT_AWB_LOCK = "awbLock"; +static const char *ELEMENT_AWB_MODE = "awbMode"; +static const char *ELEMENT_EXPOSURE_COMPENSATION = "exposureCompensation"; +static const char *ELEMENT_ISP_DIGITAL_GAIN_RANGE = "ispDigitalGainRange"; +static const char *ELEMENT_DENOISE_MODE = "denoiseMode"; +static const char *ELEMENT_STILL_FILE_TYPE = "stillFileType"; +static const char *ELEMENT_VIDEO_FORMAT = "videoFormat"; +static const char *ELEMENT_VIDEO_FILE_TYPE = "videoFileType"; +static const char *ELEMENT_VIDEO_BIT_RATE = "videoBitRate"; +static const char *ELEMENT_OUTPUT_SIZE = "outputSize"; +static const char *ELEMENT_OUTPUT_PATH = "outputPath"; +static const char *ELEMENT_DE_FOG_ENABLE = "deFogEnable"; +static const char *ELEMENT_DE_FOG_AMOUNT = "deFogAmount"; +static const char *ELEMENT_DE_FOG_QUALITY = "deFogQaulity"; + +static void XMLCALL xmlHandleData(void *parser, const char *s, int len) +{ + XML_Parser p = (XML_Parser)parser; + std::string *data = reinterpret_cast(XML_GetUserData(p)); + + data->append(s, len); +} + +static void XMLCALL xmlStartElement(void *parser, const char *name, const char **atts) +{ + XML_Parser p = (XML_Parser)parser; + + if (strcmp(name, "argusconfig") == 0) + { + const char **curAtt = atts; + + while (*curAtt != NULL) + { + const char *attribute = curAtt[0]; + const char *value = curAtt[1]; + + if (strcmp(attribute, "version") == 0) + { + if (strcmp(value, VERSION) != 0) + { + ORIGINATE_ERROR_FAIL("Unsupported version '%s' expected version '%s'", + value, VERSION); + } + } + else + ORIGINATE_ERROR_FAIL("Found unexpected attribute '%s'", attribute); + curAtt += 2; + } + } + + XML_SetCharacterDataHandler(p, xmlHandleData); + + return; + +fail: + XML_StopParser(p, XML_FALSE); +} + +/** + * Check if an element matches the value name, if this is the case set the value to 'dataStr' + * @param [in] elementName current element + * @param [in] dataStr data for that element + * @param [in] valueName value name + * @param [in] value value to update with dataStr if there is a match + * @param [out] match set if there was a match + */ +template static bool checkValue(const char *elementName, const char *dataStr, + const char *valueName, Value &value, bool *match) +{ + if (strcmp(elementName, valueName) == 0) + { + PROPAGATE_ERROR(value.setFromString(dataStr)); + *match = true; + } + + return true; +} + +static void XMLCALL xmlEndElement(void *parser, const char *name) +{ + Dispatcher &dispatcher = Dispatcher::getInstance(); + XML_Parser p = (XML_Parser)parser; + std::string *data = reinterpret_cast(XML_GetUserData(p)); + + if (strcmp(name, ELEMENT_DEVICE_INDEX) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_deviceIndex.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_VERBOSE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_verbose.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_KPI) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_kpi.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_EXPOSURE_TIME_RANGE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_exposureTimeRange.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_GAIN_RANGE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_gainRange.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_SENSOR_MODE_INDEX) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_sensorModeIndex.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_FRAME_RATE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_frameRate.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_FOCUS_POSITION) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_focusPosition.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_APERTURE_POSITION) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_aperturePosition.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_APERTURE_MOTOR_SPEED) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_apertureMotorSpeed.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_CAPTURE_YUV_FORMAT) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_captureYuvFormat.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_DENOISE_MODE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_denoiseMode.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_AE_ANTIBANDING_MODE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_aeAntibandingMode.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_AE_LOCK) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_aeLock.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_AWB_LOCK) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_awbLock.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_AWB_MODE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_awbMode.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_EXPOSURE_COMPENSATION) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_exposureCompensation.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_ISP_DIGITAL_GAIN_RANGE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_ispDigitalGainRange.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_STILL_FILE_TYPE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_stillFileType.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_VIDEO_FORMAT) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_videoFormat.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_VIDEO_FILE_TYPE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_videoFileType.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_VIDEO_BIT_RATE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_videoBitRate.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_OUTPUT_SIZE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_outputSize.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_OUTPUT_PATH) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_outputPath.set(*data)); + } + else if (strcmp(name, ELEMENT_DE_FOG_ENABLE) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_deFogEnable.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_DE_FOG_AMOUNT) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_deFogAmount.setFromString(data->c_str())); + } + else if (strcmp(name, ELEMENT_DE_FOG_QUALITY) == 0) + { + PROPAGATE_ERROR_FAIL(dispatcher.m_deFogQuality.setFromString(data->c_str())); + } + else if (strcmp(name, "argusconfig") == 0) + { + } + else + { + ORIGINATE_ERROR_FAIL("Unhandled element '%s'.", name); + } + + XML_SetCharacterDataHandler(p, NULL); + data->clear(); + + return; + +fail: + XML_StopParser(p, XML_FALSE); +} + +bool loadConfig(const char *configFile) +{ + if (configFile == NULL) + ORIGINATE_ERROR("'configFile' is NULL"); + + FILE *xmlFile; + bool success = true; + long ftellResult; + size_t fileSize; + UniquePointer fileData; + XML_Parser parser = NULL; + std::string data; + + // open the file + xmlFile = fopen(configFile, "rb"); + if (xmlFile == NULL) + ORIGINATE_ERROR_FAIL("Failed to open file %s", configFile); + + // get file size + if (fseek(xmlFile, 0, SEEK_END) != 0) + ORIGINATE_ERROR_FAIL("Failed to read buffer file %s", configFile); + + ftellResult = ftell(xmlFile); + if (ftellResult == -1) + ORIGINATE_ERROR_FAIL("Failed to read buffer file %s", configFile); + if (ftellResult == 0) + ORIGINATE_ERROR_FAIL("Empty file %s", configFile); + + fileSize = ftellResult; + + if (fseek(xmlFile, 0, SEEK_SET) != 0) + ORIGINATE_ERROR_FAIL("Failed to read buffer file %s", configFile); + + // allocate buffer + fileData.reset(new char[fileSize + 1]); + if (!fileData) + ORIGINATE_ERROR_FAIL("Out of memory"); + + // read from file to buffer + if (fread(fileData.get(), fileSize, 1, xmlFile) != 1) + ORIGINATE_ERROR_FAIL("Failed to read buffer file %s", configFile); + // terminate string + fileData.get()[fileSize] = 0; + + // create XML parser + parser = XML_ParserCreate(NULL); + if (parser == NULL) + ORIGINATE_ERROR_FAIL("Failed to create parser"); + + XML_UseParserAsHandlerArg(parser); + // the user data is a string, the XML data handler appens to this, the end element handler + // then uses it to set the values + XML_SetUserData(parser, &data); + XML_SetElementHandler(parser, xmlStartElement, xmlEndElement); + + // start parsing + if (XML_Parse(parser, fileData.get(), (int)fileSize, 1) == XML_STATUS_ERROR) + { + // on failure print the line and column number and the line in which the error occured + const XML_Size lineNumber = XML_GetCurrentLineNumber(parser); + const XML_Size columnNumber = XML_GetCurrentColumnNumber(parser); + const XML_Index byteIndex = XML_GetCurrentByteIndex(parser); + + std::string line; + + if ((byteIndex >= 0) && (static_cast(byteIndex) < fileSize)) + { + // find line start + size_t lineStart = static_cast(byteIndex); + while ((lineStart > 0) && (fileData.get()[lineStart] != '\n')) + --lineStart; + // point after new line + if (fileData.get()[lineStart] == '\n') + ++lineStart; + + // find line end + size_t lineEnd = static_cast(lineStart); + while ((lineEnd < fileSize) && (fileData.get()[lineEnd] != '\n')) + ++lineEnd; + + line.append(&fileData.get()[lineStart], lineEnd - lineStart); + } + else + { + line += "-"; + } + + ORIGINATE_ERROR_FAIL("%s at line %lu:%lu:\n%s", + XML_ErrorString(XML_GetErrorCode(parser)), + lineNumber, columnNumber, line.c_str()); + } + + goto succeeded; + +fail: + success = false; + +succeeded: + if (parser != 0) + XML_ParserFree(parser); + if (xmlFile != NULL) + fclose(xmlFile); + + return success; +} + +// write an string to XML +static void writeValue(std::ofstream &stream, const char *name, const std::string& string) +{ + stream << " <" << name << ">" << string << "" << std::endl; +} + +// write an value to XML +template static void writeValue(std::ofstream &stream, const char *name, + const Value &value) +{ + writeValue(stream, name, value.toString()); +} + +bool saveConfig(const char *configFile) +{ + if (configFile == NULL) + ORIGINATE_ERROR("'configFile' is NULL"); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + // open the stream + std::ofstream stream(configFile, std::ofstream::out); + if (!stream.is_open()) + ORIGINATE_ERROR("Failed to open file '%s' for saving.", configFile); + + // header + stream << "" << std::endl; + stream << "" << std::endl; + + // write the value + writeValue(stream, ELEMENT_DEVICE_INDEX, dispatcher.m_deviceIndex); + writeValue(stream, ELEMENT_VERBOSE, dispatcher.m_verbose); + writeValue(stream, ELEMENT_KPI, dispatcher.m_kpi); + writeValue(stream, ELEMENT_EXPOSURE_TIME_RANGE, dispatcher.m_exposureTimeRange); + writeValue(stream, ELEMENT_GAIN_RANGE, dispatcher.m_gainRange); + writeValue(stream, ELEMENT_SENSOR_MODE_INDEX, dispatcher.m_sensorModeIndex); + writeValue(stream, ELEMENT_FRAME_RATE, dispatcher.m_frameRate); + writeValue(stream, ELEMENT_FOCUS_POSITION, dispatcher.m_focusPosition); + writeValue(stream, ELEMENT_APERTURE_POSITION, dispatcher.m_aperturePosition); + writeValue(stream, ELEMENT_APERTURE_MOTOR_SPEED, dispatcher.m_apertureMotorSpeed); + writeValue(stream, ELEMENT_CAPTURE_YUV_FORMAT, dispatcher.m_captureYuvFormat); + writeValue(stream, ELEMENT_DENOISE_MODE, dispatcher.m_denoiseMode); + writeValue(stream, ELEMENT_AE_ANTIBANDING_MODE, dispatcher.m_aeAntibandingMode); + writeValue(stream, ELEMENT_AE_LOCK, dispatcher.m_aeLock); + writeValue(stream, ELEMENT_AWB_LOCK, dispatcher.m_awbLock); + writeValue(stream, ELEMENT_AWB_MODE, dispatcher.m_awbMode); + writeValue(stream, ELEMENT_EXPOSURE_COMPENSATION, dispatcher.m_exposureCompensation); + writeValue(stream, ELEMENT_ISP_DIGITAL_GAIN_RANGE, dispatcher.m_ispDigitalGainRange); + writeValue(stream, ELEMENT_STILL_FILE_TYPE, dispatcher.m_stillFileType); + writeValue(stream, ELEMENT_VIDEO_FORMAT, dispatcher.m_videoFormat); + writeValue(stream, ELEMENT_VIDEO_FILE_TYPE, dispatcher.m_videoFileType); + writeValue(stream, ELEMENT_VIDEO_BIT_RATE, dispatcher.m_videoBitRate); + writeValue(stream, ELEMENT_OUTPUT_SIZE, dispatcher.m_outputSize); + writeValue(stream, ELEMENT_OUTPUT_PATH, dispatcher.m_outputPath.get()); + writeValue(stream, ELEMENT_DE_FOG_ENABLE, dispatcher.m_deFogEnable); + writeValue(stream, ELEMENT_DE_FOG_AMOUNT, dispatcher.m_deFogAmount); + writeValue(stream, ELEMENT_DE_FOG_QUALITY, dispatcher.m_deFogQuality); + + // footer + stream << "" << std::endl; + + stream.close(); + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/modules/XMLConfig.h b/jetson_multimedia_api/argus/apps/camera/modules/XMLConfig.h new file mode 100644 index 0000000..9eb7d41 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/XMLConfig.h @@ -0,0 +1,50 @@ +/* Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef CAMERA_MODULES_XML_CONFIG_H +#define CAMERA_MODULES_XML_CONFIG_H + +namespace ArgusSamples +{ + +/** + * Load configuration from XMl file. + * + * @param configFile [in] + */ +bool loadConfig(const char *configFile); + +/** + * Save configuration to a XMl file. + * + * @param configFile [in] + */ +bool saveConfig(const char *configFile); + +}; // namespace ArgusSamples + +#endif // CAMERA_MODULES_XML_CONFIG_H diff --git a/jetson_multimedia_api/argus/apps/camera/modules/tasks/Gallery.cpp b/jetson_multimedia_api/argus/apps/camera/modules/tasks/Gallery.cpp new file mode 100644 index 0000000..857e87c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/tasks/Gallery.cpp @@ -0,0 +1,1033 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Gallery implementation file. + * The gallery task creates a thread handling scanning for items, loading of images and displaying + * them, using a playback video pipeline for displaying videos. + * The task communicates with the thread through commands. + * Image gallery items share one EGL stream, image data is written to that stream. Video gallery + * items each have an EGL stream. + * EGL streams are enabled for the current visible item only. The composer displays them on the + * screen. + */ + +#define GL_GLEXT_PROTOTYPES + +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include "Gallery.h" +#include "Composer.h" +#include "Dispatcher.h" +#include "Error.h" +#include "Ordered.h" +#include "Mutex.h" +#include "ConditionVariable.h" +#include "UniquePointer.h" +#include "Thread.h" +#include "GLContext.h" +#include "VideoPipeline.h" + +extern "C" { +#include "jpeglib.h" +} + +namespace ArgusSamples +{ + +/** + * Represents an item in the gallery. + */ +class GalleryItem +{ +public: + GalleryItem(const char *fileName, time_t modTime) + : m_fileName(fileName) + , m_modTime(modTime) + { + } + + virtual ~GalleryItem() + { + } + + /** + * item types + */ + enum Type + { + TYPE_IMAGE, + TYPE_VIDEO, + TYPE_INVALID + }; + + /** + * Compare function for sort(). Returns true if the first argument goes before the second + * argument, and false otherwise. + */ + friend bool operator<(const GalleryItem &l, const GalleryItem &r) + { + return (difftime(l.m_modTime, r.m_modTime) > 0); + } + + /** + * Initialize + */ + virtual bool initialize() = 0; + + /** + * shutdown + */ + virtual bool shutdown() = 0; + + /** + * Start the display + */ + virtual bool startDisplay() { return true; } + + /** + * Pause the display + */ + virtual bool pauseDisplay() { return true; } + + /** + * Toggle playback + */ + virtual bool togglePlayBack() { return true; } + + /** + * Rewind + */ + virtual bool rewind() { return true; } + + /** + * Get the item type + */ + virtual Type getType() const = 0; + + /** + * Get the file name + */ + const std::string& getFileName() const + { + return m_fileName; + } + +protected: + std::string m_fileName; + time_t m_modTime; + + GalleryItem(); +}; + +/** + * Compare function for sort(). Returns true if the first argument goes before the second + * argument, and false otherwise. + */ +static bool galleryItemCompare(const GalleryItem* const &l, const GalleryItem* const &r) +{ + return (*l < *r); +} + +/** + * A gallery image. Can load JPEG images. Holds image data in CPU memory. + */ +class GalleryItemImage : public GalleryItem +{ +public: + GalleryItemImage(const char *fileName, time_t modTime) + : GalleryItem(fileName, modTime) + , m_width(0) + , m_height(0) + { + } + + virtual ~GalleryItemImage() + { + PROPAGATE_ERROR_CONTINUE(shutdown()); + } + + /** @name GalleryItem methods */ + /**@{*/ + virtual Type getType() const + { + return TYPE_IMAGE; + } + virtual bool initialize(); + virtual bool shutdown(); + /**@}*/ + + size_t getWidth() const + { + return m_width; + } + + size_t getHeight() const + { + return m_height; + } + + const uint8_t* getData() const + { + return m_data.data(); + } + +private: + size_t m_width; + size_t m_height; + std::vector m_data; +}; + +bool GalleryItemImage::initialize() +{ + // already loaded? + if (!m_data.empty()) + return true; + + struct jpeg_decompress_struct info; + struct jpeg_error_mgr err; + std::vector rowPointers; + JDIMENSION read; + bool success = false; + + // Open file. + FILE *file = fopen(m_fileName.c_str(), "rb"); + if (!file) + ORIGINATE_ERROR("Could not open file '%s'.", m_fileName.c_str()); + + // Prepare for jpeg decompression. + memset(&info, 0, sizeof(info)); + info.err = jpeg_std_error(&err); + jpeg_create_decompress(&info); +#ifdef TEGRA_ACCELERATE + // Tegra JPEG acceleration seems to be broken, image is all black. We need to disable + // hardware acceleration. + jpeg_set_hardware_acceleration_parameters_dec(&info, false, 0, 0, 0, 0, false); +#endif + jpeg_stdio_src(&info, file); + if (jpeg_read_header(&info, TRUE) != JPEG_HEADER_OK) + ORIGINATE_ERROR_FAIL("Invalid JPEG image file '%s'.", m_fileName.c_str()); + if (jpeg_start_decompress(&info) != TRUE) + ORIGINATE_ERROR_FAIL("Invalid JPEG image file '%s'.", m_fileName.c_str()); + + // Determine image format. + if (info.output_components != 3) + ORIGINATE_ERROR_FAIL("Only RGB JPEGs supported."); + + // Read the image size. + m_width = info.output_width; + m_height = info.output_height; + + // Resize vector for the output. + m_data.resize(m_width * m_height * info.output_components); + + // Allocate and set row pointers. + rowPointers.resize(m_height); + for (size_t row = 0; row < m_height; ++row) + rowPointers[row] = m_data.data() + row * m_width * info.output_components; + + // Read the image data. + read = 0; + while (read < m_height) + read += jpeg_read_scanlines(&info, &rowPointers[read], m_height - read); + + success = true; + + // Fallthrough +fail: + if (jpeg_finish_decompress(&info) != TRUE) + REPORT_ERROR("jpeg_finish_decompress() failed."); + jpeg_destroy_decompress(&info); + if (fclose(file) != 0) + REPORT_ERROR("fclose() failed."); + + return success; +} + +bool GalleryItemImage::shutdown() +{ + m_data.clear(); + m_width = 0; + m_height = 0; + return true; +} + +/** + * A gallery video. Outputs to an EGL stream. + */ +class GalleryItemVideo : public GalleryItem +{ +public: + GalleryItemVideo(const char *fileName, time_t modTime) + : GalleryItem(fileName, modTime) + , m_pipeline(NULL) + , m_eglStream(EGL_NO_STREAM_KHR) + { + } + + virtual ~GalleryItemVideo() + { + PROPAGATE_ERROR_CONTINUE(shutdown()); + } + + /** @name GalleryItem methods */ + /**@{*/ + virtual Type getType() const + { + return TYPE_VIDEO; + } + virtual bool initialize(); + virtual bool shutdown(); + virtual bool startDisplay(); + virtual bool pauseDisplay(); + virtual bool togglePlayBack(); + virtual bool rewind(); + /**@}*/ + + EGLStreamKHR getEGLStream() const + { + return m_eglStream; + } + +private: + VideoPipeline *m_pipeline; ///! playback pipeline + EGLStreamKHR m_eglStream; +}; + +bool GalleryItemVideo::initialize() +{ + if (m_pipeline) + return true; + + m_pipeline = new VideoPipeline; + if (!m_pipeline) + ORIGINATE_ERROR("Failed to allocate video pipeline"); + + PROPAGATE_ERROR(m_pipeline->setupForPlayback(&m_eglStream, m_fileName.c_str())); + PROPAGATE_ERROR(Composer::getInstance().bindStream(m_eglStream)); + + // set to pause + PROPAGATE_ERROR(m_pipeline->pause()); + + // query size + float aspectRatio = 1.0f; + PROPAGATE_ERROR(m_pipeline->getAspectRatio(&aspectRatio)); + PROPAGATE_ERROR(Composer::getInstance().setStreamAspectRatio(m_eglStream, aspectRatio)); + + return true; +} + +bool GalleryItemVideo::shutdown() +{ + if (m_pipeline) + { + PROPAGATE_ERROR_CONTINUE(Composer::getInstance().unbindStream(m_eglStream)); + delete m_pipeline; + m_pipeline = NULL; + } + return true; +} + +bool GalleryItemVideo::startDisplay() +{ + if (!m_pipeline) + ORIGINATE_ERROR("Not initialized"); + + // start in paused state + PROPAGATE_ERROR(m_pipeline->pause()); + return true; +} + +bool GalleryItemVideo::pauseDisplay() +{ + if (!m_pipeline) + ORIGINATE_ERROR("Not initialized"); + + PROPAGATE_ERROR(m_pipeline->pause()); + return true; +} + +bool GalleryItemVideo::togglePlayBack() +{ + if (!m_pipeline) + ORIGINATE_ERROR("Not initialized"); + + PROPAGATE_ERROR(m_pipeline->toggle()); + return true; +} + +bool GalleryItemVideo::rewind() +{ + if (!m_pipeline) + ORIGINATE_ERROR("Not initialized"); + + PROPAGATE_ERROR(m_pipeline->rewind()); + return true; +} + +/** + * This class handles creation of a thread scanning for supported images/videos, loading them and + * writing the content to an EGLStream. + */ +class GalleryThread : public Thread +{ +public: + GalleryThread(); + ~GalleryThread(); + + bool initialize(); + bool shutdown(); + + enum Command + { + COMMAND_NONE, + COMMAND_SHUTDOWN, //!< shutdown + COMMAND_NEXT, //!< next item + COMMAND_PREV, //!< previous item + COMMAND_START, //!< start replay + COMMAND_TOGGLE_PLAY_BACK, //!< toggle playback + COMMAND_REWIND, //!< rewind + COMMAND_STOP, //!< stop replay + }; + + typedef std::list GalleryItemList; + + /** + * Execute a command + */ + bool execute(Command command); + +private: + ConditionVariable m_cmdCond; //! command condition variable + Mutex m_cmdMutex; //! command mutex + std::list > m_cmdList; //! command list, written by parent thread + + GLContext m_context; + + // resources used to display images + EGLSurface m_eglOutputSurface; + EGLStreamHolder m_eglImageOutputStream; + GLuint m_textureID; + GLuint m_copyProgram; + GLuint m_vbo; + + GalleryItemList m_itemList; + GalleryItemList::iterator m_curItem; + + virtual bool threadInitialize(); + virtual bool threadExecute(); + virtual bool threadShutdown(); + + bool buildItemList(); + + bool start(); + bool stop(); + + bool startDisplay(); + bool pauseDisplay(); + bool togglePlayBack(); + bool rewind(); + + /** + * Get the current output stream + */ + EGLStreamKHR getOutputStream() const + { + if (m_curItem != m_itemList.end()) + { + switch ((*m_curItem)->getType()) + { + case GalleryItem::TYPE_IMAGE: + // images share one output stream + return m_eglImageOutputStream.get(); + case GalleryItem::TYPE_VIDEO: + // each video has its own stream + return static_cast(*m_curItem)->getEGLStream(); + default: + break; + } + } + return EGL_NO_STREAM_KHR; + } +}; + +GalleryThread::GalleryThread() + : m_eglOutputSurface(EGL_NO_SURFACE) + , m_textureID(0) + , m_copyProgram(0) + , m_vbo(0) + , m_curItem(m_itemList.end()) +{ +} + +GalleryThread::~GalleryThread() +{ + shutdown(); +} + +bool GalleryThread::initialize() +{ + PROPAGATE_ERROR(m_cmdMutex.initialize()); + PROPAGATE_ERROR(m_cmdCond.initialize()); + + PROPAGATE_ERROR(Thread::initialize()); + return true; +} + +bool GalleryThread::shutdown() +{ + PROPAGATE_ERROR_CONTINUE(Thread::shutdown()); + PROPAGATE_ERROR_CONTINUE(m_cmdMutex.shutdown()); + PROPAGATE_ERROR_CONTINUE(m_cmdCond.shutdown()); + return true; +} + +bool GalleryThread::execute(Command command) +{ + // this function is *not* to be executed in the thread itself but in the parent thread + ScopedMutex sm(m_cmdMutex); + PROPAGATE_ERROR(sm.expectLocked()); + + m_cmdList.push_back(command); + + PROPAGATE_ERROR(m_cmdCond.signal()); + + return true; +} + +/** + * Builds a list of gallery items by scanning the output path for image and video files. The + * list is sorted with the newest files first. + */ +bool GalleryThread::buildItemList() +{ + bool success = true; + struct extTypePair + { + const char *ext; + GalleryItem::Type type; + }; + const extTypePair extensions[] = + { + { "jpg", + GalleryItem::TYPE_IMAGE }, + { VideoPipeline::getFileExtension(VideoPipeline::VIDEO_FILE_TYPE_MP4), + GalleryItem::TYPE_VIDEO }, + { VideoPipeline::getFileExtension(VideoPipeline::VIDEO_FILE_TYPE_3GP), + GalleryItem::TYPE_VIDEO }, + { VideoPipeline::getFileExtension(VideoPipeline::VIDEO_FILE_TYPE_AVI), + GalleryItem::TYPE_VIDEO }, + { VideoPipeline::getFileExtension(VideoPipeline::VIDEO_FILE_TYPE_H265), + GalleryItem::TYPE_VIDEO }, + }; + + // open output directory + const std::string path(Dispatcher::getInstance().m_outputPath.get()); + DIR *directory = opendir(path.c_str()); + if (directory != NULL) + { + // scan all files + struct dirent *entry; + while ((entry = readdir(directory))) + { + // we are looking for files only + if (entry->d_type != DT_REG) + continue; + + // check for supported extensions + GalleryItem::Type type = GalleryItem::TYPE_INVALID; + const size_t fileNameLen = strlen(entry->d_name); + for (size_t index = 0; index < sizeof(extensions) / sizeof(extensions[0]); ++index) + { + const extTypePair *ext = &extensions[index]; + + // filename should be longer than '.ext', ext has no '.' therefore +1 + const size_t extLen = strlen(ext->ext); + if (fileNameLen >= extLen + 1) + { + if ((entry->d_name[fileNameLen - extLen - 1] == '.') && + (strcasecmp(&entry->d_name[fileNameLen - extLen], ext->ext) == 0)) + { + type = ext->type; + break; + } + } + } + if (type == GalleryItem::TYPE_INVALID) + continue; + + std::string fullName; + + fullName = path; + fullName += "/"; + fullName += entry->d_name; + + // get status on the file + struct stat fileStat; + if (stat(fullName.c_str(), &fileStat) != 0) + ORIGINATE_ERROR_FAIL("Failed to query file status on '%s'", fullName.c_str()); + + UniquePointer item; + if (type == GalleryItem::TYPE_VIDEO) + { + item.reset(new GalleryItemVideo(fullName.c_str(), fileStat.st_mtime)); + } + else + { + assert(type == GalleryItem::TYPE_IMAGE); + item.reset(new GalleryItemImage(fullName.c_str(), fileStat.st_mtime)); + } + if (!item) + ORIGINATE_ERROR("Failed to create gallery item"); + m_itemList.push_back(item.release()); + } + } + + m_itemList.sort(galleryItemCompare); + + goto pass; + +fail: + success = false; + +pass: + if (directory != NULL) + closedir(directory); + + return success; +} + +bool GalleryThread::threadInitialize() +{ + Composer &composer = Composer::getInstance(); + //! @todo Using 1920x1080 for now. Should use the image size, but this would require creating + // one stream and one surface for each image because surfaces can't be resized + const uint32_t streamWidth = 1920; + const uint32_t streamHeight = 1080; + + // create the EGL output stream + PROPAGATE_ERROR(m_eglImageOutputStream.create(composer.getEGLDisplay())); + CHECK_STREAM_STATE(m_eglImageOutputStream, CREATED); + + // bind the output stream to the composer + PROPAGATE_ERROR(composer.bindStream(m_eglImageOutputStream.get())); + PROPAGATE_ERROR(composer.setStreamAspectRatio(m_eglImageOutputStream.get(), + (float)streamWidth / (float)streamHeight)); + CHECK_STREAM_STATE(m_eglImageOutputStream, CONNECTING); + + // create a EGL context and make it current to the output surface + PROPAGATE_ERROR(m_context.initialize(composer.getEGLDisplay())); + + // create the EGL output surface and connect the EGL output stream to it + PROPAGATE_ERROR(m_context.createEGLStreamProducerSurface(&m_eglOutputSurface, + m_eglImageOutputStream.get(), streamWidth, streamHeight)); + CHECK_STREAM_STATE(m_eglImageOutputStream, EMPTY); + + PROPAGATE_ERROR(m_context.makeCurrent(m_eglOutputSurface)); + + // create a texture used for images + glGenTextures(1, &m_textureID); + if (m_textureID == 0) + ORIGINATE_ERROR("Failed to create GL texture"); + + // Create the shader programs + static const char vtxSrc[] = + "#version 300 es\n" + "#extension GL_ARB_explicit_uniform_location : require\n" + "in layout(location = 0) vec2 vertex;\n" + "out vec2 vTexCoord;\n" + "layout(location = 0) uniform vec2 offset;\n" + "layout(location = 1) uniform vec2 scale;\n" + "void main() {\n" + " gl_Position = vec4((offset + vertex * scale) * 2.0 - 1.0, 0.0, 1.0);\n" + " vTexCoord = vec2(vertex.x, vertex.y);\n" + "}\n"; + + static const char copyFrgSrc[] = + "#version 300 es\n" + "precision highp float;\n" + "uniform sampler2D texSampler;\n" + "in vec2 vTexCoord;\n" + "out vec4 fragColor;\n" + "void main() {\n" + " fragColor = texture(texSampler, vTexCoord);\n" + "}\n"; + PROPAGATE_ERROR(m_context.createProgram(vtxSrc, copyFrgSrc, &m_copyProgram)); + + // Setup vertex state. + static const GLfloat vertices[] = + { + 0.0f, 0.0f, + 0.0f, 1.0f, + 1.0f, 0.0f, + 1.0f, 1.0f, + }; + glGenBuffers(1, &m_vbo); + glBindBuffer(GL_ARRAY_BUFFER, m_vbo); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glEnableVertexAttribArray(0); + + return true; +} + +/** + * Start. Build the item list. + */ +bool GalleryThread::start() +{ + if (!m_itemList.empty()) + ORIGINATE_ERROR("Item list should be empty"); + + // build a list of all items + PROPAGATE_ERROR(buildItemList()); + if (m_itemList.empty()) + m_curItem = m_itemList.end(); + else + m_curItem = m_itemList.begin(); + + return true; +} + +/** + * Stop. Pause display and free the item list. + */ +bool GalleryThread::stop() +{ + PROPAGATE_ERROR(pauseDisplay()); + + for (GalleryItemList::iterator it = m_itemList.begin(); it != m_itemList.end(); ++it) + delete (*it); + m_itemList.clear(); + m_curItem = m_itemList.end(); + + return true; +} + +bool GalleryThread::startDisplay() +{ + if (m_curItem == m_itemList.end()) + return true; + + std::ostringstream message; + + message << "Displaying '" << (*m_curItem)->getFileName() << "'" << std::endl; + Dispatcher::getInstance().message(message.str().c_str()); + + PROPAGATE_ERROR((*m_curItem)->initialize()); + + switch ((*m_curItem)->getType()) + { + case GalleryItem::TYPE_IMAGE: + { + GalleryItemImage *image = static_cast(*m_curItem); + + // draw it to the surface + glClear(GL_COLOR_BUFFER_BIT); + + glBindTexture(GL_TEXTURE_2D, m_textureID); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + // load the item into the texture + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->getWidth(), image->getHeight(), 0, + GL_RGB, GL_UNSIGNED_BYTE, reinterpret_cast(image->getData())); + + // copy from the input to the output + glUseProgram(m_copyProgram); + glUniform2f(0, 0.0f, 0.0f); // offset + glUniform2f(1, 1.0f, 1.0f); // scale + glBindBuffer(GL_ARRAY_BUFFER, m_vbo); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + // the swap will put the image into the output EGL stream + PROPAGATE_ERROR(m_context.swapBuffers(m_eglOutputSurface)); + } + break; + case GalleryItem::TYPE_VIDEO: + PROPAGATE_ERROR(static_cast(*m_curItem)->startDisplay()); + break; + default: + ORIGINATE_ERROR("Unhandled gallery item type"); + } + + PROPAGATE_ERROR(Composer::getInstance().setStreamActive(getOutputStream(), true)); + + return true; +} + +bool GalleryThread::pauseDisplay() +{ + if (m_curItem == m_itemList.end()) + return true; + + PROPAGATE_ERROR(Composer::getInstance().setStreamActive(getOutputStream(), false)); + PROPAGATE_ERROR((*m_curItem)->pauseDisplay()); + + return true; +} + +bool GalleryThread::togglePlayBack() +{ + if (m_curItem == m_itemList.end()) + return true; + + PROPAGATE_ERROR((*m_curItem)->togglePlayBack()); + + return true; +} + +bool GalleryThread::rewind() +{ + if (m_curItem == m_itemList.end()) + return true; + + PROPAGATE_ERROR((*m_curItem)->rewind()); + + return true; +} + +bool GalleryThread::threadExecute() +{ + Command cmd = COMMAND_NONE; + + { + ScopedMutex sm(m_cmdMutex); + PROPAGATE_ERROR(sm.expectLocked()); + + // if the list is empty wait for new commands + if (m_cmdList.empty()) + PROPAGATE_ERROR(m_cmdCond.wait(m_cmdMutex)); + + // get the command from the list + cmd = m_cmdList.front(); + m_cmdList.pop_front(); + } + + switch(cmd) + { + case COMMAND_NONE: + break; + case COMMAND_SHUTDOWN: + PROPAGATE_ERROR(requestShutdown()); + break; + case COMMAND_START: + PROPAGATE_ERROR(start()); + PROPAGATE_ERROR(startDisplay()); + break; + case COMMAND_TOGGLE_PLAY_BACK: + PROPAGATE_ERROR(togglePlayBack()); + break; + case COMMAND_REWIND: + PROPAGATE_ERROR(rewind()); + break; + case COMMAND_STOP: + PROPAGATE_ERROR(stop()); + break; + case COMMAND_PREV: + if ((m_curItem != m_itemList.end()) && (m_curItem != m_itemList.begin())) + { + PROPAGATE_ERROR(pauseDisplay()); + --m_curItem; + PROPAGATE_ERROR(startDisplay()); + } + break; + case COMMAND_NEXT: + if ((m_curItem != m_itemList.end()) && (&(*m_curItem) != &m_itemList.back())) + { + PROPAGATE_ERROR(pauseDisplay()); + ++m_curItem; + PROPAGATE_ERROR(startDisplay()); + } + break; + default: + ORIGINATE_ERROR("Invalid command %d", cmd); + } + + return true; +} + +bool GalleryThread::threadShutdown() +{ + Composer &composer = Composer::getInstance(); + + PROPAGATE_ERROR_CONTINUE(stop()); + + if (m_eglOutputSurface != EGL_NO_SURFACE) + { + eglDestroySurface(composer.getEGLDisplay(), m_eglOutputSurface); + m_eglOutputSurface = EGL_NO_SURFACE; + } + + // unbind the EGL output stream from the composer + PROPAGATE_ERROR_CONTINUE(composer.unbindStream(m_eglImageOutputStream.get())); + CHECK_STREAM_STATE(m_eglImageOutputStream, DISCONNECTED); + // and destroy the EGL output stream + PROPAGATE_ERROR_CONTINUE(m_eglImageOutputStream.destroy()); + + // free GL resources + glDeleteTextures(1, &m_textureID); + m_textureID = 0; + glDeleteProgram(m_copyProgram); + m_copyProgram = 0; + glDeleteBuffers(1, &m_vbo); + m_vbo = 0; + + PROPAGATE_ERROR_CONTINUE(m_context.cleanup()); + + return true; +} + +TaskGallery::TaskGallery() + : m_initialized(false) + , m_running(false) + , m_thread(NULL) +{ +} + +TaskGallery::~TaskGallery() +{ + shutdown(); +} + +bool TaskGallery::initialize() +{ + if (m_initialized) + return true; + + m_initialized = true; + + return true; +} + +bool TaskGallery::shutdown() +{ + if (!m_initialized) + return true; + + // stop the module + PROPAGATE_ERROR_CONTINUE(stop()); + + m_initialized = false; + + return true; +} + +bool TaskGallery::start() +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + if (m_running) + return true; + + // create the gallery thread, it will load and display the items + UniquePointer galleryThread(new GalleryThread()); + if (!galleryThread) + ORIGINATE_ERROR("Out of memory"); + + PROPAGATE_ERROR(galleryThread->initialize()); + m_thread = galleryThread.release(); + + PROPAGATE_ERROR(m_thread->waitRunning()); + + PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_START)); + + m_running = true; + + return true; +} + +bool TaskGallery::stop() +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + if (!m_running) + return true; + + PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_STOP)); + + // send the shutdown command + PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_SHUTDOWN)); + // destroy the thread + PROPAGATE_ERROR(m_thread->shutdown()); + + delete m_thread; + m_thread = NULL; + + m_running = false; + + return true; +} + +bool TaskGallery::togglePlayBack() +{ + if (!m_running) + ORIGINATE_ERROR("Not running"); + + PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_TOGGLE_PLAY_BACK)); + return true; +} + +bool TaskGallery::rewind() +{ + if (!m_running) + ORIGINATE_ERROR("Not running"); + + PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_REWIND)); + return true; +} + +bool TaskGallery::prevItem() +{ + if (!m_running) + ORIGINATE_ERROR("Not running"); + + PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_PREV)); + return true; +} + +bool TaskGallery::nextItem() +{ + if (!m_running) + ORIGINATE_ERROR("Not running"); + + PROPAGATE_ERROR(m_thread->execute(GalleryThread::COMMAND_NEXT)); + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/modules/tasks/Gallery.h b/jetson_multimedia_api/argus/apps/camera/modules/tasks/Gallery.h new file mode 100644 index 0000000..c5eab16 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/tasks/Gallery.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef CAMERA_MODULES_GALLERY_H +#define CAMERA_MODULES_GALLERY_H + +#include "ITask.h" +#include "Util.h" + +namespace ArgusSamples +{ + +class GalleryThread; + +/** + * This task implements a gallery to review images and videos + */ +class TaskGallery : public ITask +{ +public: + TaskGallery(); + virtual ~TaskGallery(); + + /** @name ITask methods */ + /**@{*/ + virtual bool initialize(); + virtual bool shutdown(); + + virtual bool start(); + virtual bool stop(); + /**@}*/ + + /** + * Toggle playback + */ + bool togglePlayBack(); + + /** + * Rewind + */ + bool rewind(); + + /** + * Display next item. + */ + bool prevItem(); + + /** + * Display previous item. + */ + bool nextItem(); + +private: + bool m_initialized; ///< set if initialized + bool m_running; ///< set if running + GalleryThread *m_thread; ///< gallery thread +}; + +}; // namespace ArgusSamples + +#endif // CAMERA_MODULES_GALLERY_H diff --git a/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiExposure.cpp b/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiExposure.cpp new file mode 100644 index 0000000..40b2a64 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiExposure.cpp @@ -0,0 +1,383 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include "MultiExposure.h" +#include "Composer.h" +#include "Dispatcher.h" +#include "Error.h" +#include "UniquePointer.h" + +namespace ArgusSamples +{ + +TaskMultiExposure::TaskMultiExposure() + : m_exposureStepsRange(3) + , m_exposureSteps(new ValidatorRange(&m_exposureStepsRange), 3) + , m_exposureRange( + new ValidatorRange >( + Argus::Range(-10.0f, 10.0f), + Argus::Range(-10.0f, 10.0f)), + Argus::Range(-2.0f, 2.0f)) + , m_initialized(false) + , m_running(false) + , m_wasRunning(false) + , m_prevRunning(false) +{ +} + +TaskMultiExposure::~TaskMultiExposure() +{ + shutdown(); +} + +TaskMultiExposure::ExpLevel::ExpLevel() +{ +} + +TaskMultiExposure::ExpLevel::~ExpLevel() +{ + shutdown(); +} + +bool TaskMultiExposure::ExpLevel::initialize(float exposureCompensation) +{ + Composer &composer = Composer::getInstance(); + Dispatcher &dispatcher = Dispatcher::getInstance(); + + // create the request + PROPAGATE_ERROR(dispatcher.createRequest(m_request, Argus::CAPTURE_INTENT_STILL_CAPTURE)); + + Argus::IRequest *iRequest = Argus::interface_cast(m_request.get()); + if (!iRequest) + ORIGINATE_ERROR("Failed to get IRequest interface"); + + // get the autocontrol settings and set the exposure compensation value + Argus::IAutoControlSettings *iAutoControlSettings = + Argus::interface_cast(iRequest->getAutoControlSettings()); + if (!iAutoControlSettings) + ORIGINATE_ERROR("Failed to get IAutoControlSettings interface"); + + // lock AE + if (iAutoControlSettings->setAeLock(true) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to set AE lock"); + + // set exposure compensation value + if (iAutoControlSettings->setExposureCompensation(exposureCompensation) != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to set exposure compensation"); + + // Create the preview stream + PROPAGATE_ERROR(dispatcher.createOutputStream(m_request.get(), false, m_outputStream)); + + Argus::IEGLOutputStream *iEGLOutputStream = + Argus::interface_cast(m_outputStream.get()); + if (!iEGLOutputStream) + ORIGINATE_ERROR("Failed to get IEGLOuptutStream interface"); + + // Bind the stream to the composer + PROPAGATE_ERROR(composer.bindStream(iEGLOutputStream->getEGLStream())); + + const Argus::Size2D streamSize = iEGLOutputStream->getResolution(); + PROPAGATE_ERROR(composer.setStreamAspectRatio(iEGLOutputStream->getEGLStream(), + (float)streamSize.width() / (float)streamSize.height())); + + // Enable the output stream + PROPAGATE_ERROR(dispatcher.enableOutputStream(m_request.get(), m_outputStream.get())); + + return true; +} + +bool TaskMultiExposure::ExpLevel::shutdown() +{ + if (m_request) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + Composer &composer = Composer::getInstance(); + + if (m_outputStream) + { + // disable the output stream + PROPAGATE_ERROR_CONTINUE(dispatcher.disableOutputStream(m_request.get(), + m_outputStream.get())); + + Argus::IEGLOutputStream *iEGLOutputStream = + Argus::interface_cast(m_outputStream); + if (!iEGLOutputStream) + REPORT_ERROR("Failed to get IEGLOutputStream interface"); + + // disconnect the EGL stream + iEGLOutputStream->disconnect(); + + // unbind the EGL stream from the composer + PROPAGATE_ERROR_CONTINUE(composer.unbindStream(iEGLOutputStream->getEGLStream())); + + m_outputStream.reset(); + } + + // destroy the request + PROPAGATE_ERROR_CONTINUE(m_request.reset()); + } + + return true; +} + +bool TaskMultiExposure::initialize() +{ + if (m_initialized) + return true; + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + m_initialized = true; + + // register the device observers after 'm_initialize' is set, the call back will be + // called immediately and assert that 'm_initialize' is set + PROPAGATE_ERROR(dispatcher.m_deviceOpen.registerObserver(this, + static_cast(&TaskMultiExposure::onDeviceOpenChanged))); + PROPAGATE_ERROR(dispatcher.m_sensorModeValid.registerObserver(this, + static_cast(&TaskMultiExposure::onSensorModeValidChanged))); + PROPAGATE_ERROR(dispatcher.m_outputSize.registerObserver(this, + static_cast(&TaskMultiExposure::restartStreams))); + PROPAGATE_ERROR(m_exposureRange.registerObserver(this, + static_cast(&TaskMultiExposure::onParametersChanged))); + PROPAGATE_ERROR(m_exposureSteps.registerObserver(this, + static_cast(&TaskMultiExposure::onParametersChanged))); + PROPAGATE_ERROR(dispatcher.m_captureYuvFormat.registerObserver(this, + static_cast(&TaskMultiExposure::restartStreams))); + + return true; +} + +bool TaskMultiExposure::shutdown() +{ + if (!m_initialized) + return true; + + // stop the preview + PROPAGATE_ERROR(stop()); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(m_exposureSteps.unregisterObserver(this, + static_cast(&TaskMultiExposure::onParametersChanged))); + PROPAGATE_ERROR_CONTINUE(m_exposureRange.unregisterObserver(this, + static_cast(&TaskMultiExposure::onParametersChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_outputSize.unregisterObserver(this, + static_cast(&TaskMultiExposure::restartStreams))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_sensorModeValid.unregisterObserver(this, + static_cast(&TaskMultiExposure::onSensorModeValidChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_deviceOpen.unregisterObserver(this, + static_cast(&TaskMultiExposure::onDeviceOpenChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_captureYuvFormat.unregisterObserver(this, + static_cast(&TaskMultiExposure::restartStreams))); + + m_initialized = false; + + return true; +} + +bool TaskMultiExposure::shutdownExpLevels() +{ + if (!m_expLevels.empty()) + { + // shutdown the exposure streams + for (std::list::iterator it = m_expLevels.begin(); it != m_expLevels.end(); ++it) + { + ExpLevel *expLevel = *it; + PROPAGATE_ERROR_CONTINUE(expLevel->shutdown()); + delete expLevel; + } + m_expLevels.clear(); + } + + return true; +} + +bool TaskMultiExposure::restartStreams(__attribute__((unused)) const Observed &source) +{ + if (m_running) + { + PROPAGATE_ERROR(stop()); + PROPAGATE_ERROR(start()); + } + return true; +} + +bool TaskMultiExposure::onDeviceOpenChanged(const Observed &source) +{ + const bool isOpen = static_cast&>(source).get(); + + // If the current device is closed the request needs to be recreated on the new device. Stop + // and then start when the device is opened again. + if (!isOpen) + { + m_wasRunning = m_running; + PROPAGATE_ERROR(stop()); + } + else + { + PROPAGATE_ERROR(m_exposureStepsRange.set( + Argus::Range(2, Dispatcher::getInstance().maxBurstRequests()))); + + if (m_wasRunning) + { + m_wasRunning = false; + PROPAGATE_ERROR(start()); + } + } + + return true; +} + +bool TaskMultiExposure::onSensorModeValidChanged(const Observed &source) +{ + const bool isTrue = static_cast&>(source).get(); + + if (!isTrue) + { + m_prevRunning = m_running; + if (m_running) + { + PROPAGATE_ERROR(stop()); + } + } + else if (m_prevRunning) + { + m_prevRunning = false; + PROPAGATE_ERROR(start()); + } + + return true; +} + +bool TaskMultiExposure::onParametersChanged(const Observed &source) +{ + assert(m_initialized); + + // if preview is running, stop, shutdown levels, set the new value and start again + const bool wasRunning = m_running; + PROPAGATE_ERROR(stop()); + PROPAGATE_ERROR(shutdownExpLevels()); + + if (wasRunning) + PROPAGATE_ERROR(start()); + + return true; +} + +bool TaskMultiExposure::start() +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + if (m_running) + return true; + + if (m_expLevels.empty()) + { + std::ostringstream message; + + message << "Creating " << m_exposureSteps << " streams with exposure compensation set to "; + + // create a request and streams for each exposure level + for (uint32_t requestIndex = 0; requestIndex < m_exposureSteps; ++requestIndex) + { + UniquePointer expLevel(new ExpLevel); + + if (!expLevel) + ORIGINATE_ERROR("Out of memory"); + + const float exposureCompensation = + ((float)requestIndex / (float)(m_exposureSteps - 1)) * + (m_exposureRange.get().max() - m_exposureRange.get().min()) + + m_exposureRange.get().min(); + + PROPAGATE_ERROR(expLevel->initialize(exposureCompensation)); + + m_expLevels.push_back(expLevel.release()); + + if (requestIndex != 0) + message << ", "; + message << exposureCompensation << " ev"; + } + + message << ". " << std::endl; + Dispatcher::getInstance().message(message.str().c_str()); + } + + // activate the streams and populate the burst request array + std::vector requests; + Composer &composer = Composer::getInstance(); + for (std::list::iterator it = m_expLevels.begin(); it != m_expLevels.end(); ++it) + { + ExpLevel *expLevel = *it; + PROPAGATE_ERROR(composer.setStreamActive( + Argus::interface_cast + (expLevel->m_outputStream)->getEGLStream(), true)); + requests.push_back(expLevel->m_request.get()); + } + + // start the repeating burst request for the preview + PROPAGATE_ERROR(Dispatcher::getInstance().startRepeatBurst(requests)); + + m_running = true; + + return true; +} + +bool TaskMultiExposure::stop() +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + if (!m_running) + return true; + + // stop the repeating burst request + Dispatcher &dispatcher = Dispatcher::getInstance(); + PROPAGATE_ERROR(dispatcher.stopRepeat()); + + // de-activate the streams + Composer &composer = Composer::getInstance(); + for (std::list::iterator it = m_expLevels.begin(); it != m_expLevels.end(); ++it) + { + ExpLevel *expLevel = *it; + PROPAGATE_ERROR(composer.setStreamActive( + Argus::interface_cast + (expLevel->m_outputStream)->getEGLStream(), false)); + } + + PROPAGATE_ERROR(dispatcher.waitForIdle()); + + PROPAGATE_ERROR(shutdownExpLevels()); + + m_running = false; + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiExposure.h b/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiExposure.h new file mode 100644 index 0000000..5b8c363 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiExposure.h @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TASK_MULTI_EXPOSURE_H +#define TASK_MULTI_EXPOSURE_H + +#include + +#include + +#include "ITask.h" +#include "Value.h" +#include "IObserver.h" +#include "TrackedUniqueObject.h" + +namespace ArgusSamples +{ + +/** + * This task captures multiple streams with different exposure compensation values. + */ +class TaskMultiExposure : public ITask, public IObserver +{ +public: + TaskMultiExposure(); + virtual ~TaskMultiExposure(); + + /** @name ITask methods */ + /**@{*/ + virtual bool initialize(); + virtual bool shutdown(); + virtual bool start(); + virtual bool stop(); + /**@}*/ + +private: + // the range values need to be initialized first, some Value<> members below use them + // for the validator + Value > m_exposureStepsRange; ///< allowed exposure steps + +public: + Value m_exposureSteps; ///< steps within the exposure range + Value > m_exposureRange; ///< in eV, e.g. -1,2 results in exposures from + /// -1 eV to +2 eV + +private: + bool m_initialized; ///< set if initialized + bool m_running; ///< set if preview is running + bool m_wasRunning; ///< set if was running before the device had been closed + bool m_prevRunning; ///< set if was running before the sensorModeValid is set to false + + /** + * For each exposure level there is one request where the exposure compensation is set to the + * correct value. Each request outputs to a stream which is rendered. + */ + class ExpLevel + { + public: + ExpLevel(); + ~ExpLevel(); + + bool shutdown(); + bool initialize(float exposureCompensation); + + TrackedUniqueObj m_request; ///< Argus request + Argus::UniqueObj m_outputStream; ///< Argus output stream + }; + + std::list m_expLevels; ///< exposure level + + /** + * Callback when the device is opened/closed. + */ + bool onDeviceOpenChanged(const Observed &source); + + /** + * Callback when the sensorModeValid is changed. + */ + bool onSensorModeValidChanged(const Observed &source); + + /** + * Callback when the exposure range or steps changes. + */ + bool onParametersChanged(const Observed &source); + + /** + * Shut down the exposure level streams. + */ + bool shutdownExpLevels(); + + /** + * Restart when output size changes + */ + bool restartStreams(const Observed &source); +}; + +}; // namespace ArgusSamples + +#endif // TASK_MULTI_EXPOSURE_H diff --git a/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiSession.cpp b/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiSession.cpp new file mode 100644 index 0000000..03df76d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiSession.cpp @@ -0,0 +1,342 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include "MultiSession.h" +#include "Composer.h" +#include "Dispatcher.h" +#include "Error.h" +#include "UniquePointer.h" +#include "PerfTracker.h" +#include + +namespace ArgusSamples +{ + +TaskMultiSession::TaskMultiSession() + : m_initialized(false) + , m_running(false) + , m_prevRunning(false) +{ +} + +TaskMultiSession::~TaskMultiSession() +{ + shutdown(); +} + +TaskMultiSession::Session::Session() +{ +} + +TaskMultiSession::Session::~Session() +{ + shutdown(); +} + +bool TaskMultiSession::Session::initialize(uint32_t deviceIndex) +{ + // create the perf tracker + m_perfTracker.reset(new SessionPerfTracker()); + if (!m_perfTracker) + ORIGINATE_ERROR("Out of memory"); + + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_TASK_START)); + + Composer &composer = Composer::getInstance(); + Dispatcher &dispatcher = Dispatcher::getInstance(); + + // create the session using the current device index + PROPAGATE_ERROR(dispatcher.createSession(m_session, deviceIndex)); + PROPAGATE_ERROR(m_perfTracker->setSession(m_session.get())); + + // create the request + PROPAGATE_ERROR(dispatcher.createRequest(m_request, Argus::CAPTURE_INTENT_STILL_CAPTURE, + m_session.get())); + + // Create the preview stream + PROPAGATE_ERROR(dispatcher.createOutputStream(m_request.get(), false, m_outputStream, + m_session.get())); + + // bind the preview stream to the composer + Argus::IEGLOutputStream *iEGLOutputStream = + Argus::interface_cast(m_outputStream.get()); + if (!iEGLOutputStream) + ORIGINATE_ERROR("Failed to get IEGLOutputStream interface"); + + // Bind the stream to the composer + PROPAGATE_ERROR(composer.bindStream(iEGLOutputStream->getEGLStream())); + + const Argus::Size2D streamSize = iEGLOutputStream->getResolution(); + PROPAGATE_ERROR(composer.setStreamAspectRatio(iEGLOutputStream->getEGLStream(), + (float)streamSize.width() / (float)streamSize.height())); + + // Enable the output stream + PROPAGATE_ERROR(dispatcher.enableOutputStream(m_request.get(), m_outputStream.get())); + + return true; +} + +bool TaskMultiSession::Session::start() +{ + Composer &composer = Composer::getInstance(); + + // activate the streams and populate the burst request array + PROPAGATE_ERROR(composer.setStreamActive( + Argus::interface_cast(m_outputStream)->getEGLStream(), true)); + + // start the repeating burst request for the preview + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_ISSUE_CAPTURE)); + PROPAGATE_ERROR(Dispatcher::getInstance().startRepeat(m_request.get(), m_session.get())); + + return true; +} + +bool TaskMultiSession::Session::stop() +{ + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_REQUESTED)); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + Composer &composer = Composer::getInstance(); + + PROPAGATE_ERROR(dispatcher.stopRepeat(m_session.get())); + PROPAGATE_ERROR(composer.setStreamActive( + Argus::interface_cast(m_outputStream)->getEGLStream(), false)); + PROPAGATE_ERROR(dispatcher.waitForIdle(m_session.get())); + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_FLUSH_DONE)); + + return true; +} + +bool TaskMultiSession::Session::shutdown() +{ + if (m_request) + { + Dispatcher &dispatcher = Dispatcher::getInstance(); + Composer &composer = Composer::getInstance(); + + if (m_outputStream) + { + // destroy the producer + PROPAGATE_ERROR_CONTINUE(dispatcher.disableOutputStream(m_request.get(), + m_outputStream.get())); + + Argus::IEGLOutputStream *iEGLOutputStream = + Argus::interface_cast(m_outputStream); + if (!iEGLOutputStream) + REPORT_ERROR("Failed to get IEGLOutputStream interface"); + + // disconnect the EGL stream + iEGLOutputStream->disconnect(); + + // unbind the EGL stream from the composer + PROPAGATE_ERROR_CONTINUE(composer.unbindStream(iEGLOutputStream->getEGLStream())); + + m_outputStream.reset(); + } + + // destroy the request + PROPAGATE_ERROR_CONTINUE(m_request.reset()); + } + + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_DONE)); + + // Destroy the session + m_session.reset(); + + return true; +} + +bool TaskMultiSession::initialize() +{ + if (m_initialized) + return true; + + PROPAGATE_ERROR(Dispatcher::getInstance().m_sensorModeValid.registerObserver(this, + static_cast(&TaskMultiSession::onSensorModeValidChanged))); + PROPAGATE_ERROR(Dispatcher::getInstance().m_outputSize.registerObserver(this, + static_cast(&TaskMultiSession::restartStreams))); + + m_initialized = true; + + return true; +} + +bool TaskMultiSession::shutdown() +{ + if (!m_initialized) + return true; + + // stop the preview + PROPAGATE_ERROR(stop()); + + PROPAGATE_ERROR_CONTINUE(Dispatcher::getInstance().m_outputSize.unregisterObserver(this, + static_cast(&TaskMultiSession::restartStreams))); + PROPAGATE_ERROR_CONTINUE(Dispatcher::getInstance().m_sensorModeValid.unregisterObserver(this, + static_cast(&TaskMultiSession::onSensorModeValidChanged))); + + m_initialized = false; + + return true; +} + +bool TaskMultiSession::shutdownSessions() +{ + if (!m_sessions.empty()) + { + // shutdown the sessions + for (std::list::iterator it = m_sessions.begin(); it != m_sessions.end(); ++it) + { + Session *session = *it; + PROPAGATE_ERROR_CONTINUE(session->shutdown()); + delete session; + } + m_sessions.clear(); + } + + return true; +} + +bool TaskMultiSession::start() +{ + if (m_running) + return true; + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + if (m_sessions.empty()) + { + const uint32_t deviceCount = dispatcher.getDeviceCount(); + + if (deviceCount == 0) + ORIGINATE_ERROR("No camera devices found"); + + std::vector devices; + + if (m_multiDevices.get().size() > 0) + { + // m_multiDevices will not be changed by UI + // it has special validation requirements, so validate m_multiDevices here + devices = m_multiDevices.get(); + std::sort(devices.begin(), devices.end()); + + // compare with deviceCount + if (devices.back() >= deviceCount) + ORIGINATE_ERROR("index %u is out of range [0 - %u)", devices.back(), deviceCount); + + // check no duplicate + std::vector::iterator it = std::unique(devices.begin(), devices.end()); + if (it != devices.end()) + ORIGINATE_ERROR("duplicated indexes"); + } + else + { + // use all available camera devices + for (uint32_t deviceIndex = 0; deviceIndex < deviceCount; ++deviceIndex) + { + devices.push_back(deviceIndex); + } + } + + // create a request and streams for each session + for (std::vector::iterator it = devices.begin(); it != devices.end(); ++it) + { + UniquePointer session(new Session); + + if (!session) + ORIGINATE_ERROR("Out of memory"); + + PROPAGATE_ERROR(session->initialize(*it)); + + m_sessions.push_back(session.release()); + } + } + + // start the sessions + for (std::list::iterator it = m_sessions.begin(); it != m_sessions.end(); ++it) + { + Session *session = *it; + PROPAGATE_ERROR(session->start()); + } + + m_running = true; + + return true; +} + +bool TaskMultiSession::stop() +{ + if (!m_running) + return true; + + for (std::list::iterator it = m_sessions.begin(); it != m_sessions.end(); ++it) + { + Session *session = *it; + PROPAGATE_ERROR(session->stop()); + } + + PROPAGATE_ERROR(shutdownSessions()); + + m_running = false; + + return true; +} + +bool TaskMultiSession::onSensorModeValidChanged(const Observed &source) +{ + const bool isTrue = static_cast&>(source).get(); + + if (!isTrue) + { + m_prevRunning = m_running; + if (m_running) + { + PROPAGATE_ERROR(stop()); + } + } + else if (m_prevRunning) + { + m_prevRunning = false; + PROPAGATE_ERROR(start()); + } + + return true; +} + +bool TaskMultiSession::restartStreams(__attribute__((unused)) const Observed &source) +{ + if (m_running) + { + PROPAGATE_ERROR(stop()); + PROPAGATE_ERROR(start()); + } + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiSession.h b/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiSession.h new file mode 100644 index 0000000..c3131dc --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/tasks/MultiSession.h @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TASK_MULTI_SESSION_H +#define TASK_MULTI_SESSION_H + +#include + +#include + +#include "ITask.h" +#include "Util.h" +#include "UniquePointer.h" +#include "IObserver.h" +#include "TrackedUniqueObject.h" +#include "Value.h" + +namespace ArgusSamples +{ + +class SessionPerfTracker; + +/** + * This task creates one session for each available sensor + */ +class TaskMultiSession : public ITask, public IObserver +{ +public: + TaskMultiSession(); + virtual ~TaskMultiSession(); + + /** @name ITask methods */ + /**@{*/ + virtual bool initialize(); + virtual bool shutdown(); + virtual bool start(); + virtual bool stop(); + /**@}*/ + +private: + bool m_initialized; ///< set if initialized + bool m_running; ///< set if preview is running + bool m_prevRunning; ///< set if was running before the sensorModeValid is set to false + + /** + * For each device there is one session with a request. Each request outputs to a stream which + * is rendered. + */ + class Session + { + public: + Session(); + ~Session(); + + bool shutdown(); + bool start(); + bool stop(); + bool initialize(uint32_t deviceIndex); + + TrackedUniqueObj m_session; ///< Argus session + TrackedUniqueObj m_request; ///< Argus request + Argus::UniqueObj m_outputStream; ///< Argus output stream + + UniquePointer m_perfTracker; + }; + + std::list m_sessions; + + bool shutdownSessions(); + + /** + * Callback when the sensorModeValid is changed. + */ + bool onSensorModeValidChanged(const Observed &source); + + /** + * Restart when output size changes + */ + bool restartStreams(const Observed &source); + +public: + Value > m_multiDevices; ///< multiple devices +}; + +}; // namespace ArgusSamples + +#endif // TASK_MULTI_SESSION_H diff --git a/jetson_multimedia_api/argus/apps/camera/modules/tasks/StillCapture.cpp b/jetson_multimedia_api/argus/apps/camera/modules/tasks/StillCapture.cpp new file mode 100644 index 0000000..5de8b79 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/tasks/StillCapture.cpp @@ -0,0 +1,388 @@ +/* + * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include +#include +#include + +#include "StillCapture.h" +#include "Composer.h" +#include "Dispatcher.h" +#include "Error.h" +#include "PerfTracker.h" + +namespace ArgusSamples +{ + +TaskStillCapture::TaskStillCapture() + : m_initialized(false) + , m_running(false) + , m_wasRunning(false) + , m_prevRunning(false) + , m_captureIndex(0) +{ +} + +TaskStillCapture::~TaskStillCapture() +{ + shutdown(); +} + +bool TaskStillCapture::initialize() +{ + if (m_initialized) + return true; + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR(dispatcher.m_deviceOpen.registerObserver(this, + static_cast(&TaskStillCapture::onDeviceOpenChanged))); + PROPAGATE_ERROR(dispatcher.m_sensorModeValid.registerObserver(this, + static_cast(&TaskStillCapture::onSensorModeValidChanged))); + PROPAGATE_ERROR(dispatcher.m_outputSize.registerObserver(this, + static_cast(&TaskStillCapture::restartStreams))); + PROPAGATE_ERROR(dispatcher.m_captureYuvFormat.registerObserver(this, + static_cast(&TaskStillCapture::restartStreams))); + + + m_perfTracker.reset(new SessionPerfTracker()); + if (!m_perfTracker) + ORIGINATE_ERROR("Out of memory"); + + m_initialized = true; + + return true; +} + +bool TaskStillCapture::restartStreams(__attribute__((unused)) const Observed &source) +{ + if (m_running) + { + PROPAGATE_ERROR(stop()); + PROPAGATE_ERROR(start()); + } + return true; +} + +bool TaskStillCapture::onDeviceOpenChanged(const Observed &source) +{ + const bool isOpen = static_cast&>(source).get(); + + // If the current device is closed the request needs to be recreated on the new device. Stop + // and then start when the device is opened again. + if (!isOpen) + { + m_wasRunning = m_running; + PROPAGATE_ERROR(stop()); + } + else if (m_wasRunning) + { + m_wasRunning = false; + PROPAGATE_ERROR(start()); + } + + return true; +} + +bool TaskStillCapture::onSensorModeValidChanged(const Observed &source) +{ + const bool isTrue = static_cast&>(source).get(); + + if (!isTrue) + { + m_prevRunning = m_running; + if (m_running) + { + PROPAGATE_ERROR(stop()); + } + } + else if (m_prevRunning) + { + m_prevRunning = false; + PROPAGATE_ERROR(start()); + } + + return true; +} + +bool TaskStillCapture::start() +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + + if (m_running) + return true; + + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_TASK_START)); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + Composer &composer = Composer::getInstance(); + + PROPAGATE_ERROR(dispatcher.createRequest(m_previewRequest, Argus::CAPTURE_INTENT_PREVIEW)); + + // Create the preview stream + PROPAGATE_ERROR(dispatcher.createOutputStream(m_previewRequest.get(), false, m_previewStream)); + + Argus::IEGLOutputStream *iEGLOutputStream = + Argus::interface_cast(m_previewStream); + if (!iEGLOutputStream) + ORIGINATE_ERROR("Failed to get IEGLOutputStream interface"); + + // render the preview stream + PROPAGATE_ERROR(composer.bindStream(iEGLOutputStream->getEGLStream())); + + const Argus::Size2D streamSize = iEGLOutputStream->getResolution(); + PROPAGATE_ERROR(composer.setStreamAspectRatio(iEGLOutputStream->getEGLStream(), + (float)streamSize.width() / (float)streamSize.height())); + PROPAGATE_ERROR(composer.setStreamActive(iEGLOutputStream->getEGLStream(), true)); + + // Enable the preview stream + PROPAGATE_ERROR(dispatcher.enableOutputStream(m_previewRequest.get(), m_previewStream.get())); + + // start the repeating request for the preview + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_ISSUE_CAPTURE)); + PROPAGATE_ERROR(dispatcher.startRepeat(m_previewRequest.get())); + + m_running = true; + + return true; +} + +bool TaskStillCapture::stop() +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + + if (!m_running) + return true; + + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_REQUESTED)); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + // stop the repeating request + PROPAGATE_ERROR(dispatcher.stopRepeat()); + + PROPAGATE_ERROR(dispatcher.waitForIdle()); + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_FLUSH_DONE)); + + // disable the output stream + PROPAGATE_ERROR(dispatcher.disableOutputStream(m_previewRequest.get(), m_previewStream.get())); + + Argus::IEGLOutputStream *iEGLOutputStream = + Argus::interface_cast(m_previewStream); + if (!iEGLOutputStream) + ORIGINATE_ERROR("Failed to get IEGLOutputStream interface"); + + // disconnect the EGL stream + iEGLOutputStream->disconnect(); + + // unbind the preview stream from the composer + PROPAGATE_ERROR(Composer::getInstance().unbindStream(iEGLOutputStream->getEGLStream())); + + // destroy the preview stream + m_previewStream.reset(); + + // destroy the preview request + PROPAGATE_ERROR(m_previewRequest.reset()); + + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_DONE)); + + m_running = false; + + return true; +} + +bool TaskStillCapture::execute() +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + if (!m_running) + ORIGINATE_ERROR("Not running"); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + TrackedUniqueObj stillRequest; + PROPAGATE_ERROR(dispatcher.createRequest(stillRequest, Argus::CAPTURE_INTENT_STILL_CAPTURE)); + + // Create the still stream + Argus::UniqueObj stillStream; + PROPAGATE_ERROR(dispatcher.createOutputStream(stillRequest.get(), true, stillStream)); + + // Enable the still stream + PROPAGATE_ERROR(dispatcher.enableOutputStream(stillRequest.get(), stillStream.get())); + + // Create the frame consumer + Argus::UniqueObj consumer( + EGLStream::FrameConsumer::create(stillStream.get())); + EGLStream::IFrameConsumer *iFrameConsumer = + Argus::interface_cast(consumer); + if (!iFrameConsumer) + ORIGINATE_ERROR("Failed to create FrameConsumer"); + + // do the capture + PROPAGATE_ERROR(dispatcher.capture(stillRequest.get())); + + // aquire the frame + Argus::UniqueObj frame(iFrameConsumer->acquireFrame()); + if (!frame) + ORIGINATE_ERROR("Failed to aquire frame"); + + // Use the IFrame interface to provide access to the Image in the Frame. + EGLStream::IFrame *iFrame = Argus::interface_cast(frame); + if (!iFrame) + ORIGINATE_ERROR("Failed to get IFrame interface."); + + EGLStream::Image *image = iFrame->getImage(); + if (!image) + ORIGINATE_ERROR("Failed to get image."); + + switch (dispatcher.m_stillFileType.get()) + { + case STILL_FILE_TYPE_JPG: + { + // Get the JPEG interface. + EGLStream::IImageJPEG *iJPEG = + Argus::interface_cast(image); + if (!iJPEG) + ORIGINATE_ERROR("Failed to get IImageJPEG interface."); + + // build the file name + std::ostringstream fileName; + fileName << dispatcher.m_outputPath.get(); + if (dispatcher.m_outputPath.get() != "/dev/null") + fileName << "/image" << std::setfill('0') << std::setw(4) << + m_captureIndex << ".jpg"; + + PROPAGATE_ERROR(validateOutputPath(fileName.str().c_str())); + + // Write a JPEG to disk. + if (iJPEG->writeJPEG(fileName.str().c_str()) == Argus::STATUS_OK) + { + PROPAGATE_ERROR(dispatcher.message("Captured a still image to '%s'\n", + fileName.str().c_str())); + } + else + { + ORIGINATE_ERROR("Failed to write JPEG to '%s'\n", fileName.str().c_str()); + } + } + break; + + case STILL_FILE_TYPE_HEADERLESS: + { + // Get the HEADERLESS_FILE interface. + EGLStream::IImageHeaderlessFile *iHeaderlessFile = + Argus::interface_cast(image); + if (!iHeaderlessFile) + ORIGINATE_ERROR("Failed to get IImageHeaderlessFile interface."); + + EGLStream::IImage2D *i2D = + Argus::interface_cast(image); + if (!i2D) + ORIGINATE_ERROR("Failed to get IImage2D interface."); + const Argus::Size2D size = i2D->getSize(); + + // build the file name + std::ostringstream fileName; + fileName << dispatcher.m_outputPath.get(); + if (dispatcher.m_outputPath.get() != "/dev/null") + { + fileName << "/image_" << + size.width() << "x" << size.height() << "_" << + std::setfill('0') << std::setw(4) << m_captureIndex << + "." << dispatcher.m_captureYuvFormat.toString(); + } + + PROPAGATE_ERROR(validateOutputPath(fileName.str().c_str())); + + // Write a headerless, unencoded image to disk. + if (iHeaderlessFile->writeHeaderlessFile(fileName.str().c_str()) == Argus::STATUS_OK) + { + PROPAGATE_ERROR(dispatcher.message("Captured a still image to '%s'\n", + fileName.str().c_str())); + } + else + { + ORIGINATE_ERROR("Failed to write headerless raw image to '%s'\n", + fileName.str().c_str()); + } + } + break; + + default: + ORIGINATE_ERROR("unknown still image file type"); + } + + ++m_captureIndex; + + // release the frame. + frame.reset(); + + // destroy the still stream + PROPAGATE_ERROR(dispatcher.disableOutputStream(stillRequest.get(), stillStream.get())); + stillStream.reset(); + + // destroy the still request + PROPAGATE_ERROR(stillRequest.reset()); + + // destroy the still consumer + consumer.reset(); + + return true; +} + +bool TaskStillCapture::shutdown() +{ + if (!m_initialized) + return true; + + // stop the module + PROPAGATE_ERROR_CONTINUE(stop()); + + PROPAGATE_ERROR_CONTINUE(m_perfTracker->shutdown()); + m_perfTracker.reset(); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_outputSize.unregisterObserver(this, + static_cast(&TaskStillCapture::restartStreams))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_sensorModeValid.unregisterObserver(this, + static_cast(&TaskStillCapture::onSensorModeValidChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_deviceOpen.unregisterObserver(this, + static_cast(&TaskStillCapture::onDeviceOpenChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_captureYuvFormat.unregisterObserver(this, + static_cast(&TaskStillCapture::restartStreams))); + + m_initialized = false; + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/modules/tasks/StillCapture.h b/jetson_multimedia_api/argus/apps/camera/modules/tasks/StillCapture.h new file mode 100644 index 0000000..f0cda81 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/tasks/StillCapture.h @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TASK_STILL_CAPTURE_H +#define TASK_STILL_CAPTURE_H + +#include +#include + +#include "ITask.h" +#include "UniquePointer.h" +#include "IObserver.h" +#include "TrackedUniqueObject.h" + +namespace ArgusSamples +{ + +class SessionPerfTracker; + +/** + * This task captures still images + */ +class TaskStillCapture : public ITask, public IObserver +{ +public: + TaskStillCapture(); + virtual ~TaskStillCapture(); + + virtual bool initialize(); + virtual bool shutdown(); + + virtual bool start(); + virtual bool stop(); + + /** + * Capture one image + */ + bool execute(); + +private: + bool m_initialized; ///< set if initialized + bool m_running; ///< set if preview is running + bool m_wasRunning; ///< set if was running before the device had been closed + bool m_prevRunning; ///< set if was running before the sensorModeValid is set to false + uint32_t m_captureIndex; ///< Incrementing capture index + + UniquePointer m_perfTracker; + + TrackedUniqueObj m_previewRequest; ///< Argus preview request + Argus::UniqueObj m_previewStream; ///< Argus preview stream + + /** + * Callback when the device is opened/closed. + */ + bool onDeviceOpenChanged(const Observed &source); + + /** + * Callback when the sensorModeValid is changed. + */ + bool onSensorModeValidChanged(const Observed &source); + + /** + * Restart when output size changes + */ + bool restartStreams(const Observed &source); +}; + +}; // namespace ArgusSamples + +#endif // TASK_STILL_CAPTURE_H diff --git a/jetson_multimedia_api/argus/apps/camera/modules/tasks/VideoRecord.cpp b/jetson_multimedia_api/argus/apps/camera/modules/tasks/VideoRecord.cpp new file mode 100644 index 0000000..adfc47c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/tasks/VideoRecord.cpp @@ -0,0 +1,356 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include +#include + +#include "VideoRecord.h" +#include "Composer.h" +#include "Dispatcher.h" +#include "Error.h" +#include "EventThread.h" +#include "PerfTracker.h" + +namespace ArgusSamples +{ + +TaskVideoRecord::TaskVideoRecord() + : m_initialized(false) + , m_running(false) + , m_wasRunning(false) + , m_prevRunning(false) + , m_recording(false) + , m_captureIndex(0) + , m_videoPipeline(NULL) +{ +} + +TaskVideoRecord::~TaskVideoRecord() +{ + shutdown(); +} + +bool TaskVideoRecord::initialize() +{ + if (m_initialized) + return true; + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR(dispatcher.m_deviceOpen.registerObserver(this, + static_cast(&TaskVideoRecord::onDeviceOpenChanged))); + PROPAGATE_ERROR(dispatcher.m_sensorModeValid.registerObserver(this, + static_cast(&TaskVideoRecord::onSensorModeValidChanged))); + PROPAGATE_ERROR(dispatcher.m_outputSize.registerObserver(this, + static_cast(&TaskVideoRecord::restartStreams))); + PROPAGATE_ERROR(dispatcher.m_captureYuvFormat.registerObserver(this, + static_cast(&TaskVideoRecord::restartStreams))); + + m_perfTracker.reset(new SessionPerfTracker()); + if (!m_perfTracker) + ORIGINATE_ERROR("Out of memory"); + + m_initialized = true; + + return true; +} + +bool TaskVideoRecord::restartStreams(__attribute__((unused)) const Observed &source) +{ + if (m_running) + { + PROPAGATE_ERROR(stop()); + PROPAGATE_ERROR(start()); + } + return true; +} + +bool TaskVideoRecord::onDeviceOpenChanged(const Observed &source) +{ + const bool isOpen = static_cast&>(source).get(); + + // If the current device is closed the request needs to be recreated on the new device. Stop + // and then start when the device is opened again. + if (!isOpen) + { + m_wasRunning = m_running; + PROPAGATE_ERROR(stop()); + } + else if (m_wasRunning) + { + m_wasRunning = false; + PROPAGATE_ERROR(start()); + } + + return true; +} + +bool TaskVideoRecord::onSensorModeValidChanged(const Observed &source) +{ + const bool isTrue = static_cast&>(source).get(); + + if (!isTrue) + { + m_prevRunning = m_running; + if (m_running) + { + PROPAGATE_ERROR(stop()); + } + } + else if (m_prevRunning) + { + m_prevRunning = false; + PROPAGATE_ERROR(start()); + } + + return true; +} + +bool TaskVideoRecord::start() +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + + if (m_running) + return true; + + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_TASK_START)); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + Composer &composer = Composer::getInstance(); + + PROPAGATE_ERROR(dispatcher.createRequest(m_request, Argus::CAPTURE_INTENT_VIDEO_RECORD)); + + // Create the preview stream + PROPAGATE_ERROR(dispatcher.createOutputStream(m_request.get(), false, m_previewStream)); + + // bind the preview stream to the composer + Argus::IEGLOutputStream *iEGLOutputStream = + Argus::interface_cast(m_previewStream.get()); + if (!iEGLOutputStream) + ORIGINATE_ERROR("Failed to get IEGLOutputStream interface"); + + PROPAGATE_ERROR(composer.bindStream(iEGLOutputStream->getEGLStream())); + + // Enable the preview stream + PROPAGATE_ERROR(dispatcher.enableOutputStream(m_request.get(), m_previewStream.get())); + + const Argus::Size2D streamSize = iEGLOutputStream->getResolution(); + PROPAGATE_ERROR(composer.setStreamAspectRatio(iEGLOutputStream->getEGLStream(), + (float)streamSize.width() / (float)streamSize.height())); + PROPAGATE_ERROR(composer.setStreamActive(iEGLOutputStream->getEGLStream(), true)); + + // start the preview + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_ISSUE_CAPTURE)); + PROPAGATE_ERROR(dispatcher.startRepeat(m_request.get())); + + m_running = true; + + return true; +} + +bool TaskVideoRecord::stop() +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + if (!m_running) + return true; + + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_REQUESTED)); + + if (m_recording) + PROPAGATE_ERROR(stopRecording()); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + // stop the repeating request + PROPAGATE_ERROR(dispatcher.stopRepeat()); + + PROPAGATE_ERROR(dispatcher.waitForIdle()); + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_FLUSH_DONE)); + + if (m_previewStream) + { + if (m_request) + PROPAGATE_ERROR(dispatcher.disableOutputStream(m_request.get(), m_previewStream.get())); + + Argus::IEGLOutputStream *iEGLOutputStream = + Argus::interface_cast(m_previewStream); + if (!iEGLOutputStream) + ORIGINATE_ERROR("Failed to get IEGLOutputStream interface"); + + // disconnect the EGL stream + iEGLOutputStream->disconnect(); + + // unbind the preview stream from the composer + PROPAGATE_ERROR(Composer::getInstance().unbindStream(iEGLOutputStream->getEGLStream())); + + m_previewStream.reset(); + } + PROPAGATE_ERROR_CONTINUE(m_request.reset()); + + PROPAGATE_ERROR(m_perfTracker->onEvent(SESSION_EVENT_CLOSE_DONE)); + + m_running = false; + + return true; +} + +bool TaskVideoRecord::startRecording() +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + if (!m_running) + ORIGINATE_ERROR("Not running"); + if (m_recording) + ORIGINATE_ERROR("Recording had already been started, can't start again"); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + // setup the video pipeline with the video stream + m_videoPipeline = new VideoPipeline; + if (!m_videoPipeline) + ORIGINATE_ERROR("Out of memory"); + + // Create the video output stream + PROPAGATE_ERROR(dispatcher.createOutputStream(m_request.get(), false, m_videoStream)); + + Argus::Size2D outputSize; + PROPAGATE_ERROR(dispatcher.getOutputSize(&outputSize)); + + // build the file name + std::ostringstream fileName; + fileName << dispatcher.m_outputPath.get(); + if (dispatcher.m_outputPath.get() != "/dev/null") + fileName << "/video" << std::setfill('0') << std::setw(4) << m_captureIndex; + ++m_captureIndex; + + PROPAGATE_ERROR(m_videoPipeline->setupForRecording( + Argus::interface_cast(m_videoStream)->getEGLStream(), + outputSize.width(), outputSize.height(), + dispatcher.m_frameRate.get(), fileName.str().c_str(), dispatcher.m_videoFormat.get(), + dispatcher.m_videoFileType.get(), dispatcher.m_videoBitRate.get())); + + // start recording + PROPAGATE_ERROR(m_videoPipeline->start()); + + // Enable the video output stream + PROPAGATE_ERROR(dispatcher.enableOutputStream(m_request.get(), m_videoStream.get())); + + // restart the repeating request to ensure the changed request is executed + PROPAGATE_ERROR(dispatcher.startRepeat(m_request.get())); + + PROPAGATE_ERROR(dispatcher.message("Started recording video at %dx%d, saving to '%s'\n", + outputSize.width(), outputSize.height(), fileName.str().c_str())); + + m_recording = true; + + return true; +} + +bool TaskVideoRecord::stopRecording() +{ + if (!m_initialized) + ORIGINATE_ERROR("Not initialized"); + + if (!m_recording) + ORIGINATE_ERROR("Recording had not been started, can't stop"); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + // stop the repeating request + PROPAGATE_ERROR(dispatcher.stopRepeat()); + + // stop recording + PROPAGATE_ERROR(m_videoPipeline->stop()); + + // Wait until all pending captures are done before destroying the stream + PROPAGATE_ERROR(dispatcher.waitForIdle()); + + if (m_videoStream) + { + // disable the output stream + PROPAGATE_ERROR(dispatcher.disableOutputStream(m_request.get(), m_videoStream.get())); + m_videoStream.reset(); + } + + // start the repeating request again to get the preview working + PROPAGATE_ERROR(dispatcher.startRepeat(m_request.get())); + + if (m_videoPipeline) + { + // destroy the video pipeline + PROPAGATE_ERROR(m_videoPipeline->destroy()); + delete m_videoPipeline; + m_videoPipeline = NULL; + } + + PROPAGATE_ERROR(dispatcher.message("Stopped recording video\n")); + + m_recording = false; + + return true; +} + +bool TaskVideoRecord::toggleRecording() +{ + if (m_recording) + PROPAGATE_ERROR(stopRecording()); + else + PROPAGATE_ERROR(startRecording()); + return true; +} + +bool TaskVideoRecord::shutdown() +{ + if (!m_initialized) + return true; + + PROPAGATE_ERROR_CONTINUE(stop()); + + PROPAGATE_ERROR_CONTINUE(m_perfTracker->shutdown()); + m_perfTracker.reset(); + + Dispatcher &dispatcher = Dispatcher::getInstance(); + + PROPAGATE_ERROR_CONTINUE(dispatcher.m_outputSize.unregisterObserver(this, + static_cast(&TaskVideoRecord::restartStreams))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_sensorModeValid.unregisterObserver(this, + static_cast(&TaskVideoRecord::onSensorModeValidChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_deviceOpen.unregisterObserver(this, + static_cast(&TaskVideoRecord::onDeviceOpenChanged))); + PROPAGATE_ERROR_CONTINUE(dispatcher.m_captureYuvFormat.unregisterObserver(this, + static_cast(&TaskVideoRecord::restartStreams))); + + m_initialized = false; + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/modules/tasks/VideoRecord.h b/jetson_multimedia_api/argus/apps/camera/modules/tasks/VideoRecord.h new file mode 100644 index 0000000..0ad11a6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/modules/tasks/VideoRecord.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TASK_VIDEO_RECORD_H +#define TASK_VIDEO_RECORD_H + +#include + +#include "ITask.h" +#include "UniquePointer.h" +#include "IObserver.h" +#include "TrackedUniqueObject.h" + +namespace ArgusSamples +{ + +class SessionPerfTracker; +class VideoPipeline; + +/** + * This task records a video and saves it to a file using gstreamer. It also creates a preview + * stream and display it using the composer. + */ +class TaskVideoRecord : public ITask, public IObserver +{ +public: + TaskVideoRecord(); + virtual ~TaskVideoRecord(); + + virtual bool initialize(); + virtual bool shutdown(); + + virtual bool start(); + virtual bool stop(); + + /** + * Start recording + */ + bool startRecording(); + /** + * Stop recording + */ + bool stopRecording(); + /** + * Toggle recording + */ + bool toggleRecording(); + +private: + bool m_initialized; ///< set if initialized + bool m_running; ///< set if preview is running + bool m_wasRunning; ///< set if was running before the device had been closed + bool m_prevRunning; ///< set if was running before the sensorModeValid is set to false + bool m_recording; ///< if set recording is active + uint32_t m_captureIndex; ///< Incrementing capture index + + VideoPipeline *m_videoPipeline; ///< video pipeline + + UniquePointer m_perfTracker; + + TrackedUniqueObj m_request; ///< Argus request + Argus::UniqueObj m_videoStream; ///< Argus video output stream + Argus::UniqueObj m_previewStream; ///< Argus preview output stream + + /** + * Callback when the device is opened/closed. + */ + bool onDeviceOpenChanged(const Observed &source); + + /** + * Callback when the sensorModeValid is changed. + */ + bool onSensorModeValidChanged(const Observed &source); + + /** + * Restart when output size changes + */ + bool restartStreams(const Observed &source); +}; + +}; // namespace ArgusSamples + +#endif // TASK_VIDEO_RECORD_H diff --git a/jetson_multimedia_api/argus/apps/camera/renderer/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/renderer/CMakeLists.txt new file mode 100644 index 0000000..09b4898 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/renderer/CMakeLists.txt @@ -0,0 +1,50 @@ +# Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +project(arguscamerarenderer) + +set(SOURCES + Composer.cpp + StreamConsumer.cpp + ) + +include_directories( + ${CMAKE_SOURCE_DIR}/apps/camera/common + ${CMAKE_SOURCE_DIR}/apps/camera/modules + ${CMAKE_SOURCE_DIR}/samples/utils + ${OPENGLES_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ) + +add_library(${PROJECT_NAME} STATIC ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + ${OPENGLES_LIBRARIES} + ${EGL_LIBRARIES} + arguscameracommon + arguscameramodules + argussampleutils + ) diff --git a/jetson_multimedia_api/argus/apps/camera/renderer/Composer.cpp b/jetson_multimedia_api/argus/apps/camera/renderer/Composer.cpp new file mode 100644 index 0000000..c30acd5 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/renderer/Composer.cpp @@ -0,0 +1,421 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#define GL_GLEXT_PROTOTYPES + +#include +#include + +#include + +#include "Error.h" +#include "UniquePointer.h" +#include "InitOnce.h" + +#include "Composer.h" +#include "Window.h" +#include "StreamConsumer.h" +#include "PerfTracker.h" + +namespace ArgusSamples +{ + +Composer::Composer() + : m_initialized(false) + , m_program(0) + , m_vbo(0) + , m_windowWidth(0) + , m_windowHeight(0) + , m_windowAspectRatio(1.0f) +{ +} + +Composer::~Composer() +{ + if (!shutdown()) + REPORT_ERROR("Failed to shutdown composer"); +} + +Composer &Composer::getInstance() +{ + static InitOnce initOnce; + static Composer instance; + + if (initOnce.begin()) + { + if (instance.initialize()) + { + initOnce.complete(); + } + else + { + initOnce.failed(); + REPORT_ERROR("Initalization failed"); + } + } + + return instance; +} + +bool Composer::initialize() +{ + if (m_initialized) + return true; + + Window &window = Window::getInstance(); + + PROPAGATE_ERROR(m_display.initialize(window.getEGLNativeDisplay())); + + PROPAGATE_ERROR(m_mutex.initialize()); + + // initialize the window size + PROPAGATE_ERROR(onResize(window.getWidth(), window.getHeight())); + + // and register as observer for size changes + PROPAGATE_ERROR(window.registerObserver(this)); + + PROPAGATE_ERROR(Thread::initialize()); + PROPAGATE_ERROR(Thread::waitRunning()); + + m_initialized = true; + + return true; +} + +bool Composer::shutdown() +{ + if (!m_initialized) + return true; + + PROPAGATE_ERROR_CONTINUE(Window::getInstance().unregisterObserver(this)); + + // request shutdown of the thread + PROPAGATE_ERROR_CONTINUE(Thread::requestShutdown()); + + PROPAGATE_ERROR_CONTINUE(Thread::shutdown()); + + PROPAGATE_ERROR_CONTINUE(m_display.cleanup()); + + m_initialized = false; + + return true; +} + +bool Composer::bindStream(EGLStreamKHR eglStream) +{ + if (eglStream == EGL_NO_STREAM_KHR) + ORIGINATE_ERROR("Invalid stream"); + + PROPAGATE_ERROR(initialize()); + + UniquePointer streamConsumer(new StreamConsumer(eglStream)); + if (!streamConsumer) + ORIGINATE_ERROR("Out of memory"); + + // add the new stream consumer to the stream list + { + ScopedMutex sm(m_mutex); + PROPAGATE_ERROR(sm.expectLocked()); + + m_streams.push_back(Stream(streamConsumer.get())); + } + + // wait until the stream is connected + while (streamConsumer->getStreamState() != EGL_STREAM_STATE_CONNECTING_KHR) + usleep(1000); + streamConsumer.release(); + + return true; +} + +bool Composer::unbindStream(EGLStreamKHR eglStream) +{ + ScopedMutex sm(m_mutex); + PROPAGATE_ERROR(sm.expectLocked()); + + for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it) + { + if (it->m_consumer->isEGLStream(eglStream)) + { + // set the shutdown flag, the composer thread will do the actual shutdown + it->m_shutdown = true; + return true; + } + } + + ORIGINATE_ERROR("Stream was not bound"); + + return true; +} + +bool Composer::setStreamActive(EGLStreamKHR eglStream, bool active) +{ + ScopedMutex sm(m_mutex); + PROPAGATE_ERROR(sm.expectLocked()); + + for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it) + { + if (it->m_consumer->isEGLStream(eglStream)) + { + it->m_active = active; + return true; + } + } + + ORIGINATE_ERROR("Stream was not bound"); + + return true; +} + +bool Composer::setStreamAspectRatio(EGLStreamKHR eglStream, float aspectRatio) +{ + ScopedMutex sm(m_mutex); + PROPAGATE_ERROR(sm.expectLocked()); + + for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it) + { + if (it->m_consumer->isEGLStream(eglStream)) + { + PROPAGATE_ERROR(it->m_consumer->setStreamAspectRatio(aspectRatio)); + return true; + } + } + + ORIGINATE_ERROR("Stream was not bound"); + + return true; +} + +bool Composer::onResize(uint32_t width, uint32_t height) +{ + m_windowWidth = width; + m_windowHeight = height; + m_windowAspectRatio = (float)width / (float)height; + return true; +} + +bool Composer::threadInitialize() +{ + // Initialize the GL context and make it current. + PROPAGATE_ERROR(m_context.initialize(&Window::getInstance())); + PROPAGATE_ERROR(m_context.makeCurrent()); + + // Create the shader program. + static const char vtxSrc[] = + "#version 300 es\n" + "#extension GL_ARB_explicit_uniform_location : require\n" + "in layout(location = 0) vec2 vertex;\n" + "out vec2 vTexCoord;\n" + "layout(location = 0) uniform vec2 offset;\n" + "layout(location = 1) uniform vec2 scale;\n" + "void main() {\n" + " gl_Position = vec4((offset + vertex * scale) * 2.0 - 1.0, 0.0, 1.0);\n" + " vTexCoord = vec2(vertex.x, 1.0 - vertex.y);\n" + "}\n"; + static const char frgSrc[] = + "#version 300 es\n" + "#extension GL_OES_EGL_image_external : require\n" + "precision highp float;\n" + "uniform samplerExternalOES texSampler;\n" + "in vec2 vTexCoord;\n" + "out vec4 fragColor;\n" + "void main() {\n" + " fragColor = texture2D(texSampler, vTexCoord);\n" + "}\n"; + PROPAGATE_ERROR(m_context.createProgram(vtxSrc, frgSrc, &m_program)); + + glUseProgram(m_program); + + // Setup vertex state. + static const GLfloat vertices[] = { + 0.0f, 0.0f, + 0.0f, 1.0f, + 1.0f, 0.0f, + 1.0f, 1.0f, + }; + glGenBuffers(1, &m_vbo); + glBindBuffer(GL_ARRAY_BUFFER, m_vbo); + if (!m_vbo) + ORIGINATE_ERROR("Failed to create VBO"); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glEnableVertexAttribArray(0); + + // sync to the display refresh rate + if (eglSwapInterval(m_display.get(), 1) != EGL_TRUE) + ORIGINATE_ERROR("Failed to set the swap interval"); + + return true; +} + +bool Composer::renderStreams(uint32_t activeStreams) +{ + glViewport(0,0, m_windowWidth, m_windowHeight); + + glClear(GL_COLOR_BUFFER_BIT); + + const uint32_t cells = static_cast(ceil(sqrt(activeStreams))); + const float scaleX = 1.0f / cells; + const float scaleY = 1.0f / cells; + uint32_t offsetX = 0, offsetY = cells - 1; + + { + ScopedMutex sm(m_mutex); + PROPAGATE_ERROR(sm.expectLocked()); + + for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it) + { + if (!it->m_active) + continue; + + const EGLint streamState = it->m_consumer->getStreamState(); + if ((streamState == EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR) || + (streamState == EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR)) + { + glBindTexture(GL_TEXTURE_EXTERNAL_OES, it->m_consumer->getStreamTextureID()); + + // scale according to aspect ratios + float sizeX = it->m_consumer->getStreamAspectRatio() / m_windowAspectRatio; + float sizeY = 1.0f; + + if (sizeX > sizeY) + { + sizeY /= sizeX; + sizeX = 1.0f; + } + else + { + sizeX /= sizeY; + sizeY = 1.0f; + } + + glUniform2f(0, + (offsetX - (sizeX - 1.0f) * 0.5f) * scaleX, + (offsetY - (sizeY - 1.0f) * 0.5f) * scaleY); + glUniform2f(1, scaleX * sizeX, scaleY * sizeY); + + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + } + + ++offsetX; + if (offsetX == cells) + { + --offsetY; + offsetX = 0; + } + } + } + + PROPAGATE_ERROR(m_context.swapBuffers()); + + PROPAGATE_ERROR(PerfTracker::getInstance().onEvent(GLOBAL_EVENT_DISPLAY)); + + return true; +} + +bool Composer::threadExecute() +{ + bool render = false; + uint32_t activeStreams = 0; + + { + ScopedMutex sm(m_mutex); + PROPAGATE_ERROR(sm.expectLocked()); + + if (m_streams.size() == 0) + return true; + + // first iterate through the streams and check if there are streams which should be shutdown + // also count the active streams + for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it) + { + if (it->m_shutdown) + { + // shutdown the stream consumer if it had marked so + PROPAGATE_ERROR_CONTINUE(it->m_consumer->shutdown()); + delete it->m_consumer; + it = m_streams.erase(it); + continue; + } + + // do the acquire in any case even if the stream is not active (needed to get the + // transition to connecting state) + bool acquiredNewFrame = false; + PROPAGATE_ERROR(it->m_consumer->acquire(&acquiredNewFrame)); + + // check if the stream is active + if (it->m_active) + { + ++activeStreams; + // if a new frame is available we need to render + if (acquiredNewFrame) + render = true; + } + } + } + + if (render) + { + PROPAGATE_ERROR(renderStreams(activeStreams)); + } + else + { + // wait some time and then check again if new frames are available + usleep(1000); + } + + return true; +} + +bool Composer::threadShutdown() +{ + for (StreamList::iterator it = m_streams.begin(); it != m_streams.end(); ++it) + { + PROPAGATE_ERROR_CONTINUE(it->m_consumer->shutdown()); + delete it->m_consumer; + } + m_streams.clear(); + + if (m_program) + { + glDeleteProgram(m_program); + m_program = 0; + } + if (m_vbo) + { + glDeleteBuffers(1, &m_vbo); + m_vbo = 0; + } + + PROPAGATE_ERROR(m_context.cleanup()); + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/renderer/Composer.h b/jetson_multimedia_api/argus/apps/camera/renderer/Composer.h new file mode 100644 index 0000000..b1d289f --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/renderer/Composer.h @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef COMPOSER_H +#define COMPOSER_H + +#include "EGLGlobal.h" + +#include + +#include "Window.h" +#include "Thread.h" +#include "Mutex.h" + +#include "GLContext.h" + +namespace ArgusSamples +{ + +class StreamConsumer; + +/** + * The composer is used to render multiple EGL streams into the windows. The streams are arranged + * into a regular grid. + */ +class Composer : public Thread, public Window::IResizeObserver +{ +public: + /** + * Get the composer instance. + */ + static Composer &getInstance(); + + /** + * Shutdown, free all resources + */ + bool shutdown(); + + /** + * Bind an EGL stream. A bound and active stream is rendered. Newly bound streams are inactive. + * + * @param eglStream [in] + */ + bool bindStream(EGLStreamKHR eglStream); + + /** + * Unbind a bound EGL stream. + * + * @param eglStream [in] + */ + bool unbindStream(EGLStreamKHR eglStream); + + /** + * Set the active state of the stream, only active streams are rendered + * + * @param eglStream [in] + * @param active [in] + */ + bool setStreamActive(EGLStreamKHR eglStream, bool active); + + /** + * Set the stream aspect ratio + * + * @param eglStream [in] + * @param aspectRatio [in] aspect ration of the images transported by the stream + */ + bool setStreamAspectRatio(EGLStreamKHR eglStream, float aspectRatio); + + /** + * Get the EGL display + */ + EGLDisplay getEGLDisplay() + { + if (initialize()) + return m_display.get(); + + return EGL_NO_DISPLAY; + } + +private: + Composer(); + ~Composer(); + + // this is a singleton, hide copy constructor etc. + Composer(const Composer&); + Composer& operator=(const Composer&); + + bool initialize(); + + /** @name Thread methods */ + /**@{*/ + virtual bool threadInitialize(); + virtual bool threadExecute(); + virtual bool threadShutdown(); + /**@}*/ + + /** @name IResizeObserver methods */ + /**@{*/ + virtual bool onResize(uint32_t width, uint32_t height); + /**@}*/ + + bool renderStreams(uint32_t activeStreams); + + bool m_initialized; ///< set if initialized + + EGLDisplayHolder m_display; ///< EGL display + + GLContext m_context; ///< GL context + uint32_t m_program; ///< program to render streams + uint32_t m_vbo; ///< vertex buffer object + uint32_t m_windowWidth; ///< window width + uint32_t m_windowHeight; ///< window height + float m_windowAspectRatio; ///< window aspect ratio + + Mutex m_mutex; ///< to protect access to the stream array + + /** + * Each bound EGL stream has a stream consumer and can be active or inactive. + */ + class Stream + { + public: + explicit Stream(StreamConsumer *consumer) + : m_consumer(consumer) + , m_active(false) + , m_shutdown(false) + { + } + + StreamConsumer *m_consumer; ///< the stream consumer + bool m_active; ///< if set then the stream is active and rendered + bool m_shutdown; ///< shutdown and remove the stream + }; + + typedef std::list StreamList; ///< a list of streams + StreamList m_streams; ///< the list of composed streams +}; + +}; // namespace ArgusSamples + +#endif // COMPOSER_H diff --git a/jetson_multimedia_api/argus/apps/camera/renderer/StreamConsumer.cpp b/jetson_multimedia_api/argus/apps/camera/renderer/StreamConsumer.cpp new file mode 100644 index 0000000..667cfd9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/renderer/StreamConsumer.cpp @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#define GL_GLEXT_PROTOTYPES + +#include +#include + +#include + +#include "StreamConsumer.h" +#include "Composer.h" +#include "Error.h" +#include "Util.h" // for TimeValue + +namespace ArgusSamples +{ + +StreamConsumer::StreamConsumer(EGLStreamKHR eglStream) + : m_initialized(false) + , m_eglStream(eglStream) + , m_streamState(EGL_NONE) + , m_streamTexture(0) + , m_aspectRatio(1.0f) +{ +} + +StreamConsumer::~StreamConsumer() +{ + if (!shutdown()) + REPORT_ERROR("Failed to shutdown stream consumer"); +} + +bool StreamConsumer::initialize() +{ + if (m_initialized) + return true; + + // Create an external texture and connect it to the stream as a the consumer. + glGenTextures(1, &m_streamTexture); + if (m_streamTexture == 0) + ORIGINATE_ERROR("Failed to create GL texture"); + + glBindTexture(GL_TEXTURE_EXTERNAL_OES, m_streamTexture); + if (!eglStreamConsumerGLTextureExternalKHR(Composer::getInstance().getEGLDisplay(), + m_eglStream)) + { + ORIGINATE_ERROR("Unable to connect GL as consumer"); + } + glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0); + + m_initialized = true; + + return true; +} + +bool StreamConsumer::shutdown() +{ + if (m_streamTexture) + { + glDeleteTextures(1, &m_streamTexture); + m_streamTexture = 0; + } + + m_initialized = false; + + return true; +} + +bool StreamConsumer::isEGLStream(EGLStreamKHR eglStream) const +{ + return (m_eglStream == eglStream); +} + +uint32_t StreamConsumer::getStreamTextureID() const +{ + return m_streamTexture; +} + +bool StreamConsumer::setStreamAspectRatio(float aspectRatio) +{ + m_aspectRatio = aspectRatio; + return true; +} + +float StreamConsumer::getStreamAspectRatio() const +{ + return m_aspectRatio; +} + +bool StreamConsumer::acquire(bool *acquiredNewFrame) +{ + if (!m_initialized) + PROPAGATE_ERROR(initialize()); + + const EGLDisplay display = Composer::getInstance().getEGLDisplay(); + + // check the stream state + if (!eglQueryStreamKHR(display, m_eglStream, EGL_STREAM_STATE_KHR, &m_streamState)) + ORIGINATE_ERROR("eglQueryStreamKHR failed (error 0x%04x)", eglGetError()); + + if ((m_streamState == EGL_BAD_STREAM_KHR) || + (m_streamState == EGL_BAD_STATE_KHR)) + { + ORIGINATE_ERROR("EGL stream is in bad state (0x%04x)", m_streamState); + } + else if (m_streamState == EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR) + { + // acquire the new frame + if (!eglStreamConsumerAcquireKHR(display, m_eglStream)) + { + // if the acquire failed check if the stream had been disconnected + const EGLint eglError = eglGetError(); + if (eglError == EGL_BAD_STATE_KHR) + m_streamState = EGL_BAD_STATE_KHR; + else + ORIGINATE_ERROR("Failed to acquire from egl stream (error 0x%04x)", eglError); + } + else + { + if (acquiredNewFrame) + *acquiredNewFrame = true; + } + } + else if ((m_streamState == EGL_NONE) || + (m_streamState == EGL_STREAM_STATE_CONNECTING_KHR)) + { + // if the producer is not yet connected just return + } + else if ((m_streamState == EGL_STREAM_STATE_EMPTY_KHR) || + (m_streamState == EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR)) + { + // no frame or no new frame, nothing to do + } + else if (m_streamState == EGL_STREAM_STATE_DISCONNECTED_KHR) + { + // producer had been disconnected, ignore + } + else + { + ORIGINATE_ERROR("Unhandled EGL stream state (0x%04x)", m_streamState); + } + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/renderer/StreamConsumer.h b/jetson_multimedia_api/argus/apps/camera/renderer/StreamConsumer.h new file mode 100644 index 0000000..675b101 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/renderer/StreamConsumer.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef STREAM_CONSUMER_H +#define STREAM_CONSUMER_H + +#include +#include + +namespace ArgusSamples +{ + +/** + * The stream consumer is connecting to a EGL stream and consumes the frames into a GL texture. + */ +class StreamConsumer +{ +public: + explicit StreamConsumer(EGLStreamKHR eglStream); + ~StreamConsumer(); + + bool initialize(); + bool shutdown(); + + bool isEGLStream(EGLStreamKHR eglStream) const; + uint32_t getStreamTextureID() const; + + bool setStreamAspectRatio(float aspectRatio); + float getStreamAspectRatio() const; + + /** + * @returns the cached stream state + */ + EGLint getStreamState() const + { + return m_streamState; + } + + /** + * Check the stream state and acquire a new frame if available + * + * @param acquiredNewFrame [out] set to true if a new frame had been acquired + */ + bool acquire(bool *acquiredNewFrame); + +private: + bool m_initialized; + EGLStreamKHR m_eglStream; + EGLint m_streamState; ///< cached stream state + uint32_t m_streamTexture; + float m_aspectRatio; ///< aspect ration of the images transported by the stream + + /** + * Hide default constructor + */ + StreamConsumer(); +}; + +}; // namespace ArgusSamples + +#endif // STREAM_CONSUMER_H diff --git a/jetson_multimedia_api/argus/apps/camera/ui/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/ui/CMakeLists.txt new file mode 100644 index 0000000..dcc0474 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/CMakeLists.txt @@ -0,0 +1,33 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +add_subdirectory(camera) +add_subdirectory(capture) +add_subdirectory(common) +add_subdirectory(gallery) +add_subdirectory(multiExposure) +add_subdirectory(multiSession) +add_subdirectory(video) diff --git a/jetson_multimedia_api/argus/apps/camera/ui/camera/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/ui/camera/CMakeLists.txt new file mode 100644 index 0000000..8a0e5a8 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/camera/CMakeLists.txt @@ -0,0 +1,76 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +project(argus_camera) + +# begin generate source +set(GEN_INPUT ${CMAKE_CURRENT_SOURCE_DIR}/cameraBuilder.glade) +set(GEN_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cameraBuilder.h) + +add_custom_command( + OUTPUT ${GEN_OUTPUT} + COMMAND xxd -i < ${GEN_INPUT} > ${GEN_OUTPUT} + DEPENDS ${GEN_INPUT} +) +#end generate source + +set(SOURCES + Main.cpp + ${GEN_OUTPUT} + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/apps/camera/ui/capture + ${CMAKE_SOURCE_DIR}/apps/camera/ui/common + ${CMAKE_SOURCE_DIR}/apps/camera/ui/gallery + ${CMAKE_SOURCE_DIR}/apps/camera/ui/multiExposure + ${CMAKE_SOURCE_DIR}/apps/camera/ui/multiSession + ${CMAKE_SOURCE_DIR}/apps/camera/ui/video + ${CMAKE_SOURCE_DIR}/apps/camera/common + ${CMAKE_SOURCE_DIR}/apps/camera/modules + ${CMAKE_SOURCE_DIR}/apps/camera/renderer + ${CMAKE_SOURCE_DIR}/samples/utils + ${CMAKE_CURRENT_BINARY_DIR} + ) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + arguscamerauicapture + arguscamerauicommon + arguscamerauigallery + arguscamerauimultiexposure + arguscamerauimultisession + arguscamerauivideo + arguscameracommon + arguscameramodules + arguscamerarenderer + argussampleutils + ) + +install(TARGETS ${PROJECT_NAME} DESTINATION bin) diff --git a/jetson_multimedia_api/argus/apps/camera/ui/camera/Main.cpp b/jetson_multimedia_api/argus/apps/camera/ui/camera/Main.cpp new file mode 100644 index 0000000..e79a93c --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/camera/Main.cpp @@ -0,0 +1,361 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// For Bug 200239385 and Bug 200243017 +// There are asserts while operating the gallery. +// With the following #define commented out, access to the gallery is disabled until it can be fixed +//#define GALLERY_SUPPORTED + +#include + +#include + +#include "Error.h" +#include "UniquePointer.h" +#include "Window.h" +#include "Value.h" +#include "Validator.h" +#include "IObserver.h" + +#include "App.h" +#include "AppModuleCapture.h" +#include "AppModuleVideo.h" +#include "AppModuleMultiExposure.h" +#include "AppModuleMultiSession.h" +#include "AppModuleGallery.h" +#include "AppModuleGeneric.h" + +namespace ArgusSamples +{ + +#if (WINDOW_GUI_SUPPORT == WINDOW_GUI_GTK) +/** + * GTK UI builder string + */ +static const char builderString[] = +{ +#include "cameraBuilder.h" + , 0x00 +}; +#endif // (WINDOW_GUI_SUPPORT == WINDOW_GUI_GTK) + +/** + * Supported modules + */ +enum Modules +{ + MODULE_CAPTURE, + MODULE_VIDEO, + MODULE_MULTI_EXPOSURE, + MODULE_MULTI_SESSION, +#ifdef GALLERY_SUPPORTED + MODULE_GALLERY, +#endif + MODULE_FIRST = MODULE_CAPTURE, +#ifdef GALLERY_SUPPORTED + MODULE_LAST = MODULE_GALLERY, +#else + MODULE_LAST = MODULE_MULTI_SESSION, +#endif + MODULE_COUNT, + MODULE_INVALID = -1 +}; + +// valid module values +static const ValidatorEnum::ValueStringPair s_modules[] = +{ + { MODULE_CAPTURE, "Capture" }, + { MODULE_VIDEO, "Video" }, + { MODULE_MULTI_EXPOSURE, "Multi Exposure" }, +#ifdef GALLERY_SUPPORTED + { MODULE_MULTI_SESSION, "Multi Session" }, + { MODULE_GALLERY, "Gallery" } +#else + { MODULE_MULTI_SESSION, "Multi Session" } +#endif +}; + +class CameraApp : public App, public IObserver +{ +public: + explicit CameraApp(const char *appName); + ~CameraApp(); + + /** @name App methods */ + /**@{*/ + virtual bool initialize(); + virtual bool shutdown(); + virtual bool start(); + /**@}*/ + +private: + /** + * Hide default constructor + */ + CameraApp(); + + /** @name IKeyObserver methods */ + /**@{*/ + virtual bool onKey(const Key &key); + /**@}*/ + + bool onModuleChanged(const Observed &source); + + AppModuleGeneric m_moduleGeneric; + + Value m_module; ///< active module + Modules m_prevModule; ///< previously active module + + Modules m_activeModuleBeforeGallery; ///< active module when switching to gallery + + std::vector m_modules; ///< all modules + + Window::IGuiMenuBar *m_iGuiMenuBar; ///< menu bar + Window::IGuiContainer *m_iGuiContainerConfig; ///< container for config GUI elements +}; + +CameraApp::CameraApp(const char *appName) + : App(appName) + , m_module(new ValidatorEnum( + s_modules, sizeof(s_modules) / sizeof(s_modules[0])), + MODULE_FIRST) + , m_prevModule(MODULE_INVALID) + , m_activeModuleBeforeGallery(MODULE_INVALID) + , m_iGuiMenuBar(NULL) + , m_iGuiContainerConfig(NULL) +{ +} + +CameraApp::~CameraApp() +{ + shutdown(); +} + +bool CameraApp::initialize() +{ + PROPAGATE_ERROR(App::initialize()); + + const char *description = + "Press 'm' to toggle between modules (still capture, video recording, multi exposure, \n" + "multi session).\n" +#ifdef GALLERY_SUPPORTED + "Press 'g' to switch to gallery and back. Use left and right arrow keys to move to next\n" + "and previous image or video.\n" +#endif + "Press 'space' to execute the module action (capture an image, start and stop recording,\n" + "start and stop video playback.\n"; + PROPAGATE_ERROR(m_options.addDescription(description)); + + PROPAGATE_ERROR(m_options.addOption( + createValueOption("module", 0, "MODULE", "switch to module MODULE.", m_module))); + +#if (WINDOW_GUI_SUPPORT == WINDOW_GUI_GTK) + Window::IGuiBuilder *builder = NULL; + PROPAGATE_ERROR(Window::IGuiBuilder::create(builderString, &builder)); + + UniquePointer createdBuilder(builder); + UniquePointer createdWindow(createdBuilder->createElement("window")); + UniquePointer createdView(createdBuilder->createElement("view")); + + m_iGuiMenuBar = + static_cast(createdBuilder->createElement("menuBar")); + m_iGuiContainerConfig = + static_cast(createdBuilder->createElement("config")); + + // set the window GUI + PROPAGATE_ERROR(Window::getInstance().setWindowGui(createdBuilder.get(), createdWindow.get(), + createdView.get())); + + createdView.release(); + createdWindow.release(); + createdBuilder.release(); +#endif // (WINDOW_GUI_SUPPORT == WINDOW_GUI_GTK) + + m_modules.resize(MODULE_COUNT); + + // create modules + UniquePointer module; + module.reset(new AppModuleCapture); + if (!module) + ORIGINATE_ERROR("Out of memory"); + m_modules[MODULE_CAPTURE] = module.release(); + + module.reset(new AppModuleVideo); + if (!module) + ORIGINATE_ERROR("Out of memory"); + m_modules[MODULE_VIDEO] = module.release(); + + module.reset(new AppModuleMultiExposure); + if (!module) + ORIGINATE_ERROR("Out of memory"); + m_modules[MODULE_MULTI_EXPOSURE] = module.release(); + + module.reset(new AppModuleMultiSession); + if (!module) + ORIGINATE_ERROR("Out of memory"); + m_modules[MODULE_MULTI_SESSION] = module.release(); + +#ifdef GALLERY_SUPPORTED + module.reset(new AppModuleGallery); + if (!module) + ORIGINATE_ERROR("Out of memory"); + m_modules[MODULE_GALLERY] = module.release(); +#endif + + // initialize generic module, this has options common to all modules + PROPAGATE_ERROR(m_moduleGeneric.initialize(m_options)); + + // initializes modules + for (std::vector::iterator it = m_modules.begin(); it != m_modules.end(); ++it) + PROPAGATE_ERROR((*it)->initialize(m_options)); + + return true; +} + +bool CameraApp::shutdown() +{ + // shutdown the modules + for (std::vector::iterator it = m_modules.begin(); it != m_modules.end(); ++it) + { + PROPAGATE_ERROR((*it)->shutdown()); + delete *it; + } + m_modules.clear(); + + PROPAGATE_ERROR(m_moduleGeneric.shutdown()); + + delete m_iGuiContainerConfig; + m_iGuiContainerConfig = NULL; + + delete m_iGuiMenuBar; + m_iGuiMenuBar = NULL; + + PROPAGATE_ERROR(App::shutdown()); + + return true; +} + +bool CameraApp::start() +{ + if (m_iGuiContainerConfig) + { + // add GUI elements + UniquePointer element; + + assert(sizeof(Modules) == sizeof(Window::IGuiElement::ValueTypeEnum)); + PROPAGATE_ERROR(Window::IGuiElement::createValue( + reinterpret_cast*>(&m_module), &element)); + PROPAGATE_ERROR(m_iGuiContainerConfig->add(element.get())); + element.release(); + } + + // Start the generic module, it's always active + PROPAGATE_ERROR(m_moduleGeneric.start(m_iGuiMenuBar, m_iGuiContainerConfig)); + + // register an observer, this will stop/start modules if m_module changes + PROPAGATE_ERROR(m_module.registerObserver(this, + static_cast(&CameraApp::onModuleChanged))); + + return true; +} + +bool CameraApp::onKey(const Key &key) +{ + if (key == Key("m")) + { + // switch to next module + Modules curModule = m_module.get(); + +#ifdef GALLERY_SUPPORTED + // switch to next module but skip gallery + do + { +#endif + if (curModule == MODULE_LAST) + curModule = MODULE_FIRST; + else + curModule = static_cast(curModule + 1); +#ifdef GALLERY_SUPPORTED + } + while (curModule == MODULE_GALLERY); +#endif + + m_module.set(curModule); + } +#ifdef GALLERY_SUPPORTED + else if (key == Key("g")) + { + // switch to gallery on/off + Modules curModule = m_module.get(); + + if (curModule == MODULE_GALLERY) + { + curModule = m_activeModuleBeforeGallery; + } + else + { + m_activeModuleBeforeGallery = curModule; + curModule = MODULE_GALLERY; + } + + m_module.set(curModule); + } +#endif + // call parent + PROPAGATE_ERROR(App::onKey(key)); + + return true; +} + +bool CameraApp::onModuleChanged(const Observed &source) +{ + assert(static_cast&>(source).get() == m_module); + + if (m_prevModule != MODULE_INVALID) + PROPAGATE_ERROR(m_modules[m_prevModule]->stop()); + + m_prevModule = m_module.get(); + + PROPAGATE_ERROR(m_modules[m_module.get()]->start(m_iGuiMenuBar, m_iGuiContainerConfig)); + + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char **argv) +{ + printf("Executing Argus Sample Application (%s)\n", basename(argv[0])); + + ArgusSamples::CameraApp cameraApp(basename(argv[0])); + + if (!cameraApp.run(argc, argv)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/apps/camera/ui/camera/cameraBuilder.glade b/jetson_multimedia_api/argus/apps/camera/ui/camera/cameraBuilder.glade new file mode 100644 index 0000000..8a669c2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/camera/cameraBuilder.glade @@ -0,0 +1,108 @@ + + + + + False + + + True + False + vertical + + + True + False + + + False + True + 0 + + + + + True + False + True + + + 1024 + 768 + True + False + True + 0 + none + + + True + False + + + True + True + True + False + + + + + + + + + + True + False + + + + + True + False + 0 + none + + + True + True + never + in + + + True + False + + + True + False + vertical + + + + + + + + + + + + + + + True + False + + + + + False + True + 1 + + + + + + diff --git a/jetson_multimedia_api/argus/apps/camera/ui/capture/AppModuleCapture.cpp b/jetson_multimedia_api/argus/apps/camera/ui/capture/AppModuleCapture.cpp new file mode 100644 index 0000000..6189da4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/capture/AppModuleCapture.cpp @@ -0,0 +1,215 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "AppModuleCapture.h" + +#include + +#include "Dispatcher.h" +#include "Error.h" +#include "Options.h" +#include "tasks/StillCapture.h" +#include "ScopedGuard.h" + +namespace ArgusSamples +{ + +/* static */ bool AppModuleCapture::still(void *userPtr, const char *optArg) +{ + AppModuleCapture *module = reinterpret_cast(userPtr); + uint32_t count = 1; + + if (optArg) + { + count = atoi(optArg); + if (count < 1) + ORIGINATE_ERROR("'COUNT' is invalid, must be at least 1"); + } + + // start the capture module + PROPAGATE_ERROR(module->start()); + // the scoped guard is used to call the stop function if following calls fail so that + // the function is exited with module stopped. + ScopedGuard runningGuard(module, &AppModuleCapture::stop); + + while (count) + { + PROPAGATE_ERROR(module->m_stillCapture.execute()); + PROPAGATE_ERROR(Window::getInstance().pollEvents()); + --count; + } + + // stop the module + runningGuard.cancel(); + PROPAGATE_ERROR(module->stop()); + + return true; +} + +/* static */ bool AppModuleCapture::capture(void *userPtr, const char *optArg) +{ + AppModuleCapture *module = reinterpret_cast(userPtr); + + PROPAGATE_ERROR(module->m_stillCapture.execute()); + + return true; +} + +AppModuleCapture::AppModuleCapture() + : m_initialized(false) + , m_running(false) + , m_guiContainerConfig(NULL) + , m_guiConfig(NULL) +{ +} + +AppModuleCapture::~AppModuleCapture() +{ + shutdown(); +} + +bool AppModuleCapture::initialize(Options &options) +{ + if (m_initialized) + return true; + + PROPAGATE_ERROR(m_stillCapture.initialize()); + + PROPAGATE_ERROR(options.addOption( + Options::Option("still", 's', "COUNT", + Options::Option::TYPE_ACTION, "do COUNT still captures and save as jpg files. ", + still, this, "1"))); + + PROPAGATE_ERROR(options.addOption( + createValueOption("stillfiletype", 0, "FORMAT", + "set image file type.", Dispatcher::getInstance().m_stillFileType))); + + m_initialized = true; + + return true; +} + +bool AppModuleCapture::shutdown() +{ + if (!m_initialized) + return true; + + PROPAGATE_ERROR_CONTINUE(stop()); + + PROPAGATE_ERROR_CONTINUE(m_stillCapture.shutdown()); + + delete m_guiConfig; + m_guiConfig = NULL; + + m_guiContainerConfig = NULL; + + m_initialized = false; + return true; +} + +bool AppModuleCapture::start(Window::IGuiMenuBar *iGuiMenuBar, + Window::IGuiContainer *iGuiContainerConfig) +{ + if (m_running) + return true; + + // register key observer + PROPAGATE_ERROR(Window::getInstance().registerObserver(this)); + + // initialize the GUI + if (iGuiContainerConfig && !m_guiContainerConfig) + { + // create a grid container + PROPAGATE_ERROR(Window::IGuiContainerGrid::create(&m_guiConfig)); + + // create the elements + UniquePointer element; + Dispatcher &dispatcher = Dispatcher::getInstance(); + + Window::IGuiContainerGrid::BuildHelper buildHelper(m_guiConfig); + +#define CREATE_GUI_ELEMENT_COMBO_BOX(_NAME, _VALUE, _FROMTYPE, _TOTYPE) \ + assert(sizeof(_FROMTYPE) == sizeof(_TOTYPE)); \ + PROPAGATE_ERROR(Window::IGuiElement::createValue(reinterpret_cast< \ + Value<_TOTYPE>*>(&dispatcher._VALUE), &element)); \ + PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \ + element.release(); + + CREATE_GUI_ELEMENT_COMBO_BOX("Still File Type", m_stillFileType, + StillFileType, Window::IGuiElement::ValueTypeEnum); + +#undef CREATE_GUI_ELEMENT_COMBO_BOX + + PROPAGATE_ERROR(Window::IGuiElement::createAction("Capture", + AppModuleCapture::capture, this, Window::IGuiElement::FLAG_NONE, + Window::IGuiElement::ICON_NONE, &element)); + PROPAGATE_ERROR(buildHelper.append(element.get(), 2/*width*/)); + element.release(); + + m_guiContainerConfig = iGuiContainerConfig; + } + + if (m_guiContainerConfig) + PROPAGATE_ERROR(m_guiContainerConfig->add(m_guiConfig)); + + PROPAGATE_ERROR(m_stillCapture.start()); + + m_running = true; + + return true; +} + +bool AppModuleCapture::stop() +{ + if (!m_running) + return true; + + PROPAGATE_ERROR(m_stillCapture.stop()); + + if (m_guiContainerConfig) + PROPAGATE_ERROR(m_guiContainerConfig->remove(m_guiConfig)); + + // unregister key observer + PROPAGATE_ERROR(Window::getInstance().unregisterObserver(this)); + + m_running = false; + + return true; +} + +bool AppModuleCapture::onKey(const Key &key) +{ + if (key == Key("space")) + { + PROPAGATE_ERROR(m_stillCapture.execute()); + } + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/ui/capture/AppModuleCapture.h b/jetson_multimedia_api/argus/apps/camera/ui/capture/AppModuleCapture.h new file mode 100644 index 0000000..ed3bf95 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/capture/AppModuleCapture.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ARGUS_APPS_CAMERA_UI_APP_MODULE_CAPTURE_H +#define ARGUS_APPS_CAMERA_UI_APP_MODULE_CAPTURE_H + +#include "../common/IAppModule.h" +#include "tasks/StillCapture.h" + +namespace ArgusSamples +{ + +/** + * The capture app module adds functionality to capture still images and save them + * as files. + */ +class AppModuleCapture : public IAppModule, public Window::IKeyObserver +{ +public: + AppModuleCapture(); + virtual ~AppModuleCapture(); + + /** @name IAppModule methods */ + /**@{*/ + virtual bool initialize(Options &options); + virtual bool shutdown(); + virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL, + Window::IGuiContainer *iGuiContainerConfig = NULL); + virtual bool stop(); + /**@}*/ + + /** @name option callbacks */ + /**@{*/ + static bool still(void *userPtr, const char *optArg); + static bool capture(void *userPtr, const char *optArg); + /**@}*/ + +private: + bool m_initialized; ///< set if initialized + bool m_running; ///< set if running + TaskStillCapture m_stillCapture; ///< still capure task + + Window::IGuiContainer *m_guiContainerConfig; ///< configuration GUI container + Window::IGuiContainerGrid *m_guiConfig; ///< configuration GUI + + /** @name IKeyObserver methods */ + /**@{*/ + virtual bool onKey(const Key &key); + /**@}*/ +}; + +}; // namespace ArgusSamples + +#endif // ARGUS_APPS_CAMERA_UI_APP_MODULE_CAPTURE_H diff --git a/jetson_multimedia_api/argus/apps/camera/ui/capture/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/ui/capture/CMakeLists.txt new file mode 100644 index 0000000..f85069d --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/capture/CMakeLists.txt @@ -0,0 +1,43 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +project(arguscamerauicapture) + +set(SOURCES + AppModuleCapture.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/apps/camera/ui/common + ${CMAKE_SOURCE_DIR}/apps/camera/common + ${CMAKE_SOURCE_DIR}/apps/camera/modules + ${CMAKE_SOURCE_DIR}/apps/camera/renderer + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_library(${PROJECT_NAME} ${SOURCES}) diff --git a/jetson_multimedia_api/argus/apps/camera/ui/common/App.cpp b/jetson_multimedia_api/argus/apps/camera/ui/common/App.cpp new file mode 100644 index 0000000..c812eb7 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/common/App.cpp @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "App.h" +#include "Error.h" + +#include "Dispatcher.h" +#include "Composer.h" +#include "PerfTracker.h" + +namespace ArgusSamples +{ + +App::App(const char *appName) + : m_options(appName) +{ +} + +App::~App() +{ + shutdown(); +} + +bool App::initialize() +{ + PROPAGATE_ERROR(Window::getInstance().registerObserver(this)); + + const char *description = + "Press 'Ctrl-Up' to increase the focus position, press 'Ctrl-Down' to decrease the focus\n" + "position.\n" + "Press 'd' to dump runtime information.\n" + "Press 'Esc' to exit.\n"; + PROPAGATE_ERROR(m_options.addDescription(description)); + + return true; +} + +bool App::shutdown() +{ + PROPAGATE_ERROR(Window::getInstance().unregisterObserver(this)); + + // shutdown the composer + PROPAGATE_ERROR(Composer::getInstance().shutdown()); + + // shutdown the window + PROPAGATE_ERROR(Window::getInstance().shutdown()); + + // shutdown the dispatcher + PROPAGATE_ERROR(Dispatcher::getInstance().shutdown()); + + return true; +} + +bool App::run(int argc, char **argv) +{ + PROPAGATE_ERROR(PerfTracker::getInstance().onEvent(GLOBAL_EVENT_APP_START)); + + PROPAGATE_ERROR(initialize()); + + PROPAGATE_ERROR(PerfTracker::getInstance().onEvent(GLOBAL_EVENT_APP_INITIALIZED)); + + // parse and execute the options + PROPAGATE_ERROR(m_options.parse(argc, argv)); + + // if exit had not been requested start the window event loop + if (!m_options.requestedExit()) + { + Window &window = Window::getInstance(); + + // start the active module + PROPAGATE_ERROR(start()); + + // start the event loop + PROPAGATE_ERROR(window.eventLoop()); + } + + return true; +} + +/** + * Moves the focus position by one percent in 'direction' + * @param [in] direction either '-1' to move focus position down, or '+1' to move it up + */ +static bool changeFocusPosition(int32_t direction) +{ + Dispatcher &dispatcher = Dispatcher::getInstance(); + const Argus::Range focusPositionRange = dispatcher.getDeviceFocusPositionRange(); + + if ((direction != -1) && (direction != 1)) + ORIGINATE_ERROR("Invalid direction"); + + const int32_t diff = ((focusPositionRange.max() - focusPositionRange.min()) + 99) / 100; + + int32_t newPosition = dispatcher.m_focusPosition.get() + diff * direction; + + newPosition = + std::min(focusPositionRange.max(), std::max(focusPositionRange.min(), newPosition)); + + PROPAGATE_ERROR(dispatcher.m_focusPosition.set(newPosition)); + + PROPAGATE_ERROR(dispatcher.message("Changed focuser position to %d in range [%d, %d]\n", + newPosition, focusPositionRange.min(), focusPositionRange.max())); + + return true; +} + +/** + * Moves the aperture positions by one percent in 'direction' + * @param [in] direction either '-1' to move aperture position down, or '+1' to move it up + */ +static bool changeAperturePosition(int32_t direction) +{ + Dispatcher &dispatcher = Dispatcher::getInstance(); + const Argus::Range aperturePositionRange = dispatcher.getDeviceAperturePositionRange(); + + if ((direction != -1) && (direction != 1)) + ORIGINATE_ERROR("Invalid direction"); + + int32_t newStep = dispatcher.m_aperturePosition.get() + direction; + + newStep = + std::min(aperturePositionRange.max(), std::max(aperturePositionRange.min(), newStep)); + + PROPAGATE_ERROR(dispatcher.m_aperturePosition.set(newStep)); + + PROPAGATE_ERROR(dispatcher.message("Changed aperture position to %d in range [%d, %d]\n", + newStep, aperturePositionRange.min(), aperturePositionRange.max())); + + return true; +} + +bool App::onKey(const Key &key) +{ + if ((key == Key("Escape")) || + (key == Key("c", KeyModifier(KeyModifier::MASK_CONTROL)))) + { + PROPAGATE_ERROR(Window::getInstance().requestExit()); + } + else if (key == Key("d")) + { + Dispatcher::getInstance().dumpSessionInfo(); + } + else if (key == Key("Up", KeyModifier(KeyModifier::MASK_CONTROL))) + { + PROPAGATE_ERROR(changeFocusPosition(+1)); + } + else if (key == Key("Down", KeyModifier(KeyModifier::MASK_CONTROL))) + { + PROPAGATE_ERROR(changeFocusPosition(-1)); + } + else if (key == Key("Left", KeyModifier(KeyModifier::MASK_CONTROL))) + { + PROPAGATE_ERROR(changeAperturePosition(+1)); + } + else if (key == Key("Right", KeyModifier(KeyModifier::MASK_CONTROL))) + { + PROPAGATE_ERROR(changeAperturePosition(-1)); + } + + // silently ignore unhandled keys + return true; +} + +}; // namespace ArgusSamples + diff --git a/jetson_multimedia_api/argus/apps/camera/ui/common/App.h b/jetson_multimedia_api/argus/apps/camera/ui/common/App.h new file mode 100644 index 0000000..8437345 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/common/App.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ARGUS_APPS_CAMERA_UI_COMMON_APP_H +#define ARGUS_APPS_CAMERA_UI_COMMON_APP_H + +#include "Options.h" +#include "Window.h" + +namespace ArgusSamples +{ + +/** + * Base class for apps. + */ +class App : public Window::IKeyObserver +{ +public: + explicit App(const char *appName); + virtual ~App(); + + virtual bool initialize(); + virtual bool shutdown(); + virtual bool start() = 0; + + bool run(int argc, char **argv); + +protected: + /** @name IKeyObserver methods */ + /**@{*/ + virtual bool onKey(const Key &key); + /**@}*/ + + Options m_options; + +private: + /** + * Hide default constructor + */ + App(); +}; + +}; // namespace ArgusSamples + +#endif // ARGUS_APPS_CAMERA_UI_COMMON_APP_H diff --git a/jetson_multimedia_api/argus/apps/camera/ui/common/AppModuleGeneric.cpp b/jetson_multimedia_api/argus/apps/camera/ui/common/AppModuleGeneric.cpp new file mode 100644 index 0000000..7e52c86 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/common/AppModuleGeneric.cpp @@ -0,0 +1,412 @@ +/* + * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +#include "AppModuleGeneric.h" +#include "XMLConfig.h" +#include "Dispatcher.h" +#include "Error.h" +#include "Options.h" +#include "Window.h" + +#include + +namespace ArgusSamples +{ + +/** + * Default configuration file name + */ +#define DEFAULT_CONFIG_FILE "argusAppConfig.xml" + +/* static */ bool AppModuleGeneric::info(void *userPtr, const char *optArg) +{ + std::string info; + PROPAGATE_ERROR(Dispatcher::getInstance().getInfo(info)); + printf("%s\n", info.c_str()); + + return true; +} + +/* static */ bool AppModuleGeneric::loadConfig(void *userPtr, const char *optArg) +{ + /// @todo ask for file if called from GUI + + const char *configFile = DEFAULT_CONFIG_FILE; + if (optArg) + configFile = optArg; + PROPAGATE_ERROR(ArgusSamples::loadConfig(configFile)); + return true; +} + +/* static */ bool AppModuleGeneric::saveConfig(void *userPtr, const char *optArg) +{ + /// @todo ask for file if called from GUI + + const char *configFile = DEFAULT_CONFIG_FILE; + if (optArg) + configFile = optArg; + PROPAGATE_ERROR(ArgusSamples::saveConfig(configFile)); + return true; +} + +/* static */ bool AppModuleGeneric::quit(void *userPtr, const char *optArg) +{ + PROPAGATE_ERROR(Window::getInstance().requestExit()); + return true; +} + +AppModuleGeneric::AppModuleGeneric() + : m_initialized(false) + , m_running(false) + , m_guiMenuBar(NULL) + , m_guiContainerConfig(NULL) + , m_guiConfig(NULL) +{ +} + +AppModuleGeneric::~AppModuleGeneric() +{ + shutdown(); +} + +bool AppModuleGeneric::initialize(Options &options) +{ + if (m_initialized) + return true; + + PROPAGATE_ERROR(options.addDescription( + "The supported value range of some settings is device or sensor mode dependent.\n" + "Use the '--info' option to get a list of the supported values.\n")); + + PROPAGATE_ERROR(options.addOption( + Options::Option("info", 'i', "", + Options::Option::TYPE_ACTION,"print information on devices.", info))); + + PROPAGATE_ERROR(options.addOption( + Options::Option("loadconfig", 0, "FILE", + Options::Option::TYPE_ACTION, "load configuration from XML FILE. ", + loadConfig, this, DEFAULT_CONFIG_FILE))); + PROPAGATE_ERROR(options.addOption( + Options::Option("saveconfig", 0, "FILE", + Options::Option::TYPE_ACTION, "save configuration to XML FILE. ", + saveConfig, this, DEFAULT_CONFIG_FILE))); + + PROPAGATE_ERROR(options.addOption( + createValueOption("verbose", 0, "0 or 1", "enable verbose mode.", + Dispatcher::getInstance().m_verbose, "1"))); + PROPAGATE_ERROR(options.addOption( + createValueOption("kpi", 0, "0 or 1", "enable kpi mode.", + Dispatcher::getInstance().m_kpi, "1"))); + PROPAGATE_ERROR(options.addOption( + createValueOption("device", 'd', "INDEX", "select camera device with INDEX.", + Dispatcher::getInstance().m_deviceIndex))); + + // source settings + PROPAGATE_ERROR(options.addOption( + createValueOption("exposuretimerange", 0, "RANGE", + "sets the exposure time range to RANGE, in nanoseconds.", + Dispatcher::getInstance().m_exposureTimeRange))); + PROPAGATE_ERROR(options.addOption( + createValueOption("gainrange", 0, "RANGE", "sets the gain range to RANGE.", + Dispatcher::getInstance().m_gainRange))); + PROPAGATE_ERROR(options.addOption( + createValueOption("sensormode", 0, "INDEX", "set sensor mode to INDEX.", + Dispatcher::getInstance().m_sensorModeIndex))); + PROPAGATE_ERROR(options.addOption( + createValueOption("framerate", 0, "RATE", + "set the sensor frame rate to RATE. If RATE is 0 then VFR (variable frame rate) is " + "enabled.", Dispatcher::getInstance().m_frameRate))); + PROPAGATE_ERROR(options.addOption( + createValueOption("focusposition", 0, "POSITION", + "sets the focus position to POSITION, in focuser units.", + Dispatcher::getInstance().m_focusPosition))); + PROPAGATE_ERROR(options.addOption( + createValueOption("apertureposition", 0, "POSITION", + "sets the aperture position to POSITION, in position units.", + Dispatcher::getInstance().m_aperturePosition))); + PROPAGATE_ERROR(options.addOption( + createValueOption("apertureFnum", 0, "Fnum", + "sets the aperture F-num, in F-num units.", + Dispatcher::getInstance().m_apertureFnum))); + PROPAGATE_ERROR(options.addOption( + createValueOption("aperturemotorspeed", 0, "SPEED", + "sets the aperture motor speed to SPEED, in steps/second units.", + Dispatcher::getInstance().m_apertureMotorSpeed))); + PROPAGATE_ERROR(options.addOption( + createValueOption("captureyuvformat", 0, "FORMAT", + "YUV format for image capture.", Dispatcher::getInstance().m_captureYuvFormat))); + + // output settings + PROPAGATE_ERROR(options.addOption( + createValueOption("outputsize", 0, "WIDTHxHEIGHT", + "set the still and video output size to WIDTHxHEIGHT (e.g. 1920x1080). If WIDTHxHEIGHT " + "is '0x0' the output size is the sensor mode size.", + Dispatcher::getInstance().m_outputSize))); + PROPAGATE_ERROR(options.addOption( + createValueOption("outputpath", 0, "PATH", + "set the output file path. A file name, an incrementing index and the file extension" + " will be appended. E.g. setting 'folder/' will result in 'folder/image0.jpg' or " + "'folder/video0.mp4'. '/dev/null' can be used to discard output.", + Dispatcher::getInstance().m_outputPath))); + + // stream settings + PROPAGATE_ERROR(options.addOption( + createValueOption("denoise", 0, "MODE", "set the denoising mode.", + Dispatcher::getInstance().m_denoiseMode))); + PROPAGATE_ERROR(options.addOption( + createValueOption("denoisestrength", 0, "POSITION", "set the denoising strength.", + Dispatcher::getInstance().m_denoiseStrength))); + PROPAGATE_ERROR(options.addOption( + createValueOption("edgeenhance", 0, "MODE", "set the edge enhancement mode.", + Dispatcher::getInstance().m_edgeEnhanceMode))); + PROPAGATE_ERROR(options.addOption( + createValueOption("edgeenhancestrength", 0, "POSITION", + "set the edge enhancement strength.", + Dispatcher::getInstance().m_edgeEnhanceStrength))); + + // auto control settings + PROPAGATE_ERROR(options.addOption( + createValueOption("aeantibanding", 0, "MODE", "set the auto exposure antibanding mode.", + Dispatcher::getInstance().m_aeAntibandingMode))); + PROPAGATE_ERROR(options.addOption( + createValueOption("aelock", 0, "LOCK", "set the auto exposure lock.", + Dispatcher::getInstance().m_aeLock))); + PROPAGATE_ERROR(options.addOption( + createValueOption("awblock", 0, "LOCK", "set the auto white balance lock.", + Dispatcher::getInstance().m_awbLock))); + PROPAGATE_ERROR(options.addOption( + createValueOption("awb", 0, "MODE", "set the auto white balance mode.", + Dispatcher::getInstance().m_awbMode))); + PROPAGATE_ERROR(options.addOption( + createValueOption("exposurecompensation", 0, "COMPENSATION", + "set the exposure compensation to COMPENSATION.", + Dispatcher::getInstance().m_exposureCompensation))); + PROPAGATE_ERROR(options.addOption( + createValueOption("ispdigitalgainrange", 0, "RANGE", + "sets the ISP digital gain range.", + Dispatcher::getInstance().m_ispDigitalGainRange))); + PROPAGATE_ERROR(options.addOption( + createValueOption("acregionhorizontal", 0, "RANGE", + "sets the AC auto control region horizontal range.", + Dispatcher::getInstance().m_acRegionHorizontal))); + PROPAGATE_ERROR(options.addOption( + createValueOption("acregionvertical", 0, "RANGE", + "sets the AC auto control region vertical range.", + Dispatcher::getInstance().m_acRegionVertical))); + + if (Dispatcher::getInstance().supportsExtension(Argus::EXT_DE_FOG)) + { + // DeFog extension settings + PROPAGATE_ERROR(options.addOption( + createValueOption("defog", 0, "ENABLE", + "set the DeFog enable flag to ENABLE.", + Dispatcher::getInstance().m_deFogEnable))); + PROPAGATE_ERROR(options.addOption( + createValueOption("defogamount", 0, "AMOUNT", + "sets the amount of fog to be removed to AMOUNT.", + Dispatcher::getInstance().m_deFogAmount))); + PROPAGATE_ERROR(options.addOption( + createValueOption("defogquality", 0, "QUALITY", + "sets the quality of the DeFog effect to QUALITY.", + Dispatcher::getInstance().m_deFogQuality))); + } + + m_initialized = true; + + return true; +} + +bool AppModuleGeneric::shutdown() +{ + if (!m_initialized) + return true; + + PROPAGATE_ERROR_CONTINUE(stop()); + + delete m_guiConfig; + m_guiConfig = NULL; + + m_initialized = false; + + return true; +} + +bool AppModuleGeneric::start(Window::IGuiMenuBar *iGuiMenuBar, + Window::IGuiContainer *iGuiContainerConfig) +{ + if (m_running) + return true; + + if (iGuiMenuBar && !m_guiMenuBar) + { + // initialize the menu + + UniquePointer menu; + UniquePointer item; + + // create the elements + Window::IGuiMenu *fileMenu = iGuiMenuBar->getMenu("File"); + if (!fileMenu) + { + PROPAGATE_ERROR(Window::IGuiMenu::create("File", &menu)); + PROPAGATE_ERROR(iGuiMenuBar->add(menu.get())); + fileMenu = menu.get(); + menu.release(); + } + PROPAGATE_ERROR(Window::IGuiMenuItem::create("Load config", AppModuleGeneric::loadConfig, + NULL, &item)); + PROPAGATE_ERROR(fileMenu->add(item.get())); + item.release(); + PROPAGATE_ERROR(Window::IGuiMenuItem::create("Save Config", AppModuleGeneric::saveConfig, + NULL, &item)); + PROPAGATE_ERROR(fileMenu->add(item.get())); + item.release(); + PROPAGATE_ERROR(Window::IGuiMenuItem::create("Quit", AppModuleGeneric::quit, NULL, + &item)); + PROPAGATE_ERROR(fileMenu->add(item.get())); + item.release(); + + Window::IGuiMenu *helpMenu = iGuiMenuBar->getMenu("Help"); + if (!helpMenu) + { + PROPAGATE_ERROR(Window::IGuiMenu::create("Help", &menu)); + PROPAGATE_ERROR(iGuiMenuBar->add(menu.get())); + helpMenu = menu.get(); + menu.release(); + } + PROPAGATE_ERROR(Window::IGuiMenuItem::create("Info", AppModuleGeneric::info, NULL, + &item)); + PROPAGATE_ERROR(helpMenu->add(item.get())); + item.release(); + + m_guiMenuBar = iGuiMenuBar; + } + + if (iGuiContainerConfig && !m_guiContainerConfig) + { + // initialize the GUI + + // create a grid container + PROPAGATE_ERROR(Window::IGuiContainerGrid::create(&m_guiConfig)); + + // create the elements + UniquePointer element; + Dispatcher &dispatcher = Dispatcher::getInstance(); + + Window::IGuiContainerGrid::BuildHelper buildHelper(m_guiConfig); + +#define CREATE_GUI_ELEMENT(_NAME, _VALUE) \ + PROPAGATE_ERROR(Window::IGuiElement::createValue(&dispatcher._VALUE, &element));\ + PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \ + element.release(); + +#define CREATE_GUI_ELEMENT_COMBO_BOX(_NAME, _VALUE, _FROMTYPE, _TOTYPE) \ + assert(sizeof(_FROMTYPE) == sizeof(_TOTYPE)); \ + PROPAGATE_ERROR(Window::IGuiElement::createValue(reinterpret_cast< \ + Value<_TOTYPE>*>(&dispatcher._VALUE), &element)); \ + PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \ + element.release(); + +#define CREATE_GUI_ELEMENT_PATH_CHOOSER(_NAME, _VALUE) \ + PROPAGATE_ERROR(Window::IGuiElement::createFileChooser(&dispatcher._VALUE, \ + true, &element)); \ + PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \ + element.release(); + + CREATE_GUI_ELEMENT("Verbose", m_verbose); + CREATE_GUI_ELEMENT("KPI", m_kpi); + CREATE_GUI_ELEMENT("Device", m_deviceIndex); + + CREATE_GUI_ELEMENT("Exposure time range (ns)", m_exposureTimeRange); + CREATE_GUI_ELEMENT("Gain range", m_gainRange); + CREATE_GUI_ELEMENT("ISP digital gain range", m_ispDigitalGainRange); + CREATE_GUI_ELEMENT("AC region horizontal", m_acRegionHorizontal); + CREATE_GUI_ELEMENT("AC region vertical", m_acRegionVertical); + + CREATE_GUI_ELEMENT_COMBO_BOX("Sensor mode index", m_sensorModeIndex, + uint32_t, Window::IGuiElement::ValueTypeEnum); + CREATE_GUI_ELEMENT_COMBO_BOX("YUV format", m_captureYuvFormat, + Argus::PixelFormat, Argus::NamedUUID); + CREATE_GUI_ELEMENT("Frame rate", m_frameRate); + CREATE_GUI_ELEMENT("Focus position", m_focusPosition); + CREATE_GUI_ELEMENT("Aperture position", m_aperturePosition); + CREATE_GUI_ELEMENT_COMBO_BOX("Aperture Fnum", m_apertureFnum, + float, Window::IGuiElement::ValueTypeEnum); + CREATE_GUI_ELEMENT("Aperture motor speed", m_apertureMotorSpeed); + CREATE_GUI_ELEMENT("Output size", m_outputSize); + + CREATE_GUI_ELEMENT_PATH_CHOOSER("Output path", m_outputPath); + + CREATE_GUI_ELEMENT_COMBO_BOX("De-Noise mode", m_denoiseMode, + Argus::DenoiseMode, Argus::NamedUUID); + CREATE_GUI_ELEMENT("De-Noise strength", m_denoiseStrength); + CREATE_GUI_ELEMENT_COMBO_BOX("Edge Enhance mode", m_edgeEnhanceMode, + Argus::EdgeEnhanceMode, Argus::NamedUUID); + CREATE_GUI_ELEMENT("Edge Enhance strength", m_edgeEnhanceStrength); + + CREATE_GUI_ELEMENT_COMBO_BOX("AE antibanding mode", m_aeAntibandingMode, + Argus::AeAntibandingMode, Argus::NamedUUID); + + CREATE_GUI_ELEMENT("AE Lock", m_aeLock); + CREATE_GUI_ELEMENT("AWB Lock", m_awbLock); + CREATE_GUI_ELEMENT_COMBO_BOX("AWB mode", m_awbMode, + Argus::AwbMode, Argus::NamedUUID); + CREATE_GUI_ELEMENT("Exposure compensation (ev)", m_exposureCompensation); + +#undef CREATE_GUI_ELEMENT +#undef CREATE_GUI_ELEMENT_COMBO_BOX +#undef CREATE_GUI_ELEMENT_PATH_CHOOSER + + m_guiContainerConfig = iGuiContainerConfig; + } + + if (m_guiContainerConfig) + PROPAGATE_ERROR(m_guiContainerConfig->add(m_guiConfig)); + + m_running = true; + + return true; +} + +bool AppModuleGeneric::stop() +{ + if (!m_running) + return true; + + if (m_guiContainerConfig) + PROPAGATE_ERROR(m_guiContainerConfig->remove(m_guiConfig)); + + m_running = true; + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/ui/common/AppModuleGeneric.h b/jetson_multimedia_api/argus/apps/camera/ui/common/AppModuleGeneric.h new file mode 100644 index 0000000..92acf3b --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/common/AppModuleGeneric.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_GENERIC_H +#define ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_GENERIC_H + +#include "IAppModule.h" +#include "Window.h" + +namespace ArgusSamples +{ + +/** + * The base app module provides basic settings common to all app modules + */ +class AppModuleGeneric : public IAppModule +{ +public: + AppModuleGeneric(); + virtual ~AppModuleGeneric(); + + /** @name IAppModule methods */ + /**@{*/ + virtual bool initialize(Options &options); + virtual bool shutdown(); + virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL, + Window::IGuiContainer *iGuiContainerConfig = NULL); + virtual bool stop(); + /**@}*/ + + /** @name option callbacks */ + /**@{*/ + static bool info(void *userPtr, const char *optArg); + static bool loadConfig(void *userPtr, const char *optArg); + static bool saveConfig(void *userPtr, const char *optArg); + static bool quit(void *userPtr, const char *optArg); + /**@}*/ + +private: + bool m_initialized; ///< set if initialized + bool m_running; ///< set if running + Window::IGuiMenuBar *m_guiMenuBar; ///< menu bar + Window::IGuiContainer *m_guiContainerConfig; ///< configuration GUI container + Window::IGuiContainerGrid *m_guiConfig; ///< configuration GUI +}; + +}; // namespace ArgusSamples + +#endif // ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_GENERIC_H diff --git a/jetson_multimedia_api/argus/apps/camera/ui/common/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/ui/common/CMakeLists.txt new file mode 100644 index 0000000..1620ce0 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/common/CMakeLists.txt @@ -0,0 +1,51 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +project(arguscamerauicommon) + +set(SOURCES + App.cpp + AppModuleGeneric.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/apps/camera/common + ${CMAKE_SOURCE_DIR}/apps/camera/modules + ${CMAKE_SOURCE_DIR}/apps/camera/renderer + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_library(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + arguscameracommon + arguscameramodules + arguscamerarenderer + argussampleutils + ) diff --git a/jetson_multimedia_api/argus/apps/camera/ui/common/IAppModule.h b/jetson_multimedia_api/argus/apps/camera/ui/common/IAppModule.h new file mode 100644 index 0000000..b288cfe --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/common/IAppModule.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_H +#define ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_H + +#include "Window.h" + +namespace ArgusSamples +{ + +class Options; + +/** + * A application module exposes command line options, GUI elements and executes tasks. + */ +class IAppModule +{ +public: + IAppModule() { } + virtual ~IAppModule() { }; + + /** + * Initialize + * + * @param [in] options each app module can add options + */ + virtual bool initialize(Options &options) = 0; + + /** + * Shut down + */ + virtual bool shutdown() = 0; + + /** + * Start the module + * + * @param [in] iGuiMenuBar optional, the module can add menu items to this menu bar + * @param [in] iGuiContainerConfig optional, the module can add configuration options to this + * container + */ + virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL, + Window::IGuiContainer *iGuiContainerConfig = NULL) = 0; + + /** + * Stop the module + */ + virtual bool stop() = 0; +}; + +}; // namespace ArgusSamples + +#endif // ARGUS_APPS_CAMERA_UI_COMMON_APP_MODULE_H diff --git a/jetson_multimedia_api/argus/apps/camera/ui/gallery/AppModuleGallery.cpp b/jetson_multimedia_api/argus/apps/camera/ui/gallery/AppModuleGallery.cpp new file mode 100644 index 0000000..8742786 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/gallery/AppModuleGallery.cpp @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include "AppModuleGallery.h" +#include "Error.h" + +namespace ArgusSamples +{ + +/* static */ bool AppModuleGallery::prevItem(void *userPtr, const char *optArg) +{ + AppModuleGallery *module = reinterpret_cast(userPtr); + + PROPAGATE_ERROR(module->m_gallery.prevItem()); + + return true; +} + +/* static */ bool AppModuleGallery::nextItem(void *userPtr, const char *optArg) +{ + AppModuleGallery *module = reinterpret_cast(userPtr); + + PROPAGATE_ERROR(module->m_gallery.nextItem()); + + return true; +} + +/* static */ bool AppModuleGallery::togglePlayBack(void *userPtr, const char *optArg) +{ + AppModuleGallery *module = reinterpret_cast(userPtr); + + PROPAGATE_ERROR(module->m_gallery.togglePlayBack()); + + return true; +} + +/* static */ bool AppModuleGallery::rewind(void *userPtr, const char *optArg) +{ + AppModuleGallery *module = reinterpret_cast(userPtr); + + PROPAGATE_ERROR(module->m_gallery.rewind()); + + return true; +} + +AppModuleGallery::AppModuleGallery() + : m_initialized(false) + , m_running(false) + , m_guiContainerConfig(NULL) + , m_guiConfig(NULL) +{ +} + +AppModuleGallery::~AppModuleGallery() +{ + shutdown(); +} + +bool AppModuleGallery::initialize(Options &options) +{ + if (m_initialized) + return true; + + PROPAGATE_ERROR(m_gallery.initialize()); + + m_initialized = true; + + return true; +} + +bool AppModuleGallery::shutdown() +{ + if (!m_initialized) + return true; + + PROPAGATE_ERROR_CONTINUE(stop()); + + PROPAGATE_ERROR_CONTINUE(m_gallery.shutdown()); + + m_initialized = false; + + return true; +} + +bool AppModuleGallery::start(Window::IGuiMenuBar *iGuiMenuBar, + Window::IGuiContainer *iGuiContainerConfig) +{ + if (m_running) + return true; + + // register key observer + PROPAGATE_ERROR(Window::getInstance().registerObserver(this)); + + // initialize the GUI + if (iGuiContainerConfig && !m_guiConfig) + { + // initialize the GUI + + // create a grid container + PROPAGATE_ERROR(Window::IGuiContainerGrid::create(&m_guiConfig)); + + // create the elements + UniquePointer element; + unsigned int column = 0; + + PROPAGATE_ERROR(Window::IGuiElement::createAction("Previous Item", + AppModuleGallery::prevItem, this, Window::IGuiElement::FLAG_NONE, + Window::IGuiElement::ICON_PREVIOUS, &element)); + PROPAGATE_ERROR(m_guiConfig->attach(element.get(), column++, 0)); + element.release(); + + PROPAGATE_ERROR(Window::IGuiElement::createAction("Rewind", + AppModuleGallery::rewind, this, Window::IGuiElement::FLAG_NONE, + Window::IGuiElement::ICON_MEDIA_REWIND, &element)); + PROPAGATE_ERROR(m_guiConfig->attach(element.get(), column++, 0)); + element.release(); + + PROPAGATE_ERROR(Window::IGuiElement::createAction("Toggle Playback", + AppModuleGallery::togglePlayBack, this, Window::IGuiElement::FLAG_BUTTON_TOGGLE, + Window::IGuiElement::ICON_MEDIA_PLAY, &element)); + PROPAGATE_ERROR(m_guiConfig->attach(element.get(), column++, 0)); + element.release(); + + PROPAGATE_ERROR(Window::IGuiElement::createAction("Next Item", + AppModuleGallery::nextItem, this, Window::IGuiElement::FLAG_NONE, + Window::IGuiElement::ICON_NEXT, &element)); + PROPAGATE_ERROR(m_guiConfig->attach(element.get(), column++, 0)); + element.release(); + + m_guiContainerConfig = iGuiContainerConfig; + } + + if (m_guiContainerConfig) + PROPAGATE_ERROR(m_guiContainerConfig->add(m_guiConfig)); + + PROPAGATE_ERROR(m_gallery.start()); + + m_running = true; + + return true; +} + +bool AppModuleGallery::stop() +{ + if (!m_running) + return true; + + PROPAGATE_ERROR(m_gallery.stop()); + + if (m_guiContainerConfig) + PROPAGATE_ERROR(m_guiContainerConfig->remove(m_guiConfig)); + + // unregister key observer + PROPAGATE_ERROR(Window::getInstance().unregisterObserver(this)); + + m_running = false; + + return true; +} + +bool AppModuleGallery::onKey(const Key &key) +{ + if (key == Key("Left")) + { + PROPAGATE_ERROR(m_gallery.prevItem()); + } + else if (key == Key("Right")) + { + PROPAGATE_ERROR(m_gallery.nextItem()); + } + else if (key == Key("space")) + { + PROPAGATE_ERROR(m_gallery.togglePlayBack()); + } + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/ui/gallery/AppModuleGallery.h b/jetson_multimedia_api/argus/apps/camera/ui/gallery/AppModuleGallery.h new file mode 100644 index 0000000..2d191bd --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/gallery/AppModuleGallery.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ARGUS_APPS_CAMERA_UI_APP_MODULE_GALLERY_H +#define ARGUS_APPS_CAMERA_UI_APP_MODULE_GALLERY_H + +#include "IAppModule.h" +#include "tasks/Gallery.h" + +namespace ArgusSamples +{ + +/** + * The gallery app module adds functionality to review images and videos. + */ +class AppModuleGallery : public IAppModule, public Window::IKeyObserver +{ +public: + AppModuleGallery(); + virtual ~AppModuleGallery(); + + /** @name IAppModule methods */ + /**@{*/ + virtual bool initialize(Options &options); + virtual bool shutdown(); + virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL, + Window::IGuiContainer *iGuiContainerConfig = NULL); + virtual bool stop(); + /**@}*/ + + /** @name option callbacks */ + /**@{*/ + static bool prevItem(void *userPtr, const char *optArg); + static bool nextItem(void *userPtr, const char *optArg); + static bool togglePlayBack(void *userPtr, const char *optArg); + static bool rewind(void *userPtr, const char *optArg); + /**@}*/ + +private: + bool m_initialized; ///< set if initialized + bool m_running; ///< set if running + TaskGallery m_gallery; ///< gallery task + + Window::IGuiContainer *m_guiContainerConfig; ///< configuration GUI container + Window::IGuiContainerGrid *m_guiConfig; ///< configuration GUI + + /** @name IKeyObserver methods */ + /**@{*/ + virtual bool onKey(const Key &key); + /**@}*/ +}; + +}; // namespace ArgusSamples + +#endif // ARGUS_APPS_CAMERA_UI_APP_MODULE_GALLERY_H diff --git a/jetson_multimedia_api/argus/apps/camera/ui/gallery/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/ui/gallery/CMakeLists.txt new file mode 100644 index 0000000..5316ded --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/gallery/CMakeLists.txt @@ -0,0 +1,42 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +project(arguscamerauigallery) + +set(SOURCES + AppModuleGallery.cpp + ) + +include_directories( + ${EGL_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/apps/camera/ui/common + ${CMAKE_SOURCE_DIR}/apps/camera/common + ${CMAKE_SOURCE_DIR}/apps/camera/modules + ${CMAKE_SOURCE_DIR}/apps/camera/renderer + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_library(${PROJECT_NAME} ${SOURCES}) diff --git a/jetson_multimedia_api/argus/apps/camera/ui/multiExposure/AppModuleMultiExposure.cpp b/jetson_multimedia_api/argus/apps/camera/ui/multiExposure/AppModuleMultiExposure.cpp new file mode 100644 index 0000000..116d4b9 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/multiExposure/AppModuleMultiExposure.cpp @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "AppModuleMultiExposure.h" +#include "Options.h" +#include "Error.h" + +namespace ArgusSamples +{ + +AppModuleMultiExposure::AppModuleMultiExposure() + : m_initialized(false) + , m_running(false) + , m_guiContainerConfig(NULL) + , m_guiConfig(NULL) +{ +} + +AppModuleMultiExposure::~AppModuleMultiExposure() +{ + shutdown(); +} + +bool AppModuleMultiExposure::initialize(Options &options) +{ + if (m_initialized) + return true; + + PROPAGATE_ERROR(m_multiExposure.initialize()); + + PROPAGATE_ERROR(options.addOption( + createValueOption("exposurerange", 0, "RANGE", "set the exposure range to RANGE.", + m_multiExposure.m_exposureRange))); + PROPAGATE_ERROR(options.addOption( + createValueOption("exposuresteps", 0, "COUNT", "sample the exposure range at COUNT steps.", + m_multiExposure.m_exposureSteps))); + + m_initialized = true; + + return true; +} + +bool AppModuleMultiExposure::shutdown() +{ + if (!m_initialized) + return true; + + PROPAGATE_ERROR_CONTINUE(stop()); + + PROPAGATE_ERROR_CONTINUE(m_multiExposure.shutdown()); + + delete m_guiConfig; + m_guiConfig = NULL; + + m_guiContainerConfig = NULL; + + m_initialized = false; + + return true; +} + +bool AppModuleMultiExposure::start(Window::IGuiMenuBar *iGuiMenuBar, + Window::IGuiContainer *iGuiContainerConfig) +{ + if (m_running) + return true; + + // initialize the GUI + if (iGuiContainerConfig && !m_guiConfig) + { + // initialize the GUI + + // create a grid container + PROPAGATE_ERROR(Window::IGuiContainerGrid::create(&m_guiConfig)); + + // create the elements + UniquePointer element; + + Window::IGuiContainerGrid::BuildHelper buildHelper(m_guiConfig); + +#define CREATE_GUI_ELEMENT(_NAME, _VALUE) \ + PROPAGATE_ERROR(Window::IGuiElement::createValue(&_VALUE, &element)); \ + PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \ + element.release(); + + CREATE_GUI_ELEMENT("Exposure Range", m_multiExposure.m_exposureRange); + CREATE_GUI_ELEMENT("Exposure Steps", m_multiExposure.m_exposureSteps); + +#undef CREATE_GUI_ELEMENT + + m_guiContainerConfig = iGuiContainerConfig; + } + + if (m_guiContainerConfig) + PROPAGATE_ERROR(m_guiContainerConfig->add(m_guiConfig)); + + PROPAGATE_ERROR(m_multiExposure.start()); + + m_running = true; + + return true; +} + +bool AppModuleMultiExposure::stop() +{ + if (!m_running) + return true; + + PROPAGATE_ERROR(m_multiExposure.stop()); + + if (m_guiContainerConfig) + PROPAGATE_ERROR(m_guiContainerConfig->remove(m_guiConfig)); + + m_running = false; + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/ui/multiExposure/AppModuleMultiExposure.h b/jetson_multimedia_api/argus/apps/camera/ui/multiExposure/AppModuleMultiExposure.h new file mode 100644 index 0000000..62419d1 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/multiExposure/AppModuleMultiExposure.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_EXPOSURE_H +#define ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_EXPOSURE_H + +#include "IAppModule.h" +#include "tasks/MultiExposure.h" + +namespace ArgusSamples +{ + +/** + * The multi exposure app module adds functionality to capture multiple streams with + * different exposure compensation values. + */ +class AppModuleMultiExposure : public IAppModule +{ +public: + AppModuleMultiExposure(); + virtual ~AppModuleMultiExposure(); + + /** @name IAppModule methods */ + /**@{*/ + virtual bool initialize(Options &options); + virtual bool shutdown(); + virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL, + Window::IGuiContainer *iGuiContainerConfig = NULL); + virtual bool stop(); + /**@}*/ + +private: + bool m_initialized; ///< set if initialized + bool m_running; ///< set if running + TaskMultiExposure m_multiExposure; ///< multi exposure task + + Window::IGuiContainer *m_guiContainerConfig; ///< configuration GUI container + Window::IGuiContainerGrid *m_guiConfig; ///< configuration GUI +}; + +}; // namespace ArgusSamples + +#endif // ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_EXPOSURE_H diff --git a/jetson_multimedia_api/argus/apps/camera/ui/multiExposure/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/ui/multiExposure/CMakeLists.txt new file mode 100644 index 0000000..e693520 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/multiExposure/CMakeLists.txt @@ -0,0 +1,43 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +project(arguscamerauimultiexposure) + +set(SOURCES + AppModuleMultiExposure.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/apps/camera/ui/common + ${CMAKE_SOURCE_DIR}/apps/camera/common + ${CMAKE_SOURCE_DIR}/apps/camera/modules + ${CMAKE_SOURCE_DIR}/apps/camera/renderer + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_library(${PROJECT_NAME} ${SOURCES}) diff --git a/jetson_multimedia_api/argus/apps/camera/ui/multiSession/AppModuleMultiSession.cpp b/jetson_multimedia_api/argus/apps/camera/ui/multiSession/AppModuleMultiSession.cpp new file mode 100644 index 0000000..a0ed3a4 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/multiSession/AppModuleMultiSession.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "AppModuleMultiSession.h" + +#include + +#include "Options.h" +#include "Error.h" + +namespace ArgusSamples +{ + +AppModuleMultiSession::AppModuleMultiSession() + : m_initialized(false) +{ +} + +AppModuleMultiSession::~AppModuleMultiSession() +{ + shutdown(); +} + +bool AppModuleMultiSession::initialize(Options &options) +{ + if (m_initialized) + return true; + + PROPAGATE_ERROR(m_multiSession.initialize()); + + PROPAGATE_ERROR(options.addOption( + createValueOption("multidevices", 0, "INDEX", "select multiple camera devices with INDEX.", + m_multiSession.m_multiDevices))); + + m_initialized = true; + + return true; +} + +bool AppModuleMultiSession::shutdown() +{ + if (!m_initialized) + return true; + + PROPAGATE_ERROR_CONTINUE(m_multiSession.shutdown()); + + m_initialized = false; + return true; +} + +bool AppModuleMultiSession::start(Window::IGuiMenuBar *iGuiMenuBar, + Window::IGuiContainer *iGuiContainerConfig) +{ + PROPAGATE_ERROR(m_multiSession.start()); + return true; +} + +bool AppModuleMultiSession::stop() +{ + PROPAGATE_ERROR(m_multiSession.stop()); + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/ui/multiSession/AppModuleMultiSession.h b/jetson_multimedia_api/argus/apps/camera/ui/multiSession/AppModuleMultiSession.h new file mode 100644 index 0000000..629c766 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/multiSession/AppModuleMultiSession.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_SESSION_H +#define ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_SESSION_H + +#include "../common/IAppModule.h" +#include "tasks/MultiSession.h" + +namespace ArgusSamples +{ + +/** + * The multi session app module adds functionality for adding multiple sessions where + * each session uses a different sensor. + */ +class AppModuleMultiSession : public IAppModule +{ +public: + AppModuleMultiSession(); + virtual ~AppModuleMultiSession(); + + /** @name IAppModule methods */ + /**@{*/ + virtual bool initialize(Options &options); + virtual bool shutdown(); + virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL, + Window::IGuiContainer *iGuiContainerConfig = NULL); + virtual bool stop(); + /**@}*/ + +private: + bool m_initialized; ///< set if initialized + TaskMultiSession m_multiSession; ///< multi session task +}; + +}; // namespace ArgusSamples + +#endif // ARGUS_APPS_CAMERA_UI_APP_MODULE_MULTI_SESSION_H diff --git a/jetson_multimedia_api/argus/apps/camera/ui/multiSession/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/ui/multiSession/CMakeLists.txt new file mode 100644 index 0000000..d821e78 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/multiSession/CMakeLists.txt @@ -0,0 +1,43 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +project(arguscamerauimultisession) + +set(SOURCES + AppModuleMultiSession.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/apps/camera/ui/common + ${CMAKE_SOURCE_DIR}/apps/camera/common + ${CMAKE_SOURCE_DIR}/apps/camera/modules + ${CMAKE_SOURCE_DIR}/apps/camera/renderer + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_library(${PROJECT_NAME} ${SOURCES}) diff --git a/jetson_multimedia_api/argus/apps/camera/ui/video/AppModuleVideo.cpp b/jetson_multimedia_api/argus/apps/camera/ui/video/AppModuleVideo.cpp new file mode 100644 index 0000000..64d84e6 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/video/AppModuleVideo.cpp @@ -0,0 +1,256 @@ +/* + * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "AppModuleVideo.h" + +#include +#include +#include + +#include "Dispatcher.h" +#include "Util.h" +#include "Error.h" +#include "Options.h" +#include "ScopedGuard.h" +#include "VideoPipeline.h" + +namespace ArgusSamples +{ + +/* static */ bool AppModuleVideo::video(void *userPtr, const char *optArg) +{ + if (!VideoPipeline::isSupported()) + { + fprintf(stderr, "------------------------------------------------------\n"); + fprintf(stderr, "Error: Video recording is not supported on Android due\n"); + fprintf(stderr, "to the lack of the required gstreamer functionality\n"); + fprintf(stderr, "------------------------------------------------------\n"); + ORIGINATE_ERROR("Unsupported function on Android"); + } + + AppModuleVideo *module = reinterpret_cast(userPtr); + + const float seconds = atof(optArg); + if (seconds <= 0.0f) + ORIGINATE_ERROR("'SECONDS' is invalid, must not be less than or equal to zero"); + + // start the video module + PROPAGATE_ERROR(module->start()); + // the scoped guard is used to call the stop function if following calls fail so that + // the function is exited with module stopped. + ScopedGuard runningGuard(module, &AppModuleVideo::stop); + + const TimeValue endTime = getCurrentTime() + TimeValue::fromSec(seconds); + + // start the recording + PROPAGATE_ERROR(module->m_videoRecord.startRecording()); + ScopedGuard recordingGuard(&module->m_videoRecord, + &TaskVideoRecord::stopRecording); + + // wait until the time has elapsed + while (getCurrentTime() < endTime) + { + PROPAGATE_ERROR(Window::getInstance().pollEvents()); + usleep(1000); + } + + // stop recording + recordingGuard.cancel(); + PROPAGATE_ERROR(module->m_videoRecord.stopRecording()); + + // stop the module + runningGuard.cancel(); + PROPAGATE_ERROR(module->stop()); + + return true; +} + +/* static */ bool AppModuleVideo::toggleRecording(void *userPtr, const char *optArg) +{ + AppModuleVideo *module = reinterpret_cast(userPtr); + + PROPAGATE_ERROR(module->m_videoRecord.toggleRecording()); + + return true; +} + +AppModuleVideo::AppModuleVideo() + : m_initialized(false) + , m_running(false) + , m_guiContainerConfig(NULL) + , m_guiConfig(NULL) +{ +} + +AppModuleVideo::~AppModuleVideo() +{ + shutdown(); +} + +bool AppModuleVideo::initialize(Options &options) +{ + if (m_initialized) + return true; + + PROPAGATE_ERROR(m_videoRecord.initialize()); + + PROPAGATE_ERROR(options.addOption( + Options::Option("video", 'v', "DURATION", Options::Option::TYPE_ACTION, + "record video for DURATION seconds and save to a file.", video, this))); + + PROPAGATE_ERROR(options.addOption( + createValueOption("videobitrate", 0, "RATE", + "set the video bit rate mode to RATE. If RATE is zero a reasonable default " + "is selected.", Dispatcher::getInstance().m_videoBitRate))); + PROPAGATE_ERROR(options.addOption( + createValueOption("videoformat", 0, "FORMAT", + "set the video format. Jetson-tx1 doesn't support vp9, use other " + "available formats.", Dispatcher::getInstance().m_videoFormat))); + PROPAGATE_ERROR(options.addOption( + createValueOption("videofiletype", 0, "TYPE", + "set the video file type. For video format 'h265/vp9' set the file type as 'mkv' " + "since 'h265 & vp9' are only supported by the 'mkv' container.", + Dispatcher::getInstance().m_videoFileType))); + + m_initialized = true; + + return true; +} + +bool AppModuleVideo::shutdown() +{ + if (!m_initialized) + return true; + + PROPAGATE_ERROR_CONTINUE(stop()); + + PROPAGATE_ERROR_CONTINUE(m_videoRecord.shutdown()); + + delete m_guiConfig; + m_guiConfig = NULL; + + m_guiContainerConfig = NULL; + + m_initialized = false; + + return true; +} + +bool AppModuleVideo::start(Window::IGuiMenuBar *iGuiMenuBar, + Window::IGuiContainer *iGuiContainerConfig) +{ + if (m_running) + return true; + + // register key observer + PROPAGATE_ERROR(Window::getInstance().registerObserver(this)); + + // initialize the GUI + if (iGuiContainerConfig && !m_guiConfig) + { + // initialize the GUI + + // create a grid container + PROPAGATE_ERROR(Window::IGuiContainerGrid::create(&m_guiConfig)); + + // create the elements + UniquePointer element; + Dispatcher &dispatcher = Dispatcher::getInstance(); + + Window::IGuiContainerGrid::BuildHelper buildHelper(m_guiConfig); + +#define CREATE_GUI_ELEMENT(_NAME, _VALUE) \ + PROPAGATE_ERROR(Window::IGuiElement::createValue(&dispatcher._VALUE, &element));\ + PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \ + element.release(); + +#define CREATE_GUI_ELEMENT_COMBO_BOX(_NAME, _VALUE, _FROMTYPE, _TOTYPE) \ + assert(sizeof(_FROMTYPE) == sizeof(_TOTYPE)); \ + PROPAGATE_ERROR(Window::IGuiElement::createValue(reinterpret_cast< \ + Value<_TOTYPE>*>(&dispatcher._VALUE), &element)); \ + PROPAGATE_ERROR(buildHelper.append(_NAME, element.get())); \ + element.release(); + + CREATE_GUI_ELEMENT_COMBO_BOX("Video Format", m_videoFormat, + VideoPipeline::VideoFormat, Window::IGuiElement::ValueTypeEnum); + CREATE_GUI_ELEMENT_COMBO_BOX("Video File Type", m_videoFileType, + VideoPipeline::VideoFileType, Window::IGuiElement::ValueTypeEnum); + + CREATE_GUI_ELEMENT("Video Bit Rate", m_videoBitRate); + +#undef CREATE_GUI_ELEMENT +#undef CREATE_GUI_ELEMENT_COMBO_BOX + + PROPAGATE_ERROR(Window::IGuiElement::createAction("Toggle Recording", + AppModuleVideo::toggleRecording, this, Window::IGuiElement::FLAG_BUTTON_TOGGLE, + Window::IGuiElement::ICON_MEDIA_RECORD, &element)); + PROPAGATE_ERROR(buildHelper.append(element.get(), 2)); + element.release(); + + m_guiContainerConfig = iGuiContainerConfig; + } + + if (m_guiContainerConfig) + PROPAGATE_ERROR(m_guiContainerConfig->add(m_guiConfig)); + + PROPAGATE_ERROR(m_videoRecord.start()); + + m_running = true; + + return true; +} + +bool AppModuleVideo::stop() +{ + if (!m_running) + return true; + + PROPAGATE_ERROR(m_videoRecord.stop()); + + if (m_guiContainerConfig) + PROPAGATE_ERROR(m_guiContainerConfig->remove(m_guiConfig)); + + // unregister key observer + PROPAGATE_ERROR(Window::getInstance().unregisterObserver(this)); + + m_running = false; + + return true; +} + +bool AppModuleVideo::onKey(const Key &key) +{ + if (key == Key("space")) + { + PROPAGATE_ERROR(m_videoRecord.toggleRecording()); + } + + return true; +} + +}; // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/apps/camera/ui/video/AppModuleVideo.h b/jetson_multimedia_api/argus/apps/camera/ui/video/AppModuleVideo.h new file mode 100644 index 0000000..a4efac2 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/video/AppModuleVideo.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ARGUS_APPS_CAMERA_UI_APP_MODULE_VIDEO_H +#define ARGUS_APPS_CAMERA_UI_APP_MODULE_VIDEO_H + +#include "IAppModule.h" +#include "tasks/VideoRecord.h" + +namespace ArgusSamples +{ + +/** + * The video app module adds functionality to record a video and save it. + */ +class AppModuleVideo : public IAppModule, public Window::IKeyObserver +{ +public: + AppModuleVideo(); + virtual ~AppModuleVideo(); + + /** @name IAppModule methods */ + /**@{*/ + virtual bool initialize(Options &options); + virtual bool shutdown(); + virtual bool start(Window::IGuiMenuBar *iGuiMenuBar = NULL, + Window::IGuiContainer *iGuiContainerConfig = NULL); + virtual bool stop(); + /**@}*/ + + /** @name option callbacks */ + /**@{*/ + static bool video(void *userPtr, const char *optArg); + static bool toggleRecording(void *userPtr, const char *optArg); + /**@}*/ + +private: + bool m_initialized; ///< set if initialized + bool m_running; ///< set if running + TaskVideoRecord m_videoRecord; ///< video recording task + + Window::IGuiContainer *m_guiContainerConfig; ///< configuration GUI container + Window::IGuiContainerGrid *m_guiConfig; ///< configuration GUI + + /** @name IKeyObserver methods */ + /**@{*/ + virtual bool onKey(const Key &key); + /**@}*/ +}; + +}; // namespace ArgusSamples + +#endif // ARGUS_APPS_CAMERA_UI_APP_MODULE_VIDEO_H diff --git a/jetson_multimedia_api/argus/apps/camera/ui/video/CMakeLists.txt b/jetson_multimedia_api/argus/apps/camera/ui/video/CMakeLists.txt new file mode 100644 index 0000000..f5b9462 --- /dev/null +++ b/jetson_multimedia_api/argus/apps/camera/ui/video/CMakeLists.txt @@ -0,0 +1,43 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +project(arguscamerauivideo) + +set(SOURCES + AppModuleVideo.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/apps/camera/ui/common + ${CMAKE_SOURCE_DIR}/apps/camera/common + ${CMAKE_SOURCE_DIR}/apps/camera/modules + ${CMAKE_SOURCE_DIR}/apps/camera/renderer + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_library(${PROJECT_NAME} ${SOURCES}) diff --git a/jetson_multimedia_api/argus/cmake/FindArgus.cmake b/jetson_multimedia_api/argus/cmake/FindArgus.cmake new file mode 100644 index 0000000..074bd57 --- /dev/null +++ b/jetson_multimedia_api/argus/cmake/FindArgus.cmake @@ -0,0 +1,58 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# - Try to find Argus +# Once done this will define +# ARGUS_FOUND - System has Argus +# ARGUS_INCLUDE_DIRS - The Argus include directories +# ARGUS_LIBRARIES - The libraries needed to use Argus +# ARGUS_DEFINITIONS - Compiler switches required for using Argus + +find_package(PkgConfig) + +find_path(ARGUS_INCLUDE_DIR Argus/Argus.h + HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../../include) + +find_library(ARGUS_LIBRARY NAMES nvargus + HINTS /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/tegra) +find_library(ARGUS_LIBRARY_MULTIPROCESS NAMES nvargus_socketclient + HINTS /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/tegra) + +if (DISABLE_MULTIPROCESS) +set(ARGUS_LIBRARIES ${ARGUS_LIBRARY}) +else() +set(ARGUS_LIBRARIES ${ARGUS_LIBRARY_MULTIPROCESS}) +endif() + +set(ARGUS_INCLUDE_DIRS ${ARGUS_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set ARGUS_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(Argus DEFAULT_MSG + ARGUS_LIBRARY ARGUS_INCLUDE_DIR) + +mark_as_advanced(ARGUS_INCLUDE_DIR ARGUS_LIBRARY) diff --git a/jetson_multimedia_api/argus/cmake/FindEGL.cmake b/jetson_multimedia_api/argus/cmake/FindEGL.cmake new file mode 100644 index 0000000..426886f --- /dev/null +++ b/jetson_multimedia_api/argus/cmake/FindEGL.cmake @@ -0,0 +1,50 @@ +# Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# - Try to find EGL +# Once done this will define +# EGL_FOUND - System has EGL +# EGL_INCLUDE_DIRS - The EGL include directories +# EGL_LIBRARIES - The libraries needed to use EGL +# EGL_DEFINITIONS - Compiler switches required for using EGL + +find_package(PkgConfig) + +find_path(EGL_INCLUDE_DIR EGL/egl.h + HINTS ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/../include) + +find_library(EGL_LIBRARY NAMES EGL) + +set(EGL_LIBRARIES ${EGL_LIBRARY}) +set(EGL_INCLUDE_DIRS ${EGL_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set EGL_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(EGL DEFAULT_MSG + EGL_LIBRARY EGL_INCLUDE_DIR) + +mark_as_advanced(EGL_INCLUDE_DIR EGL_LIBRARY) diff --git a/jetson_multimedia_api/argus/cmake/FindNVMMAPI.cmake b/jetson_multimedia_api/argus/cmake/FindNVMMAPI.cmake new file mode 100644 index 0000000..1be9661 --- /dev/null +++ b/jetson_multimedia_api/argus/cmake/FindNVMMAPI.cmake @@ -0,0 +1,52 @@ +# Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# - Try to find the NVIDIA Tegra Multimedia API +# Once done this will define +# NVMMAPI_FOUND - System has NVMMAPI +# NVMMAPI_INCLUDE_DIRS - The NVMMAPI include directories +# NVMMAPI_LIBRARIES - The libraries needed to use the NVMMAPI +# NVMMAPI_DEFINITIONS - Compiler switches required for using NVMMAPI + +find_package(PkgConfig) + +find_path(NVMMAPI_INCLUDE_DIR nvbuf_utils.h + HINTS ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/../include) + +find_library(NVMMAPI_LIBRARY NAMES nvbuf_utils + HINTS /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/tegra) + +set(NVMMAPI_LIBRARIES ${NVMMAPI_LIBRARY}) +set(NVMMAPI_INCLUDE_DIRS ${NVMMAPI_INCLUDE_DIR}) +set(NVMMAPI_DEFINITIONS -DNVMMAPI_SUPPORTED) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set ARGUS_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(NVMMAPI DEFAULT_MSG + NVMMAPI_LIBRARY NVMMAPI_INCLUDE_DIR) + +mark_as_advanced(NVMMAPI_INCLUDE_DIR NVMMAPI_LIBRARY) diff --git a/jetson_multimedia_api/argus/cmake/FindOpenGL.cmake b/jetson_multimedia_api/argus/cmake/FindOpenGL.cmake new file mode 100644 index 0000000..a8e7835 --- /dev/null +++ b/jetson_multimedia_api/argus/cmake/FindOpenGL.cmake @@ -0,0 +1,50 @@ +# Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# - Try to find OpenGL +# Once done this will define +# OPENGL_FOUND - System has OpenGL +# OPENGL_INCLUDE_DIRS - The OpenGL include directories +# OPENGL_LIBRARIES - The libraries needed to use OpenGL +# OPENGL_DEFINITIONS - Compiler switches required for using OpenGL + +find_package(PkgConfig) + +find_path(OPENGL_INCLUDE_DIR GL/gl.h + HINTS ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/../include) + +find_library(OPENGL_LIBRARY NAMES GL) + +set(OPENGL_LIBRARIES ${OPENGL_LIBRARY}) +set(OPENGL_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set OPENGL_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(OpenGL DEFAULT_MSG + OPENGL_LIBRARY OPENGL_INCLUDE_DIR) + +mark_as_advanced(OPENGL_INCLUDE_DIR OPENGL_LIBRARY) diff --git a/jetson_multimedia_api/argus/cmake/FindOpenGLES.cmake b/jetson_multimedia_api/argus/cmake/FindOpenGLES.cmake new file mode 100644 index 0000000..89b193f --- /dev/null +++ b/jetson_multimedia_api/argus/cmake/FindOpenGLES.cmake @@ -0,0 +1,50 @@ +# Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# - Try to find OpenGLES +# Once done this will define +# OPENGLES_FOUND - System has OpenGLES +# OPENGLES_INCLUDE_DIRS - The OpenGLES include directories +# OPENGLES_LIBRARIES - The libraries needed to use OpenGLES +# OPENGLES_DEFINITIONS - Compiler switches required for using OpenGLES + +find_package(PkgConfig) + +find_path(OPENGLES_INCLUDE_DIR GLES3/gl3.h + HINTS ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/../include) + +find_library(OPENGLES_LIBRARY NAMES libGLESv2.so.2) + +set(OPENGLES_LIBRARIES ${OPENGLES_LIBRARY}) +set(OPENGLES_INCLUDE_DIRS ${OPENGLES_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set OPENGLES_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(OpenGLES DEFAULT_MSG + OPENGLES_LIBRARY OPENGLES_INCLUDE_DIR) + +mark_as_advanced(OPENGLES_INCLUDE_DIR OPENGLES_LIBRARY) diff --git a/jetson_multimedia_api/argus/docs/Argus.0.98.pdf b/jetson_multimedia_api/argus/docs/Argus.0.98.pdf new file mode 100644 index 0000000..2a04ec5 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/Argus.0.98.pdf differ diff --git a/jetson_multimedia_api/argus/docs/ArgusExt.0.98.pdf b/jetson_multimedia_api/argus/docs/ArgusExt.0.98.pdf new file mode 100644 index 0000000..444e734 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/ArgusExt.0.98.pdf differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Argus_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/Argus_8h.html new file mode 100644 index 0000000..e45d2e3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Argus_8h.html @@ -0,0 +1,128 @@ + + + + + +Libargus API: include/Argus/Argus.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus.h File Reference
+
+
+ +

Libargus API: Main Include File +More...

+
#include <stddef.h>
+#include "Argus/UUID.h"
+#include "Argus/Types.h"
+#include "Argus/Stream.h"
+#include "Argus/BufferStream.h"
+#include "Argus/CameraDevice.h"
+#include "Argus/CameraProvider.h"
+#include "Argus/CaptureMetadata.h"
+#include "Argus/CaptureSession.h"
+#include "Argus/EGLImage.h"
+#include "Argus/EGLStream.h"
+#include "Argus/EGLSync.h"
+#include "Argus/Event.h"
+#include "Argus/EventProvider.h"
+#include "Argus/EventQueue.h"
+#include "Argus/Request.h"
+#include "Argus/Settings.h"
+
+

Go to the source code of this file.

+

Detailed Description

+

Libargus API: Main Include File

+

Description: This is the main include file for libargus applications.

+ +

Definition in file Argus.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Argus_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/Argus_8h_source.html new file mode 100644 index 0000000..434aff6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Argus_8h_source.html @@ -0,0 +1,232 @@ + + + + + +Libargus API: include/Argus/Argus.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Main Include File</b>
+
32  *
+
33  * @b Description: This is the main include file for libargus applications.
+
34  */
+
35 
+
36 #ifndef _ARGUS_H
+
37 #define _ARGUS_H
+
38 
+
39 /**
+
40  * @defgroup LibargusAPI Libargus Camera API
+
41  *
+
42  * Libargus is an API for acquiring images and associated metadata from cameras.
+
43  * The fundamental libargus operation is a capture:
+
44  * acquiring an image from a sensor and processing it into a final output image.
+
45  *
+
46  * Currently, libargus is supported on Android and all Jetson Linux platforms.
+
47  *
+
48  * Libargus is designed to address a number of fundamental requirements:
+
49  *
+
50  * - Support for a wide variety of use cases (traditional photography, computational photography,
+
51  * video, computer vision, and other application areas.)
+
52  * To this end, libargus is a frame-based API; every capture is triggered by an explicit request that
+
53  * specifies exactly how the capture is to be performed.
+
54  *
+
55  * - Support for multiple platforms, including L4T and Android.
+
56  *
+
57  * - Efficient and simple integration into applications and larger frameworks. In support of this,
+
58  * libargus delivers images with EGLStreams, which are directly supported by other system components
+
59  * such as OpenGL and Cuda, and which require no buffer copies during delivery to the consumer.
+
60  *
+
61  * - Expansive metadata along with each output image.
+
62  *
+
63  * - Support for multiple sensors, including both separate control over independent sensors and
+
64  * access to synchronized multi-sensor configurations. (The latter are unsupported in the current
+
65  * release. When support is added, it will be available on only some NVIDIA platforms.)
+
66  *
+
67  * - Version stability and extensibility, which are provided by unchanging virtual interfaces and
+
68  * the ability for vendors to add specialized extension interfaces.
+
69  *
+
70  * Libargus provides functionality in a number of different areas:
+
71  *
+
72  * - Captures with a wide variety of settings.
+
73  *
+
74  * - Optional autocontrol (such as auto-exposure and auto-white-balance.)
+
75  *
+
76  * - Libraries that consume the EGLStream outputs in different ways; for example, jpeg encoding or
+
77  * direct application access to the images.
+
78  *
+
79  * - Metadata delivery via both libargus events and EGLStream metadata.
+
80  *
+
81  * - Image post-processing such as noise reduction and edge sharpening.
+
82  *
+
83  * - Notification of errors, image acquisition start, and other events via synchronous event queues.
+
84  *
+
85  * Functionality not provided by libargus:
+
86  *
+
87  * - Auto-focus. (Planned to be added in a later release.)
+
88  *
+
89  * - Reprocessing of YUV images (such as that required by Android’s Zero Shutter Lag feature.)
+
90  *
+
91  * - Reprocessing of Bayer (raw) images. (Planned to be added in a later release.)
+
92  *
+
93  * @defgroup ArgusObjects Objects and Interfaces
+
94  * This module provides a list of libargus objects and the interfaces that they support.
+
95  * Children of objects in this list describe either child InterfaceProviders provided by
+
96  * the object or specialized types of the object (ie. Event types).
+
97  * @ingroup LibargusAPI
+
98  *
+
99  * @defgroup ArgusExtensions Extensions
+
100  * This module provides a list of extensions currently available for libargus.
+
101  * @ingroup LibargusAPI
+
102  */
+
103 
+
104 /**
+
105  * @ifnot SWDOCS_L4T <!-- Hides open-source doxy entries in L4T build.-->
+
106  * @mainpage
+
107  * Proceed to the \ref LibargusAPI module for libargus documentation.
+
108  * @endif
+
109  */
+
110 
+
111 #include <stddef.h>
+
112 
+
113 #include "Argus/UUID.h"
+
114 #include "Argus/Types.h"
+
115 #include "Argus/Stream.h"
+
116 
+
117 #include "Argus/BufferStream.h"
+
118 #include "Argus/CameraDevice.h"
+
119 #include "Argus/CameraProvider.h"
+
120 #include "Argus/CaptureMetadata.h"
+
121 #include "Argus/CaptureSession.h"
+
122 #include "Argus/EGLImage.h"
+
123 #include "Argus/EGLStream.h"
+
124 #include "Argus/EGLSync.h"
+
125 #include "Argus/Event.h"
+
126 #include "Argus/EventProvider.h"
+
127 #include "Argus/EventQueue.h"
+
128 #include "Argus/Request.h"
+
129 #include "Argus/Settings.h"
+
130 
+
131 #endif
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/BayerAverageMap_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/BayerAverageMap_8h.html new file mode 100644 index 0000000..9dc947a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/BayerAverageMap_8h.html @@ -0,0 +1,134 @@ + + + + + +Libargus API: include/Argus/Ext/BayerAverageMap.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
BayerAverageMap.h File Reference
+
+
+ +

Libargus Extension: Bayer Average Map API +More...

+ +

Go to the source code of this file.

+ + + + + + +

+Classes

class  Argus::Ext::IBayerAverageMapSettings
 Interface to Bayer average map settings. More...
class  Argus::Ext::IBayerAverageMap
 Interface to Bayer average map metadata. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_BAYER_AVERAGE_MAP, 12c3de20, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_BAYER_AVERAGE_MAP_SETTINGS, 12c3de21, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_BAYER_AVERAGE_MAP, 12c3de22, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus Extension: Bayer Average Map API

+

Description: This file defines the BayerAverageMap extension.

+ +

Definition in file BayerAverageMap.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/BayerAverageMap_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/BayerAverageMap_8h_source.html new file mode 100644 index 0000000..055b47d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/BayerAverageMap_8h_source.html @@ -0,0 +1,337 @@ + + + + + +Libargus API: include/Argus/Ext/BayerAverageMap.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
BayerAverageMap.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Bayer Average Map API</b>
+
32  *
+
33  * @b Description: This file defines the BayerAverageMap extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_EXT_BAYER_AVERAGE_MAP_H
+
37 #define _ARGUS_EXT_BAYER_AVERAGE_MAP_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Generates local averages of a capture's raw Bayer data. These averages are generated for
+
44  * a number of small rectangles, called bins, that are evenly distributed across the image.
+
45  * These averages may be calculated before optical clipping to the output bit depth occurs, thus
+
46  * the working range of this averaging may extend beyond the optical range of the output pixels;
+
47  * this allows the averages to remain steady while the sensor freely modifies its optical range.
+
48  *
+
49  * Any pixel values outside of the working range are clipped with respect to this averaging.
+
50  * Specifically, the API excludes them from the average calculation and increments
+
51  * the clipped pixel counter for the containing region.
+
52  * @see Ext::IBayerAverageMap::getClipCounts()
+
53  *
+
54  * This extension introduces two new interfaces:
+
55  * - Ext::IBayerAverageMapSettings enables average map generation in a capture Request.
+
56  * - Ext::IBayerAverageMap exposes the average map values from the CaptureMetadata.
+
57  *
+
58  * @defgroup ArgusExtBayerAverageMap Ext::BayerAverageMap
+
59  * @ingroup ArgusExtensions
+
60  */
+
61 DEFINE_UUID(ExtensionName, EXT_BAYER_AVERAGE_MAP, 12c3de20,64c5,11e6,bdf4,08,00,20,0c,9a,66);
+
62 
+
63 namespace Ext
+
64 {
+
65 
+
66 /**
+
67  * @class IBayerAverageMapSettings
+
68  *
+
69  * Interface to Bayer average map settings.
+
70  *
+
71  * @ingroup ArgusRequest ArgusExtBayerAverageMap
+
72  */
+
73 DEFINE_UUID(InterfaceID, IID_BAYER_AVERAGE_MAP_SETTINGS, 12c3de21,64c5,11e6,bdf4,08,00,20,0c,9a,66);
+ +
75 {
+
76 public:
+
77  static const InterfaceID& id() { return IID_BAYER_AVERAGE_MAP_SETTINGS; }
+
78 
+
79  /**
+
80  * Enables or disables Bayer average map generation. When enabled, CaptureMetadata
+
81  * returned by completed captures will expose the IBayerAverageMap interface.
+
82  *
+
83  * @param[in] enable whether or not Bayer average map generation is enabled.
+
84  */
+
85  virtual void setBayerAverageMapEnable(bool enable) = 0;
+
86 
+
87  /**
+
88  * @returns whether or not Bayer average map generation is enabled.
+
89  */
+
90  virtual bool getBayerAverageMapEnable() const = 0;
+
91 
+
92 protected:
+ +
94 };
+
95 
+
96 /**
+
97  * @class IBayerAverageMap
+
98  *
+
99  * Interface to Bayer average map metadata.
+
100  *
+
101  * The Bayer average map provides local averages of the capture's raw pixels for a number
+
102  * of small rectangular regions, called bins, that are evenly distributed across the image.
+
103  * Each average is a floating-point value that is nomalized such that [0.0, 1.0] maps to the
+
104  * full optical range of the output pixels, but values outside this range may be included in
+
105  * the averages so long as they are within the working range of the average calculation.
+
106  * For pixels that have values outside the working range, the API excludes such pixels from the
+
107  * average calculation and increments the clipped pixel counter for the containing region.
+
108  * @see IBayerAverageMap::getWorkingRange()
+
109  * @see IBayerAverageMap::getClipCounts()
+
110  *
+
111  * The size and layout of the bins used to calculate the averages are determined by the Argus
+
112  * implementation and are illustrated in the following diagram. The bin size and interval are
+
113  * constant across the image, and are positioned such that the generated averages cover the
+
114  * majority of the full image. All dimensions are given in pixels.
+
115  *
+
116  * @code
+
117  * start.x interval.width
+
118  * _______ _________________
+
119  * | | | |
+
120  * _ ________________________________________________________
+
121  * | | |
+
122  * start.y | | |
+
123  * |_ | _____ _____ _____ | _
+
124  * | | | | | | | | |
+
125  * | | 0,0 | | 1,0 | | 2,0 | | |
+
126  * | |_____| |_____| |_____| | |
+
127  * | | | interval.height
+
128  * | | |
+
129  * | | |
+
130  * | _____ _____ _____ | _|
+
131  * | | | | | | | |
+
132  * | | 0,1 | | 1,1 | | 2,1 | |
+
133  * | |_____| |_____| |_____| |
+
134  * | |
+
135  * | |
+
136  * | |
+
137  * | _____ _____ _____ | _
+
138  * | | | | | | | | |
+
139  * | | 0,2 | | 1,2 | | 2,2 | | | size.height
+
140  * | |_____| |_____| |_____| | _|
+
141  * | |
+
142  * | |
+
143  * |________________________________________________________|
+
144  *
+
145  * |_____|
+
146  *
+
147  * size.width
+
148  * @endcode
+
149  *
+
150  * @ingroup ArgusCaptureMetadata ArgusExtBayerAverageMap
+
151  */
+
152 DEFINE_UUID(InterfaceID, IID_BAYER_AVERAGE_MAP, 12c3de22,64c5,11e6,bdf4,08,00,20,0c,9a,66);
+ +
154 {
+
155 public:
+
156  static const InterfaceID& id() { return IID_BAYER_AVERAGE_MAP; }
+
157 
+
158  /**
+
159  * Returns the starting location of the first bin, in pixels, where the
+
160  * location is relative to the top-left corner of the image.
+
161  */
+
162  virtual Point2D<uint32_t> getBinStart() const = 0;
+
163 
+
164  /**
+
165  * Returns the size of each bin, in pixels.
+
166  */
+
167  virtual Size2D<uint32_t> getBinSize() const = 0;
+
168 
+
169  /**
+
170  * Returns the number of bins in both the horizontal (width) and vertical (height) directions.
+
171  * This size is equivalent to the array dimensions for the output from
+
172  * IBayerAverageMap::getAverages() or IBayerAverageMap::getClipCounts().
+
173  */
+
174  virtual Size2D<uint32_t> getBinCount() const = 0;
+
175 
+
176  /**
+
177  * Returns the bin intervals for both the x and y axis. These intervals are defined as the
+
178  * number of pixels between the first pixel of a bin and that of the immediate next bin.
+
179  */
+
180  virtual Size2D<uint32_t> getBinInterval() const = 0;
+
181 
+
182  /**
+
183  * Returns the working range of the averaging calculation. The working range is defined as
+
184  * the range of values that are included in the average calculation (e.g. not clipped),
+
185  * and may extend beyond the normalized [0.0, 1.0] range of the optical output. For example,
+
186  * if the working range is [-0.5, 1.5], this means that values in [-0.5, 0) and (1, 1.5] will
+
187  * still be included in the average calculation despite being clipped to [0.0, 1.0] in the
+
188  * output pixels. Any pixels outside this working range are excluded from average calculation
+
189  * and will increment the clip count.
+
190  * @see IBayerAverageMap::getClipCounts()
+
191  *
+
192  * @note When the bit depth available for averaging is equal to the optical bit depth of
+
193  * the output, the working range will be less than the full [0.0, 1.0] optical range. For
+
194  * example, when 10 bits of data are available, the raw output pixels in [0u, 1023u] will
+
195  * map to [0.0, 1.0]; however, the values of 0 and 1023 will be considered clipped for the
+
196  * sake of average calculation, and so the working range would be [1/1023.0, 1022/1023.0].
+
197  */
+
198  virtual Range<float> getWorkingRange() const = 0;
+
199 
+
200  /**
+
201  * Returns the average values for all bins. These values are normalized such that
+
202  * [0.0, 1.0] maps to the optical range of the output, but the range of possible values
+
203  * is determined by the working range. For input pixels that have values outside the
+
204  * working range, the API excludes such pixels from the average calculation and
+
205  * increments the clipped pixel counter for the containing region.
+
206  * @see IBayerAverageMap::getWorkingRange()
+
207  * @see IBayerAverageMap::getClipCounts()
+
208  *
+
209  * @param[out] averages The output array to store the averages for all bins. This
+
210  * 2-dimensional array is sized as returned by IBayerAverageMap::getBinCount(),
+
211  * where each array element is a floating point BayerTuple containing the R,
+
212  * G_EVEN, G_ODD, and B averages for that bin.
+
213  */
+
214  virtual Status getAverages(Array2D< BayerTuple<float> >* averages) const = 0;
+
215 
+
216  /**
+
217  * Returns the clipped pixel counts for all bins. This is the number of pixels in the bin
+
218  * whose value exceeds the working range and have been excluded from average calculation.
+
219  * @see IBayerAverageMap::getWorkingRange()
+
220  *
+
221  * @param[out] clipCounts The output array to store the clip counts for all bins. This
+
222  * 2-dimensional array is sized as returned by
+
223  * Ext::IBayerAverageMap::getBinCount(), where each array element is an uint32_t
+
224  * BayerTuple containing the R, G_EVEN, G_ODD, and B clip counts for that bin.
+
225  */
+
226  virtual Status getClipCounts(Array2D< BayerTuple<uint32_t> >* clipCounts) const = 0;
+
227 
+
228 protected:
+ +
230 };
+
231 
+
232 } // namespace Ext
+
233 
+
234 } // namespace Argus
+
235 
+
236 #endif // _ARGUS_EXT_BAYER_AVERAGE_MAP_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/BayerSharpnessMap_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/BayerSharpnessMap_8h.html new file mode 100644 index 0000000..61f7ab7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/BayerSharpnessMap_8h.html @@ -0,0 +1,134 @@ + + + + + +Libargus API: include/Argus/Ext/BayerSharpnessMap.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
BayerSharpnessMap.h File Reference
+
+
+ +

Libargus Extension: Bayer Sharpness Map API +More...

+ +

Go to the source code of this file.

+ + + + + + +

+Classes

class  Argus::Ext::IBayerSharpnessMapSettings
 Interface to Bayer sharpness map settings. More...
class  Argus::Ext::IBayerSharpnessMap
 Interface to Bayer sharpness map metadata. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_BAYER_SHARPNESS_MAP, 7d5e0470, 4ea6, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_BAYER_SHARPNESS_MAP_SETTINGS, 7d5e0471, 4ea6, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_BAYER_SHARPNESS_MAP, 7d5e0472, 4ea6, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus Extension: Bayer Sharpness Map API

+

Description: This file defines the BayerSharpnessMap extension.

+ +

Definition in file BayerSharpnessMap.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/BayerSharpnessMap_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/BayerSharpnessMap_8h_source.html new file mode 100644 index 0000000..1fa48a2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/BayerSharpnessMap_8h_source.html @@ -0,0 +1,288 @@ + + + + + +Libargus API: include/Argus/Ext/BayerSharpnessMap.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
BayerSharpnessMap.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Bayer Sharpness Map API</b>
+
32  *
+
33  * @b Description: This file defines the BayerSharpnessMap extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_EXT_BAYER_SHARPNESS_MAP_H
+
37 #define _ARGUS_EXT_BAYER_SHARPNESS_MAP_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Adds internally-generated sharpness metrics to CaptureMetadata results. These are used
+
44  * in order to help determine the correct position of the lens to achieve the best focus.
+
45  * It introduces two new interfaces:
+
46  * - Ext::IBayerSharpnessMapSettings: enables sharness map generation in a capture Request.
+
47  * - Ext::IBayerSharpnessMap: exposes the sharpness map metrics from the CaptureMetadata.
+
48  *
+
49  * @defgroup ArgusExtBayerSharpnessMap Ext::BayerSharpnessMap
+
50  * @ingroup ArgusExtensions
+
51  */
+
52 DEFINE_UUID(ExtensionName, EXT_BAYER_SHARPNESS_MAP, 7d5e0470,4ea6,11e6,bdf4,08,00,20,0c,9a,66);
+
53 
+
54 namespace Ext
+
55 {
+
56 
+
57 /**
+
58  * @class IBayerSharpnessMapSettings
+
59  *
+
60  * Interface to Bayer sharpness map settings.
+
61  *
+
62  * @ingroup ArgusRequest ArgusExtBayerSharpnessMap
+
63  */
+
64 DEFINE_UUID(InterfaceID, IID_BAYER_SHARPNESS_MAP_SETTINGS, 7d5e0471,4ea6,11e6,bdf4,08,00,20,0c,9a,66);
+ +
66 {
+
67 public:
+
68  static const InterfaceID& id() { return IID_BAYER_SHARPNESS_MAP_SETTINGS; }
+
69 
+
70  /**
+
71  * Enables or disables Bayer sharpness map generation. When enabled, CaptureMetadata
+
72  * returned by completed captures expose the IBayerSharpnessMap interface.
+
73  * @param[in] enable If True, Bayer sharpness map generation is enabled.
+
74  */
+
75  virtual void setBayerSharpnessMapEnable(bool enable) = 0;
+
76 
+
77  /**
+
78  * Returns True if sharpness map generation is enabled.
+
79  */
+
80  virtual bool getBayerSharpnessMapEnable() const = 0;
+
81 
+
82 protected:
+ +
84 };
+
85 
+
86 /**
+
87  * @class IBayerSharpnessMap
+
88  *
+
89  * Interface to Bayer sharpness map metadata.
+
90  *
+
91  * The Bayer sharpness map exposes image sharpness metrics that can be used in order
+
92  * to help determine the correct position of the lens to achieve the best focus.
+
93  * Each metric is a normalized floating-point value representing the estimated sharpness
+
94  * for a particular color channel and pixel region, called bins, where 0.0 and 1.0 map to
+
95  * the minimum and maximum possible sharpness values, respectively. Sharpness values
+
96  * generally correlate with image focus in that a low sharpness implies a poorly focused
+
97  * (blurry) region while a high sharpness implies a well focused (sharp) region.
+
98  *
+
99  * The size and layout of the bins used to calculate the sharpness metrics are determined
+
100  * by the libargus implementation, and are illustrated in the following diagram. The bin size
+
101  * and interval are constant across the image, and are positioned such that the generated
+
102  * metrics cover the majority of the full image. All dimensions are given in pixels.
+
103  *
+
104  * @code
+
105  * start.x interval.width
+
106  * _______ _________________
+
107  * | | | |
+
108  * _ ________________________________________________________
+
109  * | | |
+
110  * start.y | | |
+
111  * |_ | _____ _____ _____ | _
+
112  * | | | | | | | | |
+
113  * | | 0,0 | | 1,0 | | 2,0 | | |
+
114  * | |_____| |_____| |_____| | |
+
115  * | | | interval.height
+
116  * | | |
+
117  * | | |
+
118  * | _____ _____ _____ | _|
+
119  * | | | | | | | |
+
120  * | | 0,1 | | 1,1 | | 2,1 | |
+
121  * | |_____| |_____| |_____| |
+
122  * | |
+
123  * | |
+
124  * | |
+
125  * | _____ _____ _____ | _
+
126  * | | | | | | | | |
+
127  * | | 0,2 | | 1,2 | | 2,2 | | | size.height
+
128  * | |_____| |_____| |_____| | _|
+
129  * | |
+
130  * | |
+
131  * |________________________________________________________|
+
132  *
+
133  * |_____|
+
134  *
+
135  * size.width
+
136  * @endcode
+
137  *
+
138  * @ingroup ArgusCaptureMetadata ArgusExtBayerSharpnessMap
+
139  */
+
140 DEFINE_UUID(InterfaceID, IID_BAYER_SHARPNESS_MAP, 7d5e0472,4ea6,11e6,bdf4,08,00,20,0c,9a,66);
+ +
142 {
+
143 public:
+
144  static const InterfaceID& id() { return IID_BAYER_SHARPNESS_MAP; }
+
145 
+
146  /**
+
147  * Returns the starting location of the first bin, in pixels, where the
+
148  * location is relative to the top-left corner of the image.
+
149  */
+
150  virtual Point2D<uint32_t> getBinStart() const = 0;
+
151 
+
152  /**
+
153  * Returns the size of each bin, in pixels.
+
154  */
+
155  virtual Size2D<uint32_t> getBinSize() const = 0;
+
156 
+
157  /**
+
158  * Returns the number of bins in both the horizontal (width) and vertical (height) directions.
+
159  */
+
160  virtual Size2D<uint32_t> getBinCount() const = 0;
+
161 
+
162  /**
+
163  * Returns the bin intervals for both the x and y axis. These intervals are defined as the
+
164  * number of pixels between the first pixel of a bin and that of the immediate next bin.
+
165  */
+
166  virtual Size2D<uint32_t> getBinInterval() const = 0;
+
167 
+
168  /**
+
169  * Returns the sharpness values for all bins and color channels. These values are normalized
+
170  * such that 0.0 and 1.0 map to the minimum and maximum possible sharpness values, respectively.
+
171  *
+
172  * @param[out] values The output array to store the sharpness values for all bins. This
+
173  * 2-dimensional array will be sized as returned by @see getBinCount(), where
+
174  * each array element is a floating point BayerTuple containing the R, G_EVEN,
+
175  * G_ODD, and B sharpness values for that bin.
+
176  */
+
177  virtual Status getSharpnessValues(Array2D< BayerTuple<float> >* values) const = 0;
+
178 
+
179 protected:
+ +
181 };
+
182 
+
183 } // namespace Ext
+
184 
+
185 } // namespace Argus
+
186 
+
187 #endif // _ARGUS_EXT_BAYER_SHARPNESS_MAP_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/BlockingSessionCameraProvider_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/BlockingSessionCameraProvider_8h.html new file mode 100644 index 0000000..4bc509b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/BlockingSessionCameraProvider_8h.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/Ext/BlockingSessionCameraProvider.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
BlockingSessionCameraProvider.h File Reference
+
+
+ +

Libargus Extension: Blocking Session Capture Provider API +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::IBlockingSessionCameraProvider
 Interface used to create blocking capture session. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_BLOCKING_SESSION_CAMERA_PROVIDER, 1fff5f04, 2ea9, 4558, 8e92, c2, 4b, 0b, 82, b9, af)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_BLOCKING_SESSION_CAMERA_PROVIDER, 3122fe85, b4cc, 4945, af5d, a3, 86, 26, 75, eb, a4)
+

Detailed Description

+

Libargus Extension: Blocking Session Capture Provider API

+

Description: This file defines the BlockingSessionCaptureProvider extension.

+ +

Definition in file BlockingSessionCameraProvider.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/BlockingSessionCameraProvider_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/BlockingSessionCameraProvider_8h_source.html new file mode 100644 index 0000000..0db0e4b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/BlockingSessionCameraProvider_8h_source.html @@ -0,0 +1,207 @@ + + + + + +Libargus API: include/Argus/Ext/BlockingSessionCameraProvider.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
BlockingSessionCameraProvider.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Blocking Session Capture Provider API</b>
+
32  *
+
33  * @b Description: This file defines the BlockingSessionCaptureProvider extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_BLOCKING_SESSION_CAMERA_PROVIDER_H
+
37 #define _ARGUS_BLOCKING_SESSION_CAMERA_PROVIDER_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Adds a interface to camera provider to create a blocking capture session.
+
44  * It introduces two new interface:
+
45  * - Ext::IBlockingSessionCameraProvider: creates blocking capture session.
+
46  *
+
47  * @defgroup ArgusExtBlockingSessionCameraProvider Ext::BlockingSessionCameraProvider
+
48  * @ingroup ArgusExtensions
+
49  */
+
50 DEFINE_UUID(ExtensionName, EXT_BLOCKING_SESSION_CAMERA_PROVIDER, 1fff5f04,2ea9,4558,8e92,c2,4b,0b,82,b9,af);
+
51 
+
52 
+
53 namespace Ext
+
54 {
+
55 
+
56 /**
+
57  * @class IBlockingSessionCameraProvider
+
58  *
+
59  * Interface used to create blocking capture session
+
60  *
+
61  * @ingroup ArgusCameraProvider ArgusExtBlockingSessionCameraProvider
+
62  */
+
63 DEFINE_UUID(InterfaceID, IID_BLOCKING_SESSION_CAMERA_PROVIDER, 3122fe85,b4cc,4945,af5d,a3,86,26,75,eb,a4);
+ +
65 {
+
66 public:
+
67  static const InterfaceID& id() { return IID_BLOCKING_SESSION_CAMERA_PROVIDER; }
+
68 
+
69  /**
+
70  * Creates and returns a blocking CaptureSession using the given device.
+
71  * For blocking CaptureSession, the capture related API call will block wait until the request
+
72  * is serviced by underlying driver. This will help timing control in client side
+
73  * when client auto control is involved.
+
74  * In compare, for the default CaptureSession, the capture related API call will put
+
75  * the request in a internal queue and return immediately, without blocking client thread.
+
76  * STATUS_UNAVAILABLE will be placed into @c status if the device is already in use.
+
77  * @param[in] device The device to use for the CaptureSession.
+
78  * @param[out] status Optional pointer to return success/status of the call.
+
79  * @returns The new CaptureSession, or NULL if an error occurred.
+
80  */
+ +
82  Status* status = NULL) = 0;
+
83 
+
84  /**
+
85  * Creates and returns a blocking CaptureSession using the given device.
+
86  * For blocking CaptureSession, the capture related API call will block wait until the request
+
87  * is serviced by underlying driver. This will help timing control in client side
+
88  * when client auto control is involved.
+
89  * STATUS_UNAVAILABLE will be placed into @c status if any of the devices are already in use.
+
90  * @param[in] devices The device(s) to use for the CaptureSession.
+
91  * @param[out] status Optional pointer to return success/status of the call.
+
92  * @returns The new CaptureSession, or NULL if an error occurred.
+
93  */
+
94  virtual CaptureSession* createBlockingCaptureSession(const std::vector<CameraDevice*>& devices,
+
95  Status* status = NULL) = 0;
+
96 
+
97 protected:
+ +
99 };
+
100 
+
101 } // namespace Ext
+
102 
+
103 } // namespace Argus
+
104 
+
105 #endif
+
106 
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/BufferStream_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/BufferStream_8h.html new file mode 100644 index 0000000..2555847 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/BufferStream_8h.html @@ -0,0 +1,143 @@ + + + + + +Libargus API: include/Argus/BufferStream.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
BufferStream.h File Reference
+
+
+ +

Libargus API: BufferStream API +More...

+ +

Go to the source code of this file.

+ + + + + + + + + + +

+Classes

class  Argus::Buffer
class  Argus::BufferSettings
class  Argus::IBufferOutputStreamSettings
 Interface that exposes the configuration available to Buffer-based OutputStreams. More...
class  Argus::IBufferOutputStream
 Interface that provides the methods used with Buffer-based OutputStreams. More...
class  Argus::IBuffer
 Interface that provides the core methods for Buffer objects. More...
+ + +

+Namespaces

namespace  Argus
+ + + + + + + + + + +

+Functions

 Argus::DEFINE_UUID (StreamType, STREAM_TYPE_BUFFER, c723d960, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 OutputStream type that writes to application-managed Buffers.
 Argus::DEFINE_NAMED_UUID_CLASS (BufferType)
 Argus::DEFINE_UUID (BufferType, BUFFER_TYPE_NONE, c723d961, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_NAMED_UUID_CLASS (SyncType)
 Argus::DEFINE_UUID (SyncType, SYNC_TYPE_NONE, c723d962, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (InterfaceID, IID_BUFFER_OUTPUT_STREAM_SETTINGS, c723d963, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (InterfaceID, IID_BUFFER_OUTPUT_STREAM, c723d964, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (InterfaceID, IID_BUFFER, c723d965, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus API: BufferStream API

+

Description: Defines an OutputStream type used to write to application-managed buffers.

+ +

Definition in file BufferStream.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/BufferStream_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/BufferStream_8h_source.html new file mode 100644 index 0000000..47a2a7f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/BufferStream_8h_source.html @@ -0,0 +1,509 @@ + + + + + +Libargus API: include/Argus/BufferStream.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
BufferStream.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: BufferStream API</b>
+
32  *
+
33  * @b Description: Defines an OutputStream type used to write to application-managed buffers.
+
34  */
+
35 
+
36 #ifndef _ARGUS_BUFFER_STREAM_H
+
37 #define _ARGUS_BUFFER_STREAM_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * @defgroup ArgusBufferOutputStream BufferOutputStream
+
44  * @ingroup ArgusOutputStream
+
45  * @ref ArgusOutputStream type that writes to application-managed buffers (STREAM_TYPE_BUFFER).
+
46  *
+
47  * Buffer-based OutputStream objects maintain a set of Buffer objects that are
+
48  * created by the application to wrap native image buffers allocated and owned
+
49  * by the application. These Buffer objects do not take possession of the native
+
50  * resources, which continue to be owned by the application; rather, they are used
+
51  * to control data access between libargus (as capture results are written) and the
+
52  * application (as the capture results are read).
+
53  *
+
54  * Every Buffer stream is associated with a single BufferType, which corresponds
+
55  * to the native resource type that is being wrapped by its Buffers. This BufferType
+
56  * dictates which interfaces will be supported by the OutputStream and the child
+
57  * BufferSettings and Buffer objects created by it, and is immutable after stream
+
58  * creation.
+
59  *
+
60  * In addition to image data, Buffer objects may be optionally used to transport
+
61  * sync information between libargus and the application in order to support hardware
+
62  * level synchronization and pipelining across the API boundary. The type of sync
+
63  * information, and the sync interfaces supported by a Buffer, is controlled by
+
64  * the SyncType.
+
65  */
+
66 /**
+
67  * @defgroup ArgusBufferOutputStreamSettings BufferOutputStreamSettings
+
68  * @ingroup ArgusOutputStreamSettings
+
69  * Settings type used to configure/create @ref ArgusBufferOutputStream streams (STREAM_TYPE_BUFFER).
+
70  */
+
71 
+
72 /**
+
73  * @ref ArgusOutputStream type that writes to application-managed Buffers.
+
74  * @ingroup ArgusOutputStreamSettings
+
75  */
+
76 DEFINE_UUID(StreamType, STREAM_TYPE_BUFFER, c723d960,5231,11e7,9598,18,00,20,0c,9a,66);
+
77 
+
78 /**
+
79  * @defgroup ArgusBufferBuffer Buffer Types
+
80  * @ingroup ArgusBuffer
+
81  * The buffer type describes the type of the image resource being wrapped by the @ref ArgusBuffer.
+
82  */
+
83 /**
+
84  * @defgroup ArgusBufferBufferSettings Buffer Types
+
85  * @ingroup ArgusBufferSettings
+
86  * Provides buffer type specific configuration settings.
+
87  */
+
88 DEFINE_NAMED_UUID_CLASS(BufferType);
+
89 DEFINE_UUID(BufferType, BUFFER_TYPE_NONE, c723d961,5231,11e7,9598,18,00,20,0c,9a,66);
+
90 
+
91 /**
+
92  * @defgroup ArgusBufferSync Sync Types
+
93  * @ingroup ArgusBuffer
+
94  * The sync type describes the type of sync object to use with the @ref ArgusBuffer.
+
95  */
+
96 /**
+
97  * @defgroup ArgusBufferBufferSettings Buffer Types
+
98  * @ingroup ArgusBufferSettings
+
99  * Provides sync type specific configuration settings.
+
100  */
+
101 DEFINE_NAMED_UUID_CLASS(SyncType);
+
102 DEFINE_UUID(SyncType, SYNC_TYPE_NONE, c723d962,5231,11e7,9598,18,00,20,0c,9a,66);
+
103 
+
104 /**
+
105  * Object that wraps an application-managed buffer for use as a capture request destination.
+
106  *
+
107  * Every Buffer is associated with a single BufferType, which corresponds to the
+
108  * native resource type that is being wrapped by it, and dictates which interfaces
+
109  * it will support.
+
110  *
+
111  * In addition to image data, Buffer objects may optionally transport sync
+
112  * information between libargus and the application in order to support hardware
+
113  * level synchronization and pipelining across the API boundary. The type of sync
+
114  * information, and the sync interfaces supported by a Buffer, is controlled by
+
115  * the SyncType.
+
116  *
+
117  * All Buffer objects will support the IBuffer interface in order to query the
+
118  * core BufferType and SyncType.
+
119  *
+
120  * @defgroup ArgusBuffer Buffer
+
121  * @ingroup ArgusObjects
+
122  */
+
123 class Buffer : public InterfaceProvider, public Destructable
+
124 {
+
125 protected:
+
126  ~Buffer() {}
+
127 };
+
128 
+
129 /**
+
130  * Container for settings used to configure/create a @ref ArgusBuffer.
+
131  *
+
132  * These objects are created by IBufferOutputStream::createBufferSettings, and
+
133  * are used to configure the various parameters required for Buffer creation.
+
134  * Since the Buffer OutputStream which creates this object uses a single
+
135  * BufferType and SyncType, the interfaces supported by BufferSettings objects
+
136  * are dictated by these types.
+
137  *
+
138  * @defgroup ArgusBufferSettings BufferSettings
+
139  * @ingroup ArgusObjects
+
140  */
+ +
142 {
+
143 protected:
+ +
145 };
+
146 
+
147 /**
+
148  * @class IBufferOutputStreamSettings
+
149  *
+
150  * Interface that exposes the configuration available to Buffer-based OutputStreams.
+
151  *
+
152  * @ingroup ArgusBufferOutputStreamSettings
+
153  */
+
154 DEFINE_UUID(InterfaceID, IID_BUFFER_OUTPUT_STREAM_SETTINGS,
+
155  c723d963,5231,11e7,9598,18,00,20,0c,9a,66);
+ +
157 {
+
158 public:
+
159  static const InterfaceID& id() { return IID_BUFFER_OUTPUT_STREAM_SETTINGS; }
+
160 
+
161  /**
+
162  * Sets the BufferType for the stream. This controls which type of native buffer
+
163  * type will be wrapped by this OutputStream, and thus will dictate which interfaces
+
164  * are supported by the OutputStream and child BufferSettings and Buffer objects.
+
165  * This value defaults to BUFFER_TYPE_NONE and must be set by the application
+
166  * to a BufferType supported by this libargus implementation.
+
167  *
+
168  * @param[in] type The BufferType to use for the new OutputStream.
+
169  */
+
170  virtual Status setBufferType(const BufferType& type) = 0;
+
171 
+
172  /**
+
173  * Returns the BufferType to be used for the stream.
+
174  */
+
175  virtual BufferType getBufferType() const = 0;
+
176 
+
177  /**
+
178  * Sets the SyncType for the stream. This controls which type of native sync
+
179  * information will be attached to Buffers for sync support between libargus
+
180  * and the application.
+
181  * This value defaults to SYNC_TYPE_NONE, which means that no sync information
+
182  * will be supported. In this case, both the application and libargus are
+
183  * expected to be done all read and/or write operations before passing the
+
184  * Buffer to the other.
+
185  *
+
186  * @param[in] type The SyncType to use for the new OutputStream.
+
187  */
+
188  virtual Status setSyncType(const SyncType& type) = 0;
+
189 
+
190  /**
+
191  * Returns the SyncType to be used for the stream.
+
192  */
+
193  virtual SyncType getSyncType() const = 0;
+
194 
+
195  /**
+
196  * Sets the metadata enable for the stream. When metadata is enabled, a CaptureMetadata
+
197  * object may be attached to each Buffer when it is output from libargus as the result
+
198  * of a successful capture request (see IBuffer::getMetadata).
+
199  *
+
200  * @param[in] enable Whether or not metadata is enabled for the stream.
+
201  */
+
202  virtual void setMetadataEnable(bool enable) = 0;
+
203 
+
204  /**
+
205  * Returns the metadata enable.
+
206  */
+
207  virtual bool getMetadataEnable() const = 0;
+
208 
+
209 protected:
+ +
211 };
+
212 
+
213 /**
+
214  * @class IBufferOutputStream
+
215  *
+
216  * Interface that provides the methods used with Buffer-based OutputStreams.
+
217  *
+
218  * @ingroup ArgusBufferOutputStream
+
219  */
+
220 DEFINE_UUID(InterfaceID, IID_BUFFER_OUTPUT_STREAM, c723d964,5231,11e7,9598,18,00,20,0c,9a,66);
+ +
222 {
+
223 public:
+
224  static const InterfaceID& id() { return IID_BUFFER_OUTPUT_STREAM; }
+
225 
+
226  /**
+
227  * Returns the BufferType of the stream.
+
228  */
+
229  virtual BufferType getBufferType() const = 0;
+
230 
+
231  /**
+
232  * @returns the SyncType of the stream.
+
233  */
+
234  virtual SyncType getSyncType() const = 0;
+
235 
+
236  /**
+
237  * Creates a BufferSettings object. This Destructable object is used to configure
+
238  * the settings for a new Buffer object, including things like the native buffer
+
239  * handle that is to be wrapped by the Buffer. The interfaces and settings that
+
240  * are supported by the new BufferSettings object are dictated by the BufferType
+
241  * and SyncType of the creating OutputStream.
+
242  *
+
243  * @param[out] status An optional pointer to return success/status.
+
244  *
+
245  * @returns a new BufferSettings, or NULL on failure (error code written to 'status').
+
246  */
+
247  virtual BufferSettings* createBufferSettings(Status* status = NULL) = 0;
+
248 
+
249  /**
+
250  * Creates a Buffer object. All of the settings used to configure Buffer creation
+
251  * are provided by the BufferSettings object (which continues to be owned by the
+
252  * application and can be reused until destroyed).
+
253  *
+
254  * New Buffer objects are returned to the application in the "acquired" state,
+
255  * meaning that the application must call releaseBuffer on the Buffer before it
+
256  * may be used by libargus.
+
257  *
+
258  * @param[in] settings the buffer settings to use for Buffer creation.
+
259  * @param[out] status An optional pointer to return success/status.
+
260  *
+
261  * @returns a new BufferSettings, or NULL on failure (error code written to 'status').
+
262  */
+
263  virtual Buffer* createBuffer(const BufferSettings* settings, Status* status = NULL) = 0;
+
264 
+
265  /**
+
266  * Acquires a Buffer from the stream that was written to by a libargus capture request.
+
267  *
+
268  * Buffers are acquired from the stream in FIFO order relative to when they are
+
269  * produced by libargus (which may not match the original request submission order).
+
270  * If a non-zero timeout is provided, this operation will block until a new Buffer
+
271  * is produced by libargus or the timeout period is exceeded.
+
272  *
+
273  * Once a Buffer has been acquired, the application will have exclusive access to the
+
274  * Buffer's image data, which it will retain until the Buffer is released back to the
+
275  * stream for further capture request use via releaseBuffer. Buffers may also be
+
276  * destroyed while acquired; doing so prevents any further use of the Buffer object
+
277  * within the Stream and releases any buffer resources or references held by the Buffer
+
278  * object.
+
279  *
+
280  * If sync support has been enabled for this Stream/Buffer (ie. SyncType is not
+
281  * STREAM_TYPE_NONE), hardware synchronization capabilities may be used to allow hardware
+
282  * operations on a Buffer to still be pending when it is acquired from or released back to
+
283  * libargus. In this case, the returned Buffer will contain the output sync information
+
284  * provided by libargus which the application must obey before accessing the Buffer's
+
285  * image data. Similarly, the application may need to write input sync information to
+
286  * the Buffer before calling releaseBuffer such that libargus will obey the sync before
+
287  * the Buffer is written to by a new capture request. The exact mechanism used for reading
+
288  * and writing this sync state depends on and is documented by the various SyncTypes and
+
289  * their corresponding interfaces.
+
290  *
+
291  * @param[in] timeout The amount of time to allow for the acquire.
+
292  * @param[out] status An optional pointer to return success/status.
+
293  *
+
294  * @returns A Buffer that has been written to by a capture request
+
295  */
+
296  virtual Buffer* acquireBuffer(uint64_t timeout = TIMEOUT_INFINITE, Status* status = NULL) = 0;
+
297 
+
298  /**
+
299  * Release a Buffer back to the stream to make it available for a future capture request.
+
300  *
+
301  * Once a Buffer has been released to the Stream, libargus will have exclusive access to
+
302  * the Buffer's image resources until it is once again acquired by the application via
+
303  * acquireBuffer. Any buffer access outside of libargus during this time may lead to
+
304  * undefined results.
+
305  *
+
306  * While it is often the case that Buffers may be used by libargus in the order they are
+
307  * released, this is not a requirement; libargus may reuse Buffers in any order once they
+
308  * have been released.
+
309  *
+
310  * If sync support has been enabled for this StreamBuffer (ie. SyncType is not
+
311  * STREAM_TYPE_NONE), sync information may need to be written to the Buffer by the client
+
312  * before releaseBuffer is called. The exact mechanism used for writing this sync state
+
313  * depends on and is documented by the various SyncTypes and their corresponding interfaces.
+
314  *
+
315  * Note that while it is safe to destroy a Buffer object while it has been released to
+
316  * libargus, it is possible that pending requests may be using this Buffer and may still
+
317  * output Events that reference the Buffer object, and so the application is responsible
+
318  * for making sure that it does not use any Buffer object that it has previously destroyed.
+
319  * If there are no pending requests using a particular Stream, destroying any of its
+
320  * released Buffers will prevent them from ever being used or returned by libargus again.
+
321  *
+
322  * @param[in] buffer The Buffer to release back to the stream.
+
323  */
+
324  virtual Status releaseBuffer(Buffer* buffer) = 0;
+
325 
+
326  /**
+
327  * Signals the end of the stream.
+
328  *
+
329  * Once the end of stream has been signalled on a stream, any call made to acquireBuffer
+
330  * will immediately (ignoring the timeout parameter) return NULL with a STATUS_END_OF_STREAM
+
331  * status when the following is true:
+
332  * 1) There are no Buffers immediately available to be acquired, and
+
333  * 2) There are no capture requests pending writes to the stream.
+
334  * This implies that no pending or completed frames will be lost, and that all pending or
+
335  * completed frames must be acquired before an END_OF_STREAM status is returned.
+
336  *
+
337  * If any thread is blocked in acquireBuffer when the end of stream is signalled, and the
+
338  * above conditions are met, then that thread will unblock and return END_OF_STREAM immediately.
+
339  */
+
340  virtual Status endOfStream() = 0;
+
341 
+
342 protected:
+ +
344 };
+
345 
+
346 /**
+
347  * @class IBuffer
+
348  *
+
349  * Interface that provides the core methods for Buffer objects.
+
350  *
+
351  * @ingroup ArgusBuffer
+
352  */
+
353 DEFINE_UUID(InterfaceID, IID_BUFFER, c723d965,5231,11e7,9598,18,00,20,0c,9a,66);
+
354 class IBuffer : public Interface
+
355 {
+
356 public:
+
357  static const InterfaceID& id() { return IID_BUFFER; }
+
358 
+
359  /**
+
360  * Returns the BufferType of the Buffer.
+
361  */
+
362  virtual BufferType getBufferType() const = 0;
+
363 
+
364  /**
+
365  * Returns the SyncType of the Buffer.
+
366  */
+
367  virtual SyncType getSyncType() const = 0;
+
368 
+
369  /**
+
370  * Sets the client data for the Buffer.
+
371  * This is provided as a convenience for applications to be able to map Buffers to
+
372  * other client-managed data. It is not used at all by the libargus implementation,
+
373  * and is returned as-is by getClientData.
+
374  * Default value: NULL
+
375  *
+
376  * @param[in] clientData The client data pointer to set in the buffer.
+
377  */
+
378  virtual void setClientData(const void* clientData) = 0;
+
379 
+
380  /**
+
381  * Returns the client data from the Buffer.
+
382  */
+
383  virtual const void* getClientData() const = 0;
+
384 
+
385  /**
+
386  * Returns the CaptureMetadata object that was attached to this Buffer when it was last
+
387  * output to the stream from the result of a successful capture request.
+
388  *
+
389  * This method should only ever be called while the Buffer is in an acquired state; ie. the
+
390  * time between when the Buffer was acquired by IBufferOutputStream::acquireBuffer and when
+
391  * it was released by IBufferOutputStream::releaseBuffer. If called outside of the acquired
+
392  * state, NULL will be returned. Similarly, the returned object will only remain valid so
+
393  * long as the Buffer is acquired -- if this object or any of its interfaces are accessed
+
394  * outside of the acquired state, undefined results or abnormal process termination may occur.
+
395  *
+
396  * Metadata will only be written if metadata is enabled for the stream (see
+
397  * IBufferOutputStreamSettings::setMetadataEnable). NULL may also still be returned if there
+
398  * were any capture errors or metadata is otherwise unavailable.
+
399  */
+
400  virtual const CaptureMetadata* getMetadata() const = 0;
+
401 
+
402 protected:
+
403  ~IBuffer() {}
+
404 };
+
405 
+
406 } // namespace Argus
+
407 
+
408 #endif // _ARGUS_BUFFER_STREAM_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/CameraDevice_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/CameraDevice_8h.html new file mode 100644 index 0000000..6f2e6df --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/CameraDevice_8h.html @@ -0,0 +1,134 @@ + + + + + +Libargus API: include/Argus/CameraDevice.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
CameraDevice.h File Reference
+
+
+ +

Libargus API: Camera Device API +More...

+ +

Go to the source code of this file.

+ + + + + + + + +

+Classes

class  Argus::CameraDevice
class  Argus::ICameraProperties
 Interface to the core CameraDevice properties. More...
class  Argus::SensorMode
class  Argus::ISensorMode
 Interface to the core properties of a SensorMode. More...
+ + +

+Namespaces

namespace  Argus
+ + + +

+Functions

 Argus::DEFINE_UUID (InterfaceID, IID_CAMERA_PROPERTIES, 436d2a73, c85b, 4a29, bce5, 15, 60, 6e, 35, 86, 91)
 Argus::DEFINE_UUID (InterfaceID, IID_SENSOR_MODE, e69015e0, db2a, 11e5, a837, 18, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus API: Camera Device API

+

Description: This file defines objects representing a single camera device.

+ +

Definition in file CameraDevice.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/CameraDevice_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/CameraDevice_8h_source.html new file mode 100644 index 0000000..d0655b9 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/CameraDevice_8h_source.html @@ -0,0 +1,407 @@ + + + + + +Libargus API: include/Argus/CameraDevice.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
CameraDevice.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2020, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Camera Device API</b>
+
32  *
+
33  * @b Description: This file defines objects representing a single camera device.
+
34  */
+
35 
+
36 #ifndef _ARGUS_CAMERA_DEVICE_H
+
37 #define _ARGUS_CAMERA_DEVICE_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Object representing a single camera device.
+
44  *
+
45  * CameraDevices are provided by a CameraProvider and are used to
+
46  * access the camera devices available within the system.
+
47  * Each device is based on a single sensor or a set of synchronized sensors.
+
48  *
+
49  * @see ICameraProvider::getCameraDevices
+
50  *
+
51  * @defgroup ArgusCameraDevice CameraDevice
+
52  * @ingroup ArgusObjects
+
53  */
+ +
55 {
+
56 protected:
+ +
58 };
+
59 
+
60 /**
+
61  * @class ICameraProperties
+
62  *
+
63  * Interface to the core CameraDevice properties.
+
64  *
+
65  * @ingroup ArgusCameraDevice
+
66  */
+
67 DEFINE_UUID(InterfaceID, IID_CAMERA_PROPERTIES, 436d2a73,c85b,4a29,bce5,15,60,6e,35,86,91);
+ +
69 {
+
70 public:
+
71  static const InterfaceID& id() { return IID_CAMERA_PROPERTIES; }
+
72 
+
73  /**
+
74  * Returns the camera UUID.
+
75  * In UUID, clock_seq contains low 16 bits of GUID,
+
76  * node[6] contains high 48 bits of GUID.
+
77  */
+
78  virtual UUID getUUID() const = 0;
+
79 
+
80  /**
+
81  * Returns the camera sensor placement position on the module.
+
82  */
+
83  virtual SensorPlacement getSensorPlacement() const = 0;
+
84 
+
85  /**
+
86  * Returns the maximum number of regions of interest supported by AE.
+
87  * A value of 0 means that the entire image is the only supported region of interest.
+
88  *
+
89  * @see IAutoControlSettings::setAeRegions()
+
90  */
+
91  virtual uint32_t getMaxAeRegions() const = 0;
+
92 
+
93  /**
+
94  * Returns the minimum size of resultant region required by AE.
+
95  *
+
96  * @see IAutoControlSettings::setAeRegions()
+
97  */
+
98  virtual Size2D<uint32_t> getMinAeRegionSize() const = 0;
+
99 
+
100  /**
+
101  * Returns the maximum number of regions of interest supported by AWB.
+
102  * A value of 0 means that the entire image is the only supported region of interest.
+
103  *
+
104  * @see IAutoControlSettings::setAwbRegions()
+
105  */
+
106  virtual uint32_t getMaxAwbRegions() const = 0;
+
107 
+
108  /**
+
109  * Returns the maximum number of regions of interest supported by AF.
+
110  * A value of 0 means that the entire image is the only supported region of interest.
+
111  *
+
112  * @see IAutoControlSettings::setAfRegions()
+
113  */
+
114  virtual uint32_t getMaxAfRegions() const = 0;
+
115 
+
116  /**
+
117  * Returns only the basic available sensor modes that do not have an associated
+
118  * extension. Basic mode types include Depth, RGB, YUV and Bayer types.
+
119  *
+
120  * @param[out] modes A vector that will be populated with the sensor modes.
+
121  *
+
122  * @returns success/status of the call.
+
123  */
+
124  virtual Status getBasicSensorModes(std::vector<SensorMode*>* modes) const = 0;
+
125 
+
126  /**
+
127  * Returns all the available sensor modes including the ones that have extensions.
+
128  * The extended modes support some form of Wide Dynamic Range (WDR) technology.
+
129  *
+
130  * All the returned modes will support the basic sensor mode interface.
+
131  * @see ISensorMode
+
132  *
+
133  * @param[out] modes A vector that will be populated with the sensor modes.
+
134  *
+
135  * @returns success/status of the call.
+
136  */
+
137  virtual Status getAllSensorModes(std::vector<SensorMode*>* modes) const = 0;
+
138 
+
139  /**
+
140  * Returns all the recommended aperture positions.
+
141  *
+
142  * @param[out] positions a vector that will be populated with the aperture positions.
+
143  *
+
144  * @returns success/status of the call.
+
145  */
+
146  virtual Status getAperturePositions(std::vector<int32_t>* positions) const = 0;
+
147 
+
148  /**
+
149  * Returns all the available aperture f-numbers.
+
150  *
+
151  * @param[out] fnumbers A pointer to a vector to be populated with the
+
152  * aperture f-numbers.
+
153  *
+
154  * @returns success/status of the call.
+
155  */
+
156  virtual Status getAvailableApertureFNumbers(std::vector<float>* fnumbers) const = 0;
+
157 
+
158  /**
+
159  * Returns the valid range of focuser positions.
+
160  * The units are focuser steps.
+
161  */
+
162  virtual Range<int32_t> getFocusPositionRange() const = 0;
+
163 
+
164  /**
+
165  * Returns the valid range of aperture positions.
+
166  * The units are aperture positions.
+
167  */
+
168  virtual Range<int32_t> getAperturePositionRange() const = 0;
+
169 
+
170  /**
+
171  * Returns the valid range of aperture step positions per second.
+
172  * The units are aperture motor steps/second.
+
173  */
+
174  virtual Range<float> getApertureMotorSpeedRange() const = 0;
+
175 
+
176  /**
+
177  * Returns the supported range of ISP digital gain.
+
178  */
+
179  virtual Range<float> getIspDigitalGainRange() const = 0;
+
180 
+
181  /**
+
182  * Returns the supported range of Exposure Compensation.
+
183  */
+
184  virtual Range<float> getExposureCompensationRange() const = 0;
+
185 
+
186  /**
+
187  * Returns the model name of the device.
+
188  */
+
189  virtual const std::string& getModelName() const = 0;
+
190 
+
191  /**
+
192  * Returns the module string for the device.
+
193  * Contains the device's name, position, and partial model number.
+
194  * This string is unique for each device on the system.
+
195  */
+
196  virtual const std::string& getModuleString() const = 0;
+
197 
+
198 protected:
+ +
200 };
+
201 
+
202 /**
+
203  * Child object representing a CameraDevice's sensor mode, returned by
+
204  * ICameraProperties::getAllSensorModes
+
205  *
+
206  * @defgroup ArgusSensorMode SensorMode
+
207  * @ingroup ArgusCameraDevice
+
208  */
+ +
210 {
+
211 protected:
+ +
213 };
+
214 
+
215 /**
+
216  * @class ISensorMode
+
217  *
+
218  * Interface to the core properties of a SensorMode.
+
219  *
+
220  * @ingroup ArgusSensorMode
+
221  */
+
222 DEFINE_UUID(InterfaceID, IID_SENSOR_MODE, e69015e0,db2a,11e5,a837,18,00,20,0c,9a,66);
+
223 class ISensorMode : public Interface
+
224 {
+
225 public:
+
226  static const InterfaceID& id() { return IID_SENSOR_MODE; }
+
227 
+
228  /**
+
229  * Returns the image resolution, in pixels.
+
230  */
+
231  virtual Size2D<uint32_t> getResolution() const = 0;
+
232 
+
233  /**
+
234  * Returns the sensor crop region
+
235  */
+
236  virtual Rectangle<uint32_t> getCrop() const = 0;
+
237 
+
238  /**
+
239  * Returns the binning factor
+
240  */
+
241  virtual float getBinningFactor() const = 0;
+
242 
+
243  /**
+
244  * Returns the supported exposure time range (in nanoseconds).
+
245  */
+
246  virtual Range<uint64_t> getExposureTimeRange() const = 0;
+
247 
+
248  /**
+
249  * Returns the hdr ratio range, it is the ratio of long exposure vs short exposure.
+
250  * When min and/or max is greater than 1, long exposure range is given by getExposureTimeRange()
+
251  * and short exposure range is computed as following:
+
252  * short exposure min = getExposureTimeRange().min() / getHdrRatioRange().max()
+
253  * short exposure max = getExposureTimeRange().max() / getHdrRatioRange().min().
+
254  */
+
255  virtual Range<float> getHdrRatioRange() const = 0;
+
256 
+
257  /**
+
258  * Returns the supported frame duration range (in nanoseconds).
+
259  */
+
260  virtual Range<uint64_t> getFrameDurationRange() const = 0;
+
261 
+
262  /**
+
263  * Returns the supported analog gain range.
+
264  */
+
265  virtual Range<float> getAnalogGainRange() const = 0;
+
266 
+
267  /**
+
268  * Returns the bit depth of the image captured by the image sensor in the
+
269  * current mode. For example, a wide dynamic range image sensor capturing
+
270  * 16 bits per pixel would have an input bit depth of 16.
+
271  */
+
272  virtual uint32_t getInputBitDepth() const = 0;
+
273 
+
274  /**
+
275  * Returns the bit depth of the image returned from the image sensor in the
+
276  * current mode. For example, a wide dynamic range image sensor capturing
+
277  * 16 bits per pixel might be connected through a Camera Serial Interface
+
278  * (CSI-3) which is limited to 12 bits per pixel. The sensor would have to
+
279  * compress the image internally and would have an output bit depth not
+
280  * exceeding 12.
+
281  */
+
282  virtual uint32_t getOutputBitDepth() const = 0;
+
283 
+
284  /**
+
285  * Describes the type of the sensor (Bayer, Yuv, etc.) and key modes of
+
286  * operation which are enabled in the sensor mode (Wide-dynamic range,
+
287  * Piecewise Linear Compressed output, etc.)
+
288  */
+
289  virtual SensorModeType getSensorModeType() const = 0;
+
290 
+
291  /**
+
292  * Describes the bayer phase of Bayer mode
+
293  */
+
294  virtual BayerPhase getBayerPhase() const = 0;
+
295 
+
296  /**
+
297  * Checks if the buffer provided is supported by the camera device.
+
298  */
+
299  virtual bool isBufferFormatSupported(Buffer* buffer) const = 0;
+
300 protected:
+ +
302 };
+
303 
+
304 } // namespace Argus
+
305 
+
306 #endif // _ARGUS_CAMERA_DEVICE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/CameraProvider_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/CameraProvider_8h.html new file mode 100644 index 0000000..a018e1f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/CameraProvider_8h.html @@ -0,0 +1,130 @@ + + + + + +Libargus API: include/Argus/CameraProvider.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
CameraProvider.h File Reference
+
+
+ +

Libargus API: Camera Provider API +More...

+ +

Go to the source code of this file.

+ + + + + +

+Classes

class  Argus::CameraProvider
class  Argus::ICameraProvider
 Interface to the core CameraProvider methods. More...
+ + +

+Namespaces

namespace  Argus
+ + +

+Functions

 Argus::DEFINE_UUID (InterfaceID, IID_CAMERA_PROVIDER, a00f33d7, 8564, 4226, 955c, 2d, 1b, cd, af, a3, 5f)
+

Detailed Description

+

Libargus API: Camera Provider API

+

Description: This file defines the CameraProvider object and interface.

+ +

Definition in file CameraProvider.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/CameraProvider_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/CameraProvider_8h_source.html new file mode 100644 index 0000000..42fb8b7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/CameraProvider_8h_source.html @@ -0,0 +1,245 @@ + + + + + +Libargus API: include/Argus/CameraProvider.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
CameraProvider.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Camera Provider API</b>
+
32  *
+
33  * @b Description: This file defines the CameraProvider object and interface.
+
34  */
+
35 
+
36 #ifndef _ARGUS_CAMERA_PROVIDER_H
+
37 #define _ARGUS_CAMERA_PROVIDER_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Object providing the entry point to the libargus runtime.
+
44  *
+
45  * It provides methods for querying the cameras in the system and for
+
46  * creating camera devices.
+
47  *
+
48  * @defgroup ArgusCameraProvider CameraProvider
+
49  * @ingroup ArgusObjects
+
50  */
+ +
52 {
+
53 public:
+
54 
+
55  /**
+
56  * Creates and returns a new CameraProvider.
+
57  * If a CameraProvider object has already been created,
+
58  * this method will return a pointer to that object.
+
59  *
+
60  * @param[out] status Optional pointer to return success/status of the call.
+
61  */
+
62  static CameraProvider* create(Status* status = NULL);
+
63 
+
64 protected:
+ +
66 };
+
67 
+
68 /**
+
69  * @class ICameraProvider
+
70  *
+
71  * Interface to the core CameraProvider methods.
+
72  *
+
73  * @ingroup ArgusCameraProvider
+
74  */
+
75 DEFINE_UUID(InterfaceID, IID_CAMERA_PROVIDER, a00f33d7,8564,4226,955c,2d,1b,cd,af,a3,5f);
+
76 
+
77 class ICameraProvider : public Interface
+
78 {
+
79 public:
+
80  static const InterfaceID& id() { return IID_CAMERA_PROVIDER; }
+
81 
+
82  /**
+
83  * Returns the version number of the libargus implementation. This string will begin with
+
84  * the major and minor version numbers, separated by a period, and may be followed by
+
85  * any additional vendor-specific version information.
+
86  */
+
87  virtual const std::string& getVersion() const = 0;
+
88 
+
89  /**
+
90  * Returns the vendor string for the libargus implementation.
+
91  */
+
92  virtual const std::string& getVendor() const = 0;
+
93 
+
94  /**
+
95  * Returns whether or not an extension is supported by this libargus implementation.
+
96  * This is generally used during process initialization to ensure that all required
+
97  * extensions are present before initializing any CaptureSessions. Note, however,
+
98  * that having an extension be supported does not imply that the resources or
+
99  * devices required for that extension are available; standard interface checking
+
100  * and any other extension-specific runtime checks, as described by the extension
+
101  * documentation, should always be performed before any extension is used.
+
102  * @param[in] extension the extension identifier.
+
103  */
+
104  virtual bool supportsExtension(const ExtensionName& extension) const = 0;
+
105 
+
106  /**
+
107  * Returns the list of camera devices that are exposed by the provider. This
+
108  * includes devices that may already be in use by active CaptureSessions, and
+
109  * it's the application's responsibility to check device availability and/or
+
110  * handle any errors returned when CaptureSession creation fails due to a
+
111  * device already being in use.
+
112  * @param[out] devices A vector that will be populated by the available devices.
+
113  *
+
114  * @returns success/status of the call.
+
115  */
+
116  virtual Status getCameraDevices(std::vector<CameraDevice*>* devices) const = 0;
+
117 
+
118  /**
+
119  * Creates and returns a new CaptureSession using the given device.
+
120  * STATUS_UNAVAILABLE will be placed into @c status if the device is already in use.
+
121  * @param[in] device The device to use for the CaptureSession.
+
122  * @param[out] status Optional pointer to return success/status of the call.
+
123  * @returns The new CaptureSession, or NULL if an error occurred.
+
124  */
+ +
126  Status* status = NULL) = 0;
+
127 
+
128  /**
+
129  * Creates and returns a new CaptureSession using the given device(s).
+
130  * STATUS_UNAVAILABLE will be placed into @c status if any of the devices are already in use.
+
131  * @param[in] devices The device(s) to use for the CaptureSession.
+
132  * @param[out] status Optional pointer to return success/status of the call.
+
133  * @returns The new CaptureSession, or NULL if an error occurred.
+
134  */
+
135  virtual CaptureSession* createCaptureSession(const std::vector<CameraDevice*>& devices,
+
136  Status* status = NULL) = 0;
+
137 
+
138 protected:
+ +
140 };
+
141 
+
142 } // namespace Argus
+
143 
+
144 #endif // _ARGUS_CAMERA_PROVIDER_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/CaptureMetadata_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/CaptureMetadata_8h.html new file mode 100644 index 0000000..6fe9268 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/CaptureMetadata_8h.html @@ -0,0 +1,147 @@ + + + + + +Libargus API: include/Argus/CaptureMetadata.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
CaptureMetadata.h File Reference
+
+
+ +

Libargus API: Capture Metadata API +More...

+ +

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + +

+Classes

class  Argus::CaptureMetadata
class  Argus::CaptureMetadataContainer
 An object that holds a CaptureMetadata instance and is used to read the capture metadata from a consumer thread directly from the embedded EGLStream metadata. More...
class  Argus::IBayerHistogram
 Interface to Bayer histogram metadata (provided by ICaptureMetadata::getBayerHistogram()). More...
class  Argus::IRGBHistogram
 Interface to RGB histogram metadata (provided by ICaptureMetadata::getRGBHistogram()). More...
class  Argus::IStreamCaptureMetadata
 Interface to per-stream metadata (provided by ICaptureMetadata::getStreamMetadata()). More...
class  Argus::ICaptureMetadata
 Interface to the core capture metadata. More...
class  Argus::IDenoiseMetadata
 Interface to denoise metadata. More...
class  Argus::IEdgeEnhanceMetadata
 Interface to edge enhancement metadata. More...
+ + +

+Namespaces

namespace  Argus
+ + + + + + + +

+Functions

 Argus::DEFINE_UUID (InterfaceID, IID_BAYER_HISTOGRAM, 50bc4f1c, 6424, beb7, baae, b0, 90, c9, c3, 25, 9e)
 Argus::DEFINE_UUID (InterfaceID, IID_RGB_HISTOGRAM, 50bc4f1d, 6424, beb7, baae, b0, 90, c9, c3, 25, 9e)
 Argus::DEFINE_UUID (InterfaceID, IID_STREAM_CAPTURE_METADATA, 61cbe0a8, 0ee1, 4c67, baae, 02, 02, 1a, b8, d9, 47)
 Argus::DEFINE_UUID (InterfaceID, IID_CAPTURE_METADATA, 5f6ac5d4, 59e8, 45d0, 8bac, 38, 09, 1f, f8, 74, a9)
 Argus::DEFINE_UUID (InterfaceID, IID_DENOISE_METADATA, 7A461D23, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (InterfaceID, IID_EDGE_ENHANCE_METADATA, 7A461D24, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
+

Detailed Description

+

Libargus API: Capture Metadata API

+

Description: Defines the CaptureMetadata objects and interfaces.

+ +

Definition in file CaptureMetadata.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/CaptureMetadata_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/CaptureMetadata_8h_source.html new file mode 100644 index 0000000..4a8d2a9 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/CaptureMetadata_8h_source.html @@ -0,0 +1,561 @@ + + + + + +Libargus API: include/Argus/CaptureMetadata.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
CaptureMetadata.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2021, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Capture Metadata API</b>
+
32  *
+
33  * @b Description: Defines the CaptureMetadata objects and interfaces.
+
34  */
+
35 
+
36 #ifndef _ARGUS_CAPTURE_METADATA_H
+
37 #define _ARGUS_CAPTURE_METADATA_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Container for metadata generated by a single completed capture.
+
44  *
+
45  * @defgroup ArgusCaptureMetadata CaptureMetadata
+
46  * @ingroup ArgusObjects
+
47  */
+ +
49 {
+
50 protected:
+ +
52 };
+
53 
+
54 /**
+
55  * An object that holds a CaptureMetadata instance
+
56  * and is used to read the capture metadata from a consumer thread directly from
+
57  * the embedded EGLStream metadata. It exposes the same interfaces as
+
58  * CaptureMetadata, but is owned by the consumer.
+
59  */
+ +
61 {
+
62 protected:
+ +
64 };
+
65 
+
66 /**
+
67  * @class IBayerHistogram
+
68  *
+
69  * Interface to Bayer histogram metadata (provided by ICaptureMetadata::getBayerHistogram()).
+
70  *
+
71  * Bins are evenly distributed across the possible range of values, each containing
+
72  * the number of pixels whose value fell within the range for that bin.
+
73  *
+
74  * @ingroup ArgusBayerHistogram
+
75  */
+
76 DEFINE_UUID(InterfaceID, IID_BAYER_HISTOGRAM, 50bc4f1c,6424,beb7,baae,b0,90,c9,c3,25,9e);
+
77 class IBayerHistogram : public Interface
+
78 {
+
79 public:
+
80 
+
81  static const InterfaceID& id() { return IID_BAYER_HISTOGRAM; }
+
82 
+
83  /**
+
84  * Returns the number of bins in the histogram.
+
85  */
+
86  virtual uint32_t getBinCount() const = 0;
+
87 
+
88  /**
+
89  * Returns the histogram data.
+
90  *
+
91  * @param[out] histogram The output vector to store the histogram data. Upon successful
+
92  * return, this vector will be replaced with getBinCount() bin values,
+
93  * each containing per-channel pixel counts within a BayerTuple container.
+
94  */
+
95  virtual Status getHistogram(std::vector< BayerTuple<uint32_t> >* histogram) const = 0;
+
96 
+
97 protected:
+
98 
+ +
100 };
+
101 
+
102 /**
+
103  * @class IRGBHistogram
+
104  *
+
105  * Interface to RGB histogram metadata (provided by ICaptureMetadata::getRGBHistogram()).
+
106  *
+
107  * Bins are evenly distributed across the possible range of values, each containing
+
108  * the number of pixels whose value fell within the range for that bin.
+
109  *
+
110  * @ingroup ArgusRGBHistogram
+
111  */
+
112 DEFINE_UUID(InterfaceID, IID_RGB_HISTOGRAM, 50bc4f1d,6424,beb7,baae,b0,90,c9,c3,25,9e);
+
113 class IRGBHistogram : public Interface
+
114 {
+
115 public:
+
116 
+
117  static const InterfaceID& id() { return IID_RGB_HISTOGRAM; }
+
118 
+
119  /**
+
120  * Returns the number of bins in the histogram.
+
121  */
+
122  virtual uint32_t getBinCount() const = 0;
+
123 
+
124  /**
+
125  * Returns the histogram data.
+
126  *
+
127  * @param[out] histogram The output vector to store the histogram data. Upon successful
+
128  * return, this vector will be replaced with getBinCount() bin values,
+
129  * each containing per-channel pixel counts within an RGBTuple container.
+
130  */
+
131  virtual Status getHistogram(std::vector< RGBTuple<uint32_t> >* histogram) const = 0;
+
132 
+
133 protected:
+
134 
+ +
136 };
+
137 
+
138 /**
+
139  * @class IStreamCaptureMetadata
+
140  *
+
141  * Interface to per-stream metadata (provided by ICaptureMetadata::getStreamMetadata()).
+
142  *
+
143  * @ingroup ArgusStreamCaptureMetadata
+
144  */
+
145 DEFINE_UUID(InterfaceID, IID_STREAM_CAPTURE_METADATA, 61cbe0a8,0ee1,4c67,baae,02,02,1a,b8,d9,47);
+ +
147 {
+
148 public:
+
149 
+
150  static const InterfaceID& id() { return IID_STREAM_CAPTURE_METADATA; }
+
151 
+
152  /**
+
153  * Returns the clip rectangle used for this stream.
+
154  */
+
155  virtual Rectangle<float> getSourceClipRect() const = 0;
+
156 
+
157 protected:
+
158 
+ +
160 };
+
161 
+
162 /**
+
163  * @class ICaptureMetadata
+
164  *
+
165  * Interface to the core capture metadata.
+
166  *
+
167  * @ingroup ArgusCaptureMetadata
+
168  *
+
169  * @defgroup ArgusStreamCaptureMetadata StreamMetadata
+
170  * Child stream metadata, returned by ICaptureMetadata::getStreamMetadata
+
171  * @ingroup ArgusCaptureMetadata
+
172  *
+
173  * @defgroup ArgusRGBHistogram RGBHistogram
+
174  * Child RGB histogram metadata, returned by ICaptureMetadata::getRGBHistogram
+
175  * @ingroup ArgusCaptureMetadata
+
176  *
+
177  * @defgroup ArgusBayerHistogram BayerHistogram
+
178  * Child Bayer histogram metadata, returned by ICaptureMetadata::getBayerHistogram
+
179  * @ingroup ArgusCaptureMetadata
+
180  */
+
181 DEFINE_UUID(InterfaceID, IID_CAPTURE_METADATA, 5f6ac5d4,59e8,45d0,8bac,38,09,1f,f8,74,a9);
+ +
183 {
+
184 public:
+
185 
+
186  static const InterfaceID& id() { return IID_CAPTURE_METADATA; }
+
187 
+
188  static const uint32_t NUM_COLOR_CORRECTION_ELEMENTS = 9;
+
189  static const uint32_t NUM_AWB_WB_ESTIMATE_ELEMENTS = 4;
+
190 
+
191  /**
+
192  * Returns the capture id (the value returned from ICaptureSession::capture())
+
193  * of the capture that generated this metadata.
+
194  */
+
195  virtual uint32_t getCaptureId() const = 0;
+
196 
+
197  /**
+
198  * Returns the @c clientData value for the Request used in the capture
+
199  * that generated this metadata.
+
200  *
+
201  * @see ICaptureSession::createRequest()
+
202  */
+
203  virtual uint32_t getClientData() const = 0;
+
204 
+
205  /**
+
206  * Returns the per-stream metadata provider for @c stream.
+
207  * This object will provide the IStreamCaptureMetadata interface.
+
208  */
+
209  virtual InterfaceProvider* getStreamMetadata(const OutputStream* stream) const = 0;
+
210 
+
211  /**
+
212  * Returns the Bayer histogram for this capture.
+
213  * This object will provide the IBayerHistogram interface.
+
214  */
+
215  virtual const InterfaceProvider* getBayerHistogram() const = 0;
+
216 
+
217  /**
+
218  * Returns the RGB histogram for this capture.
+
219  * This object will provide the IRGBHistogram interface.
+
220  */
+
221  virtual const InterfaceProvider* getRGBHistogram() const = 0;
+
222 
+
223  /**
+
224  * Returns true if and only if AE was locked for this capture.
+
225  */
+
226  virtual bool getAeLocked() const = 0;
+
227 
+
228  /**
+
229  * Gets the AE regions of interest used for this capture.
+
230  *
+
231  * @param[in] regions A vector that will be populated with the AE regions used in capture.
+
232  *
+
233  * @returns success/status of the call.
+
234  */
+
235  virtual Status getAeRegions(std::vector<AcRegion>* regions) const = 0;
+
236 
+
237  /**
+
238  * Returns the rectangle of the bayer histogram region of interest.
+
239  */
+
240  virtual Rectangle<uint32_t> getBayerHistogramRegion() const = 0;
+
241 
+
242  /**
+
243  * Returns the state of AE when it ran for this capture.
+
244  */
+
245  virtual AeState getAeState() const = 0;
+
246 
+
247  /**
+
248  * Returns the flicker state of this capture.
+
249  */
+
250  virtual AeFlickerState getFlickerState() const = 0;
+
251 
+
252  /**
+
253  * Returns the aperture position.
+
254  */
+
255  virtual int32_t getAperturePosition() const = 0;
+
256 
+
257  /**
+
258  * Returns the focuser position used for this capture (in focuser steps).
+
259  */
+
260  virtual int32_t getFocuserPosition() const = 0;
+
261 
+
262  /**
+
263  * Returns the CCT calculated by AWB for this capture.
+
264  */
+
265  virtual uint32_t getAwbCct() const = 0;
+
266 
+
267  /**
+
268  * Returns the AWB gains used for this capture.
+
269  */
+
270  virtual BayerTuple<float> getAwbGains() const = 0;
+
271 
+
272  /**
+
273  * Returns the AWB mode used for this capture.
+
274  */
+
275  virtual AwbMode getAwbMode() const = 0;
+
276 
+
277  /**
+
278  * Gets the AWB regions of interest used for this capture.
+
279  *
+
280  * @param[in] regions A vector that will be populated with the AWB regions used in capture.
+
281  *
+
282  * @returns success/status of the call.
+
283  */
+
284  virtual Status getAwbRegions(std::vector<AcRegion>* regions) const = 0;
+
285 
+
286  /**
+
287  * Gets the AF regions of interest used for this capture.
+
288  *
+
289  * @param[in] regions A vector that will be populated with the AF regions used in capture.
+
290  *
+
291  * @returns success/status of the call.
+
292  */
+
293  virtual Status getAfRegions(std::vector<AcRegion>* regions) const = 0;
+
294 
+
295  /**
+
296  * Gets the sharpness score values calculated for corresponding AF regions.
+
297  *
+
298  * @param[in] values A vector that will be populated with the sharpness scores used in capture.
+
299  *
+
300  * @returns success/status of the call.
+
301  */
+
302  virtual Status getSharpnessScore(std::vector<float>* values) const = 0;
+
303 
+
304  /**
+
305  * @returns the state of AWB when it ran for this capture.
+
306  */
+
307  virtual AwbState getAwbState() const = 0;
+
308 
+
309  /**
+
310  * Gets the current AWB WB estimate as a vector of NUM_AWB_WB_ESTIMATE_ELEMENTS values.
+
311  * @todo Document the meaning of an AWB WB estimate.
+
312  *
+
313  * @param[in] estimate A vector that will be populated with the AWB WB estimates.
+
314  *
+
315  * @returns success/status of the call.
+
316  */
+
317  virtual Status getAwbWbEstimate(std::vector<float>* estimate) const = 0;
+
318 
+
319  /**
+
320  * Returns the enable state for the client-supplied Color Correction Matrix.
+
321  */
+
322  virtual bool getColorCorrectionMatrixEnable() const = 0;
+
323 
+
324  /**
+
325  * Gets the 3x3 client-supplied Color Correction Matrix as a flattened
+
326  * (row-major) vector of 9 values. This matrix is irrelevant if
+
327  * <tt>getColorCorrectionMatrixEnable() == false</tt>.
+
328  *
+
329  * @param[in] ccMatrix A vector that will be populated with the color correction matrix.
+
330  *
+
331  * @returns success/status of the call.
+
332  */
+
333  virtual Status getColorCorrectionMatrix(std::vector<float>* ccMatrix) const = 0;
+
334 
+
335  /**
+
336  * Returns the color saturation value used for this capture (including biasing).
+
337  */
+
338  virtual float getColorSaturation() const = 0;
+
339 
+
340  /**
+
341  * Returns the time it took to integrate this capture (in nanoseconds).
+
342  * @todo Provide a more precise description of frame duration.
+
343  */
+
344  virtual uint64_t getFrameDuration() const = 0;
+
345 
+
346  /**
+
347  * Returns the digital gain used for this capture.
+
348  */
+
349  virtual float getIspDigitalGain() const = 0;
+
350 
+
351  /**
+
352  * Returns the frame readout time for this capture (in nanoseconds) from
+
353  * the beginning of the first line to the beginning of the last line.
+
354  */
+
355  virtual uint64_t getFrameReadoutTime() const = 0;
+
356 
+
357  /**
+
358  * Returns the estimated scene brightness for this capture (in lux).
+
359  */
+
360  virtual float getSceneLux() const = 0;
+
361 
+
362  /**
+
363  * Returns the sensor analog gain used for this capture.
+
364  */
+
365  virtual float getSensorAnalogGain() const = 0;
+
366 
+
367  /**
+
368  * Returns the sensor exposure time for this capture (in nanoseconds).
+
369  */
+
370  virtual uint64_t getSensorExposureTime() const = 0;
+
371 
+
372  /**
+
373  * Returns the ISO value used for this capture.
+
374  */
+
375  virtual uint32_t getSensorSensitivity() const = 0;
+
376 
+
377  /**
+
378  * Returns the kernel (SOF) timestamp for the sensor (in nanoseconds).
+
379  * This is the time that the first data from this capture arrives from the sensor.
+
380  */
+
381  virtual uint64_t getSensorTimestamp() const = 0;
+
382 
+
383  /**
+
384  * Returns true if and only if a user-specified tone map curve was used for this capture.
+
385  */
+
386  virtual bool getToneMapCurveEnabled() const = 0;
+
387 
+
388  /**
+
389  * Returns the specified color channel for the tone mapping table
+
390  * (as a vector of NUM_TONE_MAP_ELEMENTS values). These values are irrelevant if
+
391  * <tt>getToneMapCurveEnabled() == false</tt>.
+
392  *
+
393  * @param[in] channel Specified the color channel for which the curve will be returned.
+
394  * @param[in] curve A vector that will be populated with the color curve used in capture.
+
395  *
+
396  * @returns success/status of the call.
+
397  */
+
398  virtual Status getToneMapCurve(RGBChannel channel, std::vector<float>* curve) const = 0;
+
399 
+
400 protected:
+ +
402 };
+
403 
+
404 /**
+
405  * @class IDenoiseMetadata
+
406  *
+
407  * Interface to denoise metadata.
+
408  *
+
409  * @ingroup ArgusCaptureMetadata
+
410  */
+
411 DEFINE_UUID(InterfaceID, IID_DENOISE_METADATA, 7A461D23,6AE1,11E6,BDF4,08,00,20,0C,9A,66);
+ +
413 {
+
414 public:
+
415  static const InterfaceID& id() { return IID_DENOISE_METADATA; }
+
416 
+
417  /**
+
418  * Returns the denoise mode used for the capture.
+
419  */
+
420  virtual DenoiseMode getDenoiseMode() const = 0;
+
421 
+
422  /**
+
423  * Returns the denoise strength used for the capture.
+
424  */
+
425  virtual float getDenoiseStrength() const = 0;
+
426 
+
427 protected:
+ +
429 };
+
430 
+
431 /**
+
432  * @class IEdgeEnhanceMetadata
+
433  *
+
434  * Interface to edge enhancement metadata.
+
435  *
+
436  * @ingroup ArgusCaptureMetadata
+
437  */
+
438 DEFINE_UUID(InterfaceID, IID_EDGE_ENHANCE_METADATA, 7A461D24,6AE1,11E6,BDF4,08,00,20,0C,9A,66);
+ +
440 {
+
441 public:
+
442  static const InterfaceID& id() { return IID_EDGE_ENHANCE_METADATA; }
+
443 
+
444  /**
+
445  * Returns the edge enhancement mode used for the capture.
+
446  */
+
447  virtual EdgeEnhanceMode getEdgeEnhanceMode() const = 0;
+
448 
+
449  /**
+
450  * Returns the edge enhancement strength used for the capture.
+
451  */
+
452  virtual float getEdgeEnhanceStrength() const = 0;
+
453 
+
454 protected:
+ +
456 };
+
457 
+
458 } // namespace Argus
+
459 
+
460 #endif // _ARGUS_CAPTURE_METADATA_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/CaptureSession_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/CaptureSession_8h.html new file mode 100644 index 0000000..2bca838 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/CaptureSession_8h.html @@ -0,0 +1,130 @@ + + + + + +Libargus API: include/Argus/CaptureSession.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
CaptureSession.h File Reference
+
+
+ +

Libargus API: Capture Session API +More...

+ +

Go to the source code of this file.

+ + + + + +

+Classes

class  Argus::CaptureSession
class  Argus::ICaptureSession
 Interface to the core CaptureSession methods. More...
+ + +

+Namespaces

namespace  Argus
+ + +

+Functions

 Argus::DEFINE_UUID (InterfaceID, IID_CAPTURE_SESSION, 813644f5, bc21, 4013, af44, dd, da, b5, 7a, 9d, 13)
+

Detailed Description

+

Libargus API: Capture Session API

+

Description: Defines the CaptureSession object and interface.

+ +

Definition in file CaptureSession.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/CaptureSession_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/CaptureSession_8h_source.html new file mode 100644 index 0000000..cc45277 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/CaptureSession_8h_source.html @@ -0,0 +1,334 @@ + + + + + +Libargus API: include/Argus/CaptureSession.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
CaptureSession.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Capture Session API</b>
+
32  *
+
33  * @b Description: Defines the CaptureSession object and interface.
+
34  */
+
35 
+
36 #ifndef _ARGUS_CAPTURE_SESSION_H
+
37 #define _ARGUS_CAPTURE_SESSION_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Object that controls all operations on a single sensor.
+
44  *
+
45  * A capture session is bound to a single sensor (or, in future, a group of synchronized sensors)
+
46  * and provides methods to perform captures on that sensor (via the ICaptureSession interface).
+
47  *
+
48  * @defgroup ArgusCaptureSession CaptureSession
+
49  * @ingroup ArgusObjects
+
50  */
+ +
52 {
+
53 protected:
+ +
55 };
+
56 
+
57 /**
+
58  * @class ICaptureSession
+
59  *
+
60  * Interface to the core CaptureSession methods.
+
61  *
+
62  * @ingroup ArgusCaptureSession
+
63  */
+
64 DEFINE_UUID(InterfaceID, IID_CAPTURE_SESSION, 813644f5,bc21,4013,af44,dd,da,b5,7a,9d,13);
+
65 class ICaptureSession : public Interface
+
66 {
+
67 public:
+
68  static const InterfaceID& id() { return IID_CAPTURE_SESSION; }
+
69 
+
70  /**
+
71  * Removes all previously submitted requests from the queue. When all requests
+
72  * are cancelled, both the FIFO and the streaming requests will be removed.
+
73  * If repeat captures are enabled, an implicit call to ICaptureSession::stopRepeat()
+
74  * will be made before cancelling the requests.
+
75  *
+
76  * @returns success/status of this call.
+
77  */
+
78  virtual Status cancelRequests() = 0;
+
79 
+
80  /**
+
81  * Submits a single capture request.
+
82  * For blocking capture session (created by ICameraProvider::createBlockingCaptureSession),
+
83  * it will wait until the request is accepted by lower level driver.
+
84  * For non-blocking capture session (created by ICameraProvider::createCaptureSession),
+
85  * it will queue a copy of the request to a queue and return.
+
86  *
+
87  * The client can submit the same request instance in a future call.
+
88  * The request will be copied by the runtime.
+
89  *
+
90  * @param[in] request Parameters for the capture.
+
91  * @param[in] timeout The timeout in nanoseconds. The camera device will
+
92  * try to issue the request within the timeout period. If it can't it
+
93  * will return and set @c status to STATUS_UNAVAILABLE.
+
94  * @param[out] status An optional pointer to return success/status.
+
95  *
+
96  * @returns the capture id, a number that uniquely identifies (within this session) the request.
+
97  * If the submission request failed, zero will be returned.
+
98  * The request could fail because the timeout is reached,
+
99  * or because some parameter(s) of the @c request are invalid.
+
100  */
+
101  virtual uint32_t capture(const Request* request,
+
102  uint64_t timeout = TIMEOUT_INFINITE,
+
103  Status* status = NULL) = 0;
+
104 
+
105  /**
+
106  * Submits a burst of requests.
+
107  *
+
108  * For blocking capture session (created by ICameraProvider::createBlockingCaptureSession),
+
109  * it will wait until the first request is accepted by lower level driver.
+
110  * For non-blocking capture session (created by ICameraProvider::createCaptureSession),
+
111  * it will queue a copy of the requests to a queue and return.
+
112 
+
113  * The runtime will either accept the entire burst or refuse it completely
+
114  * (that is, no partial bursts will be accepted).
+
115  *
+
116  * @param[in] requestList The list of requests that make up the burst.
+
117  * @param[in] timeout The timeout in nanoseconds. The camera device will try to issue
+
118  * the request within the timeout period. If it can't it will return and set
+
119  * @c status to STATUS_UNAVAILABLE.
+
120  * @param[out] status An optional pointer to return success/status.
+
121  *
+
122  * @returns the capture id of the capture associated with the first request in the burst.
+
123  * The capture id will increment by one for the captures associated with each successive
+
124  * request.
+
125  * If the submission request failed, zero will be returned.
+
126  * The request could fail because the timeout is reached,
+
127  * or because some parameter(s) of the @c request are invalid.
+
128  */
+
129  virtual uint32_t captureBurst(const std::vector<const Request*>& requestList,
+
130  uint64_t timeout = TIMEOUT_INFINITE,
+
131  Status* status = NULL) = 0;
+
132 
+
133  /**
+
134  * Returns the maximum number of capture requests that can be included in a burst capture.
+
135  */
+
136  virtual uint32_t maxBurstRequests() const = 0;
+
137 
+
138  /**
+
139  * Creates a request object that can be later used with this CaptureSession.
+
140  *
+
141  * @param[in] intent Optional parameter that specifies the intent of the capture request and
+
142  * instructs the driver to populate the request with recommended settings
+
143  * for that intent.
+
144  * @param[out] status An optional pointer to return success/status.
+
145  *
+
146  * @see ICaptureMetadata::getClientData()
+
147  */
+
148  virtual Request* createRequest(const CaptureIntent& intent = CAPTURE_INTENT_PREVIEW,
+
149  Status* status = NULL) = 0;
+
150 
+
151  /**
+
152  * Creates an OutputStreamSettings object that is used to configure the creation of
+
153  * an OutputStream (see createOutputStream). The type of OutputStream that will be
+
154  * configured and created by these settings are determined by the StreamType.
+
155  *
+
156  * @param[in] type The type of the OutputStream to configure/create with these settings.
+
157  * @param[out] status An optional pointer to return success/status.
+
158  *
+
159  * @returns The newly created OutputStreamSettings, or NULL on failure.
+
160  */
+
161  virtual OutputStreamSettings* createOutputStreamSettings(const StreamType& type,
+
162  Status* status = NULL) = 0;
+
163 
+
164  /**
+
165  * Creates an OutputStream object using the settings configured by an OutputStreamSettings
+
166  * object (see createOutputStreamSettings).
+
167  *
+
168  * @param[in] settings The settings to use for the new output stream.
+
169  * @param[out] status An optional pointer to return success/status.
+
170  *
+
171  * @returns The newly created OutputStream, or NULL on failure.
+
172  */
+
173  virtual OutputStream* createOutputStream(const OutputStreamSettings* settings,
+
174  Status* status = NULL) = 0;
+
175 
+
176  /**
+
177  * Returns true if there is a streaming request in place.
+
178  */
+
179  virtual bool isRepeating() const = 0;
+
180 
+
181  /**
+
182  * Sets up a repeating request. This is a convenience method that will queue
+
183  * a request whenever the request queue is empty and the camera is ready to
+
184  * accept new requests.
+
185  *
+
186  * To stop repeating the request, call stopRepeat().
+
187  *
+
188  * @param[in] request The request to repeat.
+
189  *
+
190  * @returns success/status of the call.
+
191  */
+
192  virtual Status repeat(const Request* request) = 0;
+
193 
+
194  /**
+
195  * Sets up a repeating burst request. This is a convenience method that will queue
+
196  * a request whenever the request queue is empty and the camera is ready to
+
197  * accept new requests.
+
198  *
+
199  * To stop repeating the requests, call stopRepeat().
+
200  *
+
201  * @param[in] requestList The list of requests that make up the repeating burst.
+
202  *
+
203  * @returns success/status of the call.
+
204  */
+
205  virtual Status repeatBurst(const std::vector<const Request*>& requestList) = 0;
+
206 
+
207  /**
+
208  * Shuts down any repeating capture.
+
209  *
+
210  * @returns The range of capture ids generated by the most recent repeat() / repeatBurst() call.
+
211  * Note that some captures within that range may have been generated by explicit capture() calls
+
212  * made while the repeating capture was in force.
+
213  * If no captures were generated by the most recent repeat() / repeatBurst() call,
+
214  * <tt>Range<uint32_t>(0,0)</tt> will be returned.
+
215  */
+
216  virtual Range<uint32_t> stopRepeat() = 0;
+
217 
+
218  /**
+
219  * Waits until all pending captures are complete.
+
220  *
+
221  * @param[in] timeout The timeout value (in nanoseconds) for this call.
+
222  * If the pipe has not become idle when the timeout expires,
+
223  * the call will return STATUS_TIMEOUT.
+
224  */
+
225  virtual Status waitForIdle(uint64_t timeout = TIMEOUT_INFINITE) const = 0;
+
226 
+
227 protected:
+ +
229 };
+
230 
+
231 } // namespace Argus
+
232 
+
233 #endif // _ARGUS_CAPTURE_SESSION_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/DeFog_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/DeFog_8h.html new file mode 100644 index 0000000..459b5ac --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/DeFog_8h.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/Ext/DeFog.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
DeFog.h File Reference
+
+
+ +

Libargus Extension: DeFog API +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::IDeFogSettings
 Interface to de-fog settings. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_DE_FOG, 9cf05bd0, 1d99, 4be8, 8732, 75, 99, 55, 7f, ed, 3a)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_DE_FOG_SETTINGS, 9cf05bd1, 1d99, 4be8, 8732, 75, 99, 55, 7f, ed, 3a)
+

Detailed Description

+

Libargus Extension: DeFog API

+

Description: This file defines the DeFog extension.

+ +

Definition in file DeFog.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/DeFog_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/DeFog_8h_source.html new file mode 100644 index 0000000..f84a03f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/DeFog_8h_source.html @@ -0,0 +1,209 @@ + + + + + +Libargus API: include/Argus/Ext/DeFog.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
DeFog.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: DeFog API</b>
+
32  *
+
33  * @b Description: This file defines the DeFog extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_DE_FOG_H
+
37 #define _ARGUS_DE_FOG_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Adds internal de-fog post-processing algorithms. It introduces one new interface:
+
44  * - Ext::IDeFogSettings: enables de-fog for a Request.
+
45  *
+
46  * @defgroup ArgusExtDeFog Ext::DeFog
+
47  * @ingroup ArgusExtensions
+
48  */
+
49 DEFINE_UUID(ExtensionName, EXT_DE_FOG, 9cf05bd0,1d99,4be8,8732,75,99,55,7f,ed,3a);
+
50 namespace Ext
+
51 {
+
52 
+
53 /**
+
54  * @class IDeFogSettings
+
55  *
+
56  * Interface to de-fog settings.
+
57  *
+
58  * @ingroup ArgusRequest ArgusExtDeFog
+
59  */
+
60 DEFINE_UUID(InterfaceID, IID_DE_FOG_SETTINGS, 9cf05bd1,1d99,4be8,8732,75,99,55,7f,ed,3a);
+
61 class IDeFogSettings : public Interface
+
62 {
+
63 public:
+
64  static const InterfaceID& id() { return IID_DE_FOG_SETTINGS; }
+
65 
+
66  /**
+
67  * Enables or disables de-fog.
+
68  * @param[in] enable whether or not de-fog is enabled.
+
69  */
+
70  virtual void setDeFogEnable(bool enable) = 0;
+
71 
+
72  /**
+
73  * @returns whether or not de-fog is enabled.
+
74  */
+
75  virtual bool getDeFogEnable() const = 0;
+
76 
+
77  /**
+
78  * Sets the amount of fog to be removed. Range 0.0 - 1.0 (none - all).
+
79  * @param[in] amount amount of fog to remove.
+
80  */
+
81  virtual Status setDeFogAmount(float amount) = 0;
+
82 
+
83  /**
+
84  * @returns the amount of fog to remove.
+
85  */
+
86  virtual float getDeFogAmount() const = 0;
+
87 
+
88  /**
+
89  * Set the quality of the effect, lower quality results in lower execution time.
+
90  * Range 0.0 - 1.0 (low quality - high quality).
+
91  * @param[in] quality effect quality.
+
92  */
+
93  virtual Status setDeFogQuality(float quality) = 0;
+
94 
+
95  /**
+
96  * @returns the effect quality.
+
97  */
+
98  virtual float getDeFogQuality() const = 0;
+
99 
+
100 protected:
+ +
102 };
+
103 
+
104 } // namespace Ext
+
105 
+
106 } // namespace Argus
+
107 
+
108 #endif // _ARGUS_DE_FOG_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/DebugCaptureSession_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/DebugCaptureSession_8h.html new file mode 100644 index 0000000..81cce1a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/DebugCaptureSession_8h.html @@ -0,0 +1,137 @@ + + + + + +Libargus API: include/Argus/Ext/DebugCaptureSession.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
DebugCaptureSession.h File Reference
+
+
+ +

Libargus Extension: Debug Capture Session API +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::IDebugCaptureSession
 Interface used to dump CaptureSession runtime information. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + +

+Enumerations

enum  Argus::ArgusInjectError { Argus::ArgusInjectError_ErrorLongLine = 1 + }
+ + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_DEBUG_CAPTURE_SESSION, 1fee5f03, 2ea9, 4558, 8e92, c2, 4b, 0b, 82, b9, af)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_DEBUG_CAPTURE_SESSION, 2122fe84, b4cc, 4945, af5d, a3, 86, 26, 75, eb, a4)
+

Detailed Description

+

Libargus Extension: Debug Capture Session API

+

Description: This file defines the DebugCaptureSession extension.

+ +

Definition in file DebugCaptureSession.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/DebugCaptureSession_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/DebugCaptureSession_8h_source.html new file mode 100644 index 0000000..dea0f84 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/DebugCaptureSession_8h_source.html @@ -0,0 +1,194 @@ + + + + + +Libargus API: include/Argus/Ext/DebugCaptureSession.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
DebugCaptureSession.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Debug Capture Session API</b>
+
32  *
+
33  * @b Description: This file defines the DebugCaptureSession extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_DEBUG_CAPTURE_SESSION_H
+
37 #define _ARGUS_DEBUG_CAPTURE_SESSION_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+ +
43 {
+ +
45 };
+
46 
+
47 /**
+
48  * Adds a debug interface to dump internal libargus runtime information.
+
49  * It introduces one new interface:
+
50  * - Ext::IDebugCaptureSession: dumps session runtime information.
+
51  *
+
52  * @defgroup ArgusExtDebugCaptureSession Ext::DebugCaptureSession
+
53  * @ingroup ArgusExtensions
+
54  */
+
55 DEFINE_UUID(ExtensionName, EXT_DEBUG_CAPTURE_SESSION, 1fee5f03,2ea9,4558,8e92,c2,4b,0b,82,b9,af);
+
56 
+
57 
+
58 namespace Ext
+
59 {
+
60 
+
61 /**
+
62  * @class IDebugCaptureSession
+
63  *
+
64  * Interface used to dump CaptureSession runtime information
+
65  *
+
66  * @ingroup ArgusCaptureSession ArgusExtDebugCaptureSession
+
67  */
+
68 DEFINE_UUID(InterfaceID, IID_DEBUG_CAPTURE_SESSION, 2122fe84,b4cc,4945,af5d,a3,86,26,75,eb,a4);
+ +
70 {
+
71 public:
+
72  static const InterfaceID& id() { return IID_DEBUG_CAPTURE_SESSION; }
+
73 
+
74  /**
+
75  * Returns session runtime information to the specified file descriptor.
+
76  */
+
77  virtual Status dump(int32_t fd) const = 0;
+
78 
+
79  /**
+
80  * Set event injection error id.
+
81  */
+ +
83 
+
84 protected:
+ +
86 };
+
87 
+
88 } // namespace Ext
+
89 
+
90 } // namespace Argus
+
91 
+
92 #endif
+
93 
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/DolWdrSensorMode_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/DolWdrSensorMode_8h.html new file mode 100644 index 0000000..b08b0b5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/DolWdrSensorMode_8h.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/Ext/DolWdrSensorMode.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
DolWdrSensorMode.h File Reference
+
+
+ +

Libargus Extension: Digital Overlap WDR Sensor Modes +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::IDolWdrSensorMode
 Interface to the properties of a DOL WDR device. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_DOL_WDR_SENSOR_MODE, 569fb210, 70d9, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_DOL_WDR_SENSOR_MODE, a1f4cae0, 70dc, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus Extension: Digital Overlap WDR Sensor Modes

+

Description: Adds extra functionalities for the Digital Overlap (DOL) Wide Dynamic Range (WDR) sensor mode type.

+ +

Definition in file DolWdrSensorMode.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/DolWdrSensorMode_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/DolWdrSensorMode_8h_source.html new file mode 100644 index 0000000..7e63bb4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/DolWdrSensorMode_8h_source.html @@ -0,0 +1,292 @@ + + + + + +Libargus API: include/Argus/Ext/DolWdrSensorMode.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
DolWdrSensorMode.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Digital Overlap WDR Sensor Modes</b>
+
32  *
+
33  * @b Description: Adds extra functionalities for the
+
34  * Digital Overlap (DOL) Wide Dynamic Range (WDR) sensor mode type.
+
35  */
+
36 
+
37 #ifndef _ARGUS_EXT_DOL_WDR_SENSOR_MODE_H
+
38 #define _ARGUS_EXT_DOL_WDR_SENSOR_MODE_H
+
39 
+
40 namespace Argus
+
41 {
+
42 
+
43 /**
+
44  * Adds extra functionalities for the Digital Overlap (DOL) Wide Dynamic
+
45  * Range (WDR) sensor mode type. It introduces one new interface:
+
46  * - Ext::IDolWdrSensorMode: Returns the extended properties specific to a Digital Overlap (DOL)
+
47  * Wide Dynamic Range (WDR) extended sensor mode. DOL WDR is a
+
48  * multi-exposure technology that enables fusion of various exposures
+
49  * from a single frame to produce a WDR image.
+
50  *
+
51  * @defgroup ArgusExtDolWdrSensorMode Ext::DolWdrSensorMode
+
52  * @ingroup ArgusExtensions
+
53  */
+
54 DEFINE_UUID(ExtensionName, EXT_DOL_WDR_SENSOR_MODE, 569fb210,70d9,11e7,9598,08,00,20,0c,9a,66);
+
55 
+
56 namespace Ext
+
57 {
+
58 
+
59 /**
+
60  * @class IDolWdrSensorMode
+
61  *
+
62  * Interface to the properties of a DOL WDR device.
+
63  *
+
64  * Returns the extended properties specific to a Digital Overlap (DOL)
+
65  * Wide Dynamic Range (WDR) extended sensor mode. DOL WDR is a multi-exposure technology
+
66  * that enables fusion of various exposures from a single frame to produce a WDR image.
+
67  *
+
68  * A DOL WDR RAW buffer contains different DOL exposures in an interleaved layout. DOL WDR
+
69  * supports two exposure (long and short) and three exposure (long, short and very short) schemes.
+
70  * These schemes are referred to as DOL-2 and DOL-3 respectively.
+
71  *
+
72  * Exposures are time staggered which leads to vertical blank period (VBP) rows being inserted
+
73  * in between various exposures. This scheme results in (N-1) sections of VBP rows for an N exposure
+
74  * DOL WDR frame.
+
75  *
+
76  * Each exposure is preceded by optical black (OB) rows.
+
77  *
+
78  * Each row of DOL WDR RAW interleaved frame starts with a few Line Info (LI) marker pixels.
+
79  * LI pixels distinguish the kind of row.
+
80  * Row types include:
+
81  * a. Long Exposure
+
82  * b. Short Exposure
+
83  * c. Very Short Exposure
+
84  * d. Vertical Blank Period
+
85  *
+
86  * For a DOL-2 exposure scheme, there is only one section of VBP rows. The data layout per exposure
+
87  * looks like this:
+
88  * Long exposure has OB rows, image rows, VBP rows.
+
89  * Short exposure has OB rows, VBP rows, image rows.
+
90  *
+
91  * The ordering of VBP rows changes across exposures but the count of VBP rows per exposure
+
92  * remains the same. The final interleaved DOL WDR RAW frame buffer is produced by interleaving
+
93  * each exposure's data on a per row basis in a round robin fashion across exposures.
+
94  *
+
95  * For a DOL-3 exposure scheme, there are two sections of VBP rows. For the sake of terminology
+
96  * these are referred to as VBP[0] and VBP[1]. The data layout per exposure looks like this:
+
97  * Long exposure has OB rows, image rows, VBP[0] rows, VBP[1] rows.
+
98  * Short exposure has OB rows, VBP[0] rows, image rows, VBP[1] rows.
+
99  * Very Short exposure has OB rows, VBP[0] rows, VBP[1] rows, image rows.
+
100  *
+
101  * Again, only the ordering of VBP[0] and VBP[1] rows changes across exposures but the count of
+
102  * VBP[0] and VBP[1] rows remains the same. Similar to the DOL-2 scheme, the final interleaved
+
103  * DOL WDR RAW frame buffer for DOL-3 scheme is produced by interleaving each exposure's data
+
104  * on a per row basis in a round robin fashion across exposures.
+
105  *
+
106  * This scheme can be extended to DOL-N exposures with (N-1) sections of VBP rows ranging from
+
107  * VBP[0] to VBP[N-2]. When considering the vertical blank period sections for exposure N,
+
108  * the rows of VBP[X] will come before the image data if X < N, otherwise they will come
+
109  * after the image data.
+
110  *
+
111  * Hence, a DOL-N RAW buffer would have different dimensions than the fused output
+
112  * WDR frame buffer. The resolution of the DOL-N RAW buffer is referred to as physical resolution.
+
113  *
+
114  * The set of properties for basic sensor modes is still applicable to DOL WDR sensor mode. Those
+
115  * properties are available through the ISensorMode interface. The only difference is that the
+
116  * resolution property provided by the ISensorMode interface for DOL WDR would be the size of the
+
117  * fused WDR frame. WDR fusion typically eliminates LI markers, OB rows and VBP rows and merges the
+
118  * individual exposures to create a frame that is smaller in height and width than the
+
119  * DOL WDR RAW interleaved frame.
+
120  *
+
121  * Following the LI marker pixels is the actual pixel data for each row. This data may include
+
122  * margin pixels on the left or right side of the row, which are generally used for filtering
+
123  * and cropped out of a fused DOL image. The width of these margin pixels can be queried by
+
124  * getLeftMarginWidth()/getRightMarginWidth().
+
125  * @see ISensorMode
+
126  *
+
127  * @ingroup ArgusSensorMode ArgusExtDolWdrSensorMode
+
128  */
+
129 DEFINE_UUID(InterfaceID, IID_DOL_WDR_SENSOR_MODE, a1f4cae0,70dc,11e7,9598,08,00,20,0c,9a,66);
+ +
131 {
+
132 public:
+
133  static const InterfaceID& id() { return IID_DOL_WDR_SENSOR_MODE; }
+
134 
+
135  /**
+
136  * Returns the number of exposures captured per frame for this DOL WDR mode.
+
137  * Typically, 2 = Long, Short or 3 = Long, Short, Very Short exposures.
+
138  */
+
139  virtual uint32_t getExposureCount() const = 0;
+
140 
+
141  /**
+
142  * Returns number of Optical Black rows at the start of each exposure in a DOL WDR frame.
+
143  */
+
144  virtual uint32_t getOpticalBlackRowCount() const = 0;
+
145 
+
146  /**
+
147  * Returns number of vertical blank period rows for each DOL WDR exposure.
+
148  *
+
149  * @param[out] verticalBlankPeriodRowCounts The output vector to store the
+
150  * vertical blank period (VBP) rows per DOL WDR exposure. Size of the vector is
+
151  * getExposureCount()-1 count values. When considering the vertical blank period
+
152  * sections for exposure N, the rows of VBP[X] will come before the image data
+
153  * if X < N, otherwise they will come after the image data.
+
154  */
+ +
156  std::vector<uint32_t>* verticalBlankPeriodRowCounts) const = 0;
+
157 
+
158  /**
+
159  * Returns line info markers width in pixels.
+
160  * These occur at the start of each pixel row to distinguish row types. There are different
+
161  * line info markers to distinguish each different exposure and vertical blank period rows.
+
162  *
+
163  * Optical black rows have the same line info markers as the exposure type they appear on.
+
164  */
+
165  virtual uint32_t getLineInfoMarkerWidth() const = 0;
+
166 
+
167  /**
+
168  * Returns number of margin pixels on left per row.
+
169  */
+
170  virtual uint32_t getLeftMarginWidth() const = 0;
+
171 
+
172  /**
+
173  * Returns number of margin pixels on right per row.
+
174  */
+
175  virtual uint32_t getRightMarginWidth() const = 0;
+
176 
+
177  /**
+
178  * Returns the physical resolution derived due to the interleaved exposure output from DOL WDR
+
179  * frames.
+
180  */
+
181  virtual Size2D<uint32_t> getPhysicalResolution() const = 0;
+
182 
+
183 protected:
+ +
185 };
+
186 
+
187 } // namespace Ext
+
188 
+
189 } // namespace Argus
+
190 
+
191 #endif // _ARGUS_EXT_DOL_WDR_SENSOR_MODE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/EGLImage_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/EGLImage_8h.html new file mode 100644 index 0000000..301a2fc --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/EGLImage_8h.html @@ -0,0 +1,134 @@ + + + + + +Libargus API: include/Argus/EGLImage.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
EGLImage.h File Reference
+
+
+ +

Libargus API: EGLImage API +More...

+ +

Go to the source code of this file.

+ + + + + + +

+Classes

class  Argus::IEGLImageBufferSettings
 Interface that provides the settings used to configure EGLImage Buffer creation. More...
class  Argus::IEGLImageBuffer
 Interface that provides methods to EGLImage Buffers. More...
+ + +

+Namespaces

namespace  Argus
+ + + + + +

+Functions

 Argus::DEFINE_UUID (BufferType, BUFFER_TYPE_EGL_IMAGE, c723d966, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 Buffer type that wraps an EGLImage resource.
 Argus::DEFINE_UUID (InterfaceID, IID_EGL_IMAGE_BUFFER_SETTINGS, c723d967, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (InterfaceID, IID_EGL_IMAGE_BUFFER, c723d968, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus API: EGLImage API

+

Description: Defines a BufferType that wraps an EGLImage resource.

+ +

Definition in file EGLImage.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/EGLImage_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/EGLImage_8h_source.html new file mode 100644 index 0000000..9a4c573 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/EGLImage_8h_source.html @@ -0,0 +1,230 @@ + + + + + +Libargus API: include/Argus/EGLImage.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
EGLImage.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: EGLImage API</b>
+
32  *
+
33  * @b Description: Defines a BufferType that wraps an EGLImage resource.
+
34  */
+
35 
+
36 #ifndef _ARGUS_EGL_IMAGE_H
+
37 #define _ARGUS_EGL_IMAGE_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * @defgroup ArgusEGLImageBuffer EGLImageBuffer
+
44  * @ingroup ArgusBufferBuffer
+
45  * @ref ArgusBuffer type that wraps an EGLImage resource (BUFFER_TYPE_EGL_IMAGE).
+
46  */
+
47 /**
+
48  * @defgroup ArgusEGLImageBufferSettings EGLImageBufferSettings
+
49  * @ingroup ArgusBufferBufferSettings
+
50  * Settings type used to configure/create @ref ArgusEGLImageBuffer Buffers (BUFFER_TYPE_EGL_IMAGE).
+
51  */
+
52 
+
53 /**
+
54  * @ref ArgusBuffer type that wraps an EGLImage resource.
+
55  * @ingroup ArgusBufferBufferSettings
+
56  */
+
57 DEFINE_UUID(BufferType, BUFFER_TYPE_EGL_IMAGE, c723d966,5231,11e7,9598,18,00,20,0c,9a,66);
+
58 
+
59 /**
+
60  * @class IEGLImageBufferSettings
+
61  *
+
62  * Interface that provides the settings used to configure EGLImage Buffer creation.
+
63  * These Buffers act as siblings for the EGLImage, providing libargus write access
+
64  * to the underlying buffer resources for the destination of capture requests.
+
65  *
+
66  * @ingroup ArgusEGLImageBufferSettings
+
67  */
+
68 DEFINE_UUID(InterfaceID, IID_EGL_IMAGE_BUFFER_SETTINGS, c723d967,5231,11e7,9598,18,00,20,0c,9a,66);
+ +
70 {
+
71 public:
+
72  static const InterfaceID& id() { return IID_EGL_IMAGE_BUFFER_SETTINGS; }
+
73 
+
74  /**
+
75  * Sets the EGLDisplay which owns the EGLImage.
+
76  * @param[in] eglDisplay The EGLDisplay that owns the EGLImage.
+
77  */
+
78  virtual Status setEGLDisplay(EGLDisplay eglDisplay) = 0;
+
79 
+
80  /**
+
81  * Returns the EGLDisplay which owns the EGLImage.
+
82  */
+
83  virtual EGLDisplay getEGLDisplay() const = 0;
+
84 
+
85  /**
+
86  * Sets the EGLImage to use as the sibling for this Buffer.
+
87  * @param[in] eglImage The EGLImage to use as the sibling for this Buffer.
+
88  */
+
89  virtual Status setEGLImage(EGLImageKHR eglImage) = 0;
+
90 
+
91  /**
+
92  * Returns the EGLImage to use as the sibling for this Buffer.
+
93  */
+
94  virtual EGLImageKHR getEGLImage() const = 0;
+
95 
+
96 protected:
+ +
98 };
+
99 
+
100 /**
+
101  * @class IEGLImageBuffer
+
102  *
+
103  * Interface that provides methods to EGLImage Buffers.
+
104  *
+
105  * @ingroup ArgusEGLImageBuffer
+
106  */
+
107 DEFINE_UUID(InterfaceID, IID_EGL_IMAGE_BUFFER, c723d968,5231,11e7,9598,18,00,20,0c,9a,66);
+ +
109 {
+
110 public:
+
111  static const InterfaceID& id() { return IID_EGL_IMAGE_BUFFER; }
+
112 
+
113  /**
+
114  * Returns the EGLDisplay that owns the EGLImage.
+
115  */
+
116  virtual EGLDisplay getEGLDisplay() const = 0;
+
117 
+
118  /**
+
119  * Returns the EGLImage being used for this Buffer.
+
120  */
+
121  virtual EGLImageKHR getEGLImage() const = 0;
+
122 
+
123 protected:
+ +
125 };
+
126 
+
127 } // namespace Argus
+
128 
+
129 #endif // _ARGUS_EGL_IMAGE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/EGLStream_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/EGLStream_8h.html new file mode 100644 index 0000000..3da9314 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/EGLStream_8h.html @@ -0,0 +1,138 @@ + + + + + +Libargus API: include/Argus/EGLStream.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
EGLStream.h File Reference
+
+
+ +

Libargus API: EGLStream API +More...

+ +

Go to the source code of this file.

+ + + + + + +

+Classes

class  Argus::IEGLOutputStreamSettings
 Interface that exposes the settings used for EGLStream-linked OutputStream creation. More...
class  Argus::IEGLOutputStream
 Interface that exposes the methods available to an EGLStream-linked OutputStream. More...
+ + +

+Namespaces

namespace  Argus
+ + + + + + + + + +

+Functions

 Argus::DEFINE_UUID (StreamType, STREAM_TYPE_EGL, 3a659360, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 OutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL).
 Argus::DEFINE_NAMED_UUID_CLASS (EGLStreamMode)
 Defines the EGLStream queue mode of operation (see IEGLOutputStreamSettings::setMode).
 Argus::DEFINE_UUID (EGLStreamMode, EGL_STREAM_MODE_MAILBOX, 33661d40, 3ee2, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (EGLStreamMode, EGL_STREAM_MODE_FIFO, 33661d41, 3ee2, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (InterfaceID, IID_EGL_OUTPUT_STREAM_SETTINGS, 3a659361, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (InterfaceID, IID_EGL_OUTPUT_STREAM, 3a659362, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus API: EGLStream API

+

Description: This file defines an EGLStream-linked OutputStream type.

+ +

Definition in file EGLStream.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/EGLStream_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/EGLStream_8h_source.html new file mode 100644 index 0000000..8e2b653 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/EGLStream_8h_source.html @@ -0,0 +1,348 @@ + + + + + +Libargus API: include/Argus/EGLStream.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
EGLStream.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: EGLStream API</b>
+
32  *
+
33  * @b Description: This file defines an EGLStream-linked OutputStream type.
+
34  */
+
35 
+
36 #ifndef _ARGUS_EGL_STREAM_H
+
37 #define _ARGUS_EGL_STREAM_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * @defgroup ArgusEGLOutputStream EGLOutputStream
+
44  * @ingroup ArgusOutputStream
+
45  * @ref ArgusOutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL).
+
46  *
+
47  * EGLStream-linked OutputStream objects maintain a connection to an EGLStream
+
48  * as the producer endpoint. The EGLStream implementation is responsible for
+
49  * buffer allocation, management, and synchronization as frames are presented
+
50  * to the EGLStream from libargus and then consumed using an EGLStream consumer.
+
51  */
+
52 /**
+
53  * @defgroup ArgusEGLOutputStreamSettings EGLOutputStreamSettings
+
54  * @ingroup ArgusOutputStreamSettings
+
55  * Settings type used to configure/create @ref ArgusEGLOutputStream streams (STREAM_TYPE_EGL).
+
56  */
+
57 
+
58 /**
+
59  * @ref ArgusOutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL).
+
60  * @ingroup ArgusOutputStreamSettings
+
61  */
+
62 DEFINE_UUID(StreamType, STREAM_TYPE_EGL, 3a659360,5231,11e7,9598,18,00,20,0c,9a,66);
+
63 
+
64 /**
+
65  * Defines the EGLStream queue mode of operation (see IEGLOutputStreamSettings::setMode).
+
66  */
+
67 DEFINE_NAMED_UUID_CLASS(EGLStreamMode);
+
68 DEFINE_UUID(EGLStreamMode, EGL_STREAM_MODE_MAILBOX, 33661d40,3ee2,11e6,bdf4,08,00,20,0c,9a,66);
+
69 DEFINE_UUID(EGLStreamMode, EGL_STREAM_MODE_FIFO, 33661d41,3ee2,11e6,bdf4,08,00,20,0c,9a,66);
+
70 
+
71 /**
+
72  * @class IEGLOutputStreamSettings
+
73  *
+
74  * Interface that exposes the settings used for EGLStream-linked OutputStream creation.
+
75  *
+
76  * @ingroup ArgusEGLOutputStreamSettings
+
77  */
+
78 DEFINE_UUID(InterfaceID, IID_EGL_OUTPUT_STREAM_SETTINGS, 3a659361,5231,11e7,9598,18,00,20,0c,9a,66);
+ +
80 {
+
81 public:
+
82  static const InterfaceID& id() { return IID_EGL_OUTPUT_STREAM_SETTINGS; }
+
83 
+
84  /**
+
85  * Set the format of the stream.
+
86  * Default value: PIXEL_FMT_UNKNOWN
+
87  */
+
88  virtual Status setPixelFormat(const PixelFormat& format) = 0;
+
89  virtual PixelFormat getPixelFormat() const = 0;
+
90 
+
91  /**
+
92  * Set the resolution of the stream.
+
93  * Default value: (0, 0)
+
94  */
+
95  virtual Status setResolution(const Size2D<uint32_t>& resolution) = 0;
+
96  virtual Size2D<uint32_t> getResolution() const = 0;
+
97 
+
98  /**
+
99  * Set the number of exposures per stream frame.
+
100  * This number should match the number of exposures that are going to be provided
+
101  * with each stream frame when capturing from multi-exposure WDR sources.
+
102  * Note that the EGLStream consumer must support consuming multi-exposure/buffer
+
103  * EGLStreams. In the case of the EGLStream::FrameConsumer consumer, the multiple
+
104  * exposures are treated as separate buffers in the acquired Image and may be
+
105  * accessed using any Image interface which supports multi-buffer/plane image access
+
106  * (see EGLStream::IImage::getBufferCount()).
+
107  * Default value: 1
+
108  */
+
109  virtual Status setExposureCount(uint32_t exposureCount) = 0;
+
110  virtual uint32_t getExposureCount() const = 0;
+
111 
+
112  /**
+
113  * Set the EGLDisplay the created stream must belong to.
+
114  * Default value: EGL_NO_DISPLAY - stream is display-agnostic.
+
115  */
+
116  virtual Status setEGLDisplay(EGLDisplay eglDisplay) = 0;
+
117  virtual EGLDisplay getEGLDisplay() const = 0;
+
118 
+
119  /**
+
120  * Sets the mode of the OutputStream. Available options are:
+
121  *
+
122  * MAILBOX:
+
123  * In this mode, only the newest frame is made available to the consumer. When Argus
+
124  * completes a frame it empties the mailbox and inserts the new frame into the mailbox.
+
125  * The consumer then retrieves the frame from the mailbox and processes it; when
+
126  * finished, the frame is either placed back into the mailbox (if the mailbox is empty)
+
127  * or discarded (if the mailbox is not empty). This mode implies 2 things:
+
128  *
+
129  * - If the consumer consumes frames slower than Argus produces frames, then some
+
130  * frames may be lost (never seen by the consumer).
+
131  *
+
132  * - If the consumer consumes frames faster than Argus produces frames, then the
+
133  * consumer may see some frames more than once.
+
134  *
+
135  * FIFO:
+
136  * When using this mode, every producer frame is made available to the consumer through
+
137  * the use of a fifo queue for the frames. When using this mode, the fifo queue length
+
138  * must be specified using setFifoLength. When Argus completes a frame it inserts it to
+
139  * the head of the fifo queue. If the fifo is full (already contains the number of frames
+
140  * equal to the fifo queue length), Argus will stall until the fifo is no longer
+
141  * full. The consumer consumes frames from the tail of the queue; however, if the
+
142  * consumer releases a frame while the queue is empty, the frame is set aside and will
+
143  * be returned again the next time the consumer requests a frame if another new frame
+
144  * has not been inserted into the fifo queue before then. Once a new frame is inserted
+
145  * into the fifo queue, any previously released frame will be permanently discarded.
+
146  * This mode implies:
+
147  *
+
148  * - Frames are never discarded until the consumer has processed them.
+
149  *
+
150  * - If the consumer consumes frames slower than Argus produces them, Argus will stall.
+
151  *
+
152  * - If the consumer consumes frames faster than Argus produces them, then the
+
153  * consumer may see some frames more than once.
+
154  *
+
155  * Default value: STREAM_MODE_MAILBOX
+
156  */
+
157  virtual Status setMode(const EGLStreamMode& mode) = 0;
+
158  virtual EGLStreamMode getMode() const = 0;
+
159 
+
160  /**
+
161  * Sets the FIFO queue length of the stream. This value is only used if the stream is using
+
162  * the FIFO mode (@see OutputStreamSettings::setMode). Value must be > 0.
+
163  * Default value: 1
+
164  */
+
165  virtual Status setFifoLength(uint32_t fifoLength) = 0;
+
166  virtual uint32_t getFifoLength() const = 0;
+
167 
+
168  /**
+
169  * Enables or disables embedding Argus CaptureMetadata within frames written to the EGLStream.
+
170  * Enabling this will allow an EGLStream::MetadataContainer to be created from frames acquired
+
171  * on the consumer side of the EGLStream that will expose the EGLStream::IArgusCaptureMetadata
+
172  * interface, which in turn provides access to the CaptureMetadata corresponding to that frame.
+
173  * This will also enable the IArgusCaptureMetadata interface directly on EGLStream::Frames
+
174  * acquired by an EGLStream::FrameConsumer.
+
175  * Default value: disabled.
+
176  */
+
177  virtual Status setMetadataEnable(bool metadataEnable) = 0;
+
178  virtual bool getMetadataEnable() const = 0;
+
179 
+
180  /**
+
181  * @returns True if the output pixel format is supported by the CaptureSession for the
+
182  * queried sensor mode. Otherwise, returns false.
+
183  *
+
184  * @param[in] sensorMode The sensor mode being queried for the output pixel type.
+
185  * @param[in] outputFormat The output pixel format being queried for support.
+
186  */
+
187  virtual bool supportsOutputStreamFormat(const SensorMode* sensorMode,
+
188  const PixelFormat& outputFormat) const = 0;
+
189 
+
190 protected:
+ +
192 };
+
193 
+
194 /**
+
195  * @class IEGLOutputStream
+
196  *
+
197  * Interface that exposes the methods available to an EGLStream-linked OutputStream.
+
198  *
+
199  * @ingroup ArgusEGLOutputStream
+
200  */
+
201 DEFINE_UUID(InterfaceID, IID_EGL_OUTPUT_STREAM, 3a659362,5231,11e7,9598,18,00,20,0c,9a,66);
+ +
203 {
+
204 public:
+
205  static const InterfaceID& id() { return IID_EGL_OUTPUT_STREAM; }
+
206 
+
207  /**
+
208  * Waits until both the producer and consumer endpoints of the stream are connected.
+
209  *
+
210  * @param[in] timeout The timeout in nanoseconds.
+
211  *
+
212  * @returns success/status of this call.
+
213  */
+
214  virtual Status waitUntilConnected(uint64_t timeout = TIMEOUT_INFINITE) const = 0;
+
215 
+
216  /**
+
217  * Disconnects the stream from the underlying EGLStream.
+
218  */
+
219  virtual void disconnect() = 0;
+
220 
+
221  /**
+
222  * Returns the format of the stream.
+
223  */
+
224  virtual PixelFormat getPixelFormat() const = 0;
+
225 
+
226  /**
+
227  * Returns the image resolution of the stream, in pixels.
+
228  */
+
229  virtual Size2D<uint32_t> getResolution() const = 0;
+
230 
+
231  /**
+
232  * Returns the EGLDisplay the stream's EGLStream belongs to.
+
233  */
+
234  virtual EGLDisplay getEGLDisplay() const = 0;
+
235 
+
236  /**
+
237  * Returns the EGLStream backing the stream.
+
238  */
+
239  virtual EGLStreamKHR getEGLStream() const = 0;
+
240 
+
241 protected:
+ +
243 };
+
244 
+
245 } // namespace Argus
+
246 
+
247 #endif // _ARGUS_EGL_STREAM_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/EGLSync_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/EGLSync_8h.html new file mode 100644 index 0000000..8502791 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/EGLSync_8h.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/EGLSync.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
EGLSync.h File Reference
+
+
+ +

Libargus API: EGLSync API +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::IEGLSync
 Interface that provides EGLSync input and output methods for a Buffer. More...
+ + +

+Namespaces

namespace  Argus
+ + + + +

+Functions

 Argus::DEFINE_UUID (SyncType, SYNC_TYPE_EGL_SYNC, 5df77c90, 5d1b, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)
 Sync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC).
 Argus::DEFINE_UUID (InterfaceID, IID_EGL_SYNC, 5df77c91, 5d1b, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus API: EGLSync API

+

Description: Defines a SyncType that uses EGLSync objects.

+ +

Definition in file EGLSync.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/EGLSync_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/EGLSync_8h_source.html new file mode 100644 index 0000000..448fd98 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/EGLSync_8h_source.html @@ -0,0 +1,245 @@ + + + + + +Libargus API: include/Argus/EGLSync.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
EGLSync.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: EGLSync API</b>
+
32  *
+
33  * @b Description: Defines a SyncType that uses EGLSync objects.
+
34  */
+
35 
+
36 #ifndef _ARGUS_EGL_SYNC_H
+
37 #define _ARGUS_EGL_SYNC_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * @defgroup ArgusBufferEGLSync EGLSync
+
44  * @ingroup ArgusBufferSync
+
45  * Sync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC).
+
46  */
+
47 
+
48 /**
+
49  * Sync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC).
+
50  * @ingroup ArgusBufferSync
+
51  */
+
52 DEFINE_UUID(SyncType, SYNC_TYPE_EGL_SYNC, 5df77c90,5d1b,11e7,9598,08,00,20,0c,9a,66);
+
53 
+
54 /**
+
55  * @class IEGLSync
+
56  *
+
57  * Interface that provides EGLSync input and output methods for a Buffer.
+
58  *
+
59  * @ingroup ArgusBufferEGLSync
+
60  */
+
61 DEFINE_UUID(InterfaceID, IID_EGL_SYNC, 5df77c91,5d1b,11e7,9598,08,00,20,0c,9a,66);
+
62 class IEGLSync : public Interface
+
63 {
+
64 public:
+
65  static const InterfaceID& id() { return IID_EGL_SYNC; }
+
66 
+
67  /**
+
68  * Creates and returns a new EGLSync object that is signalled when all operations on the
+
69  * Buffer from the previous libargus capture request have completed.
+
70  *
+
71  * When sync support is enabled for a Stream, libargus may output Buffers to that stream
+
72  * even if hardware operations are still pending on the Buffer's image data. In this case,
+
73  * libargus will attach sync information to the Buffer when it is acquired by the client
+
74  * that must be used to block any client operations on the image data until all preceeding
+
75  * libargus operations have completed. Failure to block on this sync information may lead
+
76  * to undefined buffer contents.
+
77  *
+
78  * This method will create and output a new EGLSync object that will be signalled once all
+
79  * libargus operations on the Buffer have completed. Ownership of this EGLSync object is
+
80  * given to the caller, who must then wait on the sync object as needed before destroying
+
81  * it using eglDestroySyncKHR. Calling this method more than once is allowed, and each call
+
82  * will create and return a new EGLSync object.
+
83  *
+
84  * This method should only ever be called while the Buffer is in an acquired state; ie. the
+
85  * time between when the Buffer was acquired by IBufferOutputStream::acquireBuffer and when
+
86  * it was released by IBufferOutputStream::releaseBuffer. If called outside of the acquired
+
87  * state, STATUS_UNAVAILABLE will be returned.
+
88  *
+
89  * When successful, STATUS_OK will be returned and 'eglSync' will be written with the new
+
90  * EGLSync object. Note that EGL_NO_SYNC_KHR is still a valid output for the 'eglSync' even
+
91  * when STATUS_OK is returned; this implies that libargus does not have any pending
+
92  * operations to the Buffer and so the client need not take any sync precautions before
+
93  * accessing the image data. Thus, the returned Status code should be used for detecting
+
94  * failures rather than checking for an EGL_NO_SYNC_KHR output.
+
95  *
+
96  * @param[in] eglDisplay The EGLDisplay that shall own the returned EGLSync object.
+
97  * @param[out] eglSync Output for the newly created EGLSync object. Ownership of this object
+
98  * is given to the client.
+
99  *
+
100  * @returns success/status of this call.
+
101  */
+
102  virtual Status getAcquireSync(EGLDisplay eglDisplay, EGLSyncKHR* eglSync) = 0;
+
103 
+
104  /**
+
105  * Sets the client-provided EGLSync for a Buffer prior to its release.
+
106  *
+
107  * When sync support is enabled for a Stream, the client may release Buffers back to
+
108  * libargus for future capture use even if the client has hardware operations pending on
+
109  * the Buffer's image data. In this case, the client must provide an EGLSync object to
+
110  * libargus that will be signalled by the completion of the client's pending operations.
+
111  * This sync object will then be waited on by libargus to prevent any buffer operations
+
112  * from occuring before the client sync has been signalled.
+
113  *
+
114  * This method should only ever be called while the Buffer is in an acquired state; ie. the
+
115  * time between when the Buffer was acquired by IBufferOutputStream::acquireBuffer and when
+
116  * it was released by IBufferOutputStream::releaseBuffer. If called outside of this period,
+
117  * STATUS_UNAVAILBLE will be returned and no object updates will be made. Otherwise, when
+
118  * called in the acquired state, this method will set the EGLSync that will be provided to
+
119  * libargus at the time that the Buffer is released by IBufferOutputStream::releaseBuffer
+
120  * and STATUS_OK will be returned. On success, ownership of the EGLSync object will be passed
+
121  * to libargus; further use of the EGLSync by the client after this point may lead to
+
122  * undefined results or abnormal termination. If called more than once when in the acquired
+
123  * state, any previously set EGLSync will be replaced; only the last set EGLSync before
+
124  * calling releaseBuffer will be waited on by libargus.
+
125  *
+
126  * If the client does not have any pending operations on the Buffer at the time that
+
127  * releaseBuffer is called, it is allowed for the client to either skip calling this method
+
128  * or to call it using EGL_NO_DISPLAY and EGL_NO_SYNC_KHR such that libargus will not have
+
129  * to consider any sync requirements and may use the Buffer immediately.
+
130  *
+
131  * @param[in] eglDisplay The EGLDisplay that created the EGLSync object being provided.
+
132  * @param[in] eglSync The EGLSync that libargus must wait on before accessing the buffer.
+
133  *
+
134  * @returns success/status of this call.
+
135  */
+
136  virtual Status setReleaseSync(EGLDisplay eglDisplay, EGLSyncKHR eglSync) = 0;
+
137 
+
138 protected:
+ +
140 };
+
141 
+
142 } // namespace Argus
+
143 
+
144 #endif // _ARGUS_EGL_SYNC_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/EventProvider_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/EventProvider_8h.html new file mode 100644 index 0000000..59488cd --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/EventProvider_8h.html @@ -0,0 +1,129 @@ + + + + + +Libargus API: include/Argus/EventProvider.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
EventProvider.h File Reference
+
+
+ +

Libargus API: Event Provider API +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::IEventProvider
 Interface for an object which generates Events (such as CaptureSession). More...
+ + +

+Namespaces

namespace  Argus
+ + +

+Functions

 Argus::DEFINE_UUID (InterfaceID, IID_EVENT_PROVIDER, 523ed330, 25dc, 11e5, 867f, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus API: Event Provider API

+

Description: Defines the EventProvider interface.

+ +

Definition in file EventProvider.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/EventProvider_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/EventProvider_8h_source.html new file mode 100644 index 0000000..40097ef --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/EventProvider_8h_source.html @@ -0,0 +1,223 @@ + + + + + +Libargus API: include/Argus/EventProvider.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
EventProvider.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Event Provider API</b>
+
32  *
+
33  * @b Description: Defines the EventProvider interface.
+
34  */
+
35 
+
36 #ifndef _ARGUS_EVENT_PROVIDER_H
+
37 #define _ARGUS_EVENT_PROVIDER_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * @class IEventProvider
+
44  *
+
45  * Interface for an object which generates Events (such as CaptureSession).
+
46  *
+
47  * Any generated Events are initially stored by the provider itself, and they
+
48  * are not copied out to public EventQueues until waitForEvents() is called.
+
49  * If at any time there is an event type offered by a provider that is not
+
50  * accepted by an active EventQueue created by that provider, all events of
+
51  * that type will be discarded.
+
52  *
+
53  * @ingroup ArgusCaptureSession
+
54  */
+
55 DEFINE_UUID(InterfaceID, IID_EVENT_PROVIDER, 523ed330,25dc,11e5,867f,08,00,20,0c,9a,66);
+
56 class IEventProvider : public Interface
+
57 {
+
58 public:
+
59  static const InterfaceID& id() { return IID_EVENT_PROVIDER; }
+
60 
+
61  /**
+
62  * Returns a list of event types that this provider can generate.
+
63  * @param[out] types A vector that will be populated by the available event types.
+
64  *
+
65  * @returns success/status of the call.
+
66  */
+
67  virtual Status getAvailableEventTypes(std::vector<EventType>* types) const = 0;
+
68 
+
69  /**
+
70  * Creates an event queue for events of the given type(s)
+
71  * @param[in] eventTypes The list of event types for the queue.
+
72  * @param[out] status An optional pointer to return success/status.
+
73  *
+
74  * @returns the new EventQueue object, or NULL on failure.
+
75  */
+
76  virtual EventQueue* createEventQueue(const std::vector<EventType>& eventTypes,
+
77  Status* status = NULL) = 0;
+
78 
+
79  /**
+
80  * Waits for and transfers any pending events from the provider to the
+
81  * provided queues.
+
82  *
+
83  * Ownership of all events transfered to a queue will be passed from the
+
84  * provider to the queue, and these event object pointers will remain
+
85  * valid until the queue is destroyed or until the next call to this
+
86  * function with that queue. In other words, any events in a queue will be
+
87  * destroyed when the queue is provided to another call of this function,
+
88  * regardless of whether or not it receives any new events, or when the
+
89  * queue is destroyed.
+
90  *
+
91  * If more than one given queue accepts events of the same type, only the
+
92  * first of these queues will receive events of that type.
+
93  *
+
94  * Any events that are not copied to queues by this function are left in
+
95  * the provider until they are queried using a queue receiving events of
+
96  * that type.
+
97  *
+
98  * If there are no pending events of the requested types at the time this
+
99  * function is called, it will block until one is available or a timeout
+
100  * occurs.
+
101  *
+
102  * @param[in] queues The list of queues to transfer events to.
+
103  * @param[in] timeout The maximum time (in nanoseconds) to wait for new events.
+
104  *
+
105  * @returns success/status of the call.
+
106  */
+
107  virtual Status waitForEvents(const std::vector<EventQueue*>& queues,
+
108  uint64_t timeout = TIMEOUT_INFINITE) = 0;
+
109 
+
110  /**
+
111  * Variant of waitForEvents() that waits for only one EventQueue.
+
112  */
+
113  virtual Status waitForEvents(EventQueue* queue,
+
114  uint64_t timeout = TIMEOUT_INFINITE) = 0;
+
115 
+
116 protected:
+ +
118 };
+
119 
+
120 } // namespace Argus
+
121 
+
122 #endif // _ARGUS_EVENT_PROVIDER_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/EventQueue_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/EventQueue_8h.html new file mode 100644 index 0000000..94c3b22 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/EventQueue_8h.html @@ -0,0 +1,130 @@ + + + + + +Libargus API: include/Argus/EventQueue.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
EventQueue.h File Reference
+
+
+ +

Libargus API: Event Queue API +More...

+ +

Go to the source code of this file.

+ + + + + +

+Classes

class  Argus::EventQueue
class  Argus::IEventQueue
 Interface to the core EventQueue methods. More...
+ + +

+Namespaces

namespace  Argus
+ + +

+Functions

 Argus::DEFINE_UUID (InterfaceID, IID_EVENT_QUEUE, 944b11f6, e512, 49ad, 8573, fc, 82, 3e, 02, 25, ed)
+

Detailed Description

+

Libargus API: Event Queue API

+

Description: Defines the EventQueue object and interface.

+ +

Definition in file EventQueue.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/EventQueue_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/EventQueue_8h_source.html new file mode 100644 index 0000000..a52312b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/EventQueue_8h_source.html @@ -0,0 +1,205 @@ + + + + + +Libargus API: include/Argus/EventQueue.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
EventQueue.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Event Queue API</b>
+
32  *
+
33  * @b Description: Defines the EventQueue object and interface.
+
34  */
+
35 
+
36 #ifndef _ARGUS_EVENT_QUEUE_H
+
37 #define _ARGUS_EVENT_QUEUE_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Object to receive and expose Events from an IEventProvider.
+
44  *
+
45  * @see IEventProvider::createEventQueue.
+
46  *
+
47  * @defgroup ArgusEventQueue EventQueue
+
48  * @ingroup ArgusObjects
+
49  */
+ +
51 {
+
52 protected:
+ +
54 };
+
55 
+
56 /**
+
57  * @class IEventQueue
+
58  *
+
59  * Interface to the core EventQueue methods.
+
60  *
+
61  * @ingroup ArgusEventQueue
+
62  */
+
63 DEFINE_UUID(InterfaceID, IID_EVENT_QUEUE, 944b11f6,e512,49ad,8573,fc,82,3e,02,25,ed);
+
64 class IEventQueue : public Interface
+
65 {
+
66 public:
+
67  static const InterfaceID& id() { return IID_EVENT_QUEUE; }
+
68 
+
69  /**
+
70  * Returns the event types that this queue will receive.
+
71  * @param[out] types This vector will be populated with the event types
+
72  * registered to this queue.
+
73  *
+
74  * @returns success/status of the call.
+
75  */
+
76  virtual Status getEventTypes(std::vector<EventType>* types) const = 0;
+
77 
+
78  /**
+
79  * Returns the next event in the queue (that is, the event at index 0). The returned
+
80  * event will be removed from the queue, though the object will remain valid
+
81  * according to the rules described by waitForEvents().
+
82  * If the queue is empty, returns NULL.
+
83  */
+
84  virtual const Event* getNextEvent() = 0;
+
85 
+
86  /**
+
87  * Returns the number of events in the queue.
+
88  */
+
89  virtual uint32_t getSize() const = 0;
+
90 
+
91  /**
+
92  * Returns the event with the given index, where index 0 corresponds to the oldest
+
93  * event and [getSize() - 1] is the newest. The returned event is not removed
+
94  * from the queue. If index is not in [0, getSize()-1], NULL is returned.
+
95  */
+
96  virtual const Event* getEvent(uint32_t index) const = 0;
+
97 
+
98 protected:
+ +
100 };
+
101 
+
102 } // namespace Argus
+
103 
+
104 #endif // _ARGUS_EVENT_QUEUE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Event_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/Event_8h.html new file mode 100644 index 0000000..896852e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Event_8h.html @@ -0,0 +1,141 @@ + + + + + +Libargus API: include/Argus/Event.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Event.h File Reference
+
+
+ +

Libargus API: Event API +More...

+ +

Go to the source code of this file.

+ + + + + + + + + + + +

+Classes

class  Argus::Event
class  Argus::EventType
 A unique identifier for a particular type of Event. More...
class  Argus::IEvent
 Interface to the common Event properties. More...
class  Argus::IEventError
 Interface exposed by Events having type EVENT_TYPE_ERROR. More...
class  Argus::IEventCaptureComplete
 Interface exposed by Events having type EVENT_TYPE_CAPTURE_COMPLETE. More...
+ + +

+Namespaces

namespace  Argus
+ + + + + + + +

+Functions

 Argus::DEFINE_UUID (EventType, EVENT_TYPE_ERROR, 2c80d8b0, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (EventType, EVENT_TYPE_CAPTURE_STARTED, 2c80d8b1, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (EventType, EVENT_TYPE_CAPTURE_COMPLETE, 2c80d8b2, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (InterfaceID, IID_EVENT, 98bcb49e, fd7d, 11e4, a322, 16, 97, f9, 25, ec, 7b)
 Argus::DEFINE_UUID (InterfaceID, IID_EVENT_ERROR, 13e0fc70, 1ab6, 11e5, b939, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (InterfaceID, IID_EVENT_CAPTURE_COMPLETE, 8b2b40b5, f1e4, 4c4d, ae1c, f3, 93, f6, 54, 06, d5)
+

Detailed Description

+

Libargus API: Event API

+

Description: Defines the Event objects and interfaces.

+ +

Definition in file Event.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Event_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/Event_8h_source.html new file mode 100644 index 0000000..0045319 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Event_8h_source.html @@ -0,0 +1,298 @@ + + + + + +Libargus API: include/Argus/Event.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Event.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Event API</b>
+
32  *
+
33  * @b Description: Defines the Event objects and interfaces.
+
34  */
+
35 
+
36 #ifndef _ARGUS_EVENT_H
+
37 #define _ARGUS_EVENT_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Container representing a single event.
+
44  *
+
45  * Every Event will have a single EventType and will expose one or more
+
46  * interfaces, with the core IEvent interface being mandatory.
+
47  *
+
48  * @defgroup ArgusEvent Event
+
49  * @ingroup ArgusObjects
+
50  */
+
51 class Event : public InterfaceProvider
+
52 {
+
53 protected:
+
54  ~Event() {}
+
55 };
+
56 
+
57 /**
+
58  * A unique identifier for a particular type of Event.
+
59  *
+
60  * @ingroup ArgusEvent
+
61  */
+
62 class EventType : public NamedUUID
+
63 {
+
64 public:
+
65  EventType(uint32_t time_low_
+
66  , uint16_t time_mid_
+
67  , uint16_t time_hi_and_version_
+
68  , uint16_t clock_seq_
+
69  , uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5
+
70  , const char* name)
+
71  : NamedUUID(time_low_, time_mid_, time_hi_and_version_, clock_seq_,
+
72  c0, c1, c2, c3, c4, c5, name)
+
73  {}
+
74 
+ +
76  : NamedUUID(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "EVENT_TYPE_UNSPECIFIED")
+
77  {}
+
78 };
+
79 
+
80 
+
81 /*
+
82  * Core Event types
+
83  */
+
84 
+
85 /**
+
86  * Event type used to report an error.
+
87  *
+
88  * @defgroup ArgusEventError Error Event
+
89  * @ingroup ArgusEvent
+
90  */
+
91 DEFINE_UUID(EventType, EVENT_TYPE_ERROR, 2c80d8b0,2bfd,11e5,a2cb,08,00,20,0c,9a,66);
+
92 
+
93 /**
+
94  * Event type used to report when a capture starts.
+
95  *
+
96  * @defgroup ArgusEventCaptureStarted CaptureStarted Event
+
97  * @ingroup ArgusEvent
+
98  */
+
99 DEFINE_UUID(EventType, EVENT_TYPE_CAPTURE_STARTED, 2c80d8b1,2bfd,11e5,a2cb,08,00,20,0c,9a,66);
+
100 
+
101 /**
+
102  * Event type used to report when all capture processing has completed.
+
103  *
+
104  * @defgroup ArgusEventCaptureComplete CaptureComplete Event
+
105  * @ingroup ArgusEvent
+
106  */
+
107 DEFINE_UUID(EventType, EVENT_TYPE_CAPTURE_COMPLETE, 2c80d8b2,2bfd,11e5,a2cb,08,00,20,0c,9a,66);
+
108 
+
109 
+
110 /**
+
111  * @class IEvent
+
112  *
+
113  * Interface to the common Event properties.
+
114  *
+
115  * @ingroup ArgusEvent
+
116  */
+
117 DEFINE_UUID(InterfaceID, IID_EVENT, 98bcb49e,fd7d,11e4,a322,16,97,f9,25,ec,7b);
+
118 class IEvent : public Interface
+
119 {
+
120 public:
+
121  static const InterfaceID& id() { return IID_EVENT; }
+
122 
+
123  /**
+
124  * Returns the event type.
+
125  */
+
126  virtual EventType getEventType() const = 0;
+
127 
+
128  /**
+
129  * Returns the time of the event, in nanoseconds.
+
130  */
+
131  virtual uint64_t getTime() const = 0;
+
132 
+
133  /**
+
134  * Returns the capture id for the event.
+
135  */
+
136  virtual uint32_t getCaptureId() const = 0;
+
137 
+
138 protected:
+
139  ~IEvent() {}
+
140 };
+
141 
+
142 /**
+
143  * @class IEventError
+
144  *
+
145  * Interface exposed by Events having type EVENT_TYPE_ERROR.
+
146  *
+
147  * @ingroup ArgusEventError
+
148  */
+
149 DEFINE_UUID(InterfaceID, IID_EVENT_ERROR, 13e0fc70,1ab6,11e5,b939,08,00,20,0c,9a,66);
+
150 class IEventError : public Interface
+
151 {
+
152 public:
+
153  static const InterfaceID& id() { return IID_EVENT_ERROR; }
+
154 
+
155  /**
+
156  * Returns the Status value describing the error.
+
157  */
+
158  virtual Status getStatus() const = 0;
+
159 
+
160 protected:
+ +
162 };
+
163 
+
164 /**
+
165  * @class IEventCaptureComplete
+
166  *
+
167  * Interface exposed by Events having type EVENT_TYPE_CAPTURE_COMPLETE
+
168  *
+
169  * @ingroup ArgusEventCaptureComplete
+
170  */
+
171 DEFINE_UUID(InterfaceID, IID_EVENT_CAPTURE_COMPLETE, 8b2b40b5,f1e4,4c4d,ae1c,f3,93,f6,54,06,d5);
+ +
173 {
+
174 public:
+
175  static const InterfaceID& id() { return IID_EVENT_CAPTURE_COMPLETE; }
+
176 
+
177  /**
+
178  * Returns all dynamic metadata associated with this capture.
+
179  * The lifetime of the returned pointer is equivalent to the lifetime of this event.
+
180  * NULL may be returned if no metadata is available because the
+
181  * capture failed or was aborted.
+
182  */
+
183  virtual const CaptureMetadata* getMetadata() const = 0;
+
184 
+
185  /**
+
186  * Returns the error status of the metadata event.
+
187  * If this value is not STATUS_OK, getMetadata() will return NULL.
+
188  */
+
189  virtual Status getStatus() const = 0;
+
190 
+
191 protected:
+ +
193 };
+
194 
+
195 } // namespace Argus
+
196 
+
197 #endif // _ARGUS_EVENT_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/FaceDetect_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/FaceDetect_8h.html new file mode 100644 index 0000000..e3a5547 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/FaceDetect_8h.html @@ -0,0 +1,140 @@ + + + + + +Libargus API: include/Argus/Ext/FaceDetect.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
FaceDetect.h File Reference
+
+
+ +

Libargus Extension: Face Detect API +More...

+ +

Go to the source code of this file.

+ + + + + + + + + + +

+Classes

class  Argus::Ext::IFaceDetectCaps
 Interface to expose the face detection capabilities of a CaptureSession. More...
class  Argus::Ext::IFaceDetectSettings
 Interface to face detection settings. More...
class  Argus::Ext::IFaceDetectMetadata
 Interface to overall face detection results metadata. More...
class  Argus::Ext::IFaceDetectResult
 Interface to the properties of a single face detection result. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + + + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_FACE_DETECT, 40412bb0, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_FACE_DETECT_CAPS, 40412bb0, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_FACE_DETECT_SETTINGS, 40412bb1, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_FACE_DETECT_METADATA, 40412bb2, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_FACE_DETECT_RESULT, 40412bb3, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus Extension: Face Detect API

+

Description: This file defines the FaceDetect extension.

+ +

Definition in file FaceDetect.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/FaceDetect_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/FaceDetect_8h_source.html new file mode 100644 index 0000000..b14fe98 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/FaceDetect_8h_source.html @@ -0,0 +1,278 @@ + + + + + +Libargus API: include/Argus/Ext/FaceDetect.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
FaceDetect.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Face Detect API</b>
+
32  *
+
33  * @b Description: This file defines the FaceDetect extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_FACE_DETECT_H
+
37 #define _ARGUS_FACE_DETECT_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Adds internal face-detection algorithms. It introduces four new interfaces:
+
44  * - Ext::IFaceDetectCaps; exposes the face detection capabilities of a CaptureSession.
+
45  * - Ext::IFaceDetectSettings; enables face detection for a Request.
+
46  * - Ext::IFaceDetectMetadata; returns a list of FaceDetectResult objects from a
+
47  * completed capture's CaptureMetadata.
+
48  * - Ext::IFaceDetectResult; exposes the image rect and confidence level of a result object
+
49  * returned by getFaceDetectResults.
+
50  *
+
51  * @defgroup ArgusExtFaceDetect Ext::FaceDetect
+
52  * @ingroup ArgusExtensions
+
53  */
+
54 DEFINE_UUID(ExtensionName, EXT_FACE_DETECT, 40412bb0,ba24,11e5,a837,08,00,20,0c,9a,66);
+
55 
+
56 namespace Ext
+
57 {
+
58 
+
59 /**
+
60  * @class IFaceDetectCaps
+
61  *
+
62  * Interface to expose the face detection capabilities of a CaptureSession.
+
63  *
+
64  * @ingroup ArgusCaptureSession ArgusExtFaceDetect
+
65  */
+
66 DEFINE_UUID(InterfaceID, IID_FACE_DETECT_CAPS, 40412bb0,ba24,11e5,a837,08,00,20,0c,9a,66);
+
67 class IFaceDetectCaps : public Interface
+
68 {
+
69 public:
+
70  static const InterfaceID& id() { return IID_FACE_DETECT_CAPS; }
+
71 
+
72  /**
+
73  * Returns the maximum number of faces that can be detected by the face detection
+
74  * algorithm per request. Returned value must be >= 1.
+
75  */
+
76  virtual uint32_t getMaxFaceDetectResults() const = 0;
+
77 
+
78 protected:
+ +
80 };
+
81 
+
82 /**
+
83  * @class IFaceDetectSettings
+
84  *
+
85  * Interface to face detection settings.
+
86  *
+
87  * @ingroup ArgusRequest ArgusExtFaceDetect
+
88  */
+
89 DEFINE_UUID(InterfaceID, IID_FACE_DETECT_SETTINGS, 40412bb1,ba24,11e5,a837,08,00,20,0c,9a,66);
+ +
91 {
+
92 public:
+
93  static const InterfaceID& id() { return IID_FACE_DETECT_SETTINGS; }
+
94 
+
95  /**
+
96  * Enables or disables face detection. When face detection is enabled the CaptureMetadata
+
97  * returned by completed captures will expose the IFaceDetectMetadata interface and the
+
98  * FaceDetectResults returned by this interface will expose the IFaceDetectResults interface.
+
99  * @param[in] enable whether or not face detection is enabled.
+
100  */
+
101  virtual void setFaceDetectEnable(bool enable) = 0;
+
102 
+
103  /**
+
104  * @returns whether or not face detection is enabled.
+
105  */
+
106  virtual bool getFaceDetectEnable() const = 0;
+
107 
+
108 protected:
+ +
110 };
+
111 
+
112 /**
+
113  * @class IFaceDetectMetadata
+
114  *
+
115  * Interface to overall face detection results metadata.
+
116  *
+
117  * @ingroup ArgusCaptureMetadata ArgusExtFaceDetect
+
118  *
+
119  * @defgroup ArgusFaceDetectResult FaceDetectResult
+
120  * Metadata for a single face detection result, returned by
+
121  * Ext::IFaceDetectMetadata::getFaceDetectResults
+
122  * @ingroup ArgusCaptureMetadata
+
123  */
+
124 DEFINE_UUID(InterfaceID, IID_FACE_DETECT_METADATA, 40412bb2,ba24,11e5,a837,08,00,20,0c,9a,66);
+ +
126 {
+
127 public:
+
128  static const InterfaceID& id() { return IID_FACE_DETECT_METADATA; }
+
129 
+
130  /**
+
131  * @returns the face detection results.
+
132  * @param[out] results A vector that will be populated with the face detect results.
+
133  *
+
134  * @returns success/status of the call.
+
135  */
+
136  virtual Status getFaceDetectResults(std::vector<InterfaceProvider*>* results) const = 0;
+
137 
+
138 protected:
+ +
140 };
+
141 
+
142 /**
+
143  * @class IFaceDetectResult
+
144  *
+
145  * Interface to the properties of a single face detection result.
+
146  *
+
147  * @ingroup ArgusFaceDetectResult ArgusExtFaceDetect
+
148  */
+
149 DEFINE_UUID(InterfaceID, IID_FACE_DETECT_RESULT, 40412bb3,ba24,11e5,a837,08,00,20,0c,9a,66);
+ +
151 {
+
152 public:
+
153  static const InterfaceID& id() { return IID_FACE_DETECT_RESULT; }
+
154 
+
155  /**
+
156  * @returns the normlized coordinates of the region containing the face, relative
+
157  * to the uncropped image sensor mode size.
+
158  */
+
159  virtual Rectangle<float> getRect() const = 0;
+
160 
+
161  /**
+
162  * @returns the confidence level of the result. This confidence is in the range
+
163  * [0, 1], where 1 is the highest confidence. For a typical application that
+
164  * highlights faces in a scene, filtering results to ignore those with a
+
165  * confidence less than 0.5 is suggested.
+
166  */
+
167  virtual float getConfidence() const = 0;
+
168 
+
169 protected:
+ +
171 };
+
172 
+
173 } // namespace Ext
+
174 
+
175 } // namespace Argus
+
176 
+
177 #endif // _ARGUS_FACE_DETECT_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/InternalFrameCount_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/InternalFrameCount_8h.html new file mode 100644 index 0000000..aa048e2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/InternalFrameCount_8h.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/Ext/InternalFrameCount.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
InternalFrameCount.h File Reference
+
+
+ +

Libargus Extension: Internal Frame Count +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::IInternalFrameCount
 Interface used to query the internal frame count for a request. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_INTERNAL_FRAME_COUNT, 37afdbda, 0020, 4f91, 957b, 46, ea, eb, 79, 80, c7)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_INTERNAL_FRAME_COUNT, c21a7ba2, 2b3f, 4275, 8469, a2, 56, 34, 93, 53, 93)
+

Detailed Description

+

Libargus Extension: Internal Frame Count

+

Description: This file defines the InternalFrameCount extension.

+ +

Definition in file InternalFrameCount.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/InternalFrameCount_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/InternalFrameCount_8h_source.html new file mode 100644 index 0000000..dc5d5ac --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/InternalFrameCount_8h_source.html @@ -0,0 +1,223 @@ + + + + + +Libargus API: include/Argus/Ext/InternalFrameCount.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
InternalFrameCount.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Internal Frame Count</b>
+
32  *
+
33  * @b Description: This file defines the InternalFrameCount extension.
+
34  * @ingroup ArgusExtInternalFrameCount
+
35  */
+
36 
+
37 #ifndef _ARGUS_INTERNAL_FRAME_COUNT_H
+
38 #define _ARGUS_INTERNAL_FRAME_COUNT_H
+
39 
+
40 namespace Argus
+
41 {
+
42 
+
43 /**
+
44  * Adds accessors for an internal frame count performance metric.
+
45  * The "internal frame count" is an implementation-dependent metric that may be
+
46  * used to detect performance issues and producer frame drops for libargus
+
47  * implementations that make use of internal captures.
+
48  *
+
49  * When a device is opened by a CaptureSession, the libargus implementation may
+
50  * begin to immediately capture and process frames from the device in order to
+
51  * initialize the camera subsystem even before a client request has been
+
52  * submitted. Similarly, frames may be captured and processed by the
+
53  * implementation when the client is idle or not ready for output in order to
+
54  * maintain the driver subsystem and/or auto-control state (exposure, white
+
55  * balance, etc). These captures are started and processed entirely within the
+
56  * libargus implementation, with no inputs from or outputs to the client
+
57  * application, and so are referred to as "internal" captures. These internal
+
58  * captures are typically submitted when there are no client requests in the
+
59  * capture queue or no stream buffers available for output within a sensor
+
60  * frame period, and so knowing when an internal capture has been submitted can
+
61  * be used to detect application or performance issues in cases where these
+
62  * conditions are not expected to occur. This extension provides this
+
63  * information in the form of an "internal frame count", which is the total
+
64  * number of captures submitted by the session including both the internal
+
65  * captures as well as client-submitted requests. If an internal frame count
+
66  * gap appears between two client-submitted captures, this means that one or
+
67  * more internal captures have been performed.
+
68  *
+
69  * When an application is saturating the capture queue to maintain driver
+
70  * efficiency, either manually or by using repeat capture requests, the
+
71  * internal frame count can be used to detect when internal captures are
+
72  * submitted due to a lack of available output stream buffers. This situation
+
73  * leads to sensor frames that are not output to the client's output stream,
+
74  * which is usually an undesirable behavior that is referred to as "producer
+
75  * frame drop". This is generally caused by a high consumer processing time,
+
76  * which starves the stream’s available buffer pool, and can often be resolved
+
77  * by decreasing the consumer processing time (reducing the time a buffer is
+
78  * acquired, decreasing system load, increasing hardware clocks, etc.)
+
79  *
+
80  * @defgroup ArgusExtInternalFrameCount Ext::InternalFrameCount
+
81  * @ingroup ArgusExtensions
+
82  */
+
83 DEFINE_UUID(ExtensionName, EXT_INTERNAL_FRAME_COUNT, 37afdbda,0020,4f91,957b,46,ea,eb,79,80,c7);
+
84 
+
85 namespace Ext
+
86 {
+
87 
+
88 /**
+
89  * @class IInternalFrameCount
+
90  *
+
91  * Interface used to query the internal frame count for a request.
+
92  *
+
93  * Since internal captures do not generate events, detecting internal captures
+
94  * must be done by comparing the internal capture count of successive client-
+
95  * submitted capture requests.
+
96  *
+
97  * This interface is available from:
+
98  * - CaptureMetadata objects.
+
99  * - Event objects of type EVENT_TYPE_CAPTURE_STARTED.
+
100  *
+
101  * @ingroup ArgusCaptureMetadata ArgusEventCaptureStarted ArgusExtInternalFrameCount
+
102  */
+
103 DEFINE_UUID(InterfaceID, IID_INTERNAL_FRAME_COUNT, c21a7ba2,2b3f,4275,8469,a2,56,34,93,53,93);
+ +
105 {
+
106 public:
+
107  static const InterfaceID& id() { return IID_INTERNAL_FRAME_COUNT; }
+
108 
+
109  /**
+
110  * Returns the internal frame count for the request.
+
111  */
+
112  virtual uint64_t getInternalFrameCount() const = 0;
+
113 
+
114 protected:
+ +
116 };
+
117 
+
118 } // namespace Ext
+
119 
+
120 } // namespace Argus
+
121 
+
122 #endif
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/NonLinearHistogram_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/NonLinearHistogram_8h.html new file mode 100644 index 0000000..d500b34 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/NonLinearHistogram_8h.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/Ext/NonLinearHistogram.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
NonLinearHistogram.h File Reference
+
+
+ +

Libargus Extension: Non Linear Histogram +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::INonLinearHistogram
 Interface used to query the metadata to correctly interpret the compressed histogram data. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_NON_LINEAR_HISTOGRAM, 45b6a850, e801, 11e8, b568, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_NON_LINEAR_HISTOGRAM, 6e337ec0, e801, 11e8, b568, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus Extension: Non Linear Histogram

+

Description: This file defines the Non Linear Histogram extension, and provide methods to interpret non linear data in case of compressed data

+ +

Definition in file NonLinearHistogram.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/NonLinearHistogram_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/NonLinearHistogram_8h_source.html new file mode 100644 index 0000000..fe26365 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/NonLinearHistogram_8h_source.html @@ -0,0 +1,208 @@ + + + + + +Libargus API: include/Argus/Ext/NonLinearHistogram.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
NonLinearHistogram.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Non Linear Histogram</b>
+
32  *
+
33  * @b Description: This file defines the Non Linear Histogram extension, and provide
+
34  * methods to interpret non linear data in case of compressed data
+
35  */
+
36 
+
37 #ifndef _ARGUS_NON_LINEAR_HISTOGRAM_H
+
38 #define _ARGUS_NON_LINEAR_HISTOGRAM_H
+
39 
+
40 namespace Argus
+
41 {
+
42 
+
43 /**
+
44  * This adds a method to interpret the compressed histogram data correctly
+
45  * It introduces one new interface:
+
46  * - Ext::INonLinearHistogram: returns a list of normalized bin indices that map bins from
+
47  * getHistogram() to compressed pixel values.
+
48  * @defgroup ArgusExtNonLinearHistogram Ext::NonLinearHistogram
+
49  * @ingroup ArgusExtensions
+
50  */
+
51 DEFINE_UUID(ExtensionName, EXT_NON_LINEAR_HISTOGRAM, 45b6a850,e801,11e8,b568,08,00,20,0c,9a,66);
+
52 
+
53 namespace Ext
+
54 {
+
55 
+
56 /**
+
57  * @class INonLinearHistogram
+
58  *
+
59  * Interface used to query the metadata to correctly interpret the compressed histogram data.
+
60  * Returns the normalized bin values to correctly interpret the compressed bayer histogram
+
61  * data. This interface will only be exposed in case the histogram is compressed.
+
62  *
+
63  * This interface is available from:
+
64  * - Histogram child objects returned by ICaptureMetadata::getBayerHistogram()
+
65  *
+
66  * @ingroup ArgusCaptureMetadata ArgusExtNonLinearHistogram
+
67  */
+
68 DEFINE_UUID(InterfaceID, IID_NON_LINEAR_HISTOGRAM, 6e337ec0,e801,11e8,b568,08,00,20,0c,9a,66);
+ +
70 {
+
71 public:
+
72  static const InterfaceID& id() { return IID_NON_LINEAR_HISTOGRAM; }
+
73 
+
74  /**
+
75  * Returns the average bayer values of bins for bayer histogram data.
+
76  *
+
77  * @param[out] binValues Returns the normalized average bin values (float in [0,1]) for
+
78  * bins provided by IBayerHistogram interface.
+
79  * In case the histogram data provided by IBayerHistogram::getHistogram()
+
80  * is non-linear, this method will return a vector having the same size as
+
81  * histogram (i.e. IBayerHistogram::getBinCount()), and will contain
+
82  * normalized bayer colour values to which the histogram bin of the same
+
83  * index corresponds.
+
84  *
+
85  * For Example, in case of Non Linear Histogram
+
86  *
+
87  * IBayerHistogram->getHistogram(&histogram);
+
88  * INonLinearHistogram->getBinValues(&values);
+
89  *
+
90  * for(int i = 0 ; i < histogram.size() ; i++)
+
91  * {
+
92  * cout<<" bin: " << i
+
93  * <<" normalized bin Value: " << values[i]
+
94  * <<" frequency: " << histogram[i];
+
95  * }
+
96  */
+
97  virtual Status getHistogramBinValues(std::vector< BayerTuple<float> >* binValues) const = 0;
+
98 
+
99 protected:
+ +
101 };
+
102 
+
103 } // namespace Ext
+
104 
+
105 } // namespace Argus
+
106 
+
107 #endif // _ARGUS_NON_LINEAR_HISTOGRAM_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/PwlWdrSensorMode_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/PwlWdrSensorMode_8h.html new file mode 100644 index 0000000..90fa5b1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/PwlWdrSensorMode_8h.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/Ext/PwlWdrSensorMode.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
PwlWdrSensorMode.h File Reference
+
+
+ +

Libargus Extension: Piecewise Linear Compression for WDR Sensor Modes +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::IPwlWdrSensorMode
 Interface to the properties of a PWL WDR device. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_PWL_WDR_SENSOR_MODE, 7f510b90, 582b, 11e6, bbb5, 40, 16, 7e, ab, 86, 92)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_PWL_WDR_SENSOR_MODE, 7f5acea0, 582b, 11e6, 9414, 40, 16, 7e, ab, 86, 92)
+

Detailed Description

+

Libargus Extension: Piecewise Linear Compression for WDR Sensor Modes

+

Description: Adds extra functionalities for the Piecewise Linear (PWL) compressed Wide Dynamic Range (WDR) sensor mode type.

+ +

Definition in file PwlWdrSensorMode.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/PwlWdrSensorMode_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/PwlWdrSensorMode_8h_source.html new file mode 100644 index 0000000..1e31c0e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/PwlWdrSensorMode_8h_source.html @@ -0,0 +1,211 @@ + + + + + +Libargus API: include/Argus/Ext/PwlWdrSensorMode.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
PwlWdrSensorMode.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Piecewise Linear Compression for WDR Sensor Modes</b>
+
32  *
+
33  * @b Description: Adds extra functionalities for the
+
34  * Piecewise Linear (PWL) compressed Wide Dynamic Range (WDR) sensor mode type.
+
35  */
+
36 
+
37 #ifndef _ARGUS_EXT_PWL_WDR_SENSOR_MODE_H
+
38 #define _ARGUS_EXT_PWL_WDR_SENSOR_MODE_H
+
39 
+
40 namespace Argus
+
41 {
+
42 
+
43 /**
+
44  * Adds extra functionalities for the Piecewise Linear (PWL) Wide Dynamic
+
45  * Range (WDR) sensor mode type. It introduces one new interface:
+
46  * - Ext::IPwlWdrSensorMode; returns a list of normalized float coordinates (x,y) that define
+
47  * the PWL compression curve used in the PWL WDR mode. This PWL compression
+
48  * curve is used by the sensor to compress WDR pixel values before sending
+
49  * them over CSI. This is done to save bandwidth for data transmission over
+
50  * VI-CSI. The compression converts the WDR pixel values from InputBitDepth
+
51  * space to OutputBitDepth space.The coordinates of the PWL compression
+
52  * curve can be un-normalized by scaling x-axis and y-axis values
+
53  * by InputBitDepth and OutputBitDepth respectively. The Bit depths can be
+
54  * obtained by using the respective methods in the ISensorMode interface.
+
55  * @see ISensorMode
+
56  *
+
57  * @defgroup ArgusExtPwlWdrSensorMode Ext::PwlWdrSensorMode
+
58  * @ingroup ArgusExtensions
+
59  */
+
60 DEFINE_UUID(ExtensionName, EXT_PWL_WDR_SENSOR_MODE, 7f510b90,582b,11e6,bbb5,40,16,7e,ab,86,92);
+
61 
+
62 namespace Ext
+
63 {
+
64 
+
65 /**
+
66  * @class IPwlWdrSensorMode
+
67  *
+
68  * Interface to the properties of a PWL WDR device.
+
69  *
+
70  * Returns a list of normalized float coordinates (x,y) that define
+
71  * the Piecewise Linear (PWL) compression curve used in the PWL Wide Dynamic Range (WDR) mode.
+
72  * The coordinates are returned in a Point2D tuple. The coordinates
+
73  * can be un-normalized by scaling x-axis and y-axis values by InputBitDepth
+
74  * and OutputBitDepth respectively. The Bit depths can be obtained by using
+
75  * the respective methods in the ISensorMode interface.
+
76  * @see ISensorMode
+
77  *
+
78  * @ingroup ArgusSensorMode ArgusExtPwlWdrSensorMode
+
79  */
+
80 DEFINE_UUID(InterfaceID, IID_PWL_WDR_SENSOR_MODE, 7f5acea0,582b,11e6,9414,40,16,7e,ab,86,92);
+ +
82 {
+
83 public:
+
84  static const InterfaceID& id() { return IID_PWL_WDR_SENSOR_MODE; }
+
85 
+
86  /**
+
87  * Returns the number of control points coordinates in the Piecewise Linear compression
+
88  * curve.
+
89  */
+
90  virtual uint32_t getControlPointCount() const = 0;
+
91 
+
92  /**
+
93  * Returns the Piecewise Linear (PWL) compression curve coordinates.
+
94  *
+
95  * @param[out] points The output vector to store the PWL compression curve coordinates.
+
96  * Upon successful return, this vector will filled in with
+
97  * getControlPointCount() count values, each containing a coordinates of
+
98  * PWL compression curve within a Point2D tuple.
+
99  */
+
100  virtual Status getControlPoints(std::vector< Point2D<float> >* points) const = 0;
+
101 
+
102 protected:
+ +
104 };
+
105 
+
106 } // namespace Ext
+
107 
+
108 } // namespace Argus
+
109 
+
110 #endif // _ARGUS_EXT_PWL_WDR_SENSOR_MODE_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Request_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/Request_8h.html new file mode 100644 index 0000000..49bcbdd --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Request_8h.html @@ -0,0 +1,130 @@ + + + + + +Libargus API: include/Argus/Request.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Request.h File Reference
+
+
+ +

Libargus API: Request API +More...

+ +

Go to the source code of this file.

+ + + + + +

+Classes

class  Argus::Request
class  Argus::IRequest
 Interface to the core Request settings. More...
+ + +

+Namespaces

namespace  Argus
+ + +

+Functions

 Argus::DEFINE_UUID (InterfaceID, IID_REQUEST, eb9b3750, fc8d, 455f, 8e0f, 91, b3, 3b, d9, 4e, c5)
+

Detailed Description

+

Libargus API: Request API

+

Description: Defines the Request object and core IRequest interface.

+ +

Definition in file Request.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Request_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/Request_8h_source.html new file mode 100644 index 0000000..b478baa --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Request_8h_source.html @@ -0,0 +1,257 @@ + + + + + +Libargus API: include/Argus/Request.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Request.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Request API</b>
+
32  *
+
33  * @b Description: Defines the Request object and core IRequest interface.
+
34  */
+
35 
+
36 #ifndef _ARGUS_REQUEST_H
+
37 #define _ARGUS_REQUEST_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Container for all settings used by a single capture request.
+
44  *
+
45  * @defgroup ArgusRequest Request
+
46  * @ingroup ArgusObjects
+
47  */
+
48 class Request : public InterfaceProvider, public Destructable
+
49 {
+
50 protected:
+
51  ~Request() {}
+
52 };
+
53 
+
54 /**
+
55  * @class IRequest
+
56  *
+
57  * Interface to the core Request settings.
+
58  *
+
59  * @ingroup ArgusRequest
+
60  *
+
61  * @defgroup ArgusAutoControlSettings AutoControlSettings
+
62  * Child auto control settings, returned by IRequest::getAutoControlSettings
+
63  * @ingroup ArgusRequest
+
64  *
+
65  * @defgroup ArgusStreamSettings StreamSettings
+
66  * Child per-stream settings, returned by IRequest::getStreamSettings
+
67  * @ingroup ArgusRequest
+
68  *
+
69  * @defgroup ArgusSourceSettings SourceSettings
+
70  * Child source settings, returned by IRequest::getSourceSettings
+
71  * @ingroup ArgusRequest
+
72  */
+
73 DEFINE_UUID(InterfaceID, IID_REQUEST, eb9b3750,fc8d,455f,8e0f,91,b3,3b,d9,4e,c5);
+
74 class IRequest : public Interface
+
75 {
+
76 public:
+
77  static const InterfaceID& id() { return IID_REQUEST; }
+
78 
+
79  /**
+
80  * Enables the specified output stream.
+
81  * Captures made with this Request will produce output on that stream.
+
82  */
+
83  virtual Status enableOutputStream(OutputStream* stream) = 0;
+
84 
+
85  /**
+
86  * Disables the specified output stream.
+
87  */
+
88  virtual Status disableOutputStream(OutputStream* stream) = 0;
+
89 
+
90  /**
+
91  * Disables all output streams.
+
92  */
+
93  virtual Status clearOutputStreams() = 0;
+
94 
+
95  /**
+
96  * Returns all enabled output streams.
+
97  * @param[out] streams A vector that will be populated with the enabled streams.
+
98  *
+
99  * @returns success/status of the call.
+
100  */
+
101  virtual Status getOutputStreams(std::vector<OutputStream*>* streams) const = 0;
+
102 
+
103  /**
+
104  * Returns the Stream settings for a particular stream in the request.
+
105  * The returned object will have the same lifespan as this object,
+
106  * and expose the IStreamSettings interface.
+
107  * @param[in] stream The stream for which the settings are requested.
+
108  */
+
109  virtual InterfaceProvider* getStreamSettings(const OutputStream* stream) = 0;
+
110 
+
111  /**
+
112  * Returns the capture control settings for a given AC.
+
113  * The returned object will have the same lifespan as this object,
+
114  * and expose the IAutoControlSettings interface.
+
115  * @param[in] acId The id of the AC component for which the settings are requested.
+
116  * <b>(Currently unused)</b>
+
117  */
+
118  virtual InterfaceProvider* getAutoControlSettings(const AutoControlId acId = 0) = 0;
+
119 
+
120  /**
+
121  * Returns the source settings for the request.
+
122  * The returned object will have the same lifespan as this object,
+
123  * and expose the ISourceSettings interface.
+
124  */
+
125  virtual InterfaceProvider* getSourceSettings() = 0;
+
126 
+
127  /**
+
128  * Sets the client data for the request. This value is passed through to and queryable
+
129  * from the CaptureMetadata generated for any captures completed using this Request.
+
130  * Default value is 0.
+
131  * @param[in] data The client data.
+
132  */
+
133  virtual Status setClientData(uint32_t data) = 0;
+
134 
+
135  /**
+
136  * Gets the client data for the request.
+
137  */
+
138  virtual uint32_t getClientData() const = 0;
+
139 
+
140  /**
+
141  * Set this to false if o/p buffer is Bayer and ISP stage needs to be skipped
+
142  */
+
143  virtual Status setEnableIspStage(bool enableIspStage) = 0;
+
144 
+
145  /**
+
146  * Check if ISP stage is enabled/disabled.
+
147  */
+
148  virtual bool getEnableIspStage() const = 0;
+
149 
+
150 protected:
+ +
152 };
+
153 
+
154 } // namespace Argus
+
155 
+
156 #endif // _ARGUS_REQUEST_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SensorEepromData_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/SensorEepromData_8h.html new file mode 100644 index 0000000..7d24cf8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SensorEepromData_8h.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/Ext/SensorEepromData.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SensorEepromData.h File Reference
+
+
+ +

Libargus Extension: Sensor EEPROM data API +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::ISensorEepromData
 Interface used to get EEPROM data. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_SENSOR_EEPROM_DATA, d14b2030, 181a, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_SENSOR_EEPROM_DATA, 063062b0, 181b, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus Extension: Sensor EEPROM data API

+

Description: This file defines the SensorEepromData extension.

+ +

Definition in file SensorEepromData.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SensorEepromData_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/SensorEepromData_8h_source.html new file mode 100644 index 0000000..bc34cfd --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SensorEepromData_8h_source.html @@ -0,0 +1,192 @@ + + + + + +Libargus API: include/Argus/Ext/SensorEepromData.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SensorEepromData.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Sensor EEPROM data API</b>
+
32  *
+
33  * @b Description: This file defines the SensorEepromData extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_SENSOR_EEPROM_DATA_H
+
37 #define _ARGUS_SENSOR_EEPROM_DATA_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Adds a EEPROM interface to get EEPROM data.
+
44  * It introduces one new interface:
+
45  * - Ext::ISensorEepromData: Gets EEPROM data.
+
46  * @defgroup ArgusExtEepromData Ext::SensorEepromData
+
47  * @ingroup ArgusExtensions
+
48  */
+
49 DEFINE_UUID(ExtensionName, EXT_SENSOR_EEPROM_DATA, d14b2030,181a,11eb,8b6f,08,00,20,0c,9a,66);
+
50 
+
51 namespace Ext
+
52 {
+
53 
+
54 /**
+
55  * @class ISensorEepromData
+
56  *
+
57  * Interface used to get EEPROM data
+
58  *
+
59  * @ingroup ArgusCameraDevice ArgusExtSensorEepromData
+
60  */
+
61 DEFINE_UUID(InterfaceID, IID_SENSOR_EEPROM_DATA, 063062b0,181b,11eb,8b6f,08,00,20,0c,9a,66);
+ +
63 {
+
64 public:
+
65  static const InterfaceID& id() { return IID_SENSOR_EEPROM_DATA; }
+
66 
+
67  /**
+
68  * Returns the size of the EEPROM data.
+
69  */
+
70  virtual uint32_t getSensorEepromDataSize() const = 0;
+
71 
+
72  /**
+
73  * Copies back the EEPROM data to the provided memory location.
+
74  * If the size of @a dst is smaller than the total size of the EEPROM data, only the first
+
75  * bytes up to size are copied.
+
76  * @param [out] dst The pointer to the location where the data will be copied.
+
77  * The caller is responsible for allocating and managing the memory.
+
78  * @param [in] size The size of the destination.
+
79  */
+
80  virtual Status getSensorEepromData(void *dst, uint32_t size) const = 0;
+
81 
+
82 protected:
+ +
84 };
+
85 
+
86 } // namespace Ext
+
87 
+
88 } // namespace Argus
+
89 
+
90 #endif
+
91 
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SensorOtpData_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/SensorOtpData_8h.html new file mode 100644 index 0000000..6be01bf --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SensorOtpData_8h.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/Ext/SensorOtpData.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SensorOtpData.h File Reference
+
+
+ +

Libargus Extension: Sensor OTP data API +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::ISensorOtpData
 Interface used to get OTP data. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_SENSOR_OTP_DATA, 1651af90, 19b1, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_SENSOR_OTP_DATA, 3d125710, 19b1, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus Extension: Sensor OTP data API

+

Description: This file defines the SensorOtpData extension.

+ +

Definition in file SensorOtpData.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SensorOtpData_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/SensorOtpData_8h_source.html new file mode 100644 index 0000000..fc7d418 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SensorOtpData_8h_source.html @@ -0,0 +1,193 @@ + + + + + +Libargus API: include/Argus/Ext/SensorOtpData.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SensorOtpData.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Sensor OTP data API</b>
+
32  *
+
33  * @b Description: This file defines the SensorOtpData extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_SENSOR_OTP_DATA_H
+
37 #define _ARGUS_SENSOR_OTP_DATA_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Adds a OTP interface to get OTP data.
+
44  * It introduces one new interface:
+
45  * - Ext::ISensorOtpData: gets OTP data.
+
46  * @defgroup ArgusExtOtpData Ext::SensorOtpData
+
47  * @ingroup ArgusExtensions
+
48  */
+
49 DEFINE_UUID(ExtensionName, EXT_SENSOR_OTP_DATA, 1651af90,19b1,11eb,8b6f,08,00,20,0c,9a,66);
+
50 
+
51 namespace Ext
+
52 {
+
53 
+
54 /**
+
55  * @class ISensorOtpData
+
56  *
+
57  * Interface used to get OTP data
+
58  *
+
59  * @ingroup ArgusCameraDevice ArgusExtSensorOtpData
+
60  */
+
61 DEFINE_UUID(InterfaceID, IID_SENSOR_OTP_DATA, 3d125710,19b1,11eb,8b6f,08,00,20,0c,9a,66);
+
62 class ISensorOtpData : public Interface
+
63 {
+
64 public:
+
65  static const InterfaceID& id() { return IID_SENSOR_OTP_DATA; }
+
66 
+
67  /**
+
68  * Returns the size of the OTP data.
+
69  */
+
70  virtual uint32_t getSensorOtpDataSize() const = 0;
+
71 
+
72  /**
+
73  * Copies back the OTP data to the provided memory location.
+
74  * If the size of @a dst is smaller than the total size of the EEPROM data, only the first
+
75  * bytes up to size are copied.
+
76  * @param [out] dst The pointer to the location where the data will be copied.
+
77  * The caller is responsible for allocating and managing the memory.
+
78  * @param [in] size The size of the destination.
+
79  */
+
80  virtual Status getSensorOtpData(void *dst, uint32_t size) const = 0;
+
81 
+
82 protected:
+ +
84 };
+
85 
+
86 } // namespace Ext
+
87 
+
88 } // namespace Argus
+
89 
+
90 #endif
+
91 
+
92 
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadataClientBuffer_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadataClientBuffer_8h.html new file mode 100644 index 0000000..bf9a941 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadataClientBuffer_8h.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/Ext/SensorPrivateMetadataClientBuffer.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SensorPrivateMetadataClientBuffer.h File Reference
+
+
+ +

Libargus Extension: Sensor Private Metadata Client Buffer API +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::ISensorPrivateMetadataClientBufferRequest
 Interface used to set client buffer for sensor private metadata for a request. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER, 85cbb9b6, cd7f, 4e8c, 9462, 9f, 21, cd, a7, 40, 1c)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_REQUEST, 5c868b69, 42f5, 4ec9, 9b93, 44, 11, c9, 6c, 02, e4)
+

Detailed Description

+

Libargus Extension: Sensor Private Metadata Client Buffer API

+

Description: This file defines the SensorPrivateMetadataClientBuffer extension.

+ +

Definition in file SensorPrivateMetadataClientBuffer.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadataClientBuffer_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadataClientBuffer_8h_source.html new file mode 100644 index 0000000..2239c69 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadataClientBuffer_8h_source.html @@ -0,0 +1,197 @@ + + + + + +Libargus API: include/Argus/Ext/SensorPrivateMetadataClientBuffer.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SensorPrivateMetadataClientBuffer.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Sensor Private Metadata Client Buffer API</b>
+
32  *
+
33  * @b Description: This file defines the SensorPrivateMetadataClientBuffer extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_H
+
37 #define _ARGUS_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_H
+
38 
+
39 namespace Argus
+
40 {
+
41 /**
+
42  * Adds accessors for set client buffer for sensor embedded metadata. Sensor embeds private info
+
43  * (for example PDAF data) in sensor metadata. Client using Ext::SensorPrivateMetadata API
+
44  * to obtain this meta data involves several memcpy. When sensor metadata size is large,
+
45  * this will cause high CPU usage and affect camera performance.
+
46  * ISensorPrivateMetadataClientBufferRequest allow client to set a client buffer and Argus write
+
47  * to it directly without extra memcpy.
+
48  * This is only supported in single process mode as in client-server (multiprocess) mode, client
+
49  * and server are in different process and their own address space.
+
50  *
+
51  * - Ext::ISensorPrivateMetadataClientBufferRequest: Sets client buffer for private metadata.
+
52  *
+
53  * @defgroup ArgusExtSensorPrivateMetadataClientBuffer Ext::SensorPrivateMetadataClientBuffer
+
54  * @ingroup ArgusExtensions
+
55  */
+
56 DEFINE_UUID(ExtensionName, EXT_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER, 85cbb9b6,cd7f,4e8c,9462,9f,21,cd,a7,40,1c);
+
57 
+
58 namespace Ext
+
59 {
+
60 
+
61 /**
+
62  * @class ISensorPrivateMetadataClientBufferRequest
+
63  *
+
64  * Interface used to set client buffer for sensor private metadata for a request
+
65  *
+
66  * @ingroup ArgusRequest ArgusExtSensorPrivateMetadataClientBuffer
+
67  */
+
68 DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_REQUEST, 5c868b69,42f5,4ec9,9b93,44,11,c9,6c,02,e4);
+ +
70 {
+
71 public:
+
72  static const InterfaceID& id() { return IID_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_REQUEST; }
+
73 
+
74  /**
+
75  * Client allocate the metadata buffer and set the address of the buffer,
+
76  * Argus writes the sensor metadata directly to the buffer.
+
77  * This method is supported only in single process mode.
+
78  * @param[in] buf Specifies the address of client buffer.
+
79  * @param[in] size Specifies the size in bytes of the metadata buffer.
+
80  */
+
81  virtual Status setClientMetadataBuffer(void* buf, size_t size) = 0;
+
82 
+
83  /**
+
84  * Returns if client metadata buffer is used for this request.
+
85  */
+
86  virtual bool getClientMetadataBufferEnable() const = 0;
+
87 
+
88 protected:
+ +
90 };
+
91 
+
92 } // namespace Ext
+
93 
+
94 } // namespace Argus
+
95 
+
96 #endif // _ARGUS_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadata_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadata_8h.html new file mode 100644 index 0000000..bddff86 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadata_8h.html @@ -0,0 +1,137 @@ + + + + + +Libargus API: include/Argus/Ext/SensorPrivateMetadata.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SensorPrivateMetadata.h File Reference
+
+
+ +

Libargus Extension: Sensor Private Metadata API +More...

+ +

Go to the source code of this file.

+ + + + + + + + +

+Classes

class  Argus::Ext::ISensorPrivateMetadataCaps
 Interface used to query the availability and size in bytes of sensor private metadata. More...
class  Argus::Ext::ISensorPrivateMetadataRequest
 Interface used enable the output of sensor private metadata for a request. More...
class  Argus::Ext::ISensorPrivateMetadata
 Interface used to access sensor private metadata. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_SENSOR_PRIVATE_METADATA, 7acf4352, 3a75, 46e7, 9af1, 8d, 71, da, 83, 15, 23)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_SENSOR_PRIVATE_METADATA_CAPS, e492d2bf, 5285, 476e, 94c5, ee, 64, d5, 3d, 94, ef)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_SENSOR_PRIVATE_METADATA_REQUEST, 5c868b69, 42f5, 4ec9, 9b93, 44, 11, c9, 6c, 02, e3)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_SENSOR_PRIVATE_METADATA, 68cf6680, 70d7, 4b52, 9a99, 33, fb, 65, 81, a2, 61)
+

Detailed Description

+

Libargus Extension: Sensor Private Metadata API

+

Description: This file defines the SensorPrivateMetadata extension.

+ +

Definition in file SensorPrivateMetadata.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadata_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadata_8h_source.html new file mode 100644 index 0000000..8011555 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SensorPrivateMetadata_8h_source.html @@ -0,0 +1,246 @@ + + + + + +Libargus API: include/Argus/Ext/SensorPrivateMetadata.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SensorPrivateMetadata.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Sensor Private Metadata API</b>
+
32  *
+
33  * @b Description: This file defines the SensorPrivateMetadata extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_SENSOR_PRIVATE_METADATA_H
+
37 #define _ARGUS_SENSOR_PRIVATE_METADATA_H
+
38 
+
39 namespace Argus
+
40 {
+
41 /**
+
42  * Adds accessors for sensor embedded metadata. This data is metadata that the sensor embeds
+
43  * inside the frame, the type and formating of which depends on the sensor. It is up to the
+
44  * user to correctly parse the data based on the specifics of the sensor used.
+
45  *
+
46  * - Ext::ISensorPrivateMetadataCaps: Determines whether a device is capable of
+
47  * private metadata output.
+
48  * - Ext::ISensorPrivateMetadataRequest: Enables private metadata output from a capture request.
+
49  * - Ext::ISensorPrivateMetadata: Accesses the sensor private metadata.
+
50  *
+
51  * @defgroup ArgusExtSensorPrivateMetadata Ext::SensorPrivateMetadata
+
52  * @ingroup ArgusExtensions
+
53  */
+
54 DEFINE_UUID(ExtensionName, EXT_SENSOR_PRIVATE_METADATA, 7acf4352,3a75,46e7,9af1,8d,71,da,83,15,23);
+
55 
+
56 namespace Ext
+
57 {
+
58 
+
59 /**
+
60  * @class ISensorPrivateMetadataCaps
+
61  *
+
62  * Interface used to query the availability and size in bytes of sensor private metadata.
+
63  *
+
64  * @ingroup ArgusCameraDevice ArgusExtSensorPrivateMetadata
+
65  */
+
66 DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_CAPS, e492d2bf,5285,476e,94c5,ee,64,d5,3d,94,ef);
+ +
68 {
+
69 public:
+
70  static const InterfaceID& id() { return IID_SENSOR_PRIVATE_METADATA_CAPS; }
+
71 
+
72  /**
+
73  * Returns the size in bytes of the private metadata.
+
74  */
+
75  virtual size_t getMetadataSize() const = 0;
+
76 
+
77 protected:
+ +
79 };
+
80 
+
81 /**
+
82  * @class ISensorPrivateMetadataRequest
+
83  *
+
84  * Interface used enable the output of sensor private metadata for a request.
+
85  *
+
86  * @ingroup ArgusRequest ArgusExtSensorPrivateMetadata
+
87  */
+
88 DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_REQUEST, 5c868b69,42f5,4ec9,9b93,44,11,c9,6c,02,e3);
+ +
90 {
+
91 public:
+
92  static const InterfaceID& id() { return IID_SENSOR_PRIVATE_METADATA_REQUEST; }
+
93 
+
94  /**
+
95  * Enables the sensor private metadata, will only work if the sensor supports embedded metadata.
+
96  * @param[in] enable whether to output embedded metadata.
+
97  */
+
98  virtual void setMetadataEnable(bool enable) = 0;
+
99 
+
100  /**
+
101  * Returns if the metadata is enabled for this request.
+
102  */
+
103  virtual bool getMetadataEnable() const = 0;
+
104 
+
105 protected:
+ +
107 };
+
108 
+
109 /**
+
110  * @class ISensorPrivateMetadata
+
111  *
+
112  * Interface used to access sensor private metadata.
+
113  *
+
114  * @ingroup ArgusCaptureMetadata ArgusExtSensorPrivateMetadata
+
115  */
+
116 DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA, 68cf6680,70d7,4b52,9a99,33,fb,65,81,a2,61);
+ +
118 {
+
119 public:
+
120  static const InterfaceID& id() { return IID_SENSOR_PRIVATE_METADATA; }
+
121 
+
122  /**
+
123  * Returns the size of the embedded metadata.
+
124  */
+
125  virtual size_t getMetadataSize() const = 0;
+
126 
+
127  /**
+
128  * Copies back the metadata to the provided memory location.
+
129  * If the size of @a dst is smaller than the total size of the metadata, only the first
+
130  * bytes up to size are copied.
+
131  * @param [in,out] dst The pointer to the location where the data will be copied.
+
132  * The caller is responsible for allocating and managing the memory.
+
133  * @param [in] size The size of the destination.
+
134  */
+
135  virtual Status getMetadata(void *dst, size_t size) const = 0;
+
136 
+
137 protected:
+ +
139 };
+
140 
+
141 } // namespace Ext
+
142 
+
143 } // namespace Argus
+
144 
+
145 #endif // _ARGUS_SENSOR_PRIVATE_METADATA_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SensorTimestampTsc_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/SensorTimestampTsc_8h.html new file mode 100644 index 0000000..f10e353 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SensorTimestampTsc_8h.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/Ext/SensorTimestampTsc.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SensorTimestampTsc.h File Reference
+
+
+ +

Libargus Extension: TSC HW SensorTimestamp API +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::ISensorTimestampTsc
 Interface used to get TSC HW timestamp. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + +

+Functions

 Argus::DEFINE_UUID (ExtensionName, EXT_SENSOR_TIMESTAMP_TSC, e6cc1360, 06ea, 11eb, 8b6e, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_SENSOR_TIMESTAMP_TSC, 35581ba0, 06eb, 11eb, 8b6e, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus Extension: TSC HW SensorTimestamp API

+

Description: This file defines the SensorTimestampTsc extension.

+ +

Definition in file SensorTimestampTsc.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SensorTimestampTsc_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/SensorTimestampTsc_8h_source.html new file mode 100644 index 0000000..bdae051 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SensorTimestampTsc_8h_source.html @@ -0,0 +1,189 @@ + + + + + +Libargus API: include/Argus/Ext/SensorTimestampTsc.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SensorTimestampTsc.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: TSC HW SensorTimestamp API</b>
+
32  *
+
33  * @b Description: This file defines the SensorTimestampTsc extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_SENSOR_TIMESTAMP_TSC_H
+
37 #define _ARGUS_SENSOR_TIMESTAMP_TSC_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * Adds a timestamp interface to get TSC HW timestamp.
+
44  * It introduces one new interface:
+
45  * - Ext::ISensorTimestampTsc: gets TSC HW timestamp.
+
46  * @defgroup ArgusExtSensorTimestampTsc Ext::SensorTimestampTsc
+
47  * @ingroup ArgusExtensions
+
48  */
+
49 DEFINE_UUID(ExtensionName, EXT_SENSOR_TIMESTAMP_TSC, e6cc1360,06ea,11eb,8b6e,08,00,20,0c,9a,66);
+
50 
+
51 
+
52 namespace Ext
+
53 {
+
54 
+
55 /**
+
56  * @class ISensorTimestampTsc
+
57  *
+
58  * Interface used to get TSC HW timestamp
+
59  *
+
60  * @ingroup ArgusCaptureMetadata ArgusExtSensorTimestampTsc
+
61  */
+
62 DEFINE_UUID(InterfaceID, IID_SENSOR_TIMESTAMP_TSC, 35581ba0,06eb,11eb,8b6e,08,00,20,0c,9a,66);
+ +
64 {
+
65 public:
+
66  static const InterfaceID& id() { return IID_SENSOR_TIMESTAMP_TSC; }
+
67 
+
68  /**
+
69  * Returns the VI HW (SOF) timestamp based on tegra wide timestamp system counter (TSC)
+
70  * This is the start timestamp for the sensor (in nanoseconds).
+
71  */
+
72  virtual uint64_t getSensorSofTimestampTsc() const = 0;
+
73 
+
74  /**
+
75  * Returns the VI HW (EOF) timestamp based on tegra wide timestamp system counter (TSC)
+
76  * This is the end timestamp for the sensor (in nanoseconds).
+
77  */
+
78  virtual uint64_t getSensorEofTimestampTsc() const = 0;
+
79 
+
80 protected:
+ +
82 };
+
83 
+
84 } // namespace Ext
+
85 
+
86 } // namespace Argus
+
87 
+
88 #endif
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Settings_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/Settings_8h.html new file mode 100644 index 0000000..04b4a40 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Settings_8h.html @@ -0,0 +1,141 @@ + + + + + +Libargus API: include/Argus/Settings.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Settings.h File Reference
+
+
+ +

Libargus API: Settings API +More...

+ +

Go to the source code of this file.

+ + + + + + + + + + + + +

+Classes

class  Argus::ISourceSettings
 Interface to the source settings (provided by IRequest::getSourceSettings()). More...
class  Argus::IAutoControlSettings
 Interface to the auto control settings (provided by IRequest::getAutoControlSettings()). More...
class  Argus::IStreamSettings
 Interface to per-stream settings (provided by IRequest::getStreamSettings()). More...
class  Argus::IDenoiseSettings
 Interface to denoise settings. More...
class  Argus::IEdgeEnhanceSettings
 Interface to edge enhancement settings. More...
+ + +

+Namespaces

namespace  Argus
+ + + + + + +

+Functions

 Argus::DEFINE_UUID (InterfaceID, IID_SOURCE_SETTINGS, eb7ae38c, 3c62, 4161, a92a, a6, 4f, ba, c6, 38, 83)
 Argus::DEFINE_UUID (InterfaceID, IID_AUTO_CONTROL_SETTINGS, 1f2ad1c6, cb13, 440b, bc95, 3f, fd, 0d, 19, 91, db)
 Argus::DEFINE_UUID (InterfaceID, IID_STREAM_SETTINGS, c477aeaf, 9cc8, 4467, a834, c7, 07, d7, b6, 9f, a4)
 Argus::DEFINE_UUID (InterfaceID, IID_DENOISE_SETTINGS, 7A461D20, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (InterfaceID, IID_EDGE_ENHANCE_SETTINGS, 7A461D21, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
+

Detailed Description

+

Libargus API: Settings API

+

Description: This file defines the settings that control the sensor module.

+ +

Definition in file Settings.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Settings_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/Settings_8h_source.html new file mode 100644 index 0000000..83cd73c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Settings_8h_source.html @@ -0,0 +1,792 @@ + + + + + +Libargus API: include/Argus/Settings.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Settings.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2020, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Settings API</b>
+
32  *
+
33  * @b Description: This file defines the settings that control the sensor module.
+
34  */
+
35 
+
36 #ifndef _ARGUS_SETTINGS_H
+
37 #define _ARGUS_SETTINGS_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * @class ISourceSettings
+
44  *
+
45  * Interface to the source settings (provided by IRequest::getSourceSettings()).
+
46  *
+
47  * @ingroup ArgusSourceSettings
+
48  */
+
49 DEFINE_UUID(InterfaceID, IID_SOURCE_SETTINGS, eb7ae38c,3c62,4161,a92a,a6,4f,ba,c6,38,83);
+
50 class ISourceSettings : public Interface
+
51 {
+
52 public:
+
53  static const InterfaceID& id() { return IID_SOURCE_SETTINGS; }
+
54 
+
55  /**
+
56  * Sets the exposure time range of the source, in nanoseconds.
+
57  * If the exposure range is outside of the available range, the capture's exposure time
+
58  * will be as close as possible to the exposure range specified.
+
59  * @param[in] exposureTimeRange Exposure time range, in nanoseconds.
+
60  * @see ISensorMode::getExposureTimeRange()
+
61  * @todo Document implications of quantization.
+
62  *
+
63  * @returns success/status of the call.
+
64  */
+
65  virtual Status setExposureTimeRange(const Range<uint64_t>& exposureTimeRange) = 0;
+
66 
+
67  /**
+
68  * Returns the exposure time range of the source, in nanoseconds.
+
69  */
+
70  virtual Range<uint64_t> getExposureTimeRange() const = 0;
+
71 
+
72  /**
+
73  * Sets the focus position, in focuser units. If the position
+
74  * is set outside of the focuser limits, the position will be clamped.
+
75  * @param[in] position The new focus position, in focuser units.
+
76  * @see ICameraProperties::getFocusPositionRange()
+
77  *
+
78  * @returns success/status of the call.
+
79  */
+
80  virtual Status setFocusPosition(int32_t position) = 0;
+
81 
+
82  /**
+
83  * Returns the focus position, in focuser units.
+
84  */
+
85  virtual int32_t getFocusPosition() const = 0;
+
86 
+
87  /**
+
88  * Sets the aperture position. If the position is not valid,
+
89  * error will be returned.
+
90  * @param[in] position The new aperture position.
+
91  * @see ICameraProperties::getAperturePositionRange()
+
92  *
+
93  * @returns success/status of the call.
+
94  */
+
95  virtual Status setAperturePosition(int32_t position) = 0;
+
96 
+
97  /**
+
98  * Returns the aperture position.
+
99  */
+
100  virtual int32_t getAperturePosition() const = 0;
+
101 
+
102  /**
+
103  * Sets the aperture motor speed in motor steps/second. If the speed
+
104  * is set outside of the speed limits, the speed will be clamped.
+
105  * @param[in] speed The new speed.
+
106  * @see ICameraProperties::getApertureMotorSpeedRange()
+
107  *
+
108  * @returns success/status of the call.
+
109  */
+
110  virtual Status setApertureMotorSpeed(float speed) = 0;
+
111 
+
112  /**
+
113  * Returns the aperture motor speed in motor steps/second.
+
114  */
+
115  virtual float getApertureMotorSpeed() const = 0;
+
116 
+
117  /**
+
118  * Sets the aperture f-number. If the f-number is not valid,
+
119  * error will be returned.
+
120  * @param[in] fnumber The new f-number.
+
121  *
+
122  * @returns success/status of the call.
+
123  */
+
124  virtual Status setApertureFNumber(float fnumber) = 0;
+
125 
+
126  /**
+
127  * Returns the aperture f-number.
+
128  */
+
129  virtual float getApertureFNumber() const = 0;
+
130 
+
131  /**
+
132  * Sets the frame duration range, in nanoseconds.
+
133  * If frame range is out of bounds of the current sensor mode,
+
134  * the capture's frame duration will be as close as possible to the range specified.
+
135  * @param[in] frameDurationRange Frame duration range, in nanoseconds
+
136  * @see ISensorMode::getFrameDurationRange()
+
137  *
+
138  * @returns success/status of the call.
+
139  */
+
140  virtual Status setFrameDurationRange(const Range<uint64_t>& frameDurationRange) = 0;
+
141 
+
142  /**
+
143  * Returns the frame duration range, in nanoseconds.
+
144  */
+
145  virtual Range<uint64_t> getFrameDurationRange() const = 0;
+
146 
+
147  /**
+
148  * Sets the gain range for the sensor.
+
149  * The range has to be within the max and min reported in the CameraProperties
+
150  * Otherwise the range will be clipped.
+
151  * @param[in] gainRange scalar gain range
+
152  * @see ISensorMode::getAnalogGainRange()
+
153  *
+
154  * @returns success/status of the call.
+
155  */
+
156  virtual Status setGainRange(const Range<float>& gainRange) = 0;
+
157 
+
158  /**
+
159  * Returns the gain range.
+
160  */
+
161  virtual Range<float> getGainRange() const = 0;
+
162 
+
163  /**
+
164  * Sets the sensor mode.
+
165  * Note that changing sensor mode from one capture to the next may result in
+
166  * multiple sensor frames being dropped between the two captures.
+
167  * @param[in] mode Desired sensor mode for the capture.
+
168  * @see ICameraProperties::getAllSensorModes()
+
169  *
+
170  * @returns success/status of the call.
+
171  */
+
172  virtual Status setSensorMode(SensorMode* mode) = 0;
+
173 
+
174  /**
+
175  * Returns the sensor mode.
+
176  */
+
177  virtual SensorMode* getSensorMode() const = 0;
+
178 
+
179  /**
+
180  * Sets the user-specified optical black levels.
+
181  * These values will be ignored unless <tt>getOpticalBlackEnable() == true</tt>
+
182  * Values are floating point in the range [0,1) normalized based on sensor bit depth.
+
183  * @param[in] opticalBlackLevels opticalBlack levels in range [0,1) per bayer phase
+
184  *
+
185  * @returns success/status of the call.
+
186  */
+
187  virtual Status setOpticalBlack(const BayerTuple<float>& opticalBlackLevels) = 0;
+
188 
+
189  /**
+
190  * Returns user-specified opticalBlack level per bayer phase.
+
191  *
+
192  * @returns opticalBlackLevels
+
193  */
+
194  virtual BayerTuple<float> getOpticalBlack() const = 0;
+
195 
+
196  /**
+
197  * Sets whether or not user-provided optical black levels are used.
+
198  * @param[in] enable If @c true, Argus will use the user-specified optical black levels.
+
199  * @see setOpticalBlack()
+
200  * If @c false, the Argus implementation will choose the optical black values.
+
201  *
+
202  * @returns success/status of the call.
+
203  */
+
204  virtual Status setOpticalBlackEnable(bool enable) = 0;
+
205 
+
206  /**
+
207  * Returns whether user-specified optical black levels are enabled.
+
208  * If false, the Argus implementation will choose the optical black values.
+
209  * @see setOpticalBlackEnable()
+
210  *
+
211  * @returns enable
+
212  */
+
213  virtual bool getOpticalBlackEnable() const = 0;
+
214 
+
215 
+
216 protected:
+ +
218 };
+
219 
+
220 /**
+
221  * @class IAutoControlSettings
+
222  *
+
223  * Interface to the auto control settings (provided by IRequest::getAutoControlSettings()).
+
224  *
+
225  * @ingroup ArgusAutoControlSettings
+
226  */
+
227 DEFINE_UUID(InterfaceID, IID_AUTO_CONTROL_SETTINGS, 1f2ad1c6,cb13,440b,bc95,3f,fd,0d,19,91,db);
+ +
229 {
+
230 public:
+
231  static const InterfaceID& id() { return IID_AUTO_CONTROL_SETTINGS; }
+
232 
+
233  /**
+
234  * Sets the AE antibanding mode.
+
235  * @param[in] mode The requested antibanding mode.
+
236  *
+
237  * @returns success/status of the call.
+
238  */
+
239  virtual Status setAeAntibandingMode(const AeAntibandingMode& mode) = 0;
+
240 
+
241  /**
+
242  * Returns the AE antibanding mode.
+
243  */
+
244  virtual AeAntibandingMode getAeAntibandingMode() const = 0;
+
245 
+
246  /**
+
247  * Sets the AE lock. When locked, AE will maintain constant exposure.
+
248  * @param[in] lock If @c true, locks AE at its current exposure.
+
249  *
+
250  * @returns success/status of the call.
+
251  */
+
252  virtual Status setAeLock(bool lock) = 0;
+
253 
+
254  /**
+
255  * Returns the AE lock.
+
256  */
+
257  virtual bool getAeLock() const = 0;
+
258 
+
259  /**
+
260  * Sets the AE regions of interest.
+
261  * If no regions are specified, the region of interest will be determined by device
+
262  * and obtain by CameraMetadata::getAeRegions.
+
263  * @param[in] regions The AE regions of interest.
+
264  * The maximum number of regions is returned by @c ICameraProperties::getMaxAeRegions().
+
265  * The minimum supported size of resultatnt region is returned by
+
266  * @c ICameraProperties::getMinAeRegionSize().
+
267  *
+
268  * @returns success/status of the call.
+
269  */
+
270  virtual Status setAeRegions(const std::vector<AcRegion>& regions) = 0;
+
271 
+
272  /**
+
273  * Returns the AE regions of interest.
+
274  * @param[out] regions A vector that will be populated with the AE regions of interest.
+
275  *
+
276  * @returns success/status of the call.
+
277  */
+
278  virtual Status getAeRegions(std::vector<AcRegion>* regions) const = 0;
+
279 
+
280  /**
+
281  * Sets the bayer histogram region of interest.
+
282  * If no region is specified, the entire image is the region of interest.
+
283  * @param[in] region The bayer histogram region of interest.
+
284  *
+
285  * @returns success/status of the call.
+
286  */
+
287  virtual Status setBayerHistogramRegion(const Rectangle<uint32_t>& region) = 0;
+
288 
+
289  /**
+
290  * Returns the rectangle of the bayer histogram region of interest.
+
291  */
+
292  virtual Rectangle<uint32_t> getBayerHistogramRegion() const = 0;
+
293 
+
294  /**
+
295  * Sets the AWB lock.
+
296  * @param[in] lock If @c true, locks AWB at its current state.
+
297  *
+
298  * @returns success/status of the call.
+
299  */
+
300  virtual Status setAwbLock(bool lock) = 0;
+
301 
+
302  /**
+
303  * Returns the AWB lock.
+
304  */
+
305  virtual bool getAwbLock() const = 0;
+
306 
+
307  /**
+
308  * Sets the AWB mode.
+
309  * @param[in] mode The new AWB mode.
+
310  *
+
311  * @returns success/status of the call.
+
312  */
+
313  virtual Status setAwbMode(const AwbMode& mode) = 0;
+
314 
+
315  /**
+
316  * Returns the AWB mode.
+
317  */
+
318  virtual AwbMode getAwbMode() const = 0;
+
319 
+
320  /**
+
321  * Sets the AWB regions of interest.
+
322  * If no regions are specified, the region of interest will be determined by device
+
323  * and obtain by CameraMetadata::getAwbRegions.
+
324  * @param[in] regions The AWB regions of interest.
+
325  * The maximum number of regions is returned by @c ICameraProperties::getMaxAwbRegions().
+
326  *
+
327  * @returns success/status of the call.
+
328  */
+
329  virtual Status setAwbRegions(const std::vector<AcRegion>& regions) = 0;
+
330 
+
331  /**
+
332  * Returns the AWB regions of interest.
+
333  * @param[out] regions A vector that will be populated with the AWB regions of interest.
+
334  *
+
335  * @returns success/status of the call.
+
336  */
+
337  virtual Status getAwbRegions(std::vector<AcRegion>* regions) const = 0;
+
338 
+
339  /**
+
340  * Sets the AF regions of interest.
+
341  * If no regions are specified, the region of interest will be determined by device
+
342  * and obtain by CameraMetadata::getAfRegions.
+
343  * @param[in] regions The AF regions of interest.
+
344  * The maximum number of regions is returned by @c ICameraProperties::getMaxAfRegions().
+
345  *
+
346  * @returns success/status of the call.
+
347  */
+
348  virtual Status setAfRegions(const std::vector<AcRegion>& regions) = 0;
+
349 
+
350  /**
+
351  * Returns the AF regions of interest.
+
352  * @param[out] regions A vector that will be populated with the AF regions of interest.
+
353  *
+
354  * @returns success/status of the call.
+
355  */
+
356  virtual Status getAfRegions(std::vector<AcRegion>* regions) const = 0;
+
357 
+
358  /**
+
359  * Sets the Manual White Balance gains.
+
360  * @param[in] gains The Manual White Balance Gains
+
361  *
+
362  * @returns success/status of the call.
+
363  */
+
364  virtual Status setWbGains(const BayerTuple<float>& gains) = 0;
+
365 
+
366  /**
+
367  * Returns the Manual White Balance gains.
+
368  *
+
369  * @returns Manual White Balance Gains structure
+
370  */
+
371  virtual BayerTuple<float> getWbGains() const = 0;
+
372 
+
373  /**
+
374  * Returns the size of the color correction matrix.
+
375  */
+ +
377 
+
378  /**
+
379  * Sets the user-specified color correction matrix.
+
380  * This matrix will be ignored unless <tt>getColorCorrectionMatrixEnable() == true</tt>.
+
381  * The active color correction matrix used for image processing may be internally modified
+
382  * to account for the active color saturation value (either user-specified or automatically
+
383  * generated, after biasing, @see setColorSaturation and @see setColorSaturationBias).
+
384  * @param[in] matrix A color correction matrix that maps sensor RGB to linear sRGB. This matrix
+
385  * is given in row-major order and must have the size w*h, where w and h are
+
386  * the width and height of the Size returned by getColorCorrectionMatrixSize()
+
387  *
+
388  * @returns success/status of the call.
+
389  */
+
390  virtual Status setColorCorrectionMatrix(const std::vector<float>& matrix) = 0;
+
391 
+
392  /**
+
393  * Returns the user-specified color correction matrix.
+
394  * @param[out] matrix A matrix that will be populated with the CCM.
+
395  *
+
396  * @returns success/status of the call.
+
397  */
+
398  virtual Status getColorCorrectionMatrix(std::vector<float>* matrix) const = 0;
+
399 
+
400  /**
+
401  * Enables the user-specified color correction matrix.
+
402  * @param[in] enable If @c true, libargus uses the user-specified matrix.
+
403  * @see setColorCorrectionMatrix()
+
404  *
+
405  * @returns success/status of the call.
+
406  */
+
407  virtual Status setColorCorrectionMatrixEnable(bool enable) = 0;
+
408 
+
409  /**
+
410  * Returns the enable for the user-specified color correction matrix.
+
411  */
+
412  virtual bool getColorCorrectionMatrixEnable() const = 0;
+
413 
+
414  /**
+
415  * Sets the user-specified absolute color saturation. This must be enabled via
+
416  * @see setColorSaturationEnable, otherwise saturation will be determined automatically.
+
417  * This saturation value may be used to modify the color correction matrix used
+
418  * for processing (@see setColorCorrectionMatrix), and these changes will be reflected
+
419  * in the color correction matrix output to the capture metadata.
+
420  * @param[in] saturation The absolute color saturation. Acceptable values are in
+
421  * [0.0, 2.0], and the default value is 1.0.
+
422 
+
423  * @returns success/status of the call.
+
424  */
+
425  virtual Status setColorSaturation(float saturation) = 0;
+
426 
+
427  /**
+
428  * Returns the user-specified absolute color saturation (@see setColorSaturation).
+
429  */
+
430  virtual float getColorSaturation() const = 0;
+
431 
+
432  /**
+
433  * Enables the user-specified absolute color saturation.
+
434  * @param[in] enable If @c true, libargus uses the user-specified color saturation.
+
435  * @see setColorSaturation()
+
436  *
+
437  * @returns success/status of the call.
+
438  */
+
439  virtual Status setColorSaturationEnable(bool enable) = 0;
+
440 
+
441  /**
+
442  * Returns the enable for the user-specified color saturation.
+
443  */
+
444  virtual bool getColorSaturationEnable() const = 0;
+
445 
+
446  /**
+
447  * Sets the color saturation bias. This bias is used to multiply the active saturation
+
448  * value, either the user-specified or the automatically generated value depending on the state
+
449  * of @see getColorSaturationEnable, and produces the final saturation value to use for
+
450  * capture processing. This is used primarily to tweak automatically generated saturation
+
451  * values when the application prefers more or less saturation than what the implementation
+
452  * or hardware generates by default. The final saturation value (after biasing) may affect the
+
453  * color correction matrix used for processing (@see setColorCorrectionMatrix).
+
454  * @param[in] bias The color saturation bias. Acceptable values are in [0.0, 2.0], where
+
455  * 1.0 does not modify the saturation (default), 0.0 is fully desaturated
+
456  * (greyscale), and 2.0 is highly saturated.
+
457  *
+
458  * @returns success/status of the call.
+
459  */
+
460  virtual Status setColorSaturationBias(float bias) = 0;
+
461 
+
462  /**
+
463  * Returns the color saturation bias.
+
464  */
+
465  virtual float getColorSaturationBias() const = 0;
+
466 
+
467  /**
+
468  * Sets the exposure compensation.
+
469  * Exposure compensation is applied after AE is solved.
+
470  * @param[in] ev The exposure adjustment step in stops.
+
471  *
+
472  * @returns success/status of the call.
+
473  */
+
474  virtual Status setExposureCompensation(float ev) = 0;
+
475 
+
476  /**
+
477  * Returns the exposure compensation.
+
478  */
+
479  virtual float getExposureCompensation() const = 0;
+
480 
+
481  /**
+
482  * Returns the number of elements required for the tone map curve.
+
483  * @param[in] channel The color channel the curve size corresponds to.
+
484  */
+
485  virtual uint32_t getToneMapCurveSize(RGBChannel channel) const = 0;
+
486 
+
487  /**
+
488  * Sets the user-specified tone map curve for a channel on the stream.
+
489  * The user-specified tone map will be ignored unless <tt>getToneMapCurveEnable() == true</tt>.
+
490  * @param[in] channel The color the curve corresponds to.
+
491  * @param[in] curve A float vector that describes the LUT.
+
492  * The number of elements must match the number of elements
+
493  * returned from getToneMapCurve() of the same channel.
+
494  *
+
495  * @returns success/status of the call.
+
496  */
+
497  virtual Status setToneMapCurve(RGBChannel channel, const std::vector<float>& curve) = 0;
+
498 
+
499  /**
+
500  * Returns the user-specified tone map curve for a channel on the stream.
+
501  * @param[in] channel The color the curve corresponds to.
+
502  * @param[out] curve A vector that will be populated by the tone map curve for the specified
+
503  * color channel.
+
504  *
+
505  * @returns success/status of the call.
+
506  */
+
507  virtual Status getToneMapCurve(RGBChannel channel, std::vector<float>* curve) const = 0;
+
508 
+
509  /**
+
510  * Enables the user-specified tone map.
+
511  * @param[in] enable If @c true, libargus uses the user-specified tone map.
+
512  *
+
513  * @returns success/status of the call.
+
514  */
+
515  virtual Status setToneMapCurveEnable(bool enable) = 0;
+
516 
+
517  /**
+
518  * Returns the enable for the user-specified tone map.
+
519  */
+
520  virtual bool getToneMapCurveEnable() const = 0;
+
521 
+
522  /**
+
523  * Sets the user-specified Isp Digital gain range.
+
524  * @param[in] gain The user-specified Isp Digital gain.
+
525  *
+
526  * @returns success/status of the call.
+
527  */
+
528  virtual Status setIspDigitalGainRange(const Range<float>& gain) = 0;
+
529 
+
530  /**
+
531  * Returns the user-specified Isp Digital gain range.
+
532  *
+
533  * @returns Isp Digital gain
+
534  */
+
535  virtual Range<float> getIspDigitalGainRange() const = 0;
+
536 
+
537 protected:
+ +
539 };
+
540 
+
541 /**
+
542  * @class IStreamSettings
+
543  *
+
544  * Interface to per-stream settings (provided by IRequest::getStreamSettings()).
+
545  *
+
546  * @ingroup ArgusStreamSettings
+
547  */
+
548 DEFINE_UUID(InterfaceID, IID_STREAM_SETTINGS, c477aeaf,9cc8,4467,a834,c7,07,d7,b6,9f,a4);
+ +
550 {
+
551 public:
+
552  static const InterfaceID& id() { return IID_STREAM_SETTINGS; }
+
553 
+
554  /**
+
555  * Sets the clip rectangle for the stream.
+
556  * A clip rectangle is a normalized rectangle
+
557  * with valid coordinates contained in the [0.0,1.0] range.
+
558  * @param[in] clipRect The clip rectangle.
+
559  *
+
560  * @returns success/status of the call.
+
561  */
+
562  virtual Status setSourceClipRect(const Rectangle<float>& clipRect) = 0;
+
563 
+
564  /**
+
565  * Returns the clip rectangle for the stream.
+
566  */
+
567  virtual Rectangle<float> getSourceClipRect() const = 0;
+
568 
+
569  /**
+
570  * Sets whether or not post-processing is enabled for this stream.
+
571  * Post-processing features are controlled on a per-Request basis and all streams share the
+
572  * same post-processing control values, but this enable allows certain streams to be excluded
+
573  * from all post-processing. The current controls defined to be a part of "post-processing"
+
574  * includes (but may not be limited to):
+
575  * - Denoise
+
576  * Default value is true.
+
577  */
+
578  virtual void setPostProcessingEnable(bool enable) = 0;
+
579 
+
580  /**
+
581  * Returns the post-processing enable for the stream.
+
582  */
+
583  virtual bool getPostProcessingEnable() const = 0;
+
584 
+
585 protected:
+ +
587 };
+
588 
+
589 /**
+
590  * @class IDenoiseSettings
+
591  *
+
592  * Interface to denoise settings.
+
593  *
+
594  * @ingroup ArgusRequest
+
595  */
+
596 DEFINE_UUID(InterfaceID, IID_DENOISE_SETTINGS, 7A461D20,6AE1,11E6,BDF4,08,00,20,0C,9A,66);
+ +
598 {
+
599 public:
+
600  static const InterfaceID& id() { return IID_DENOISE_SETTINGS; }
+
601 
+
602  /**
+
603  * Sets the denoise (noise reduction) mode for the request.
+
604  * @param[in] mode The denoise mode:
+
605  * OFF: Denoise algorithms are disabled.
+
606  * FAST: Noise reduction will be enabled, but it will not slow down
+
607  * the capture rate.
+
608  * HIGH_QUALITY: Maximum noise reduction will be enabled to achieve
+
609  * the highest quality, but may slow down the capture rate.
+
610  * @returns success/status of the call.
+
611  */
+
612  virtual Status setDenoiseMode(const DenoiseMode& mode) = 0;
+
613 
+
614  /**
+
615  * Returns the denoise mode for the request.
+
616  */
+
617  virtual DenoiseMode getDenoiseMode() const = 0;
+
618 
+
619  /**
+
620  * Sets the strength for the denoise operation.
+
621  * @param[in] strength The denoise strength. This must be within the range [0.0, 1.0], where
+
622  * 0.0 is the least and 1.0 is the most amount of noise reduction that can be
+
623  * applied. This denoise strength is relative to the current noise reduction mode;
+
624  * using a FAST denoise mode with a full strength of 1.0 may not perform as well
+
625  * as using a HIGH_QUALITY mode with a lower relative strength.
+
626  * @returns success/status of the call.
+
627  */
+
628  virtual Status setDenoiseStrength(float strength) = 0;
+
629 
+
630  /**
+
631  * Returns the denoise strength.
+
632  */
+
633  virtual float getDenoiseStrength() const = 0;
+
634 
+
635 protected:
+ +
637 };
+
638 
+
639 /**
+
640  * @class IEdgeEnhanceSettings
+
641  *
+
642  * Interface to edge enhancement settings.
+
643  *
+
644  * @ingroup ArgusRequest
+
645  */
+
646 DEFINE_UUID(InterfaceID, IID_EDGE_ENHANCE_SETTINGS, 7A461D21,6AE1,11E6,BDF4,08,00,20,0C,9A,66);
+ +
648 {
+
649 public:
+
650  static const InterfaceID& id() { return IID_EDGE_ENHANCE_SETTINGS; }
+
651 
+
652  /**
+
653  * Sets the edge enhancement mode for the request.
+
654  * @param[in] mode The edge enhancement mode:
+
655  * OFF: Edge enhancement algorithms are disabled.
+
656  * FAST: Edge enhancement will be enabled, but it will not slow down
+
657  * the capture rate.
+
658  * HIGH_QUALITY: Maximum edge enhancement will be enabled to achieve
+
659  * the highest quality, but may slow down the capture rate.
+
660  * @returns success/status of the call.
+
661  */
+
662  virtual Status setEdgeEnhanceMode(const EdgeEnhanceMode& mode) = 0;
+
663 
+
664  /**
+
665  * Returns the edge enhancement mode for the request.
+
666  */
+
667  virtual EdgeEnhanceMode getEdgeEnhanceMode() const = 0;
+
668 
+
669  /**
+
670  * Sets the strength for the edge enhancement operation.
+
671  * @param[in] strength The edge enhancement strength. This must be within the range [0.0, 1.0],
+
672  * where 0.0 is the least and 1.0 is the most amount of edge enhancement that can be
+
673  * applied. This strength is relative to the current edge enhancement mode; using
+
674  * a FAST edge enhancement mode with a full strength of 1.0 may not perform as well
+
675  * as using a HIGH_QUALITY mode with a lower relative strength.
+
676  * @returns success/status of the call.
+
677  */
+
678  virtual Status setEdgeEnhanceStrength(float strength) = 0;
+
679 
+
680  /**
+
681  * Returns the edge enhancement strength.
+
682  */
+
683  virtual float getEdgeEnhanceStrength() const = 0;
+
684 
+
685 protected:
+ +
687 };
+
688 
+
689 } // namespace Argus
+
690 
+
691 #endif // _ARGUS_SETTINGS_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Stream_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/Stream_8h.html new file mode 100644 index 0000000..6a71576 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Stream_8h.html @@ -0,0 +1,133 @@ + + + + + +Libargus API: include/Argus/Stream.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Stream.h File Reference
+
+
+ +

Libargus API: Stream API +More...

+ +

Go to the source code of this file.

+ + + + + + +

+Classes

class  Argus::OutputStream
class  Argus::OutputStreamSettings
class  Argus::IOutputStreamSettings
 Interface that exposes the settings common to all OutputStream types. More...
+ + +

+Namespaces

namespace  Argus
+ + + + +

+Functions

 Argus::DEFINE_NAMED_UUID_CLASS (StreamType)
 The general operation, buffer source, and interfaces supported by a stream object are defined by its core StreamType.
 Argus::DEFINE_UUID (InterfaceID, IID_OUTPUT_STREAM_SETTINGS, 52f2b830, 3d52, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus API: Stream API

+

Description: Defines stream related objects and interfaces.

+ +

Definition in file Stream.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Stream_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/Stream_8h_source.html new file mode 100644 index 0000000..fa46640 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Stream_8h_source.html @@ -0,0 +1,210 @@ + + + + + +Libargus API: include/Argus/Stream.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Stream.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Stream API</b>
+
32  *
+
33  * @b Description: Defines stream related objects and interfaces.
+
34  */
+
35 
+
36 #ifndef _ARGUS_STREAM_H
+
37 #define _ARGUS_STREAM_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * The general operation, buffer source, and interfaces supported by a stream
+
44  * object are defined by its core StreamType. The only StreamType currently
+
45  * supported is STREAM_TYPE_EGL (see EGLStream.h).
+
46  */
+
47 DEFINE_NAMED_UUID_CLASS(StreamType);
+
48 
+
49 /**
+
50  * Object representing an output stream capable of receiving image frames from a capture.
+
51  *
+
52  * OutputStream objects are used as the destination for image frames output from
+
53  * capture requests. The operation of a stream, the source for its buffers, and the
+
54  * interfaces it supports depend on the StreamType of the stream.
+
55  *
+
56  * @defgroup ArgusOutputStream OutputStream
+
57  * @ingroup ArgusObjects
+
58  */
+ +
60 {
+
61 protected:
+ +
63 };
+
64 
+
65 /**
+
66  * Container for settings used to configure/create an OutputStream.
+
67  *
+
68  * The interfaces and configuration supported by these settings objects
+
69  * depend on the StreamType that was provided during settings creation
+
70  * (see ICaptureSession::createOutputStreamSettings).
+
71  * These objects are passed to ICaptureSession::createOutputStream to create
+
72  * OutputStream objects, after which they may be destroyed.
+
73  *
+
74  * @defgroup ArgusOutputStreamSettings OutputStreamSettings
+
75  * @ingroup ArgusObjects
+
76  */
+ +
78 {
+
79 protected:
+ +
81 };
+
82 
+
83 /**
+
84  * @class IOutputStreamSettings
+
85  *
+
86  * Interface that exposes the settings common to all OutputStream types.
+
87  *
+
88  * @ingroup ArgusOutputStreamSettings
+
89  */
+
90 DEFINE_UUID(InterfaceID, IID_OUTPUT_STREAM_SETTINGS, 52f2b830,3d52,11e6,bdf4,08,00,20,0c,9a,66);
+ +
92 {
+
93 public:
+
94  static const InterfaceID& id() { return IID_OUTPUT_STREAM_SETTINGS; }
+
95 
+
96  /**
+
97  * Set the camera device to use as the source for this stream.
+
98  * Default value: First available device in the session.
+
99  */
+
100  virtual Status setCameraDevice(CameraDevice* device) = 0;
+
101  virtual CameraDevice* getCameraDevice() const = 0;
+
102 
+
103 protected:
+ +
105 };
+
106 
+
107 } // namespace Argus
+
108 
+
109 #endif // _ARGUS_STREAM_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SyncSensorCalibrationData_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/SyncSensorCalibrationData_8h.html new file mode 100644 index 0000000..82eacea --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SyncSensorCalibrationData_8h.html @@ -0,0 +1,142 @@ + + + + + +Libargus API: include/Argus/Ext/SyncSensorCalibrationData.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SyncSensorCalibrationData.h File Reference
+
+
+ +

Libargus Extension: Sync Sensor Calibration Data API +More...

+ +

Go to the source code of this file.

+ + + + +

+Classes

class  Argus::Ext::ISyncSensorCalibrationData
 Interface used to access sync sensor calibration data. More...
+ + + +

+Namespaces

namespace  Argus
namespace  Argus::Ext
+ + + + + + + + + + + + + + +

+Functions

 Argus::DEFINE_NAMED_UUID_CLASS (DistortionType)
 The DistortionType of a sync sensor defines the type of distortion model.
 Argus::DEFINE_UUID (DistortionType, DISTORTION_TYPE_POLYNOMIAL, 23e59580, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (DistortionType, DISTORTION_TYPE_FISHEYE, 23e59581, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (DistortionType, DISTORTION_TYPE_OMINI_DIRECTIONAL, 23e5bc90, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_NAMED_UUID_CLASS (MappingType)
 The MappingType of a sync sensor defines the type of mapping used for fisheye distortion model.
 Argus::DEFINE_UUID (MappingType, MAPPING_TYPE_EQUIDISTANT, 9e7f3c10, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (MappingType, MAPPING_TYPE_EQUISOLID, 9e7f3c11, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (MappingType, MAPPING_TYPE_ORTHOGRAPHIC, 9e7f3c12, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (MappingType, MAPPING_TYPE_STEREOGRAPHIC, 9e7f3c13, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (ExtensionName, EXT_SYNC_SENSOR_CALIBRATION_DATA, 10845a70, d52f, 11ea, 8b6e, 08, 00, 20, 0c, 9a, 66)
 Argus::Ext::DEFINE_UUID (InterfaceID, IID_SYNC_SENSOR_CALIBRATION_DATA, 5925f360, d52f, 11ea, 8b6e, 08, 00, 20, 0c, 9a, 66)
+

Detailed Description

+

Libargus Extension: Sync Sensor Calibration Data API

+

Description: This file defines the SyncSensorCalibrationData extension.

+ +

Definition in file SyncSensorCalibrationData.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/SyncSensorCalibrationData_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/SyncSensorCalibrationData_8h_source.html new file mode 100644 index 0000000..facd993 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/SyncSensorCalibrationData_8h_source.html @@ -0,0 +1,309 @@ + + + + + +Libargus API: include/Argus/Ext/SyncSensorCalibrationData.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SyncSensorCalibrationData.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus Extension: Sync Sensor Calibration Data API</b>
+
32  *
+
33  * @b Description: This file defines the SyncSensorCalibrationData extension.
+
34  */
+
35 
+
36 #ifndef _ARGUS_SYNC_SENSOR_CALIBRATION_DATA_H
+
37 #define _ARGUS_SYNC_SENSOR_CALIBRATION_DATA_H
+
38 
+
39 namespace Argus
+
40 {
+
41 
+
42 /**
+
43  * The DistortionType of a sync sensor defines the type of distortion model.
+
44  */
+
45 DEFINE_NAMED_UUID_CLASS(DistortionType);
+
46 DEFINE_UUID(DistortionType, DISTORTION_TYPE_POLYNOMIAL, 23e59580,17ff,11eb,8b6f,08,00,20,0c,9a,66);
+
47 DEFINE_UUID(DistortionType, DISTORTION_TYPE_FISHEYE, 23e59581,17ff,11eb,8b6f,08,00,20,0c,9a,66);
+
48 DEFINE_UUID(DistortionType, DISTORTION_TYPE_OMINI_DIRECTIONAL, 23e5bc90,17ff,11eb,8b6f,08,00,20,0c,9a,66);
+
49 
+
50 /**
+
51  * The MappingType of a sync sensor defines the type of mapping used for fisheye distortion model.
+
52  */
+
53 DEFINE_NAMED_UUID_CLASS(MappingType);
+
54 DEFINE_UUID(MappingType, MAPPING_TYPE_EQUIDISTANT, 9e7f3c10,17ff,11eb,8b6f,08,00,20,0c,9a,66);
+
55 DEFINE_UUID(MappingType, MAPPING_TYPE_EQUISOLID, 9e7f3c11,17ff,11eb,8b6f,08,00,20,0c,9a,66);
+
56 DEFINE_UUID(MappingType, MAPPING_TYPE_ORTHOGRAPHIC, 9e7f3c12,17ff,11eb,8b6f,08,00,20,0c,9a,66);
+
57 DEFINE_UUID(MappingType, MAPPING_TYPE_STEREOGRAPHIC, 9e7f3c13,17ff,11eb,8b6f,08,00,20,0c,9a,66);
+
58 
+
59 /**
+
60  * Adds accessors for sync sensor calibration data.
+
61  * - Ext::ISyncSensorCalibrationData : Accesses the sync sensor calibration data.
+
62  *
+
63  * @defgroup ArgusExtSyncSensorCalibrationData Ext::SyncSensorCalibrationData
+
64  * @ingroup ArgusExtensions
+
65  */
+
66 DEFINE_UUID(ExtensionName, EXT_SYNC_SENSOR_CALIBRATION_DATA, 10845a70,d52f,11ea,8b6e,08,00,20,0c,9a,66);
+
67 namespace Ext
+
68 {
+
69 /**
+
70  * @class ISyncSensorCalibrationData
+
71  *
+
72  * Interface used to access sync sensor calibration data.
+
73  *
+
74  * @ingroup ArgusCameraDevice ArgusExtSyncSensorCalibrationData
+
75  */
+
76 DEFINE_UUID(InterfaceID, IID_SYNC_SENSOR_CALIBRATION_DATA, 5925f360,d52f,11ea,8b6e,08,00,20,0c,9a,66);
+ +
78 {
+
79 public:
+
80  static const InterfaceID& id() { return IID_SYNC_SENSOR_CALIBRATION_DATA; }
+
81 
+
82  /**
+
83  * Returns the sync sensor module id in the provided memory location.
+
84  * The maximum supported length of sync sensor id string is 32.
+
85  * @param [in,out] syncSensorId Pointer for getting the sync sensor id string associated
+
86  * with sensor.
+
87  * @param [in] size The size of the syncSensorId.
+
88  */
+
89  virtual Status getSyncSensorModuleId(void* syncSensorId, size_t size) const = 0;
+
90 
+
91  /**
+
92  * Returns the size of the image in pixels.
+
93  */
+
94  virtual Size2D<uint32_t> getImageSizeInPixels() const = 0;
+
95 
+
96  /**
+
97  * Returns the focal length fx and fy from intrinsic parameters.
+
98  */
+
99  virtual Point2D<float> getFocalLength() const = 0;
+
100 
+
101  /**
+
102  * Returns the skew from intrinsic parameters.
+
103  */
+
104  virtual float getSkew() const = 0;
+
105 
+
106  /**
+
107  * Returns the principal point (optical center) x and y from intrinsic parameters.
+
108  */
+
109  virtual Point2D<float> getPrincipalPoint() const = 0;
+
110 
+
111  /**
+
112  * Returns the lens distortion type as per the model being used.
+
113  */
+
114  virtual DistortionType getLensDistortionType() const = 0;
+
115 
+
116  /**
+
117  * Returns the mapping type in case of fisheye distortion.
+
118  */
+
119  virtual MappingType getFisheyeMappingType() const = 0;
+
120 
+
121  /**
+
122  * Returns the radial coefficients count in case of polynomial or fisheye distortion.
+
123  *
+
124  * @param[in] distortionType The lens distortion type.
+
125  */
+
126  virtual uint32_t getRadialCoeffsCount(const DistortionType& distortionType) const = 0;
+
127 
+
128  /**
+
129  * Returns the radial coefficients vector as per distortion type and
+
130  * size of the vector is given by getRadialCoeffsCount().
+
131  *
+
132  * @param[out] k The radial coefficient vector from distortion properties.
+
133  *
+
134  * @param[in] distortionType The lens distortion type.
+
135  */
+
136  virtual Status getRadialCoeffs(std::vector<float>* k,
+
137  const DistortionType& distortionType) const = 0;
+
138 
+
139  /**
+
140  * Returns the tangential coefficients count in case of polynomial distortion.
+
141  */
+
142  virtual uint32_t getTangentialCoeffsCount() const = 0;
+
143 
+
144  /**
+
145  * Returns the tangential coefficients in case of polynomial distortion and
+
146  * size of the vector is given by getTangentialCoeffsCount().
+
147  *
+
148  * @param[out] p The tangential coefficient vector from distortion properties.
+
149  */
+
150  virtual Status getTangentialCoeffs(std::vector<float>* p) const = 0;
+
151 
+
152  /**
+
153  * Returns the rotation parameter expressed in Rodrigues notation from extrinsic parameters.
+
154  * angle = sqrt(rx^2+ry^2+rz^2).
+
155  * unit axis = [rx,ry,rz]/angle.
+
156  */
+
157  virtual Point3D<float> getRotationParams() const = 0;
+
158 
+
159  /**
+
160  * Returns the translation parameters in x, y and z co-ordinates with respect to a
+
161  * reference point from extrinsic params.
+
162  */
+
163  virtual Point3D<float> getTranslationParams() const = 0;
+
164 
+
165  /**
+
166  * Returns whether IMU sensor is present or not.
+
167  */
+
168  virtual bool isImuSensorAvailable() const = 0;
+
169 
+
170  /**
+
171  * Returns the linear acceleration bias for all three axes x, y and z of the IMU device.
+
172  */
+
173  virtual Point3D<float> getLinearAccBias() const = 0;
+
174 
+
175  /**
+
176  * Returns the angular velocity bias for all three axes x, y and z of the IMU device.
+
177  */
+
178  virtual Point3D<float> getAngularVelocityBias() const = 0;
+
179 
+
180  /**
+
181  * Returns the gravity acceleration for all three axes x, y and z of the IMU device.
+
182  */
+
183  virtual Point3D<float> getGravityAcc() const = 0;
+
184 
+
185  /**
+
186  * Returns the IMU rotation parameter expressed in Rodrigues notation from extrinsic parameters.
+
187  * angle = sqrt(rx^2+ry^2+rz^2).
+
188  * unit axis = [rx,ry,rz]/angle.
+
189  */
+
190  virtual Point3D<float> getImuRotationParams() const = 0;
+
191 
+
192  /**
+
193  * Returns the IMU translation parameters in x, y and z co-ordinates with respect to a
+
194  * reference point from extrinsic params.
+
195  */
+
196  virtual Point3D<float> getImuTranslationParams() const = 0;
+
197 
+
198 protected:
+ +
200 
+
201 };
+
202 
+
203 } // namespace Ext
+
204 
+
205 } // namespace Argus
+
206 
+
207 #endif // _ARGUS_SYNC_SENSOR_CALIBRATION_DATA_H
+
208 
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Types_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/Types_8h.html new file mode 100644 index 0000000..3a23bc8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Types_8h.html @@ -0,0 +1,318 @@ + + + + + +Libargus API: include/Argus/Types.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Types.h File Reference
+
+
+ +

Libargus API: Types API +More...

+
#include <stdint.h>
+#include <vector>
+#include <string>
+#include <assert.h>
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  Argus::NonCopyable
 Utility class for libargus interfaces. More...
class  Argus::Interface
 The top-level interface class. More...
class  Argus::InterfaceID
 A unique identifier for a libargus Interface. More...
class  Argus::InterfaceProvider
 The base interface for a class that provides libargus Interfaces. More...
class  Argus::Destructable
 A top level object class for libargus objects that are created and owned by the client. More...
class  Argus::UniqueObj< T >
 Template helper emulating C++11 rvalue semantics. More...
class  Argus::Tuple< N, T >
 Tuple template class. More...
class  Argus::BayerTuple< T >
 BayerTuple template class. More...
class  Argus::RGBTuple< T >
 RGBTuple template class. More...
class  Argus::Point2D< T >
 Point2D template class. More...
class  Argus::Point3D< T >
 Point3D template class. More...
class  Argus::Size2D< T >
 Size2D template class. More...
class  Argus::Rectangle< T >
 Rectangle template class. More...
class  Argus::Range< T >
 Range template class. More...
class  Argus::AcRegion
 Defines an autocontrol region of interest (in pixel space). More...
class  Argus::Array2D< T >
 A template class to hold a 2-dimensional array of data. More...
+ + +

+Namespaces

namespace  Argus
+ + +

+Typedefs

typedef uint32_t Argus::AutoControlId
+ + + + + + + + + +

+Enumerations

enum  Argus::Status {
+  Argus::STATUS_OK = 0, +Argus::STATUS_INVALID_PARAMS = 1, +Argus::STATUS_INVALID_SETTINGS = 2, +Argus::STATUS_UNAVAILABLE = 3, +
+  Argus::STATUS_OUT_OF_MEMORY = 4, +Argus::STATUS_UNIMPLEMENTED = 5, +Argus::STATUS_TIMEOUT = 6, +Argus::STATUS_CANCELLED = 7, +
+  Argus::STATUS_DISCONNECTED = 8, +Argus::STATUS_END_OF_STREAM = 9, +Argus::STATUS_COUNT +
+ }
 Status values returned by API function calls. More...
enum  Argus::BayerChannel {
+  Argus::BAYER_CHANNEL_R, +Argus::BAYER_CHANNEL_G_EVEN, +Argus::BAYER_CHANNEL_G_ODD, +Argus::BAYER_CHANNEL_B, +
+  Argus::BAYER_CHANNEL_COUNT +
+ }
 Color channel constants for Bayer data. More...
enum  Argus::Coordinate {
+  Argus::COORDINATE_X, +Argus::COORDINATE_Y, +Argus::COORDINATE_Z, +Argus::COORDINATE_2D_COUNT = 2, +
+  Argus::COORDINATE_3D_COUNT = 3 +
+ }
 Coordinates used for 2D and 3D points. More...
enum  Argus::RGBChannel { Argus::RGB_CHANNEL_R, +Argus::RGB_CHANNEL_G, +Argus::RGB_CHANNEL_B, +Argus::RGB_CHANNEL_COUNT + }
 Color channel constants for RGB data. More...
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

 Argus::DEFINE_NAMED_UUID_CLASS (AeAntibandingMode)
 Auto Exposure Anti-Banding Modes.
 Argus::DEFINE_UUID (AeAntibandingMode, AE_ANTIBANDING_MODE_OFF, AD1E5560, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AeAntibandingMode, AE_ANTIBANDING_MODE_AUTO, AD1E5561, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AeAntibandingMode, AE_ANTIBANDING_MODE_50HZ, AD1E5562, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AeAntibandingMode, AE_ANTIBANDING_MODE_60HZ, AD1E5563, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_NAMED_UUID_CLASS (AeFlickerState)
 Auto Exposure Flicker States.
 Argus::DEFINE_UUID (AeFlickerState, AE_FLICKER_NONE, AD1E5564, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AeFlickerState, AE_FLICKER_50HZ, AD1E5565, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AeFlickerState, AE_FLICKER_60HZ, AD1E5566, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_NAMED_UUID_CLASS (AeState)
 Auto Exposure States.
 Argus::DEFINE_UUID (AeState, AE_STATE_INACTIVE, D2EBEA50, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AeState, AE_STATE_SEARCHING, D2EBEA51, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AeState, AE_STATE_CONVERGED, D2EBEA52, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AeState, AE_STATE_FLASH_REQUIRED, D2EBEA53, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AeState, AE_STATE_TIMEOUT, D2EBEA54, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_NAMED_UUID_CLASS (AwbMode)
 Auto White Balance (AWB) Modes.
 Argus::DEFINE_UUID (AwbMode, AWB_MODE_OFF, FB3F365A, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (AwbMode, AWB_MODE_AUTO, FB3F365B, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (AwbMode, AWB_MODE_INCANDESCENT, FB3F365C, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (AwbMode, AWB_MODE_FLUORESCENT, FB3F365D, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (AwbMode, AWB_MODE_WARM_FLUORESCENT, FB3F365E, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (AwbMode, AWB_MODE_DAYLIGHT, FB3F365F, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (AwbMode, AWB_MODE_CLOUDY_DAYLIGHT, FB3F3660, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (AwbMode, AWB_MODE_TWILIGHT, FB3F3661, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (AwbMode, AWB_MODE_SHADE, FB3F3662, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (AwbMode, AWB_MODE_MANUAL, 20FB45DA, C49F, 4293, AB02, 13, 3F, 8C, CA, DD, 69)
 Argus::DEFINE_NAMED_UUID_CLASS (AwbState)
 Auto White-Balance States.
 Argus::DEFINE_UUID (AwbState, AWB_STATE_INACTIVE, E33CDB30, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AwbState, AWB_STATE_SEARCHING, E33CDB31, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AwbState, AWB_STATE_CONVERGED, E33CDB32, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (AwbState, AWB_STATE_LOCKED, E33CDB33, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_NAMED_UUID_CLASS (CaptureIntent)
 A CaptureIntent may be provided during capture request creation to initialize the new Request with default settings that are appropriate for captures of the given intent.
 Argus::DEFINE_UUID (CaptureIntent, CAPTURE_INTENT_MANUAL, FB3F3663, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (CaptureIntent, CAPTURE_INTENT_PREVIEW, FB3F3664, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (CaptureIntent, CAPTURE_INTENT_STILL_CAPTURE, FB3F3665, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (CaptureIntent, CAPTURE_INTENT_VIDEO_RECORD, FB3F3666, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (CaptureIntent, CAPTURE_INTENT_VIDEO_SNAPSHOT, FB3F3667, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_NAMED_UUID_CLASS (DenoiseMode)
 Denoise (noise reduction) Modes.
 Argus::DEFINE_UUID (DenoiseMode, DENOISE_MODE_OFF, FB3F3668, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (DenoiseMode, DENOISE_MODE_FAST, FB3F3669, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_UUID (DenoiseMode, DENOISE_MODE_HIGH_QUALITY, FB3F366A, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 Argus::DEFINE_NAMED_UUID_CLASS (EdgeEnhanceMode)
 Edge Enhance Modes.
 Argus::DEFINE_UUID (EdgeEnhanceMode, EDGE_ENHANCE_MODE_OFF, F7100B40, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (EdgeEnhanceMode, EDGE_ENHANCE_MODE_FAST, F7100B41, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_UUID (EdgeEnhanceMode, EDGE_ENHANCE_MODE_HIGH_QUALITY, F7100B42, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 Argus::DEFINE_NAMED_UUID_CLASS (ExtensionName)
 Extension Names.
 Argus::DEFINE_NAMED_UUID_CLASS (PixelFormat)
 Pixel formats.
 Argus::DEFINE_UUID (PixelFormat, PIXEL_FMT_UNKNOWN, 00000000, 93d5, 11e5, 0000, 1c, b7, 2c, ef, d4, 1e)
 Argus::DEFINE_UUID (PixelFormat, PIXEL_FMT_Y8, 569be14a, 93d5, 11e5, 91bc, 1c, b7, 2c, ef, d4, 1e)
 Argus::DEFINE_UUID (PixelFormat, PIXEL_FMT_Y16, 56ddb19c, 93d5, 11e5, 8e2c, 1c, b7, 2c, ef, d4, 1e)
 Argus::DEFINE_UUID (PixelFormat, PIXEL_FMT_YCbCr_420_888, 570c10e6, 93d5, 11e5, 8ff3, 1c, b7, 2c, ef, d4, 1e)
 Argus::DEFINE_UUID (PixelFormat, PIXEL_FMT_YCbCr_422_888, 573a7940, 93d5, 11e5, 99c2, 1c, b7, 2c, ef, d4, 1e)
 Argus::DEFINE_UUID (PixelFormat, PIXEL_FMT_YCbCr_444_888, 576043dc, 93d5, 11e5, 8983, 1c, b7, 2c, ef, d4, 1e)
 Argus::DEFINE_UUID (PixelFormat, PIXEL_FMT_JPEG_BLOB, 578b08c4, 93d5, 11e5, 9686, 1c, b7, 2c, ef, d4, 1e)
 Argus::DEFINE_UUID (PixelFormat, PIXEL_FMT_RAW16, 57b484d8, 93d5, 11e5, aeb6, 1c, b7, 2c, ef, d4, 1e)
 Argus::DEFINE_UUID (PixelFormat, PIXEL_FMT_P016, 57b484d9, 93d5, 11e5, aeb6, 1c, b7, 2c, ef, d4, 1e)
 Argus::DEFINE_NAMED_UUID_CLASS (SensorModeType)
 The SensorModeType of a sensor defines the type of image data that is output by the imaging sensor before any sort of image processing (ie.
 Argus::DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_DEPTH, 64483464, 4b91, 11e6, bbbd, 40, 16, 7e, ab, 86, 92)
 Argus::DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_YUV, 6453e00c, 4b91, 11e6, 871d, 40, 16, 7e, ab, 86, 92)
 Argus::DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_RGB, 6463d4c6, 4b91, 11e6, 88a3, 40, 16, 7e, ab, 86, 92)
 Argus::DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_BAYER, 646f04ea, 4b91, 11e6, 9c06, 40, 16, 7e, ab, 86, 92)
 Argus::DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_BAYER_PWL, f6a08220, 6a0f, 11eb, 8572, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_BAYER_DOL, f6a08221, 6a0f, 11eb, 8572, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_NAMED_UUID_CLASS (SensorPlacement)
 SensorPlacement defines the placement of the sensor on the module.
 Argus::DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_REAR_OR_BOTTOM_OR_BOTTOM_LEFT, 01dba8b0, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_FRONT_OR_TOP_OR_CENTER_LEFT, 01dba8b1, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_CENTER_OR_CENTER_RIGHT, 01dba8b2, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_TOP_LEFT, 01dba8b3, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_BOTTOM_RIGHT, 01dba8b4, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_TOP_RIGHT, 01dba8b5, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_NAMED_UUID_CLASS (BayerPhase)
 Bayer Phases.
 Argus::DEFINE_UUID (BayerPhase, BAYER_PHASE_UNKNOWN, b9d43270, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (BayerPhase, BAYER_PHASE_RGGB, b9d43271, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (BayerPhase, BAYER_PHASE_BGGR, b9d43272, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (BayerPhase, BAYER_PHASE_GRBG, b9d43273, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)
 Argus::DEFINE_UUID (BayerPhase, BAYER_PHASE_GBRG, b9d43274, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)
template<typename TheInterface >
TheInterface * Argus::interface_cast (InterfaceProvider *obj)
 Interface-casting helper similar to dynamic_cast.
template<typename TheInterface >
TheInterface * Argus::interface_cast (const InterfaceProvider *obj)
template<typename TheInterface , typename TObject >
TheInterface * Argus::interface_cast (const UniqueObj< TObject > &obj)
+ + + +

+Variables

const uint64_t Argus::TIMEOUT_INFINITE = 0xFFFFFFFFFFFFFFFF
 Constant used for infinite timeouts.
+

Detailed Description

+

Libargus API: Types API

+

Description: Defines the basic types that are used by the API.

+ +

Definition in file Types.h.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/Types_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/Types_8h_source.html new file mode 100644 index 0000000..97a79b9 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/Types_8h_source.html @@ -0,0 +1,1042 @@ + + + + + +Libargus API: include/Argus/Types.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Types.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2020, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: Types API</b>
+
32  *
+
33  * @b Description: Defines the basic types that are used by the API.
+
34  */
+
35 
+
36 #ifndef _ARGUS_TYPES_H
+
37 #define _ARGUS_TYPES_H
+
38 
+
39 #include <stdint.h>
+
40 #include <vector>
+
41 #include <string>
+
42 #include <assert.h>
+
43 
+
44 #include <EGL/egl.h>
+
45 #include <EGL/eglext.h>
+
46 
+
47 // Some versions of the Xlib.h header file define 'Status' to 'int'.
+
48 // This collides with the libargus 'Status' type.
+
49 // If 'Status' is defined then undefine it and use a typedef instead.
+
50 #ifdef Status
+
51 #undef Status
+
52 typedef int Status;
+
53 #endif // Status
+
54 
+
55 namespace Argus
+
56 {
+
57 
+
58 /*
+
59  * Forward declaration of standard objects
+
60  */
+
61 class CameraDevice;
+
62 class CameraProvider;
+
63 class CaptureSession;
+
64 class CaptureMetadata;
+
65 class CaptureMetadataContainer;
+
66 class Event;
+
67 class EventQueue;
+
68 class InputStream;
+
69 class OutputStream;
+
70 class OutputStreamSettings;
+
71 class Request;
+
72 class SensorMode;
+
73 
+
74 /*
+
75  * Forward declaration of standard interfaces
+
76  */
+
77 class ICameraProperties;
+
78 class ICameraProvider;
+
79 class ICaptureSession;
+
80 class IAutoControlSettings;
+
81 class IRequest;
+
82 class IStream;
+
83 class IStreamSettings;
+
84 
+
85 /**
+
86  * Constant used for infinite timeouts.
+
87  */
+
88 const uint64_t TIMEOUT_INFINITE = 0xFFFFFFFFFFFFFFFF;
+
89 
+
90 /**
+
91  * Status values returned by API function calls.
+
92  */
+
93 enum Status
+
94 {
+
95  /// Function succeeded.
+
96  STATUS_OK = 0,
+
97 
+
98  /// The set of parameters passed was invalid.
+ +
100 
+
101  /// The requested settings are invalid.
+ +
103 
+
104  /// The requested device is unavailable.
+ +
106 
+
107  /// An operation failed because of insufficient mavailable memory.
+ +
109 
+
110  /// This method has not been implemented.
+ +
112 
+
113  /// An operation timed out.
+ +
115 
+
116  /// The capture was aborted. @see ICaptureSession::cancelRequests()
+ +
118 
+
119  /// The stream or other resource has been disconnected.
+ +
121 
+
122  /// End of stream, used by Stream objects.
+ +
124 
+
125  // Number of elements in this enum.
+ +
127 };
+
128 
+
129 /**
+
130  * Color channel constants for Bayer data.
+
131  */
+ +
133 {
+ + + + +
138 
+ +
140 };
+
141 
+
142 /**
+
143  * Coordinates used for 2D and 3D points.
+
144  */
+ +
146 {
+ + + +
150 
+ + +
153 };
+
154 
+
155 /**
+
156  * Color channel constants for RGB data.
+
157  */
+ +
159 {
+ + + +
163 
+ +
165 };
+
166 
+
167 /**
+
168  * Auto Exposure Anti-Banding Modes.
+
169  */
+
170 DEFINE_NAMED_UUID_CLASS(AeAntibandingMode);
+
171 DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_OFF, AD1E5560,9C16,11E8,B568,18,00,20,0C,9A,66);
+
172 DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_AUTO, AD1E5561,9C16,11E8,B568,18,00,20,0C,9A,66);
+
173 DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_50HZ, AD1E5562,9C16,11E8,B568,18,00,20,0C,9A,66);
+
174 DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_60HZ, AD1E5563,9C16,11E8,B568,18,00,20,0C,9A,66);
+
175 
+
176 /**
+
177  * Auto Exposure Flicker States.
+
178  */
+
179 DEFINE_NAMED_UUID_CLASS(AeFlickerState);
+
180 DEFINE_UUID(AeFlickerState, AE_FLICKER_NONE, AD1E5564,9C16,11E8,B568,18,00,20,0C,9A,66);
+
181 DEFINE_UUID(AeFlickerState, AE_FLICKER_50HZ, AD1E5565,9C16,11E8,B568,18,00,20,0C,9A,66);
+
182 DEFINE_UUID(AeFlickerState, AE_FLICKER_60HZ, AD1E5566,9C16,11E8,B568,18,00,20,0C,9A,66);
+
183 
+
184 /**
+
185  * Auto Exposure States.
+
186  */
+
187 DEFINE_NAMED_UUID_CLASS(AeState);
+
188 DEFINE_UUID(AeState, AE_STATE_INACTIVE, D2EBEA50,9C16,11E8,B568,18,00,20,0C,9A,66);
+
189 DEFINE_UUID(AeState, AE_STATE_SEARCHING, D2EBEA51,9C16,11E8,B568,18,00,20,0C,9A,66);
+
190 DEFINE_UUID(AeState, AE_STATE_CONVERGED, D2EBEA52,9C16,11E8,B568,18,00,20,0C,9A,66);
+
191 DEFINE_UUID(AeState, AE_STATE_FLASH_REQUIRED, D2EBEA53,9C16,11E8,B568,18,00,20,0C,9A,66);
+
192 DEFINE_UUID(AeState, AE_STATE_TIMEOUT, D2EBEA54,9C16,11E8,B568,18,00,20,0C,9A,66);
+
193 
+
194 /**
+
195  * Auto White Balance (AWB) Modes.
+
196  */
+
197 DEFINE_NAMED_UUID_CLASS(AwbMode);
+
198 DEFINE_UUID(AwbMode, AWB_MODE_OFF, FB3F365A,CC62,11E5,9956,62,56,62,87,07,61);
+
199 DEFINE_UUID(AwbMode, AWB_MODE_AUTO, FB3F365B,CC62,11E5,9956,62,56,62,87,07,61);
+
200 DEFINE_UUID(AwbMode, AWB_MODE_INCANDESCENT, FB3F365C,CC62,11E5,9956,62,56,62,87,07,61);
+
201 DEFINE_UUID(AwbMode, AWB_MODE_FLUORESCENT, FB3F365D,CC62,11E5,9956,62,56,62,87,07,61);
+
202 DEFINE_UUID(AwbMode, AWB_MODE_WARM_FLUORESCENT, FB3F365E,CC62,11E5,9956,62,56,62,87,07,61);
+
203 DEFINE_UUID(AwbMode, AWB_MODE_DAYLIGHT, FB3F365F,CC62,11E5,9956,62,56,62,87,07,61);
+
204 DEFINE_UUID(AwbMode, AWB_MODE_CLOUDY_DAYLIGHT, FB3F3660,CC62,11E5,9956,62,56,62,87,07,61);
+
205 DEFINE_UUID(AwbMode, AWB_MODE_TWILIGHT, FB3F3661,CC62,11E5,9956,62,56,62,87,07,61);
+
206 DEFINE_UUID(AwbMode, AWB_MODE_SHADE, FB3F3662,CC62,11E5,9956,62,56,62,87,07,61);
+
207 DEFINE_UUID(AwbMode, AWB_MODE_MANUAL, 20FB45DA,C49F,4293,AB02,13,3F,8C,CA,DD,69);
+
208 
+
209 /**
+
210  * Auto White-Balance States.
+
211  */
+
212 DEFINE_NAMED_UUID_CLASS(AwbState);
+
213 DEFINE_UUID(AwbState, AWB_STATE_INACTIVE, E33CDB30,9C16,11E8,B568,18,00,20,0C,9A,66);
+
214 DEFINE_UUID(AwbState, AWB_STATE_SEARCHING, E33CDB31,9C16,11E8,B568,18,00,20,0C,9A,66);
+
215 DEFINE_UUID(AwbState, AWB_STATE_CONVERGED, E33CDB32,9C16,11E8,B568,18,00,20,0C,9A,66);
+
216 DEFINE_UUID(AwbState, AWB_STATE_LOCKED, E33CDB33,9C16,11E8,B568,18,00,20,0C,9A,66);
+
217 
+
218 /**
+
219  * A CaptureIntent may be provided during capture request creation to initialize the new
+
220  * Request with default settings that are appropriate for captures of the given intent.
+
221  * More details regarding each intent are as follows:
+
222  * MANUAL intent disables auto white balance and auto-focus.
+
223  * PREVIEW intent disables noise reduction related post-processing in order to
+
224  * reduce latency and resource usage.
+
225  * STILL_CAPTURE intent enables Noise Reduction related post-processing in order
+
226  * to optimize still image quality.
+
227  * VIDEO_RECORD intent enables motion sensors related post-processing to optimize
+
228  * the video quality.
+
229  * Apart from above processing blocks each intent also helps in optimizing the
+
230  * processing resource usage appropriate for that intent.
+
231  */
+
232 DEFINE_NAMED_UUID_CLASS(CaptureIntent);
+
233 DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_MANUAL, FB3F3663,CC62,11E5,9956,62,56,62,87,07,61);
+
234 DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_PREVIEW, FB3F3664,CC62,11E5,9956,62,56,62,87,07,61);
+
235 DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_STILL_CAPTURE, FB3F3665,CC62,11E5,9956,62,56,62,87,07,61);
+
236 DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_VIDEO_RECORD, FB3F3666,CC62,11E5,9956,62,56,62,87,07,61);
+
237 DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_VIDEO_SNAPSHOT, FB3F3667,CC62,11E5,9956,62,56,62,87,07,61);
+
238 
+
239 /**
+
240  * Denoise (noise reduction) Modes.
+
241  */
+
242 DEFINE_NAMED_UUID_CLASS(DenoiseMode);
+
243 DEFINE_UUID(DenoiseMode, DENOISE_MODE_OFF, FB3F3668,CC62,11E5,9956,62,56,62,87,07,61);
+
244 DEFINE_UUID(DenoiseMode, DENOISE_MODE_FAST, FB3F3669,CC62,11E5,9956,62,56,62,87,07,61);
+
245 DEFINE_UUID(DenoiseMode, DENOISE_MODE_HIGH_QUALITY, FB3F366A,CC62,11E5,9956,62,56,62,87,07,61);
+
246 
+
247 /**
+
248  * Edge Enhance Modes.
+
249  */
+
250 DEFINE_NAMED_UUID_CLASS(EdgeEnhanceMode);
+
251 DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_OFF, F7100B40,6A5F,11E6,BDF4,08,00,20,0C,9A,66);
+
252 DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_FAST, F7100B41,6A5F,11E6,BDF4,08,00,20,0C,9A,66);
+
253 DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_HIGH_QUALITY, F7100B42,6A5F,11E6,BDF4,08,00,20,0C,9A,66);
+
254 
+
255 /**
+
256  * Extension Names. Note that ExtensionName UUIDs are defined by their respective extension headers.
+
257  */
+
258 DEFINE_NAMED_UUID_CLASS(ExtensionName);
+
259 
+
260 /**
+
261  * Pixel formats.
+
262  */
+
263 DEFINE_NAMED_UUID_CLASS(PixelFormat);
+
264 DEFINE_UUID(PixelFormat, PIXEL_FMT_UNKNOWN, 00000000,93d5,11e5,0000,1c,b7,2c,ef,d4,1e);
+
265 DEFINE_UUID(PixelFormat, PIXEL_FMT_Y8, 569be14a,93d5,11e5,91bc,1c,b7,2c,ef,d4,1e);
+
266 DEFINE_UUID(PixelFormat, PIXEL_FMT_Y16, 56ddb19c,93d5,11e5,8e2c,1c,b7,2c,ef,d4,1e);
+
267 DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_420_888, 570c10e6,93d5,11e5,8ff3,1c,b7,2c,ef,d4,1e);
+
268 DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_422_888, 573a7940,93d5,11e5,99c2,1c,b7,2c,ef,d4,1e);
+
269 DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_444_888, 576043dc,93d5,11e5,8983,1c,b7,2c,ef,d4,1e);
+
270 DEFINE_UUID(PixelFormat, PIXEL_FMT_JPEG_BLOB, 578b08c4,93d5,11e5,9686,1c,b7,2c,ef,d4,1e);
+
271 DEFINE_UUID(PixelFormat, PIXEL_FMT_RAW16, 57b484d8,93d5,11e5,aeb6,1c,b7,2c,ef,d4,1e);
+
272 DEFINE_UUID(PixelFormat, PIXEL_FMT_P016, 57b484d9,93d5,11e5,aeb6,1c,b7,2c,ef,d4,1e);
+
273 
+
274 /**
+
275  * The SensorModeType of a sensor defines the type of image data that is output by the
+
276  * imaging sensor before any sort of image processing (ie. pre-ISP format).
+
277  */
+
278 DEFINE_NAMED_UUID_CLASS(SensorModeType);
+
279 DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_DEPTH, 64483464,4b91,11e6,bbbd,40,16,7e,ab,86,92);
+
280 DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_YUV, 6453e00c,4b91,11e6,871d,40,16,7e,ab,86,92);
+
281 DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_RGB, 6463d4c6,4b91,11e6,88a3,40,16,7e,ab,86,92);
+
282 DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER, 646f04ea,4b91,11e6,9c06,40,16,7e,ab,86,92);
+
283 DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER_PWL, f6a08220,6a0f,11eb,8572,08,00,20,0c,9a,66);
+
284 DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER_DOL, f6a08221,6a0f,11eb,8572,08,00,20,0c,9a,66);
+
285 
+
286 /**
+
287  * SensorPlacement defines the placement of the sensor on the module
+
288  */
+
289 DEFINE_NAMED_UUID_CLASS(SensorPlacement);
+
290 DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_REAR_OR_BOTTOM_OR_BOTTOM_LEFT, 01dba8b0,1946,11eb,8b6f,08,00,20,0c,9a,66);
+
291 DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_FRONT_OR_TOP_OR_CENTER_LEFT, 01dba8b1,1946,11eb,8b6f,08,00,20,0c,9a,66);
+
292 DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_CENTER_OR_CENTER_RIGHT, 01dba8b2,1946,11eb,8b6f,08,00,20,0c,9a,66);
+
293 DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_TOP_LEFT, 01dba8b3,1946,11eb,8b6f,08,00,20,0c,9a,66);
+
294 DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_BOTTOM_RIGHT, 01dba8b4,1946,11eb,8b6f,08,00,20,0c,9a,66);
+
295 DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_TOP_RIGHT, 01dba8b5,1946,11eb,8b6f,08,00,20,0c,9a,66);
+
296 
+
297 /**
+
298  * Bayer Phases
+
299  */
+
300 DEFINE_NAMED_UUID_CLASS(BayerPhase);
+
301 DEFINE_UUID(BayerPhase, BAYER_PHASE_UNKNOWN, b9d43270,6a0e,12eb,8572,08,00,20,0c,9a,66);
+
302 DEFINE_UUID(BayerPhase, BAYER_PHASE_RGGB, b9d43271,6a0e,12eb,8572,08,00,20,0c,9a,66);
+
303 DEFINE_UUID(BayerPhase, BAYER_PHASE_BGGR, b9d43272,6a0e,12eb,8572,08,00,20,0c,9a,66);
+
304 DEFINE_UUID(BayerPhase, BAYER_PHASE_GRBG, b9d43273,6a0e,12eb,8572,08,00,20,0c,9a,66);
+
305 DEFINE_UUID(BayerPhase, BAYER_PHASE_GBRG, b9d43274,6a0e,12eb,8572,08,00,20,0c,9a,66);
+
306 
+
307 /**
+
308  * Utility class for libargus interfaces.
+
309  */
+ +
311 {
+
312 protected:
+ +
314 
+
315 private:
+
316  NonCopyable(NonCopyable& other);
+ +
318 };
+
319 
+
320 /**
+
321  * The top-level interface class.
+
322  *
+
323  * By convention, every Interface subclass exposes a public static method called @c id(),
+
324  * which returns the unique InterfaceID for that interface.
+
325  * This is required for the @c interface_cast<> template to work with that interface.
+
326  */
+ +
328 {
+
329 protected:
+ + +
332 };
+
333 
+
334 /**
+
335  * A unique identifier for a libargus Interface.
+
336  */
+
337 class InterfaceID : public NamedUUID
+
338 {
+
339 public:
+
340  InterfaceID(uint32_t time_low_
+
341  , uint16_t time_mid_
+
342  , uint16_t time_hi_and_version_
+
343  , uint16_t clock_seq_
+
344  , uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5
+
345  , const char* name)
+
346  : NamedUUID(time_low_, time_mid_, time_hi_and_version_, clock_seq_,
+
347  c0, c1, c2, c3, c4, c5, name)
+
348  {}
+
349 
+ +
351  : NamedUUID(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "IID_UNSPECIFIED")
+
352  {}
+
353 };
+
354 
+
355 /**
+
356  * The base interface for a class that provides libargus Interfaces.
+
357  */
+ +
359 {
+
360 public:
+
361 
+
362  /**
+
363  * Acquire the interface specified by @c interfaceId.
+
364  * @returns An instance of the requested interface,
+
365  * or NULL if that interface is not available.
+
366  */
+
367  virtual Interface* getInterface(const InterfaceID& interfaceId) = 0;
+
368 
+
369 protected:
+ +
371 };
+
372 
+
373 /**
+
374  * Interface-casting helper similar to dynamic_cast.
+
375  */
+
376 
+
377 template <typename TheInterface>
+
378 inline TheInterface* interface_cast(InterfaceProvider* obj)
+
379 {
+
380  return static_cast<TheInterface*>(obj ? obj->getInterface(TheInterface::id()): 0);
+
381 }
+
382 
+
383 template <typename TheInterface>
+
384 inline TheInterface* interface_cast(const InterfaceProvider* obj)
+
385 {
+
386  return static_cast<TheInterface*>(
+
387  obj ? const_cast<const Interface*>(
+
388  const_cast<InterfaceProvider*>(obj)->getInterface(TheInterface::id())): 0);
+
389 }
+
390 
+
391 /**
+
392  * A top level object class for libargus objects that are created and owned by
+
393  * the client. All Destructable objects created by the client must be explicitly destroyed.
+
394  */
+ +
396 {
+
397 public:
+
398 
+
399  /**
+
400  * Destroy this object.
+
401  * After making this call, the client cannot make any more calls on this object.
+
402  */
+
403  virtual void destroy() = 0;
+
404 
+
405 protected:
+ +
407 };
+
408 
+
409 /**
+
410  * Template helper emulating C++11 rvalue semantics.
+
411  * @cond
+
412  */
+
413 template<typename T>
+
414 class rv : public T
+
415 {
+
416  rv();
+
417  ~rv();
+
418  rv(const rv&);
+
419  void operator=(const rv&);
+
420 };
+
421 
+
422 template<typename T>
+
423  rv<T>& move(T& self)
+
424 {
+
425  return *static_cast<rv<T>*>(&self);
+
426 }
+
427 /** @endcond */
+
428 
+
429 /**
+
430  * Movable smart pointer mimicking std::unique_ptr.
+
431  * @cond
+
432  */
+
433 template <typename T> struct remove_const;
+
434 template <typename T> struct remove_const<const T&>{ typedef T& type; };
+
435 template <typename T> struct remove_const<const T*>{ typedef T* type; };
+
436 template <typename T> struct remove_const<const T >{ typedef T type; };
+
437 template <typename T> struct remove_const { typedef T type; };
+
438 /** @endcond */
+
439 
+
440 template <typename T>
+ +
442 {
+
443 public:
+
444  explicit UniqueObj(T* obj=NULL): m_obj(obj) {}
+
445 
+
446  void reset(T* obj=NULL)
+
447  { if (m_obj && (m_obj != obj)) const_cast<typename remove_const<T*>::type>(m_obj)->destroy(); m_obj = obj; }
+
448  T* release()
+
449  { T* obj = m_obj; m_obj = NULL; return obj; }
+
450 
+
451  UniqueObj( rv<UniqueObj>& moved ): m_obj(moved.release()) {}
+
452  UniqueObj& operator=( rv<UniqueObj>& moved ){ reset( moved.release()); return *this; }
+
453 
+
454  ~UniqueObj() { reset(); }
+
455 
+
456  T& operator*() const { return *m_obj; }
+
457  T* get() const { return m_obj; }
+
458 
+
459  operator bool() const { return !!m_obj; }
+
460 
+
461  operator rv<UniqueObj>&() { return *static_cast< rv<UniqueObj>*>(this); }
+
462  operator const rv<UniqueObj>&() const { return *static_cast<const rv<UniqueObj>*>(this); }
+
463 
+
464 private:
+
465  T* m_obj;
+
466 
+
467  T* operator->() const; // Prevent calling destroy() directly.
+
468  // Note: For getInterface functionality use interface_cast.
+
469 };
+
470 
+
471 template <typename TheInterface, typename TObject>
+
472 inline TheInterface* interface_cast(const UniqueObj<TObject>& obj)
+
473 {
+
474  return interface_cast<TheInterface>( obj.get());
+
475 }
+
476 
+
477 /**
+
478  * Tuple template class. This provides a finite ordered list of N elements having type T.
+
479  */
+
480 template <unsigned int N, typename T>
+
481 class Tuple
+
482 {
+
483 public:
+
484  Tuple() {}
+
485 
+
486  /// Initialize every element of the tuple to a single value.
+
487  Tuple(T init)
+
488  {
+
489  for (unsigned int i = 0; i < N; i++)
+
490  m_data[i] = init;
+
491  }
+
492 
+
493  /// Returns true when every element in the two tuples are identical.
+
494  bool operator==(const Tuple<N,T>& rhs) const
+
495  {
+
496  return !memcmp(m_data, rhs.m_data, sizeof(m_data));
+
497  }
+
498 
+
499  /// Returns true if there are any differences between the two tuples.
+
500  bool operator!=(const Tuple<N,T>& rhs) const
+
501  {
+
502  return !(*this == rhs);
+
503  }
+
504 
+
505  /// Adds every element of another tuple to the elements of this tuple.
+ +
507  {
+
508  for (unsigned int i = 0; i < N; i++)
+
509  m_data[i] += rhs.m_data[i];
+
510  return *this;
+
511  }
+
512 
+
513  /// Subtracts every element of another tuple from the elements of this tuple.
+ +
515  {
+
516  for (unsigned int i = 0; i < N; i++)
+
517  m_data[i] -= rhs.m_data[i];
+
518  return *this;
+
519  }
+
520 
+
521  /// Multiplies every element in the tuple by a single value.
+
522  Tuple<N, T>& operator*=(const T& rhs)
+
523  {
+
524  for (unsigned int i = 0; i < N; i++)
+
525  m_data[i] *= rhs;
+
526  return *this;
+
527  }
+
528 
+
529  /// Divides every element in the tuple by a single value.
+
530  Tuple<N, T>& operator/=(const T& rhs)
+
531  {
+
532  for (unsigned int i = 0; i < N; i++)
+
533  m_data[i] /= rhs;
+
534  return *this;
+
535  }
+
536 
+
537  /// Returns the result of adding another tuple to this tuple.
+
538  const Tuple<N, T> operator+(const Tuple<N, T>& rhs) const
+
539  {
+
540  return Tuple<N, T>(*this) += rhs;
+
541  }
+
542 
+
543  /// Returns the result of subtracting another tuple from this tuple.
+
544  const Tuple<N, T> operator-(const Tuple<N, T>& rhs) const
+
545  {
+
546  return Tuple<N, T>(*this) -= rhs;
+
547  }
+
548 
+
549  /// Returns the result of multiplying this tuple by a single value.
+
550  const Tuple<N, T> operator*(const T& rhs) const
+
551  {
+
552  return Tuple<N, T>(*this) *= rhs;
+
553  }
+
554 
+
555  /// Returns the result of dividing this tuple by a single value.
+
556  const Tuple<N, T> operator/(const T& rhs) const
+
557  {
+
558  return Tuple<N, T>(*this) /= rhs;
+
559  }
+
560 
+
561  T& operator[](unsigned int i) { assert(i < N); return m_data[i]; }
+
562  const T& operator[](unsigned int i) const { assert(i < N); return m_data[i]; }
+
563 
+
564  /// Returns the number of elements in the tuple.
+
565  static unsigned int tupleSize() { return N; }
+
566 
+
567 protected:
+
568  T m_data[N];
+
569 };
+
570 
+
571 /**
+
572  * BayerTuple template class. This is a Tuple specialization containing 4 elements corresponding
+
573  * to the Bayer color channels: R, G_EVEN, G_ODD, and B. Values can be accessed using the named
+
574  * methods or subscript indexing using the Argus::BayerChannel enum.
+
575  */
+
576 template <typename T>
+
577 class BayerTuple : public Tuple<BAYER_CHANNEL_COUNT, T>
+
578 {
+
579 public:
+ + +
582 
+
583  BayerTuple(T init)
+
584  {
+
585  r() = gEven() = gOdd() = b() = init;
+
586  }
+
587 
+
588  BayerTuple(T _r, T _gEven, T _gOdd, T _b)
+
589  {
+
590  r() = _r;
+
591  gEven() = _gEven;
+
592  gOdd() = _gOdd;
+
593  b() = _b;
+
594  }
+
595 
+ + + + + + + + +
604 };
+
605 
+
606 /**
+
607  * RGBTuple template class. This is a Tuple specialization containing 3 elements corresponding
+
608  * to the RGB color channels: R, G, and B. Values can be accessed using the named methods or
+
609  * subscript indexing using the Argus::RGBChannel enum.
+
610  */
+
611 template <typename T>
+
612 class RGBTuple : public Tuple<RGB_CHANNEL_COUNT, T>
+
613 {
+
614 public:
+
615  RGBTuple() {}
+ +
617 
+
618  RGBTuple(T init)
+
619  {
+
620  r() = g() = b() = init;
+
621  }
+
622 
+
623  RGBTuple(T _r, T _g, T _b)
+
624  {
+
625  r() = _r;
+
626  g() = _g;
+
627  b() = _b;
+
628  }
+
629 
+ + + + + + +
636 };
+
637 
+
638 /**
+
639  * Point2D template class. This is a Tuple specialization containing 2 elements corresponding
+
640  * to the x and y coordinates a 2D point. Values can be accessed using the named methods or
+
641  * subscript indexing using the Argus::Coordinate enum.
+
642  */
+
643 template <typename T>
+
644 class Point2D : public Tuple<COORDINATE_2D_COUNT, T>
+
645 {
+
646 public:
+
647  Point2D() {}
+ +
649 
+
650  Point2D(T init)
+
651  {
+
652  x() = y() = init;
+
653  }
+
654 
+
655  Point2D(T _x, T _y)
+
656  {
+
657  x() = _x;
+
658  y() = _y;
+
659  }
+
660 
+ + + + +
665 };
+
666 
+
667 
+
668 /**
+
669  * Point3D template class. This is a Tuple specialization containing 3 elements corresponding
+
670  * to the x, y and z coordinates of a 3D point. Values can be accessed using the named methods or
+
671  * subscript indexing using the Argus::Coordinate enum.
+
672  */
+
673 template <typename T>
+
674 class Point3D : public Tuple<COORDINATE_3D_COUNT, T>
+
675 {
+
676 public:
+
677  Point3D() {}
+ +
679 
+
680  Point3D(T init)
+
681  {
+
682  x() = y() = z() = init;
+
683  }
+
684 
+
685  Point3D(T _x, T _y, T _z)
+
686  {
+
687  x() = _x;
+
688  y() = _y;
+
689  z() = _z;
+
690  }
+
691 
+ + + + + + +
698 };
+
699 
+
700 /**
+
701  * Size2D template class. This is a Tuple specialization containing 2 elements corresponding to the
+
702  * width and height of a 2D size, in that order. Values can be accessed using the named methods.
+
703  */
+
704 template <typename T>
+
705 class Size2D : public Tuple<2, T>
+
706 {
+
707 public:
+
708  Size2D() {}
+
709  Size2D(const Tuple<2, T>& other) : Tuple<2, T>(other) {}
+
710 
+
711  Size2D(T init)
+
712  {
+
713  width() = height() = init;
+
714  }
+
715 
+
716  Size2D(T _width, T _height)
+
717  {
+
718  width() = _width;
+
719  height() = _height;
+
720  }
+
721 
+
722  T& width() { return Tuple<2, T>::m_data[0]; }
+
723  const T& width() const { return Tuple<2, T>::m_data[0]; }
+
724  T& height() { return Tuple<2, T>::m_data[1]; }
+
725  const T& height() const { return Tuple<2, T>::m_data[1]; }
+
726 
+
727  /// Returns the area of the size (width * height).
+
728  T area() const { return width() * height(); }
+
729 };
+
730 
+
731 /**
+
732  * Rectangle template class. This is a Tuple specialization containing 4 elements corresponding
+
733  * to the positions of the left, top, right, and bottom edges of a rectangle, in that order.
+
734  * Values can be accessed using the named methods.
+
735  */
+
736 template <typename T>
+
737 class Rectangle : public Tuple<4, T>
+
738 {
+
739 public:
+ +
741  Rectangle(const Tuple<4, T>& other) : Tuple<4, T>(other) {}
+
742 
+
743  Rectangle(T init)
+
744  {
+
745  left() = top() = right() = bottom() = init;
+
746  }
+
747 
+
748  Rectangle(T _left, T _top, T _right, T _bottom)
+
749  {
+
750  left() = _left;
+
751  top() = _top;
+
752  right() = _right;
+
753  bottom() = _bottom;
+
754  }
+
755 
+
756  T& left() { return Tuple<4, T>::m_data[0]; }
+
757  const T& left() const { return Tuple<4, T>::m_data[0]; }
+
758  T& top() { return Tuple<4, T>::m_data[1]; }
+
759  const T& top() const { return Tuple<4, T>::m_data[1]; }
+
760  T& right() { return Tuple<4, T>::m_data[2]; }
+
761  const T& right() const { return Tuple<4, T>::m_data[2]; }
+
762  T& bottom() { return Tuple<4, T>::m_data[3]; }
+
763  const T& bottom() const { return Tuple<4, T>::m_data[3]; }
+
764 
+
765  /// Returns the width of the rectangle.
+
766  T width() const { return right() - left(); }
+
767 
+
768  /// Returns the height of the rectangle.
+
769  T height() const { return bottom() - top(); }
+
770 
+
771  /// Returns the area of the rectangle (width * height).
+
772  T area() const { return width() * height(); }
+
773 };
+
774 
+
775 /**
+
776  * Range template class. This is a Tuple specialization containing 2 elements corresponding to the
+
777  * min and max values of the range, in that order. Values can be accessed using the named methods.
+
778  */
+
779 template <typename T>
+
780 class Range : public Tuple<2, T>
+
781 {
+
782 public:
+
783  Range() {}
+
784  Range(const Tuple<2, T>& other) : Tuple<2, T>(other) {}
+
785 
+
786  Range(T init)
+
787  {
+
788  min() = max() = init;
+
789  }
+
790 
+
791  Range(T _min, T _max)
+
792  {
+
793  min() = _min;
+
794  max() = _max;
+
795  }
+
796 
+
797  T& min() { return Tuple<2, T>::m_data[0]; }
+
798  const T& min() const { return Tuple<2, T>::m_data[0]; }
+
799  T& max() { return Tuple<2, T>::m_data[1]; }
+
800  const T& max() const { return Tuple<2, T>::m_data[1]; }
+
801 
+
802  bool empty() const { return max() < min(); }
+
803 };
+
804 
+
805 /**
+
806  * Defines an autocontrol region of interest (in pixel space). This region consists of a rectangle
+
807  * (inherited from the Rectangle<uint32_t> Tuple) and a floating point weight value.
+
808  */
+
809 class AcRegion : public Rectangle<uint32_t>
+
810 {
+
811 public:
+ +
813  : Rectangle<uint32_t>(0, 0, 0, 0)
+
814  , m_weight(1.0f)
+
815  {}
+
816 
+
817  AcRegion(uint32_t _left, uint32_t _top, uint32_t _right, uint32_t _bottom, float _weight)
+
818  : Rectangle<uint32_t>(_left, _top, _right, _bottom)
+
819  , m_weight(_weight)
+
820  {}
+
821 
+
822  float& weight() { return m_weight; }
+
823  const float& weight() const { return m_weight; }
+
824 
+
825 protected:
+
826  float m_weight;
+
827 };
+
828 
+
829 /**
+
830  * A template class to hold a 2-dimensional array of data.
+
831  * Data in this array is tightly packed in a 1-dimensional vector in row-major order;
+
832  * that is, the vector index for any value given its 2-dimensional location (Point2D) is
+
833  * index = location.x() + (location.y() * size.x());
+
834  * Indexing operators using iterators, 1-dimensional, or 2-dimensional coordinates are provided.
+
835  */
+
836 template <typename T>
+
837 class Array2D
+
838 {
+
839 public:
+
840  // Iterator types.
+
841  typedef T* iterator;
+
842  typedef const T* const_iterator;
+
843 
+
844  /// Default Constructor.
+
845  Array2D() : m_size(0, 0) {}
+
846 
+
847  /// Constructor given initial array size.
+ +
849  {
+
850  m_data.resize(size.width() * size.height());
+
851  }
+
852 
+
853  /// Constructor given initial array size and initial fill value.
+
854  Array2D(const Size2D<uint32_t>& size, const T& value) : m_size(size)
+
855  {
+
856  m_data.resize(size.width() * size.height(), value);
+
857  }
+
858 
+
859  /// Copy constructor.
+
860  Array2D(const Array2D<T>& other)
+
861  {
+
862  m_data = other.m_data;
+
863  m_size = other.m_size;
+
864  }
+
865 
+
866  /// Assignment operator.
+ +
868  {
+
869  m_data = other.m_data;
+
870  m_size = other.m_size;
+
871  return *this;
+
872  }
+
873 
+
874  /// Equality operator.
+
875  bool operator== (const Array2D<T>& other) const
+
876  {
+
877  return (m_size == other.m_size && m_data == other.m_data);
+
878  }
+
879 
+
880  /// Returns the size (dimensions) of the array.
+
881  Size2D<uint32_t> size() const { return m_size; }
+
882 
+
883  /// Resize the array. Array contents after resize are undefined.
+
884  /// Boolean return value enables error checking when exceptions are not available.
+ +
886  {
+
887  uint32_t s = size.width() * size.height();
+
888  m_data.resize(s);
+
889  if (m_data.size() != s)
+
890  return false;
+
891  m_size = size;
+
892  return true;
+
893  }
+
894 
+
895  /// STL style iterators.
+
896  inline const_iterator begin() const { return m_data.data(); }
+
897  inline const_iterator end() const { return m_data.data() + m_data.size(); }
+
898  inline iterator begin() { return m_data.data(); }
+
899  inline iterator end() { return m_data.data() + m_data.size(); }
+
900 
+
901  /// Array indexing using [] operator.
+
902  T& operator[](unsigned int i) { return m_data[checkIndex(i)]; }
+
903  const T& operator[](unsigned int i) const { return m_data[checkIndex(i)]; }
+
904 
+
905  /// Array indexing using () operator.
+
906  inline const T& operator() (uint32_t i) const { return m_data[checkIndex(i)]; }
+
907  inline const T& operator() (uint32_t x, uint32_t y) const { return m_data[checkIndex(x, y)]; }
+
908  inline const T& operator() (const Point2D<uint32_t>& p) const
+
909  { return m_data[checkIndex(p.x(), p.y())]; }
+
910  inline T& operator() (uint32_t i) { return m_data[checkIndex(i)]; }
+
911  inline T& operator() (uint32_t x, uint32_t y) { return m_data[checkIndex(x, y)]; }
+
912  inline T& operator() (const Point2D<uint32_t>& p)
+
913  { return m_data[checkIndex(p.x(), p.y())]; }
+
914 
+
915  // Get pointers to data.
+
916  inline const T* data() const { return m_data.data(); }
+
917  inline T* data() { return m_data.data(); }
+
918 
+
919 private:
+
920  inline uint32_t checkIndex(uint32_t i) const
+
921  {
+
922  assert(i < m_data.size());
+
923  return i;
+
924  }
+
925 
+
926  inline uint32_t checkIndex(uint32_t x, uint32_t y) const
+
927  {
+
928  assert(x < m_size.width());
+
929  assert(y < m_size.height());
+
930  return x + (y * m_size.width());
+
931  }
+
932 
+
933  std::vector<T> m_data;
+ +
935 };
+
936 
+
937 typedef uint32_t AutoControlId;
+
938 
+
939 } // namespace Argus
+
940 
+
941 #endif // _ARGUS_TYPES_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/UUID_8h.html b/jetson_multimedia_api/argus/docs/doxygen/html/UUID_8h.html new file mode 100644 index 0000000..5db4dcb --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/UUID_8h.html @@ -0,0 +1,266 @@ + + + + + +Libargus API: include/Argus/UUID.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
UUID.h File Reference
+
+
+ +

Libargus API: UUID API +More...

+
#include <stdint.h>
+#include <cstring>
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

struct  Argus::UUID
 A universally unique identifier. More...
class  Argus::NamedUUID
 A universally unique identifier with a name (used for debugging purposes). More...
+ + +

+Namespaces

namespace  Argus
+ + + + +

+Macros

#define DEFINE_UUID(TYPE, NAME, l, s0, s1, s2, c0, c1, c2, c3, c4, c5)
 Helper macro used to define NamedUUID-derived values.
#define DEFINE_NAMED_UUID_CLASS(NAME)
+ + +

+Variables

const uint32_t Argus::MAX_UUID_NAME_SIZE = 32
+

Detailed Description

+

Libargus API: UUID API

+

Description: Defines the UUID types used by libargus.

+ +

Definition in file UUID.h.

+

Macro Definition Documentation

+ +
+
+ + + + + + + + +
#define DEFINE_NAMED_UUID_CLASS( NAME)
+
+Value:
class NAME : public NamedUUID \
+
{ \
+
public: \
+
NAME(uint32_t time_low_ \
+
, uint16_t time_mid_ \
+
, uint16_t time_hi_and_version_ \
+
, uint16_t clock_seq_ \
+
, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5 \
+
, const char* name) \
+
: NamedUUID(time_low_, time_mid_, time_hi_and_version_, clock_seq_, \
+
c0, c1, c2, c3, c4, c5, name) \
+
{} \
+
private: \
+
NAME();\
+
};
+
+

Definition at line 128 of file UUID.h.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define DEFINE_UUID( TYPE,
 NAME,
 l,
 s0,
 s1,
 s2,
 c0,
 c1,
 c2,
 c3,
 c4,
 c5 
)
+
+Value:
static const TYPE NAME(0x##l, 0x##s0, 0x##s1, 0x##s2, \
+
0x##c0, 0x##c1, 0x##c2, 0x##c3, 0x##c4, 0x##c5, #NAME);
+
+

Helper macro used to define NamedUUID-derived values.

+ +

Definition at line 124 of file UUID.h.

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/UUID_8h_source.html b/jetson_multimedia_api/argus/docs/doxygen/html/UUID_8h_source.html new file mode 100644 index 0000000..5bfbe89 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/UUID_8h_source.html @@ -0,0 +1,248 @@ + + + + + +Libargus API: include/Argus/UUID.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
UUID.h
+
+
+Go to the documentation of this file.
1 /*
+
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
+
3  *
+
4  * Redistribution and use in source and binary forms, with or without
+
5  * modification, are permitted provided that the following conditions
+
6  * are met:
+
7  * * Redistributions of source code must retain the above copyright
+
8  * notice, this list of conditions and the following disclaimer.
+
9  * * Redistributions in binary form must reproduce the above copyright
+
10  * notice, this list of conditions and the following disclaimer in the
+
11  * documentation and/or other materials provided with the distribution.
+
12  * * Neither the name of NVIDIA CORPORATION nor the names of its
+
13  * contributors may be used to endorse or promote products derived
+
14  * from this software without specific prior written permission.
+
15  *
+
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+
20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+
21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
27  */
+
28 
+
29 /**
+
30  * @file
+
31  * <b>Libargus API: UUID API</b>
+
32  *
+
33  * @b Description: Defines the UUID types used by libargus.
+
34  */
+
35 
+
36 #ifndef _ARGUS_UUID_H
+
37 #define _ARGUS_UUID_H
+
38 
+
39 #include <stdint.h>
+
40 #include <cstring>
+
41 
+
42 namespace Argus
+
43 {
+
44 
+
45 const uint32_t MAX_UUID_NAME_SIZE = 32;
+
46 
+
47 /**
+
48  * A universally unique identifier.
+
49  */
+
50 struct UUID
+
51 {
+
52  uint32_t time_low;
+
53  uint16_t time_mid;
+ +
55  uint16_t clock_seq;
+
56  uint8_t node[6];
+
57 
+
58  bool operator==(const UUID &r) const
+
59  {
+
60  return memcmp(this, &r, sizeof(UUID)) == 0;
+
61  }
+
62 
+
63  bool operator<(const UUID &r) const
+
64  {
+
65  return memcmp(this, &r, sizeof(UUID)) < 0;
+
66  }
+
67 };
+
68 
+
69 /**
+
70  * A universally unique identifier with a name (used for debugging purposes).
+
71  */
+
72 class NamedUUID : public UUID
+
73 {
+
74 public:
+
75  NamedUUID(uint32_t time_low_
+
76  , uint16_t time_mid_
+
77  , uint16_t time_hi_and_version_
+
78  , uint16_t clock_seq_
+
79  , uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5
+
80  , const char* name)
+
81  {
+
82  time_low = time_low_;
+
83  time_mid = time_mid_;
+
84  time_hi_and_version = time_hi_and_version_;
+
85  clock_seq = clock_seq_;
+
86  node[0] = c0; node[1] = c1; node[2] = c2; node[3] = c3; node[4] = c4; node[5] = c5;
+
87  strncpy(m_name, name, sizeof(m_name)-1);
+
88  m_name[sizeof(m_name)-1] = '\0';
+
89  }
+
90 
+
91  NamedUUID(const NamedUUID& copied)
+
92  : UUID(copied)
+
93  {
+
94  strncpy(m_name, copied.m_name, sizeof(m_name)-1);
+
95  m_name[sizeof(m_name)-1] = '\0';
+
96  }
+
97 
+
98  NamedUUID& operator=(const NamedUUID& copied)
+
99  {
+
100  static_cast<UUID&>(*this) = copied;
+
101 
+
102  return *this;
+
103  }
+
104 
+
105  bool operator==(const NamedUUID& compared) const
+
106  {
+
107  return static_cast<const UUID&>(*this) == compared;
+
108  }
+
109 
+
110  bool operator!=(const NamedUUID& compared) const
+
111  {
+
112  return !(static_cast<const UUID&>(*this) == compared);
+
113  }
+
114 
+
115  const char* getName() const { return m_name; }
+
116 
+
117 private:
+ +
119 
+
120  NamedUUID();
+
121 };
+
122 
+
123 /// Helper macro used to define NamedUUID-derived values.
+
124 #define DEFINE_UUID(TYPE, NAME, l, s0, s1, s2, c0,c1,c2,c3,c4,c5) \
+
125  static const TYPE NAME(0x##l, 0x##s0, 0x##s1, 0x##s2, \
+
126  0x##c0, 0x##c1, 0x##c2, 0x##c3, 0x##c4, 0x##c5, #NAME);
+
127 
+
128 #define DEFINE_NAMED_UUID_CLASS(NAME) \
+
129  class NAME : public NamedUUID \
+
130  { \
+
131  public: \
+
132  NAME(uint32_t time_low_ \
+
133  , uint16_t time_mid_ \
+
134  , uint16_t time_hi_and_version_ \
+
135  , uint16_t clock_seq_ \
+
136  , uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5 \
+
137  , const char* name) \
+
138  : NamedUUID(time_low_, time_mid_, time_hi_and_version_, clock_seq_, \
+
139  c0, c1, c2, c3, c4, c5, name) \
+
140  {} \
+
141  private: \
+
142  NAME();\
+
143  };
+
144 
+
145 } // namespace Argus
+
146 
+
147 #endif // _ARGUS_UUID_H
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/annotated.html b/jetson_multimedia_api/argus/docs/doxygen/html/annotated.html new file mode 100644 index 0000000..a6738ed --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/annotated.html @@ -0,0 +1,190 @@ + + + + + +Libargus API: Class List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\NArgus
 oNExt
 |oCIBayerAverageMapSettingsInterface to Bayer average map settings
 |oCIBayerAverageMapInterface to Bayer average map metadata
 |oCIBayerSharpnessMapSettingsInterface to Bayer sharpness map settings
 |oCIBayerSharpnessMapInterface to Bayer sharpness map metadata
 |oCIBlockingSessionCameraProviderInterface used to create blocking capture session
 |oCIDebugCaptureSessionInterface used to dump CaptureSession runtime information
 |oCIDeFogSettingsInterface to de-fog settings
 |oCIDolWdrSensorModeInterface to the properties of a DOL WDR device
 |oCIFaceDetectCapsInterface to expose the face detection capabilities of a CaptureSession
 |oCIFaceDetectSettingsInterface to face detection settings
 |oCIFaceDetectMetadataInterface to overall face detection results metadata
 |oCIFaceDetectResultInterface to the properties of a single face detection result
 |oCIInternalFrameCountInterface used to query the internal frame count for a request
 |oCINonLinearHistogramInterface used to query the metadata to correctly interpret the compressed histogram data
 |oCIPwlWdrSensorModeInterface to the properties of a PWL WDR device
 |oCISensorEepromDataInterface used to get EEPROM data
 |oCISensorOtpDataInterface used to get OTP data
 |oCISensorPrivateMetadataCapsInterface used to query the availability and size in bytes of sensor private metadata
 |oCISensorPrivateMetadataRequestInterface used enable the output of sensor private metadata for a request
 |oCISensorPrivateMetadataInterface used to access sensor private metadata
 |oCISensorPrivateMetadataClientBufferRequestInterface used to set client buffer for sensor private metadata for a request
 |oCISensorTimestampTscInterface used to get TSC HW timestamp
 |\CISyncSensorCalibrationDataInterface used to access sync sensor calibration data
 oCBuffer
 oCBufferSettings
 oCIBufferOutputStreamSettingsInterface that exposes the configuration available to Buffer-based OutputStreams
 oCIBufferOutputStreamInterface that provides the methods used with Buffer-based OutputStreams
 oCIBufferInterface that provides the core methods for Buffer objects
 oCCameraDevice
 oCICameraPropertiesInterface to the core CameraDevice properties
 oCSensorMode
 oCISensorModeInterface to the core properties of a SensorMode
 oCCameraProvider
 oCICameraProviderInterface to the core CameraProvider methods
 oCCaptureMetadata
 oCCaptureMetadataContainerAn object that holds a CaptureMetadata instance and is used to read the capture metadata from a consumer thread directly from the embedded EGLStream metadata
 oCIBayerHistogramInterface to Bayer histogram metadata (provided by ICaptureMetadata::getBayerHistogram())
 oCIRGBHistogramInterface to RGB histogram metadata (provided by ICaptureMetadata::getRGBHistogram())
 oCIStreamCaptureMetadataInterface to per-stream metadata (provided by ICaptureMetadata::getStreamMetadata())
 oCICaptureMetadataInterface to the core capture metadata
 oCIDenoiseMetadataInterface to denoise metadata
 oCIEdgeEnhanceMetadataInterface to edge enhancement metadata
 oCCaptureSession
 oCICaptureSessionInterface to the core CaptureSession methods
 oCIEGLImageBufferSettingsInterface that provides the settings used to configure EGLImage Buffer creation
 oCIEGLImageBufferInterface that provides methods to EGLImage Buffers
 oCIEGLOutputStreamSettingsInterface that exposes the settings used for EGLStream-linked OutputStream creation
 oCIEGLOutputStreamInterface that exposes the methods available to an EGLStream-linked OutputStream
 oCIEGLSyncInterface that provides EGLSync input and output methods for a Buffer
 oCEvent
 oCEventTypeA unique identifier for a particular type of Event
 oCIEventInterface to the common Event properties
 oCIEventErrorInterface exposed by Events having type EVENT_TYPE_ERROR
 oCIEventCaptureCompleteInterface exposed by Events having type EVENT_TYPE_CAPTURE_COMPLETE
 oCIEventProviderInterface for an object which generates Events (such as CaptureSession)
 oCEventQueue
 oCIEventQueueInterface to the core EventQueue methods
 oCRequest
 oCIRequestInterface to the core Request settings
 oCISourceSettingsInterface to the source settings (provided by IRequest::getSourceSettings())
 oCIAutoControlSettingsInterface to the auto control settings (provided by IRequest::getAutoControlSettings())
 oCIStreamSettingsInterface to per-stream settings (provided by IRequest::getStreamSettings())
 oCIDenoiseSettingsInterface to denoise settings
 oCIEdgeEnhanceSettingsInterface to edge enhancement settings
 oCOutputStream
 oCOutputStreamSettings
 oCIOutputStreamSettingsInterface that exposes the settings common to all OutputStream types
 oCNonCopyableUtility class for libargus interfaces
 oCInterfaceThe top-level interface class
 oCInterfaceIDA unique identifier for a libargus Interface
 oCInterfaceProviderThe base interface for a class that provides libargus Interfaces
 oCDestructableA top level object class for libargus objects that are created and owned by the client
 oCUniqueObjTemplate helper emulating C++11 rvalue semantics
 oCTupleTuple template class
 oCBayerTupleBayerTuple template class
 oCRGBTupleRGBTuple template class
 oCPoint2DPoint2D template class
 oCPoint3DPoint3D template class
 oCSize2DSize2D template class
 oCRectangleRectangle template class
 oCRangeRange template class
 oCAcRegionDefines an autocontrol region of interest (in pixel space)
 oCArray2DA template class to hold a 2-dimensional array of data
 oCUUIDA universally unique identifier
 \CNamedUUIDA universally unique identifier with a name (used for debugging purposes)
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/bc_s.png b/jetson_multimedia_api/argus/docs/doxygen/html/bc_s.png new file mode 100644 index 0000000..25e3beb Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/bc_s.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/bdwn.png b/jetson_multimedia_api/argus/docs/doxygen/html/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/bdwn.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1AcRegion-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1AcRegion-members.html new file mode 100644 index 0000000..cc959a4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1AcRegion-members.html @@ -0,0 +1,142 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::AcRegion Member List
+
+
+ +

This is the complete list of members for Argus::AcRegion, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AcRegion()Argus::AcRegioninline
AcRegion(uint32_t _left, uint32_t _top, uint32_t _right, uint32_t _bottom, float _weight)Argus::AcRegioninline
area() constArgus::Rectangle< uint32_t >inline
bottom()Argus::Rectangle< uint32_t >inline
bottom() constArgus::Rectangle< uint32_t >inline
height() constArgus::Rectangle< uint32_t >inline
left()Argus::Rectangle< uint32_t >inline
left() constArgus::Rectangle< uint32_t >inline
m_dataArgus::Tuple< 4, uint32_t >protected
m_weightArgus::AcRegionprotected
operator!=(const Tuple< N, uint32_t > &rhs) constArgus::Tuple< 4, uint32_t >inline
operator*(const uint32_t &rhs) constArgus::Tuple< 4, uint32_t >inline
operator*=(const uint32_t &rhs)Argus::Tuple< 4, uint32_t >inline
operator+(const Tuple< N, uint32_t > &rhs) constArgus::Tuple< 4, uint32_t >inline
operator+=(const Tuple< N, uint32_t > &rhs)Argus::Tuple< 4, uint32_t >inline
operator-(const Tuple< N, uint32_t > &rhs) constArgus::Tuple< 4, uint32_t >inline
operator-=(const Tuple< N, uint32_t > &rhs)Argus::Tuple< 4, uint32_t >inline
operator/(const uint32_t &rhs) constArgus::Tuple< 4, uint32_t >inline
operator/=(const uint32_t &rhs)Argus::Tuple< 4, uint32_t >inline
operator==(const Tuple< N, uint32_t > &rhs) constArgus::Tuple< 4, uint32_t >inline
operator[](unsigned int i)Argus::Tuple< 4, uint32_t >inline
operator[](unsigned int i) constArgus::Tuple< 4, uint32_t >inline
Rectangle()Argus::Rectangle< uint32_t >inline
Rectangle(const Tuple< 4, uint32_t > &other)Argus::Rectangle< uint32_t >inline
Rectangle(uint32_tinit)Argus::Rectangle< uint32_t >inline
Rectangle(uint32_t_left, uint32_t_top, uint32_t_right, uint32_t_bottom)Argus::Rectangle< uint32_t >inline
right()Argus::Rectangle< uint32_t >inline
right() constArgus::Rectangle< uint32_t >inline
top()Argus::Rectangle< uint32_t >inline
top() constArgus::Rectangle< uint32_t >inline
Tuple()Argus::Tuple< 4, uint32_t >inline
Tuple(uint32_tinit)Argus::Tuple< 4, uint32_t >inline
tupleSize()Argus::Tuple< 4, uint32_t >inlinestatic
weight()Argus::AcRegioninline
weight() const Argus::AcRegioninline
width() constArgus::Rectangle< uint32_t >inline
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1AcRegion.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1AcRegion.html new file mode 100644 index 0000000..7154566 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1AcRegion.html @@ -0,0 +1,342 @@ + + + + + +Libargus API: Argus::AcRegion Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::AcRegion Class Reference
+
+
+ +

Defines an autocontrol region of interest (in pixel space). + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::AcRegion:
+
+
+ + +Argus::Rectangle< uint32_t > +Argus::Tuple< 4, uint32_t > + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 AcRegion ()
 AcRegion (uint32_t _left, uint32_t _top, uint32_t _right, uint32_t _bottom, float _weight)
float & weight ()
const float & weight () const
- Public Member Functions inherited from Argus::Rectangle< uint32_t >
 Rectangle ()
 Rectangle (const Tuple< 4, uint32_t > &other)
 Rectangle (uint32_tinit)
 Rectangle (uint32_t_left, uint32_t_top, uint32_t_right, uint32_t_bottom)
uint32_t & left ()
const uint32_t & left () const
uint32_t & top ()
const uint32_t & top () const
uint32_t & right ()
const uint32_t & right () const
uint32_t & bottom ()
const uint32_t & bottom () const
uint32_t width () const
 Returns the width of the rectangle.
uint32_t height () const
 Returns the height of the rectangle.
uint32_t area () const
 Returns the area of the rectangle (width * height).
- Public Member Functions inherited from Argus::Tuple< 4, uint32_t >
 Tuple ()
 Tuple (uint32_tinit)
 Initialize every element of the tuple to a single value.
bool operator== (const Tuple< N, uint32_t > &rhs) const
 Returns true when every element in the two tuples are identical.
bool operator!= (const Tuple< N, uint32_t > &rhs) const
 Returns true if there are any differences between the two tuples.
Tuple< N, uint32_t > & operator+= (const Tuple< N, uint32_t > &rhs)
 Adds every element of another tuple to the elements of this tuple.
Tuple< N, uint32_t > & operator-= (const Tuple< N, uint32_t > &rhs)
 Subtracts every element of another tuple from the elements of this tuple.
Tuple< N, uint32_t > & operator*= (const uint32_t &rhs)
 Multiplies every element in the tuple by a single value.
Tuple< N, uint32_t > & operator/= (const uint32_t &rhs)
 Divides every element in the tuple by a single value.
const Tuple< N, uint32_t > operator+ (const Tuple< N, uint32_t > &rhs) const
 Returns the result of adding another tuple to this tuple.
const Tuple< N, uint32_t > operator- (const Tuple< N, uint32_t > &rhs) const
 Returns the result of subtracting another tuple from this tuple.
const Tuple< N, uint32_t > operator* (const uint32_t &rhs) const
 Returns the result of multiplying this tuple by a single value.
const Tuple< N, uint32_t > operator/ (const uint32_t &rhs) const
 Returns the result of dividing this tuple by a single value.
uint32_t & operator[] (unsigned int i)
const uint32_t & operator[] (unsigned int i) const
+ + +

+Protected Attributes

float m_weight
+

Detailed Description

+

Defines an autocontrol region of interest (in pixel space).

+

This region consists of a rectangle (inherited from the Rectangle<uint32_t> Tuple) and a floating point weight value.

+ +

Definition at line 809 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::AcRegion::AcRegion ()
+
+inline
+
+ +

Definition at line 812 of file Types.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::AcRegion::AcRegion (uint32_t _left,
uint32_t _top,
uint32_t _right,
uint32_t _bottom,
float _weight 
)
+
+inline
+
+ +

Definition at line 817 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
float& Argus::AcRegion::weight ()
+
+inline
+
+ +

Definition at line 822 of file Types.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const float& Argus::AcRegion::weight () const
+
+inline
+
+ +

Definition at line 823 of file Types.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
float Argus::AcRegion::m_weight
+
+protected
+
+ +

Definition at line 826 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1AcRegion.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1AcRegion.png new file mode 100644 index 0000000..a65ad95 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1AcRegion.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Array2D-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Array2D-members.html new file mode 100644 index 0000000..207eb40 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Array2D-members.html @@ -0,0 +1,134 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Array2D< T > Member List
+
+
+ +

This is the complete list of members for Argus::Array2D< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Array2D()Argus::Array2D< T >inline
Array2D(const Size2D< uint32_t > &size)Argus::Array2D< T >inline
Array2D(const Size2D< uint32_t > &size, const T &value)Argus::Array2D< T >inline
Array2D(const Array2D< T > &other)Argus::Array2D< T >inline
begin() const Argus::Array2D< T >inline
begin()Argus::Array2D< T >inline
checkIndex(uint32_t i) const Argus::Array2D< T >inlineprivate
checkIndex(uint32_t x, uint32_t y) const Argus::Array2D< T >inlineprivate
const_iterator typedefArgus::Array2D< T >
data() const Argus::Array2D< T >inline
data()Argus::Array2D< T >inline
end() const Argus::Array2D< T >inline
end()Argus::Array2D< T >inline
iterator typedefArgus::Array2D< T >
m_dataArgus::Array2D< T >private
m_sizeArgus::Array2D< T >private
operator()(uint32_t i) const Argus::Array2D< T >inline
operator()(uint32_t x, uint32_t y) const Argus::Array2D< T >inline
operator()(const Point2D< uint32_t > &p) const Argus::Array2D< T >inline
operator()(uint32_t i)Argus::Array2D< T >inline
operator()(uint32_t x, uint32_t y)Argus::Array2D< T >inline
operator()(const Point2D< uint32_t > &p)Argus::Array2D< T >inline
operator=(const Array2D< T > &other)Argus::Array2D< T >inline
operator==(const Array2D< T > &other) const Argus::Array2D< T >inline
operator[](unsigned int i)Argus::Array2D< T >inline
operator[](unsigned int i) const Argus::Array2D< T >inline
resize(const Size2D< uint32_t > &size)Argus::Array2D< T >inline
size() const Argus::Array2D< T >inline
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Array2D.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Array2D.html new file mode 100644 index 0000000..e69673f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Array2D.html @@ -0,0 +1,989 @@ + + + + + +Libargus API: Argus::Array2D< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Array2D< T > Class Template Reference
+
+
+ +

A template class to hold a 2-dimensional array of data. + More...

+ +

#include <Types.h>

+ +

List of all members.

+ + + + +

+Public Types

typedef T * iterator
typedef const T * const_iterator
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Array2D ()
 Default Constructor.
 Array2D (const Size2D< uint32_t > &size)
 Constructor given initial array size.
 Array2D (const Size2D< uint32_t > &size, const T &value)
 Constructor given initial array size and initial fill value.
 Array2D (const Array2D< T > &other)
 Copy constructor.
Array2Doperator= (const Array2D< T > &other)
 Assignment operator.
bool operator== (const Array2D< T > &other) const
 Equality operator.
Size2D< uint32_t > size () const
 Returns the size (dimensions) of the array.
bool resize (const Size2D< uint32_t > &size)
 Resize the array.
const_iterator begin () const
 STL style iterators.
const_iterator end () const
iterator begin ()
iterator end ()
T & operator[] (unsigned int i)
 Array indexing using [] operator.
const T & operator[] (unsigned int i) const
const T & operator() (uint32_t i) const
 Array indexing using () operator.
const T & operator() (uint32_t x, uint32_t y) const
const T & operator() (const Point2D< uint32_t > &p) const
T & operator() (uint32_t i)
T & operator() (uint32_t x, uint32_t y)
T & operator() (const Point2D< uint32_t > &p)
const T * data () const
T * data ()
+ + + +

+Private Member Functions

uint32_t checkIndex (uint32_t i) const
uint32_t checkIndex (uint32_t x, uint32_t y) const
+ + + +

+Private Attributes

std::vector< T > m_data
Size2D< uint32_t > m_size
+

Detailed Description

+

template<typename T>
+class Argus::Array2D< T >

+ +

A template class to hold a 2-dimensional array of data.

+

Data in this array is tightly packed in a 1-dimensional vector in row-major order; that is, the vector index for any value given its 2-dimensional location (Point2D) is index = location.x() + (location.y() * size.x()); Indexing operators using iterators, 1-dimensional, or 2-dimensional coordinates are provided.

+ +

Definition at line 837 of file Types.h.

+

Member Typedef Documentation

+ +
+
+
+template<typename T>
+ + + + +
typedef const T* Argus::Array2D< T >::const_iterator
+
+ +

Definition at line 842 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + +
typedef T* Argus::Array2D< T >::iterator
+
+ +

Definition at line 841 of file Types.h.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
Argus::Array2D< T >::Array2D ()
+
+inline
+
+ +

Default Constructor.

+ +

Definition at line 845 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::Array2D< T >::Array2D (const Size2D< uint32_t > & size)
+
+inline
+
+ +

Constructor given initial array size.

+ +

Definition at line 848 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Argus::Array2D< T >::Array2D (const Size2D< uint32_t > & size,
const T & value 
)
+
+inline
+
+ +

Constructor given initial array size and initial fill value.

+ +

Definition at line 854 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::Array2D< T >::Array2D (const Array2D< T > & other)
+
+inline
+
+ +

Copy constructor.

+ +

Definition at line 860 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const_iterator Argus::Array2D< T >::begin () const
+
+inline
+
+ +

STL style iterators.

+ +

Definition at line 896 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
iterator Argus::Array2D< T >::begin ()
+
+inline
+
+ +

Definition at line 898 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
uint32_t Argus::Array2D< T >::checkIndex (uint32_t i) const
+
+inlineprivate
+
+ +

Definition at line 920 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
uint32_t Argus::Array2D< T >::checkIndex (uint32_t x,
uint32_t y 
) const
+
+inlineprivate
+
+ +

Definition at line 926 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T* Argus::Array2D< T >::data () const
+
+inline
+
+ +

Definition at line 916 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T* Argus::Array2D< T >::data ()
+
+inline
+
+ +

Definition at line 917 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const_iterator Argus::Array2D< T >::end () const
+
+inline
+
+ +

Definition at line 897 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
iterator Argus::Array2D< T >::end ()
+
+inline
+
+ +

Definition at line 899 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
const T& Argus::Array2D< T >::operator() (uint32_t i) const
+
+inline
+
+ +

Array indexing using () operator.

+ +

Definition at line 906 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
const T& Argus::Array2D< T >::operator() (uint32_t x,
uint32_t y 
) const
+
+inline
+
+ +

Definition at line 907 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
const T& Argus::Array2D< T >::operator() (const Point2D< uint32_t > & p) const
+
+inline
+
+ +

Definition at line 908 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
T& Argus::Array2D< T >::operator() (uint32_t i)
+
+inline
+
+ +

Definition at line 910 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T& Argus::Array2D< T >::operator() (uint32_t x,
uint32_t y 
)
+
+inline
+
+ +

Definition at line 911 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
T& Argus::Array2D< T >::operator() (const Point2D< uint32_t > & p)
+
+inline
+
+ +

Definition at line 912 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Array2D& Argus::Array2D< T >::operator= (const Array2D< T > & other)
+
+inline
+
+ +

Assignment operator.

+ +

Definition at line 867 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
bool Argus::Array2D< T >::operator== (const Array2D< T > & other) const
+
+inline
+
+ +

Equality operator.

+ +

Definition at line 875 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
T& Argus::Array2D< T >::operator[] (unsigned int i)
+
+inline
+
+ +

Array indexing using [] operator.

+ +

Definition at line 902 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
const T& Argus::Array2D< T >::operator[] (unsigned int i) const
+
+inline
+
+ +

Definition at line 903 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
bool Argus::Array2D< T >::resize (const Size2D< uint32_t > & size)
+
+inline
+
+ +

Resize the array.

+

Array contents after resize are undefined. Boolean return value enables error checking when exceptions are not available.

+ +

Definition at line 885 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
Size2D<uint32_t> Argus::Array2D< T >::size () const
+
+inline
+
+ +

Returns the size (dimensions) of the array.

+ +

Definition at line 881 of file Types.h.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
std::vector<T> Argus::Array2D< T >::m_data
+
+private
+
+ +

Definition at line 933 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
Size2D<uint32_t> Argus::Array2D< T >::m_size
+
+private
+
+ +

Definition at line 934 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BayerTuple-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BayerTuple-members.html new file mode 100644 index 0000000..5dcc05a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BayerTuple-members.html @@ -0,0 +1,134 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::BayerTuple< T > Member List
+
+
+ +

This is the complete list of members for Argus::BayerTuple< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
b()Argus::BayerTuple< T >inline
b() const Argus::BayerTuple< T >inline
BayerTuple()Argus::BayerTuple< T >inline
BayerTuple(const Tuple< BAYER_CHANNEL_COUNT, T > &other)Argus::BayerTuple< T >inline
BayerTuple(T init)Argus::BayerTuple< T >inline
BayerTuple(T _r, T _gEven, T _gOdd, T _b)Argus::BayerTuple< T >inline
gEven()Argus::BayerTuple< T >inline
gEven() const Argus::BayerTuple< T >inline
gOdd()Argus::BayerTuple< T >inline
gOdd() const Argus::BayerTuple< T >inline
m_dataArgus::Tuple< BAYER_CHANNEL_COUNT, T >protected
operator!=(const Tuple< N, T > &rhs) constArgus::Tuple< BAYER_CHANNEL_COUNT, T >inline
operator*(const T &rhs) constArgus::Tuple< BAYER_CHANNEL_COUNT, T >inline
operator*=(const T &rhs)Argus::Tuple< BAYER_CHANNEL_COUNT, T >inline
operator+(const Tuple< N, T > &rhs) constArgus::Tuple< BAYER_CHANNEL_COUNT, T >inline
operator+=(const Tuple< N, T > &rhs)Argus::Tuple< BAYER_CHANNEL_COUNT, T >inline
operator-(const Tuple< N, T > &rhs) constArgus::Tuple< BAYER_CHANNEL_COUNT, T >inline
operator-=(const Tuple< N, T > &rhs)Argus::Tuple< BAYER_CHANNEL_COUNT, T >inline
operator/(const T &rhs) constArgus::Tuple< BAYER_CHANNEL_COUNT, T >inline
operator/=(const T &rhs)Argus::Tuple< BAYER_CHANNEL_COUNT, T >inline
operator==(const Tuple< N, T > &rhs) constArgus::Tuple< BAYER_CHANNEL_COUNT, T >inline
operator[](unsigned int i)Argus::Tuple< BAYER_CHANNEL_COUNT, T >inline
operator[](unsigned int i) constArgus::Tuple< BAYER_CHANNEL_COUNT, T >inline
r()Argus::BayerTuple< T >inline
r() const Argus::BayerTuple< T >inline
Tuple()Argus::Tuple< BAYER_CHANNEL_COUNT, T >inline
Tuple(T init)Argus::Tuple< BAYER_CHANNEL_COUNT, T >inline
tupleSize()Argus::Tuple< BAYER_CHANNEL_COUNT, T >inlinestatic
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BayerTuple.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BayerTuple.html new file mode 100644 index 0000000..80a8575 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BayerTuple.html @@ -0,0 +1,533 @@ + + + + + +Libargus API: Argus::BayerTuple< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::BayerTuple< T > Class Template Reference
+
+
+ +

BayerTuple template class. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::BayerTuple< T >:
+
+
+ + +Argus::Tuple< BAYER_CHANNEL_COUNT, T > + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 BayerTuple ()
 BayerTuple (const Tuple< BAYER_CHANNEL_COUNT, T > &other)
 BayerTuple (T init)
 BayerTuple (T _r, T _gEven, T _gOdd, T _b)
T & r ()
const T & r () const
T & gEven ()
const T & gEven () const
T & gOdd ()
const T & gOdd () const
T & b ()
const T & b () const
- Public Member Functions inherited from Argus::Tuple< BAYER_CHANNEL_COUNT, T >
 Tuple ()
 Tuple (T init)
 Initialize every element of the tuple to a single value.
bool operator== (const Tuple< N, T > &rhs) const
 Returns true when every element in the two tuples are identical.
bool operator!= (const Tuple< N, T > &rhs) const
 Returns true if there are any differences between the two tuples.
Tuple< N, T > & operator+= (const Tuple< N, T > &rhs)
 Adds every element of another tuple to the elements of this tuple.
Tuple< N, T > & operator-= (const Tuple< N, T > &rhs)
 Subtracts every element of another tuple from the elements of this tuple.
Tuple< N, T > & operator*= (const T &rhs)
 Multiplies every element in the tuple by a single value.
Tuple< N, T > & operator/= (const T &rhs)
 Divides every element in the tuple by a single value.
const Tuple< N, T > operator+ (const Tuple< N, T > &rhs) const
 Returns the result of adding another tuple to this tuple.
const Tuple< N, T > operator- (const Tuple< N, T > &rhs) const
 Returns the result of subtracting another tuple from this tuple.
const Tuple< N, T > operator* (const T &rhs) const
 Returns the result of multiplying this tuple by a single value.
const Tuple< N, T > operator/ (const T &rhs) const
 Returns the result of dividing this tuple by a single value.
T & operator[] (unsigned int i)
const T & operator[] (unsigned int i) const
+ + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Argus::Tuple< BAYER_CHANNEL_COUNT, T >
static unsigned int tupleSize ()
 Returns the number of elements in the tuple.
- Protected Attributes inherited from Argus::Tuple< BAYER_CHANNEL_COUNT, T >
m_data [N]
+

Detailed Description

+

template<typename T>
+class Argus::BayerTuple< T >

+ +

BayerTuple template class.

+

This is a Tuple specialization containing 4 elements corresponding to the Bayer color channels: R, G_EVEN, G_ODD, and B. Values can be accessed using the named methods or subscript indexing using the Argus::BayerChannel enum.

+ +

Definition at line 577 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
Argus::BayerTuple< T >::BayerTuple ()
+
+inline
+
+ +

Definition at line 580 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::BayerTuple< T >::BayerTuple (const Tuple< BAYER_CHANNEL_COUNT, T > & other)
+
+inline
+
+ +

Definition at line 581 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::BayerTuple< T >::BayerTuple (init)
+
+inline
+
+ +

Definition at line 583 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::BayerTuple< T >::BayerTuple (_r,
_gEven,
_gOdd,
_b 
)
+
+inline
+
+ +

Definition at line 588 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::BayerTuple< T >::b ()
+
+inline
+
+ +

Definition at line 602 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::BayerTuple< T >::b () const
+
+inline
+
+ +

Definition at line 603 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::BayerTuple< T >::gEven ()
+
+inline
+
+ +

Definition at line 598 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::BayerTuple< T >::gEven () const
+
+inline
+
+ +

Definition at line 599 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::BayerTuple< T >::gOdd ()
+
+inline
+
+ +

Definition at line 600 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::BayerTuple< T >::gOdd () const
+
+inline
+
+ +

Definition at line 601 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::BayerTuple< T >::r ()
+
+inline
+
+ +

Definition at line 596 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::BayerTuple< T >::r () const
+
+inline
+
+ +

Definition at line 597 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BayerTuple.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BayerTuple.png new file mode 100644 index 0000000..966a9ed Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BayerTuple.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Buffer-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Buffer-members.html new file mode 100644 index 0000000..e595850 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Buffer-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Buffer Member List
+
+
+ +

This is the complete list of members for Argus::Buffer, including all inherited members.

+ + + + + + +
destroy()=0Argus::Destructablepure virtual
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~Buffer()Argus::Bufferinlineprotected
~Destructable()Argus::Destructableinlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Buffer.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Buffer.html new file mode 100644 index 0000000..a8e6e58 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Buffer.html @@ -0,0 +1,170 @@ + + + + + +Libargus API: Argus::Buffer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Buffer Class Reference
+
+
+ +

#include <BufferStream.h>

+
+Inheritance diagram for Argus::Buffer:
+
+
+ + +Argus::InterfaceProvider +Argus::Destructable +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + +

+Protected Member Functions

 ~Buffer ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
- Protected Member Functions inherited from Argus::Destructable
 ~Destructable ()
+ + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
- Public Member Functions inherited from Argus::Destructable
virtual void destroy ()=0
 Destroy this object.
+

Detailed Description

+
+

Definition at line 123 of file BufferStream.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Buffer::~Buffer ()
+
+inlineprotected
+
+ +

Definition at line 126 of file BufferStream.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Buffer.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Buffer.png new file mode 100644 index 0000000..a31c924 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Buffer.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BufferSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BufferSettings-members.html new file mode 100644 index 0000000..da994bd --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BufferSettings-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::BufferSettings Member List
+
+
+ +

This is the complete list of members for Argus::BufferSettings, including all inherited members.

+ + + + + + +
destroy()=0Argus::Destructablepure virtual
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~BufferSettings()Argus::BufferSettingsinlineprotected
~Destructable()Argus::Destructableinlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BufferSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BufferSettings.html new file mode 100644 index 0000000..fa1f23d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BufferSettings.html @@ -0,0 +1,170 @@ + + + + + +Libargus API: Argus::BufferSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::BufferSettings Class Reference
+
+
+ +

#include <BufferStream.h>

+
+Inheritance diagram for Argus::BufferSettings:
+
+
+ + +Argus::InterfaceProvider +Argus::Destructable +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + +

+Protected Member Functions

 ~BufferSettings ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
- Protected Member Functions inherited from Argus::Destructable
 ~Destructable ()
+ + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
- Public Member Functions inherited from Argus::Destructable
virtual void destroy ()=0
 Destroy this object.
+

Detailed Description

+
+

Definition at line 141 of file BufferStream.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::BufferSettings::~BufferSettings ()
+
+inlineprotected
+
+ +

Definition at line 144 of file BufferStream.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BufferSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BufferSettings.png new file mode 100644 index 0000000..734e309 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1BufferSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraDevice-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraDevice-members.html new file mode 100644 index 0000000..127e4e2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraDevice-members.html @@ -0,0 +1,109 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::CameraDevice Member List
+
+
+ +

This is the complete list of members for Argus::CameraDevice, including all inherited members.

+ + + + +
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~CameraDevice()Argus::CameraDeviceinlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraDevice.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraDevice.html new file mode 100644 index 0000000..335ef9c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraDevice.html @@ -0,0 +1,164 @@ + + + + + +Libargus API: Argus::CameraDevice Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::CameraDevice Class Reference
+
+
+ +

#include <CameraDevice.h>

+
+Inheritance diagram for Argus::CameraDevice:
+
+
+ + +Argus::InterfaceProvider +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + +

+Protected Member Functions

 ~CameraDevice ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
+ + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
+

Detailed Description

+
+

Definition at line 54 of file CameraDevice.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::CameraDevice::~CameraDevice ()
+
+inlineprotected
+
+ +

Definition at line 57 of file CameraDevice.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraDevice.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraDevice.png new file mode 100644 index 0000000..0d851c1 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraDevice.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraProvider-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraProvider-members.html new file mode 100644 index 0000000..775f85b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraProvider-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::CameraProvider Member List
+
+
+ +

This is the complete list of members for Argus::CameraProvider, including all inherited members.

+ + + + + + + +
create(Status *status=NULL)Argus::CameraProviderstatic
destroy()=0Argus::Destructablepure virtual
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~CameraProvider()Argus::CameraProviderinlineprotected
~Destructable()Argus::Destructableinlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraProvider.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraProvider.html new file mode 100644 index 0000000..135b4e5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraProvider.html @@ -0,0 +1,210 @@ + + + + + +Libargus API: Argus::CameraProvider Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::CameraProvider Class Reference
+
+
+ +

#include <CameraProvider.h>

+
+Inheritance diagram for Argus::CameraProvider:
+
+
+ + +Argus::InterfaceProvider +Argus::Destructable +Argus::NonCopyable + +
+ +

List of all members.

+ + + + +

+Static Public Member Functions

static CameraProvidercreate (Status *status=NULL)
 Creates and returns a new CameraProvider.
+ + + + + + +

+Protected Member Functions

 ~CameraProvider ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
- Protected Member Functions inherited from Argus::Destructable
 ~Destructable ()
+ + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
- Public Member Functions inherited from Argus::Destructable
virtual void destroy ()=0
 Destroy this object.
+

Detailed Description

+
+

Definition at line 51 of file CameraProvider.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::CameraProvider::~CameraProvider ()
+
+inlineprotected
+
+ +

Definition at line 65 of file CameraProvider.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
static CameraProvider* Argus::CameraProvider::create (Statusstatus = NULL)
+
+static
+
+ +

Creates and returns a new CameraProvider.

+

If a CameraProvider object has already been created, this method will return a pointer to that object.

+
Parameters:
+ + +
[out]statusOptional pointer to return success/status of the call.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraProvider.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraProvider.png new file mode 100644 index 0000000..8b1f084 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CameraProvider.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadata-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadata-members.html new file mode 100644 index 0000000..4bd6f32 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadata-members.html @@ -0,0 +1,109 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::CaptureMetadata Member List
+
+
+ +

This is the complete list of members for Argus::CaptureMetadata, including all inherited members.

+ + + + +
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~CaptureMetadata()Argus::CaptureMetadatainlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadata.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadata.html new file mode 100644 index 0000000..e344b05 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadata.html @@ -0,0 +1,164 @@ + + + + + +Libargus API: Argus::CaptureMetadata Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::CaptureMetadata Class Reference
+
+
+ +

#include <CaptureMetadata.h>

+
+Inheritance diagram for Argus::CaptureMetadata:
+
+
+ + +Argus::InterfaceProvider +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + +

+Protected Member Functions

 ~CaptureMetadata ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
+ + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
+

Detailed Description

+
+

Definition at line 48 of file CaptureMetadata.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::CaptureMetadata::~CaptureMetadata ()
+
+inlineprotected
+
+ +

Definition at line 51 of file CaptureMetadata.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadata.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadata.png new file mode 100644 index 0000000..21c2aad Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadata.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadataContainer-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadataContainer-members.html new file mode 100644 index 0000000..b5f1cd1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadataContainer-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::CaptureMetadataContainer Member List
+
+
+ +

This is the complete list of members for Argus::CaptureMetadataContainer, including all inherited members.

+ + + + + + +
destroy()=0Argus::Destructablepure virtual
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~CaptureMetadataContainer()Argus::CaptureMetadataContainerinlineprotected
~Destructable()Argus::Destructableinlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadataContainer.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadataContainer.html new file mode 100644 index 0000000..901357a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadataContainer.html @@ -0,0 +1,175 @@ + + + + + +Libargus API: Argus::CaptureMetadataContainer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::CaptureMetadataContainer Class Reference
+
+
+ +

An object that holds a CaptureMetadata instance and is used to read the capture metadata from a consumer thread directly from the embedded EGLStream metadata. + More...

+ +

#include <CaptureMetadata.h>

+
+Inheritance diagram for Argus::CaptureMetadataContainer:
+
+
+ + +Argus::InterfaceProvider +Argus::Destructable +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + +

+Protected Member Functions

 ~CaptureMetadataContainer ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
- Protected Member Functions inherited from Argus::Destructable
 ~Destructable ()
+ + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
- Public Member Functions inherited from Argus::Destructable
virtual void destroy ()=0
 Destroy this object.
+

Detailed Description

+

An object that holds a CaptureMetadata instance and is used to read the capture metadata from a consumer thread directly from the embedded EGLStream metadata.

+

It exposes the same interfaces as CaptureMetadata, but is owned by the consumer.

+ +

Definition at line 60 of file CaptureMetadata.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::CaptureMetadataContainer::~CaptureMetadataContainer ()
+
+inlineprotected
+
+ +

Definition at line 63 of file CaptureMetadata.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadataContainer.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadataContainer.png new file mode 100644 index 0000000..4148697 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureMetadataContainer.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureSession-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureSession-members.html new file mode 100644 index 0000000..c48d99a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureSession-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::CaptureSession Member List
+
+
+ +

This is the complete list of members for Argus::CaptureSession, including all inherited members.

+ + + + + + +
destroy()=0Argus::Destructablepure virtual
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~CaptureSession()Argus::CaptureSessioninlineprotected
~Destructable()Argus::Destructableinlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureSession.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureSession.html new file mode 100644 index 0000000..ec8e7c2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureSession.html @@ -0,0 +1,170 @@ + + + + + +Libargus API: Argus::CaptureSession Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::CaptureSession Class Reference
+
+
+ +

#include <CaptureSession.h>

+
+Inheritance diagram for Argus::CaptureSession:
+
+
+ + +Argus::InterfaceProvider +Argus::Destructable +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + +

+Protected Member Functions

 ~CaptureSession ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
- Protected Member Functions inherited from Argus::Destructable
 ~Destructable ()
+ + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
- Public Member Functions inherited from Argus::Destructable
virtual void destroy ()=0
 Destroy this object.
+

Detailed Description

+
+

Definition at line 51 of file CaptureSession.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::CaptureSession::~CaptureSession ()
+
+inlineprotected
+
+ +

Definition at line 54 of file CaptureSession.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureSession.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureSession.png new file mode 100644 index 0000000..f2b0669 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1CaptureSession.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Destructable-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Destructable-members.html new file mode 100644 index 0000000..0685e29 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Destructable-members.html @@ -0,0 +1,108 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Destructable Member List
+
+
+ +

This is the complete list of members for Argus::Destructable, including all inherited members.

+ + + +
destroy()=0Argus::Destructablepure virtual
~Destructable()Argus::Destructableinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Destructable.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Destructable.html new file mode 100644 index 0000000..6d3b9d7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Destructable.html @@ -0,0 +1,201 @@ + + + + + +Libargus API: Argus::Destructable Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Destructable Class Reference
+
+
+ +

A top level object class for libargus objects that are created and owned by the client. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::Destructable:
+
+
+ + +Argus::Buffer +Argus::BufferSettings +Argus::CameraProvider +Argus::CaptureMetadataContainer +Argus::CaptureSession +Argus::EventQueue +Argus::OutputStream +Argus::OutputStreamSettings +Argus::Request + +
+ +

List of all members.

+ + + + +

+Public Member Functions

virtual void destroy ()=0
 Destroy this object.
+ + +

+Protected Member Functions

 ~Destructable ()
+

Detailed Description

+

A top level object class for libargus objects that are created and owned by the client.

+

All Destructable objects created by the client must be explicitly destroyed.

+ +

Definition at line 395 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Destructable::~Destructable ()
+
+inlineprotected
+
+ +

Definition at line 406 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual void Argus::Destructable::destroy ()
+
+pure virtual
+
+ +

Destroy this object.

+

After making this call, the client cannot make any more calls on this object.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Destructable.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Destructable.png new file mode 100644 index 0000000..b73315f Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Destructable.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Event-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Event-members.html new file mode 100644 index 0000000..4cf9d32 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Event-members.html @@ -0,0 +1,109 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Event Member List
+
+
+ +

This is the complete list of members for Argus::Event, including all inherited members.

+ + + + +
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~Event()Argus::Eventinlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Event.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Event.html new file mode 100644 index 0000000..6c71f5c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Event.html @@ -0,0 +1,164 @@ + + + + + +Libargus API: Argus::Event Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Event Class Reference
+
+
+ +

#include <Event.h>

+
+Inheritance diagram for Argus::Event:
+
+
+ + +Argus::InterfaceProvider +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + +

+Protected Member Functions

 ~Event ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
+ + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
+

Detailed Description

+
+

Definition at line 51 of file Event.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Event::~Event ()
+
+inlineprotected
+
+ +

Definition at line 54 of file Event.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Event.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Event.png new file mode 100644 index 0000000..6103ce3 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Event.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventQueue-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventQueue-members.html new file mode 100644 index 0000000..aa2b5a2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventQueue-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::EventQueue Member List
+
+
+ +

This is the complete list of members for Argus::EventQueue, including all inherited members.

+ + + + + + +
destroy()=0Argus::Destructablepure virtual
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~Destructable()Argus::Destructableinlineprotected
~EventQueue()Argus::EventQueueinlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventQueue.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventQueue.html new file mode 100644 index 0000000..e9ba612 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventQueue.html @@ -0,0 +1,170 @@ + + + + + +Libargus API: Argus::EventQueue Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::EventQueue Class Reference
+
+
+ +

#include <EventQueue.h>

+
+Inheritance diagram for Argus::EventQueue:
+
+
+ + +Argus::InterfaceProvider +Argus::Destructable +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + +

+Protected Member Functions

 ~EventQueue ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
- Protected Member Functions inherited from Argus::Destructable
 ~Destructable ()
+ + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
- Public Member Functions inherited from Argus::Destructable
virtual void destroy ()=0
 Destroy this object.
+

Detailed Description

+
+

Definition at line 50 of file EventQueue.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::EventQueue::~EventQueue ()
+
+inlineprotected
+
+ +

Definition at line 53 of file EventQueue.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventQueue.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventQueue.png new file mode 100644 index 0000000..44ad150 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventQueue.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventType-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventType-members.html new file mode 100644 index 0000000..da8a58c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventType-members.html @@ -0,0 +1,121 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::EventType Member List
+
+
+ +

This is the complete list of members for Argus::EventType, including all inherited members.

+ + + + + + + + + + + + + + + + +
clock_seqArgus::UUID
EventType(uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)Argus::EventTypeinline
EventType()Argus::EventTypeinline
getName() const Argus::NamedUUIDinline
NamedUUID(uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)Argus::NamedUUIDinline
NamedUUID(const NamedUUID &copied)Argus::NamedUUIDinline
nodeArgus::UUID
operator!=(const NamedUUID &compared) const Argus::NamedUUIDinline
operator<(const UUID &r) const Argus::UUIDinline
operator=(const NamedUUID &copied)Argus::NamedUUIDinline
operator==(const NamedUUID &compared) const Argus::NamedUUIDinline
Argus::UUID::operator==(const UUID &r) const Argus::UUIDinline
time_hi_and_versionArgus::UUID
time_lowArgus::UUID
time_midArgus::UUID
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventType.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventType.html new file mode 100644 index 0000000..24fbaf1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventType.html @@ -0,0 +1,261 @@ + + + + + +Libargus API: Argus::EventType Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::EventType Class Reference
+
+
+ +

A unique identifier for a particular type of Event. + More...

+ +

#include <Event.h>

+
+Inheritance diagram for Argus::EventType:
+
+
+ + +Argus::NamedUUID +Argus::UUID + +
+ +

List of all members.

+ + + + + + + + + + + + + + +

+Public Member Functions

 EventType (uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)
 EventType ()
- Public Member Functions inherited from Argus::NamedUUID
 NamedUUID (uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)
 NamedUUID (const NamedUUID &copied)
NamedUUIDoperator= (const NamedUUID &copied)
bool operator== (const NamedUUID &compared) const
bool operator!= (const NamedUUID &compared) const
const char * getName () const
- Public Member Functions inherited from Argus::UUID
bool operator== (const UUID &r) const
bool operator< (const UUID &r) const
+

Detailed Description

+

A unique identifier for a particular type of Event.

+ +

Definition at line 62 of file Event.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::EventType::EventType (uint32_t time_low_,
uint16_t time_mid_,
uint16_t time_hi_and_version_,
uint16_t clock_seq_,
uint8_t c0,
uint8_t c1,
uint8_t c2,
uint8_t c3,
uint8_t c4,
uint8_t c5,
const char * name 
)
+
+inline
+
+ +

Definition at line 65 of file Event.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Argus::EventType::EventType ()
+
+inline
+
+ +

Definition at line 75 of file Event.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventType.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventType.png new file mode 100644 index 0000000..b2049ee Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1EventType.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMap-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMap-members.html new file mode 100644 index 0000000..b376231 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMap-members.html @@ -0,0 +1,117 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IBayerAverageMap Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IBayerAverageMap, including all inherited members.

+ + + + + + + + + + + + +
getAverages(Array2D< BayerTuple< float > > *averages) const =0Argus::Ext::IBayerAverageMappure virtual
getBinCount() const =0Argus::Ext::IBayerAverageMappure virtual
getBinInterval() const =0Argus::Ext::IBayerAverageMappure virtual
getBinSize() const =0Argus::Ext::IBayerAverageMappure virtual
getBinStart() const =0Argus::Ext::IBayerAverageMappure virtual
getClipCounts(Array2D< BayerTuple< uint32_t > > *clipCounts) const =0Argus::Ext::IBayerAverageMappure virtual
getWorkingRange() const =0Argus::Ext::IBayerAverageMappure virtual
id()Argus::Ext::IBayerAverageMapinlinestatic
Interface()Argus::Interfaceinlineprotected
~IBayerAverageMap()Argus::Ext::IBayerAverageMapinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMap.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMap.html new file mode 100644 index 0000000..06cd6fa --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMap.html @@ -0,0 +1,448 @@ + + + + + +Libargus API: Argus::Ext::IBayerAverageMap Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to Bayer average map metadata. + More...

+ +

#include <BayerAverageMap.h>

+
+Inheritance diagram for Argus::Ext::IBayerAverageMap:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + +

+Public Member Functions

virtual Point2D< uint32_t > getBinStart () const =0
 Returns the starting location of the first bin, in pixels, where the location is relative to the top-left corner of the image.
virtual Size2D< uint32_t > getBinSize () const =0
 Returns the size of each bin, in pixels.
virtual Size2D< uint32_t > getBinCount () const =0
 Returns the number of bins in both the horizontal (width) and vertical (height) directions.
virtual Size2D< uint32_t > getBinInterval () const =0
 Returns the bin intervals for both the x and y axis.
virtual Range< float > getWorkingRange () const =0
 Returns the working range of the averaging calculation.
virtual Status getAverages (Array2D< BayerTuple< float > > *averages) const =0
 Returns the average values for all bins.
virtual Status getClipCounts (Array2D< BayerTuple< uint32_t > > *clipCounts) const =0
 Returns the clipped pixel counts for all bins.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IBayerAverageMap ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to Bayer average map metadata.

+

The Bayer average map provides local averages of the capture's raw pixels for a number of small rectangular regions, called bins, that are evenly distributed across the image. Each average is a floating-point value that is nomalized such that [0.0, 1.0] maps to the full optical range of the output pixels, but values outside this range may be included in the averages so long as they are within the working range of the average calculation. For pixels that have values outside the working range, the API excludes such pixels from the average calculation and increments the clipped pixel counter for the containing region.

+
See also:
IBayerAverageMap::getWorkingRange()
+
+IBayerAverageMap::getClipCounts()
+

The size and layout of the bins used to calculate the averages are determined by the Argus implementation and are illustrated in the following diagram. The bin size and interval are constant across the image, and are positioned such that the generated averages cover the majority of the full image. All dimensions are given in pixels.

+
start.x interval.width
+
_______ _________________
+
| | | |
+
_ ________________________________________________________
+
| | |
+
start.y | | |
+
|_ | _____ _____ _____ | _
+
| | | | | | | | |
+
| | 0,0 | | 1,0 | | 2,0 | | |
+
| |_____| |_____| |_____| | |
+
| | | interval.height
+
| | |
+
| | |
+
| _____ _____ _____ | _|
+
| | | | | | | |
+
| | 0,1 | | 1,1 | | 2,1 | |
+
| |_____| |_____| |_____| |
+
| |
+
| |
+
| |
+
| _____ _____ _____ | _
+
| | | | | | | | |
+
| | 0,2 | | 1,2 | | 2,2 | | | size.height
+
| |_____| |_____| |_____| | _|
+
| |
+
| |
+
|________________________________________________________|
+
+
|_____|
+
+
size.width
+
+

Definition at line 153 of file BayerAverageMap.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IBayerAverageMap::~IBayerAverageMap ()
+
+inlineprotected
+
+ +

Definition at line 229 of file BayerAverageMap.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::IBayerAverageMap::getAverages (Array2D< BayerTuple< float > > * averages) const
+
+pure virtual
+
+ +

Returns the average values for all bins.

+

These values are normalized such that [0.0, 1.0] maps to the optical range of the output, but the range of possible values is determined by the working range. For input pixels that have values outside the working range, the API excludes such pixels from the average calculation and increments the clipped pixel counter for the containing region.

+
See also:
IBayerAverageMap::getWorkingRange()
+
+IBayerAverageMap::getClipCounts()
+
Parameters:
+ + +
[out]averagesThe output array to store the averages for all bins. This 2-dimensional array is sized as returned by IBayerAverageMap::getBinCount(), where each array element is a floating point BayerTuple containing the R, G_EVEN, G_ODD, and B averages for that bin.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::Ext::IBayerAverageMap::getBinCount () const
+
+pure virtual
+
+ +

Returns the number of bins in both the horizontal (width) and vertical (height) directions.

+

This size is equivalent to the array dimensions for the output from IBayerAverageMap::getAverages() or IBayerAverageMap::getClipCounts().

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::Ext::IBayerAverageMap::getBinInterval () const
+
+pure virtual
+
+ +

Returns the bin intervals for both the x and y axis.

+

These intervals are defined as the number of pixels between the first pixel of a bin and that of the immediate next bin.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::Ext::IBayerAverageMap::getBinSize () const
+
+pure virtual
+
+ +

Returns the size of each bin, in pixels.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Point2D<uint32_t> Argus::Ext::IBayerAverageMap::getBinStart () const
+
+pure virtual
+
+ +

Returns the starting location of the first bin, in pixels, where the location is relative to the top-left corner of the image.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::IBayerAverageMap::getClipCounts (Array2D< BayerTuple< uint32_t > > * clipCounts) const
+
+pure virtual
+
+ +

Returns the clipped pixel counts for all bins.

+

This is the number of pixels in the bin whose value exceeds the working range and have been excluded from average calculation.

+
See also:
IBayerAverageMap::getWorkingRange()
+
Parameters:
+ + +
[out]clipCountsThe output array to store the clip counts for all bins. This 2-dimensional array is sized as returned by Ext::IBayerAverageMap::getBinCount(), where each array element is an uint32_t BayerTuple containing the R, G_EVEN, G_ODD, and B clip counts for that bin.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<float> Argus::Ext::IBayerAverageMap::getWorkingRange () const
+
+pure virtual
+
+ +

Returns the working range of the averaging calculation.

+

The working range is defined as the range of values that are included in the average calculation (e.g. not clipped), and may extend beyond the normalized [0.0, 1.0] range of the optical output. For example, if the working range is [-0.5, 1.5], this means that values in [-0.5, 0) and (1, 1.5] will still be included in the average calculation despite being clipped to [0.0, 1.0] in the output pixels. Any pixels outside this working range are excluded from average calculation and will increment the clip count.

+
See also:
IBayerAverageMap::getClipCounts()
+
Note:
When the bit depth available for averaging is equal to the optical bit depth of the output, the working range will be less than the full [0.0, 1.0] optical range. For example, when 10 bits of data are available, the raw output pixels in [0u, 1023u] will map to [0.0, 1.0]; however, the values of 0 and 1023 will be considered clipped for the sake of average calculation, and so the working range would be [1/1023.0, 1022/1023.0].
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IBayerAverageMap::id ()
+
+inlinestatic
+
+ +

Definition at line 156 of file BayerAverageMap.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMap.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMap.png new file mode 100644 index 0000000..462d5da Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMap.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMapSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMapSettings-members.html new file mode 100644 index 0000000..515a860 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMapSettings-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IBayerAverageMapSettings Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IBayerAverageMapSettings, including all inherited members.

+ + + + + + + +
getBayerAverageMapEnable() const =0Argus::Ext::IBayerAverageMapSettingspure virtual
id()Argus::Ext::IBayerAverageMapSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setBayerAverageMapEnable(bool enable)=0Argus::Ext::IBayerAverageMapSettingspure virtual
~IBayerAverageMapSettings()Argus::Ext::IBayerAverageMapSettingsinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMapSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMapSettings.html new file mode 100644 index 0000000..b3333e0 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMapSettings.html @@ -0,0 +1,258 @@ + + + + + +Libargus API: Argus::Ext::IBayerAverageMapSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Ext::IBayerAverageMapSettings Class Reference
+
+
+ +

Interface to Bayer average map settings. + More...

+ +

#include <BayerAverageMap.h>

+
+Inheritance diagram for Argus::Ext::IBayerAverageMapSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + +

+Public Member Functions

virtual void setBayerAverageMapEnable (bool enable)=0
 Enables or disables Bayer average map generation.
virtual bool getBayerAverageMapEnable () const =0
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IBayerAverageMapSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to Bayer average map settings.

+ +

Definition at line 74 of file BayerAverageMap.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IBayerAverageMapSettings::~IBayerAverageMapSettings ()
+
+inlineprotected
+
+ +

Definition at line 93 of file BayerAverageMap.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::Ext::IBayerAverageMapSettings::getBayerAverageMapEnable () const
+
+pure virtual
+
+
Returns:
whether or not Bayer average map generation is enabled.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IBayerAverageMapSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 77 of file BayerAverageMap.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void Argus::Ext::IBayerAverageMapSettings::setBayerAverageMapEnable (bool enable)
+
+pure virtual
+
+ +

Enables or disables Bayer average map generation.

+

When enabled, CaptureMetadata returned by completed captures will expose the IBayerAverageMap interface.

+
Parameters:
+ + +
[in]enablewhether or not Bayer average map generation is enabled.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMapSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMapSettings.png new file mode 100644 index 0000000..9e05a7d Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerAverageMapSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMap-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMap-members.html new file mode 100644 index 0000000..2bcf02d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMap-members.html @@ -0,0 +1,115 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IBayerSharpnessMap Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IBayerSharpnessMap, including all inherited members.

+ + + + + + + + + + +
getBinCount() const =0Argus::Ext::IBayerSharpnessMappure virtual
getBinInterval() const =0Argus::Ext::IBayerSharpnessMappure virtual
getBinSize() const =0Argus::Ext::IBayerSharpnessMappure virtual
getBinStart() const =0Argus::Ext::IBayerSharpnessMappure virtual
getSharpnessValues(Array2D< BayerTuple< float > > *values) const =0Argus::Ext::IBayerSharpnessMappure virtual
id()Argus::Ext::IBayerSharpnessMapinlinestatic
Interface()Argus::Interfaceinlineprotected
~IBayerSharpnessMap()Argus::Ext::IBayerSharpnessMapinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMap.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMap.html new file mode 100644 index 0000000..8cd815d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMap.html @@ -0,0 +1,376 @@ + + + + + +Libargus API: Argus::Ext::IBayerSharpnessMap Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to Bayer sharpness map metadata. + More...

+ +

#include <BayerSharpnessMap.h>

+
+Inheritance diagram for Argus::Ext::IBayerSharpnessMap:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + +

+Public Member Functions

virtual Point2D< uint32_t > getBinStart () const =0
 Returns the starting location of the first bin, in pixels, where the location is relative to the top-left corner of the image.
virtual Size2D< uint32_t > getBinSize () const =0
 Returns the size of each bin, in pixels.
virtual Size2D< uint32_t > getBinCount () const =0
 Returns the number of bins in both the horizontal (width) and vertical (height) directions.
virtual Size2D< uint32_t > getBinInterval () const =0
 Returns the bin intervals for both the x and y axis.
virtual Status getSharpnessValues (Array2D< BayerTuple< float > > *values) const =0
 Returns the sharpness values for all bins and color channels.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IBayerSharpnessMap ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to Bayer sharpness map metadata.

+

The Bayer sharpness map exposes image sharpness metrics that can be used in order to help determine the correct position of the lens to achieve the best focus. Each metric is a normalized floating-point value representing the estimated sharpness for a particular color channel and pixel region, called bins, where 0.0 and 1.0 map to the minimum and maximum possible sharpness values, respectively. Sharpness values generally correlate with image focus in that a low sharpness implies a poorly focused (blurry) region while a high sharpness implies a well focused (sharp) region.

+

The size and layout of the bins used to calculate the sharpness metrics are determined by the libargus implementation, and are illustrated in the following diagram. The bin size and interval are constant across the image, and are positioned such that the generated metrics cover the majority of the full image. All dimensions are given in pixels.

+
start.x interval.width
+
_______ _________________
+
| | | |
+
_ ________________________________________________________
+
| | |
+
start.y | | |
+
|_ | _____ _____ _____ | _
+
| | | | | | | | |
+
| | 0,0 | | 1,0 | | 2,0 | | |
+
| |_____| |_____| |_____| | |
+
| | | interval.height
+
| | |
+
| | |
+
| _____ _____ _____ | _|
+
| | | | | | | |
+
| | 0,1 | | 1,1 | | 2,1 | |
+
| |_____| |_____| |_____| |
+
| |
+
| |
+
| |
+
| _____ _____ _____ | _
+
| | | | | | | | |
+
| | 0,2 | | 1,2 | | 2,2 | | | size.height
+
| |_____| |_____| |_____| | _|
+
| |
+
| |
+
|________________________________________________________|
+
+
|_____|
+
+
size.width
+
+

Definition at line 141 of file BayerSharpnessMap.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IBayerSharpnessMap::~IBayerSharpnessMap ()
+
+inlineprotected
+
+ +

Definition at line 180 of file BayerSharpnessMap.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::Ext::IBayerSharpnessMap::getBinCount () const
+
+pure virtual
+
+ +

Returns the number of bins in both the horizontal (width) and vertical (height) directions.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::Ext::IBayerSharpnessMap::getBinInterval () const
+
+pure virtual
+
+ +

Returns the bin intervals for both the x and y axis.

+

These intervals are defined as the number of pixels between the first pixel of a bin and that of the immediate next bin.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::Ext::IBayerSharpnessMap::getBinSize () const
+
+pure virtual
+
+ +

Returns the size of each bin, in pixels.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Point2D<uint32_t> Argus::Ext::IBayerSharpnessMap::getBinStart () const
+
+pure virtual
+
+ +

Returns the starting location of the first bin, in pixels, where the location is relative to the top-left corner of the image.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::IBayerSharpnessMap::getSharpnessValues (Array2D< BayerTuple< float > > * values) const
+
+pure virtual
+
+ +

Returns the sharpness values for all bins and color channels.

+

These values are normalized such that 0.0 and 1.0 map to the minimum and maximum possible sharpness values, respectively.

+
Parameters:
+ + +
[out]valuesThe output array to store the sharpness values for all bins. This 2-dimensional array will be sized as returned by
+
+
+
See also:
getBinCount(), where each array element is a floating point BayerTuple containing the R, G_EVEN, G_ODD, and B sharpness values for that bin.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IBayerSharpnessMap::id ()
+
+inlinestatic
+
+ +

Definition at line 144 of file BayerSharpnessMap.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMap.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMap.png new file mode 100644 index 0000000..f2d3d85 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMap.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMapSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMapSettings-members.html new file mode 100644 index 0000000..eecd63a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMapSettings-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IBayerSharpnessMapSettings Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html new file mode 100644 index 0000000..7187004 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html @@ -0,0 +1,260 @@ + + + + + +Libargus API: Argus::Ext::IBayerSharpnessMapSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Ext::IBayerSharpnessMapSettings Class Reference
+
+
+ +

Interface to Bayer sharpness map settings. + More...

+ +

#include <BayerSharpnessMap.h>

+
+Inheritance diagram for Argus::Ext::IBayerSharpnessMapSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual void setBayerSharpnessMapEnable (bool enable)=0
 Enables or disables Bayer sharpness map generation.
virtual bool getBayerSharpnessMapEnable () const =0
 Returns True if sharpness map generation is enabled.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IBayerSharpnessMapSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to Bayer sharpness map settings.

+ +

Definition at line 65 of file BayerSharpnessMap.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IBayerSharpnessMapSettings::~IBayerSharpnessMapSettings ()
+
+inlineprotected
+
+ +

Definition at line 83 of file BayerSharpnessMap.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::Ext::IBayerSharpnessMapSettings::getBayerSharpnessMapEnable () const
+
+pure virtual
+
+ +

Returns True if sharpness map generation is enabled.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IBayerSharpnessMapSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 68 of file BayerSharpnessMap.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void Argus::Ext::IBayerSharpnessMapSettings::setBayerSharpnessMapEnable (bool enable)
+
+pure virtual
+
+ +

Enables or disables Bayer sharpness map generation.

+

When enabled, CaptureMetadata returned by completed captures expose the IBayerSharpnessMap interface.

+
Parameters:
+ + +
[in]enableIf True, Bayer sharpness map generation is enabled.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.png new file mode 100644 index 0000000..a0c808b Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBlockingSessionCameraProvider-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBlockingSessionCameraProvider-members.html new file mode 100644 index 0000000..68b5698 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBlockingSessionCameraProvider-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IBlockingSessionCameraProvider Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IBlockingSessionCameraProvider, including all inherited members.

+ + + + + + + +
createBlockingCaptureSession(CameraDevice *device, Status *status=NULL)=0Argus::Ext::IBlockingSessionCameraProviderpure virtual
createBlockingCaptureSession(const std::vector< CameraDevice * > &devices, Status *status=NULL)=0Argus::Ext::IBlockingSessionCameraProviderpure virtual
id()Argus::Ext::IBlockingSessionCameraProviderinlinestatic
Interface()Argus::Interfaceinlineprotected
~IBlockingSessionCameraProvider()Argus::Ext::IBlockingSessionCameraProviderinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html new file mode 100644 index 0000000..0265c9f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html @@ -0,0 +1,292 @@ + + + + + +Libargus API: Argus::Ext::IBlockingSessionCameraProvider Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface used to create blocking capture session. + More...

+ +

#include <BlockingSessionCameraProvider.h>

+
+Inheritance diagram for Argus::Ext::IBlockingSessionCameraProvider:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual CaptureSessioncreateBlockingCaptureSession (CameraDevice *device, Status *status=NULL)=0
 Creates and returns a blocking CaptureSession using the given device.
virtual CaptureSessioncreateBlockingCaptureSession (const std::vector< CameraDevice * > &devices, Status *status=NULL)=0
 Creates and returns a blocking CaptureSession using the given device.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IBlockingSessionCameraProvider ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used to create blocking capture session.

+ +

Definition at line 64 of file BlockingSessionCameraProvider.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IBlockingSessionCameraProvider::~IBlockingSessionCameraProvider ()
+
+inlineprotected
+
+ +

Definition at line 98 of file BlockingSessionCameraProvider.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual CaptureSession* Argus::Ext::IBlockingSessionCameraProvider::createBlockingCaptureSession (CameraDevicedevice,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Creates and returns a blocking CaptureSession using the given device.

+

For blocking CaptureSession, the capture related API call will block wait until the request is serviced by underlying driver. This will help timing control in client side when client auto control is involved. In compare, for the default CaptureSession, the capture related API call will put the request in a internal queue and return immediately, without blocking client thread. STATUS_UNAVAILABLE will be placed into status if the device is already in use.

+
Parameters:
+ + + +
[in]deviceThe device to use for the CaptureSession.
[out]statusOptional pointer to return success/status of the call.
+
+
+
Returns:
The new CaptureSession, or NULL if an error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual CaptureSession* Argus::Ext::IBlockingSessionCameraProvider::createBlockingCaptureSession (const std::vector< CameraDevice * > & devices,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Creates and returns a blocking CaptureSession using the given device.

+

For blocking CaptureSession, the capture related API call will block wait until the request is serviced by underlying driver. This will help timing control in client side when client auto control is involved. STATUS_UNAVAILABLE will be placed into status if any of the devices are already in use.

+
Parameters:
+ + + +
[in]devicesThe device(s) to use for the CaptureSession.
[out]statusOptional pointer to return success/status of the call.
+
+
+
Returns:
The new CaptureSession, or NULL if an error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IBlockingSessionCameraProvider::id ()
+
+inlinestatic
+
+ +

Definition at line 67 of file BlockingSessionCameraProvider.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.png new file mode 100644 index 0000000..d3818c9 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDeFogSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDeFogSettings-members.html new file mode 100644 index 0000000..1cc3b7b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDeFogSettings-members.html @@ -0,0 +1,116 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IDeFogSettings Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IDeFogSettings, including all inherited members.

+ + + + + + + + + + + +
getDeFogAmount() const =0Argus::Ext::IDeFogSettingspure virtual
getDeFogEnable() const =0Argus::Ext::IDeFogSettingspure virtual
getDeFogQuality() const =0Argus::Ext::IDeFogSettingspure virtual
id()Argus::Ext::IDeFogSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setDeFogAmount(float amount)=0Argus::Ext::IDeFogSettingspure virtual
setDeFogEnable(bool enable)=0Argus::Ext::IDeFogSettingspure virtual
setDeFogQuality(float quality)=0Argus::Ext::IDeFogSettingspure virtual
~IDeFogSettings()Argus::Ext::IDeFogSettingsinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDeFogSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDeFogSettings.html new file mode 100644 index 0000000..baf06b1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDeFogSettings.html @@ -0,0 +1,377 @@ + + + + + +Libargus API: Argus::Ext::IDeFogSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to de-fog settings. + More...

+ +

#include <DeFog.h>

+
+Inheritance diagram for Argus::Ext::IDeFogSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + +

+Public Member Functions

virtual void setDeFogEnable (bool enable)=0
 Enables or disables de-fog.
virtual bool getDeFogEnable () const =0
virtual Status setDeFogAmount (float amount)=0
 Sets the amount of fog to be removed.
virtual float getDeFogAmount () const =0
virtual Status setDeFogQuality (float quality)=0
 Set the quality of the effect, lower quality results in lower execution time.
virtual float getDeFogQuality () const =0
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IDeFogSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to de-fog settings.

+ +

Definition at line 61 of file DeFog.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IDeFogSettings::~IDeFogSettings ()
+
+inlineprotected
+
+ +

Definition at line 101 of file DeFog.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::Ext::IDeFogSettings::getDeFogAmount () const
+
+pure virtual
+
+
Returns:
the amount of fog to remove.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::Ext::IDeFogSettings::getDeFogEnable () const
+
+pure virtual
+
+
Returns:
whether or not de-fog is enabled.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::Ext::IDeFogSettings::getDeFogQuality () const
+
+pure virtual
+
+
Returns:
the effect quality.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IDeFogSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 64 of file DeFog.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::IDeFogSettings::setDeFogAmount (float amount)
+
+pure virtual
+
+ +

Sets the amount of fog to be removed.

+

Range 0.0 - 1.0 (none - all).

+
Parameters:
+ + +
[in]amountamount of fog to remove.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void Argus::Ext::IDeFogSettings::setDeFogEnable (bool enable)
+
+pure virtual
+
+ +

Enables or disables de-fog.

+
Parameters:
+ + +
[in]enablewhether or not de-fog is enabled.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::IDeFogSettings::setDeFogQuality (float quality)
+
+pure virtual
+
+ +

Set the quality of the effect, lower quality results in lower execution time.

+

Range 0.0 - 1.0 (low quality - high quality).

+
Parameters:
+ + +
[in]qualityeffect quality.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDeFogSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDeFogSettings.png new file mode 100644 index 0000000..c153d51 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDeFogSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDebugCaptureSession-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDebugCaptureSession-members.html new file mode 100644 index 0000000..2ab6f48 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDebugCaptureSession-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IDebugCaptureSession Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IDebugCaptureSession, including all inherited members.

+ + + + + + + +
dump(int32_t fd) const =0Argus::Ext::IDebugCaptureSessionpure virtual
id()Argus::Ext::IDebugCaptureSessioninlinestatic
Interface()Argus::Interfaceinlineprotected
setEventInjectionErrorMsg(ArgusInjectError errorId)=0Argus::Ext::IDebugCaptureSessionpure virtual
~IDebugCaptureSession()Argus::Ext::IDebugCaptureSessioninlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDebugCaptureSession.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDebugCaptureSession.html new file mode 100644 index 0000000..3f15450 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDebugCaptureSession.html @@ -0,0 +1,254 @@ + + + + + +Libargus API: Argus::Ext::IDebugCaptureSession Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface used to dump CaptureSession runtime information. + More...

+ +

#include <DebugCaptureSession.h>

+
+Inheritance diagram for Argus::Ext::IDebugCaptureSession:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual Status dump (int32_t fd) const =0
 Returns session runtime information to the specified file descriptor.
virtual Status setEventInjectionErrorMsg (ArgusInjectError errorId)=0
 Set event injection error id.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IDebugCaptureSession ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used to dump CaptureSession runtime information.

+ +

Definition at line 69 of file DebugCaptureSession.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IDebugCaptureSession::~IDebugCaptureSession ()
+
+inlineprotected
+
+ +

Definition at line 85 of file DebugCaptureSession.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::IDebugCaptureSession::dump (int32_t fd) const
+
+pure virtual
+
+ +

Returns session runtime information to the specified file descriptor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IDebugCaptureSession::id ()
+
+inlinestatic
+
+ +

Definition at line 72 of file DebugCaptureSession.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::IDebugCaptureSession::setEventInjectionErrorMsg (ArgusInjectError errorId)
+
+pure virtual
+
+ +

Set event injection error id.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDebugCaptureSession.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDebugCaptureSession.png new file mode 100644 index 0000000..4a6987d Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDebugCaptureSession.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDolWdrSensorMode-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDolWdrSensorMode-members.html new file mode 100644 index 0000000..2ad2a7d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDolWdrSensorMode-members.html @@ -0,0 +1,117 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IDolWdrSensorMode Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IDolWdrSensorMode, including all inherited members.

+ + + + + + + + + + + + +
getExposureCount() const =0Argus::Ext::IDolWdrSensorModepure virtual
getLeftMarginWidth() const =0Argus::Ext::IDolWdrSensorModepure virtual
getLineInfoMarkerWidth() const =0Argus::Ext::IDolWdrSensorModepure virtual
getOpticalBlackRowCount() const =0Argus::Ext::IDolWdrSensorModepure virtual
getPhysicalResolution() const =0Argus::Ext::IDolWdrSensorModepure virtual
getRightMarginWidth() const =0Argus::Ext::IDolWdrSensorModepure virtual
getVerticalBlankPeriodRowCount(std::vector< uint32_t > *verticalBlankPeriodRowCounts) const =0Argus::Ext::IDolWdrSensorModepure virtual
id()Argus::Ext::IDolWdrSensorModeinlinestatic
Interface()Argus::Interfaceinlineprotected
~IDolWdrSensorMode()Argus::Ext::IDolWdrSensorModeinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDolWdrSensorMode.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDolWdrSensorMode.html new file mode 100644 index 0000000..92f2d85 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDolWdrSensorMode.html @@ -0,0 +1,411 @@ + + + + + +Libargus API: Argus::Ext::IDolWdrSensorMode Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the properties of a DOL WDR device. + More...

+ +

#include <DolWdrSensorMode.h>

+
+Inheritance diagram for Argus::Ext::IDolWdrSensorMode:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + +

+Public Member Functions

virtual uint32_t getExposureCount () const =0
 Returns the number of exposures captured per frame for this DOL WDR mode.
virtual uint32_t getOpticalBlackRowCount () const =0
 Returns number of Optical Black rows at the start of each exposure in a DOL WDR frame.
virtual Status getVerticalBlankPeriodRowCount (std::vector< uint32_t > *verticalBlankPeriodRowCounts) const =0
 Returns number of vertical blank period rows for each DOL WDR exposure.
virtual uint32_t getLineInfoMarkerWidth () const =0
 Returns line info markers width in pixels.
virtual uint32_t getLeftMarginWidth () const =0
 Returns number of margin pixels on left per row.
virtual uint32_t getRightMarginWidth () const =0
 Returns number of margin pixels on right per row.
virtual Size2D< uint32_t > getPhysicalResolution () const =0
 Returns the physical resolution derived due to the interleaved exposure output from DOL WDR frames.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IDolWdrSensorMode ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the properties of a DOL WDR device.

+

Returns the extended properties specific to a Digital Overlap (DOL) Wide Dynamic Range (WDR) extended sensor mode. DOL WDR is a multi-exposure technology that enables fusion of various exposures from a single frame to produce a WDR image.

+

A DOL WDR RAW buffer contains different DOL exposures in an interleaved layout. DOL WDR supports two exposure (long and short) and three exposure (long, short and very short) schemes. These schemes are referred to as DOL-2 and DOL-3 respectively.

+

Exposures are time staggered which leads to vertical blank period (VBP) rows being inserted in between various exposures. This scheme results in (N-1) sections of VBP rows for an N exposure DOL WDR frame.

+

Each exposure is preceded by optical black (OB) rows.

+

Each row of DOL WDR RAW interleaved frame starts with a few Line Info (LI) marker pixels. LI pixels distinguish the kind of row. Row types include: a. Long Exposure b. Short Exposure c. Very Short Exposure d. Vertical Blank Period

+

For a DOL-2 exposure scheme, there is only one section of VBP rows. The data layout per exposure looks like this: Long exposure has OB rows, image rows, VBP rows. Short exposure has OB rows, VBP rows, image rows.

+

The ordering of VBP rows changes across exposures but the count of VBP rows per exposure remains the same. The final interleaved DOL WDR RAW frame buffer is produced by interleaving each exposure's data on a per row basis in a round robin fashion across exposures.

+

For a DOL-3 exposure scheme, there are two sections of VBP rows. For the sake of terminology these are referred to as VBP[0] and VBP[1]. The data layout per exposure looks like this: Long exposure has OB rows, image rows, VBP[0] rows, VBP[1] rows. Short exposure has OB rows, VBP[0] rows, image rows, VBP[1] rows. Very Short exposure has OB rows, VBP[0] rows, VBP[1] rows, image rows.

+

Again, only the ordering of VBP[0] and VBP[1] rows changes across exposures but the count of VBP[0] and VBP[1] rows remains the same. Similar to the DOL-2 scheme, the final interleaved DOL WDR RAW frame buffer for DOL-3 scheme is produced by interleaving each exposure's data on a per row basis in a round robin fashion across exposures.

+

This scheme can be extended to DOL-N exposures with (N-1) sections of VBP rows ranging from VBP[0] to VBP[N-2]. When considering the vertical blank period sections for exposure N, the rows of VBP[X] will come before the image data if X < N, otherwise they will come after the image data.

+

Hence, a DOL-N RAW buffer would have different dimensions than the fused output WDR frame buffer. The resolution of the DOL-N RAW buffer is referred to as physical resolution.

+

The set of properties for basic sensor modes is still applicable to DOL WDR sensor mode. Those properties are available through the ISensorMode interface. The only difference is that the resolution property provided by the ISensorMode interface for DOL WDR would be the size of the fused WDR frame. WDR fusion typically eliminates LI markers, OB rows and VBP rows and merges the individual exposures to create a frame that is smaller in height and width than the DOL WDR RAW interleaved frame.

+

Following the LI marker pixels is the actual pixel data for each row. This data may include margin pixels on the left or right side of the row, which are generally used for filtering and cropped out of a fused DOL image. The width of these margin pixels can be queried by getLeftMarginWidth()/getRightMarginWidth().

+
See also:
ISensorMode
+ +

Definition at line 130 of file DolWdrSensorMode.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IDolWdrSensorMode::~IDolWdrSensorMode ()
+
+inlineprotected
+
+ +

Definition at line 184 of file DolWdrSensorMode.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::Ext::IDolWdrSensorMode::getExposureCount () const
+
+pure virtual
+
+ +

Returns the number of exposures captured per frame for this DOL WDR mode.

+

Typically, 2 = Long, Short or 3 = Long, Short, Very Short exposures.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::Ext::IDolWdrSensorMode::getLeftMarginWidth () const
+
+pure virtual
+
+ +

Returns number of margin pixels on left per row.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::Ext::IDolWdrSensorMode::getLineInfoMarkerWidth () const
+
+pure virtual
+
+ +

Returns line info markers width in pixels.

+

These occur at the start of each pixel row to distinguish row types. There are different line info markers to distinguish each different exposure and vertical blank period rows.

+

Optical black rows have the same line info markers as the exposure type they appear on.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::Ext::IDolWdrSensorMode::getOpticalBlackRowCount () const
+
+pure virtual
+
+ +

Returns number of Optical Black rows at the start of each exposure in a DOL WDR frame.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::Ext::IDolWdrSensorMode::getPhysicalResolution () const
+
+pure virtual
+
+ +

Returns the physical resolution derived due to the interleaved exposure output from DOL WDR frames.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::Ext::IDolWdrSensorMode::getRightMarginWidth () const
+
+pure virtual
+
+ +

Returns number of margin pixels on right per row.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::IDolWdrSensorMode::getVerticalBlankPeriodRowCount (std::vector< uint32_t > * verticalBlankPeriodRowCounts) const
+
+pure virtual
+
+ +

Returns number of vertical blank period rows for each DOL WDR exposure.

+
Parameters:
+ + +
[out]verticalBlankPeriodRowCountsThe output vector to store the vertical blank period (VBP) rows per DOL WDR exposure. Size of the vector is getExposureCount()-1 count values. When considering the vertical blank period sections for exposure N, the rows of VBP[X] will come before the image data if X < N, otherwise they will come after the image data.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IDolWdrSensorMode::id ()
+
+inlinestatic
+
+ +

Definition at line 133 of file DolWdrSensorMode.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDolWdrSensorMode.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDolWdrSensorMode.png new file mode 100644 index 0000000..2cf645a Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IDolWdrSensorMode.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectCaps-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectCaps-members.html new file mode 100644 index 0000000..1e7181b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectCaps-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IFaceDetectCaps Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IFaceDetectCaps, including all inherited members.

+ + + + + + +
getMaxFaceDetectResults() const =0Argus::Ext::IFaceDetectCapspure virtual
id()Argus::Ext::IFaceDetectCapsinlinestatic
Interface()Argus::Interfaceinlineprotected
~IFaceDetectCaps()Argus::Ext::IFaceDetectCapsinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectCaps.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectCaps.html new file mode 100644 index 0000000..83844d0 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectCaps.html @@ -0,0 +1,226 @@ + + + + + +Libargus API: Argus::Ext::IFaceDetectCaps Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to expose the face detection capabilities of a CaptureSession. + More...

+ +

#include <FaceDetect.h>

+
+Inheritance diagram for Argus::Ext::IFaceDetectCaps:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + +

+Public Member Functions

virtual uint32_t getMaxFaceDetectResults () const =0
 Returns the maximum number of faces that can be detected by the face detection algorithm per request.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IFaceDetectCaps ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to expose the face detection capabilities of a CaptureSession.

+ +

Definition at line 67 of file FaceDetect.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IFaceDetectCaps::~IFaceDetectCaps ()
+
+inlineprotected
+
+ +

Definition at line 79 of file FaceDetect.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::Ext::IFaceDetectCaps::getMaxFaceDetectResults () const
+
+pure virtual
+
+ +

Returns the maximum number of faces that can be detected by the face detection algorithm per request.

+

Returned value must be >= 1.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IFaceDetectCaps::id ()
+
+inlinestatic
+
+ +

Definition at line 70 of file FaceDetect.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectCaps.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectCaps.png new file mode 100644 index 0000000..b51c60b Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectCaps.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectMetadata-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectMetadata-members.html new file mode 100644 index 0000000..53fd2f3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectMetadata-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IFaceDetectMetadata Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IFaceDetectMetadata, including all inherited members.

+ + + + + + +
getFaceDetectResults(std::vector< InterfaceProvider * > *results) const =0Argus::Ext::IFaceDetectMetadatapure virtual
id()Argus::Ext::IFaceDetectMetadatainlinestatic
Interface()Argus::Interfaceinlineprotected
~IFaceDetectMetadata()Argus::Ext::IFaceDetectMetadatainlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectMetadata.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectMetadata.html new file mode 100644 index 0000000..73bda42 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectMetadata.html @@ -0,0 +1,231 @@ + + + + + +Libargus API: Argus::Ext::IFaceDetectMetadata Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to overall face detection results metadata. + More...

+ +

#include <FaceDetect.h>

+
+Inheritance diagram for Argus::Ext::IFaceDetectMetadata:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + +

+Public Member Functions

virtual Status getFaceDetectResults (std::vector< InterfaceProvider * > *results) const =0
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IFaceDetectMetadata ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to overall face detection results metadata.

+ +

Definition at line 125 of file FaceDetect.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IFaceDetectMetadata::~IFaceDetectMetadata ()
+
+inlineprotected
+
+ +

Definition at line 139 of file FaceDetect.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::IFaceDetectMetadata::getFaceDetectResults (std::vector< InterfaceProvider * > * results) const
+
+pure virtual
+
+
Returns:
the face detection results.
+
Parameters:
+ + +
[out]resultsA vector that will be populated with the face detect results.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IFaceDetectMetadata::id ()
+
+inlinestatic
+
+ +

Definition at line 128 of file FaceDetect.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectMetadata.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectMetadata.png new file mode 100644 index 0000000..ad91a06 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectMetadata.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectResult-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectResult-members.html new file mode 100644 index 0000000..56d3a1a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectResult-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IFaceDetectResult Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IFaceDetectResult, including all inherited members.

+ + + + + + + +
getConfidence() const =0Argus::Ext::IFaceDetectResultpure virtual
getRect() const =0Argus::Ext::IFaceDetectResultpure virtual
id()Argus::Ext::IFaceDetectResultinlinestatic
Interface()Argus::Interfaceinlineprotected
~IFaceDetectResult()Argus::Ext::IFaceDetectResultinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectResult.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectResult.html new file mode 100644 index 0000000..96ded72 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectResult.html @@ -0,0 +1,248 @@ + + + + + +Libargus API: Argus::Ext::IFaceDetectResult Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the properties of a single face detection result. + More...

+ +

#include <FaceDetect.h>

+
+Inheritance diagram for Argus::Ext::IFaceDetectResult:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + +

+Public Member Functions

virtual Rectangle< float > getRect () const =0
virtual float getConfidence () const =0
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IFaceDetectResult ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the properties of a single face detection result.

+ +

Definition at line 150 of file FaceDetect.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IFaceDetectResult::~IFaceDetectResult ()
+
+inlineprotected
+
+ +

Definition at line 170 of file FaceDetect.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::Ext::IFaceDetectResult::getConfidence () const
+
+pure virtual
+
+
Returns:
the confidence level of the result. This confidence is in the range [0, 1], where 1 is the highest confidence. For a typical application that highlights faces in a scene, filtering results to ignore those with a confidence less than 0.5 is suggested.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Rectangle<float> Argus::Ext::IFaceDetectResult::getRect () const
+
+pure virtual
+
+
Returns:
the normlized coordinates of the region containing the face, relative to the uncropped image sensor mode size.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IFaceDetectResult::id ()
+
+inlinestatic
+
+ +

Definition at line 153 of file FaceDetect.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectResult.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectResult.png new file mode 100644 index 0000000..a233a52 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectResult.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectSettings-members.html new file mode 100644 index 0000000..e479f1a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectSettings-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IFaceDetectSettings Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IFaceDetectSettings, including all inherited members.

+ + + + + + + +
getFaceDetectEnable() const =0Argus::Ext::IFaceDetectSettingspure virtual
id()Argus::Ext::IFaceDetectSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setFaceDetectEnable(bool enable)=0Argus::Ext::IFaceDetectSettingspure virtual
~IFaceDetectSettings()Argus::Ext::IFaceDetectSettingsinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectSettings.html new file mode 100644 index 0000000..5bb2ad4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectSettings.html @@ -0,0 +1,258 @@ + + + + + +Libargus API: Argus::Ext::IFaceDetectSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Ext::IFaceDetectSettings Class Reference
+
+
+ +

Interface to face detection settings. + More...

+ +

#include <FaceDetect.h>

+
+Inheritance diagram for Argus::Ext::IFaceDetectSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + +

+Public Member Functions

virtual void setFaceDetectEnable (bool enable)=0
 Enables or disables face detection.
virtual bool getFaceDetectEnable () const =0
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IFaceDetectSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to face detection settings.

+ +

Definition at line 90 of file FaceDetect.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IFaceDetectSettings::~IFaceDetectSettings ()
+
+inlineprotected
+
+ +

Definition at line 109 of file FaceDetect.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::Ext::IFaceDetectSettings::getFaceDetectEnable () const
+
+pure virtual
+
+
Returns:
whether or not face detection is enabled.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IFaceDetectSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 93 of file FaceDetect.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void Argus::Ext::IFaceDetectSettings::setFaceDetectEnable (bool enable)
+
+pure virtual
+
+ +

Enables or disables face detection.

+

When face detection is enabled the CaptureMetadata returned by completed captures will expose the IFaceDetectMetadata interface and the FaceDetectResults returned by this interface will expose the IFaceDetectResults interface.

+
Parameters:
+ + +
[in]enablewhether or not face detection is enabled.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectSettings.png new file mode 100644 index 0000000..f93ccca Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IFaceDetectSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IInternalFrameCount-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IInternalFrameCount-members.html new file mode 100644 index 0000000..45b3408 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IInternalFrameCount-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IInternalFrameCount Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IInternalFrameCount, including all inherited members.

+ + + + + + +
getInternalFrameCount() const =0Argus::Ext::IInternalFrameCountpure virtual
id()Argus::Ext::IInternalFrameCountinlinestatic
Interface()Argus::Interfaceinlineprotected
~IInternalFrameCount()Argus::Ext::IInternalFrameCountinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IInternalFrameCount.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IInternalFrameCount.html new file mode 100644 index 0000000..0c99c02 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IInternalFrameCount.html @@ -0,0 +1,231 @@ + + + + + +Libargus API: Argus::Ext::IInternalFrameCount Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface used to query the internal frame count for a request. + More...

+ +

#include <InternalFrameCount.h>

+
+Inheritance diagram for Argus::Ext::IInternalFrameCount:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + +

+Public Member Functions

virtual uint64_t getInternalFrameCount () const =0
 Returns the internal frame count for the request.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IInternalFrameCount ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used to query the internal frame count for a request.

+

Since internal captures do not generate events, detecting internal captures must be done by comparing the internal capture count of successive client- submitted capture requests.

+

This interface is available from:

+ + +

Definition at line 104 of file InternalFrameCount.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IInternalFrameCount::~IInternalFrameCount ()
+
+inlineprotected
+
+ +

Definition at line 115 of file InternalFrameCount.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual uint64_t Argus::Ext::IInternalFrameCount::getInternalFrameCount () const
+
+pure virtual
+
+ +

Returns the internal frame count for the request.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IInternalFrameCount::id ()
+
+inlinestatic
+
+ +

Definition at line 107 of file InternalFrameCount.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IInternalFrameCount.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IInternalFrameCount.png new file mode 100644 index 0000000..a30439a Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IInternalFrameCount.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1INonLinearHistogram-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1INonLinearHistogram-members.html new file mode 100644 index 0000000..78cb796 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1INonLinearHistogram-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::INonLinearHistogram Member List
+
+
+ +

This is the complete list of members for Argus::Ext::INonLinearHistogram, including all inherited members.

+ + + + + + +
getHistogramBinValues(std::vector< BayerTuple< float > > *binValues) const =0Argus::Ext::INonLinearHistogrampure virtual
id()Argus::Ext::INonLinearHistograminlinestatic
Interface()Argus::Interfaceinlineprotected
~INonLinearHistogram()Argus::Ext::INonLinearHistograminlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1INonLinearHistogram.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1INonLinearHistogram.html new file mode 100644 index 0000000..0fa6815 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1INonLinearHistogram.html @@ -0,0 +1,240 @@ + + + + + +Libargus API: Argus::Ext::INonLinearHistogram Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface used to query the metadata to correctly interpret the compressed histogram data. + More...

+ +

#include <NonLinearHistogram.h>

+
+Inheritance diagram for Argus::Ext::INonLinearHistogram:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + +

+Public Member Functions

virtual Status getHistogramBinValues (std::vector< BayerTuple< float > > *binValues) const =0
 Returns the average bayer values of bins for bayer histogram data.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~INonLinearHistogram ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used to query the metadata to correctly interpret the compressed histogram data.

+

Returns the normalized bin values to correctly interpret the compressed bayer histogram data. This interface will only be exposed in case the histogram is compressed.

+

This interface is available from:

+ + +

Definition at line 69 of file NonLinearHistogram.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::INonLinearHistogram::~INonLinearHistogram ()
+
+inlineprotected
+
+ +

Definition at line 100 of file NonLinearHistogram.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::INonLinearHistogram::getHistogramBinValues (std::vector< BayerTuple< float > > * binValues) const
+
+pure virtual
+
+ +

Returns the average bayer values of bins for bayer histogram data.

+
Parameters:
+ + +
[out]binValuesReturns the normalized average bin values (float in [0,1]) for bins provided by IBayerHistogram interface. In case the histogram data provided by IBayerHistogram::getHistogram() is non-linear, this method will return a vector having the same size as histogram (i.e. IBayerHistogram::getBinCount()), and will contain normalized bayer colour values to which the histogram bin of the same index corresponds.
+
+
+

For Example, in case of Non Linear Histogram

+

IBayerHistogram->getHistogram(&histogram); INonLinearHistogram->getBinValues(&values);

+

for(int i = 0 ; i < histogram.size() ; i++) { cout<<" bin: " << i <<" normalized bin Value: " << values[i] <<" frequency: " << histogram[i]; }

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::INonLinearHistogram::id ()
+
+inlinestatic
+
+ +

Definition at line 72 of file NonLinearHistogram.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1INonLinearHistogram.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1INonLinearHistogram.png new file mode 100644 index 0000000..e8e9cb1 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1INonLinearHistogram.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IPwlWdrSensorMode-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IPwlWdrSensorMode-members.html new file mode 100644 index 0000000..6658ff8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IPwlWdrSensorMode-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::IPwlWdrSensorMode Member List
+
+
+ +

This is the complete list of members for Argus::Ext::IPwlWdrSensorMode, including all inherited members.

+ + + + + + + +
getControlPointCount() const =0Argus::Ext::IPwlWdrSensorModepure virtual
getControlPoints(std::vector< Point2D< float > > *points) const =0Argus::Ext::IPwlWdrSensorModepure virtual
id()Argus::Ext::IPwlWdrSensorModeinlinestatic
Interface()Argus::Interfaceinlineprotected
~Interface()Argus::Interfaceinlineprotected
~IPwlWdrSensorMode()Argus::Ext::IPwlWdrSensorModeinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IPwlWdrSensorMode.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IPwlWdrSensorMode.html new file mode 100644 index 0000000..51bdebe --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IPwlWdrSensorMode.html @@ -0,0 +1,261 @@ + + + + + +Libargus API: Argus::Ext::IPwlWdrSensorMode Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the properties of a PWL WDR device. + More...

+ +

#include <PwlWdrSensorMode.h>

+
+Inheritance diagram for Argus::Ext::IPwlWdrSensorMode:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual uint32_t getControlPointCount () const =0
 Returns the number of control points coordinates in the Piecewise Linear compression curve.
virtual Status getControlPoints (std::vector< Point2D< float > > *points) const =0
 Returns the Piecewise Linear (PWL) compression curve coordinates.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IPwlWdrSensorMode ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the properties of a PWL WDR device.

+

Returns a list of normalized float coordinates (x,y) that define the Piecewise Linear (PWL) compression curve used in the PWL Wide Dynamic Range (WDR) mode. The coordinates are returned in a Point2D tuple. The coordinates can be un-normalized by scaling x-axis and y-axis values by InputBitDepth and OutputBitDepth respectively. The Bit depths can be obtained by using the respective methods in the ISensorMode interface.

+
See also:
ISensorMode
+ +

Definition at line 81 of file PwlWdrSensorMode.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::IPwlWdrSensorMode::~IPwlWdrSensorMode ()
+
+inlineprotected
+
+ +

Definition at line 103 of file PwlWdrSensorMode.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::Ext::IPwlWdrSensorMode::getControlPointCount () const
+
+pure virtual
+
+ +

Returns the number of control points coordinates in the Piecewise Linear compression curve.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::IPwlWdrSensorMode::getControlPoints (std::vector< Point2D< float > > * points) const
+
+pure virtual
+
+ +

Returns the Piecewise Linear (PWL) compression curve coordinates.

+
Parameters:
+ + +
[out]pointsThe output vector to store the PWL compression curve coordinates. Upon successful return, this vector will filled in with getControlPointCount() count values, each containing a coordinates of PWL compression curve within a Point2D tuple.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::IPwlWdrSensorMode::id ()
+
+inlinestatic
+
+ +

Definition at line 84 of file PwlWdrSensorMode.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IPwlWdrSensorMode.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IPwlWdrSensorMode.png new file mode 100644 index 0000000..23ff186 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1IPwlWdrSensorMode.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorEepromData-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorEepromData-members.html new file mode 100644 index 0000000..ac0023c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorEepromData-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::ISensorEepromData Member List
+
+
+ +

This is the complete list of members for Argus::Ext::ISensorEepromData, including all inherited members.

+ + + + + + + +
getSensorEepromData(void *dst, uint32_t size) const =0Argus::Ext::ISensorEepromDatapure virtual
getSensorEepromDataSize() const =0Argus::Ext::ISensorEepromDatapure virtual
id()Argus::Ext::ISensorEepromDatainlinestatic
Interface()Argus::Interfaceinlineprotected
~Interface()Argus::Interfaceinlineprotected
~ISensorEepromData()Argus::Ext::ISensorEepromDatainlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorEepromData.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorEepromData.html new file mode 100644 index 0000000..edd4619 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorEepromData.html @@ -0,0 +1,271 @@ + + + + + +Libargus API: Argus::Ext::ISensorEepromData Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Ext::ISensorEepromData Class Reference
+
+
+ +

Interface used to get EEPROM data. + More...

+ +

#include <SensorEepromData.h>

+
+Inheritance diagram for Argus::Ext::ISensorEepromData:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual uint32_t getSensorEepromDataSize () const =0
 Returns the size of the EEPROM data.
virtual Status getSensorEepromData (void *dst, uint32_t size) const =0
 Copies back the EEPROM data to the provided memory location.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ISensorEepromData ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used to get EEPROM data.

+ +

Definition at line 62 of file SensorEepromData.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::ISensorEepromData::~ISensorEepromData ()
+
+inlineprotected
+
+ +

Definition at line 83 of file SensorEepromData.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::Ext::ISensorEepromData::getSensorEepromData (void * dst,
uint32_t size 
) const
+
+pure virtual
+
+ +

Copies back the EEPROM data to the provided memory location.

+

If the size of dst is smaller than the total size of the EEPROM data, only the first bytes up to size are copied.

+
Parameters:
+ + + +
[out]dstThe pointer to the location where the data will be copied. The caller is responsible for allocating and managing the memory.
[in]sizeThe size of the destination.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::Ext::ISensorEepromData::getSensorEepromDataSize () const
+
+pure virtual
+
+ +

Returns the size of the EEPROM data.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::ISensorEepromData::id ()
+
+inlinestatic
+
+ +

Definition at line 65 of file SensorEepromData.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorEepromData.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorEepromData.png new file mode 100644 index 0000000..a082b8c Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorEepromData.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorOtpData-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorOtpData-members.html new file mode 100644 index 0000000..51c5a29 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorOtpData-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::ISensorOtpData Member List
+
+
+ +

This is the complete list of members for Argus::Ext::ISensorOtpData, including all inherited members.

+ + + + + + + +
getSensorOtpData(void *dst, uint32_t size) const =0Argus::Ext::ISensorOtpDatapure virtual
getSensorOtpDataSize() const =0Argus::Ext::ISensorOtpDatapure virtual
id()Argus::Ext::ISensorOtpDatainlinestatic
Interface()Argus::Interfaceinlineprotected
~Interface()Argus::Interfaceinlineprotected
~ISensorOtpData()Argus::Ext::ISensorOtpDatainlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorOtpData.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorOtpData.html new file mode 100644 index 0000000..5f79041 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorOtpData.html @@ -0,0 +1,271 @@ + + + + + +Libargus API: Argus::Ext::ISensorOtpData Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface used to get OTP data. + More...

+ +

#include <SensorOtpData.h>

+
+Inheritance diagram for Argus::Ext::ISensorOtpData:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual uint32_t getSensorOtpDataSize () const =0
 Returns the size of the OTP data.
virtual Status getSensorOtpData (void *dst, uint32_t size) const =0
 Copies back the OTP data to the provided memory location.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ISensorOtpData ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used to get OTP data.

+ +

Definition at line 62 of file SensorOtpData.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::ISensorOtpData::~ISensorOtpData ()
+
+inlineprotected
+
+ +

Definition at line 83 of file SensorOtpData.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::Ext::ISensorOtpData::getSensorOtpData (void * dst,
uint32_t size 
) const
+
+pure virtual
+
+ +

Copies back the OTP data to the provided memory location.

+

If the size of dst is smaller than the total size of the EEPROM data, only the first bytes up to size are copied.

+
Parameters:
+ + + +
[out]dstThe pointer to the location where the data will be copied. The caller is responsible for allocating and managing the memory.
[in]sizeThe size of the destination.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::Ext::ISensorOtpData::getSensorOtpDataSize () const
+
+pure virtual
+
+ +

Returns the size of the OTP data.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::ISensorOtpData::id ()
+
+inlinestatic
+
+ +

Definition at line 65 of file SensorOtpData.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorOtpData.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorOtpData.png new file mode 100644 index 0000000..abb9524 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorOtpData.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadata-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadata-members.html new file mode 100644 index 0000000..8c6e9be --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadata-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::ISensorPrivateMetadata Member List
+
+
+ +

This is the complete list of members for Argus::Ext::ISensorPrivateMetadata, including all inherited members.

+ + + + + + + +
getMetadata(void *dst, size_t size) const =0Argus::Ext::ISensorPrivateMetadatapure virtual
getMetadataSize() const =0Argus::Ext::ISensorPrivateMetadatapure virtual
id()Argus::Ext::ISensorPrivateMetadatainlinestatic
Interface()Argus::Interfaceinlineprotected
~Interface()Argus::Interfaceinlineprotected
~ISensorPrivateMetadata()Argus::Ext::ISensorPrivateMetadatainlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadata.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadata.html new file mode 100644 index 0000000..2a7cdb3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadata.html @@ -0,0 +1,271 @@ + + + + + +Libargus API: Argus::Ext::ISensorPrivateMetadata Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface used to access sensor private metadata. + More...

+ +

#include <SensorPrivateMetadata.h>

+
+Inheritance diagram for Argus::Ext::ISensorPrivateMetadata:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual size_t getMetadataSize () const =0
 Returns the size of the embedded metadata.
virtual Status getMetadata (void *dst, size_t size) const =0
 Copies back the metadata to the provided memory location.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ISensorPrivateMetadata ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used to access sensor private metadata.

+ +

Definition at line 117 of file SensorPrivateMetadata.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::ISensorPrivateMetadata::~ISensorPrivateMetadata ()
+
+inlineprotected
+
+ +

Definition at line 138 of file SensorPrivateMetadata.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::Ext::ISensorPrivateMetadata::getMetadata (void * dst,
size_t size 
) const
+
+pure virtual
+
+ +

Copies back the metadata to the provided memory location.

+

If the size of dst is smaller than the total size of the metadata, only the first bytes up to size are copied.

+
Parameters:
+ + + +
[in,out]dstThe pointer to the location where the data will be copied. The caller is responsible for allocating and managing the memory.
[in]sizeThe size of the destination.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual size_t Argus::Ext::ISensorPrivateMetadata::getMetadataSize () const
+
+pure virtual
+
+ +

Returns the size of the embedded metadata.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::ISensorPrivateMetadata::id ()
+
+inlinestatic
+
+ +

Definition at line 120 of file SensorPrivateMetadata.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadata.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadata.png new file mode 100644 index 0000000..8dad041 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadata.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps-members.html new file mode 100644 index 0000000..0b3b1ff --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::ISensorPrivateMetadataCaps Member List
+
+
+ +

This is the complete list of members for Argus::Ext::ISensorPrivateMetadataCaps, including all inherited members.

+ + + + + + +
getMetadataSize() const =0Argus::Ext::ISensorPrivateMetadataCapspure virtual
id()Argus::Ext::ISensorPrivateMetadataCapsinlinestatic
Interface()Argus::Interfaceinlineprotected
~Interface()Argus::Interfaceinlineprotected
~ISensorPrivateMetadataCaps()Argus::Ext::ISensorPrivateMetadataCapsinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.html new file mode 100644 index 0000000..a2a533a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.html @@ -0,0 +1,225 @@ + + + + + +Libargus API: Argus::Ext::ISensorPrivateMetadataCaps Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface used to query the availability and size in bytes of sensor private metadata. + More...

+ +

#include <SensorPrivateMetadata.h>

+
+Inheritance diagram for Argus::Ext::ISensorPrivateMetadataCaps:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + +

+Public Member Functions

virtual size_t getMetadataSize () const =0
 Returns the size in bytes of the private metadata.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ISensorPrivateMetadataCaps ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used to query the availability and size in bytes of sensor private metadata.

+ +

Definition at line 67 of file SensorPrivateMetadata.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::ISensorPrivateMetadataCaps::~ISensorPrivateMetadataCaps ()
+
+inlineprotected
+
+ +

Definition at line 78 of file SensorPrivateMetadata.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual size_t Argus::Ext::ISensorPrivateMetadataCaps::getMetadataSize () const
+
+pure virtual
+
+ +

Returns the size in bytes of the private metadata.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::ISensorPrivateMetadataCaps::id ()
+
+inlinestatic
+
+ +

Definition at line 70 of file SensorPrivateMetadata.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.png new file mode 100644 index 0000000..9d3ce72 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest-members.html new file mode 100644 index 0000000..9faa9eb --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::ISensorPrivateMetadataClientBufferRequest Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html new file mode 100644 index 0000000..04aeb9c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html @@ -0,0 +1,271 @@ + + + + + +Libargus API: Argus::Ext::ISensorPrivateMetadataClientBufferRequest Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Ext::ISensorPrivateMetadataClientBufferRequest Class Reference
+
+
+ +

Interface used to set client buffer for sensor private metadata for a request. + More...

+ +

#include <SensorPrivateMetadataClientBuffer.h>

+
+Inheritance diagram for Argus::Ext::ISensorPrivateMetadataClientBufferRequest:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual Status setClientMetadataBuffer (void *buf, size_t size)=0
 Client allocate the metadata buffer and set the address of the buffer, Argus writes the sensor metadata directly to the buffer.
virtual bool getClientMetadataBufferEnable () const =0
 Returns if client metadata buffer is used for this request.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ISensorPrivateMetadataClientBufferRequest ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used to set client buffer for sensor private metadata for a request.

+ +

Definition at line 69 of file SensorPrivateMetadataClientBuffer.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::ISensorPrivateMetadataClientBufferRequest::~ISensorPrivateMetadataClientBufferRequest ()
+
+inlineprotected
+
+ +

Definition at line 89 of file SensorPrivateMetadataClientBuffer.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::Ext::ISensorPrivateMetadataClientBufferRequest::getClientMetadataBufferEnable () const
+
+pure virtual
+
+ +

Returns if client metadata buffer is used for this request.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::ISensorPrivateMetadataClientBufferRequest::id ()
+
+inlinestatic
+
+ +

Definition at line 72 of file SensorPrivateMetadataClientBuffer.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::Ext::ISensorPrivateMetadataClientBufferRequest::setClientMetadataBuffer (void * buf,
size_t size 
)
+
+pure virtual
+
+ +

Client allocate the metadata buffer and set the address of the buffer, Argus writes the sensor metadata directly to the buffer.

+

This method is supported only in single process mode.

+
Parameters:
+ + + +
[in]bufSpecifies the address of client buffer.
[in]sizeSpecifies the size in bytes of the metadata buffer.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.png new file mode 100644 index 0000000..8c6a067 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest-members.html new file mode 100644 index 0000000..00f1890 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::ISensorPrivateMetadataRequest Member List
+
+ + + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html new file mode 100644 index 0000000..8b20ab7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html @@ -0,0 +1,259 @@ + + + + + +Libargus API: Argus::Ext::ISensorPrivateMetadataRequest Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Ext::ISensorPrivateMetadataRequest Class Reference
+
+
+ +

Interface used enable the output of sensor private metadata for a request. + More...

+ +

#include <SensorPrivateMetadata.h>

+
+Inheritance diagram for Argus::Ext::ISensorPrivateMetadataRequest:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual void setMetadataEnable (bool enable)=0
 Enables the sensor private metadata, will only work if the sensor supports embedded metadata.
virtual bool getMetadataEnable () const =0
 Returns if the metadata is enabled for this request.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ISensorPrivateMetadataRequest ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used enable the output of sensor private metadata for a request.

+ +

Definition at line 89 of file SensorPrivateMetadata.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::ISensorPrivateMetadataRequest::~ISensorPrivateMetadataRequest ()
+
+inlineprotected
+
+ +

Definition at line 106 of file SensorPrivateMetadata.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::Ext::ISensorPrivateMetadataRequest::getMetadataEnable () const
+
+pure virtual
+
+ +

Returns if the metadata is enabled for this request.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::ISensorPrivateMetadataRequest::id ()
+
+inlinestatic
+
+ +

Definition at line 92 of file SensorPrivateMetadata.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void Argus::Ext::ISensorPrivateMetadataRequest::setMetadataEnable (bool enable)
+
+pure virtual
+
+ +

Enables the sensor private metadata, will only work if the sensor supports embedded metadata.

+
Parameters:
+ + +
[in]enablewhether to output embedded metadata.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.png new file mode 100644 index 0000000..e08b2f1 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorTimestampTsc-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorTimestampTsc-members.html new file mode 100644 index 0000000..0652772 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorTimestampTsc-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::ISensorTimestampTsc Member List
+
+
+ +

This is the complete list of members for Argus::Ext::ISensorTimestampTsc, including all inherited members.

+ + + + + + + +
getSensorEofTimestampTsc() const =0Argus::Ext::ISensorTimestampTscpure virtual
getSensorSofTimestampTsc() const =0Argus::Ext::ISensorTimestampTscpure virtual
id()Argus::Ext::ISensorTimestampTscinlinestatic
Interface()Argus::Interfaceinlineprotected
~Interface()Argus::Interfaceinlineprotected
~ISensorTimestampTsc()Argus::Ext::ISensorTimestampTscinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorTimestampTsc.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorTimestampTsc.html new file mode 100644 index 0000000..0752382 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorTimestampTsc.html @@ -0,0 +1,252 @@ + + + + + +Libargus API: Argus::Ext::ISensorTimestampTsc Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface used to get TSC HW timestamp. + More...

+ +

#include <SensorTimestampTsc.h>

+
+Inheritance diagram for Argus::Ext::ISensorTimestampTsc:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual uint64_t getSensorSofTimestampTsc () const =0
 Returns the VI HW (SOF) timestamp based on tegra wide timestamp system counter (TSC) This is the start timestamp for the sensor (in nanoseconds).
virtual uint64_t getSensorEofTimestampTsc () const =0
 Returns the VI HW (EOF) timestamp based on tegra wide timestamp system counter (TSC) This is the end timestamp for the sensor (in nanoseconds).
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ISensorTimestampTsc ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used to get TSC HW timestamp.

+ +

Definition at line 63 of file SensorTimestampTsc.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::ISensorTimestampTsc::~ISensorTimestampTsc ()
+
+inlineprotected
+
+ +

Definition at line 81 of file SensorTimestampTsc.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual uint64_t Argus::Ext::ISensorTimestampTsc::getSensorEofTimestampTsc () const
+
+pure virtual
+
+ +

Returns the VI HW (EOF) timestamp based on tegra wide timestamp system counter (TSC) This is the end timestamp for the sensor (in nanoseconds).

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint64_t Argus::Ext::ISensorTimestampTsc::getSensorSofTimestampTsc () const
+
+pure virtual
+
+ +

Returns the VI HW (SOF) timestamp based on tegra wide timestamp system counter (TSC) This is the start timestamp for the sensor (in nanoseconds).

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::ISensorTimestampTsc::id ()
+
+inlinestatic
+
+ +

Definition at line 66 of file SensorTimestampTsc.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorTimestampTsc.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorTimestampTsc.png new file mode 100644 index 0000000..1f46af7 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISensorTimestampTsc.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISyncSensorCalibrationData-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISyncSensorCalibrationData-members.html new file mode 100644 index 0000000..f33f2d2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISyncSensorCalibrationData-members.html @@ -0,0 +1,129 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Ext::ISyncSensorCalibrationData Member List
+
+
+ +

This is the complete list of members for Argus::Ext::ISyncSensorCalibrationData, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
getAngularVelocityBias() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getFisheyeMappingType() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getFocalLength() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getGravityAcc() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getImageSizeInPixels() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getImuRotationParams() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getImuTranslationParams() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getLensDistortionType() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getLinearAccBias() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getPrincipalPoint() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getRadialCoeffs(std::vector< float > *k, const DistortionType &distortionType) const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getRadialCoeffsCount(const DistortionType &distortionType) const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getRotationParams() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getSkew() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getSyncSensorModuleId(void *syncSensorId, size_t size) const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getTangentialCoeffs(std::vector< float > *p) const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getTangentialCoeffsCount() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
getTranslationParams() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
id()Argus::Ext::ISyncSensorCalibrationDatainlinestatic
Interface()Argus::Interfaceinlineprotected
isImuSensorAvailable() const =0Argus::Ext::ISyncSensorCalibrationDatapure virtual
~Interface()Argus::Interfaceinlineprotected
~ISyncSensorCalibrationData()Argus::Ext::ISyncSensorCalibrationDatainlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html new file mode 100644 index 0000000..c5a1789 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html @@ -0,0 +1,764 @@ + + + + + +Libargus API: Argus::Ext::ISyncSensorCalibrationData Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface used to access sync sensor calibration data. + More...

+ +

#include <SyncSensorCalibrationData.h>

+
+Inheritance diagram for Argus::Ext::ISyncSensorCalibrationData:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual Status getSyncSensorModuleId (void *syncSensorId, size_t size) const =0
 Returns the sync sensor module id in the provided memory location.
virtual Size2D< uint32_t > getImageSizeInPixels () const =0
 Returns the size of the image in pixels.
virtual Point2D< float > getFocalLength () const =0
 Returns the focal length fx and fy from intrinsic parameters.
virtual float getSkew () const =0
 Returns the skew from intrinsic parameters.
virtual Point2D< float > getPrincipalPoint () const =0
 Returns the principal point (optical center) x and y from intrinsic parameters.
virtual DistortionType getLensDistortionType () const =0
 Returns the lens distortion type as per the model being used.
virtual MappingType getFisheyeMappingType () const =0
 Returns the mapping type in case of fisheye distortion.
virtual uint32_t getRadialCoeffsCount (const DistortionType &distortionType) const =0
 Returns the radial coefficients count in case of polynomial or fisheye distortion.
virtual Status getRadialCoeffs (std::vector< float > *k, const DistortionType &distortionType) const =0
 Returns the radial coefficients vector as per distortion type and size of the vector is given by getRadialCoeffsCount().
virtual uint32_t getTangentialCoeffsCount () const =0
 Returns the tangential coefficients count in case of polynomial distortion.
virtual Status getTangentialCoeffs (std::vector< float > *p) const =0
 Returns the tangential coefficients in case of polynomial distortion and size of the vector is given by getTangentialCoeffsCount().
virtual Point3D< float > getRotationParams () const =0
 Returns the rotation parameter expressed in Rodrigues notation from extrinsic parameters.
virtual Point3D< float > getTranslationParams () const =0
 Returns the translation parameters in x, y and z co-ordinates with respect to a reference point from extrinsic params.
virtual bool isImuSensorAvailable () const =0
 Returns whether IMU sensor is present or not.
virtual Point3D< float > getLinearAccBias () const =0
 Returns the linear acceleration bias for all three axes x, y and z of the IMU device.
virtual Point3D< float > getAngularVelocityBias () const =0
 Returns the angular velocity bias for all three axes x, y and z of the IMU device.
virtual Point3D< float > getGravityAcc () const =0
 Returns the gravity acceleration for all three axes x, y and z of the IMU device.
virtual Point3D< float > getImuRotationParams () const =0
 Returns the IMU rotation parameter expressed in Rodrigues notation from extrinsic parameters.
virtual Point3D< float > getImuTranslationParams () const =0
 Returns the IMU translation parameters in x, y and z co-ordinates with respect to a reference point from extrinsic params.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ISyncSensorCalibrationData ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface used to access sync sensor calibration data.

+ +

Definition at line 77 of file SyncSensorCalibrationData.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Ext::ISyncSensorCalibrationData::~ISyncSensorCalibrationData ()
+
+inlineprotected
+
+ +

Definition at line 199 of file SyncSensorCalibrationData.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual Point3D<float> Argus::Ext::ISyncSensorCalibrationData::getAngularVelocityBias () const
+
+pure virtual
+
+ +

Returns the angular velocity bias for all three axes x, y and z of the IMU device.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual MappingType Argus::Ext::ISyncSensorCalibrationData::getFisheyeMappingType () const
+
+pure virtual
+
+ +

Returns the mapping type in case of fisheye distortion.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Point2D<float> Argus::Ext::ISyncSensorCalibrationData::getFocalLength () const
+
+pure virtual
+
+ +

Returns the focal length fx and fy from intrinsic parameters.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Point3D<float> Argus::Ext::ISyncSensorCalibrationData::getGravityAcc () const
+
+pure virtual
+
+ +

Returns the gravity acceleration for all three axes x, y and z of the IMU device.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::Ext::ISyncSensorCalibrationData::getImageSizeInPixels () const
+
+pure virtual
+
+ +

Returns the size of the image in pixels.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Point3D<float> Argus::Ext::ISyncSensorCalibrationData::getImuRotationParams () const
+
+pure virtual
+
+ +

Returns the IMU rotation parameter expressed in Rodrigues notation from extrinsic parameters.

+

angle = sqrt(rx^2+ry^2+rz^2). unit axis = [rx,ry,rz]/angle.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Point3D<float> Argus::Ext::ISyncSensorCalibrationData::getImuTranslationParams () const
+
+pure virtual
+
+ +

Returns the IMU translation parameters in x, y and z co-ordinates with respect to a reference point from extrinsic params.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual DistortionType Argus::Ext::ISyncSensorCalibrationData::getLensDistortionType () const
+
+pure virtual
+
+ +

Returns the lens distortion type as per the model being used.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Point3D<float> Argus::Ext::ISyncSensorCalibrationData::getLinearAccBias () const
+
+pure virtual
+
+ +

Returns the linear acceleration bias for all three axes x, y and z of the IMU device.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Point2D<float> Argus::Ext::ISyncSensorCalibrationData::getPrincipalPoint () const
+
+pure virtual
+
+ +

Returns the principal point (optical center) x and y from intrinsic parameters.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::Ext::ISyncSensorCalibrationData::getRadialCoeffs (std::vector< float > * k,
const DistortionType & distortionType 
) const
+
+pure virtual
+
+ +

Returns the radial coefficients vector as per distortion type and size of the vector is given by getRadialCoeffsCount().

+
Parameters:
+ + + +
[out]kThe radial coefficient vector from distortion properties.
[in]distortionTypeThe lens distortion type.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual uint32_t Argus::Ext::ISyncSensorCalibrationData::getRadialCoeffsCount (const DistortionType & distortionType) const
+
+pure virtual
+
+ +

Returns the radial coefficients count in case of polynomial or fisheye distortion.

+
Parameters:
+ + +
[in]distortionTypeThe lens distortion type.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Point3D<float> Argus::Ext::ISyncSensorCalibrationData::getRotationParams () const
+
+pure virtual
+
+ +

Returns the rotation parameter expressed in Rodrigues notation from extrinsic parameters.

+

angle = sqrt(rx^2+ry^2+rz^2). unit axis = [rx,ry,rz]/angle.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::Ext::ISyncSensorCalibrationData::getSkew () const
+
+pure virtual
+
+ +

Returns the skew from intrinsic parameters.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::Ext::ISyncSensorCalibrationData::getSyncSensorModuleId (void * syncSensorId,
size_t size 
) const
+
+pure virtual
+
+ +

Returns the sync sensor module id in the provided memory location.

+

The maximum supported length of sync sensor id string is 32.

+
Parameters:
+ + + +
[in,out]syncSensorIdPointer for getting the sync sensor id string associated with sensor.
[in]sizeThe size of the syncSensorId.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::Ext::ISyncSensorCalibrationData::getTangentialCoeffs (std::vector< float > * p) const
+
+pure virtual
+
+ +

Returns the tangential coefficients in case of polynomial distortion and size of the vector is given by getTangentialCoeffsCount().

+
Parameters:
+ + +
[out]pThe tangential coefficient vector from distortion properties.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::Ext::ISyncSensorCalibrationData::getTangentialCoeffsCount () const
+
+pure virtual
+
+ +

Returns the tangential coefficients count in case of polynomial distortion.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Point3D<float> Argus::Ext::ISyncSensorCalibrationData::getTranslationParams () const
+
+pure virtual
+
+ +

Returns the translation parameters in x, y and z co-ordinates with respect to a reference point from extrinsic params.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::Ext::ISyncSensorCalibrationData::id ()
+
+inlinestatic
+
+ +

Definition at line 80 of file SyncSensorCalibrationData.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::Ext::ISyncSensorCalibrationData::isImuSensorAvailable () const
+
+pure virtual
+
+ +

Returns whether IMU sensor is present or not.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISyncSensorCalibrationData.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISyncSensorCalibrationData.png new file mode 100644 index 0000000..12167d2 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Ext_1_1ISyncSensorCalibrationData.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IAutoControlSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IAutoControlSettings-members.html new file mode 100644 index 0000000..51ac451 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IAutoControlSettings-members.html @@ -0,0 +1,148 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IAutoControlSettings Member List
+
+
+ +

This is the complete list of members for Argus::IAutoControlSettings, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getAeAntibandingMode() const =0Argus::IAutoControlSettingspure virtual
getAeLock() const =0Argus::IAutoControlSettingspure virtual
getAeRegions(std::vector< AcRegion > *regions) const =0Argus::IAutoControlSettingspure virtual
getAfRegions(std::vector< AcRegion > *regions) const =0Argus::IAutoControlSettingspure virtual
getAwbLock() const =0Argus::IAutoControlSettingspure virtual
getAwbMode() const =0Argus::IAutoControlSettingspure virtual
getAwbRegions(std::vector< AcRegion > *regions) const =0Argus::IAutoControlSettingspure virtual
getBayerHistogramRegion() const =0Argus::IAutoControlSettingspure virtual
getColorCorrectionMatrix(std::vector< float > *matrix) const =0Argus::IAutoControlSettingspure virtual
getColorCorrectionMatrixEnable() const =0Argus::IAutoControlSettingspure virtual
getColorCorrectionMatrixSize() const =0Argus::IAutoControlSettingspure virtual
getColorSaturation() const =0Argus::IAutoControlSettingspure virtual
getColorSaturationBias() const =0Argus::IAutoControlSettingspure virtual
getColorSaturationEnable() const =0Argus::IAutoControlSettingspure virtual
getExposureCompensation() const =0Argus::IAutoControlSettingspure virtual
getIspDigitalGainRange() const =0Argus::IAutoControlSettingspure virtual
getToneMapCurve(RGBChannel channel, std::vector< float > *curve) const =0Argus::IAutoControlSettingspure virtual
getToneMapCurveEnable() const =0Argus::IAutoControlSettingspure virtual
getToneMapCurveSize(RGBChannel channel) const =0Argus::IAutoControlSettingspure virtual
getWbGains() const =0Argus::IAutoControlSettingspure virtual
id()Argus::IAutoControlSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setAeAntibandingMode(const AeAntibandingMode &mode)=0Argus::IAutoControlSettingspure virtual
setAeLock(bool lock)=0Argus::IAutoControlSettingspure virtual
setAeRegions(const std::vector< AcRegion > &regions)=0Argus::IAutoControlSettingspure virtual
setAfRegions(const std::vector< AcRegion > &regions)=0Argus::IAutoControlSettingspure virtual
setAwbLock(bool lock)=0Argus::IAutoControlSettingspure virtual
setAwbMode(const AwbMode &mode)=0Argus::IAutoControlSettingspure virtual
setAwbRegions(const std::vector< AcRegion > &regions)=0Argus::IAutoControlSettingspure virtual
setBayerHistogramRegion(const Rectangle< uint32_t > &region)=0Argus::IAutoControlSettingspure virtual
setColorCorrectionMatrix(const std::vector< float > &matrix)=0Argus::IAutoControlSettingspure virtual
setColorCorrectionMatrixEnable(bool enable)=0Argus::IAutoControlSettingspure virtual
setColorSaturation(float saturation)=0Argus::IAutoControlSettingspure virtual
setColorSaturationBias(float bias)=0Argus::IAutoControlSettingspure virtual
setColorSaturationEnable(bool enable)=0Argus::IAutoControlSettingspure virtual
setExposureCompensation(float ev)=0Argus::IAutoControlSettingspure virtual
setIspDigitalGainRange(const Range< float > &gain)=0Argus::IAutoControlSettingspure virtual
setToneMapCurve(RGBChannel channel, const std::vector< float > &curve)=0Argus::IAutoControlSettingspure virtual
setToneMapCurveEnable(bool enable)=0Argus::IAutoControlSettingspure virtual
setWbGains(const BayerTuple< float > &gains)=0Argus::IAutoControlSettingspure virtual
~IAutoControlSettings()Argus::IAutoControlSettingsinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IAutoControlSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IAutoControlSettings.html new file mode 100644 index 0000000..1918822 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IAutoControlSettings.html @@ -0,0 +1,1461 @@ + + + + + +Libargus API: Argus::IAutoControlSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the auto control settings (provided by IRequest::getAutoControlSettings()). + More...

+ +

#include <Settings.h>

+
+Inheritance diagram for Argus::IAutoControlSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual Status setAeAntibandingMode (const AeAntibandingMode &mode)=0
 Sets the AE antibanding mode.
virtual AeAntibandingMode getAeAntibandingMode () const =0
 Returns the AE antibanding mode.
virtual Status setAeLock (bool lock)=0
 Sets the AE lock.
virtual bool getAeLock () const =0
 Returns the AE lock.
virtual Status setAeRegions (const std::vector< AcRegion > &regions)=0
 Sets the AE regions of interest.
virtual Status getAeRegions (std::vector< AcRegion > *regions) const =0
 Returns the AE regions of interest.
virtual Status setBayerHistogramRegion (const Rectangle< uint32_t > &region)=0
 Sets the bayer histogram region of interest.
virtual Rectangle< uint32_t > getBayerHistogramRegion () const =0
 Returns the rectangle of the bayer histogram region of interest.
virtual Status setAwbLock (bool lock)=0
 Sets the AWB lock.
virtual bool getAwbLock () const =0
 Returns the AWB lock.
virtual Status setAwbMode (const AwbMode &mode)=0
 Sets the AWB mode.
virtual AwbMode getAwbMode () const =0
 Returns the AWB mode.
virtual Status setAwbRegions (const std::vector< AcRegion > &regions)=0
 Sets the AWB regions of interest.
virtual Status getAwbRegions (std::vector< AcRegion > *regions) const =0
 Returns the AWB regions of interest.
virtual Status setAfRegions (const std::vector< AcRegion > &regions)=0
 Sets the AF regions of interest.
virtual Status getAfRegions (std::vector< AcRegion > *regions) const =0
 Returns the AF regions of interest.
virtual Status setWbGains (const BayerTuple< float > &gains)=0
 Sets the Manual White Balance gains.
virtual BayerTuple< float > getWbGains () const =0
 Returns the Manual White Balance gains.
virtual Size2D< uint32_t > getColorCorrectionMatrixSize () const =0
 Returns the size of the color correction matrix.
virtual Status setColorCorrectionMatrix (const std::vector< float > &matrix)=0
 Sets the user-specified color correction matrix.
virtual Status getColorCorrectionMatrix (std::vector< float > *matrix) const =0
 Returns the user-specified color correction matrix.
virtual Status setColorCorrectionMatrixEnable (bool enable)=0
 Enables the user-specified color correction matrix.
virtual bool getColorCorrectionMatrixEnable () const =0
 Returns the enable for the user-specified color correction matrix.
virtual Status setColorSaturation (float saturation)=0
 Sets the user-specified absolute color saturation.
virtual float getColorSaturation () const =0
 Returns the user-specified absolute color saturation (.
virtual Status setColorSaturationEnable (bool enable)=0
 Enables the user-specified absolute color saturation.
virtual bool getColorSaturationEnable () const =0
 Returns the enable for the user-specified color saturation.
virtual Status setColorSaturationBias (float bias)=0
 Sets the color saturation bias.
virtual float getColorSaturationBias () const =0
 Returns the color saturation bias.
virtual Status setExposureCompensation (float ev)=0
 Sets the exposure compensation.
virtual float getExposureCompensation () const =0
 Returns the exposure compensation.
virtual uint32_t getToneMapCurveSize (RGBChannel channel) const =0
 Returns the number of elements required for the tone map curve.
virtual Status setToneMapCurve (RGBChannel channel, const std::vector< float > &curve)=0
 Sets the user-specified tone map curve for a channel on the stream.
virtual Status getToneMapCurve (RGBChannel channel, std::vector< float > *curve) const =0
 Returns the user-specified tone map curve for a channel on the stream.
virtual Status setToneMapCurveEnable (bool enable)=0
 Enables the user-specified tone map.
virtual bool getToneMapCurveEnable () const =0
 Returns the enable for the user-specified tone map.
virtual Status setIspDigitalGainRange (const Range< float > &gain)=0
 Sets the user-specified Isp Digital gain range.
virtual Range< float > getIspDigitalGainRange () const =0
 Returns the user-specified Isp Digital gain range.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IAutoControlSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the auto control settings (provided by IRequest::getAutoControlSettings()).

+ +

Definition at line 228 of file Settings.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IAutoControlSettings::~IAutoControlSettings ()
+
+inlineprotected
+
+ +

Definition at line 538 of file Settings.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual AeAntibandingMode Argus::IAutoControlSettings::getAeAntibandingMode () const
+
+pure virtual
+
+ +

Returns the AE antibanding mode.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::IAutoControlSettings::getAeLock () const
+
+pure virtual
+
+ +

Returns the AE lock.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::getAeRegions (std::vector< AcRegion > * regions) const
+
+pure virtual
+
+ +

Returns the AE regions of interest.

+
Parameters:
+ + +
[out]regionsA vector that will be populated with the AE regions of interest.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::getAfRegions (std::vector< AcRegion > * regions) const
+
+pure virtual
+
+ +

Returns the AF regions of interest.

+
Parameters:
+ + +
[out]regionsA vector that will be populated with the AF regions of interest.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::IAutoControlSettings::getAwbLock () const
+
+pure virtual
+
+ +

Returns the AWB lock.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual AwbMode Argus::IAutoControlSettings::getAwbMode () const
+
+pure virtual
+
+ +

Returns the AWB mode.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::getAwbRegions (std::vector< AcRegion > * regions) const
+
+pure virtual
+
+ +

Returns the AWB regions of interest.

+
Parameters:
+ + +
[out]regionsA vector that will be populated with the AWB regions of interest.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Rectangle<uint32_t> Argus::IAutoControlSettings::getBayerHistogramRegion () const
+
+pure virtual
+
+ +

Returns the rectangle of the bayer histogram region of interest.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::getColorCorrectionMatrix (std::vector< float > * matrix) const
+
+pure virtual
+
+ +

Returns the user-specified color correction matrix.

+
Parameters:
+ + +
[out]matrixA matrix that will be populated with the CCM.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::IAutoControlSettings::getColorCorrectionMatrixEnable () const
+
+pure virtual
+
+ +

Returns the enable for the user-specified color correction matrix.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::IAutoControlSettings::getColorCorrectionMatrixSize () const
+
+pure virtual
+
+ +

Returns the size of the color correction matrix.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::IAutoControlSettings::getColorSaturation () const
+
+pure virtual
+
+ +

Returns the user-specified absolute color saturation (.

+
See also:
setColorSaturation).
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::IAutoControlSettings::getColorSaturationBias () const
+
+pure virtual
+
+ +

Returns the color saturation bias.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::IAutoControlSettings::getColorSaturationEnable () const
+
+pure virtual
+
+ +

Returns the enable for the user-specified color saturation.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::IAutoControlSettings::getExposureCompensation () const
+
+pure virtual
+
+ +

Returns the exposure compensation.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<float> Argus::IAutoControlSettings::getIspDigitalGainRange () const
+
+pure virtual
+
+ +

Returns the user-specified Isp Digital gain range.

+
Returns:
Isp Digital gain
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::IAutoControlSettings::getToneMapCurve (RGBChannel channel,
std::vector< float > * curve 
) const
+
+pure virtual
+
+ +

Returns the user-specified tone map curve for a channel on the stream.

+
Parameters:
+ + + +
[in]channelThe color the curve corresponds to.
[out]curveA vector that will be populated by the tone map curve for the specified color channel.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::IAutoControlSettings::getToneMapCurveEnable () const
+
+pure virtual
+
+ +

Returns the enable for the user-specified tone map.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual uint32_t Argus::IAutoControlSettings::getToneMapCurveSize (RGBChannel channel) const
+
+pure virtual
+
+ +

Returns the number of elements required for the tone map curve.

+
Parameters:
+ + +
[in]channelThe color channel the curve size corresponds to.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual BayerTuple<float> Argus::IAutoControlSettings::getWbGains () const
+
+pure virtual
+
+ +

Returns the Manual White Balance gains.

+
Returns:
Manual White Balance Gains structure
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IAutoControlSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 231 of file Settings.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setAeAntibandingMode (const AeAntibandingMode & mode)
+
+pure virtual
+
+ +

Sets the AE antibanding mode.

+
Parameters:
+ + +
[in]modeThe requested antibanding mode.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setAeLock (bool lock)
+
+pure virtual
+
+ +

Sets the AE lock.

+

When locked, AE will maintain constant exposure.

+
Parameters:
+ + +
[in]lockIf true, locks AE at its current exposure.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setAeRegions (const std::vector< AcRegion > & regions)
+
+pure virtual
+
+ +

Sets the AE regions of interest.

+

If no regions are specified, the region of interest will be determined by device and obtain by CameraMetadata::getAeRegions.

+
Parameters:
+ + +
[in]regionsThe AE regions of interest. The maximum number of regions is returned by ICameraProperties::getMaxAeRegions(). The minimum supported size of resultatnt region is returned by ICameraProperties::getMinAeRegionSize().
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setAfRegions (const std::vector< AcRegion > & regions)
+
+pure virtual
+
+ +

Sets the AF regions of interest.

+

If no regions are specified, the region of interest will be determined by device and obtain by CameraMetadata::getAfRegions.

+
Parameters:
+ + +
[in]regionsThe AF regions of interest. The maximum number of regions is returned by ICameraProperties::getMaxAfRegions().
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setAwbLock (bool lock)
+
+pure virtual
+
+ +

Sets the AWB lock.

+
Parameters:
+ + +
[in]lockIf true, locks AWB at its current state.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setAwbMode (const AwbMode & mode)
+
+pure virtual
+
+ +

Sets the AWB mode.

+
Parameters:
+ + +
[in]modeThe new AWB mode.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setAwbRegions (const std::vector< AcRegion > & regions)
+
+pure virtual
+
+ +

Sets the AWB regions of interest.

+

If no regions are specified, the region of interest will be determined by device and obtain by CameraMetadata::getAwbRegions.

+
Parameters:
+ + +
[in]regionsThe AWB regions of interest. The maximum number of regions is returned by ICameraProperties::getMaxAwbRegions().
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setBayerHistogramRegion (const Rectangle< uint32_t > & region)
+
+pure virtual
+
+ +

Sets the bayer histogram region of interest.

+

If no region is specified, the entire image is the region of interest.

+
Parameters:
+ + +
[in]regionThe bayer histogram region of interest.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setColorCorrectionMatrix (const std::vector< float > & matrix)
+
+pure virtual
+
+ +

Sets the user-specified color correction matrix.

+

This matrix will be ignored unless getColorCorrectionMatrixEnable() == true. The active color correction matrix used for image processing may be internally modified to account for the active color saturation value (either user-specified or automatically generated, after biasing,

+
See also:
setColorSaturation and
+
+setColorSaturationBias).
+
Parameters:
+ + +
[in]matrixA color correction matrix that maps sensor RGB to linear sRGB. This matrix is given in row-major order and must have the size w*h, where w and h are the width and height of the Size returned by getColorCorrectionMatrixSize()
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setColorCorrectionMatrixEnable (bool enable)
+
+pure virtual
+
+ +

Enables the user-specified color correction matrix.

+
Parameters:
+ + +
[in]enableIf true, libargus uses the user-specified matrix.
+
+
+
See also:
setColorCorrectionMatrix()
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setColorSaturation (float saturation)
+
+pure virtual
+
+ +

Sets the user-specified absolute color saturation.

+

This must be enabled via

+
See also:
setColorSaturationEnable, otherwise saturation will be determined automatically. This saturation value may be used to modify the color correction matrix used for processing (
+
+setColorCorrectionMatrix), and these changes will be reflected in the color correction matrix output to the capture metadata.
+
Parameters:
+ + +
[in]saturationThe absolute color saturation. Acceptable values are in [0.0, 2.0], and the default value is 1.0.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setColorSaturationBias (float bias)
+
+pure virtual
+
+ +

Sets the color saturation bias.

+

This bias is used to multiply the active saturation value, either the user-specified or the automatically generated value depending on the state of

+
See also:
getColorSaturationEnable, and produces the final saturation value to use for capture processing. This is used primarily to tweak automatically generated saturation values when the application prefers more or less saturation than what the implementation or hardware generates by default. The final saturation value (after biasing) may affect the color correction matrix used for processing (
+
+setColorCorrectionMatrix).
+
Parameters:
+ + +
[in]biasThe color saturation bias. Acceptable values are in [0.0, 2.0], where 1.0 does not modify the saturation (default), 0.0 is fully desaturated (greyscale), and 2.0 is highly saturated.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setColorSaturationEnable (bool enable)
+
+pure virtual
+
+ +

Enables the user-specified absolute color saturation.

+
Parameters:
+ + +
[in]enableIf true, libargus uses the user-specified color saturation.
+
+
+
See also:
setColorSaturation()
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setExposureCompensation (float ev)
+
+pure virtual
+
+ +

Sets the exposure compensation.

+

Exposure compensation is applied after AE is solved.

+
Parameters:
+ + +
[in]evThe exposure adjustment step in stops.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setIspDigitalGainRange (const Range< float > & gain)
+
+pure virtual
+
+ +

Sets the user-specified Isp Digital gain range.

+
Parameters:
+ + +
[in]gainThe user-specified Isp Digital gain.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::IAutoControlSettings::setToneMapCurve (RGBChannel channel,
const std::vector< float > & curve 
)
+
+pure virtual
+
+ +

Sets the user-specified tone map curve for a channel on the stream.

+

The user-specified tone map will be ignored unless getToneMapCurveEnable() == true.

+
Parameters:
+ + + +
[in]channelThe color the curve corresponds to.
[in]curveA float vector that describes the LUT. The number of elements must match the number of elements returned from getToneMapCurve() of the same channel.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setToneMapCurveEnable (bool enable)
+
+pure virtual
+
+ +

Enables the user-specified tone map.

+
Parameters:
+ + +
[in]enableIf true, libargus uses the user-specified tone map.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IAutoControlSettings::setWbGains (const BayerTuple< float > & gains)
+
+pure virtual
+
+ +

Sets the Manual White Balance gains.

+
Parameters:
+ + +
[in]gainsThe Manual White Balance Gains
+
+
+
Returns:
success/status of the call.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IAutoControlSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IAutoControlSettings.png new file mode 100644 index 0000000..a34f834 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IAutoControlSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBayerHistogram-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBayerHistogram-members.html new file mode 100644 index 0000000..2c28355 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBayerHistogram-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IBayerHistogram Member List
+
+
+ +

This is the complete list of members for Argus::IBayerHistogram, including all inherited members.

+ + + + + + + +
getBinCount() const =0Argus::IBayerHistogrampure virtual
getHistogram(std::vector< BayerTuple< uint32_t > > *histogram) const =0Argus::IBayerHistogrampure virtual
id()Argus::IBayerHistograminlinestatic
Interface()Argus::Interfaceinlineprotected
~IBayerHistogram()Argus::IBayerHistograminlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBayerHistogram.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBayerHistogram.html new file mode 100644 index 0000000..1ee1145 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBayerHistogram.html @@ -0,0 +1,260 @@ + + + + + +Libargus API: Argus::IBayerHistogram Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to Bayer histogram metadata (provided by ICaptureMetadata::getBayerHistogram()). + More...

+ +

#include <CaptureMetadata.h>

+
+Inheritance diagram for Argus::IBayerHistogram:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual uint32_t getBinCount () const =0
 Returns the number of bins in the histogram.
virtual Status getHistogram (std::vector< BayerTuple< uint32_t > > *histogram) const =0
 Returns the histogram data.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IBayerHistogram ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to Bayer histogram metadata (provided by ICaptureMetadata::getBayerHistogram()).

+

Bins are evenly distributed across the possible range of values, each containing the number of pixels whose value fell within the range for that bin.

+ +

Definition at line 77 of file CaptureMetadata.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IBayerHistogram::~IBayerHistogram ()
+
+inlineprotected
+
+ +

Definition at line 99 of file CaptureMetadata.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::IBayerHistogram::getBinCount () const
+
+pure virtual
+
+ +

Returns the number of bins in the histogram.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IBayerHistogram::getHistogram (std::vector< BayerTuple< uint32_t > > * histogram) const
+
+pure virtual
+
+ +

Returns the histogram data.

+
Parameters:
+ + +
[out]histogramThe output vector to store the histogram data. Upon successful return, this vector will be replaced with getBinCount() bin values, each containing per-channel pixel counts within a BayerTuple container.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IBayerHistogram::id ()
+
+inlinestatic
+
+ +

Definition at line 81 of file CaptureMetadata.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBayerHistogram.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBayerHistogram.png new file mode 100644 index 0000000..eb7be15 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBayerHistogram.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBuffer-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBuffer-members.html new file mode 100644 index 0000000..fedcc35 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBuffer-members.html @@ -0,0 +1,115 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IBuffer Member List
+
+
+ +

This is the complete list of members for Argus::IBuffer, including all inherited members.

+ + + + + + + + + + +
getBufferType() const =0Argus::IBufferpure virtual
getClientData() const =0Argus::IBufferpure virtual
getMetadata() const =0Argus::IBufferpure virtual
getSyncType() const =0Argus::IBufferpure virtual
id()Argus::IBufferinlinestatic
Interface()Argus::Interfaceinlineprotected
setClientData(const void *clientData)=0Argus::IBufferpure virtual
~IBuffer()Argus::IBufferinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBuffer.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBuffer.html new file mode 100644 index 0000000..29d9cdf --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBuffer.html @@ -0,0 +1,343 @@ + + + + + +Libargus API: Argus::IBuffer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface that provides the core methods for Buffer objects. + More...

+ +

#include <BufferStream.h>

+
+Inheritance diagram for Argus::IBuffer:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + +

+Public Member Functions

virtual BufferType getBufferType () const =0
 Returns the BufferType of the Buffer.
virtual SyncType getSyncType () const =0
 Returns the SyncType of the Buffer.
virtual void setClientData (const void *clientData)=0
 Sets the client data for the Buffer.
virtual const void * getClientData () const =0
 Returns the client data from the Buffer.
virtual const CaptureMetadatagetMetadata () const =0
 Returns the CaptureMetadata object that was attached to this Buffer when it was last output to the stream from the result of a successful capture request.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IBuffer ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface that provides the core methods for Buffer objects.

+ +

Definition at line 354 of file BufferStream.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IBuffer::~IBuffer ()
+
+inlineprotected
+
+ +

Definition at line 403 of file BufferStream.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual BufferType Argus::IBuffer::getBufferType () const
+
+pure virtual
+
+ +

Returns the BufferType of the Buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual const void* Argus::IBuffer::getClientData () const
+
+pure virtual
+
+ +

Returns the client data from the Buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual const CaptureMetadata* Argus::IBuffer::getMetadata () const
+
+pure virtual
+
+ +

Returns the CaptureMetadata object that was attached to this Buffer when it was last output to the stream from the result of a successful capture request.

+

This method should only ever be called while the Buffer is in an acquired state; ie. the time between when the Buffer was acquired by IBufferOutputStream::acquireBuffer and when it was released by IBufferOutputStream::releaseBuffer. If called outside of the acquired state, NULL will be returned. Similarly, the returned object will only remain valid so long as the Buffer is acquired – if this object or any of its interfaces are accessed outside of the acquired state, undefined results or abnormal process termination may occur.

+

Metadata will only be written if metadata is enabled for the stream (see IBufferOutputStreamSettings::setMetadataEnable). NULL may also still be returned if there were any capture errors or metadata is otherwise unavailable.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual SyncType Argus::IBuffer::getSyncType () const
+
+pure virtual
+
+ +

Returns the SyncType of the Buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IBuffer::id ()
+
+inlinestatic
+
+ +

Definition at line 357 of file BufferStream.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void Argus::IBuffer::setClientData (const void * clientData)
+
+pure virtual
+
+ +

Sets the client data for the Buffer.

+

This is provided as a convenience for applications to be able to map Buffers to other client-managed data. It is not used at all by the libargus implementation, and is returned as-is by getClientData. Default value: NULL

+
Parameters:
+ + +
[in]clientDataThe client data pointer to set in the buffer.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBuffer.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBuffer.png new file mode 100644 index 0000000..c53037c Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBuffer.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStream-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStream-members.html new file mode 100644 index 0000000..7108833 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStream-members.html @@ -0,0 +1,117 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IBufferOutputStream Member List
+
+
+ +

This is the complete list of members for Argus::IBufferOutputStream, including all inherited members.

+ + + + + + + + + + + + +
acquireBuffer(uint64_t timeout=TIMEOUT_INFINITE, Status *status=NULL)=0Argus::IBufferOutputStreampure virtual
createBuffer(const BufferSettings *settings, Status *status=NULL)=0Argus::IBufferOutputStreampure virtual
createBufferSettings(Status *status=NULL)=0Argus::IBufferOutputStreampure virtual
endOfStream()=0Argus::IBufferOutputStreampure virtual
getBufferType() const =0Argus::IBufferOutputStreampure virtual
getSyncType() const =0Argus::IBufferOutputStreampure virtual
id()Argus::IBufferOutputStreaminlinestatic
Interface()Argus::Interfaceinlineprotected
releaseBuffer(Buffer *buffer)=0Argus::IBufferOutputStreampure virtual
~IBufferOutputStream()Argus::IBufferOutputStreaminlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStream.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStream.html new file mode 100644 index 0000000..adc7e04 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStream.html @@ -0,0 +1,450 @@ + + + + + +Libargus API: Argus::IBufferOutputStream Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface that provides the methods used with Buffer-based OutputStreams. + More...

+ +

#include <BufferStream.h>

+
+Inheritance diagram for Argus::IBufferOutputStream:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + +

+Public Member Functions

virtual BufferType getBufferType () const =0
 Returns the BufferType of the stream.
virtual SyncType getSyncType () const =0
virtual BufferSettingscreateBufferSettings (Status *status=NULL)=0
 Creates a BufferSettings object.
virtual BuffercreateBuffer (const BufferSettings *settings, Status *status=NULL)=0
 Creates a Buffer object.
virtual BufferacquireBuffer (uint64_t timeout=TIMEOUT_INFINITE, Status *status=NULL)=0
 Acquires a Buffer from the stream that was written to by a libargus capture request.
virtual Status releaseBuffer (Buffer *buffer)=0
 Release a Buffer back to the stream to make it available for a future capture request.
virtual Status endOfStream ()=0
 Signals the end of the stream.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IBufferOutputStream ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface that provides the methods used with Buffer-based OutputStreams.

+ +

Definition at line 221 of file BufferStream.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IBufferOutputStream::~IBufferOutputStream ()
+
+inlineprotected
+
+ +

Definition at line 343 of file BufferStream.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Buffer* Argus::IBufferOutputStream::acquireBuffer (uint64_t timeout = TIMEOUT_INFINITE,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Acquires a Buffer from the stream that was written to by a libargus capture request.

+

Buffers are acquired from the stream in FIFO order relative to when they are produced by libargus (which may not match the original request submission order). If a non-zero timeout is provided, this operation will block until a new Buffer is produced by libargus or the timeout period is exceeded.

+

Once a Buffer has been acquired, the application will have exclusive access to the Buffer's image data, which it will retain until the Buffer is released back to the stream for further capture request use via releaseBuffer. Buffers may also be destroyed while acquired; doing so prevents any further use of the Buffer object within the Stream and releases any buffer resources or references held by the Buffer object.

+

If sync support has been enabled for this Stream/Buffer (ie. SyncType is not STREAM_TYPE_NONE), hardware synchronization capabilities may be used to allow hardware operations on a Buffer to still be pending when it is acquired from or released back to libargus. In this case, the returned Buffer will contain the output sync information provided by libargus which the application must obey before accessing the Buffer's image data. Similarly, the application may need to write input sync information to the Buffer before calling releaseBuffer such that libargus will obey the sync before the Buffer is written to by a new capture request. The exact mechanism used for reading and writing this sync state depends on and is documented by the various SyncTypes and their corresponding interfaces.

+
Parameters:
+ + + +
[in]timeoutThe amount of time to allow for the acquire.
[out]statusAn optional pointer to return success/status.
+
+
+
Returns:
A Buffer that has been written to by a capture request
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Buffer* Argus::IBufferOutputStream::createBuffer (const BufferSettingssettings,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Creates a Buffer object.

+

All of the settings used to configure Buffer creation are provided by the BufferSettings object (which continues to be owned by the application and can be reused until destroyed).

+

New Buffer objects are returned to the application in the "acquired" state, meaning that the application must call releaseBuffer on the Buffer before it may be used by libargus.

+
Parameters:
+ + + +
[in]settingsthe buffer settings to use for Buffer creation.
[out]statusAn optional pointer to return success/status.
+
+
+
Returns:
a new BufferSettings, or NULL on failure (error code written to 'status').
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual BufferSettings* Argus::IBufferOutputStream::createBufferSettings (Statusstatus = NULL)
+
+pure virtual
+
+ +

Creates a BufferSettings object.

+

This Destructable object is used to configure the settings for a new Buffer object, including things like the native buffer handle that is to be wrapped by the Buffer. The interfaces and settings that are supported by the new BufferSettings object are dictated by the BufferType and SyncType of the creating OutputStream.

+
Parameters:
+ + +
[out]statusAn optional pointer to return success/status.
+
+
+
Returns:
a new BufferSettings, or NULL on failure (error code written to 'status').
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Status Argus::IBufferOutputStream::endOfStream ()
+
+pure virtual
+
+ +

Signals the end of the stream.

+

Once the end of stream has been signalled on a stream, any call made to acquireBuffer will immediately (ignoring the timeout parameter) return NULL with a STATUS_END_OF_STREAM status when the following is true: 1) There are no Buffers immediately available to be acquired, and 2) There are no capture requests pending writes to the stream. This implies that no pending or completed frames will be lost, and that all pending or completed frames must be acquired before an END_OF_STREAM status is returned.

+

If any thread is blocked in acquireBuffer when the end of stream is signalled, and the above conditions are met, then that thread will unblock and return END_OF_STREAM immediately.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual BufferType Argus::IBufferOutputStream::getBufferType () const
+
+pure virtual
+
+ +

Returns the BufferType of the stream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual SyncType Argus::IBufferOutputStream::getSyncType () const
+
+pure virtual
+
+
Returns:
the SyncType of the stream.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IBufferOutputStream::id ()
+
+inlinestatic
+
+ +

Definition at line 224 of file BufferStream.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IBufferOutputStream::releaseBuffer (Bufferbuffer)
+
+pure virtual
+
+ +

Release a Buffer back to the stream to make it available for a future capture request.

+

Once a Buffer has been released to the Stream, libargus will have exclusive access to the Buffer's image resources until it is once again acquired by the application via acquireBuffer. Any buffer access outside of libargus during this time may lead to undefined results.

+

While it is often the case that Buffers may be used by libargus in the order they are released, this is not a requirement; libargus may reuse Buffers in any order once they have been released.

+

If sync support has been enabled for this StreamBuffer (ie. SyncType is not STREAM_TYPE_NONE), sync information may need to be written to the Buffer by the client before releaseBuffer is called. The exact mechanism used for writing this sync state depends on and is documented by the various SyncTypes and their corresponding interfaces.

+

Note that while it is safe to destroy a Buffer object while it has been released to libargus, it is possible that pending requests may be using this Buffer and may still output Events that reference the Buffer object, and so the application is responsible for making sure that it does not use any Buffer object that it has previously destroyed. If there are no pending requests using a particular Stream, destroying any of its released Buffers will prevent them from ever being used or returned by libargus again.

+
Parameters:
+ + +
[in]bufferThe Buffer to release back to the stream.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStream.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStream.png new file mode 100644 index 0000000..454a952 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStream.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStreamSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStreamSettings-members.html new file mode 100644 index 0000000..a885e72 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStreamSettings-members.html @@ -0,0 +1,116 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IBufferOutputStreamSettings Member List
+
+
+ +

This is the complete list of members for Argus::IBufferOutputStreamSettings, including all inherited members.

+ + + + + + + + + + + +
getBufferType() const =0Argus::IBufferOutputStreamSettingspure virtual
getMetadataEnable() const =0Argus::IBufferOutputStreamSettingspure virtual
getSyncType() const =0Argus::IBufferOutputStreamSettingspure virtual
id()Argus::IBufferOutputStreamSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setBufferType(const BufferType &type)=0Argus::IBufferOutputStreamSettingspure virtual
setMetadataEnable(bool enable)=0Argus::IBufferOutputStreamSettingspure virtual
setSyncType(const SyncType &type)=0Argus::IBufferOutputStreamSettingspure virtual
~IBufferOutputStreamSettings()Argus::IBufferOutputStreamSettingsinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStreamSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStreamSettings.html new file mode 100644 index 0000000..31f85ed --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStreamSettings.html @@ -0,0 +1,384 @@ + + + + + +Libargus API: Argus::IBufferOutputStreamSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface that exposes the configuration available to Buffer-based OutputStreams. + More...

+ +

#include <BufferStream.h>

+
+Inheritance diagram for Argus::IBufferOutputStreamSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + +

+Public Member Functions

virtual Status setBufferType (const BufferType &type)=0
 Sets the BufferType for the stream.
virtual BufferType getBufferType () const =0
 Returns the BufferType to be used for the stream.
virtual Status setSyncType (const SyncType &type)=0
 Sets the SyncType for the stream.
virtual SyncType getSyncType () const =0
 Returns the SyncType to be used for the stream.
virtual void setMetadataEnable (bool enable)=0
 Sets the metadata enable for the stream.
virtual bool getMetadataEnable () const =0
 Returns the metadata enable.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IBufferOutputStreamSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface that exposes the configuration available to Buffer-based OutputStreams.

+ +

Definition at line 156 of file BufferStream.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IBufferOutputStreamSettings::~IBufferOutputStreamSettings ()
+
+inlineprotected
+
+ +

Definition at line 210 of file BufferStream.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual BufferType Argus::IBufferOutputStreamSettings::getBufferType () const
+
+pure virtual
+
+ +

Returns the BufferType to be used for the stream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::IBufferOutputStreamSettings::getMetadataEnable () const
+
+pure virtual
+
+ +

Returns the metadata enable.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual SyncType Argus::IBufferOutputStreamSettings::getSyncType () const
+
+pure virtual
+
+ +

Returns the SyncType to be used for the stream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IBufferOutputStreamSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 159 of file BufferStream.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IBufferOutputStreamSettings::setBufferType (const BufferType & type)
+
+pure virtual
+
+ +

Sets the BufferType for the stream.

+

This controls which type of native buffer type will be wrapped by this OutputStream, and thus will dictate which interfaces are supported by the OutputStream and child BufferSettings and Buffer objects. This value defaults to BUFFER_TYPE_NONE and must be set by the application to a BufferType supported by this libargus implementation.

+
Parameters:
+ + +
[in]typeThe BufferType to use for the new OutputStream.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void Argus::IBufferOutputStreamSettings::setMetadataEnable (bool enable)
+
+pure virtual
+
+ +

Sets the metadata enable for the stream.

+

When metadata is enabled, a CaptureMetadata object may be attached to each Buffer when it is output from libargus as the result of a successful capture request (see IBuffer::getMetadata).

+
Parameters:
+ + +
[in]enableWhether or not metadata is enabled for the stream.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IBufferOutputStreamSettings::setSyncType (const SyncType & type)
+
+pure virtual
+
+ +

Sets the SyncType for the stream.

+

This controls which type of native sync information will be attached to Buffers for sync support between libargus and the application. This value defaults to SYNC_TYPE_NONE, which means that no sync information will be supported. In this case, both the application and libargus are expected to be done all read and/or write operations before passing the Buffer to the other.

+
Parameters:
+ + +
[in]typeThe SyncType to use for the new OutputStream.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStreamSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStreamSettings.png new file mode 100644 index 0000000..2728194 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IBufferOutputStreamSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProperties-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProperties-members.html new file mode 100644 index 0000000..8e064fd --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProperties-members.html @@ -0,0 +1,127 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::ICameraProperties Member List
+
+
+ +

This is the complete list of members for Argus::ICameraProperties, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
getAllSensorModes(std::vector< SensorMode * > *modes) const =0Argus::ICameraPropertiespure virtual
getApertureMotorSpeedRange() const =0Argus::ICameraPropertiespure virtual
getAperturePositionRange() const =0Argus::ICameraPropertiespure virtual
getAperturePositions(std::vector< int32_t > *positions) const =0Argus::ICameraPropertiespure virtual
getAvailableApertureFNumbers(std::vector< float > *fnumbers) const =0Argus::ICameraPropertiespure virtual
getBasicSensorModes(std::vector< SensorMode * > *modes) const =0Argus::ICameraPropertiespure virtual
getExposureCompensationRange() const =0Argus::ICameraPropertiespure virtual
getFocusPositionRange() const =0Argus::ICameraPropertiespure virtual
getIspDigitalGainRange() const =0Argus::ICameraPropertiespure virtual
getMaxAeRegions() const =0Argus::ICameraPropertiespure virtual
getMaxAfRegions() const =0Argus::ICameraPropertiespure virtual
getMaxAwbRegions() const =0Argus::ICameraPropertiespure virtual
getMinAeRegionSize() const =0Argus::ICameraPropertiespure virtual
getModelName() const =0Argus::ICameraPropertiespure virtual
getModuleString() const =0Argus::ICameraPropertiespure virtual
getSensorPlacement() const =0Argus::ICameraPropertiespure virtual
getUUID() const =0Argus::ICameraPropertiespure virtual
id()Argus::ICameraPropertiesinlinestatic
Interface()Argus::Interfaceinlineprotected
~ICameraProperties()Argus::ICameraPropertiesinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProperties.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProperties.html new file mode 100644 index 0000000..d421b0e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProperties.html @@ -0,0 +1,705 @@ + + + + + +Libargus API: Argus::ICameraProperties Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the core CameraDevice properties. + More...

+ +

#include <CameraDevice.h>

+
+Inheritance diagram for Argus::ICameraProperties:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual UUID getUUID () const =0
 Returns the camera UUID.
virtual SensorPlacement getSensorPlacement () const =0
 Returns the camera sensor placement position on the module.
virtual uint32_t getMaxAeRegions () const =0
 Returns the maximum number of regions of interest supported by AE.
virtual Size2D< uint32_t > getMinAeRegionSize () const =0
 Returns the minimum size of resultant region required by AE.
virtual uint32_t getMaxAwbRegions () const =0
 Returns the maximum number of regions of interest supported by AWB.
virtual uint32_t getMaxAfRegions () const =0
 Returns the maximum number of regions of interest supported by AF.
virtual Status getBasicSensorModes (std::vector< SensorMode * > *modes) const =0
 Returns only the basic available sensor modes that do not have an associated extension.
virtual Status getAllSensorModes (std::vector< SensorMode * > *modes) const =0
 Returns all the available sensor modes including the ones that have extensions.
virtual Status getAperturePositions (std::vector< int32_t > *positions) const =0
 Returns all the recommended aperture positions.
virtual Status getAvailableApertureFNumbers (std::vector< float > *fnumbers) const =0
 Returns all the available aperture f-numbers.
virtual Range< int32_t > getFocusPositionRange () const =0
 Returns the valid range of focuser positions.
virtual Range< int32_t > getAperturePositionRange () const =0
 Returns the valid range of aperture positions.
virtual Range< float > getApertureMotorSpeedRange () const =0
 Returns the valid range of aperture step positions per second.
virtual Range< float > getIspDigitalGainRange () const =0
 Returns the supported range of ISP digital gain.
virtual Range< float > getExposureCompensationRange () const =0
 Returns the supported range of Exposure Compensation.
virtual const std::string & getModelName () const =0
 Returns the model name of the device.
virtual const std::string & getModuleString () const =0
 Returns the module string for the device.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ICameraProperties ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the core CameraDevice properties.

+ +

Definition at line 68 of file CameraDevice.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::ICameraProperties::~ICameraProperties ()
+
+inlineprotected
+
+ +

Definition at line 199 of file CameraDevice.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICameraProperties::getAllSensorModes (std::vector< SensorMode * > * modes) const
+
+pure virtual
+
+ +

Returns all the available sensor modes including the ones that have extensions.

+

The extended modes support some form of Wide Dynamic Range (WDR) technology.

+

All the returned modes will support the basic sensor mode interface.

+
See also:
ISensorMode
+
Parameters:
+ + +
[out]modesA vector that will be populated with the sensor modes.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<float> Argus::ICameraProperties::getApertureMotorSpeedRange () const
+
+pure virtual
+
+ +

Returns the valid range of aperture step positions per second.

+

The units are aperture motor steps/second.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<int32_t> Argus::ICameraProperties::getAperturePositionRange () const
+
+pure virtual
+
+ +

Returns the valid range of aperture positions.

+

The units are aperture positions.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICameraProperties::getAperturePositions (std::vector< int32_t > * positions) const
+
+pure virtual
+
+ +

Returns all the recommended aperture positions.

+
Parameters:
+ + +
[out]positionsa vector that will be populated with the aperture positions.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICameraProperties::getAvailableApertureFNumbers (std::vector< float > * fnumbers) const
+
+pure virtual
+
+ +

Returns all the available aperture f-numbers.

+
Parameters:
+ + +
[out]fnumbersA pointer to a vector to be populated with the aperture f-numbers.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICameraProperties::getBasicSensorModes (std::vector< SensorMode * > * modes) const
+
+pure virtual
+
+ +

Returns only the basic available sensor modes that do not have an associated extension.

+

Basic mode types include Depth, RGB, YUV and Bayer types.

+
Parameters:
+ + +
[out]modesA vector that will be populated with the sensor modes.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<float> Argus::ICameraProperties::getExposureCompensationRange () const
+
+pure virtual
+
+ +

Returns the supported range of Exposure Compensation.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<int32_t> Argus::ICameraProperties::getFocusPositionRange () const
+
+pure virtual
+
+ +

Returns the valid range of focuser positions.

+

The units are focuser steps.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<float> Argus::ICameraProperties::getIspDigitalGainRange () const
+
+pure virtual
+
+ +

Returns the supported range of ISP digital gain.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::ICameraProperties::getMaxAeRegions () const
+
+pure virtual
+
+ +

Returns the maximum number of regions of interest supported by AE.

+

A value of 0 means that the entire image is the only supported region of interest.

+
See also:
IAutoControlSettings::setAeRegions()
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::ICameraProperties::getMaxAfRegions () const
+
+pure virtual
+
+ +

Returns the maximum number of regions of interest supported by AF.

+

A value of 0 means that the entire image is the only supported region of interest.

+
See also:
IAutoControlSettings::setAfRegions()
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::ICameraProperties::getMaxAwbRegions () const
+
+pure virtual
+
+ +

Returns the maximum number of regions of interest supported by AWB.

+

A value of 0 means that the entire image is the only supported region of interest.

+
See also:
IAutoControlSettings::setAwbRegions()
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::ICameraProperties::getMinAeRegionSize () const
+
+pure virtual
+
+ +

Returns the minimum size of resultant region required by AE.

+
See also:
IAutoControlSettings::setAeRegions()
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual const std::string& Argus::ICameraProperties::getModelName () const
+
+pure virtual
+
+ +

Returns the model name of the device.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual const std::string& Argus::ICameraProperties::getModuleString () const
+
+pure virtual
+
+ +

Returns the module string for the device.

+

Contains the device's name, position, and partial model number. This string is unique for each device on the system.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual SensorPlacement Argus::ICameraProperties::getSensorPlacement () const
+
+pure virtual
+
+ +

Returns the camera sensor placement position on the module.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual UUID Argus::ICameraProperties::getUUID () const
+
+pure virtual
+
+ +

Returns the camera UUID.

+

In UUID, clock_seq contains low 16 bits of GUID, node[6] contains high 48 bits of GUID.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::ICameraProperties::id ()
+
+inlinestatic
+
+ +

Definition at line 71 of file CameraDevice.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProperties.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProperties.png new file mode 100644 index 0000000..1c8fdac Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProperties.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProvider-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProvider-members.html new file mode 100644 index 0000000..83def11 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProvider-members.html @@ -0,0 +1,116 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::ICameraProvider Member List
+
+
+ +

This is the complete list of members for Argus::ICameraProvider, including all inherited members.

+ + + + + + + + + + + +
createCaptureSession(CameraDevice *device, Status *status=NULL)=0Argus::ICameraProviderpure virtual
createCaptureSession(const std::vector< CameraDevice * > &devices, Status *status=NULL)=0Argus::ICameraProviderpure virtual
getCameraDevices(std::vector< CameraDevice * > *devices) const =0Argus::ICameraProviderpure virtual
getVendor() const =0Argus::ICameraProviderpure virtual
getVersion() const =0Argus::ICameraProviderpure virtual
id()Argus::ICameraProviderinlinestatic
Interface()Argus::Interfaceinlineprotected
supportsExtension(const ExtensionName &extension) const =0Argus::ICameraProviderpure virtual
~ICameraProvider()Argus::ICameraProviderinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProvider.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProvider.html new file mode 100644 index 0000000..426cc43 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProvider.html @@ -0,0 +1,418 @@ + + + + + +Libargus API: Argus::ICameraProvider Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the core CameraProvider methods. + More...

+ +

#include <CameraProvider.h>

+
+Inheritance diagram for Argus::ICameraProvider:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + +

+Public Member Functions

virtual const std::string & getVersion () const =0
 Returns the version number of the libargus implementation.
virtual const std::string & getVendor () const =0
 Returns the vendor string for the libargus implementation.
virtual bool supportsExtension (const ExtensionName &extension) const =0
 Returns whether or not an extension is supported by this libargus implementation.
virtual Status getCameraDevices (std::vector< CameraDevice * > *devices) const =0
 Returns the list of camera devices that are exposed by the provider.
virtual CaptureSessioncreateCaptureSession (CameraDevice *device, Status *status=NULL)=0
 Creates and returns a new CaptureSession using the given device.
virtual CaptureSessioncreateCaptureSession (const std::vector< CameraDevice * > &devices, Status *status=NULL)=0
 Creates and returns a new CaptureSession using the given device(s).
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ICameraProvider ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the core CameraProvider methods.

+ +

Definition at line 77 of file CameraProvider.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::ICameraProvider::~ICameraProvider ()
+
+inlineprotected
+
+ +

Definition at line 139 of file CameraProvider.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual CaptureSession* Argus::ICameraProvider::createCaptureSession (CameraDevicedevice,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Creates and returns a new CaptureSession using the given device.

+

STATUS_UNAVAILABLE will be placed into status if the device is already in use.

+
Parameters:
+ + + +
[in]deviceThe device to use for the CaptureSession.
[out]statusOptional pointer to return success/status of the call.
+
+
+
Returns:
The new CaptureSession, or NULL if an error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual CaptureSession* Argus::ICameraProvider::createCaptureSession (const std::vector< CameraDevice * > & devices,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Creates and returns a new CaptureSession using the given device(s).

+

STATUS_UNAVAILABLE will be placed into status if any of the devices are already in use.

+
Parameters:
+ + + +
[in]devicesThe device(s) to use for the CaptureSession.
[out]statusOptional pointer to return success/status of the call.
+
+
+
Returns:
The new CaptureSession, or NULL if an error occurred.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICameraProvider::getCameraDevices (std::vector< CameraDevice * > * devices) const
+
+pure virtual
+
+ +

Returns the list of camera devices that are exposed by the provider.

+

This includes devices that may already be in use by active CaptureSessions, and it's the application's responsibility to check device availability and/or handle any errors returned when CaptureSession creation fails due to a device already being in use.

+
Parameters:
+ + +
[out]devicesA vector that will be populated by the available devices.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual const std::string& Argus::ICameraProvider::getVendor () const
+
+pure virtual
+
+ +

Returns the vendor string for the libargus implementation.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual const std::string& Argus::ICameraProvider::getVersion () const
+
+pure virtual
+
+ +

Returns the version number of the libargus implementation.

+

This string will begin with the major and minor version numbers, separated by a period, and may be followed by any additional vendor-specific version information.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::ICameraProvider::id ()
+
+inlinestatic
+
+ +

Definition at line 80 of file CameraProvider.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool Argus::ICameraProvider::supportsExtension (const ExtensionName & extension) const
+
+pure virtual
+
+ +

Returns whether or not an extension is supported by this libargus implementation.

+

This is generally used during process initialization to ensure that all required extensions are present before initializing any CaptureSessions. Note, however, that having an extension be supported does not imply that the resources or devices required for that extension are available; standard interface checking and any other extension-specific runtime checks, as described by the extension documentation, should always be performed before any extension is used.

+
Parameters:
+ + +
[in]extensionthe extension identifier.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProvider.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProvider.png new file mode 100644 index 0000000..f8a83ec Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICameraProvider.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureMetadata-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureMetadata-members.html new file mode 100644 index 0000000..0db2478 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureMetadata-members.html @@ -0,0 +1,145 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::ICaptureMetadata Member List
+
+
+ +

This is the complete list of members for Argus::ICaptureMetadata, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getAeLocked() const =0Argus::ICaptureMetadatapure virtual
getAeRegions(std::vector< AcRegion > *regions) const =0Argus::ICaptureMetadatapure virtual
getAeState() const =0Argus::ICaptureMetadatapure virtual
getAfRegions(std::vector< AcRegion > *regions) const =0Argus::ICaptureMetadatapure virtual
getAperturePosition() const =0Argus::ICaptureMetadatapure virtual
getAwbCct() const =0Argus::ICaptureMetadatapure virtual
getAwbGains() const =0Argus::ICaptureMetadatapure virtual
getAwbMode() const =0Argus::ICaptureMetadatapure virtual
getAwbRegions(std::vector< AcRegion > *regions) const =0Argus::ICaptureMetadatapure virtual
getAwbState() const =0Argus::ICaptureMetadatapure virtual
getAwbWbEstimate(std::vector< float > *estimate) const =0Argus::ICaptureMetadatapure virtual
getBayerHistogram() const =0Argus::ICaptureMetadatapure virtual
getBayerHistogramRegion() const =0Argus::ICaptureMetadatapure virtual
getCaptureId() const =0Argus::ICaptureMetadatapure virtual
getClientData() const =0Argus::ICaptureMetadatapure virtual
getColorCorrectionMatrix(std::vector< float > *ccMatrix) const =0Argus::ICaptureMetadatapure virtual
getColorCorrectionMatrixEnable() const =0Argus::ICaptureMetadatapure virtual
getColorSaturation() const =0Argus::ICaptureMetadatapure virtual
getFlickerState() const =0Argus::ICaptureMetadatapure virtual
getFocuserPosition() const =0Argus::ICaptureMetadatapure virtual
getFrameDuration() const =0Argus::ICaptureMetadatapure virtual
getFrameReadoutTime() const =0Argus::ICaptureMetadatapure virtual
getIspDigitalGain() const =0Argus::ICaptureMetadatapure virtual
getRGBHistogram() const =0Argus::ICaptureMetadatapure virtual
getSceneLux() const =0Argus::ICaptureMetadatapure virtual
getSensorAnalogGain() const =0Argus::ICaptureMetadatapure virtual
getSensorExposureTime() const =0Argus::ICaptureMetadatapure virtual
getSensorSensitivity() const =0Argus::ICaptureMetadatapure virtual
getSensorTimestamp() const =0Argus::ICaptureMetadatapure virtual
getSharpnessScore(std::vector< float > *values) const =0Argus::ICaptureMetadatapure virtual
getStreamMetadata(const OutputStream *stream) const =0Argus::ICaptureMetadatapure virtual
getToneMapCurve(RGBChannel channel, std::vector< float > *curve) const =0Argus::ICaptureMetadatapure virtual
getToneMapCurveEnabled() const =0Argus::ICaptureMetadatapure virtual
id()Argus::ICaptureMetadatainlinestatic
Interface()Argus::Interfaceinlineprotected
NUM_AWB_WB_ESTIMATE_ELEMENTSArgus::ICaptureMetadatastatic
NUM_COLOR_CORRECTION_ELEMENTSArgus::ICaptureMetadatastatic
~ICaptureMetadata()Argus::ICaptureMetadatainlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureMetadata.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureMetadata.html new file mode 100644 index 0000000..f1cac59 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureMetadata.html @@ -0,0 +1,1215 @@ + + + + + +Libargus API: Argus::ICaptureMetadata Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the core capture metadata. + More...

+ +

#include <CaptureMetadata.h>

+
+Inheritance diagram for Argus::ICaptureMetadata:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual uint32_t getCaptureId () const =0
 Returns the capture id (the value returned from ICaptureSession::capture()) of the capture that generated this metadata.
virtual uint32_t getClientData () const =0
 Returns the clientData value for the Request used in the capture that generated this metadata.
virtual InterfaceProvidergetStreamMetadata (const OutputStream *stream) const =0
 Returns the per-stream metadata provider for stream.
virtual const InterfaceProvidergetBayerHistogram () const =0
 Returns the Bayer histogram for this capture.
virtual const InterfaceProvidergetRGBHistogram () const =0
 Returns the RGB histogram for this capture.
virtual bool getAeLocked () const =0
 Returns true if and only if AE was locked for this capture.
virtual Status getAeRegions (std::vector< AcRegion > *regions) const =0
 Gets the AE regions of interest used for this capture.
virtual Rectangle< uint32_t > getBayerHistogramRegion () const =0
 Returns the rectangle of the bayer histogram region of interest.
virtual AeState getAeState () const =0
 Returns the state of AE when it ran for this capture.
virtual AeFlickerState getFlickerState () const =0
 Returns the flicker state of this capture.
virtual int32_t getAperturePosition () const =0
 Returns the aperture position.
virtual int32_t getFocuserPosition () const =0
 Returns the focuser position used for this capture (in focuser steps).
virtual uint32_t getAwbCct () const =0
 Returns the CCT calculated by AWB for this capture.
virtual BayerTuple< float > getAwbGains () const =0
 Returns the AWB gains used for this capture.
virtual AwbMode getAwbMode () const =0
 Returns the AWB mode used for this capture.
virtual Status getAwbRegions (std::vector< AcRegion > *regions) const =0
 Gets the AWB regions of interest used for this capture.
virtual Status getAfRegions (std::vector< AcRegion > *regions) const =0
 Gets the AF regions of interest used for this capture.
virtual Status getSharpnessScore (std::vector< float > *values) const =0
 Gets the sharpness score values calculated for corresponding AF regions.
virtual AwbState getAwbState () const =0
virtual Status getAwbWbEstimate (std::vector< float > *estimate) const =0
 Gets the current AWB WB estimate as a vector of NUM_AWB_WB_ESTIMATE_ELEMENTS values.
virtual bool getColorCorrectionMatrixEnable () const =0
 Returns the enable state for the client-supplied Color Correction Matrix.
virtual Status getColorCorrectionMatrix (std::vector< float > *ccMatrix) const =0
 Gets the 3x3 client-supplied Color Correction Matrix as a flattened (row-major) vector of 9 values.
virtual float getColorSaturation () const =0
 Returns the color saturation value used for this capture (including biasing).
virtual uint64_t getFrameDuration () const =0
 Returns the time it took to integrate this capture (in nanoseconds).
virtual float getIspDigitalGain () const =0
 Returns the digital gain used for this capture.
virtual uint64_t getFrameReadoutTime () const =0
 Returns the frame readout time for this capture (in nanoseconds) from the beginning of the first line to the beginning of the last line.
virtual float getSceneLux () const =0
 Returns the estimated scene brightness for this capture (in lux).
virtual float getSensorAnalogGain () const =0
 Returns the sensor analog gain used for this capture.
virtual uint64_t getSensorExposureTime () const =0
 Returns the sensor exposure time for this capture (in nanoseconds).
virtual uint32_t getSensorSensitivity () const =0
 Returns the ISO value used for this capture.
virtual uint64_t getSensorTimestamp () const =0
 Returns the kernel (SOF) timestamp for the sensor (in nanoseconds).
virtual bool getToneMapCurveEnabled () const =0
 Returns true if and only if a user-specified tone map curve was used for this capture.
virtual Status getToneMapCurve (RGBChannel channel, std::vector< float > *curve) const =0
 Returns the specified color channel for the tone mapping table (as a vector of NUM_TONE_MAP_ELEMENTS values).
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + +

+Static Public Attributes

static const uint32_t NUM_COLOR_CORRECTION_ELEMENTS = 9
static const uint32_t NUM_AWB_WB_ESTIMATE_ELEMENTS = 4
+ + + + + +

+Protected Member Functions

 ~ICaptureMetadata ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the core capture metadata.

+ +

Definition at line 182 of file CaptureMetadata.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::ICaptureMetadata::~ICaptureMetadata ()
+
+inlineprotected
+
+ +

Definition at line 401 of file CaptureMetadata.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::ICaptureMetadata::getAeLocked () const
+
+pure virtual
+
+ +

Returns true if and only if AE was locked for this capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICaptureMetadata::getAeRegions (std::vector< AcRegion > * regions) const
+
+pure virtual
+
+ +

Gets the AE regions of interest used for this capture.

+
Parameters:
+ + +
[in]regionsA vector that will be populated with the AE regions used in capture.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual AeState Argus::ICaptureMetadata::getAeState () const
+
+pure virtual
+
+ +

Returns the state of AE when it ran for this capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICaptureMetadata::getAfRegions (std::vector< AcRegion > * regions) const
+
+pure virtual
+
+ +

Gets the AF regions of interest used for this capture.

+
Parameters:
+ + +
[in]regionsA vector that will be populated with the AF regions used in capture.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual int32_t Argus::ICaptureMetadata::getAperturePosition () const
+
+pure virtual
+
+ +

Returns the aperture position.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::ICaptureMetadata::getAwbCct () const
+
+pure virtual
+
+ +

Returns the CCT calculated by AWB for this capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual BayerTuple<float> Argus::ICaptureMetadata::getAwbGains () const
+
+pure virtual
+
+ +

Returns the AWB gains used for this capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual AwbMode Argus::ICaptureMetadata::getAwbMode () const
+
+pure virtual
+
+ +

Returns the AWB mode used for this capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICaptureMetadata::getAwbRegions (std::vector< AcRegion > * regions) const
+
+pure virtual
+
+ +

Gets the AWB regions of interest used for this capture.

+
Parameters:
+ + +
[in]regionsA vector that will be populated with the AWB regions used in capture.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual AwbState Argus::ICaptureMetadata::getAwbState () const
+
+pure virtual
+
+
Returns:
the state of AWB when it ran for this capture.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICaptureMetadata::getAwbWbEstimate (std::vector< float > * estimate) const
+
+pure virtual
+
+ +

Gets the current AWB WB estimate as a vector of NUM_AWB_WB_ESTIMATE_ELEMENTS values.

+
Todo:
Document the meaning of an AWB WB estimate.
+
Parameters:
+ + +
[in]estimateA vector that will be populated with the AWB WB estimates.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual const InterfaceProvider* Argus::ICaptureMetadata::getBayerHistogram () const
+
+pure virtual
+
+ +

Returns the Bayer histogram for this capture.

+

This object will provide the IBayerHistogram interface.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Rectangle<uint32_t> Argus::ICaptureMetadata::getBayerHistogramRegion () const
+
+pure virtual
+
+ +

Returns the rectangle of the bayer histogram region of interest.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::ICaptureMetadata::getCaptureId () const
+
+pure virtual
+
+ +

Returns the capture id (the value returned from ICaptureSession::capture()) of the capture that generated this metadata.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::ICaptureMetadata::getClientData () const
+
+pure virtual
+
+ +

Returns the clientData value for the Request used in the capture that generated this metadata.

+
See also:
ICaptureSession::createRequest()
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICaptureMetadata::getColorCorrectionMatrix (std::vector< float > * ccMatrix) const
+
+pure virtual
+
+ +

Gets the 3x3 client-supplied Color Correction Matrix as a flattened (row-major) vector of 9 values.

+

This matrix is irrelevant if getColorCorrectionMatrixEnable() == false.

+
Parameters:
+ + +
[in]ccMatrixA vector that will be populated with the color correction matrix.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::ICaptureMetadata::getColorCorrectionMatrixEnable () const
+
+pure virtual
+
+ +

Returns the enable state for the client-supplied Color Correction Matrix.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::ICaptureMetadata::getColorSaturation () const
+
+pure virtual
+
+ +

Returns the color saturation value used for this capture (including biasing).

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual AeFlickerState Argus::ICaptureMetadata::getFlickerState () const
+
+pure virtual
+
+ +

Returns the flicker state of this capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual int32_t Argus::ICaptureMetadata::getFocuserPosition () const
+
+pure virtual
+
+ +

Returns the focuser position used for this capture (in focuser steps).

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint64_t Argus::ICaptureMetadata::getFrameDuration () const
+
+pure virtual
+
+ +

Returns the time it took to integrate this capture (in nanoseconds).

+
Todo:
Provide a more precise description of frame duration.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint64_t Argus::ICaptureMetadata::getFrameReadoutTime () const
+
+pure virtual
+
+ +

Returns the frame readout time for this capture (in nanoseconds) from the beginning of the first line to the beginning of the last line.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::ICaptureMetadata::getIspDigitalGain () const
+
+pure virtual
+
+ +

Returns the digital gain used for this capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual const InterfaceProvider* Argus::ICaptureMetadata::getRGBHistogram () const
+
+pure virtual
+
+ +

Returns the RGB histogram for this capture.

+

This object will provide the IRGBHistogram interface.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::ICaptureMetadata::getSceneLux () const
+
+pure virtual
+
+ +

Returns the estimated scene brightness for this capture (in lux).

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::ICaptureMetadata::getSensorAnalogGain () const
+
+pure virtual
+
+ +

Returns the sensor analog gain used for this capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint64_t Argus::ICaptureMetadata::getSensorExposureTime () const
+
+pure virtual
+
+ +

Returns the sensor exposure time for this capture (in nanoseconds).

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::ICaptureMetadata::getSensorSensitivity () const
+
+pure virtual
+
+ +

Returns the ISO value used for this capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint64_t Argus::ICaptureMetadata::getSensorTimestamp () const
+
+pure virtual
+
+ +

Returns the kernel (SOF) timestamp for the sensor (in nanoseconds).

+

This is the time that the first data from this capture arrives from the sensor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICaptureMetadata::getSharpnessScore (std::vector< float > * values) const
+
+pure virtual
+
+ +

Gets the sharpness score values calculated for corresponding AF regions.

+
Parameters:
+ + +
[in]valuesA vector that will be populated with the sharpness scores used in capture.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual InterfaceProvider* Argus::ICaptureMetadata::getStreamMetadata (const OutputStreamstream) const
+
+pure virtual
+
+ +

Returns the per-stream metadata provider for stream.

+

This object will provide the IStreamCaptureMetadata interface.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::ICaptureMetadata::getToneMapCurve (RGBChannel channel,
std::vector< float > * curve 
) const
+
+pure virtual
+
+ +

Returns the specified color channel for the tone mapping table (as a vector of NUM_TONE_MAP_ELEMENTS values).

+

These values are irrelevant if getToneMapCurveEnabled() == false.

+
Parameters:
+ + + +
[in]channelSpecified the color channel for which the curve will be returned.
[in]curveA vector that will be populated with the color curve used in capture.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::ICaptureMetadata::getToneMapCurveEnabled () const
+
+pure virtual
+
+ +

Returns true if and only if a user-specified tone map curve was used for this capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::ICaptureMetadata::id ()
+
+inlinestatic
+
+ +

Definition at line 186 of file CaptureMetadata.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const uint32_t Argus::ICaptureMetadata::NUM_AWB_WB_ESTIMATE_ELEMENTS = 4
+
+static
+
+ +

Definition at line 189 of file CaptureMetadata.h.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const uint32_t Argus::ICaptureMetadata::NUM_COLOR_CORRECTION_ELEMENTS = 9
+
+static
+
+ +

Definition at line 188 of file CaptureMetadata.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureMetadata.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureMetadata.png new file mode 100644 index 0000000..7d9a53a Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureMetadata.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureSession-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureSession-members.html new file mode 100644 index 0000000..cb787de --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureSession-members.html @@ -0,0 +1,122 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::ICaptureSession Member List
+
+
+ +

This is the complete list of members for Argus::ICaptureSession, including all inherited members.

+ + + + + + + + + + + + + + + + + +
cancelRequests()=0Argus::ICaptureSessionpure virtual
capture(const Request *request, uint64_t timeout=TIMEOUT_INFINITE, Status *status=NULL)=0Argus::ICaptureSessionpure virtual
captureBurst(const std::vector< const Request * > &requestList, uint64_t timeout=TIMEOUT_INFINITE, Status *status=NULL)=0Argus::ICaptureSessionpure virtual
createOutputStream(const OutputStreamSettings *settings, Status *status=NULL)=0Argus::ICaptureSessionpure virtual
createOutputStreamSettings(const StreamType &type, Status *status=NULL)=0Argus::ICaptureSessionpure virtual
createRequest(const CaptureIntent &intent=CAPTURE_INTENT_PREVIEW, Status *status=NULL)=0Argus::ICaptureSessionpure virtual
id()Argus::ICaptureSessioninlinestatic
Interface()Argus::Interfaceinlineprotected
isRepeating() const =0Argus::ICaptureSessionpure virtual
maxBurstRequests() const =0Argus::ICaptureSessionpure virtual
repeat(const Request *request)=0Argus::ICaptureSessionpure virtual
repeatBurst(const std::vector< const Request * > &requestList)=0Argus::ICaptureSessionpure virtual
stopRepeat()=0Argus::ICaptureSessionpure virtual
waitForIdle(uint64_t timeout=TIMEOUT_INFINITE) const =0Argus::ICaptureSessionpure virtual
~ICaptureSession()Argus::ICaptureSessioninlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureSession.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureSession.html new file mode 100644 index 0000000..a8964d6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureSession.html @@ -0,0 +1,666 @@ + + + + + +Libargus API: Argus::ICaptureSession Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the core CaptureSession methods. + More...

+ +

#include <CaptureSession.h>

+
+Inheritance diagram for Argus::ICaptureSession:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual Status cancelRequests ()=0
 Removes all previously submitted requests from the queue.
virtual uint32_t capture (const Request *request, uint64_t timeout=TIMEOUT_INFINITE, Status *status=NULL)=0
 Submits a single capture request.
virtual uint32_t captureBurst (const std::vector< const Request * > &requestList, uint64_t timeout=TIMEOUT_INFINITE, Status *status=NULL)=0
 Submits a burst of requests.
virtual uint32_t maxBurstRequests () const =0
 Returns the maximum number of capture requests that can be included in a burst capture.
virtual RequestcreateRequest (const CaptureIntent &intent=CAPTURE_INTENT_PREVIEW, Status *status=NULL)=0
 Creates a request object that can be later used with this CaptureSession.
virtual OutputStreamSettingscreateOutputStreamSettings (const StreamType &type, Status *status=NULL)=0
 Creates an OutputStreamSettings object that is used to configure the creation of an OutputStream (see createOutputStream).
virtual OutputStreamcreateOutputStream (const OutputStreamSettings *settings, Status *status=NULL)=0
 Creates an OutputStream object using the settings configured by an OutputStreamSettings object (see createOutputStreamSettings).
virtual bool isRepeating () const =0
 Returns true if there is a streaming request in place.
virtual Status repeat (const Request *request)=0
 Sets up a repeating request.
virtual Status repeatBurst (const std::vector< const Request * > &requestList)=0
 Sets up a repeating burst request.
virtual Range< uint32_t > stopRepeat ()=0
 Shuts down any repeating capture.
virtual Status waitForIdle (uint64_t timeout=TIMEOUT_INFINITE) const =0
 Waits until all pending captures are complete.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ICaptureSession ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the core CaptureSession methods.

+ +

Definition at line 65 of file CaptureSession.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::ICaptureSession::~ICaptureSession ()
+
+inlineprotected
+
+ +

Definition at line 228 of file CaptureSession.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual Status Argus::ICaptureSession::cancelRequests ()
+
+pure virtual
+
+ +

Removes all previously submitted requests from the queue.

+

When all requests are cancelled, both the FIFO and the streaming requests will be removed. If repeat captures are enabled, an implicit call to ICaptureSession::stopRepeat() will be made before cancelling the requests.

+
Returns:
success/status of this call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual uint32_t Argus::ICaptureSession::capture (const Requestrequest,
uint64_t timeout = TIMEOUT_INFINITE,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Submits a single capture request.

+

For blocking capture session (created by ICameraProvider::createBlockingCaptureSession), it will wait until the request is accepted by lower level driver. For non-blocking capture session (created by ICameraProvider::createCaptureSession), it will queue a copy of the request to a queue and return.

+

The client can submit the same request instance in a future call. The request will be copied by the runtime.

+
Parameters:
+ + + + +
[in]requestParameters for the capture.
[in]timeoutThe timeout in nanoseconds. The camera device will try to issue the request within the timeout period. If it can't it will return and set status to STATUS_UNAVAILABLE.
[out]statusAn optional pointer to return success/status.
+
+
+
Returns:
the capture id, a number that uniquely identifies (within this session) the request. If the submission request failed, zero will be returned. The request could fail because the timeout is reached, or because some parameter(s) of the request are invalid.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual uint32_t Argus::ICaptureSession::captureBurst (const std::vector< const Request * > & requestList,
uint64_t timeout = TIMEOUT_INFINITE,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Submits a burst of requests.

+

For blocking capture session (created by ICameraProvider::createBlockingCaptureSession), it will wait until the first request is accepted by lower level driver. For non-blocking capture session (created by ICameraProvider::createCaptureSession), it will queue a copy of the requests to a queue and return.

+

The runtime will either accept the entire burst or refuse it completely (that is, no partial bursts will be accepted).

+
Parameters:
+ + + + +
[in]requestListThe list of requests that make up the burst.
[in]timeoutThe timeout in nanoseconds. The camera device will try to issue the request within the timeout period. If it can't it will return and set status to STATUS_UNAVAILABLE.
[out]statusAn optional pointer to return success/status.
+
+
+
Returns:
the capture id of the capture associated with the first request in the burst. The capture id will increment by one for the captures associated with each successive request. If the submission request failed, zero will be returned. The request could fail because the timeout is reached, or because some parameter(s) of the request are invalid.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual OutputStream* Argus::ICaptureSession::createOutputStream (const OutputStreamSettingssettings,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Creates an OutputStream object using the settings configured by an OutputStreamSettings object (see createOutputStreamSettings).

+
Parameters:
+ + + +
[in]settingsThe settings to use for the new output stream.
[out]statusAn optional pointer to return success/status.
+
+
+
Returns:
The newly created OutputStream, or NULL on failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual OutputStreamSettings* Argus::ICaptureSession::createOutputStreamSettings (const StreamType & type,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Creates an OutputStreamSettings object that is used to configure the creation of an OutputStream (see createOutputStream).

+

The type of OutputStream that will be configured and created by these settings are determined by the StreamType.

+
Parameters:
+ + + +
[in]typeThe type of the OutputStream to configure/create with these settings.
[out]statusAn optional pointer to return success/status.
+
+
+
Returns:
The newly created OutputStreamSettings, or NULL on failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Request* Argus::ICaptureSession::createRequest (const CaptureIntent & intent = CAPTURE_INTENT_PREVIEW,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Creates a request object that can be later used with this CaptureSession.

+
Parameters:
+ + + +
[in]intentOptional parameter that specifies the intent of the capture request and instructs the driver to populate the request with recommended settings for that intent.
[out]statusAn optional pointer to return success/status.
+
+
+
See also:
ICaptureMetadata::getClientData()
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::ICaptureSession::id ()
+
+inlinestatic
+
+ +

Definition at line 68 of file CaptureSession.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::ICaptureSession::isRepeating () const
+
+pure virtual
+
+ +

Returns true if there is a streaming request in place.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::ICaptureSession::maxBurstRequests () const
+
+pure virtual
+
+ +

Returns the maximum number of capture requests that can be included in a burst capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICaptureSession::repeat (const Requestrequest)
+
+pure virtual
+
+ +

Sets up a repeating request.

+

This is a convenience method that will queue a request whenever the request queue is empty and the camera is ready to accept new requests.

+

To stop repeating the request, call stopRepeat().

+
Parameters:
+ + +
[in]requestThe request to repeat.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICaptureSession::repeatBurst (const std::vector< const Request * > & requestList)
+
+pure virtual
+
+ +

Sets up a repeating burst request.

+

This is a convenience method that will queue a request whenever the request queue is empty and the camera is ready to accept new requests.

+

To stop repeating the requests, call stopRepeat().

+
Parameters:
+ + +
[in]requestListThe list of requests that make up the repeating burst.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<uint32_t> Argus::ICaptureSession::stopRepeat ()
+
+pure virtual
+
+ +

Shuts down any repeating capture.

+
Returns:
The range of capture ids generated by the most recent repeat() / repeatBurst() call. Note that some captures within that range may have been generated by explicit capture() calls made while the repeating capture was in force. If no captures were generated by the most recent repeat() / repeatBurst() call, Range<uint32_t>(0,0) will be returned.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ICaptureSession::waitForIdle (uint64_t timeout = TIMEOUT_INFINITE) const
+
+pure virtual
+
+ +

Waits until all pending captures are complete.

+
Parameters:
+ + +
[in]timeoutThe timeout value (in nanoseconds) for this call. If the pipe has not become idle when the timeout expires, the call will return STATUS_TIMEOUT.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureSession.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureSession.png new file mode 100644 index 0000000..747ffa4 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ICaptureSession.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseMetadata-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseMetadata-members.html new file mode 100644 index 0000000..765f035 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseMetadata-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IDenoiseMetadata Member List
+
+
+ +

This is the complete list of members for Argus::IDenoiseMetadata, including all inherited members.

+ + + + + + + +
getDenoiseMode() const =0Argus::IDenoiseMetadatapure virtual
getDenoiseStrength() const =0Argus::IDenoiseMetadatapure virtual
id()Argus::IDenoiseMetadatainlinestatic
Interface()Argus::Interfaceinlineprotected
~IDenoiseMetadata()Argus::IDenoiseMetadatainlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseMetadata.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseMetadata.html new file mode 100644 index 0000000..80e8f8d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseMetadata.html @@ -0,0 +1,252 @@ + + + + + +Libargus API: Argus::IDenoiseMetadata Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to denoise metadata. + More...

+ +

#include <CaptureMetadata.h>

+
+Inheritance diagram for Argus::IDenoiseMetadata:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual DenoiseMode getDenoiseMode () const =0
 Returns the denoise mode used for the capture.
virtual float getDenoiseStrength () const =0
 Returns the denoise strength used for the capture.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IDenoiseMetadata ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to denoise metadata.

+ +

Definition at line 412 of file CaptureMetadata.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IDenoiseMetadata::~IDenoiseMetadata ()
+
+inlineprotected
+
+ +

Definition at line 428 of file CaptureMetadata.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual DenoiseMode Argus::IDenoiseMetadata::getDenoiseMode () const
+
+pure virtual
+
+ +

Returns the denoise mode used for the capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::IDenoiseMetadata::getDenoiseStrength () const
+
+pure virtual
+
+ +

Returns the denoise strength used for the capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IDenoiseMetadata::id ()
+
+inlinestatic
+
+ +

Definition at line 415 of file CaptureMetadata.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseMetadata.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseMetadata.png new file mode 100644 index 0000000..a5f9077 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseMetadata.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseSettings-members.html new file mode 100644 index 0000000..1470569 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseSettings-members.html @@ -0,0 +1,114 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IDenoiseSettings Member List
+
+
+ +

This is the complete list of members for Argus::IDenoiseSettings, including all inherited members.

+ + + + + + + + + +
getDenoiseMode() const =0Argus::IDenoiseSettingspure virtual
getDenoiseStrength() const =0Argus::IDenoiseSettingspure virtual
id()Argus::IDenoiseSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setDenoiseMode(const DenoiseMode &mode)=0Argus::IDenoiseSettingspure virtual
setDenoiseStrength(float strength)=0Argus::IDenoiseSettingspure virtual
~IDenoiseSettings()Argus::IDenoiseSettingsinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseSettings.html new file mode 100644 index 0000000..44db2c2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseSettings.html @@ -0,0 +1,322 @@ + + + + + +Libargus API: Argus::IDenoiseSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to denoise settings. + More...

+ +

#include <Settings.h>

+
+Inheritance diagram for Argus::IDenoiseSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + +

+Public Member Functions

virtual Status setDenoiseMode (const DenoiseMode &mode)=0
 Sets the denoise (noise reduction) mode for the request.
virtual DenoiseMode getDenoiseMode () const =0
 Returns the denoise mode for the request.
virtual Status setDenoiseStrength (float strength)=0
 Sets the strength for the denoise operation.
virtual float getDenoiseStrength () const =0
 Returns the denoise strength.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IDenoiseSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to denoise settings.

+ +

Definition at line 597 of file Settings.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IDenoiseSettings::~IDenoiseSettings ()
+
+inlineprotected
+
+ +

Definition at line 636 of file Settings.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual DenoiseMode Argus::IDenoiseSettings::getDenoiseMode () const
+
+pure virtual
+
+ +

Returns the denoise mode for the request.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::IDenoiseSettings::getDenoiseStrength () const
+
+pure virtual
+
+ +

Returns the denoise strength.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IDenoiseSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 600 of file Settings.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IDenoiseSettings::setDenoiseMode (const DenoiseMode & mode)
+
+pure virtual
+
+ +

Sets the denoise (noise reduction) mode for the request.

+
Parameters:
+ + +
[in]modeThe denoise mode: OFF: Denoise algorithms are disabled. FAST: Noise reduction will be enabled, but it will not slow down the capture rate. HIGH_QUALITY: Maximum noise reduction will be enabled to achieve the highest quality, but may slow down the capture rate.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IDenoiseSettings::setDenoiseStrength (float strength)
+
+pure virtual
+
+ +

Sets the strength for the denoise operation.

+
Parameters:
+ + +
[in]strengthThe denoise strength. This must be within the range [0.0, 1.0], where 0.0 is the least and 1.0 is the most amount of noise reduction that can be applied. This denoise strength is relative to the current noise reduction mode; using a FAST denoise mode with a full strength of 1.0 may not perform as well as using a HIGH_QUALITY mode with a lower relative strength.
+
+
+
Returns:
success/status of the call.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseSettings.png new file mode 100644 index 0000000..5af43e1 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IDenoiseSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBuffer-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBuffer-members.html new file mode 100644 index 0000000..2465e25 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBuffer-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEGLImageBuffer Member List
+
+
+ +

This is the complete list of members for Argus::IEGLImageBuffer, including all inherited members.

+ + + + + + + +
getEGLDisplay() const =0Argus::IEGLImageBufferpure virtual
getEGLImage() const =0Argus::IEGLImageBufferpure virtual
id()Argus::IEGLImageBufferinlinestatic
Interface()Argus::Interfaceinlineprotected
~IEGLImageBuffer()Argus::IEGLImageBufferinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBuffer.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBuffer.html new file mode 100644 index 0000000..82cbe0b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBuffer.html @@ -0,0 +1,252 @@ + + + + + +Libargus API: Argus::IEGLImageBuffer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface that provides methods to EGLImage Buffers. + More...

+ +

#include <EGLImage.h>

+
+Inheritance diagram for Argus::IEGLImageBuffer:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual EGLDisplay getEGLDisplay () const =0
 Returns the EGLDisplay that owns the EGLImage.
virtual EGLImageKHR getEGLImage () const =0
 Returns the EGLImage being used for this Buffer.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEGLImageBuffer ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface that provides methods to EGLImage Buffers.

+ +

Definition at line 108 of file EGLImage.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEGLImageBuffer::~IEGLImageBuffer ()
+
+inlineprotected
+
+ +

Definition at line 124 of file EGLImage.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual EGLDisplay Argus::IEGLImageBuffer::getEGLDisplay () const
+
+pure virtual
+
+ +

Returns the EGLDisplay that owns the EGLImage.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual EGLImageKHR Argus::IEGLImageBuffer::getEGLImage () const
+
+pure virtual
+
+ +

Returns the EGLImage being used for this Buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEGLImageBuffer::id ()
+
+inlinestatic
+
+ +

Definition at line 111 of file EGLImage.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBuffer.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBuffer.png new file mode 100644 index 0000000..9cba172 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBuffer.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBufferSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBufferSettings-members.html new file mode 100644 index 0000000..c4aadbb --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBufferSettings-members.html @@ -0,0 +1,114 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEGLImageBufferSettings Member List
+
+
+ +

This is the complete list of members for Argus::IEGLImageBufferSettings, including all inherited members.

+ + + + + + + + + +
getEGLDisplay() const =0Argus::IEGLImageBufferSettingspure virtual
getEGLImage() const =0Argus::IEGLImageBufferSettingspure virtual
id()Argus::IEGLImageBufferSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setEGLDisplay(EGLDisplay eglDisplay)=0Argus::IEGLImageBufferSettingspure virtual
setEGLImage(EGLImageKHR eglImage)=0Argus::IEGLImageBufferSettingspure virtual
~IEGLImageBufferSettings()Argus::IEGLImageBufferSettingsinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBufferSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBufferSettings.html new file mode 100644 index 0000000..796b3b6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBufferSettings.html @@ -0,0 +1,321 @@ + + + + + +Libargus API: Argus::IEGLImageBufferSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface that provides the settings used to configure EGLImage Buffer creation. + More...

+ +

#include <EGLImage.h>

+
+Inheritance diagram for Argus::IEGLImageBufferSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + +

+Public Member Functions

virtual Status setEGLDisplay (EGLDisplay eglDisplay)=0
 Sets the EGLDisplay which owns the EGLImage.
virtual EGLDisplay getEGLDisplay () const =0
 Returns the EGLDisplay which owns the EGLImage.
virtual Status setEGLImage (EGLImageKHR eglImage)=0
 Sets the EGLImage to use as the sibling for this Buffer.
virtual EGLImageKHR getEGLImage () const =0
 Returns the EGLImage to use as the sibling for this Buffer.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEGLImageBufferSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface that provides the settings used to configure EGLImage Buffer creation.

+

These Buffers act as siblings for the EGLImage, providing libargus write access to the underlying buffer resources for the destination of capture requests.

+ +

Definition at line 69 of file EGLImage.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEGLImageBufferSettings::~IEGLImageBufferSettings ()
+
+inlineprotected
+
+ +

Definition at line 97 of file EGLImage.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual EGLDisplay Argus::IEGLImageBufferSettings::getEGLDisplay () const
+
+pure virtual
+
+ +

Returns the EGLDisplay which owns the EGLImage.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual EGLImageKHR Argus::IEGLImageBufferSettings::getEGLImage () const
+
+pure virtual
+
+ +

Returns the EGLImage to use as the sibling for this Buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEGLImageBufferSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 72 of file EGLImage.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEGLImageBufferSettings::setEGLDisplay (EGLDisplay eglDisplay)
+
+pure virtual
+
+ +

Sets the EGLDisplay which owns the EGLImage.

+
Parameters:
+ + +
[in]eglDisplayThe EGLDisplay that owns the EGLImage.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEGLImageBufferSettings::setEGLImage (EGLImageKHR eglImage)
+
+pure virtual
+
+ +

Sets the EGLImage to use as the sibling for this Buffer.

+
Parameters:
+ + +
[in]eglImageThe EGLImage to use as the sibling for this Buffer.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBufferSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBufferSettings.png new file mode 100644 index 0000000..0345dea Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLImageBufferSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStream-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStream-members.html new file mode 100644 index 0000000..e9dbc39 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStream-members.html @@ -0,0 +1,116 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEGLOutputStream Member List
+
+
+ +

This is the complete list of members for Argus::IEGLOutputStream, including all inherited members.

+ + + + + + + + + + + +
disconnect()=0Argus::IEGLOutputStreampure virtual
getEGLDisplay() const =0Argus::IEGLOutputStreampure virtual
getEGLStream() const =0Argus::IEGLOutputStreampure virtual
getPixelFormat() const =0Argus::IEGLOutputStreampure virtual
getResolution() const =0Argus::IEGLOutputStreampure virtual
id()Argus::IEGLOutputStreaminlinestatic
Interface()Argus::Interfaceinlineprotected
waitUntilConnected(uint64_t timeout=TIMEOUT_INFINITE) const =0Argus::IEGLOutputStreampure virtual
~IEGLOutputStream()Argus::IEGLOutputStreaminlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStream.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStream.html new file mode 100644 index 0000000..a2af1f0 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStream.html @@ -0,0 +1,368 @@ + + + + + +Libargus API: Argus::IEGLOutputStream Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface that exposes the methods available to an EGLStream-linked OutputStream. + More...

+ +

#include <EGLStream.h>

+
+Inheritance diagram for Argus::IEGLOutputStream:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + +

+Public Member Functions

virtual Status waitUntilConnected (uint64_t timeout=TIMEOUT_INFINITE) const =0
 Waits until both the producer and consumer endpoints of the stream are connected.
virtual void disconnect ()=0
 Disconnects the stream from the underlying EGLStream.
virtual PixelFormat getPixelFormat () const =0
 Returns the format of the stream.
virtual Size2D< uint32_t > getResolution () const =0
 Returns the image resolution of the stream, in pixels.
virtual EGLDisplay getEGLDisplay () const =0
 Returns the EGLDisplay the stream's EGLStream belongs to.
virtual EGLStreamKHR getEGLStream () const =0
 Returns the EGLStream backing the stream.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEGLOutputStream ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface that exposes the methods available to an EGLStream-linked OutputStream.

+ +

Definition at line 202 of file EGLStream.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEGLOutputStream::~IEGLOutputStream ()
+
+inlineprotected
+
+ +

Definition at line 242 of file EGLStream.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual void Argus::IEGLOutputStream::disconnect ()
+
+pure virtual
+
+ +

Disconnects the stream from the underlying EGLStream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual EGLDisplay Argus::IEGLOutputStream::getEGLDisplay () const
+
+pure virtual
+
+ +

Returns the EGLDisplay the stream's EGLStream belongs to.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual EGLStreamKHR Argus::IEGLOutputStream::getEGLStream () const
+
+pure virtual
+
+ +

Returns the EGLStream backing the stream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual PixelFormat Argus::IEGLOutputStream::getPixelFormat () const
+
+pure virtual
+
+ +

Returns the format of the stream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::IEGLOutputStream::getResolution () const
+
+pure virtual
+
+ +

Returns the image resolution of the stream, in pixels.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEGLOutputStream::id ()
+
+inlinestatic
+
+ +

Definition at line 205 of file EGLStream.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEGLOutputStream::waitUntilConnected (uint64_t timeout = TIMEOUT_INFINITE) const
+
+pure virtual
+
+ +

Waits until both the producer and consumer endpoints of the stream are connected.

+
Parameters:
+ + +
[in]timeoutThe timeout in nanoseconds.
+
+
+
Returns:
success/status of this call.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStream.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStream.png new file mode 100644 index 0000000..1209178 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStream.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStreamSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStreamSettings-members.html new file mode 100644 index 0000000..e14b35c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStreamSettings-members.html @@ -0,0 +1,125 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEGLOutputStreamSettings Member List
+
+
+ +

This is the complete list of members for Argus::IEGLOutputStreamSettings, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
getEGLDisplay() const =0Argus::IEGLOutputStreamSettingspure virtual
getExposureCount() const =0Argus::IEGLOutputStreamSettingspure virtual
getFifoLength() const =0Argus::IEGLOutputStreamSettingspure virtual
getMetadataEnable() const =0Argus::IEGLOutputStreamSettingspure virtual
getMode() const =0Argus::IEGLOutputStreamSettingspure virtual
getPixelFormat() const =0Argus::IEGLOutputStreamSettingspure virtual
getResolution() const =0Argus::IEGLOutputStreamSettingspure virtual
id()Argus::IEGLOutputStreamSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setEGLDisplay(EGLDisplay eglDisplay)=0Argus::IEGLOutputStreamSettingspure virtual
setExposureCount(uint32_t exposureCount)=0Argus::IEGLOutputStreamSettingspure virtual
setFifoLength(uint32_t fifoLength)=0Argus::IEGLOutputStreamSettingspure virtual
setMetadataEnable(bool metadataEnable)=0Argus::IEGLOutputStreamSettingspure virtual
setMode(const EGLStreamMode &mode)=0Argus::IEGLOutputStreamSettingspure virtual
setPixelFormat(const PixelFormat &format)=0Argus::IEGLOutputStreamSettingspure virtual
setResolution(const Size2D< uint32_t > &resolution)=0Argus::IEGLOutputStreamSettingspure virtual
supportsOutputStreamFormat(const SensorMode *sensorMode, const PixelFormat &outputFormat) const =0Argus::IEGLOutputStreamSettingspure virtual
~IEGLOutputStreamSettings()Argus::IEGLOutputStreamSettingsinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStreamSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStreamSettings.html new file mode 100644 index 0000000..b4b1816 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStreamSettings.html @@ -0,0 +1,631 @@ + + + + + +Libargus API: Argus::IEGLOutputStreamSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface that exposes the settings used for EGLStream-linked OutputStream creation. + More...

+ +

#include <EGLStream.h>

+
+Inheritance diagram for Argus::IEGLOutputStreamSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual Status setPixelFormat (const PixelFormat &format)=0
 Set the format of the stream.
virtual PixelFormat getPixelFormat () const =0
virtual Status setResolution (const Size2D< uint32_t > &resolution)=0
 Set the resolution of the stream.
virtual Size2D< uint32_t > getResolution () const =0
virtual Status setExposureCount (uint32_t exposureCount)=0
 Set the number of exposures per stream frame.
virtual uint32_t getExposureCount () const =0
virtual Status setEGLDisplay (EGLDisplay eglDisplay)=0
 Set the EGLDisplay the created stream must belong to.
virtual EGLDisplay getEGLDisplay () const =0
virtual Status setMode (const EGLStreamMode &mode)=0
 Sets the mode of the OutputStream.
virtual EGLStreamMode getMode () const =0
virtual Status setFifoLength (uint32_t fifoLength)=0
 Sets the FIFO queue length of the stream.
virtual uint32_t getFifoLength () const =0
virtual Status setMetadataEnable (bool metadataEnable)=0
 Enables or disables embedding Argus CaptureMetadata within frames written to the EGLStream.
virtual bool getMetadataEnable () const =0
virtual bool supportsOutputStreamFormat (const SensorMode *sensorMode, const PixelFormat &outputFormat) const =0
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEGLOutputStreamSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface that exposes the settings used for EGLStream-linked OutputStream creation.

+ +

Definition at line 79 of file EGLStream.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEGLOutputStreamSettings::~IEGLOutputStreamSettings ()
+
+inlineprotected
+
+ +

Definition at line 191 of file EGLStream.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual EGLDisplay Argus::IEGLOutputStreamSettings::getEGLDisplay () const
+
+pure virtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::IEGLOutputStreamSettings::getExposureCount () const
+
+pure virtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::IEGLOutputStreamSettings::getFifoLength () const
+
+pure virtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::IEGLOutputStreamSettings::getMetadataEnable () const
+
+pure virtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual EGLStreamMode Argus::IEGLOutputStreamSettings::getMode () const
+
+pure virtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual PixelFormat Argus::IEGLOutputStreamSettings::getPixelFormat () const
+
+pure virtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::IEGLOutputStreamSettings::getResolution () const
+
+pure virtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEGLOutputStreamSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 82 of file EGLStream.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEGLOutputStreamSettings::setEGLDisplay (EGLDisplay eglDisplay)
+
+pure virtual
+
+ +

Set the EGLDisplay the created stream must belong to.

+

Default value: EGL_NO_DISPLAY - stream is display-agnostic.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEGLOutputStreamSettings::setExposureCount (uint32_t exposureCount)
+
+pure virtual
+
+ +

Set the number of exposures per stream frame.

+

This number should match the number of exposures that are going to be provided with each stream frame when capturing from multi-exposure WDR sources. Note that the EGLStream consumer must support consuming multi-exposure/buffer EGLStreams. In the case of the EGLStream::FrameConsumer consumer, the multiple exposures are treated as separate buffers in the acquired Image and may be accessed using any Image interface which supports multi-buffer/plane image access (see EGLStream::IImage::getBufferCount()). Default value: 1

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEGLOutputStreamSettings::setFifoLength (uint32_t fifoLength)
+
+pure virtual
+
+ +

Sets the FIFO queue length of the stream.

+

This value is only used if the stream is using the FIFO mode (

+
See also:
OutputStreamSettings::setMode). Value must be > 0. Default value: 1
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEGLOutputStreamSettings::setMetadataEnable (bool metadataEnable)
+
+pure virtual
+
+ +

Enables or disables embedding Argus CaptureMetadata within frames written to the EGLStream.

+

Enabling this will allow an EGLStream::MetadataContainer to be created from frames acquired on the consumer side of the EGLStream that will expose the EGLStream::IArgusCaptureMetadata interface, which in turn provides access to the CaptureMetadata corresponding to that frame. This will also enable the IArgusCaptureMetadata interface directly on EGLStream::Frames acquired by an EGLStream::FrameConsumer. Default value: disabled.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEGLOutputStreamSettings::setMode (const EGLStreamMode & mode)
+
+pure virtual
+
+ +

Sets the mode of the OutputStream.

+

Available options are:

+

MAILBOX: In this mode, only the newest frame is made available to the consumer. When Argus completes a frame it empties the mailbox and inserts the new frame into the mailbox. The consumer then retrieves the frame from the mailbox and processes it; when finished, the frame is either placed back into the mailbox (if the mailbox is empty) or discarded (if the mailbox is not empty). This mode implies 2 things:

+
    +
  • If the consumer consumes frames slower than Argus produces frames, then some frames may be lost (never seen by the consumer).
  • +
+
    +
  • If the consumer consumes frames faster than Argus produces frames, then the consumer may see some frames more than once.
  • +
+

FIFO: When using this mode, every producer frame is made available to the consumer through the use of a fifo queue for the frames. When using this mode, the fifo queue length must be specified using setFifoLength. When Argus completes a frame it inserts it to the head of the fifo queue. If the fifo is full (already contains the number of frames equal to the fifo queue length), Argus will stall until the fifo is no longer full. The consumer consumes frames from the tail of the queue; however, if the consumer releases a frame while the queue is empty, the frame is set aside and will be returned again the next time the consumer requests a frame if another new frame has not been inserted into the fifo queue before then. Once a new frame is inserted into the fifo queue, any previously released frame will be permanently discarded. This mode implies:

+
    +
  • Frames are never discarded until the consumer has processed them.
  • +
+
    +
  • If the consumer consumes frames slower than Argus produces them, Argus will stall.
  • +
+
    +
  • If the consumer consumes frames faster than Argus produces them, then the consumer may see some frames more than once.
  • +
+

Default value: STREAM_MODE_MAILBOX

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEGLOutputStreamSettings::setPixelFormat (const PixelFormat & format)
+
+pure virtual
+
+ +

Set the format of the stream.

+

Default value: PIXEL_FMT_UNKNOWN

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEGLOutputStreamSettings::setResolution (const Size2D< uint32_t > & resolution)
+
+pure virtual
+
+ +

Set the resolution of the stream.

+

Default value: (0, 0)

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual bool Argus::IEGLOutputStreamSettings::supportsOutputStreamFormat (const SensorModesensorMode,
const PixelFormat & outputFormat 
) const
+
+pure virtual
+
+
Returns:
True if the output pixel format is supported by the CaptureSession for the queried sensor mode. Otherwise, returns false.
+
Parameters:
+ + + +
[in]sensorModeThe sensor mode being queried for the output pixel type.
[in]outputFormatThe output pixel format being queried for support.
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStreamSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStreamSettings.png new file mode 100644 index 0000000..1ba64e6 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLOutputStreamSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLSync-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLSync-members.html new file mode 100644 index 0000000..adcba33 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLSync-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEGLSync Member List
+
+
+ +

This is the complete list of members for Argus::IEGLSync, including all inherited members.

+ + + + + + + +
getAcquireSync(EGLDisplay eglDisplay, EGLSyncKHR *eglSync)=0Argus::IEGLSyncpure virtual
id()Argus::IEGLSyncinlinestatic
Interface()Argus::Interfaceinlineprotected
setReleaseSync(EGLDisplay eglDisplay, EGLSyncKHR eglSync)=0Argus::IEGLSyncpure virtual
~IEGLSync()Argus::IEGLSyncinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLSync.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLSync.html new file mode 100644 index 0000000..8aeacf4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLSync.html @@ -0,0 +1,297 @@ + + + + + +Libargus API: Argus::IEGLSync Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface that provides EGLSync input and output methods for a Buffer. + More...

+ +

#include <EGLSync.h>

+
+Inheritance diagram for Argus::IEGLSync:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual Status getAcquireSync (EGLDisplay eglDisplay, EGLSyncKHR *eglSync)=0
 Creates and returns a new EGLSync object that is signalled when all operations on the Buffer from the previous libargus capture request have completed.
virtual Status setReleaseSync (EGLDisplay eglDisplay, EGLSyncKHR eglSync)=0
 Sets the client-provided EGLSync for a Buffer prior to its release.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEGLSync ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface that provides EGLSync input and output methods for a Buffer.

+ +

Definition at line 62 of file EGLSync.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEGLSync::~IEGLSync ()
+
+inlineprotected
+
+ +

Definition at line 139 of file EGLSync.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::IEGLSync::getAcquireSync (EGLDisplay eglDisplay,
EGLSyncKHR * eglSync 
)
+
+pure virtual
+
+ +

Creates and returns a new EGLSync object that is signalled when all operations on the Buffer from the previous libargus capture request have completed.

+

When sync support is enabled for a Stream, libargus may output Buffers to that stream even if hardware operations are still pending on the Buffer's image data. In this case, libargus will attach sync information to the Buffer when it is acquired by the client that must be used to block any client operations on the image data until all preceeding libargus operations have completed. Failure to block on this sync information may lead to undefined buffer contents.

+

This method will create and output a new EGLSync object that will be signalled once all libargus operations on the Buffer have completed. Ownership of this EGLSync object is given to the caller, who must then wait on the sync object as needed before destroying it using eglDestroySyncKHR. Calling this method more than once is allowed, and each call will create and return a new EGLSync object.

+

This method should only ever be called while the Buffer is in an acquired state; ie. the time between when the Buffer was acquired by IBufferOutputStream::acquireBuffer and when it was released by IBufferOutputStream::releaseBuffer. If called outside of the acquired state, STATUS_UNAVAILABLE will be returned.

+

When successful, STATUS_OK will be returned and 'eglSync' will be written with the new EGLSync object. Note that EGL_NO_SYNC_KHR is still a valid output for the 'eglSync' even when STATUS_OK is returned; this implies that libargus does not have any pending operations to the Buffer and so the client need not take any sync precautions before accessing the image data. Thus, the returned Status code should be used for detecting failures rather than checking for an EGL_NO_SYNC_KHR output.

+
Parameters:
+ + + +
[in]eglDisplayThe EGLDisplay that shall own the returned EGLSync object.
[out]eglSyncOutput for the newly created EGLSync object. Ownership of this object is given to the client.
+
+
+
Returns:
success/status of this call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEGLSync::id ()
+
+inlinestatic
+
+ +

Definition at line 65 of file EGLSync.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::IEGLSync::setReleaseSync (EGLDisplay eglDisplay,
EGLSyncKHR eglSync 
)
+
+pure virtual
+
+ +

Sets the client-provided EGLSync for a Buffer prior to its release.

+

When sync support is enabled for a Stream, the client may release Buffers back to libargus for future capture use even if the client has hardware operations pending on the Buffer's image data. In this case, the client must provide an EGLSync object to libargus that will be signalled by the completion of the client's pending operations. This sync object will then be waited on by libargus to prevent any buffer operations from occuring before the client sync has been signalled.

+

This method should only ever be called while the Buffer is in an acquired state; ie. the time between when the Buffer was acquired by IBufferOutputStream::acquireBuffer and when it was released by IBufferOutputStream::releaseBuffer. If called outside of this period, STATUS_UNAVAILBLE will be returned and no object updates will be made. Otherwise, when called in the acquired state, this method will set the EGLSync that will be provided to libargus at the time that the Buffer is released by IBufferOutputStream::releaseBuffer and STATUS_OK will be returned. On success, ownership of the EGLSync object will be passed to libargus; further use of the EGLSync by the client after this point may lead to undefined results or abnormal termination. If called more than once when in the acquired state, any previously set EGLSync will be replaced; only the last set EGLSync before calling releaseBuffer will be waited on by libargus.

+

If the client does not have any pending operations on the Buffer at the time that releaseBuffer is called, it is allowed for the client to either skip calling this method or to call it using EGL_NO_DISPLAY and EGL_NO_SYNC_KHR such that libargus will not have to consider any sync requirements and may use the Buffer immediately.

+
Parameters:
+ + + +
[in]eglDisplayThe EGLDisplay that created the EGLSync object being provided.
[in]eglSyncThe EGLSync that libargus must wait on before accessing the buffer.
+
+
+
Returns:
success/status of this call.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLSync.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLSync.png new file mode 100644 index 0000000..77b3cdf Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEGLSync.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceMetadata-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceMetadata-members.html new file mode 100644 index 0000000..67a2efd --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceMetadata-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEdgeEnhanceMetadata Member List
+
+
+ +

This is the complete list of members for Argus::IEdgeEnhanceMetadata, including all inherited members.

+ + + + + + + +
getEdgeEnhanceMode() const =0Argus::IEdgeEnhanceMetadatapure virtual
getEdgeEnhanceStrength() const =0Argus::IEdgeEnhanceMetadatapure virtual
id()Argus::IEdgeEnhanceMetadatainlinestatic
Interface()Argus::Interfaceinlineprotected
~IEdgeEnhanceMetadata()Argus::IEdgeEnhanceMetadatainlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceMetadata.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceMetadata.html new file mode 100644 index 0000000..b04be74 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceMetadata.html @@ -0,0 +1,252 @@ + + + + + +Libargus API: Argus::IEdgeEnhanceMetadata Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to edge enhancement metadata. + More...

+ +

#include <CaptureMetadata.h>

+
+Inheritance diagram for Argus::IEdgeEnhanceMetadata:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual EdgeEnhanceMode getEdgeEnhanceMode () const =0
 Returns the edge enhancement mode used for the capture.
virtual float getEdgeEnhanceStrength () const =0
 Returns the edge enhancement strength used for the capture.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEdgeEnhanceMetadata ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to edge enhancement metadata.

+ +

Definition at line 439 of file CaptureMetadata.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEdgeEnhanceMetadata::~IEdgeEnhanceMetadata ()
+
+inlineprotected
+
+ +

Definition at line 455 of file CaptureMetadata.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual EdgeEnhanceMode Argus::IEdgeEnhanceMetadata::getEdgeEnhanceMode () const
+
+pure virtual
+
+ +

Returns the edge enhancement mode used for the capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::IEdgeEnhanceMetadata::getEdgeEnhanceStrength () const
+
+pure virtual
+
+ +

Returns the edge enhancement strength used for the capture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEdgeEnhanceMetadata::id ()
+
+inlinestatic
+
+ +

Definition at line 442 of file CaptureMetadata.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceMetadata.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceMetadata.png new file mode 100644 index 0000000..764ba8f Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceMetadata.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceSettings-members.html new file mode 100644 index 0000000..88a9cc6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceSettings-members.html @@ -0,0 +1,114 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEdgeEnhanceSettings Member List
+
+
+ +

This is the complete list of members for Argus::IEdgeEnhanceSettings, including all inherited members.

+ + + + + + + + + +
getEdgeEnhanceMode() const =0Argus::IEdgeEnhanceSettingspure virtual
getEdgeEnhanceStrength() const =0Argus::IEdgeEnhanceSettingspure virtual
id()Argus::IEdgeEnhanceSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setEdgeEnhanceMode(const EdgeEnhanceMode &mode)=0Argus::IEdgeEnhanceSettingspure virtual
setEdgeEnhanceStrength(float strength)=0Argus::IEdgeEnhanceSettingspure virtual
~IEdgeEnhanceSettings()Argus::IEdgeEnhanceSettingsinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceSettings.html new file mode 100644 index 0000000..d6fcef4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceSettings.html @@ -0,0 +1,322 @@ + + + + + +Libargus API: Argus::IEdgeEnhanceSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::IEdgeEnhanceSettings Class Reference
+
+
+ +

Interface to edge enhancement settings. + More...

+ +

#include <Settings.h>

+
+Inheritance diagram for Argus::IEdgeEnhanceSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + +

+Public Member Functions

virtual Status setEdgeEnhanceMode (const EdgeEnhanceMode &mode)=0
 Sets the edge enhancement mode for the request.
virtual EdgeEnhanceMode getEdgeEnhanceMode () const =0
 Returns the edge enhancement mode for the request.
virtual Status setEdgeEnhanceStrength (float strength)=0
 Sets the strength for the edge enhancement operation.
virtual float getEdgeEnhanceStrength () const =0
 Returns the edge enhancement strength.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEdgeEnhanceSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to edge enhancement settings.

+ +

Definition at line 647 of file Settings.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEdgeEnhanceSettings::~IEdgeEnhanceSettings ()
+
+inlineprotected
+
+ +

Definition at line 686 of file Settings.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual EdgeEnhanceMode Argus::IEdgeEnhanceSettings::getEdgeEnhanceMode () const
+
+pure virtual
+
+ +

Returns the edge enhancement mode for the request.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::IEdgeEnhanceSettings::getEdgeEnhanceStrength () const
+
+pure virtual
+
+ +

Returns the edge enhancement strength.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEdgeEnhanceSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 650 of file Settings.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEdgeEnhanceSettings::setEdgeEnhanceMode (const EdgeEnhanceMode & mode)
+
+pure virtual
+
+ +

Sets the edge enhancement mode for the request.

+
Parameters:
+ + +
[in]modeThe edge enhancement mode: OFF: Edge enhancement algorithms are disabled. FAST: Edge enhancement will be enabled, but it will not slow down the capture rate. HIGH_QUALITY: Maximum edge enhancement will be enabled to achieve the highest quality, but may slow down the capture rate.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEdgeEnhanceSettings::setEdgeEnhanceStrength (float strength)
+
+pure virtual
+
+ +

Sets the strength for the edge enhancement operation.

+
Parameters:
+ + +
[in]strengthThe edge enhancement strength. This must be within the range [0.0, 1.0], where 0.0 is the least and 1.0 is the most amount of edge enhancement that can be applied. This strength is relative to the current edge enhancement mode; using a FAST edge enhancement mode with a full strength of 1.0 may not perform as well as using a HIGH_QUALITY mode with a lower relative strength.
+
+
+
Returns:
success/status of the call.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceSettings.png new file mode 100644 index 0000000..9ee2b30 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEdgeEnhanceSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEvent-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEvent-members.html new file mode 100644 index 0000000..b0529ba --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEvent-members.html @@ -0,0 +1,113 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEvent Member List
+
+
+ +

This is the complete list of members for Argus::IEvent, including all inherited members.

+ + + + + + + + +
getCaptureId() const =0Argus::IEventpure virtual
getEventType() const =0Argus::IEventpure virtual
getTime() const =0Argus::IEventpure virtual
id()Argus::IEventinlinestatic
Interface()Argus::Interfaceinlineprotected
~IEvent()Argus::IEventinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEvent.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEvent.html new file mode 100644 index 0000000..a7c3cfc --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEvent.html @@ -0,0 +1,279 @@ + + + + + +Libargus API: Argus::IEvent Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the common Event properties. + More...

+ +

#include <Event.h>

+
+Inheritance diagram for Argus::IEvent:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + +

+Public Member Functions

virtual EventType getEventType () const =0
 Returns the event type.
virtual uint64_t getTime () const =0
 Returns the time of the event, in nanoseconds.
virtual uint32_t getCaptureId () const =0
 Returns the capture id for the event.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEvent ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the common Event properties.

+ +

Definition at line 118 of file Event.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEvent::~IEvent ()
+
+inlineprotected
+
+ +

Definition at line 139 of file Event.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::IEvent::getCaptureId () const
+
+pure virtual
+
+ +

Returns the capture id for the event.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual EventType Argus::IEvent::getEventType () const
+
+pure virtual
+
+ +

Returns the event type.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint64_t Argus::IEvent::getTime () const
+
+pure virtual
+
+ +

Returns the time of the event, in nanoseconds.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEvent::id ()
+
+inlinestatic
+
+ +

Definition at line 121 of file Event.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEvent.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEvent.png new file mode 100644 index 0000000..a444b64 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEvent.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventCaptureComplete-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventCaptureComplete-members.html new file mode 100644 index 0000000..1f2884b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventCaptureComplete-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEventCaptureComplete Member List
+
+
+ +

This is the complete list of members for Argus::IEventCaptureComplete, including all inherited members.

+ + + + + + + +
getMetadata() const =0Argus::IEventCaptureCompletepure virtual
getStatus() const =0Argus::IEventCaptureCompletepure virtual
id()Argus::IEventCaptureCompleteinlinestatic
Interface()Argus::Interfaceinlineprotected
~IEventCaptureComplete()Argus::IEventCaptureCompleteinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventCaptureComplete.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventCaptureComplete.html new file mode 100644 index 0000000..e1bf76d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventCaptureComplete.html @@ -0,0 +1,254 @@ + + + + + +Libargus API: Argus::IEventCaptureComplete Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface exposed by Events having type EVENT_TYPE_CAPTURE_COMPLETE. + More...

+ +

#include <Event.h>

+
+Inheritance diagram for Argus::IEventCaptureComplete:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual const CaptureMetadatagetMetadata () const =0
 Returns all dynamic metadata associated with this capture.
virtual Status getStatus () const =0
 Returns the error status of the metadata event.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEventCaptureComplete ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface exposed by Events having type EVENT_TYPE_CAPTURE_COMPLETE.

+ +

Definition at line 172 of file Event.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEventCaptureComplete::~IEventCaptureComplete ()
+
+inlineprotected
+
+ +

Definition at line 192 of file Event.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual const CaptureMetadata* Argus::IEventCaptureComplete::getMetadata () const
+
+pure virtual
+
+ +

Returns all dynamic metadata associated with this capture.

+

The lifetime of the returned pointer is equivalent to the lifetime of this event. NULL may be returned if no metadata is available because the capture failed or was aborted.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Status Argus::IEventCaptureComplete::getStatus () const
+
+pure virtual
+
+ +

Returns the error status of the metadata event.

+

If this value is not STATUS_OK, getMetadata() will return NULL.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEventCaptureComplete::id ()
+
+inlinestatic
+
+ +

Definition at line 175 of file Event.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventCaptureComplete.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventCaptureComplete.png new file mode 100644 index 0000000..c86b723 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventCaptureComplete.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventError-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventError-members.html new file mode 100644 index 0000000..e682dbe --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventError-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEventError Member List
+
+
+ +

This is the complete list of members for Argus::IEventError, including all inherited members.

+ + + + + + +
getStatus() const =0Argus::IEventErrorpure virtual
id()Argus::IEventErrorinlinestatic
Interface()Argus::Interfaceinlineprotected
~IEventError()Argus::IEventErrorinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventError.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventError.html new file mode 100644 index 0000000..6aa9693 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventError.html @@ -0,0 +1,225 @@ + + + + + +Libargus API: Argus::IEventError Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface exposed by Events having type EVENT_TYPE_ERROR. + More...

+ +

#include <Event.h>

+
+Inheritance diagram for Argus::IEventError:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + +

+Public Member Functions

virtual Status getStatus () const =0
 Returns the Status value describing the error.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEventError ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface exposed by Events having type EVENT_TYPE_ERROR.

+ +

Definition at line 150 of file Event.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEventError::~IEventError ()
+
+inlineprotected
+
+ +

Definition at line 161 of file Event.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual Status Argus::IEventError::getStatus () const
+
+pure virtual
+
+ +

Returns the Status value describing the error.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEventError::id ()
+
+inlinestatic
+
+ +

Definition at line 153 of file Event.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventError.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventError.png new file mode 100644 index 0000000..bef8242 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventError.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventProvider-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventProvider-members.html new file mode 100644 index 0000000..d6c62a3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventProvider-members.html @@ -0,0 +1,114 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEventProvider Member List
+
+
+ +

This is the complete list of members for Argus::IEventProvider, including all inherited members.

+ + + + + + + + + +
createEventQueue(const std::vector< EventType > &eventTypes, Status *status=NULL)=0Argus::IEventProviderpure virtual
getAvailableEventTypes(std::vector< EventType > *types) const =0Argus::IEventProviderpure virtual
id()Argus::IEventProviderinlinestatic
Interface()Argus::Interfaceinlineprotected
waitForEvents(const std::vector< EventQueue * > &queues, uint64_t timeout=TIMEOUT_INFINITE)=0Argus::IEventProviderpure virtual
waitForEvents(EventQueue *queue, uint64_t timeout=TIMEOUT_INFINITE)=0Argus::IEventProviderpure virtual
~IEventProvider()Argus::IEventProviderinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventProvider.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventProvider.html new file mode 100644 index 0000000..dfd951e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventProvider.html @@ -0,0 +1,368 @@ + + + + + +Libargus API: Argus::IEventProvider Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface for an object which generates Events (such as CaptureSession). + More...

+ +

#include <EventProvider.h>

+
+Inheritance diagram for Argus::IEventProvider:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + +

+Public Member Functions

virtual Status getAvailableEventTypes (std::vector< EventType > *types) const =0
 Returns a list of event types that this provider can generate.
virtual EventQueuecreateEventQueue (const std::vector< EventType > &eventTypes, Status *status=NULL)=0
 Creates an event queue for events of the given type(s)
virtual Status waitForEvents (const std::vector< EventQueue * > &queues, uint64_t timeout=TIMEOUT_INFINITE)=0
 Waits for and transfers any pending events from the provider to the provided queues.
virtual Status waitForEvents (EventQueue *queue, uint64_t timeout=TIMEOUT_INFINITE)=0
 Variant of waitForEvents() that waits for only one EventQueue.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEventProvider ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface for an object which generates Events (such as CaptureSession).

+

Any generated Events are initially stored by the provider itself, and they are not copied out to public EventQueues until waitForEvents() is called. If at any time there is an event type offered by a provider that is not accepted by an active EventQueue created by that provider, all events of that type will be discarded.

+ +

Definition at line 56 of file EventProvider.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEventProvider::~IEventProvider ()
+
+inlineprotected
+
+ +

Definition at line 117 of file EventProvider.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual EventQueue* Argus::IEventProvider::createEventQueue (const std::vector< EventType > & eventTypes,
Statusstatus = NULL 
)
+
+pure virtual
+
+ +

Creates an event queue for events of the given type(s)

+
Parameters:
+ + + +
[in]eventTypesThe list of event types for the queue.
[out]statusAn optional pointer to return success/status.
+
+
+
Returns:
the new EventQueue object, or NULL on failure.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEventProvider::getAvailableEventTypes (std::vector< EventType > * types) const
+
+pure virtual
+
+ +

Returns a list of event types that this provider can generate.

+
Parameters:
+ + +
[out]typesA vector that will be populated by the available event types.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEventProvider::id ()
+
+inlinestatic
+
+ +

Definition at line 59 of file EventProvider.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::IEventProvider::waitForEvents (const std::vector< EventQueue * > & queues,
uint64_t timeout = TIMEOUT_INFINITE 
)
+
+pure virtual
+
+ +

Waits for and transfers any pending events from the provider to the provided queues.

+

Ownership of all events transfered to a queue will be passed from the provider to the queue, and these event object pointers will remain valid until the queue is destroyed or until the next call to this function with that queue. In other words, any events in a queue will be destroyed when the queue is provided to another call of this function, regardless of whether or not it receives any new events, or when the queue is destroyed.

+

If more than one given queue accepts events of the same type, only the first of these queues will receive events of that type.

+

Any events that are not copied to queues by this function are left in the provider until they are queried using a queue receiving events of that type.

+

If there are no pending events of the requested types at the time this function is called, it will block until one is available or a timeout occurs.

+
Parameters:
+ + + +
[in]queuesThe list of queues to transfer events to.
[in]timeoutThe maximum time (in nanoseconds) to wait for new events.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Status Argus::IEventProvider::waitForEvents (EventQueuequeue,
uint64_t timeout = TIMEOUT_INFINITE 
)
+
+pure virtual
+
+ +

Variant of waitForEvents() that waits for only one EventQueue.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventProvider.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventProvider.png new file mode 100644 index 0000000..c42652d Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventProvider.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventQueue-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventQueue-members.html new file mode 100644 index 0000000..1095f28 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventQueue-members.html @@ -0,0 +1,114 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IEventQueue Member List
+
+
+ +

This is the complete list of members for Argus::IEventQueue, including all inherited members.

+ + + + + + + + + +
getEvent(uint32_t index) const =0Argus::IEventQueuepure virtual
getEventTypes(std::vector< EventType > *types) const =0Argus::IEventQueuepure virtual
getNextEvent()=0Argus::IEventQueuepure virtual
getSize() const =0Argus::IEventQueuepure virtual
id()Argus::IEventQueueinlinestatic
Interface()Argus::Interfaceinlineprotected
~IEventQueue()Argus::IEventQueueinlineprotected
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventQueue.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventQueue.html new file mode 100644 index 0000000..f258ea5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventQueue.html @@ -0,0 +1,317 @@ + + + + + +Libargus API: Argus::IEventQueue Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the core EventQueue methods. + More...

+ +

#include <EventQueue.h>

+
+Inheritance diagram for Argus::IEventQueue:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + +

+Public Member Functions

virtual Status getEventTypes (std::vector< EventType > *types) const =0
 Returns the event types that this queue will receive.
virtual const EventgetNextEvent ()=0
 Returns the next event in the queue (that is, the event at index 0).
virtual uint32_t getSize () const =0
 Returns the number of events in the queue.
virtual const EventgetEvent (uint32_t index) const =0
 Returns the event with the given index, where index 0 corresponds to the oldest event and [getSize() - 1] is the newest.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IEventQueue ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the core EventQueue methods.

+ +

Definition at line 64 of file EventQueue.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IEventQueue::~IEventQueue ()
+
+inlineprotected
+
+ +

Definition at line 99 of file EventQueue.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual const Event* Argus::IEventQueue::getEvent (uint32_t index) const
+
+pure virtual
+
+ +

Returns the event with the given index, where index 0 corresponds to the oldest event and [getSize() - 1] is the newest.

+

The returned event is not removed from the queue. If index is not in [0, getSize()-1], NULL is returned.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IEventQueue::getEventTypes (std::vector< EventType > * types) const
+
+pure virtual
+
+ +

Returns the event types that this queue will receive.

+
Parameters:
+ + +
[out]typesThis vector will be populated with the event types registered to this queue.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual const Event* Argus::IEventQueue::getNextEvent ()
+
+pure virtual
+
+ +

Returns the next event in the queue (that is, the event at index 0).

+

The returned event will be removed from the queue, though the object will remain valid according to the rules described by waitForEvents(). If the queue is empty, returns NULL.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::IEventQueue::getSize () const
+
+pure virtual
+
+ +

Returns the number of events in the queue.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IEventQueue::id ()
+
+inlinestatic
+
+ +

Definition at line 67 of file EventQueue.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventQueue.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventQueue.png new file mode 100644 index 0000000..81b22b3 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IEventQueue.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IOutputStreamSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IOutputStreamSettings-members.html new file mode 100644 index 0000000..6bef857 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IOutputStreamSettings-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IOutputStreamSettings Member List
+
+
+ +

This is the complete list of members for Argus::IOutputStreamSettings, including all inherited members.

+ + + + + + + +
getCameraDevice() const =0Argus::IOutputStreamSettingspure virtual
id()Argus::IOutputStreamSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setCameraDevice(CameraDevice *device)=0Argus::IOutputStreamSettingspure virtual
~Interface()Argus::Interfaceinlineprotected
~IOutputStreamSettings()Argus::IOutputStreamSettingsinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IOutputStreamSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IOutputStreamSettings.html new file mode 100644 index 0000000..3598421 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IOutputStreamSettings.html @@ -0,0 +1,251 @@ + + + + + +Libargus API: Argus::IOutputStreamSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface that exposes the settings common to all OutputStream types. + More...

+ +

#include <Stream.h>

+
+Inheritance diagram for Argus::IOutputStreamSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + +

+Public Member Functions

virtual Status setCameraDevice (CameraDevice *device)=0
 Set the camera device to use as the source for this stream.
virtual CameraDevicegetCameraDevice () const =0
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IOutputStreamSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface that exposes the settings common to all OutputStream types.

+ +

Definition at line 91 of file Stream.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IOutputStreamSettings::~IOutputStreamSettings ()
+
+inlineprotected
+
+ +

Definition at line 104 of file Stream.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual CameraDevice* Argus::IOutputStreamSettings::getCameraDevice () const
+
+pure virtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IOutputStreamSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 94 of file Stream.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IOutputStreamSettings::setCameraDevice (CameraDevicedevice)
+
+pure virtual
+
+ +

Set the camera device to use as the source for this stream.

+

Default value: First available device in the session.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IOutputStreamSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IOutputStreamSettings.png new file mode 100644 index 0000000..538e6b0 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IOutputStreamSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRGBHistogram-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRGBHistogram-members.html new file mode 100644 index 0000000..074b1fc --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRGBHistogram-members.html @@ -0,0 +1,112 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IRGBHistogram Member List
+
+
+ +

This is the complete list of members for Argus::IRGBHistogram, including all inherited members.

+ + + + + + + +
getBinCount() const =0Argus::IRGBHistogrampure virtual
getHistogram(std::vector< RGBTuple< uint32_t > > *histogram) const =0Argus::IRGBHistogrampure virtual
id()Argus::IRGBHistograminlinestatic
Interface()Argus::Interfaceinlineprotected
~Interface()Argus::Interfaceinlineprotected
~IRGBHistogram()Argus::IRGBHistograminlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRGBHistogram.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRGBHistogram.html new file mode 100644 index 0000000..c8a58f4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRGBHistogram.html @@ -0,0 +1,260 @@ + + + + + +Libargus API: Argus::IRGBHistogram Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to RGB histogram metadata (provided by ICaptureMetadata::getRGBHistogram()). + More...

+ +

#include <CaptureMetadata.h>

+
+Inheritance diagram for Argus::IRGBHistogram:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + +

+Public Member Functions

virtual uint32_t getBinCount () const =0
 Returns the number of bins in the histogram.
virtual Status getHistogram (std::vector< RGBTuple< uint32_t > > *histogram) const =0
 Returns the histogram data.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IRGBHistogram ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to RGB histogram metadata (provided by ICaptureMetadata::getRGBHistogram()).

+

Bins are evenly distributed across the possible range of values, each containing the number of pixels whose value fell within the range for that bin.

+ +

Definition at line 113 of file CaptureMetadata.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IRGBHistogram::~IRGBHistogram ()
+
+inlineprotected
+
+ +

Definition at line 135 of file CaptureMetadata.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::IRGBHistogram::getBinCount () const
+
+pure virtual
+
+ +

Returns the number of bins in the histogram.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IRGBHistogram::getHistogram (std::vector< RGBTuple< uint32_t > > * histogram) const
+
+pure virtual
+
+ +

Returns the histogram data.

+
Parameters:
+ + +
[out]histogramThe output vector to store the histogram data. Upon successful return, this vector will be replaced with getBinCount() bin values, each containing per-channel pixel counts within an RGBTuple container.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IRGBHistogram::id ()
+
+inlinestatic
+
+ +

Definition at line 117 of file CaptureMetadata.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRGBHistogram.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRGBHistogram.png new file mode 100644 index 0000000..b7c6a42 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRGBHistogram.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRequest-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRequest-members.html new file mode 100644 index 0000000..e24b0f5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRequest-members.html @@ -0,0 +1,121 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IRequest Member List
+
+
+ +

This is the complete list of members for Argus::IRequest, including all inherited members.

+ + + + + + + + + + + + + + + + +
clearOutputStreams()=0Argus::IRequestpure virtual
disableOutputStream(OutputStream *stream)=0Argus::IRequestpure virtual
enableOutputStream(OutputStream *stream)=0Argus::IRequestpure virtual
getAutoControlSettings(const AutoControlId acId=0)=0Argus::IRequestpure virtual
getClientData() const =0Argus::IRequestpure virtual
getEnableIspStage() const =0Argus::IRequestpure virtual
getOutputStreams(std::vector< OutputStream * > *streams) const =0Argus::IRequestpure virtual
getSourceSettings()=0Argus::IRequestpure virtual
getStreamSettings(const OutputStream *stream)=0Argus::IRequestpure virtual
id()Argus::IRequestinlinestatic
Interface()Argus::Interfaceinlineprotected
setClientData(uint32_t data)=0Argus::IRequestpure virtual
setEnableIspStage(bool enableIspStage)=0Argus::IRequestpure virtual
~Interface()Argus::Interfaceinlineprotected
~IRequest()Argus::IRequestinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRequest.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRequest.html new file mode 100644 index 0000000..cfb12c2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRequest.html @@ -0,0 +1,532 @@ + + + + + +Libargus API: Argus::IRequest Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the core Request settings. + More...

+ +

#include <Request.h>

+
+Inheritance diagram for Argus::IRequest:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual Status enableOutputStream (OutputStream *stream)=0
 Enables the specified output stream.
virtual Status disableOutputStream (OutputStream *stream)=0
 Disables the specified output stream.
virtual Status clearOutputStreams ()=0
 Disables all output streams.
virtual Status getOutputStreams (std::vector< OutputStream * > *streams) const =0
 Returns all enabled output streams.
virtual InterfaceProvidergetStreamSettings (const OutputStream *stream)=0
 Returns the Stream settings for a particular stream in the request.
virtual InterfaceProvidergetAutoControlSettings (const AutoControlId acId=0)=0
 Returns the capture control settings for a given AC.
virtual InterfaceProvidergetSourceSettings ()=0
 Returns the source settings for the request.
virtual Status setClientData (uint32_t data)=0
 Sets the client data for the request.
virtual uint32_t getClientData () const =0
 Gets the client data for the request.
virtual Status setEnableIspStage (bool enableIspStage)=0
 Set this to false if o/p buffer is Bayer and ISP stage needs to be skipped.
virtual bool getEnableIspStage () const =0
 Check if ISP stage is enabled/disabled.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IRequest ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the core Request settings.

+ +

Definition at line 74 of file Request.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IRequest::~IRequest ()
+
+inlineprotected
+
+ +

Definition at line 151 of file Request.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual Status Argus::IRequest::clearOutputStreams ()
+
+pure virtual
+
+ +

Disables all output streams.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IRequest::disableOutputStream (OutputStreamstream)
+
+pure virtual
+
+ +

Disables the specified output stream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IRequest::enableOutputStream (OutputStreamstream)
+
+pure virtual
+
+ +

Enables the specified output stream.

+

Captures made with this Request will produce output on that stream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual InterfaceProvider* Argus::IRequest::getAutoControlSettings (const AutoControlId acId = 0)
+
+pure virtual
+
+ +

Returns the capture control settings for a given AC.

+

The returned object will have the same lifespan as this object, and expose the IAutoControlSettings interface.

+
Parameters:
+ + +
[in]acIdThe id of the AC component for which the settings are requested. (Currently unused)
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::IRequest::getClientData () const
+
+pure virtual
+
+ +

Gets the client data for the request.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::IRequest::getEnableIspStage () const
+
+pure virtual
+
+ +

Check if ISP stage is enabled/disabled.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IRequest::getOutputStreams (std::vector< OutputStream * > * streams) const
+
+pure virtual
+
+ +

Returns all enabled output streams.

+
Parameters:
+ + +
[out]streamsA vector that will be populated with the enabled streams.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual InterfaceProvider* Argus::IRequest::getSourceSettings ()
+
+pure virtual
+
+ +

Returns the source settings for the request.

+

The returned object will have the same lifespan as this object, and expose the ISourceSettings interface.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual InterfaceProvider* Argus::IRequest::getStreamSettings (const OutputStreamstream)
+
+pure virtual
+
+ +

Returns the Stream settings for a particular stream in the request.

+

The returned object will have the same lifespan as this object, and expose the IStreamSettings interface.

+
Parameters:
+ + +
[in]streamThe stream for which the settings are requested.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IRequest::id ()
+
+inlinestatic
+
+ +

Definition at line 77 of file Request.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IRequest::setClientData (uint32_t data)
+
+pure virtual
+
+ +

Sets the client data for the request.

+

This value is passed through to and queryable from the CaptureMetadata generated for any captures completed using this Request. Default value is 0.

+
Parameters:
+ + +
[in]dataThe client data.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IRequest::setEnableIspStage (bool enableIspStage)
+
+pure virtual
+
+ +

Set this to false if o/p buffer is Bayer and ISP stage needs to be skipped.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRequest.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRequest.png new file mode 100644 index 0000000..89fb6c0 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IRequest.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISensorMode-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISensorMode-members.html new file mode 100644 index 0000000..69a679f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISensorMode-members.html @@ -0,0 +1,122 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::ISensorMode Member List
+
+
+ +

This is the complete list of members for Argus::ISensorMode, including all inherited members.

+ + + + + + + + + + + + + + + + + +
getAnalogGainRange() const =0Argus::ISensorModepure virtual
getBayerPhase() const =0Argus::ISensorModepure virtual
getBinningFactor() const =0Argus::ISensorModepure virtual
getCrop() const =0Argus::ISensorModepure virtual
getExposureTimeRange() const =0Argus::ISensorModepure virtual
getFrameDurationRange() const =0Argus::ISensorModepure virtual
getHdrRatioRange() const =0Argus::ISensorModepure virtual
getInputBitDepth() const =0Argus::ISensorModepure virtual
getOutputBitDepth() const =0Argus::ISensorModepure virtual
getResolution() const =0Argus::ISensorModepure virtual
getSensorModeType() const =0Argus::ISensorModepure virtual
id()Argus::ISensorModeinlinestatic
Interface()Argus::Interfaceinlineprotected
isBufferFormatSupported(Buffer *buffer) const =0Argus::ISensorModepure virtual
~Interface()Argus::Interfaceinlineprotected
~ISensorMode()Argus::ISensorModeinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISensorMode.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISensorMode.html new file mode 100644 index 0000000..2805bd3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISensorMode.html @@ -0,0 +1,526 @@ + + + + + +Libargus API: Argus::ISensorMode Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the core properties of a SensorMode. + More...

+ +

#include <CameraDevice.h>

+
+Inheritance diagram for Argus::ISensorMode:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual Size2D< uint32_t > getResolution () const =0
 Returns the image resolution, in pixels.
virtual Rectangle< uint32_t > getCrop () const =0
 Returns the sensor crop region.
virtual float getBinningFactor () const =0
 Returns the binning factor.
virtual Range< uint64_t > getExposureTimeRange () const =0
 Returns the supported exposure time range (in nanoseconds).
virtual Range< float > getHdrRatioRange () const =0
 Returns the hdr ratio range, it is the ratio of long exposure vs short exposure.
virtual Range< uint64_t > getFrameDurationRange () const =0
 Returns the supported frame duration range (in nanoseconds).
virtual Range< float > getAnalogGainRange () const =0
 Returns the supported analog gain range.
virtual uint32_t getInputBitDepth () const =0
 Returns the bit depth of the image captured by the image sensor in the current mode.
virtual uint32_t getOutputBitDepth () const =0
 Returns the bit depth of the image returned from the image sensor in the current mode.
virtual SensorModeType getSensorModeType () const =0
 Describes the type of the sensor (Bayer, Yuv, etc.) and key modes of operation which are enabled in the sensor mode (Wide-dynamic range, Piecewise Linear Compressed output, etc.)
virtual BayerPhase getBayerPhase () const =0
 Describes the bayer phase of Bayer mode.
virtual bool isBufferFormatSupported (Buffer *buffer) const =0
 Checks if the buffer provided is supported by the camera device.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ISensorMode ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the core properties of a SensorMode.

+ +

Definition at line 223 of file CameraDevice.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::ISensorMode::~ISensorMode ()
+
+inlineprotected
+
+ +

Definition at line 301 of file CameraDevice.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<float> Argus::ISensorMode::getAnalogGainRange () const
+
+pure virtual
+
+ +

Returns the supported analog gain range.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual BayerPhase Argus::ISensorMode::getBayerPhase () const
+
+pure virtual
+
+ +

Describes the bayer phase of Bayer mode.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::ISensorMode::getBinningFactor () const
+
+pure virtual
+
+ +

Returns the binning factor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Rectangle<uint32_t> Argus::ISensorMode::getCrop () const
+
+pure virtual
+
+ +

Returns the sensor crop region.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<uint64_t> Argus::ISensorMode::getExposureTimeRange () const
+
+pure virtual
+
+ +

Returns the supported exposure time range (in nanoseconds).

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<uint64_t> Argus::ISensorMode::getFrameDurationRange () const
+
+pure virtual
+
+ +

Returns the supported frame duration range (in nanoseconds).

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<float> Argus::ISensorMode::getHdrRatioRange () const
+
+pure virtual
+
+ +

Returns the hdr ratio range, it is the ratio of long exposure vs short exposure.

+

When min and/or max is greater than 1, long exposure range is given by getExposureTimeRange() and short exposure range is computed as following: short exposure min = getExposureTimeRange().min() / getHdrRatioRange().max() short exposure max = getExposureTimeRange().max() / getHdrRatioRange().min().

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::ISensorMode::getInputBitDepth () const
+
+pure virtual
+
+ +

Returns the bit depth of the image captured by the image sensor in the current mode.

+

For example, a wide dynamic range image sensor capturing 16 bits per pixel would have an input bit depth of 16.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual uint32_t Argus::ISensorMode::getOutputBitDepth () const
+
+pure virtual
+
+ +

Returns the bit depth of the image returned from the image sensor in the current mode.

+

For example, a wide dynamic range image sensor capturing 16 bits per pixel might be connected through a Camera Serial Interface (CSI-3) which is limited to 12 bits per pixel. The sensor would have to compress the image internally and would have an output bit depth not exceeding 12.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Size2D<uint32_t> Argus::ISensorMode::getResolution () const
+
+pure virtual
+
+ +

Returns the image resolution, in pixels.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual SensorModeType Argus::ISensorMode::getSensorModeType () const
+
+pure virtual
+
+ +

Describes the type of the sensor (Bayer, Yuv, etc.) and key modes of operation which are enabled in the sensor mode (Wide-dynamic range, Piecewise Linear Compressed output, etc.)

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::ISensorMode::id ()
+
+inlinestatic
+
+ +

Definition at line 226 of file CameraDevice.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool Argus::ISensorMode::isBufferFormatSupported (Bufferbuffer) const
+
+pure virtual
+
+ +

Checks if the buffer provided is supported by the camera device.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISensorMode.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISensorMode.png new file mode 100644 index 0000000..828f0af Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISensorMode.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISourceSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISourceSettings-members.html new file mode 100644 index 0000000..7f84047 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISourceSettings-members.html @@ -0,0 +1,130 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::ISourceSettings Member List
+
+
+ +

This is the complete list of members for Argus::ISourceSettings, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
getApertureFNumber() const =0Argus::ISourceSettingspure virtual
getApertureMotorSpeed() const =0Argus::ISourceSettingspure virtual
getAperturePosition() const =0Argus::ISourceSettingspure virtual
getExposureTimeRange() const =0Argus::ISourceSettingspure virtual
getFocusPosition() const =0Argus::ISourceSettingspure virtual
getFrameDurationRange() const =0Argus::ISourceSettingspure virtual
getGainRange() const =0Argus::ISourceSettingspure virtual
getOpticalBlack() const =0Argus::ISourceSettingspure virtual
getOpticalBlackEnable() const =0Argus::ISourceSettingspure virtual
getSensorMode() const =0Argus::ISourceSettingspure virtual
id()Argus::ISourceSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setApertureFNumber(float fnumber)=0Argus::ISourceSettingspure virtual
setApertureMotorSpeed(float speed)=0Argus::ISourceSettingspure virtual
setAperturePosition(int32_t position)=0Argus::ISourceSettingspure virtual
setExposureTimeRange(const Range< uint64_t > &exposureTimeRange)=0Argus::ISourceSettingspure virtual
setFocusPosition(int32_t position)=0Argus::ISourceSettingspure virtual
setFrameDurationRange(const Range< uint64_t > &frameDurationRange)=0Argus::ISourceSettingspure virtual
setGainRange(const Range< float > &gainRange)=0Argus::ISourceSettingspure virtual
setOpticalBlack(const BayerTuple< float > &opticalBlackLevels)=0Argus::ISourceSettingspure virtual
setOpticalBlackEnable(bool enable)=0Argus::ISourceSettingspure virtual
setSensorMode(SensorMode *mode)=0Argus::ISourceSettingspure virtual
~Interface()Argus::Interfaceinlineprotected
~ISourceSettings()Argus::ISourceSettingsinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISourceSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISourceSettings.html new file mode 100644 index 0000000..8a30d7a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISourceSettings.html @@ -0,0 +1,840 @@ + + + + + +Libargus API: Argus::ISourceSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to the source settings (provided by IRequest::getSourceSettings()). + More...

+ +

#include <Settings.h>

+
+Inheritance diagram for Argus::ISourceSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual Status setExposureTimeRange (const Range< uint64_t > &exposureTimeRange)=0
 Sets the exposure time range of the source, in nanoseconds.
virtual Range< uint64_t > getExposureTimeRange () const =0
 Returns the exposure time range of the source, in nanoseconds.
virtual Status setFocusPosition (int32_t position)=0
 Sets the focus position, in focuser units.
virtual int32_t getFocusPosition () const =0
 Returns the focus position, in focuser units.
virtual Status setAperturePosition (int32_t position)=0
 Sets the aperture position.
virtual int32_t getAperturePosition () const =0
 Returns the aperture position.
virtual Status setApertureMotorSpeed (float speed)=0
 Sets the aperture motor speed in motor steps/second.
virtual float getApertureMotorSpeed () const =0
 Returns the aperture motor speed in motor steps/second.
virtual Status setApertureFNumber (float fnumber)=0
 Sets the aperture f-number.
virtual float getApertureFNumber () const =0
 Returns the aperture f-number.
virtual Status setFrameDurationRange (const Range< uint64_t > &frameDurationRange)=0
 Sets the frame duration range, in nanoseconds.
virtual Range< uint64_t > getFrameDurationRange () const =0
 Returns the frame duration range, in nanoseconds.
virtual Status setGainRange (const Range< float > &gainRange)=0
 Sets the gain range for the sensor.
virtual Range< float > getGainRange () const =0
 Returns the gain range.
virtual Status setSensorMode (SensorMode *mode)=0
 Sets the sensor mode.
virtual SensorModegetSensorMode () const =0
 Returns the sensor mode.
virtual Status setOpticalBlack (const BayerTuple< float > &opticalBlackLevels)=0
 Sets the user-specified optical black levels.
virtual BayerTuple< float > getOpticalBlack () const =0
 Returns user-specified opticalBlack level per bayer phase.
virtual Status setOpticalBlackEnable (bool enable)=0
 Sets whether or not user-provided optical black levels are used.
virtual bool getOpticalBlackEnable () const =0
 Returns whether user-specified optical black levels are enabled.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~ISourceSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to the source settings (provided by IRequest::getSourceSettings()).

+ +

Definition at line 50 of file Settings.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::ISourceSettings::~ISourceSettings ()
+
+inlineprotected
+
+ +

Definition at line 217 of file Settings.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::ISourceSettings::getApertureFNumber () const
+
+pure virtual
+
+ +

Returns the aperture f-number.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual float Argus::ISourceSettings::getApertureMotorSpeed () const
+
+pure virtual
+
+ +

Returns the aperture motor speed in motor steps/second.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual int32_t Argus::ISourceSettings::getAperturePosition () const
+
+pure virtual
+
+ +

Returns the aperture position.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<uint64_t> Argus::ISourceSettings::getExposureTimeRange () const
+
+pure virtual
+
+ +

Returns the exposure time range of the source, in nanoseconds.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual int32_t Argus::ISourceSettings::getFocusPosition () const
+
+pure virtual
+
+ +

Returns the focus position, in focuser units.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<uint64_t> Argus::ISourceSettings::getFrameDurationRange () const
+
+pure virtual
+
+ +

Returns the frame duration range, in nanoseconds.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Range<float> Argus::ISourceSettings::getGainRange () const
+
+pure virtual
+
+ +

Returns the gain range.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual BayerTuple<float> Argus::ISourceSettings::getOpticalBlack () const
+
+pure virtual
+
+ +

Returns user-specified opticalBlack level per bayer phase.

+
Returns:
opticalBlackLevels
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::ISourceSettings::getOpticalBlackEnable () const
+
+pure virtual
+
+ +

Returns whether user-specified optical black levels are enabled.

+

If false, the Argus implementation will choose the optical black values.

+
See also:
setOpticalBlackEnable()
+
Returns:
enable
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual SensorMode* Argus::ISourceSettings::getSensorMode () const
+
+pure virtual
+
+ +

Returns the sensor mode.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::ISourceSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 53 of file Settings.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ISourceSettings::setApertureFNumber (float fnumber)
+
+pure virtual
+
+ +

Sets the aperture f-number.

+

If the f-number is not valid, error will be returned.

+
Parameters:
+ + +
[in]fnumberThe new f-number.
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ISourceSettings::setApertureMotorSpeed (float speed)
+
+pure virtual
+
+ +

Sets the aperture motor speed in motor steps/second.

+

If the speed is set outside of the speed limits, the speed will be clamped.

+
Parameters:
+ + +
[in]speedThe new speed.
+
+
+
See also:
ICameraProperties::getApertureMotorSpeedRange()
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ISourceSettings::setAperturePosition (int32_t position)
+
+pure virtual
+
+ +

Sets the aperture position.

+

If the position is not valid, error will be returned.

+
Parameters:
+ + +
[in]positionThe new aperture position.
+
+
+
See also:
ICameraProperties::getAperturePositionRange()
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ISourceSettings::setExposureTimeRange (const Range< uint64_t > & exposureTimeRange)
+
+pure virtual
+
+ +

Sets the exposure time range of the source, in nanoseconds.

+

If the exposure range is outside of the available range, the capture's exposure time will be as close as possible to the exposure range specified.

+
Parameters:
+ + +
[in]exposureTimeRangeExposure time range, in nanoseconds.
+
+
+
See also:
ISensorMode::getExposureTimeRange()
+
Todo:
Document implications of quantization.
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ISourceSettings::setFocusPosition (int32_t position)
+
+pure virtual
+
+ +

Sets the focus position, in focuser units.

+

If the position is set outside of the focuser limits, the position will be clamped.

+
Parameters:
+ + +
[in]positionThe new focus position, in focuser units.
+
+
+
See also:
ICameraProperties::getFocusPositionRange()
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ISourceSettings::setFrameDurationRange (const Range< uint64_t > & frameDurationRange)
+
+pure virtual
+
+ +

Sets the frame duration range, in nanoseconds.

+

If frame range is out of bounds of the current sensor mode, the capture's frame duration will be as close as possible to the range specified.

+
Parameters:
+ + +
[in]frameDurationRangeFrame duration range, in nanoseconds
+
+
+
See also:
ISensorMode::getFrameDurationRange()
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ISourceSettings::setGainRange (const Range< float > & gainRange)
+
+pure virtual
+
+ +

Sets the gain range for the sensor.

+

The range has to be within the max and min reported in the CameraProperties Otherwise the range will be clipped.

+
Parameters:
+ + +
[in]gainRangescalar gain range
+
+
+
See also:
ISensorMode::getAnalogGainRange()
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ISourceSettings::setOpticalBlack (const BayerTuple< float > & opticalBlackLevels)
+
+pure virtual
+
+ +

Sets the user-specified optical black levels.

+

These values will be ignored unless getOpticalBlackEnable() == true Values are floating point in the range [0,1) normalized based on sensor bit depth.

+
Parameters:
+ + +
[in]opticalBlackLevelsopticalBlack levels in range [0,1) per bayer phase
+
+
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ISourceSettings::setOpticalBlackEnable (bool enable)
+
+pure virtual
+
+ +

Sets whether or not user-provided optical black levels are used.

+
Parameters:
+ + +
[in]enableIf true, Argus will use the user-specified optical black levels.
+
+
+
See also:
setOpticalBlack() If false, the Argus implementation will choose the optical black values.
+
Returns:
success/status of the call.
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::ISourceSettings::setSensorMode (SensorModemode)
+
+pure virtual
+
+ +

Sets the sensor mode.

+

Note that changing sensor mode from one capture to the next may result in multiple sensor frames being dropped between the two captures.

+
Parameters:
+ + +
[in]modeDesired sensor mode for the capture.
+
+
+
See also:
ICameraProperties::getAllSensorModes()
+
Returns:
success/status of the call.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISourceSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISourceSettings.png new file mode 100644 index 0000000..f6e32ae Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1ISourceSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamCaptureMetadata-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamCaptureMetadata-members.html new file mode 100644 index 0000000..2713e6e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamCaptureMetadata-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IStreamCaptureMetadata Member List
+
+
+ +

This is the complete list of members for Argus::IStreamCaptureMetadata, including all inherited members.

+ + + + + + +
getSourceClipRect() const =0Argus::IStreamCaptureMetadatapure virtual
id()Argus::IStreamCaptureMetadatainlinestatic
Interface()Argus::Interfaceinlineprotected
~Interface()Argus::Interfaceinlineprotected
~IStreamCaptureMetadata()Argus::IStreamCaptureMetadatainlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamCaptureMetadata.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamCaptureMetadata.html new file mode 100644 index 0000000..0235de7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamCaptureMetadata.html @@ -0,0 +1,225 @@ + + + + + +Libargus API: Argus::IStreamCaptureMetadata Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::IStreamCaptureMetadata Class Reference
+
+
+ +

Interface to per-stream metadata (provided by ICaptureMetadata::getStreamMetadata()). + More...

+ +

#include <CaptureMetadata.h>

+
+Inheritance diagram for Argus::IStreamCaptureMetadata:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + +

+Public Member Functions

virtual Rectangle< float > getSourceClipRect () const =0
 Returns the clip rectangle used for this stream.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IStreamCaptureMetadata ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to per-stream metadata (provided by ICaptureMetadata::getStreamMetadata()).

+ +

Definition at line 146 of file CaptureMetadata.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IStreamCaptureMetadata::~IStreamCaptureMetadata ()
+
+inlineprotected
+
+ +

Definition at line 159 of file CaptureMetadata.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual Rectangle<float> Argus::IStreamCaptureMetadata::getSourceClipRect () const
+
+pure virtual
+
+ +

Returns the clip rectangle used for this stream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IStreamCaptureMetadata::id ()
+
+inlinestatic
+
+ +

Definition at line 150 of file CaptureMetadata.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamCaptureMetadata.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamCaptureMetadata.png new file mode 100644 index 0000000..7ac373a Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamCaptureMetadata.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamSettings-members.html new file mode 100644 index 0000000..36592ff --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamSettings-members.html @@ -0,0 +1,114 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::IStreamSettings Member List
+
+
+ +

This is the complete list of members for Argus::IStreamSettings, including all inherited members.

+ + + + + + + + + +
getPostProcessingEnable() const =0Argus::IStreamSettingspure virtual
getSourceClipRect() const =0Argus::IStreamSettingspure virtual
id()Argus::IStreamSettingsinlinestatic
Interface()Argus::Interfaceinlineprotected
setPostProcessingEnable(bool enable)=0Argus::IStreamSettingspure virtual
setSourceClipRect(const Rectangle< float > &clipRect)=0Argus::IStreamSettingspure virtual
~Interface()Argus::Interfaceinlineprotected
~IStreamSettings()Argus::IStreamSettingsinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamSettings.html new file mode 100644 index 0000000..493a5a5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamSettings.html @@ -0,0 +1,320 @@ + + + + + +Libargus API: Argus::IStreamSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+ +
+ +

Interface to per-stream settings (provided by IRequest::getStreamSettings()). + More...

+ +

#include <Settings.h>

+
+Inheritance diagram for Argus::IStreamSettings:
+
+
+ + +Argus::Interface +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + +

+Public Member Functions

virtual Status setSourceClipRect (const Rectangle< float > &clipRect)=0
 Sets the clip rectangle for the stream.
virtual Rectangle< float > getSourceClipRect () const =0
 Returns the clip rectangle for the stream.
virtual void setPostProcessingEnable (bool enable)=0
 Sets whether or not post-processing is enabled for this stream.
virtual bool getPostProcessingEnable () const =0
 Returns the post-processing enable for the stream.
+ + +

+Static Public Member Functions

static const InterfaceIDid ()
+ + + + + +

+Protected Member Functions

 ~IStreamSettings ()
- Protected Member Functions inherited from Argus::Interface
 Interface ()
 ~Interface ()
+

Detailed Description

+

Interface to per-stream settings (provided by IRequest::getStreamSettings()).

+ +

Definition at line 549 of file Settings.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::IStreamSettings::~IStreamSettings ()
+
+inlineprotected
+
+ +

Definition at line 586 of file Settings.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool Argus::IStreamSettings::getPostProcessingEnable () const
+
+pure virtual
+
+ +

Returns the post-processing enable for the stream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual Rectangle<float> Argus::IStreamSettings::getSourceClipRect () const
+
+pure virtual
+
+ +

Returns the clip rectangle for the stream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
static const InterfaceID& Argus::IStreamSettings::id ()
+
+inlinestatic
+
+ +

Definition at line 552 of file Settings.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void Argus::IStreamSettings::setPostProcessingEnable (bool enable)
+
+pure virtual
+
+ +

Sets whether or not post-processing is enabled for this stream.

+

Post-processing features are controlled on a per-Request basis and all streams share the same post-processing control values, but this enable allows certain streams to be excluded from all post-processing. The current controls defined to be a part of "post-processing" includes (but may not be limited to):

+
    +
  • Denoise Default value is true.
  • +
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual Status Argus::IStreamSettings::setSourceClipRect (const Rectangle< float > & clipRect)
+
+pure virtual
+
+ +

Sets the clip rectangle for the stream.

+

A clip rectangle is a normalized rectangle with valid coordinates contained in the [0.0,1.0] range.

+
Parameters:
+ + +
[in]clipRectThe clip rectangle.
+
+
+
Returns:
success/status of the call.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamSettings.png new file mode 100644 index 0000000..980b893 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1IStreamSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Interface-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Interface-members.html new file mode 100644 index 0000000..b965dcc --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Interface-members.html @@ -0,0 +1,109 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Interface Member List
+
+
+ +

This is the complete list of members for Argus::Interface, including all inherited members.

+ + + + +
Interface()Argus::Interfaceinlineprotected
NonCopyable()Argus::NonCopyableinlineprivate
~Interface()Argus::Interfaceinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Interface.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Interface.html new file mode 100644 index 0000000..a341b4b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Interface.html @@ -0,0 +1,242 @@ + + + + + +Libargus API: Argus::Interface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Interface Class Reference
+
+
+ +

The top-level interface class. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::Interface:
+
+
+ + +Argus::NonCopyable +Argus::Ext::IBayerAverageMap +Argus::Ext::IBayerAverageMapSettings +Argus::Ext::IBayerSharpnessMap +Argus::Ext::IBayerSharpnessMapSettings +Argus::Ext::IBlockingSessionCameraProvider +Argus::Ext::IDebugCaptureSession +Argus::Ext::IDeFogSettings +Argus::Ext::IDolWdrSensorMode +Argus::Ext::IFaceDetectCaps +Argus::Ext::IFaceDetectMetadata +Argus::Ext::IFaceDetectResult +Argus::Ext::IFaceDetectSettings +Argus::Ext::IInternalFrameCount +Argus::Ext::INonLinearHistogram +Argus::Ext::IPwlWdrSensorMode +Argus::Ext::ISensorEepromData +Argus::Ext::ISensorOtpData +Argus::Ext::ISensorPrivateMetadata +Argus::Ext::ISensorPrivateMetadataCaps +Argus::Ext::ISensorPrivateMetadataClientBufferRequest +Argus::Ext::ISensorPrivateMetadataRequest +Argus::Ext::ISensorTimestampTsc +Argus::Ext::ISyncSensorCalibrationData +Argus::IAutoControlSettings +Argus::IBayerHistogram +Argus::IBuffer +Argus::IBufferOutputStream +Argus::IBufferOutputStreamSettings +Argus::ICameraProperties +Argus::ICameraProvider +Argus::ICaptureMetadata +Argus::ICaptureSession +Argus::IDenoiseMetadata +Argus::IDenoiseSettings +Argus::IEdgeEnhanceMetadata +Argus::IEdgeEnhanceSettings +Argus::IEGLImageBuffer +Argus::IEGLImageBufferSettings +Argus::IEGLOutputStream +Argus::IEGLOutputStreamSettings +Argus::IEGLSync +Argus::IEvent +Argus::IEventCaptureComplete +Argus::IEventError +Argus::IEventProvider +Argus::IEventQueue +Argus::IOutputStreamSettings +Argus::IRequest +Argus::IRGBHistogram +Argus::ISensorMode +Argus::ISourceSettings +Argus::IStreamCaptureMetadata +Argus::IStreamSettings + +
+ +

List of all members.

+ + + + +

+Protected Member Functions

 Interface ()
 ~Interface ()
+ +

+Additional Inherited Members

+

Detailed Description

+

The top-level interface class.

+

By convention, every Interface subclass exposes a public static method called id(), which returns the unique InterfaceID for that interface. This is required for the interface_cast<> template to work with that interface.

+ +

Definition at line 327 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Interface::Interface ()
+
+inlineprotected
+
+ +

Definition at line 330 of file Types.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Argus::Interface::~Interface ()
+
+inlineprotected
+
+ +

Definition at line 331 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Interface.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Interface.png new file mode 100644 index 0000000..49994ef Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Interface.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceID-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceID-members.html new file mode 100644 index 0000000..9b5b878 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceID-members.html @@ -0,0 +1,121 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::InterfaceID Member List
+
+
+ +

This is the complete list of members for Argus::InterfaceID, including all inherited members.

+ + + + + + + + + + + + + + + + +
clock_seqArgus::UUID
getName() const Argus::NamedUUIDinline
InterfaceID(uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)Argus::InterfaceIDinline
InterfaceID()Argus::InterfaceIDinline
NamedUUID(uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)Argus::NamedUUIDinline
NamedUUID(const NamedUUID &copied)Argus::NamedUUIDinline
nodeArgus::UUID
operator!=(const NamedUUID &compared) const Argus::NamedUUIDinline
operator<(const UUID &r) const Argus::UUIDinline
operator=(const NamedUUID &copied)Argus::NamedUUIDinline
operator==(const NamedUUID &compared) const Argus::NamedUUIDinline
Argus::UUID::operator==(const UUID &r) const Argus::UUIDinline
time_hi_and_versionArgus::UUID
time_lowArgus::UUID
time_midArgus::UUID
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceID.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceID.html new file mode 100644 index 0000000..2313539 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceID.html @@ -0,0 +1,261 @@ + + + + + +Libargus API: Argus::InterfaceID Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::InterfaceID Class Reference
+
+
+ +

A unique identifier for a libargus Interface. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::InterfaceID:
+
+
+ + +Argus::NamedUUID +Argus::UUID + +
+ +

List of all members.

+ + + + + + + + + + + + + + +

+Public Member Functions

 InterfaceID (uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)
 InterfaceID ()
- Public Member Functions inherited from Argus::NamedUUID
 NamedUUID (uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)
 NamedUUID (const NamedUUID &copied)
NamedUUIDoperator= (const NamedUUID &copied)
bool operator== (const NamedUUID &compared) const
bool operator!= (const NamedUUID &compared) const
const char * getName () const
- Public Member Functions inherited from Argus::UUID
bool operator== (const UUID &r) const
bool operator< (const UUID &r) const
+

Detailed Description

+

A unique identifier for a libargus Interface.

+ +

Definition at line 337 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::InterfaceID::InterfaceID (uint32_t time_low_,
uint16_t time_mid_,
uint16_t time_hi_and_version_,
uint16_t clock_seq_,
uint8_t c0,
uint8_t c1,
uint8_t c2,
uint8_t c3,
uint8_t c4,
uint8_t c5,
const char * name 
)
+
+inline
+
+ +

Definition at line 340 of file Types.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Argus::InterfaceID::InterfaceID ()
+
+inline
+
+ +

Definition at line 350 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceID.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceID.png new file mode 100644 index 0000000..ffb5bf2 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceID.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceProvider-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceProvider-members.html new file mode 100644 index 0000000..a77182d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceProvider-members.html @@ -0,0 +1,109 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::InterfaceProvider Member List
+
+
+ +

This is the complete list of members for Argus::InterfaceProvider, including all inherited members.

+ + + + +
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
NonCopyable()Argus::NonCopyableinlineprivate
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceProvider.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceProvider.html new file mode 100644 index 0000000..70181c1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceProvider.html @@ -0,0 +1,209 @@ + + + + + +Libargus API: Argus::InterfaceProvider Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::InterfaceProvider Class Reference
+
+
+ +

The base interface for a class that provides libargus Interfaces. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::InterfaceProvider:
+
+
+ + +Argus::NonCopyable +Argus::Buffer +Argus::BufferSettings +Argus::CameraDevice +Argus::CameraProvider +Argus::CaptureMetadata +Argus::CaptureMetadataContainer +Argus::CaptureSession +Argus::Event +Argus::EventQueue +Argus::OutputStream +Argus::OutputStreamSettings +Argus::Request +Argus::SensorMode + +
+ +

List of all members.

+ + + + +

+Public Member Functions

virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
+ + +

+Protected Member Functions

 ~InterfaceProvider ()
+ +

+Additional Inherited Members

+

Detailed Description

+

The base interface for a class that provides libargus Interfaces.

+ +

Definition at line 358 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::InterfaceProvider::~InterfaceProvider ()
+
+inlineprotected
+
+ +

Definition at line 370 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual Interface* Argus::InterfaceProvider::getInterface (const InterfaceIDinterfaceId)
+
+pure virtual
+
+ +

Acquire the interface specified by interfaceId.

+
Returns:
An instance of the requested interface, or NULL if that interface is not available.
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceProvider.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceProvider.png new file mode 100644 index 0000000..53df660 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1InterfaceProvider.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NamedUUID-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NamedUUID-members.html new file mode 100644 index 0000000..0d60332 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NamedUUID-members.html @@ -0,0 +1,121 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::NamedUUID Member List
+
+
+ +

This is the complete list of members for Argus::NamedUUID, including all inherited members.

+ + + + + + + + + + + + + + + + +
clock_seqArgus::UUID
getName() const Argus::NamedUUIDinline
m_nameArgus::NamedUUIDprivate
NamedUUID(uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)Argus::NamedUUIDinline
NamedUUID(const NamedUUID &copied)Argus::NamedUUIDinline
NamedUUID()Argus::NamedUUIDprivate
nodeArgus::UUID
operator!=(const NamedUUID &compared) const Argus::NamedUUIDinline
operator<(const UUID &r) const Argus::UUIDinline
operator=(const NamedUUID &copied)Argus::NamedUUIDinline
operator==(const NamedUUID &compared) const Argus::NamedUUIDinline
Argus::UUID::operator==(const UUID &r) const Argus::UUIDinline
time_hi_and_versionArgus::UUID
time_lowArgus::UUID
time_midArgus::UUID
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NamedUUID.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NamedUUID.html new file mode 100644 index 0000000..aa5f49e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NamedUUID.html @@ -0,0 +1,429 @@ + + + + + +Libargus API: Argus::NamedUUID Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::NamedUUID Class Reference
+
+
+ +

A universally unique identifier with a name (used for debugging purposes). + More...

+ +

#include <UUID.h>

+
+Inheritance diagram for Argus::NamedUUID:
+
+
+ + +Argus::UUID +Argus::EventType +Argus::InterfaceID + +
+ +

List of all members.

+ + + + + + + + + + + +

+Public Member Functions

 NamedUUID (uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)
 NamedUUID (const NamedUUID &copied)
NamedUUIDoperator= (const NamedUUID &copied)
bool operator== (const NamedUUID &compared) const
bool operator!= (const NamedUUID &compared) const
const char * getName () const
- Public Member Functions inherited from Argus::UUID
bool operator== (const UUID &r) const
bool operator< (const UUID &r) const
+ + +

+Private Member Functions

 NamedUUID ()
+ + +

+Private Attributes

char m_name [MAX_UUID_NAME_SIZE]
+ + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from Argus::UUID
uint32_t time_low
uint16_t time_mid
uint16_t time_hi_and_version
uint16_t clock_seq
uint8_t node [6]
+

Detailed Description

+

A universally unique identifier with a name (used for debugging purposes).

+ +

Definition at line 72 of file UUID.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::NamedUUID::NamedUUID (uint32_t time_low_,
uint16_t time_mid_,
uint16_t time_hi_and_version_,
uint16_t clock_seq_,
uint8_t c0,
uint8_t c1,
uint8_t c2,
uint8_t c3,
uint8_t c4,
uint8_t c5,
const char * name 
)
+
+inline
+
+ +

Definition at line 75 of file UUID.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Argus::NamedUUID::NamedUUID (const NamedUUIDcopied)
+
+inline
+
+ +

Definition at line 91 of file UUID.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Argus::NamedUUID::NamedUUID ()
+
+private
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
const char* Argus::NamedUUID::getName () const
+
+inline
+
+ +

Definition at line 115 of file UUID.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool Argus::NamedUUID::operator!= (const NamedUUIDcompared) const
+
+inline
+
+ +

Definition at line 110 of file UUID.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
NamedUUID& Argus::NamedUUID::operator= (const NamedUUIDcopied)
+
+inline
+
+ +

Definition at line 98 of file UUID.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool Argus::NamedUUID::operator== (const NamedUUIDcompared) const
+
+inline
+
+ +

Definition at line 105 of file UUID.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
char Argus::NamedUUID::m_name[MAX_UUID_NAME_SIZE]
+
+private
+
+ +

Definition at line 118 of file UUID.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NamedUUID.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NamedUUID.png new file mode 100644 index 0000000..7d60dcd Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NamedUUID.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NonCopyable-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NonCopyable-members.html new file mode 100644 index 0000000..e2ee7e7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NonCopyable-members.html @@ -0,0 +1,109 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::NonCopyable Member List
+
+
+ +

This is the complete list of members for Argus::NonCopyable, including all inherited members.

+ + + + +
NonCopyable()Argus::NonCopyableinlineprotected
NonCopyable(NonCopyable &other)Argus::NonCopyableprivate
operator=(NonCopyable &other)Argus::NonCopyableprivate
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NonCopyable.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NonCopyable.html new file mode 100644 index 0000000..5feb1e7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NonCopyable.html @@ -0,0 +1,282 @@ + + + + + +Libargus API: Argus::NonCopyable Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::NonCopyable Class Reference
+
+
+ +

Utility class for libargus interfaces. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::NonCopyable:
+
+
+ + +Argus::Interface +Argus::InterfaceProvider +Argus::UniqueObj< T > +Argus::Ext::IBayerAverageMap +Argus::Ext::IBayerAverageMapSettings +Argus::Ext::IBayerSharpnessMap +Argus::Ext::IBayerSharpnessMapSettings +Argus::Ext::IBlockingSessionCameraProvider +Argus::Ext::IDebugCaptureSession +Argus::Ext::IDeFogSettings +Argus::Ext::IDolWdrSensorMode +Argus::Ext::IFaceDetectCaps +Argus::Ext::IFaceDetectMetadata +Argus::Ext::IFaceDetectResult +Argus::Ext::IFaceDetectSettings +Argus::Ext::IInternalFrameCount +Argus::Ext::INonLinearHistogram +Argus::Ext::IPwlWdrSensorMode +Argus::Ext::ISensorEepromData +Argus::Ext::ISensorOtpData +Argus::Ext::ISensorPrivateMetadata +Argus::Ext::ISensorPrivateMetadataCaps +Argus::Ext::ISensorPrivateMetadataClientBufferRequest +Argus::Ext::ISensorPrivateMetadataRequest +Argus::Ext::ISensorTimestampTsc +Argus::Ext::ISyncSensorCalibrationData +Argus::IAutoControlSettings +Argus::IBayerHistogram +Argus::IBuffer +Argus::IBufferOutputStream +Argus::IBufferOutputStreamSettings +Argus::ICameraProperties +Argus::ICameraProvider +Argus::ICaptureMetadata +Argus::ICaptureSession +Argus::IDenoiseMetadata +Argus::IDenoiseSettings +Argus::IEdgeEnhanceMetadata +Argus::IEdgeEnhanceSettings +Argus::IEGLImageBuffer +Argus::IEGLImageBufferSettings +Argus::IEGLOutputStream +Argus::IEGLOutputStreamSettings +Argus::IEGLSync +Argus::IEvent +Argus::IEventCaptureComplete +Argus::IEventError +Argus::IEventProvider +Argus::IEventQueue +Argus::IOutputStreamSettings +Argus::IRequest +Argus::IRGBHistogram +Argus::ISensorMode +Argus::ISourceSettings +Argus::IStreamCaptureMetadata +Argus::IStreamSettings +Argus::Buffer +Argus::BufferSettings +Argus::CameraDevice +Argus::CameraProvider +Argus::CaptureMetadata +Argus::CaptureMetadataContainer +Argus::CaptureSession +Argus::Event +Argus::EventQueue +Argus::OutputStream +Argus::OutputStreamSettings +Argus::Request +Argus::SensorMode + +
+ +

List of all members.

+ + + +

+Protected Member Functions

 NonCopyable ()
+ + + +

+Private Member Functions

 NonCopyable (NonCopyable &other)
NonCopyableoperator= (NonCopyable &other)
+

Detailed Description

+

Utility class for libargus interfaces.

+ +

Definition at line 310 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::NonCopyable::NonCopyable ()
+
+inlineprotected
+
+ +

Definition at line 313 of file Types.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Argus::NonCopyable::NonCopyable (NonCopyableother)
+
+private
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
NonCopyable& Argus::NonCopyable::operator= (NonCopyableother)
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NonCopyable.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NonCopyable.png new file mode 100644 index 0000000..d4e7b6f Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1NonCopyable.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStream-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStream-members.html new file mode 100644 index 0000000..4c3de53 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStream-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::OutputStream Member List
+
+
+ +

This is the complete list of members for Argus::OutputStream, including all inherited members.

+ + + + + + +
destroy()=0Argus::Destructablepure virtual
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~Destructable()Argus::Destructableinlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
~OutputStream()Argus::OutputStreaminlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStream.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStream.html new file mode 100644 index 0000000..ff54b80 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStream.html @@ -0,0 +1,170 @@ + + + + + +Libargus API: Argus::OutputStream Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::OutputStream Class Reference
+
+
+ +

#include <Stream.h>

+
+Inheritance diagram for Argus::OutputStream:
+
+
+ + +Argus::InterfaceProvider +Argus::Destructable +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + +

+Protected Member Functions

 ~OutputStream ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
- Protected Member Functions inherited from Argus::Destructable
 ~Destructable ()
+ + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
- Public Member Functions inherited from Argus::Destructable
virtual void destroy ()=0
 Destroy this object.
+

Detailed Description

+
+

Definition at line 59 of file Stream.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::OutputStream::~OutputStream ()
+
+inlineprotected
+
+ +

Definition at line 62 of file Stream.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStream.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStream.png new file mode 100644 index 0000000..83076ef Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStream.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStreamSettings-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStreamSettings-members.html new file mode 100644 index 0000000..4e719d2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStreamSettings-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::OutputStreamSettings Member List
+
+
+ +

This is the complete list of members for Argus::OutputStreamSettings, including all inherited members.

+ + + + + + +
destroy()=0Argus::Destructablepure virtual
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~Destructable()Argus::Destructableinlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
~OutputStreamSettings()Argus::OutputStreamSettingsinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStreamSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStreamSettings.html new file mode 100644 index 0000000..c0f4635 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStreamSettings.html @@ -0,0 +1,170 @@ + + + + + +Libargus API: Argus::OutputStreamSettings Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::OutputStreamSettings Class Reference
+
+
+ +

#include <Stream.h>

+
+Inheritance diagram for Argus::OutputStreamSettings:
+
+
+ + +Argus::InterfaceProvider +Argus::Destructable +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + +

+Protected Member Functions

 ~OutputStreamSettings ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
- Protected Member Functions inherited from Argus::Destructable
 ~Destructable ()
+ + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
- Public Member Functions inherited from Argus::Destructable
virtual void destroy ()=0
 Destroy this object.
+

Detailed Description

+
+

Definition at line 77 of file Stream.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::OutputStreamSettings::~OutputStreamSettings ()
+
+inlineprotected
+
+ +

Definition at line 80 of file Stream.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStreamSettings.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStreamSettings.png new file mode 100644 index 0000000..be40bed Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1OutputStreamSettings.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point2D-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point2D-members.html new file mode 100644 index 0000000..4448df5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point2D-members.html @@ -0,0 +1,130 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Point2D< T > Member List
+
+
+ +

This is the complete list of members for Argus::Point2D< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
m_dataArgus::Tuple< COORDINATE_2D_COUNT, T >protected
operator!=(const Tuple< N, T > &rhs) constArgus::Tuple< COORDINATE_2D_COUNT, T >inline
operator*(const T &rhs) constArgus::Tuple< COORDINATE_2D_COUNT, T >inline
operator*=(const T &rhs)Argus::Tuple< COORDINATE_2D_COUNT, T >inline
operator+(const Tuple< N, T > &rhs) constArgus::Tuple< COORDINATE_2D_COUNT, T >inline
operator+=(const Tuple< N, T > &rhs)Argus::Tuple< COORDINATE_2D_COUNT, T >inline
operator-(const Tuple< N, T > &rhs) constArgus::Tuple< COORDINATE_2D_COUNT, T >inline
operator-=(const Tuple< N, T > &rhs)Argus::Tuple< COORDINATE_2D_COUNT, T >inline
operator/(const T &rhs) constArgus::Tuple< COORDINATE_2D_COUNT, T >inline
operator/=(const T &rhs)Argus::Tuple< COORDINATE_2D_COUNT, T >inline
operator==(const Tuple< N, T > &rhs) constArgus::Tuple< COORDINATE_2D_COUNT, T >inline
operator[](unsigned int i)Argus::Tuple< COORDINATE_2D_COUNT, T >inline
operator[](unsigned int i) constArgus::Tuple< COORDINATE_2D_COUNT, T >inline
Point2D()Argus::Point2D< T >inline
Point2D(const Tuple< COORDINATE_2D_COUNT, T > &other)Argus::Point2D< T >inline
Point2D(T init)Argus::Point2D< T >inline
Point2D(T _x, T _y)Argus::Point2D< T >inline
Tuple()Argus::Tuple< COORDINATE_2D_COUNT, T >inline
Tuple(T init)Argus::Tuple< COORDINATE_2D_COUNT, T >inline
tupleSize()Argus::Tuple< COORDINATE_2D_COUNT, T >inlinestatic
x()Argus::Point2D< T >inline
x() const Argus::Point2D< T >inline
y()Argus::Point2D< T >inline
y() const Argus::Point2D< T >inline
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point2D.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point2D.html new file mode 100644 index 0000000..2d0f79b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point2D.html @@ -0,0 +1,409 @@ + + + + + +Libargus API: Argus::Point2D< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Point2D< T > Class Template Reference
+
+
+ +

Point2D template class. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::Point2D< T >:
+
+
+ + +Argus::Tuple< COORDINATE_2D_COUNT, T > + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Point2D ()
 Point2D (const Tuple< COORDINATE_2D_COUNT, T > &other)
 Point2D (T init)
 Point2D (T _x, T _y)
T & x ()
const T & x () const
T & y ()
const T & y () const
- Public Member Functions inherited from Argus::Tuple< COORDINATE_2D_COUNT, T >
 Tuple ()
 Tuple (T init)
 Initialize every element of the tuple to a single value.
bool operator== (const Tuple< N, T > &rhs) const
 Returns true when every element in the two tuples are identical.
bool operator!= (const Tuple< N, T > &rhs) const
 Returns true if there are any differences between the two tuples.
Tuple< N, T > & operator+= (const Tuple< N, T > &rhs)
 Adds every element of another tuple to the elements of this tuple.
Tuple< N, T > & operator-= (const Tuple< N, T > &rhs)
 Subtracts every element of another tuple from the elements of this tuple.
Tuple< N, T > & operator*= (const T &rhs)
 Multiplies every element in the tuple by a single value.
Tuple< N, T > & operator/= (const T &rhs)
 Divides every element in the tuple by a single value.
const Tuple< N, T > operator+ (const Tuple< N, T > &rhs) const
 Returns the result of adding another tuple to this tuple.
const Tuple< N, T > operator- (const Tuple< N, T > &rhs) const
 Returns the result of subtracting another tuple from this tuple.
const Tuple< N, T > operator* (const T &rhs) const
 Returns the result of multiplying this tuple by a single value.
const Tuple< N, T > operator/ (const T &rhs) const
 Returns the result of dividing this tuple by a single value.
T & operator[] (unsigned int i)
const T & operator[] (unsigned int i) const
+ + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Argus::Tuple< COORDINATE_2D_COUNT, T >
static unsigned int tupleSize ()
 Returns the number of elements in the tuple.
- Protected Attributes inherited from Argus::Tuple< COORDINATE_2D_COUNT, T >
m_data [N]
+

Detailed Description

+

template<typename T>
+class Argus::Point2D< T >

+ +

Point2D template class.

+

This is a Tuple specialization containing 2 elements corresponding to the x and y coordinates a 2D point. Values can be accessed using the named methods or subscript indexing using the Argus::Coordinate enum.

+ +

Definition at line 644 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
Argus::Point2D< T >::Point2D ()
+
+inline
+
+ +

Definition at line 647 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::Point2D< T >::Point2D (const Tuple< COORDINATE_2D_COUNT, T > & other)
+
+inline
+
+ +

Definition at line 648 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::Point2D< T >::Point2D (init)
+
+inline
+
+ +

Definition at line 650 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Argus::Point2D< T >::Point2D (_x,
_y 
)
+
+inline
+
+ +

Definition at line 655 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::Point2D< T >::x ()
+
+inline
+
+ +

Definition at line 661 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::Point2D< T >::x () const
+
+inline
+
+ +

Definition at line 662 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::Point2D< T >::y ()
+
+inline
+
+ +

Definition at line 663 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::Point2D< T >::y () const
+
+inline
+
+ +

Definition at line 664 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point2D.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point2D.png new file mode 100644 index 0000000..51b2b1b Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point2D.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point3D-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point3D-members.html new file mode 100644 index 0000000..928b349 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point3D-members.html @@ -0,0 +1,132 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Point3D< T > Member List
+
+
+ +

This is the complete list of members for Argus::Point3D< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
m_dataArgus::Tuple< COORDINATE_3D_COUNT, T >protected
operator!=(const Tuple< N, T > &rhs) constArgus::Tuple< COORDINATE_3D_COUNT, T >inline
operator*(const T &rhs) constArgus::Tuple< COORDINATE_3D_COUNT, T >inline
operator*=(const T &rhs)Argus::Tuple< COORDINATE_3D_COUNT, T >inline
operator+(const Tuple< N, T > &rhs) constArgus::Tuple< COORDINATE_3D_COUNT, T >inline
operator+=(const Tuple< N, T > &rhs)Argus::Tuple< COORDINATE_3D_COUNT, T >inline
operator-(const Tuple< N, T > &rhs) constArgus::Tuple< COORDINATE_3D_COUNT, T >inline
operator-=(const Tuple< N, T > &rhs)Argus::Tuple< COORDINATE_3D_COUNT, T >inline
operator/(const T &rhs) constArgus::Tuple< COORDINATE_3D_COUNT, T >inline
operator/=(const T &rhs)Argus::Tuple< COORDINATE_3D_COUNT, T >inline
operator==(const Tuple< N, T > &rhs) constArgus::Tuple< COORDINATE_3D_COUNT, T >inline
operator[](unsigned int i)Argus::Tuple< COORDINATE_3D_COUNT, T >inline
operator[](unsigned int i) constArgus::Tuple< COORDINATE_3D_COUNT, T >inline
Point3D()Argus::Point3D< T >inline
Point3D(const Tuple< COORDINATE_3D_COUNT, T > &other)Argus::Point3D< T >inline
Point3D(T init)Argus::Point3D< T >inline
Point3D(T _x, T _y, T _z)Argus::Point3D< T >inline
Tuple()Argus::Tuple< COORDINATE_3D_COUNT, T >inline
Tuple(T init)Argus::Tuple< COORDINATE_3D_COUNT, T >inline
tupleSize()Argus::Tuple< COORDINATE_3D_COUNT, T >inlinestatic
x()Argus::Point3D< T >inline
x() const Argus::Point3D< T >inline
y()Argus::Point3D< T >inline
y() const Argus::Point3D< T >inline
z()Argus::Point3D< T >inline
z() const Argus::Point3D< T >inline
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point3D.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point3D.html new file mode 100644 index 0000000..2880b5f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point3D.html @@ -0,0 +1,471 @@ + + + + + +Libargus API: Argus::Point3D< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Point3D< T > Class Template Reference
+
+
+ +

Point3D template class. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::Point3D< T >:
+
+
+ + +Argus::Tuple< COORDINATE_3D_COUNT, T > + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Point3D ()
 Point3D (const Tuple< COORDINATE_3D_COUNT, T > &other)
 Point3D (T init)
 Point3D (T _x, T _y, T _z)
T & x ()
const T & x () const
T & y ()
const T & y () const
T & z ()
const T & z () const
- Public Member Functions inherited from Argus::Tuple< COORDINATE_3D_COUNT, T >
 Tuple ()
 Tuple (T init)
 Initialize every element of the tuple to a single value.
bool operator== (const Tuple< N, T > &rhs) const
 Returns true when every element in the two tuples are identical.
bool operator!= (const Tuple< N, T > &rhs) const
 Returns true if there are any differences between the two tuples.
Tuple< N, T > & operator+= (const Tuple< N, T > &rhs)
 Adds every element of another tuple to the elements of this tuple.
Tuple< N, T > & operator-= (const Tuple< N, T > &rhs)
 Subtracts every element of another tuple from the elements of this tuple.
Tuple< N, T > & operator*= (const T &rhs)
 Multiplies every element in the tuple by a single value.
Tuple< N, T > & operator/= (const T &rhs)
 Divides every element in the tuple by a single value.
const Tuple< N, T > operator+ (const Tuple< N, T > &rhs) const
 Returns the result of adding another tuple to this tuple.
const Tuple< N, T > operator- (const Tuple< N, T > &rhs) const
 Returns the result of subtracting another tuple from this tuple.
const Tuple< N, T > operator* (const T &rhs) const
 Returns the result of multiplying this tuple by a single value.
const Tuple< N, T > operator/ (const T &rhs) const
 Returns the result of dividing this tuple by a single value.
T & operator[] (unsigned int i)
const T & operator[] (unsigned int i) const
+ + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Argus::Tuple< COORDINATE_3D_COUNT, T >
static unsigned int tupleSize ()
 Returns the number of elements in the tuple.
- Protected Attributes inherited from Argus::Tuple< COORDINATE_3D_COUNT, T >
m_data [N]
+

Detailed Description

+

template<typename T>
+class Argus::Point3D< T >

+ +

Point3D template class.

+

This is a Tuple specialization containing 3 elements corresponding to the x, y and z coordinates of a 3D point. Values can be accessed using the named methods or subscript indexing using the Argus::Coordinate enum.

+ +

Definition at line 674 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
Argus::Point3D< T >::Point3D ()
+
+inline
+
+ +

Definition at line 677 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Argus::Point3D< T >::Point3D (const Tuple< COORDINATE_3D_COUNT, T > & other)
+
+inline
+
+ +

Definition at line 678 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Argus::Point3D< T >::Point3D (init)
+
+inline
+
+ +

Definition at line 680 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Point3D< T >::Point3D (_x,
_y,
_z 
)
+
+inline
+
+ +

Definition at line 685 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
T& Argus::Point3D< T >::x ()
+
+inline
+
+ +

Definition at line 692 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
const T& Argus::Point3D< T >::x () const
+
+inline
+
+ +

Definition at line 693 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
T& Argus::Point3D< T >::y ()
+
+inline
+
+ +

Definition at line 694 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
const T& Argus::Point3D< T >::y () const
+
+inline
+
+ +

Definition at line 695 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
T& Argus::Point3D< T >::z ()
+
+inline
+
+ +

Definition at line 696 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
const T& Argus::Point3D< T >::z () const
+
+inline
+
+ +

Definition at line 697 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point3D.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point3D.png new file mode 100644 index 0000000..7b0429f Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Point3D.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1RGBTuple-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1RGBTuple-members.html new file mode 100644 index 0000000..c6a88cb --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1RGBTuple-members.html @@ -0,0 +1,132 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::RGBTuple< T > Member List
+
+
+ +

This is the complete list of members for Argus::RGBTuple< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
b()Argus::RGBTuple< T >inline
b() const Argus::RGBTuple< T >inline
g()Argus::RGBTuple< T >inline
g() const Argus::RGBTuple< T >inline
m_dataArgus::Tuple< RGB_CHANNEL_COUNT, T >protected
operator!=(const Tuple< N, T > &rhs) constArgus::Tuple< RGB_CHANNEL_COUNT, T >inline
operator*(const T &rhs) constArgus::Tuple< RGB_CHANNEL_COUNT, T >inline
operator*=(const T &rhs)Argus::Tuple< RGB_CHANNEL_COUNT, T >inline
operator+(const Tuple< N, T > &rhs) constArgus::Tuple< RGB_CHANNEL_COUNT, T >inline
operator+=(const Tuple< N, T > &rhs)Argus::Tuple< RGB_CHANNEL_COUNT, T >inline
operator-(const Tuple< N, T > &rhs) constArgus::Tuple< RGB_CHANNEL_COUNT, T >inline
operator-=(const Tuple< N, T > &rhs)Argus::Tuple< RGB_CHANNEL_COUNT, T >inline
operator/(const T &rhs) constArgus::Tuple< RGB_CHANNEL_COUNT, T >inline
operator/=(const T &rhs)Argus::Tuple< RGB_CHANNEL_COUNT, T >inline
operator==(const Tuple< N, T > &rhs) constArgus::Tuple< RGB_CHANNEL_COUNT, T >inline
operator[](unsigned int i)Argus::Tuple< RGB_CHANNEL_COUNT, T >inline
operator[](unsigned int i) constArgus::Tuple< RGB_CHANNEL_COUNT, T >inline
r()Argus::RGBTuple< T >inline
r() const Argus::RGBTuple< T >inline
RGBTuple()Argus::RGBTuple< T >inline
RGBTuple(const Tuple< RGB_CHANNEL_COUNT, T > &other)Argus::RGBTuple< T >inline
RGBTuple(T init)Argus::RGBTuple< T >inline
RGBTuple(T _r, T _g, T _b)Argus::RGBTuple< T >inline
Tuple()Argus::Tuple< RGB_CHANNEL_COUNT, T >inline
Tuple(T init)Argus::Tuple< RGB_CHANNEL_COUNT, T >inline
tupleSize()Argus::Tuple< RGB_CHANNEL_COUNT, T >inlinestatic
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1RGBTuple.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1RGBTuple.html new file mode 100644 index 0000000..b7bf654 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1RGBTuple.html @@ -0,0 +1,471 @@ + + + + + +Libargus API: Argus::RGBTuple< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::RGBTuple< T > Class Template Reference
+
+
+ +

RGBTuple template class. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::RGBTuple< T >:
+
+
+ + +Argus::Tuple< RGB_CHANNEL_COUNT, T > + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RGBTuple ()
 RGBTuple (const Tuple< RGB_CHANNEL_COUNT, T > &other)
 RGBTuple (T init)
 RGBTuple (T _r, T _g, T _b)
T & r ()
const T & r () const
T & g ()
const T & g () const
T & b ()
const T & b () const
- Public Member Functions inherited from Argus::Tuple< RGB_CHANNEL_COUNT, T >
 Tuple ()
 Tuple (T init)
 Initialize every element of the tuple to a single value.
bool operator== (const Tuple< N, T > &rhs) const
 Returns true when every element in the two tuples are identical.
bool operator!= (const Tuple< N, T > &rhs) const
 Returns true if there are any differences between the two tuples.
Tuple< N, T > & operator+= (const Tuple< N, T > &rhs)
 Adds every element of another tuple to the elements of this tuple.
Tuple< N, T > & operator-= (const Tuple< N, T > &rhs)
 Subtracts every element of another tuple from the elements of this tuple.
Tuple< N, T > & operator*= (const T &rhs)
 Multiplies every element in the tuple by a single value.
Tuple< N, T > & operator/= (const T &rhs)
 Divides every element in the tuple by a single value.
const Tuple< N, T > operator+ (const Tuple< N, T > &rhs) const
 Returns the result of adding another tuple to this tuple.
const Tuple< N, T > operator- (const Tuple< N, T > &rhs) const
 Returns the result of subtracting another tuple from this tuple.
const Tuple< N, T > operator* (const T &rhs) const
 Returns the result of multiplying this tuple by a single value.
const Tuple< N, T > operator/ (const T &rhs) const
 Returns the result of dividing this tuple by a single value.
T & operator[] (unsigned int i)
const T & operator[] (unsigned int i) const
+ + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Argus::Tuple< RGB_CHANNEL_COUNT, T >
static unsigned int tupleSize ()
 Returns the number of elements in the tuple.
- Protected Attributes inherited from Argus::Tuple< RGB_CHANNEL_COUNT, T >
m_data [N]
+

Detailed Description

+

template<typename T>
+class Argus::RGBTuple< T >

+ +

RGBTuple template class.

+

This is a Tuple specialization containing 3 elements corresponding to the RGB color channels: R, G, and B. Values can be accessed using the named methods or subscript indexing using the Argus::RGBChannel enum.

+ +

Definition at line 612 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
Argus::RGBTuple< T >::RGBTuple ()
+
+inline
+
+ +

Definition at line 615 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Argus::RGBTuple< T >::RGBTuple (const Tuple< RGB_CHANNEL_COUNT, T > & other)
+
+inline
+
+ +

Definition at line 616 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
Argus::RGBTuple< T >::RGBTuple (init)
+
+inline
+
+ +

Definition at line 618 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Argus::RGBTuple< T >::RGBTuple (_r,
_g,
_b 
)
+
+inline
+
+ +

Definition at line 623 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
T& Argus::RGBTuple< T >::b ()
+
+inline
+
+ +

Definition at line 634 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
const T& Argus::RGBTuple< T >::b () const
+
+inline
+
+ +

Definition at line 635 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
T& Argus::RGBTuple< T >::g ()
+
+inline
+
+ +

Definition at line 632 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
const T& Argus::RGBTuple< T >::g () const
+
+inline
+
+ +

Definition at line 633 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
T& Argus::RGBTuple< T >::r ()
+
+inline
+
+ +

Definition at line 630 of file Types.h.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
const T& Argus::RGBTuple< T >::r () const
+
+inline
+
+ +

Definition at line 631 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1RGBTuple.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1RGBTuple.png new file mode 100644 index 0000000..dab0eb6 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1RGBTuple.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Range-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Range-members.html new file mode 100644 index 0000000..af0d06e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Range-members.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Range< T > Member List
+
+
+ +

This is the complete list of members for Argus::Range< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
empty() const Argus::Range< T >inline
m_dataArgus::Tuple< 2, T >protected
max()Argus::Range< T >inline
max() const Argus::Range< T >inline
min()Argus::Range< T >inline
min() const Argus::Range< T >inline
operator!=(const Tuple< N, T > &rhs) constArgus::Tuple< 2, T >inline
operator*(const T &rhs) constArgus::Tuple< 2, T >inline
operator*=(const T &rhs)Argus::Tuple< 2, T >inline
operator+(const Tuple< N, T > &rhs) constArgus::Tuple< 2, T >inline
operator+=(const Tuple< N, T > &rhs)Argus::Tuple< 2, T >inline
operator-(const Tuple< N, T > &rhs) constArgus::Tuple< 2, T >inline
operator-=(const Tuple< N, T > &rhs)Argus::Tuple< 2, T >inline
operator/(const T &rhs) constArgus::Tuple< 2, T >inline
operator/=(const T &rhs)Argus::Tuple< 2, T >inline
operator==(const Tuple< N, T > &rhs) constArgus::Tuple< 2, T >inline
operator[](unsigned int i)Argus::Tuple< 2, T >inline
operator[](unsigned int i) constArgus::Tuple< 2, T >inline
Range()Argus::Range< T >inline
Range(const Tuple< 2, T > &other)Argus::Range< T >inline
Range(T init)Argus::Range< T >inline
Range(T _min, T _max)Argus::Range< T >inline
Tuple()Argus::Tuple< 2, T >inline
Tuple(T init)Argus::Tuple< 2, T >inline
tupleSize()Argus::Tuple< 2, T >inlinestatic
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Range.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Range.html new file mode 100644 index 0000000..863fb6b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Range.html @@ -0,0 +1,437 @@ + + + + + +Libargus API: Argus::Range< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Range< T > Class Template Reference
+
+
+ +

Range template class. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::Range< T >:
+
+
+ + +Argus::Tuple< 2, T > + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Range ()
 Range (const Tuple< 2, T > &other)
 Range (T init)
 Range (T _min, T _max)
T & min ()
const T & min () const
T & max ()
const T & max () const
bool empty () const
- Public Member Functions inherited from Argus::Tuple< 2, T >
 Tuple ()
 Tuple (T init)
 Initialize every element of the tuple to a single value.
bool operator== (const Tuple< N, T > &rhs) const
 Returns true when every element in the two tuples are identical.
bool operator!= (const Tuple< N, T > &rhs) const
 Returns true if there are any differences between the two tuples.
Tuple< N, T > & operator+= (const Tuple< N, T > &rhs)
 Adds every element of another tuple to the elements of this tuple.
Tuple< N, T > & operator-= (const Tuple< N, T > &rhs)
 Subtracts every element of another tuple from the elements of this tuple.
Tuple< N, T > & operator*= (const T &rhs)
 Multiplies every element in the tuple by a single value.
Tuple< N, T > & operator/= (const T &rhs)
 Divides every element in the tuple by a single value.
const Tuple< N, T > operator+ (const Tuple< N, T > &rhs) const
 Returns the result of adding another tuple to this tuple.
const Tuple< N, T > operator- (const Tuple< N, T > &rhs) const
 Returns the result of subtracting another tuple from this tuple.
const Tuple< N, T > operator* (const T &rhs) const
 Returns the result of multiplying this tuple by a single value.
const Tuple< N, T > operator/ (const T &rhs) const
 Returns the result of dividing this tuple by a single value.
T & operator[] (unsigned int i)
const T & operator[] (unsigned int i) const
+ + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Argus::Tuple< 2, T >
static unsigned int tupleSize ()
 Returns the number of elements in the tuple.
- Protected Attributes inherited from Argus::Tuple< 2, T >
m_data [N]
+

Detailed Description

+

template<typename T>
+class Argus::Range< T >

+ +

Range template class.

+

This is a Tuple specialization containing 2 elements corresponding to the min and max values of the range, in that order. Values can be accessed using the named methods.

+ +

Definition at line 780 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
Argus::Range< T >::Range ()
+
+inline
+
+ +

Definition at line 783 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::Range< T >::Range (const Tuple< 2, T > & other)
+
+inline
+
+ +

Definition at line 784 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::Range< T >::Range (init)
+
+inline
+
+ +

Definition at line 786 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Argus::Range< T >::Range (_min,
_max 
)
+
+inline
+
+ +

Definition at line 791 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
bool Argus::Range< T >::empty () const
+
+inline
+
+ +

Definition at line 802 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::Range< T >::max ()
+
+inline
+
+ +

Definition at line 799 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::Range< T >::max () const
+
+inline
+
+ +

Definition at line 800 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::Range< T >::min ()
+
+inline
+
+ +

Definition at line 797 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::Range< T >::min () const
+
+inline
+
+ +

Definition at line 798 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Range.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Range.png new file mode 100644 index 0000000..274e87b Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Range.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Rectangle-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Rectangle-members.html new file mode 100644 index 0000000..247226b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Rectangle-members.html @@ -0,0 +1,137 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Rectangle< T > Member List
+
+
+ +

This is the complete list of members for Argus::Rectangle< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
area() const Argus::Rectangle< T >inline
bottom()Argus::Rectangle< T >inline
bottom() const Argus::Rectangle< T >inline
height() const Argus::Rectangle< T >inline
left()Argus::Rectangle< T >inline
left() const Argus::Rectangle< T >inline
m_dataArgus::Tuple< 4, T >protected
operator!=(const Tuple< N, T > &rhs) constArgus::Tuple< 4, T >inline
operator*(const T &rhs) constArgus::Tuple< 4, T >inline
operator*=(const T &rhs)Argus::Tuple< 4, T >inline
operator+(const Tuple< N, T > &rhs) constArgus::Tuple< 4, T >inline
operator+=(const Tuple< N, T > &rhs)Argus::Tuple< 4, T >inline
operator-(const Tuple< N, T > &rhs) constArgus::Tuple< 4, T >inline
operator-=(const Tuple< N, T > &rhs)Argus::Tuple< 4, T >inline
operator/(const T &rhs) constArgus::Tuple< 4, T >inline
operator/=(const T &rhs)Argus::Tuple< 4, T >inline
operator==(const Tuple< N, T > &rhs) constArgus::Tuple< 4, T >inline
operator[](unsigned int i)Argus::Tuple< 4, T >inline
operator[](unsigned int i) constArgus::Tuple< 4, T >inline
Rectangle()Argus::Rectangle< T >inline
Rectangle(const Tuple< 4, T > &other)Argus::Rectangle< T >inline
Rectangle(T init)Argus::Rectangle< T >inline
Rectangle(T _left, T _top, T _right, T _bottom)Argus::Rectangle< T >inline
right()Argus::Rectangle< T >inline
right() const Argus::Rectangle< T >inline
top()Argus::Rectangle< T >inline
top() const Argus::Rectangle< T >inline
Tuple()Argus::Tuple< 4, T >inline
Tuple(T init)Argus::Tuple< 4, T >inline
tupleSize()Argus::Tuple< 4, T >inlinestatic
width() const Argus::Rectangle< T >inline
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Rectangle.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Rectangle.html new file mode 100644 index 0000000..de45d87 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Rectangle.html @@ -0,0 +1,626 @@ + + + + + +Libargus API: Argus::Rectangle< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Rectangle< T > Class Template Reference
+
+
+ +

Rectangle template class. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::Rectangle< T >:
+
+
+ + +Argus::Tuple< 4, T > + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Rectangle ()
 Rectangle (const Tuple< 4, T > &other)
 Rectangle (T init)
 Rectangle (T _left, T _top, T _right, T _bottom)
T & left ()
const T & left () const
T & top ()
const T & top () const
T & right ()
const T & right () const
T & bottom ()
const T & bottom () const
width () const
 Returns the width of the rectangle.
height () const
 Returns the height of the rectangle.
area () const
 Returns the area of the rectangle (width * height).
- Public Member Functions inherited from Argus::Tuple< 4, T >
 Tuple ()
 Tuple (T init)
 Initialize every element of the tuple to a single value.
bool operator== (const Tuple< N, T > &rhs) const
 Returns true when every element in the two tuples are identical.
bool operator!= (const Tuple< N, T > &rhs) const
 Returns true if there are any differences between the two tuples.
Tuple< N, T > & operator+= (const Tuple< N, T > &rhs)
 Adds every element of another tuple to the elements of this tuple.
Tuple< N, T > & operator-= (const Tuple< N, T > &rhs)
 Subtracts every element of another tuple from the elements of this tuple.
Tuple< N, T > & operator*= (const T &rhs)
 Multiplies every element in the tuple by a single value.
Tuple< N, T > & operator/= (const T &rhs)
 Divides every element in the tuple by a single value.
const Tuple< N, T > operator+ (const Tuple< N, T > &rhs) const
 Returns the result of adding another tuple to this tuple.
const Tuple< N, T > operator- (const Tuple< N, T > &rhs) const
 Returns the result of subtracting another tuple from this tuple.
const Tuple< N, T > operator* (const T &rhs) const
 Returns the result of multiplying this tuple by a single value.
const Tuple< N, T > operator/ (const T &rhs) const
 Returns the result of dividing this tuple by a single value.
T & operator[] (unsigned int i)
const T & operator[] (unsigned int i) const
+ + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Argus::Tuple< 4, T >
static unsigned int tupleSize ()
 Returns the number of elements in the tuple.
- Protected Attributes inherited from Argus::Tuple< 4, T >
m_data [N]
+

Detailed Description

+

template<typename T>
+class Argus::Rectangle< T >

+ +

Rectangle template class.

+

This is a Tuple specialization containing 4 elements corresponding to the positions of the left, top, right, and bottom edges of a rectangle, in that order. Values can be accessed using the named methods.

+ +

Definition at line 737 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
Argus::Rectangle< T >::Rectangle ()
+
+inline
+
+ +

Definition at line 740 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::Rectangle< T >::Rectangle (const Tuple< 4, T > & other)
+
+inline
+
+ +

Definition at line 741 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::Rectangle< T >::Rectangle (init)
+
+inline
+
+ +

Definition at line 743 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Rectangle< T >::Rectangle (_left,
_top,
_right,
_bottom 
)
+
+inline
+
+ +

Definition at line 748 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T Argus::Rectangle< T >::area () const
+
+inline
+
+ +

Returns the area of the rectangle (width * height).

+ +

Definition at line 772 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::Rectangle< T >::bottom ()
+
+inline
+
+ +

Definition at line 762 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::Rectangle< T >::bottom () const
+
+inline
+
+ +

Definition at line 763 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T Argus::Rectangle< T >::height () const
+
+inline
+
+ +

Returns the height of the rectangle.

+ +

Definition at line 769 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::Rectangle< T >::left ()
+
+inline
+
+ +

Definition at line 756 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::Rectangle< T >::left () const
+
+inline
+
+ +

Definition at line 757 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::Rectangle< T >::right ()
+
+inline
+
+ +

Definition at line 760 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::Rectangle< T >::right () const
+
+inline
+
+ +

Definition at line 761 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::Rectangle< T >::top ()
+
+inline
+
+ +

Definition at line 758 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::Rectangle< T >::top () const
+
+inline
+
+ +

Definition at line 759 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T Argus::Rectangle< T >::width () const
+
+inline
+
+ +

Returns the width of the rectangle.

+ +

Definition at line 766 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Rectangle.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Rectangle.png new file mode 100644 index 0000000..67a768c Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Rectangle.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Request-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Request-members.html new file mode 100644 index 0000000..90fb3d6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Request-members.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Request Member List
+
+
+ +

This is the complete list of members for Argus::Request, including all inherited members.

+ + + + + + +
destroy()=0Argus::Destructablepure virtual
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~Destructable()Argus::Destructableinlineprotected
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
~Request()Argus::Requestinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Request.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Request.html new file mode 100644 index 0000000..5f252fd --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Request.html @@ -0,0 +1,170 @@ + + + + + +Libargus API: Argus::Request Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Request Class Reference
+
+
+ +

#include <Request.h>

+
+Inheritance diagram for Argus::Request:
+
+
+ + +Argus::InterfaceProvider +Argus::Destructable +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + +

+Protected Member Functions

 ~Request ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
- Protected Member Functions inherited from Argus::Destructable
 ~Destructable ()
+ + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
- Public Member Functions inherited from Argus::Destructable
virtual void destroy ()=0
 Destroy this object.
+

Detailed Description

+
+

Definition at line 48 of file Request.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::Request::~Request ()
+
+inlineprotected
+
+ +

Definition at line 51 of file Request.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Request.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Request.png new file mode 100644 index 0000000..25a2eef Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Request.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1SensorMode-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1SensorMode-members.html new file mode 100644 index 0000000..c6c41f7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1SensorMode-members.html @@ -0,0 +1,109 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::SensorMode Member List
+
+
+ +

This is the complete list of members for Argus::SensorMode, including all inherited members.

+ + + + +
getInterface(const InterfaceID &interfaceId)=0Argus::InterfaceProviderpure virtual
~InterfaceProvider()Argus::InterfaceProviderinlineprotected
~SensorMode()Argus::SensorModeinlineprotected
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1SensorMode.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1SensorMode.html new file mode 100644 index 0000000..c546457 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1SensorMode.html @@ -0,0 +1,164 @@ + + + + + +Libargus API: Argus::SensorMode Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::SensorMode Class Reference
+
+
+ +

#include <CameraDevice.h>

+
+Inheritance diagram for Argus::SensorMode:
+
+
+ + +Argus::InterfaceProvider +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + +

+Protected Member Functions

 ~SensorMode ()
- Protected Member Functions inherited from Argus::InterfaceProvider
 ~InterfaceProvider ()
+ + + + +

+Additional Inherited Members

- Public Member Functions inherited from Argus::InterfaceProvider
virtual InterfacegetInterface (const InterfaceID &interfaceId)=0
 Acquire the interface specified by interfaceId.
+

Detailed Description

+
+

Definition at line 209 of file CameraDevice.h.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Argus::SensorMode::~SensorMode ()
+
+inlineprotected
+
+ +

Definition at line 212 of file CameraDevice.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1SensorMode.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1SensorMode.png new file mode 100644 index 0000000..5cdb0b7 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1SensorMode.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Size2D-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Size2D-members.html new file mode 100644 index 0000000..68a1ec5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Size2D-members.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Size2D< T > Member List
+
+
+ +

This is the complete list of members for Argus::Size2D< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
area() const Argus::Size2D< T >inline
height()Argus::Size2D< T >inline
height() const Argus::Size2D< T >inline
m_dataArgus::Tuple< 2, T >protected
operator!=(const Tuple< N, T > &rhs) constArgus::Tuple< 2, T >inline
operator*(const T &rhs) constArgus::Tuple< 2, T >inline
operator*=(const T &rhs)Argus::Tuple< 2, T >inline
operator+(const Tuple< N, T > &rhs) constArgus::Tuple< 2, T >inline
operator+=(const Tuple< N, T > &rhs)Argus::Tuple< 2, T >inline
operator-(const Tuple< N, T > &rhs) constArgus::Tuple< 2, T >inline
operator-=(const Tuple< N, T > &rhs)Argus::Tuple< 2, T >inline
operator/(const T &rhs) constArgus::Tuple< 2, T >inline
operator/=(const T &rhs)Argus::Tuple< 2, T >inline
operator==(const Tuple< N, T > &rhs) constArgus::Tuple< 2, T >inline
operator[](unsigned int i)Argus::Tuple< 2, T >inline
operator[](unsigned int i) constArgus::Tuple< 2, T >inline
Size2D()Argus::Size2D< T >inline
Size2D(const Tuple< 2, T > &other)Argus::Size2D< T >inline
Size2D(T init)Argus::Size2D< T >inline
Size2D(T _width, T _height)Argus::Size2D< T >inline
Tuple()Argus::Tuple< 2, T >inline
Tuple(T init)Argus::Tuple< 2, T >inline
tupleSize()Argus::Tuple< 2, T >inlinestatic
width()Argus::Size2D< T >inline
width() const Argus::Size2D< T >inline
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Size2D.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Size2D.html new file mode 100644 index 0000000..5eb7d53 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Size2D.html @@ -0,0 +1,440 @@ + + + + + +Libargus API: Argus::Size2D< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Size2D< T > Class Template Reference
+
+
+ +

Size2D template class. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::Size2D< T >:
+
+
+ + +Argus::Tuple< 2, T > + +
+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Size2D ()
 Size2D (const Tuple< 2, T > &other)
 Size2D (T init)
 Size2D (T _width, T _height)
T & width ()
const T & width () const
T & height ()
const T & height () const
area () const
 Returns the area of the size (width * height).
- Public Member Functions inherited from Argus::Tuple< 2, T >
 Tuple ()
 Tuple (T init)
 Initialize every element of the tuple to a single value.
bool operator== (const Tuple< N, T > &rhs) const
 Returns true when every element in the two tuples are identical.
bool operator!= (const Tuple< N, T > &rhs) const
 Returns true if there are any differences between the two tuples.
Tuple< N, T > & operator+= (const Tuple< N, T > &rhs)
 Adds every element of another tuple to the elements of this tuple.
Tuple< N, T > & operator-= (const Tuple< N, T > &rhs)
 Subtracts every element of another tuple from the elements of this tuple.
Tuple< N, T > & operator*= (const T &rhs)
 Multiplies every element in the tuple by a single value.
Tuple< N, T > & operator/= (const T &rhs)
 Divides every element in the tuple by a single value.
const Tuple< N, T > operator+ (const Tuple< N, T > &rhs) const
 Returns the result of adding another tuple to this tuple.
const Tuple< N, T > operator- (const Tuple< N, T > &rhs) const
 Returns the result of subtracting another tuple from this tuple.
const Tuple< N, T > operator* (const T &rhs) const
 Returns the result of multiplying this tuple by a single value.
const Tuple< N, T > operator/ (const T &rhs) const
 Returns the result of dividing this tuple by a single value.
T & operator[] (unsigned int i)
const T & operator[] (unsigned int i) const
+ + + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from Argus::Tuple< 2, T >
static unsigned int tupleSize ()
 Returns the number of elements in the tuple.
- Protected Attributes inherited from Argus::Tuple< 2, T >
m_data [N]
+

Detailed Description

+

template<typename T>
+class Argus::Size2D< T >

+ +

Size2D template class.

+

This is a Tuple specialization containing 2 elements corresponding to the width and height of a 2D size, in that order. Values can be accessed using the named methods.

+ +

Definition at line 705 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
Argus::Size2D< T >::Size2D ()
+
+inline
+
+ +

Definition at line 708 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::Size2D< T >::Size2D (const Tuple< 2, T > & other)
+
+inline
+
+ +

Definition at line 709 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::Size2D< T >::Size2D (init)
+
+inline
+
+ +

Definition at line 711 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Argus::Size2D< T >::Size2D (_width,
_height 
)
+
+inline
+
+ +

Definition at line 716 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T Argus::Size2D< T >::area () const
+
+inline
+
+ +

Returns the area of the size (width * height).

+ +

Definition at line 728 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::Size2D< T >::height ()
+
+inline
+
+ +

Definition at line 724 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::Size2D< T >::height () const
+
+inline
+
+ +

Definition at line 725 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::Size2D< T >::width ()
+
+inline
+
+ +

Definition at line 722 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
const T& Argus::Size2D< T >::width () const
+
+inline
+
+ +

Definition at line 723 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Size2D.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Size2D.png new file mode 100644 index 0000000..4908b27 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Size2D.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Tuple-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Tuple-members.html new file mode 100644 index 0000000..3f509be --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Tuple-members.html @@ -0,0 +1,122 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::Tuple< N, T > Member List
+
+
+ +

This is the complete list of members for Argus::Tuple< N, T >, including all inherited members.

+ + + + + + + + + + + + + + + + + +
m_dataArgus::Tuple< N, T >protected
operator!=(const Tuple< N, T > &rhs) const Argus::Tuple< N, T >inline
operator*(const T &rhs) const Argus::Tuple< N, T >inline
operator*=(const T &rhs)Argus::Tuple< N, T >inline
operator+(const Tuple< N, T > &rhs) const Argus::Tuple< N, T >inline
operator+=(const Tuple< N, T > &rhs)Argus::Tuple< N, T >inline
operator-(const Tuple< N, T > &rhs) const Argus::Tuple< N, T >inline
operator-=(const Tuple< N, T > &rhs)Argus::Tuple< N, T >inline
operator/(const T &rhs) const Argus::Tuple< N, T >inline
operator/=(const T &rhs)Argus::Tuple< N, T >inline
operator==(const Tuple< N, T > &rhs) const Argus::Tuple< N, T >inline
operator[](unsigned int i)Argus::Tuple< N, T >inline
operator[](unsigned int i) const Argus::Tuple< N, T >inline
Tuple()Argus::Tuple< N, T >inline
Tuple(T init)Argus::Tuple< N, T >inline
tupleSize()Argus::Tuple< N, T >inlinestatic
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Tuple.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Tuple.html new file mode 100644 index 0000000..103189e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1Tuple.html @@ -0,0 +1,632 @@ + + + + + +Libargus API: Argus::Tuple< N, T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Tuple< N, T > Class Template Reference
+
+
+ +

Tuple template class. + More...

+ +

#include <Types.h>

+ +

List of all members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Tuple ()
 Tuple (T init)
 Initialize every element of the tuple to a single value.
bool operator== (const Tuple< N, T > &rhs) const
 Returns true when every element in the two tuples are identical.
bool operator!= (const Tuple< N, T > &rhs) const
 Returns true if there are any differences between the two tuples.
Tuple< N, T > & operator+= (const Tuple< N, T > &rhs)
 Adds every element of another tuple to the elements of this tuple.
Tuple< N, T > & operator-= (const Tuple< N, T > &rhs)
 Subtracts every element of another tuple from the elements of this tuple.
Tuple< N, T > & operator*= (const T &rhs)
 Multiplies every element in the tuple by a single value.
Tuple< N, T > & operator/= (const T &rhs)
 Divides every element in the tuple by a single value.
const Tuple< N, T > operator+ (const Tuple< N, T > &rhs) const
 Returns the result of adding another tuple to this tuple.
const Tuple< N, T > operator- (const Tuple< N, T > &rhs) const
 Returns the result of subtracting another tuple from this tuple.
const Tuple< N, T > operator* (const T &rhs) const
 Returns the result of multiplying this tuple by a single value.
const Tuple< N, T > operator/ (const T &rhs) const
 Returns the result of dividing this tuple by a single value.
T & operator[] (unsigned int i)
const T & operator[] (unsigned int i) const
+ + + +

+Static Public Member Functions

static unsigned int tupleSize ()
 Returns the number of elements in the tuple.
+ + +

+Protected Attributes

m_data [N]
+

Detailed Description

+

template<unsigned int N, typename T>
+class Argus::Tuple< N, T >

+ +

Tuple template class.

+

This provides a finite ordered list of N elements having type T.

+ +

Definition at line 481 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + +
Argus::Tuple< N, T >::Tuple ()
+
+inline
+
+ +

Definition at line 484 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
Argus::Tuple< N, T >::Tuple (init)
+
+inline
+
+ +

Initialize every element of the tuple to a single value.

+ +

Definition at line 487 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
bool Argus::Tuple< N, T >::operator!= (const Tuple< N, T > & rhs) const
+
+inline
+
+ +

Returns true if there are any differences between the two tuples.

+ +

Definition at line 500 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
const Tuple<N, T> Argus::Tuple< N, T >::operator* (const T & rhs) const
+
+inline
+
+ +

Returns the result of multiplying this tuple by a single value.

+ +

Definition at line 550 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
Tuple<N, T>& Argus::Tuple< N, T >::operator*= (const T & rhs)
+
+inline
+
+ +

Multiplies every element in the tuple by a single value.

+ +

Definition at line 522 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
const Tuple<N, T> Argus::Tuple< N, T >::operator+ (const Tuple< N, T > & rhs) const
+
+inline
+
+ +

Returns the result of adding another tuple to this tuple.

+ +

Definition at line 538 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
Tuple<N, T>& Argus::Tuple< N, T >::operator+= (const Tuple< N, T > & rhs)
+
+inline
+
+ +

Adds every element of another tuple to the elements of this tuple.

+ +

Definition at line 506 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
const Tuple<N, T> Argus::Tuple< N, T >::operator- (const Tuple< N, T > & rhs) const
+
+inline
+
+ +

Returns the result of subtracting another tuple from this tuple.

+ +

Definition at line 544 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
Tuple<N, T>& Argus::Tuple< N, T >::operator-= (const Tuple< N, T > & rhs)
+
+inline
+
+ +

Subtracts every element of another tuple from the elements of this tuple.

+ +

Definition at line 514 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
const Tuple<N, T> Argus::Tuple< N, T >::operator/ (const T & rhs) const
+
+inline
+
+ +

Returns the result of dividing this tuple by a single value.

+ +

Definition at line 556 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
Tuple<N, T>& Argus::Tuple< N, T >::operator/= (const T & rhs)
+
+inline
+
+ +

Divides every element in the tuple by a single value.

+ +

Definition at line 530 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
bool Argus::Tuple< N, T >::operator== (const Tuple< N, T > & rhs) const
+
+inline
+
+ +

Returns true when every element in the two tuples are identical.

+ +

Definition at line 494 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
T& Argus::Tuple< N, T >::operator[] (unsigned int i)
+
+inline
+
+ +

Definition at line 561 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + + +
const T& Argus::Tuple< N, T >::operator[] (unsigned int i) const
+
+inline
+
+ +

Definition at line 562 of file Types.h.

+ +
+
+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + + + + +
static unsigned int Argus::Tuple< N, T >::tupleSize ()
+
+inlinestatic
+
+ +

Returns the number of elements in the tuple.

+ +

Definition at line 565 of file Types.h.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<unsigned int N, typename T>
+ + + + + +
+ + + + +
T Argus::Tuple< N, T >::m_data[N]
+
+protected
+
+ +

Definition at line 568 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1UniqueObj-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1UniqueObj-members.html new file mode 100644 index 0000000..fab74e5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1UniqueObj-members.html @@ -0,0 +1,120 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::UniqueObj< T > Member List
+
+
+ +

This is the complete list of members for Argus::UniqueObj< T >, including all inherited members.

+ + + + + + + + + + + + + + + +
get() const Argus::UniqueObj< T >inline
m_objArgus::UniqueObj< T >private
NonCopyable()Argus::NonCopyableinlineprivate
operator bool() const Argus::UniqueObj< T >inline
operator const rv< UniqueObj > &() const Argus::UniqueObj< T >inline
operator rv< UniqueObj > &()Argus::UniqueObj< T >inline
operator*() const Argus::UniqueObj< T >inline
operator->() const Argus::UniqueObj< T >private
operator=(rv< UniqueObj > &moved)Argus::UniqueObj< T >inline
release()Argus::UniqueObj< T >inline
reset(T *obj=NULL)Argus::UniqueObj< T >inline
UniqueObj(T *obj=NULL)Argus::UniqueObj< T >inlineexplicit
UniqueObj(rv< UniqueObj > &moved)Argus::UniqueObj< T >inline
~UniqueObj()Argus::UniqueObj< T >inline
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1UniqueObj.html b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1UniqueObj.html new file mode 100644 index 0000000..acafd8e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1UniqueObj.html @@ -0,0 +1,510 @@ + + + + + +Libargus API: Argus::UniqueObj< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::UniqueObj< T > Class Template Reference
+
+
+ +

Template helper emulating C++11 rvalue semantics. + More...

+ +

#include <Types.h>

+
+Inheritance diagram for Argus::UniqueObj< T >:
+
+
+ + +Argus::NonCopyable + +
+ +

List of all members.

+ + + + + + + + + + + + + +

+Public Member Functions

 UniqueObj (T *obj=NULL)
void reset (T *obj=NULL)
T * release ()
 UniqueObj (rv< UniqueObj > &moved)
UniqueObjoperator= (rv< UniqueObj > &moved)
 ~UniqueObj ()
T & operator* () const
T * get () const
 operator bool () const
 operator rv< UniqueObj > & ()
 operator const rv< UniqueObj > & () const
+ + +

+Private Member Functions

T * operator-> () const
+ + +

+Private Attributes

T * m_obj
+

Detailed Description

+

template<typename T>
+class Argus::UniqueObj< T >

+ +

Template helper emulating C++11 rvalue semantics.

+

Movable smart pointer mimicking std::unique_ptr.

+ +

Definition at line 441 of file Types.h.

+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::UniqueObj< T >::UniqueObj (T * obj = NULL)
+
+inlineexplicit
+
+ +

Definition at line 444 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
Argus::UniqueObj< T >::UniqueObj (rv< UniqueObj< T > > & moved)
+
+inline
+
+ +

Definition at line 451 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
Argus::UniqueObj< T >::~UniqueObj ()
+
+inline
+
+ +

Definition at line 454 of file Types.h.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T* Argus::UniqueObj< T >::get () const
+
+inline
+
+ +

Definition at line 457 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
Argus::UniqueObj< T >::operator bool () const
+
+inline
+
+ +

Definition at line 459 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
Argus::UniqueObj< T >::operator const rv< UniqueObj > & () const
+
+inline
+
+ +

Definition at line 462 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
Argus::UniqueObj< T >::operator rv< UniqueObj > & ()
+
+inline
+
+ +

Definition at line 461 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T& Argus::UniqueObj< T >::operator* () const
+
+inline
+
+ +

Definition at line 456 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T* Argus::UniqueObj< T >::operator-> () const
+
+private
+
+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
UniqueObj& Argus::UniqueObj< T >::operator= (rv< UniqueObj< T > > & moved)
+
+inline
+
+ +

Definition at line 452 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T* Argus::UniqueObj< T >::release ()
+
+inline
+
+ +

Definition at line 448 of file Types.h.

+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + +
void Argus::UniqueObj< T >::reset (T * obj = NULL)
+
+inline
+
+ +

Definition at line 446 of file Types.h.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
T* Argus::UniqueObj< T >::m_obj
+
+private
+
+ +

Definition at line 465 of file Types.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1UniqueObj.png b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1UniqueObj.png new file mode 100644 index 0000000..6f5ffc5 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/classArgus_1_1UniqueObj.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/classes.html b/jetson_multimedia_api/argus/docs/doxygen/html/classes.html new file mode 100644 index 0000000..12cb367 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/classes.html @@ -0,0 +1,141 @@ + + + + + +Libargus API: Class Index + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class Index
+
+
+
A | B | C | D | E | I | N | O | P | R | S | T | U
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
  A  
+
EventType (Argus)   IEdgeEnhanceSettings (Argus)   IRGBHistogram (Argus)   Point3D (Argus)   
  I  
+
IEGLImageBuffer (Argus)   ISensorEepromData (Argus::Ext)   
  R  
+
AcRegion (Argus)   IEGLImageBufferSettings (Argus)   ISensorMode (Argus)   
Array2D (Argus)   IAutoControlSettings (Argus)   IEGLOutputStream (Argus)   ISensorOtpData (Argus::Ext)   Range (Argus)   
  B  
+
IBayerAverageMap (Argus::Ext)   IEGLOutputStreamSettings (Argus)   ISensorPrivateMetadata (Argus::Ext)   Rectangle (Argus)   
IBayerAverageMapSettings (Argus::Ext)   IEGLSync (Argus)   ISensorPrivateMetadataCaps (Argus::Ext)   Request (Argus)   
BayerTuple (Argus)   IBayerHistogram (Argus)   IEvent (Argus)   ISensorPrivateMetadataClientBufferRequest (Argus::Ext)   RGBTuple (Argus)   
Buffer (Argus)   IBayerSharpnessMap (Argus::Ext)   IEventCaptureComplete (Argus)   ISensorPrivateMetadataRequest (Argus::Ext)   
  S  
+
BufferSettings (Argus)   IBayerSharpnessMapSettings (Argus::Ext)   IEventError (Argus)   ISensorTimestampTsc (Argus::Ext)   
  C  
+
IBlockingSessionCameraProvider (Argus::Ext)   IEventProvider (Argus)   ISourceSettings (Argus)   SensorMode (Argus)   
IBuffer (Argus)   IEventQueue (Argus)   IStreamCaptureMetadata (Argus)   Size2D (Argus)   
CameraDevice (Argus)   IBufferOutputStream (Argus)   IFaceDetectCaps (Argus::Ext)   IStreamSettings (Argus)   
  T  
+
CameraProvider (Argus)   IBufferOutputStreamSettings (Argus)   IFaceDetectMetadata (Argus::Ext)   ISyncSensorCalibrationData (Argus::Ext)   
CaptureMetadata (Argus)   ICameraProperties (Argus)   IFaceDetectResult (Argus::Ext)   
  N  
+
Tuple (Argus)   
CaptureMetadataContainer (Argus)   ICameraProvider (Argus)   IFaceDetectSettings (Argus::Ext)   
  U  
+
CaptureSession (Argus)   ICaptureMetadata (Argus)   IInternalFrameCount (Argus::Ext)   NamedUUID (Argus)   
  D  
+
ICaptureSession (Argus)   INonLinearHistogram (Argus::Ext)   NonCopyable (Argus)   UniqueObj (Argus)   
IDebugCaptureSession (Argus::Ext)   Interface (Argus)   
  O  
+
UUID (Argus)   
Destructable (Argus)   IDeFogSettings (Argus::Ext)   InterfaceID (Argus)   
  E  
+
IDenoiseMetadata (Argus)   InterfaceProvider (Argus)   OutputStream (Argus)   
IDenoiseSettings (Argus)   IOutputStreamSettings (Argus)   OutputStreamSettings (Argus)   
Event (Argus)   IDolWdrSensorMode (Argus::Ext)   IPwlWdrSensorMode (Argus::Ext)   
  P  
+
EventQueue (Argus)   IEdgeEnhanceMetadata (Argus)   IRequest (Argus)   
Point2D (Argus)   
+
A | B | C | D | E | I | N | O | P | R | S | T | U
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/closed.png b/jetson_multimedia_api/argus/docs/doxygen/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/closed.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/dir_09d09be22b85854e745d57822a2f9607.html b/jetson_multimedia_api/argus/docs/doxygen/html/dir_09d09be22b85854e745d57822a2f9607.html new file mode 100644 index 0000000..4f5d402 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/dir_09d09be22b85854e745d57822a2f9607.html @@ -0,0 +1,137 @@ + + + + + +Libargus API: include/Argus/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
Argus Directory Reference
+
+
+ + + +

+Directories

directory  Ext
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  Argus.h [code]
 Libargus API: Main Include File
file  BufferStream.h [code]
 Libargus API: BufferStream API
file  CameraDevice.h [code]
 Libargus API: Camera Device API
file  CameraProvider.h [code]
 Libargus API: Camera Provider API
file  CaptureSession.h [code]
 Libargus API: Capture Session API
file  EGLImage.h [code]
 Libargus API: EGLImage API
file  EGLStream.h [code]
 Libargus API: EGLStream API
file  EGLSync.h [code]
 Libargus API: EGLSync API
file  Event.h [code]
 Libargus API: Event API
file  EventProvider.h [code]
 Libargus API: Event Provider API
file  EventQueue.h [code]
 Libargus API: Event Queue API
file  Request.h [code]
 Libargus API: Request API
file  Settings.h [code]
 Libargus API: Settings API
file  Stream.h [code]
 Libargus API: Stream API
file  Types.h [code]
 Libargus API: Types API
file  UUID.h [code]
 Libargus API: UUID API
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/dir_d1ba2d6a0476cc4f6b6eb8118a60a162.html b/jetson_multimedia_api/argus/docs/doxygen/html/dir_d1ba2d6a0476cc4f6b6eb8118a60a162.html new file mode 100644 index 0000000..c7dd8c2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/dir_d1ba2d6a0476cc4f6b6eb8118a60a162.html @@ -0,0 +1,131 @@ + + + + + +Libargus API: include/Argus/Ext/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
Ext Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  BayerAverageMap.h [code]
 Libargus Extension: Bayer Average Map API
file  BayerSharpnessMap.h [code]
 Libargus Extension: Bayer Sharpness Map API
file  BlockingSessionCameraProvider.h [code]
 Libargus Extension: Blocking Session Capture Provider API
file  DebugCaptureSession.h [code]
 Libargus Extension: Debug Capture Session API
file  DeFog.h [code]
 Libargus Extension: DeFog API
file  DolWdrSensorMode.h [code]
 Libargus Extension: Digital Overlap WDR Sensor Modes
file  FaceDetect.h [code]
 Libargus Extension: Face Detect API
file  InternalFrameCount.h [code]
 Libargus Extension: Internal Frame Count
file  NonLinearHistogram.h [code]
 Libargus Extension: Non Linear Histogram
file  PwlWdrSensorMode.h [code]
 Libargus Extension: Piecewise Linear Compression for WDR Sensor Modes
file  SensorEepromData.h [code]
 Libargus Extension: Sensor EEPROM data API
file  SensorOtpData.h [code]
 Libargus Extension: Sensor OTP data API
file  SensorPrivateMetadataClientBuffer.h [code]
 Libargus Extension: Sensor Private Metadata Client Buffer API
file  SensorTimestampTsc.h [code]
 Libargus Extension: TSC HW SensorTimestamp API
file  SyncSensorCalibrationData.h [code]
 Libargus Extension: Sync Sensor Calibration Data API
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html b/jetson_multimedia_api/argus/docs/doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..6149919 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,100 @@ + + + + + +Libargus API: include/ Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+ + + +

+Directories

directory  Argus
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/doxygen.css b/jetson_multimedia_api/argus/docs/doxygen/html/doxygen.css new file mode 100644 index 0000000..ceac83e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/doxygen.css @@ -0,0 +1,1133 @@ +/* The standard CSS for doxygen */ + +body, table, div, p, dl { + font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; + font-size: 13px; + line-height: 1.3; +} + +/* @group Heading Levels */ + +h1 { + font-size: 150%; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2 { + font-size: 120%; +} + +h3 { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px; + margin: 4px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; +} + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memItemLeft, .memItemRight, .memTemplParams { + border-top: 1px solid #C4CFE5; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + width: 100%; + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + margin-left: 5px; + font-size: 8pt; + padding-left: 5px; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 7px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/doxygen.png b/jetson_multimedia_api/argus/docs/doxygen/html/doxygen.png new file mode 100644 index 0000000..3ff17d8 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/doxygen.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/dynsections.js b/jetson_multimedia_api/argus/docs/doxygen/html/dynsections.js new file mode 100644 index 0000000..116542f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/dynsections.js @@ -0,0 +1,78 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + +Libargus API: File List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\-include
 \-Argus
  o-Ext
  |o*BayerAverageMap.hLibargus Extension: Bayer Average Map API
  |o*BayerSharpnessMap.hLibargus Extension: Bayer Sharpness Map API
  |o*BlockingSessionCameraProvider.hLibargus Extension: Blocking Session Capture Provider API
  |o*DebugCaptureSession.hLibargus Extension: Debug Capture Session API
  |o*DeFog.hLibargus Extension: DeFog API
  |o*DolWdrSensorMode.hLibargus Extension: Digital Overlap WDR Sensor Modes
  |o*FaceDetect.hLibargus Extension: Face Detect API
  |o*InternalFrameCount.hLibargus Extension: Internal Frame Count
  |o*NonLinearHistogram.hLibargus Extension: Non Linear Histogram
  |o*PwlWdrSensorMode.hLibargus Extension: Piecewise Linear Compression for WDR Sensor Modes
  |o*SensorEepromData.hLibargus Extension: Sensor EEPROM data API
  |o*SensorOtpData.hLibargus Extension: Sensor OTP data API
  |o*SensorPrivateMetadata.hLibargus Extension: Sensor Private Metadata API
  |o*SensorPrivateMetadataClientBuffer.hLibargus Extension: Sensor Private Metadata Client Buffer API
  |o*SensorTimestampTsc.hLibargus Extension: TSC HW SensorTimestamp API
  |\*SyncSensorCalibrationData.hLibargus Extension: Sync Sensor Calibration Data API
  o*Argus.hLibargus API: Main Include File
  o*BufferStream.hLibargus API: BufferStream API
  o*CameraDevice.hLibargus API: Camera Device API
  o*CameraProvider.hLibargus API: Camera Provider API
  o*CaptureMetadata.hLibargus API: Capture Metadata API
  o*CaptureSession.hLibargus API: Capture Session API
  o*EGLImage.hLibargus API: EGLImage API
  o*EGLStream.hLibargus API: EGLStream API
  o*EGLSync.hLibargus API: EGLSync API
  o*Event.hLibargus API: Event API
  o*EventProvider.hLibargus API: Event Provider API
  o*EventQueue.hLibargus API: Event Queue API
  o*Request.hLibargus API: Request API
  o*Settings.hLibargus API: Settings API
  o*Stream.hLibargus API: Stream API
  o*Types.hLibargus API: Types API
  \*UUID.hLibargus API: UUID API
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2blank.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2blank.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2blank.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2cl.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2cl.png new file mode 100644 index 0000000..132f657 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2cl.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2doc.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2doc.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2folderclosed.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2folderclosed.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2folderopen.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2folderopen.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2lastnode.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2lastnode.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2lastnode.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2link.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2link.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2link.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2mlastnode.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2mlastnode.png new file mode 100644 index 0000000..0b63f6d Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2mlastnode.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2mnode.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2mnode.png new file mode 100644 index 0000000..0b63f6d Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2mnode.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2mo.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2mo.png new file mode 100644 index 0000000..4bfb80f Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2mo.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2node.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2node.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2node.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2ns.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2ns.png new file mode 100644 index 0000000..72e3d71 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2ns.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2plastnode.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2plastnode.png new file mode 100644 index 0000000..c6ee22f Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2plastnode.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2pnode.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2pnode.png new file mode 100644 index 0000000..c6ee22f Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2pnode.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2splitbar.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2splitbar.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/ftv2vertline.png b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2vertline.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/ftv2vertline.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions.html new file mode 100644 index 0000000..9f6e45c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions.html @@ -0,0 +1,146 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x62.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x62.html new file mode 100644 index 0000000..f90e9bd --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x62.html @@ -0,0 +1,146 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- b -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x63.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x63.html new file mode 100644 index 0000000..a3e021a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x63.html @@ -0,0 +1,181 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- c -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x64.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x64.html new file mode 100644 index 0000000..1f7713b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x64.html @@ -0,0 +1,148 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- d -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x65.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x65.html new file mode 100644 index 0000000..89382a8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x65.html @@ -0,0 +1,148 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- e -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x67.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x67.html new file mode 100644 index 0000000..aef3913 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x67.html @@ -0,0 +1,701 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- g -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x68.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x68.html new file mode 100644 index 0000000..a667c73 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x68.html @@ -0,0 +1,138 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- h -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x69.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x69.html new file mode 100644 index 0000000..273f56a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x69.html @@ -0,0 +1,206 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- i -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6c.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6c.html new file mode 100644 index 0000000..84e8427 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6c.html @@ -0,0 +1,136 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- l -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6d.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6d.html new file mode 100644 index 0000000..c913e02 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6d.html @@ -0,0 +1,158 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- m -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6e.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6e.html new file mode 100644 index 0000000..318311e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6e.html @@ -0,0 +1,148 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- n -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6f.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6f.html new file mode 100644 index 0000000..9ea549c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x6f.html @@ -0,0 +1,197 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- o -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x70.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x70.html new file mode 100644 index 0000000..424fbed --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x70.html @@ -0,0 +1,139 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- p -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x72.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x72.html new file mode 100644 index 0000000..1cefdcf --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x72.html @@ -0,0 +1,167 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- r -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x73.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x73.html new file mode 100644 index 0000000..8c152f8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x73.html @@ -0,0 +1,320 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- s -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x74.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x74.html new file mode 100644 index 0000000..f71819b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x74.html @@ -0,0 +1,151 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- t -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x75.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x75.html new file mode 100644 index 0000000..163475a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x75.html @@ -0,0 +1,136 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- u -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x77.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x77.html new file mode 100644 index 0000000..819662f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x77.html @@ -0,0 +1,149 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- w -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x78.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x78.html new file mode 100644 index 0000000..b6ce7a1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x78.html @@ -0,0 +1,138 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- x -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x79.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x79.html new file mode 100644 index 0000000..9e41d8b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x79.html @@ -0,0 +1,138 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- y -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x7a.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x7a.html new file mode 100644 index 0000000..ed46b05 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x7a.html @@ -0,0 +1,136 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- z -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x7e.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x7e.html new file mode 100644 index 0000000..0c3a27d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_0x7e.html @@ -0,0 +1,343 @@ + + + + + +Libargus API: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- ~ -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func.html new file mode 100644 index 0000000..ba83bc7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func.html @@ -0,0 +1,146 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- a -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x62.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x62.html new file mode 100644 index 0000000..d1a8eb7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x62.html @@ -0,0 +1,146 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- b -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x63.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x63.html new file mode 100644 index 0000000..c9306d2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x63.html @@ -0,0 +1,175 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- c -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x64.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x64.html new file mode 100644 index 0000000..32c0f77 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x64.html @@ -0,0 +1,148 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- d -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x65.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x65.html new file mode 100644 index 0000000..431c75a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x65.html @@ -0,0 +1,148 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- e -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x67.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x67.html new file mode 100644 index 0000000..9d43ca7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x67.html @@ -0,0 +1,701 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- g -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x68.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x68.html new file mode 100644 index 0000000..0398f80 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x68.html @@ -0,0 +1,138 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- h -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x69.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x69.html new file mode 100644 index 0000000..74db6d0 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x69.html @@ -0,0 +1,203 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- i -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6c.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6c.html new file mode 100644 index 0000000..b783a9d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6c.html @@ -0,0 +1,136 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- l -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6d.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6d.html new file mode 100644 index 0000000..6a4e2b7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6d.html @@ -0,0 +1,142 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- m -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6e.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6e.html new file mode 100644 index 0000000..8c746ef --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6e.html @@ -0,0 +1,139 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- n -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6f.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6f.html new file mode 100644 index 0000000..066f38b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x6f.html @@ -0,0 +1,197 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- o -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x70.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x70.html new file mode 100644 index 0000000..6b6e83c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x70.html @@ -0,0 +1,139 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- p -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x72.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x72.html new file mode 100644 index 0000000..01c4ec8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x72.html @@ -0,0 +1,167 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- r -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x73.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x73.html new file mode 100644 index 0000000..7d0a5fb --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x73.html @@ -0,0 +1,320 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- s -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x74.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x74.html new file mode 100644 index 0000000..6ce7b1e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x74.html @@ -0,0 +1,142 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- t -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x75.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x75.html new file mode 100644 index 0000000..6adcfb1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x75.html @@ -0,0 +1,136 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- u -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x77.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x77.html new file mode 100644 index 0000000..ce16fbf --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x77.html @@ -0,0 +1,149 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- w -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x78.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x78.html new file mode 100644 index 0000000..7f51228 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x78.html @@ -0,0 +1,138 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x79.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x79.html new file mode 100644 index 0000000..03efee7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x79.html @@ -0,0 +1,138 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x7a.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x7a.html new file mode 100644 index 0000000..78d8ba5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x7a.html @@ -0,0 +1,136 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- z -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x7e.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x7e.html new file mode 100644 index 0000000..6a70aba --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_func_0x7e.html @@ -0,0 +1,343 @@ + + + + + +Libargus API: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- ~ -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_type.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_type.html new file mode 100644 index 0000000..508838d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_type.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Class Members - Typedefs + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/functions_vars.html b/jetson_multimedia_api/argus/docs/doxygen/html/functions_vars.html new file mode 100644 index 0000000..7b6c2a7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/functions_vars.html @@ -0,0 +1,142 @@ + + + + + +Libargus API: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/globals.html b/jetson_multimedia_api/argus/docs/doxygen/html/globals.html new file mode 100644 index 0000000..dce5f6a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/globals.html @@ -0,0 +1,107 @@ + + + + + +Libargus API: File Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all file members with links to the files they belong to:
    +
  • DEFINE_NAMED_UUID_CLASS +: UUID.h +
  • +
  • DEFINE_UUID +: UUID.h +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/globals_defs.html b/jetson_multimedia_api/argus/docs/doxygen/html/globals_defs.html new file mode 100644 index 0000000..baca777 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/globals_defs.html @@ -0,0 +1,107 @@ + + + + + +Libargus API: File Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + +
+ + + + +
+ +
+ +
    +
  • DEFINE_NAMED_UUID_CLASS +: UUID.h +
  • +
  • DEFINE_UUID +: UUID.h +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusAutoControlSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusAutoControlSettings.html new file mode 100644 index 0000000..2262d64 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusAutoControlSettings.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: AutoControlSettings + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
AutoControlSettings
+
+
+ +

Child auto control settings, returned by IRequest::getAutoControlSettings. +More...

+ + + + +

+Classes

class  Argus::IAutoControlSettings
 Interface to the auto control settings (provided by IRequest::getAutoControlSettings()). More...
+

Detailed Description

+

Child auto control settings, returned by IRequest::getAutoControlSettings.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBayerHistogram.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBayerHistogram.html new file mode 100644 index 0000000..ed6712f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBayerHistogram.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: BayerHistogram + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
BayerHistogram
+
+
+ +

Child Bayer histogram metadata, returned by ICaptureMetadata::getBayerHistogram. +More...

+ + + + +

+Classes

class  Argus::IBayerHistogram
 Interface to Bayer histogram metadata (provided by ICaptureMetadata::getBayerHistogram()). More...
+

Detailed Description

+

Child Bayer histogram metadata, returned by ICaptureMetadata::getBayerHistogram.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBuffer.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBuffer.html new file mode 100644 index 0000000..b151cd7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBuffer.html @@ -0,0 +1,115 @@ + + + + + +Libargus API: Buffer + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ + +
+ +

Object that wraps an application-managed buffer for use as a capture request destination. +More...

+ + + + + + +

+Modules

 Buffer Types
 The buffer type describes the type of the image resource being wrapped by the Buffer.
 Sync Types
 The sync type describes the type of sync object to use with the Buffer.
+ + + +

+Classes

class  Argus::IBuffer
 Interface that provides the core methods for Buffer objects. More...
+

Detailed Description

+

Object that wraps an application-managed buffer for use as a capture request destination.

+

Every Buffer is associated with a single BufferType, which corresponds to the native resource type that is being wrapped by it, and dictates which interfaces it will support.

+

In addition to image data, Buffer objects may optionally transport sync information between libargus and the application in order to support hardware level synchronization and pipelining across the API boundary. The type of sync information, and the sync interfaces supported by a Buffer, is controlled by the SyncType.

+

All Buffer objects will support the IBuffer interface in order to query the core BufferType and SyncType.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferBuffer.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferBuffer.html new file mode 100644 index 0000000..75bcbd4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferBuffer.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: Buffer Types + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Buffer Types
+
+
+ +

The buffer type describes the type of the image resource being wrapped by the Buffer. +More...

+ + + + +

+Modules

 EGLImageBuffer
 Buffer type that wraps an EGLImage resource (BUFFER_TYPE_EGL_IMAGE).
+

Detailed Description

+

The buffer type describes the type of the image resource being wrapped by the Buffer.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferBufferSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferBufferSettings.html new file mode 100644 index 0000000..c7af65d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferBufferSettings.html @@ -0,0 +1,200 @@ + + + + + +Libargus API: Buffer Types + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Buffer Types
+
+
+ +

Provides buffer type specific configuration settings. +More...

+ + + + +

+Modules

 EGLImageBufferSettings
 Settings type used to configure/create EGLImageBuffer Buffers (BUFFER_TYPE_EGL_IMAGE).
+ + + +

+Functions

 Argus::DEFINE_UUID (BufferType, BUFFER_TYPE_EGL_IMAGE, c723d966, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 Buffer type that wraps an EGLImage resource.
+

Detailed Description

+

Provides buffer type specific configuration settings.

+

Provides sync type specific configuration settings.

+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (BufferType ,
BUFFER_TYPE_EGL_IMAGE ,
c723d966 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +

Buffer type that wraps an EGLImage resource.

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferEGLSync.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferEGLSync.html new file mode 100644 index 0000000..eddfae4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferEGLSync.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: EGLSync + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
EGLSync
+
+
+ +

Sync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC). +More...

+ + + + +

+Classes

class  Argus::IEGLSync
 Interface that provides EGLSync input and output methods for a Buffer. More...
+

Detailed Description

+

Sync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC).

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferOutputStream.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferOutputStream.html new file mode 100644 index 0000000..645a070 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferOutputStream.html @@ -0,0 +1,107 @@ + + + + + +Libargus API: BufferOutputStream + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
BufferOutputStream
+
+
+ +

OutputStream type that writes to application-managed buffers (STREAM_TYPE_BUFFER). +More...

+ + + + +

+Classes

class  Argus::IBufferOutputStream
 Interface that provides the methods used with Buffer-based OutputStreams. More...
+

Detailed Description

+

OutputStream type that writes to application-managed buffers (STREAM_TYPE_BUFFER).

+

Buffer-based OutputStream objects maintain a set of Buffer objects that are created by the application to wrap native image buffers allocated and owned by the application. These Buffer objects do not take possession of the native resources, which continue to be owned by the application; rather, they are used to control data access between libargus (as capture results are written) and the application (as the capture results are read).

+

Every Buffer stream is associated with a single BufferType, which corresponds to the native resource type that is being wrapped by its Buffers. This BufferType dictates which interfaces will be supported by the OutputStream and the child BufferSettings and Buffer objects created by it, and is immutable after stream creation.

+

In addition to image data, Buffer objects may be optionally used to transport sync information between libargus and the application in order to support hardware level synchronization and pipelining across the API boundary. The type of sync information, and the sync interfaces supported by a Buffer, is controlled by the SyncType.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferOutputStreamSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferOutputStreamSettings.html new file mode 100644 index 0000000..6343bc8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferOutputStreamSettings.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: BufferOutputStreamSettings + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
BufferOutputStreamSettings
+
+
+ +

Settings type used to configure/create BufferOutputStream streams (STREAM_TYPE_BUFFER). +More...

+ + + + +

+Classes

class  Argus::IBufferOutputStreamSettings
 Interface that exposes the configuration available to Buffer-based OutputStreams. More...
+

Detailed Description

+

Settings type used to configure/create BufferOutputStream streams (STREAM_TYPE_BUFFER).

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferSettings.html new file mode 100644 index 0000000..cd5b5df --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferSettings.html @@ -0,0 +1,105 @@ + + + + + +Libargus API: BufferSettings + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
BufferSettings
+
+
+ +

Container for settings used to configure/create a Buffer. +More...

+ + + + +

+Modules

 Buffer Types
 Provides buffer type specific configuration settings.
+

Detailed Description

+

Container for settings used to configure/create a Buffer.

+

These objects are created by IBufferOutputStream::createBufferSettings, and are used to configure the various parameters required for Buffer creation. Since the Buffer OutputStream which creates this object uses a single BufferType and SyncType, the interfaces supported by BufferSettings objects are dictated by these types.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferSync.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferSync.html new file mode 100644 index 0000000..0e17869 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusBufferSync.html @@ -0,0 +1,199 @@ + + + + + +Libargus API: Sync Types + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Sync Types
+
+
+ +

The sync type describes the type of sync object to use with the Buffer. +More...

+ + + + +

+Modules

 EGLSync
 Sync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC).
+ + + +

+Functions

 Argus::DEFINE_UUID (SyncType, SYNC_TYPE_EGL_SYNC, 5df77c90, 5d1b, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)
 Sync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC).
+

Detailed Description

+

The sync type describes the type of sync object to use with the Buffer.

+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SyncType ,
SYNC_TYPE_EGL_SYNC ,
5df77c90 ,
5d1b ,
11e7 ,
9598 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +

Sync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC).

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCameraDevice.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCameraDevice.html new file mode 100644 index 0000000..65d4d19 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCameraDevice.html @@ -0,0 +1,120 @@ + + + + + +Libargus API: CameraDevice + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
CameraDevice
+
+
+ +

Object representing a single camera device. +More...

+ + + + +

+Modules

 SensorMode
 Child object representing a CameraDevice's sensor mode, returned by ICameraProperties::getAllSensorModes.
+ + + + + + + + + + + +

+Classes

class  Argus::ICameraProperties
 Interface to the core CameraDevice properties. More...
class  Argus::Ext::ISensorEepromData
 Interface used to get EEPROM data. More...
class  Argus::Ext::ISensorOtpData
 Interface used to get OTP data. More...
class  Argus::Ext::ISensorPrivateMetadataCaps
 Interface used to query the availability and size in bytes of sensor private metadata. More...
class  Argus::Ext::ISyncSensorCalibrationData
 Interface used to access sync sensor calibration data. More...
+

Detailed Description

+

Object representing a single camera device.

+

CameraDevices are provided by a CameraProvider and are used to access the camera devices available within the system. Each device is based on a single sensor or a set of synchronized sensors.

+
See also:
ICameraProvider::getCameraDevices
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCameraProvider.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCameraProvider.html new file mode 100644 index 0000000..368e21c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCameraProvider.html @@ -0,0 +1,107 @@ + + + + + +Libargus API: CameraProvider + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
CameraProvider
+
+
+ +

Object providing the entry point to the libargus runtime. +More...

+ + + + + + +

+Classes

class  Argus::ICameraProvider
 Interface to the core CameraProvider methods. More...
class  Argus::Ext::IBlockingSessionCameraProvider
 Interface used to create blocking capture session. More...
+

Detailed Description

+

Object providing the entry point to the libargus runtime.

+

It provides methods for querying the cameras in the system and for creating camera devices.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCaptureMetadata.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCaptureMetadata.html new file mode 100644 index 0000000..2ebfd87 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCaptureMetadata.html @@ -0,0 +1,134 @@ + + + + + +Libargus API: CaptureMetadata + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
CaptureMetadata
+
+
+ +

Container for metadata generated by a single completed capture. +More...

+ + + + + + + + + + +

+Modules

 RGBHistogram
 Child RGB histogram metadata, returned by ICaptureMetadata::getRGBHistogram.
 BayerHistogram
 Child Bayer histogram metadata, returned by ICaptureMetadata::getBayerHistogram.
 FaceDetectResult
 Metadata for a single face detection result, returned by Ext::IFaceDetectMetadata::getFaceDetectResults.
+ + + + + + + + + + + + + + + + + + + + + +

+Classes

class  Argus::ICaptureMetadata
 Interface to the core capture metadata. More...
class  Argus::IDenoiseMetadata
 Interface to denoise metadata. More...
class  Argus::IEdgeEnhanceMetadata
 Interface to edge enhancement metadata. More...
class  Argus::Ext::IBayerAverageMap
 Interface to Bayer average map metadata. More...
class  Argus::Ext::IBayerSharpnessMap
 Interface to Bayer sharpness map metadata. More...
class  Argus::Ext::IFaceDetectMetadata
 Interface to overall face detection results metadata. More...
class  Argus::Ext::IInternalFrameCount
 Interface used to query the internal frame count for a request. More...
class  Argus::Ext::INonLinearHistogram
 Interface used to query the metadata to correctly interpret the compressed histogram data. More...
class  Argus::Ext::ISensorPrivateMetadata
 Interface used to access sensor private metadata. More...
class  Argus::Ext::ISensorTimestampTsc
 Interface used to get TSC HW timestamp. More...
+

Detailed Description

+

Container for metadata generated by a single completed capture.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCaptureSession.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCaptureSession.html new file mode 100644 index 0000000..79f895e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusCaptureSession.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: CaptureSession + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
CaptureSession
+
+
+ +

Object that controls all operations on a single sensor. +More...

+ + + + + + + + + + +

+Classes

class  Argus::ICaptureSession
 Interface to the core CaptureSession methods. More...
class  Argus::IEventProvider
 Interface for an object which generates Events (such as CaptureSession). More...
class  Argus::Ext::IDebugCaptureSession
 Interface used to dump CaptureSession runtime information. More...
class  Argus::Ext::IFaceDetectCaps
 Interface to expose the face detection capabilities of a CaptureSession. More...
+

Detailed Description

+

Object that controls all operations on a single sensor.

+

A capture session is bound to a single sensor (or, in future, a group of synchronized sensors) and provides methods to perform captures on that sensor (via the ICaptureSession interface).

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLImageBuffer.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLImageBuffer.html new file mode 100644 index 0000000..2f6740b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLImageBuffer.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: EGLImageBuffer + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
EGLImageBuffer
+
+
+ +

Buffer type that wraps an EGLImage resource (BUFFER_TYPE_EGL_IMAGE). +More...

+ + + + +

+Classes

class  Argus::IEGLImageBuffer
 Interface that provides methods to EGLImage Buffers. More...
+

Detailed Description

+

Buffer type that wraps an EGLImage resource (BUFFER_TYPE_EGL_IMAGE).

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLImageBufferSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLImageBufferSettings.html new file mode 100644 index 0000000..751e672 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLImageBufferSettings.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: EGLImageBufferSettings + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
EGLImageBufferSettings
+
+
+ +

Settings type used to configure/create EGLImageBuffer Buffers (BUFFER_TYPE_EGL_IMAGE). +More...

+ + + + +

+Classes

class  Argus::IEGLImageBufferSettings
 Interface that provides the settings used to configure EGLImage Buffer creation. More...
+

Detailed Description

+

Settings type used to configure/create EGLImageBuffer Buffers (BUFFER_TYPE_EGL_IMAGE).

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLOutputStream.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLOutputStream.html new file mode 100644 index 0000000..c601790 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLOutputStream.html @@ -0,0 +1,105 @@ + + + + + +Libargus API: EGLOutputStream + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
EGLOutputStream
+
+
+ +

OutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL). +More...

+ + + + +

+Classes

class  Argus::IEGLOutputStream
 Interface that exposes the methods available to an EGLStream-linked OutputStream. More...
+

Detailed Description

+

OutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL).

+

EGLStream-linked OutputStream objects maintain a connection to an EGLStream as the producer endpoint. The EGLStream implementation is responsible for buffer allocation, management, and synchronization as frames are presented to the EGLStream from libargus and then consumed using an EGLStream consumer.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLOutputStreamSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLOutputStreamSettings.html new file mode 100644 index 0000000..7c69631 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEGLOutputStreamSettings.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: EGLOutputStreamSettings + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
EGLOutputStreamSettings
+
+
+ +

Settings type used to configure/create EGLOutputStream streams (STREAM_TYPE_EGL). +More...

+ + + + +

+Classes

class  Argus::IEGLOutputStreamSettings
 Interface that exposes the settings used for EGLStream-linked OutputStream creation. More...
+

Detailed Description

+

Settings type used to configure/create EGLOutputStream streams (STREAM_TYPE_EGL).

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEvent.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEvent.html new file mode 100644 index 0000000..9467b10 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEvent.html @@ -0,0 +1,117 @@ + + + + + +Libargus API: Event + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ + +
+ +

Container representing a single event. +More...

+ + + + + + + + +

+Modules

 Error Event
 Event type used to report an error.
 CaptureStarted Event
 Event type used to report when a capture starts.
 CaptureComplete Event
 Event type used to report when all capture processing has completed.
+ + + + + +

+Classes

class  Argus::EventType
 A unique identifier for a particular type of Event. More...
class  Argus::IEvent
 Interface to the common Event properties. More...
+

Detailed Description

+

Container representing a single event.

+

Every Event will have a single EventType and will expose one or more interfaces, with the core IEvent interface being mandatory.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventCaptureComplete.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventCaptureComplete.html new file mode 100644 index 0000000..2d11331 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventCaptureComplete.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: CaptureComplete Event + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
CaptureComplete Event
+
+
+ +

Event type used to report when all capture processing has completed. +More...

+ + + + +

+Classes

class  Argus::IEventCaptureComplete
 Interface exposed by Events having type EVENT_TYPE_CAPTURE_COMPLETE. More...
+

Detailed Description

+

Event type used to report when all capture processing has completed.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventCaptureStarted.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventCaptureStarted.html new file mode 100644 index 0000000..44c0493 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventCaptureStarted.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: CaptureStarted Event + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
CaptureStarted Event
+
+
+ +

Event type used to report when a capture starts. +More...

+ + + + +

+Classes

class  Argus::Ext::IInternalFrameCount
 Interface used to query the internal frame count for a request. More...
+

Detailed Description

+

Event type used to report when a capture starts.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventError.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventError.html new file mode 100644 index 0000000..08a535c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventError.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: Error Event + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Error Event
+
+
+ +

Event type used to report an error. +More...

+ + + + +

+Classes

class  Argus::IEventError
 Interface exposed by Events having type EVENT_TYPE_ERROR. More...
+

Detailed Description

+

Event type used to report an error.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventQueue.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventQueue.html new file mode 100644 index 0000000..0f78ed6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusEventQueue.html @@ -0,0 +1,105 @@ + + + + + +Libargus API: EventQueue + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
EventQueue
+
+
+ +

Object to receive and expose Events from an IEventProvider. +More...

+ + + + +

+Classes

class  Argus::IEventQueue
 Interface to the core EventQueue methods. More...
+

Detailed Description

+

Object to receive and expose Events from an IEventProvider.

+
See also:
IEventProvider::createEventQueue.
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtBayerAverageMap.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtBayerAverageMap.html new file mode 100644 index 0000000..f54edf4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtBayerAverageMap.html @@ -0,0 +1,114 @@ + + + + + +Libargus API: Ext::BayerAverageMap + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::BayerAverageMap
+
+
+ +

Generates local averages of a capture's raw Bayer data. +More...

+ + + + + + +

+Classes

class  Argus::Ext::IBayerAverageMapSettings
 Interface to Bayer average map settings. More...
class  Argus::Ext::IBayerAverageMap
 Interface to Bayer average map metadata. More...
+

Detailed Description

+

Generates local averages of a capture's raw Bayer data.

+

These averages are generated for a number of small rectangles, called bins, that are evenly distributed across the image. These averages may be calculated before optical clipping to the output bit depth occurs, thus the working range of this averaging may extend beyond the optical range of the output pixels; this allows the averages to remain steady while the sensor freely modifies its optical range.

+

Any pixel values outside of the working range are clipped with respect to this averaging. Specifically, the API excludes them from the average calculation and increments the clipped pixel counter for the containing region.

+
See also:
Ext::IBayerAverageMap::getClipCounts()
+

This extension introduces two new interfaces:

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtBayerSharpnessMap.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtBayerSharpnessMap.html new file mode 100644 index 0000000..1933229 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtBayerSharpnessMap.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Ext::BayerSharpnessMap + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::BayerSharpnessMap
+
+
+ +

Adds internally-generated sharpness metrics to CaptureMetadata results. +More...

+ + + + + + +

+Classes

class  Argus::Ext::IBayerSharpnessMapSettings
 Interface to Bayer sharpness map settings. More...
class  Argus::Ext::IBayerSharpnessMap
 Interface to Bayer sharpness map metadata. More...
+

Detailed Description

+

Adds internally-generated sharpness metrics to CaptureMetadata results.

+

These are used in order to help determine the correct position of the lens to achieve the best focus. It introduces two new interfaces:

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtBlockingSessionCameraProvider.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtBlockingSessionCameraProvider.html new file mode 100644 index 0000000..79a844c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtBlockingSessionCameraProvider.html @@ -0,0 +1,108 @@ + + + + + +Libargus API: Ext::BlockingSessionCameraProvider + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::BlockingSessionCameraProvider
+
+
+ +

Adds a interface to camera provider to create a blocking capture session. +More...

+ + + + +

+Classes

class  Argus::Ext::IBlockingSessionCameraProvider
 Interface used to create blocking capture session. More...
+

Detailed Description

+

Adds a interface to camera provider to create a blocking capture session.

+

It introduces two new interface:

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtDeFog.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtDeFog.html new file mode 100644 index 0000000..0f322a4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtDeFog.html @@ -0,0 +1,108 @@ + + + + + +Libargus API: Ext::DeFog + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::DeFog
+
+
+ +

Adds internal de-fog post-processing algorithms. +More...

+ + + + +

+Classes

class  Argus::Ext::IDeFogSettings
 Interface to de-fog settings. More...
+

Detailed Description

+

Adds internal de-fog post-processing algorithms.

+

It introduces one new interface:

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtDebugCaptureSession.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtDebugCaptureSession.html new file mode 100644 index 0000000..47a0a1a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtDebugCaptureSession.html @@ -0,0 +1,108 @@ + + + + + +Libargus API: Ext::DebugCaptureSession + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::DebugCaptureSession
+
+
+ +

Adds a debug interface to dump internal libargus runtime information. +More...

+ + + + +

+Classes

class  Argus::Ext::IDebugCaptureSession
 Interface used to dump CaptureSession runtime information. More...
+

Detailed Description

+

Adds a debug interface to dump internal libargus runtime information.

+

It introduces one new interface:

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtDolWdrSensorMode.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtDolWdrSensorMode.html new file mode 100644 index 0000000..dfe4f20 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtDolWdrSensorMode.html @@ -0,0 +1,108 @@ + + + + + +Libargus API: Ext::DolWdrSensorMode + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::DolWdrSensorMode
+
+
+ +

Adds extra functionalities for the Digital Overlap (DOL) Wide Dynamic Range (WDR) sensor mode type. +More...

+ + + + +

+Classes

class  Argus::Ext::IDolWdrSensorMode
 Interface to the properties of a DOL WDR device. More...
+

Detailed Description

+

Adds extra functionalities for the Digital Overlap (DOL) Wide Dynamic Range (WDR) sensor mode type.

+

It introduces one new interface:

+
    +
  • Ext::IDolWdrSensorMode: Returns the extended properties specific to a Digital Overlap (DOL) Wide Dynamic Range (WDR) extended sensor mode. DOL WDR is a multi-exposure technology that enables fusion of various exposures from a single frame to produce a WDR image.
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtEepromData.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtEepromData.html new file mode 100644 index 0000000..17f6475 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtEepromData.html @@ -0,0 +1,99 @@ + + + + + +Libargus API: Ext::SensorEepromData + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
Ext::SensorEepromData
+
+
+ +

Adds a EEPROM interface to get EEPROM data. +More...

+

Adds a EEPROM interface to get EEPROM data.

+

It introduces one new interface:

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtFaceDetect.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtFaceDetect.html new file mode 100644 index 0000000..3f3795b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtFaceDetect.html @@ -0,0 +1,117 @@ + + + + + +Libargus API: Ext::FaceDetect + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::FaceDetect
+
+
+ +

Adds internal face-detection algorithms. +More...

+ + + + + + + + + + +

+Classes

class  Argus::Ext::IFaceDetectCaps
 Interface to expose the face detection capabilities of a CaptureSession. More...
class  Argus::Ext::IFaceDetectSettings
 Interface to face detection settings. More...
class  Argus::Ext::IFaceDetectMetadata
 Interface to overall face detection results metadata. More...
class  Argus::Ext::IFaceDetectResult
 Interface to the properties of a single face detection result. More...
+

Detailed Description

+

Adds internal face-detection algorithms.

+

It introduces four new interfaces:

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtInternalFrameCount.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtInternalFrameCount.html new file mode 100644 index 0000000..b313e9c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtInternalFrameCount.html @@ -0,0 +1,114 @@ + + + + + +Libargus API: Ext::InternalFrameCount + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::InternalFrameCount
+
+
+ +

Adds accessors for an internal frame count performance metric. +More...

+ + + + +

+Files

file  InternalFrameCount.h
 Libargus Extension: Internal Frame Count
+ + + +

+Classes

class  Argus::Ext::IInternalFrameCount
 Interface used to query the internal frame count for a request. More...
+

Detailed Description

+

Adds accessors for an internal frame count performance metric.

+

The "internal frame count" is an implementation-dependent metric that may be used to detect performance issues and producer frame drops for libargus implementations that make use of internal captures.

+

When a device is opened by a CaptureSession, the libargus implementation may begin to immediately capture and process frames from the device in order to initialize the camera subsystem even before a client request has been submitted. Similarly, frames may be captured and processed by the implementation when the client is idle or not ready for output in order to maintain the driver subsystem and/or auto-control state (exposure, white balance, etc). These captures are started and processed entirely within the libargus implementation, with no inputs from or outputs to the client application, and so are referred to as "internal" captures. These internal captures are typically submitted when there are no client requests in the capture queue or no stream buffers available for output within a sensor frame period, and so knowing when an internal capture has been submitted can be used to detect application or performance issues in cases where these conditions are not expected to occur. This extension provides this information in the form of an "internal frame count", which is the total number of captures submitted by the session including both the internal captures as well as client-submitted requests. If an internal frame count gap appears between two client-submitted captures, this means that one or more internal captures have been performed.

+

When an application is saturating the capture queue to maintain driver efficiency, either manually or by using repeat capture requests, the internal frame count can be used to detect when internal captures are submitted due to a lack of available output stream buffers. This situation leads to sensor frames that are not output to the client's output stream, which is usually an undesirable behavior that is referred to as "producer + frame drop". This is generally caused by a high consumer processing time, which starves the stream’s available buffer pool, and can often be resolved by decreasing the consumer processing time (reducing the time a buffer is acquired, decreasing system load, increasing hardware clocks, etc.)

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtNonLinearHistogram.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtNonLinearHistogram.html new file mode 100644 index 0000000..9907087 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtNonLinearHistogram.html @@ -0,0 +1,107 @@ + + + + + +Libargus API: Ext::NonLinearHistogram + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::NonLinearHistogram
+
+
+ +

This adds a method to interpret the compressed histogram data correctly It introduces one new interface: +More...

+ + + + +

+Classes

class  Argus::Ext::INonLinearHistogram
 Interface used to query the metadata to correctly interpret the compressed histogram data. More...
+

Detailed Description

+

This adds a method to interpret the compressed histogram data correctly It introduces one new interface:

+
    +
  • Ext::INonLinearHistogram: returns a list of normalized bin indices that map bins from getHistogram() to compressed pixel values.
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtOtpData.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtOtpData.html new file mode 100644 index 0000000..8d05598 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtOtpData.html @@ -0,0 +1,99 @@ + + + + + +Libargus API: Ext::SensorOtpData + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
Ext::SensorOtpData
+
+
+ +

Adds a OTP interface to get OTP data. +More...

+

Adds a OTP interface to get OTP data.

+

It introduces one new interface:

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtPwlWdrSensorMode.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtPwlWdrSensorMode.html new file mode 100644 index 0000000..35bfdaf --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtPwlWdrSensorMode.html @@ -0,0 +1,109 @@ + + + + + +Libargus API: Ext::PwlWdrSensorMode + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::PwlWdrSensorMode
+
+
+ +

Adds extra functionalities for the Piecewise Linear (PWL) Wide Dynamic Range (WDR) sensor mode type. +More...

+ + + + +

+Classes

class  Argus::Ext::IPwlWdrSensorMode
 Interface to the properties of a PWL WDR device. More...
+

Detailed Description

+

Adds extra functionalities for the Piecewise Linear (PWL) Wide Dynamic Range (WDR) sensor mode type.

+

It introduces one new interface:

+
    +
  • Ext::IPwlWdrSensorMode; returns a list of normalized float coordinates (x,y) that define the PWL compression curve used in the PWL WDR mode. This PWL compression curve is used by the sensor to compress WDR pixel values before sending them over CSI. This is done to save bandwidth for data transmission over VI-CSI. The compression converts the WDR pixel values from InputBitDepth space to OutputBitDepth space.The coordinates of the PWL compression curve can be un-normalized by scaling x-axis and y-axis values by InputBitDepth and OutputBitDepth respectively. The Bit depths can be obtained by using the respective methods in the ISensorMode interface.
    See also:
    ISensorMode
    +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSensorPrivateMetadata.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSensorPrivateMetadata.html new file mode 100644 index 0000000..6920250 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSensorPrivateMetadata.html @@ -0,0 +1,114 @@ + + + + + +Libargus API: Ext::SensorPrivateMetadata + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::SensorPrivateMetadata
+
+
+ +

Adds accessors for sensor embedded metadata. +More...

+ + + + + + + + +

+Classes

class  Argus::Ext::ISensorPrivateMetadataCaps
 Interface used to query the availability and size in bytes of sensor private metadata. More...
class  Argus::Ext::ISensorPrivateMetadataRequest
 Interface used enable the output of sensor private metadata for a request. More...
class  Argus::Ext::ISensorPrivateMetadata
 Interface used to access sensor private metadata. More...
+

Detailed Description

+

Adds accessors for sensor embedded metadata.

+

This data is metadata that the sensor embeds inside the frame, the type and formating of which depends on the sensor. It is up to the user to correctly parse the data based on the specifics of the sensor used.

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSensorPrivateMetadataClientBuffer.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSensorPrivateMetadataClientBuffer.html new file mode 100644 index 0000000..a96259e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSensorPrivateMetadataClientBuffer.html @@ -0,0 +1,108 @@ + + + + + +Libargus API: Ext::SensorPrivateMetadataClientBuffer + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::SensorPrivateMetadataClientBuffer
+
+
+ +

Adds accessors for set client buffer for sensor embedded metadata. +More...

+ + + + +

+Classes

class  Argus::Ext::ISensorPrivateMetadataClientBufferRequest
 Interface used to set client buffer for sensor private metadata for a request. More...
+

Detailed Description

+

Adds accessors for set client buffer for sensor embedded metadata.

+

Sensor embeds private info (for example PDAF data) in sensor metadata. Client using Ext::SensorPrivateMetadata API to obtain this meta data involves several memcpy. When sensor metadata size is large, this will cause high CPU usage and affect camera performance. ISensorPrivateMetadataClientBufferRequest allow client to set a client buffer and Argus write to it directly without extra memcpy. This is only supported in single process mode as in client-server (multiprocess) mode, client and server are in different process and their own address space.

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSensorTimestampTsc.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSensorTimestampTsc.html new file mode 100644 index 0000000..abeebb8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSensorTimestampTsc.html @@ -0,0 +1,108 @@ + + + + + +Libargus API: Ext::SensorTimestampTsc + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::SensorTimestampTsc
+
+
+ +

Adds a timestamp interface to get TSC HW timestamp. +More...

+ + + + +

+Classes

class  Argus::Ext::ISensorTimestampTsc
 Interface used to get TSC HW timestamp. More...
+

Detailed Description

+

Adds a timestamp interface to get TSC HW timestamp.

+

It introduces one new interface:

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSyncSensorCalibrationData.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSyncSensorCalibrationData.html new file mode 100644 index 0000000..7da57e1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtSyncSensorCalibrationData.html @@ -0,0 +1,107 @@ + + + + + +Libargus API: Ext::SyncSensorCalibrationData + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Ext::SyncSensorCalibrationData
+
+
+ +

Adds accessors for sync sensor calibration data. +More...

+ + + + +

+Classes

class  Argus::Ext::ISyncSensorCalibrationData
 Interface used to access sync sensor calibration data. More...
+

Detailed Description

+

Adds accessors for sync sensor calibration data.

+ +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtensions.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtensions.html new file mode 100644 index 0000000..795ab96 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusExtensions.html @@ -0,0 +1,134 @@ + + + + + +Libargus API: Extensions + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Extensions
+
+
+ +

This module provides a list of extensions currently available for libargus. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Modules

 Ext::BayerAverageMap
 Generates local averages of a capture's raw Bayer data.
 Ext::BayerSharpnessMap
 Adds internally-generated sharpness metrics to CaptureMetadata results.
 Ext::BlockingSessionCameraProvider
 Adds a interface to camera provider to create a blocking capture session.
 Ext::DebugCaptureSession
 Adds a debug interface to dump internal libargus runtime information.
 Ext::DeFog
 Adds internal de-fog post-processing algorithms.
 Ext::DolWdrSensorMode
 Adds extra functionalities for the Digital Overlap (DOL) Wide Dynamic Range (WDR) sensor mode type.
 Ext::FaceDetect
 Adds internal face-detection algorithms.
 Ext::InternalFrameCount
 Adds accessors for an internal frame count performance metric.
 Ext::NonLinearHistogram
 This adds a method to interpret the compressed histogram data correctly It introduces one new interface:
 Ext::PwlWdrSensorMode
 Adds extra functionalities for the Piecewise Linear (PWL) Wide Dynamic Range (WDR) sensor mode type.
 Ext::SensorEepromData
 Adds a EEPROM interface to get EEPROM data.
 Ext::SensorOtpData
 Adds a OTP interface to get OTP data.
 Ext::SensorPrivateMetadataClientBuffer
 Adds accessors for set client buffer for sensor embedded metadata.
 Ext::SensorTimestampTsc
 Adds a timestamp interface to get TSC HW timestamp.
 Ext::SyncSensorCalibrationData
 Adds accessors for sync sensor calibration data.
+

Detailed Description

+

This module provides a list of extensions currently available for libargus.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusFaceDetectResult.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusFaceDetectResult.html new file mode 100644 index 0000000..c3372ae --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusFaceDetectResult.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: FaceDetectResult + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
FaceDetectResult
+
+
+ +

Metadata for a single face detection result, returned by Ext::IFaceDetectMetadata::getFaceDetectResults. +More...

+ + + + +

+Classes

class  Argus::Ext::IFaceDetectResult
 Interface to the properties of a single face detection result. More...
+

Detailed Description

+

Metadata for a single face detection result, returned by Ext::IFaceDetectMetadata::getFaceDetectResults.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusObjects.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusObjects.html new file mode 100644 index 0000000..0407fac --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusObjects.html @@ -0,0 +1,125 @@ + + + + + +Libargus API: Objects and Interfaces + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Objects and Interfaces
+
+
+ +

This module provides a list of libargus objects and the interfaces that they support. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Modules

 Buffer
 Object that wraps an application-managed buffer for use as a capture request destination.
 BufferSettings
 Container for settings used to configure/create a Buffer.
 CameraDevice
 Object representing a single camera device.
 CameraProvider
 Object providing the entry point to the libargus runtime.
 CaptureSession
 Object that controls all operations on a single sensor.
 Event
 Container representing a single event.
 EventQueue
 Object to receive and expose Events from an IEventProvider.
 Request
 Container for all settings used by a single capture request.
 OutputStream
 Object representing an output stream capable of receiving image frames from a capture.
 OutputStreamSettings
 Container for settings used to configure/create an OutputStream.
+

Detailed Description

+

This module provides a list of libargus objects and the interfaces that they support.

+

Children of objects in this list describe either child InterfaceProviders provided by the object or specialized types of the object (ie. Event types).

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusOutputStream.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusOutputStream.html new file mode 100644 index 0000000..19af526 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusOutputStream.html @@ -0,0 +1,107 @@ + + + + + +Libargus API: OutputStream + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
OutputStream
+
+
+ +

Object representing an output stream capable of receiving image frames from a capture. +More...

+ + + + + + +

+Modules

 BufferOutputStream
 OutputStream type that writes to application-managed buffers (STREAM_TYPE_BUFFER).
 EGLOutputStream
 OutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL).
+

Detailed Description

+

Object representing an output stream capable of receiving image frames from a capture.

+

OutputStream objects are used as the destination for image frames output from capture requests. The operation of a stream, the source for its buffers, and the interfaces it supports depend on the StreamType of the stream.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusOutputStreamSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusOutputStreamSettings.html new file mode 100644 index 0000000..e38442d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusOutputStreamSettings.html @@ -0,0 +1,298 @@ + + + + + +Libargus API: OutputStreamSettings + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
OutputStreamSettings
+
+
+ +

Container for settings used to configure/create an OutputStream. +More...

+ + + + + + +

+Modules

 BufferOutputStreamSettings
 Settings type used to configure/create BufferOutputStream streams (STREAM_TYPE_BUFFER).
 EGLOutputStreamSettings
 Settings type used to configure/create EGLOutputStream streams (STREAM_TYPE_EGL).
+ + + +

+Classes

class  Argus::IOutputStreamSettings
 Interface that exposes the settings common to all OutputStream types. More...
+ + + + + +

+Functions

 Argus::DEFINE_UUID (StreamType, STREAM_TYPE_BUFFER, c723d960, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 OutputStream type that writes to application-managed Buffers.
 Argus::DEFINE_UUID (StreamType, STREAM_TYPE_EGL, 3a659360, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 OutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL).
+

Detailed Description

+

Container for settings used to configure/create an OutputStream.

+

The interfaces and configuration supported by these settings objects depend on the StreamType that was provided during settings creation (see ICaptureSession::createOutputStreamSettings). These objects are passed to ICaptureSession::createOutputStream to create OutputStream objects, after which they may be destroyed.

+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (StreamType ,
STREAM_TYPE_EGL ,
3a659360 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +

OutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL).

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (StreamType ,
STREAM_TYPE_BUFFER ,
c723d960 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +

OutputStream type that writes to application-managed Buffers.

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusRGBHistogram.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusRGBHistogram.html new file mode 100644 index 0000000..d0ce591 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusRGBHistogram.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: RGBHistogram + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
RGBHistogram
+
+
+ +

Child RGB histogram metadata, returned by ICaptureMetadata::getRGBHistogram. +More...

+ + + + +

+Classes

class  Argus::IRGBHistogram
 Interface to RGB histogram metadata (provided by ICaptureMetadata::getRGBHistogram()). More...
+

Detailed Description

+

Child RGB histogram metadata, returned by ICaptureMetadata::getRGBHistogram.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusRequest.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusRequest.html new file mode 100644 index 0000000..9b3e2e1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusRequest.html @@ -0,0 +1,130 @@ + + + + + +Libargus API: Request + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ + +
+ +

Container for all settings used by a single capture request. +More...

+ + + + + + + + +

+Modules

 AutoControlSettings
 Child auto control settings, returned by IRequest::getAutoControlSettings.
 StreamSettings
 Child per-stream settings, returned by IRequest::getStreamSettings.
 SourceSettings
 Child source settings, returned by IRequest::getSourceSettings.
+ + + + + + + + + + + + + + + + + + + +

+Classes

class  Argus::Ext::IBayerAverageMapSettings
 Interface to Bayer average map settings. More...
class  Argus::Ext::IBayerSharpnessMapSettings
 Interface to Bayer sharpness map settings. More...
class  Argus::Ext::IDeFogSettings
 Interface to de-fog settings. More...
class  Argus::Ext::IFaceDetectSettings
 Interface to face detection settings. More...
class  Argus::Ext::ISensorPrivateMetadataRequest
 Interface used enable the output of sensor private metadata for a request. More...
class  Argus::Ext::ISensorPrivateMetadataClientBufferRequest
 Interface used to set client buffer for sensor private metadata for a request. More...
class  Argus::IRequest
 Interface to the core Request settings. More...
class  Argus::IDenoiseSettings
 Interface to denoise settings. More...
class  Argus::IEdgeEnhanceSettings
 Interface to edge enhancement settings. More...
+

Detailed Description

+

Container for all settings used by a single capture request.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusSensorMode.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusSensorMode.html new file mode 100644 index 0000000..6dbc06d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusSensorMode.html @@ -0,0 +1,108 @@ + + + + + +Libargus API: SensorMode + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
SensorMode
+
+
+ +

Child object representing a CameraDevice's sensor mode, returned by ICameraProperties::getAllSensorModes. +More...

+ + + + + + + + +

+Classes

class  Argus::ISensorMode
 Interface to the core properties of a SensorMode. More...
class  Argus::Ext::IDolWdrSensorMode
 Interface to the properties of a DOL WDR device. More...
class  Argus::Ext::IPwlWdrSensorMode
 Interface to the properties of a PWL WDR device. More...
+

Detailed Description

+

Child object representing a CameraDevice's sensor mode, returned by ICameraProperties::getAllSensorModes.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusSourceSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusSourceSettings.html new file mode 100644 index 0000000..a315124 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusSourceSettings.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: SourceSettings + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
SourceSettings
+
+
+ +

Child source settings, returned by IRequest::getSourceSettings. +More...

+ + + + +

+Classes

class  Argus::ISourceSettings
 Interface to the source settings (provided by IRequest::getSourceSettings()). More...
+

Detailed Description

+

Child source settings, returned by IRequest::getSourceSettings.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusStreamCaptureMetadata.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusStreamCaptureMetadata.html new file mode 100644 index 0000000..1829f7b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusStreamCaptureMetadata.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: StreamMetadata + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
StreamMetadata
+
+
+ +

Child stream metadata, returned by ICaptureMetadata::getStreamMetadata. +More...

+ + + + +

+Classes

class  Argus::IStreamCaptureMetadata
 Interface to per-stream metadata (provided by ICaptureMetadata::getStreamMetadata()). More...
+

Detailed Description

+

Child stream metadata, returned by ICaptureMetadata::getStreamMetadata.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusStreamSettings.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusStreamSettings.html new file mode 100644 index 0000000..fd08188 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__ArgusStreamSettings.html @@ -0,0 +1,104 @@ + + + + + +Libargus API: StreamSettings + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
StreamSettings
+
+
+ +

Child per-stream settings, returned by IRequest::getStreamSettings. +More...

+ + + + +

+Classes

class  Argus::IStreamSettings
 Interface to per-stream settings (provided by IRequest::getStreamSettings()). More...
+

Detailed Description

+

Child per-stream settings, returned by IRequest::getStreamSettings.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/group__LibargusAPI.html b/jetson_multimedia_api/argus/docs/doxygen/html/group__LibargusAPI.html new file mode 100644 index 0000000..e037274 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/group__LibargusAPI.html @@ -0,0 +1,156 @@ + + + + + +Libargus API: Libargus Camera API + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+ +
+
Libargus Camera API
+
+
+ +

Libargus is an API for acquiring images and associated metadata from cameras. +More...

+ + + + + + +

+Modules

 Objects and Interfaces
 This module provides a list of libargus objects and the interfaces that they support.
 Extensions
 This module provides a list of extensions currently available for libargus.
+

Detailed Description

+

Libargus is an API for acquiring images and associated metadata from cameras.

+

The fundamental libargus operation is a capture: acquiring an image from a sensor and processing it into a final output image.

+

Currently, libargus is supported on Android and all Jetson Linux platforms.

+

Libargus is designed to address a number of fundamental requirements:

+
    +
  • Support for a wide variety of use cases (traditional photography, computational photography, video, computer vision, and other application areas.) To this end, libargus is a frame-based API; every capture is triggered by an explicit request that specifies exactly how the capture is to be performed.
  • +
+
    +
  • Support for multiple platforms, including L4T and Android.
  • +
+
    +
  • Efficient and simple integration into applications and larger frameworks. In support of this, libargus delivers images with EGLStreams, which are directly supported by other system components such as OpenGL and Cuda, and which require no buffer copies during delivery to the consumer.
  • +
+
    +
  • Expansive metadata along with each output image.
  • +
+
    +
  • Support for multiple sensors, including both separate control over independent sensors and access to synchronized multi-sensor configurations. (The latter are unsupported in the current release. When support is added, it will be available on only some NVIDIA platforms.)
  • +
+
    +
  • Version stability and extensibility, which are provided by unchanging virtual interfaces and the ability for vendors to add specialized extension interfaces.
  • +
+

Libargus provides functionality in a number of different areas:

+
    +
  • Captures with a wide variety of settings.
  • +
+
    +
  • Optional autocontrol (such as auto-exposure and auto-white-balance.)
  • +
+
    +
  • Libraries that consume the EGLStream outputs in different ways; for example, jpeg encoding or direct application access to the images.
  • +
+
    +
  • Metadata delivery via both libargus events and EGLStream metadata.
  • +
+
    +
  • Image post-processing such as noise reduction and edge sharpening.
  • +
+
    +
  • Notification of errors, image acquisition start, and other events via synchronous event queues.
  • +
+

Functionality not provided by libargus:

+
    +
  • Auto-focus. (Planned to be added in a later release.)
  • +
+
    +
  • Reprocessing of YUV images (such as that required by Android’s Zero Shutter Lag feature.)
  • +
+
    +
  • Reprocessing of Bayer (raw) images. (Planned to be added in a later release.)
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/hierarchy.html b/jetson_multimedia_api/argus/docs/doxygen/html/hierarchy.html new file mode 100644 index 0000000..2f227dd --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/hierarchy.html @@ -0,0 +1,205 @@ + + + + + +Libargus API: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
oCArgus::Array2D< T >A template class to hold a 2-dimensional array of data
oCArgus::DestructableA top level object class for libargus objects that are created and owned by the client
|oCArgus::Buffer
|oCArgus::BufferSettings
|oCArgus::CameraProvider
|oCArgus::CaptureMetadataContainerAn object that holds a CaptureMetadata instance and is used to read the capture metadata from a consumer thread directly from the embedded EGLStream metadata
|oCArgus::CaptureSession
|oCArgus::EventQueue
|oCArgus::OutputStream
|oCArgus::OutputStreamSettings
|\CArgus::Request
oCArgus::NonCopyableUtility class for libargus interfaces
|oCArgus::InterfaceThe top-level interface class
|oCArgus::InterfaceProviderThe base interface for a class that provides libargus Interfaces
|\CArgus::UniqueObj< T >Template helper emulating C++11 rvalue semantics
oCArgus::Tuple< N, T >Tuple template class
oCArgus::Tuple< 2, T >
|oCArgus::Range< T >Range template class
|\CArgus::Size2D< T >Size2D template class
oCArgus::Tuple< 4, T >
|\CArgus::Rectangle< T >Rectangle template class
oCArgus::Tuple< 4, uint32_t >
|\CArgus::Rectangle< uint32_t >
oCArgus::Tuple< BAYER_CHANNEL_COUNT, T >
|\CArgus::BayerTuple< T >BayerTuple template class
oCArgus::Tuple< COORDINATE_2D_COUNT, T >
|\CArgus::Point2D< T >Point2D template class
oCArgus::Tuple< COORDINATE_3D_COUNT, T >
|\CArgus::Point3D< T >Point3D template class
oCArgus::Tuple< RGB_CHANNEL_COUNT, T >
|\CArgus::RGBTuple< T >RGBTuple template class
\CArgus::UUIDA universally unique identifier
 \CArgus::NamedUUIDA universally unique identifier with a name (used for debugging purposes)
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/index.html b/jetson_multimedia_api/argus/docs/doxygen/html/index.html new file mode 100644 index 0000000..20a3a89 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/index.html @@ -0,0 +1,92 @@ + + + + + +Libargus API: Main Page + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
Libargus API Documentation
+
+
+

Proceed to the Libargus Camera API module for libargus documentation.

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/jquery.js b/jetson_multimedia_api/argus/docs/doxygen/html/jquery.js new file mode 100644 index 0000000..63939e7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/jquery.js @@ -0,0 +1,8 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")), +f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c) +{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/modules.html b/jetson_multimedia_api/argus/docs/doxygen/html/modules.html new file mode 100644 index 0000000..8e358ff --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/modules.html @@ -0,0 +1,146 @@ + + + + + +Libargus API: Modules + + + + + + + + + +
+
+
+ + + + + +
+
Libargus API +
+
Libargus Camera API
+
+ + + + + + + + + + +
+ +
+ +
+
+
Modules
+
+
+
Here is a list of all modules:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\Libargus Camera APILibargus is an API for acquiring images and associated metadata from cameras
 oObjects and InterfacesThis module provides a list of libargus objects and the interfaces that they support
 |oBufferObject that wraps an application-managed buffer for use as a capture request destination
 ||oBuffer TypesThe buffer type describes the type of the image resource being wrapped by the Buffer
 |||\EGLImageBufferBuffer type that wraps an EGLImage resource (BUFFER_TYPE_EGL_IMAGE)
 ||\Sync TypesThe sync type describes the type of sync object to use with the Buffer
 || \EGLSyncSync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC)
 |oBufferSettingsContainer for settings used to configure/create a Buffer
 ||\Buffer TypesProvides buffer type specific configuration settings
 || \EGLImageBufferSettingsSettings type used to configure/create EGLImageBuffer Buffers (BUFFER_TYPE_EGL_IMAGE)
 |oCameraDeviceObject representing a single camera device
 ||\SensorModeChild object representing a CameraDevice's sensor mode, returned by ICameraProperties::getAllSensorModes
 |oCameraProviderObject providing the entry point to the libargus runtime
 |oCaptureMetadataContainer for metadata generated by a single completed capture
 ||oStreamMetadataChild stream metadata, returned by ICaptureMetadata::getStreamMetadata
 ||oRGBHistogramChild RGB histogram metadata, returned by ICaptureMetadata::getRGBHistogram
 ||oBayerHistogramChild Bayer histogram metadata, returned by ICaptureMetadata::getBayerHistogram
 ||\FaceDetectResultMetadata for a single face detection result, returned by Ext::IFaceDetectMetadata::getFaceDetectResults
 |oCaptureSessionObject that controls all operations on a single sensor
 |oEventContainer representing a single event
 ||oError EventEvent type used to report an error
 ||oCaptureStarted EventEvent type used to report when a capture starts
 ||\CaptureComplete EventEvent type used to report when all capture processing has completed
 |oEventQueueObject to receive and expose Events from an IEventProvider
 |oRequestContainer for all settings used by a single capture request
 ||oAutoControlSettingsChild auto control settings, returned by IRequest::getAutoControlSettings
 ||oStreamSettingsChild per-stream settings, returned by IRequest::getStreamSettings
 ||\SourceSettingsChild source settings, returned by IRequest::getSourceSettings
 |oOutputStreamObject representing an output stream capable of receiving image frames from a capture
 ||oBufferOutputStreamOutputStream type that writes to application-managed buffers (STREAM_TYPE_BUFFER)
 ||\EGLOutputStreamOutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL)
 |\OutputStreamSettingsContainer for settings used to configure/create an OutputStream
 | oBufferOutputStreamSettingsSettings type used to configure/create BufferOutputStream streams (STREAM_TYPE_BUFFER)
 | \EGLOutputStreamSettingsSettings type used to configure/create EGLOutputStream streams (STREAM_TYPE_EGL)
 \ExtensionsThis module provides a list of extensions currently available for libargus
  oExt::BayerAverageMapGenerates local averages of a capture's raw Bayer data
  oExt::BayerSharpnessMapAdds internally-generated sharpness metrics to CaptureMetadata results
  oExt::BlockingSessionCameraProviderAdds a interface to camera provider to create a blocking capture session
  oExt::DebugCaptureSessionAdds a debug interface to dump internal libargus runtime information
  oExt::DeFogAdds internal de-fog post-processing algorithms
  oExt::DolWdrSensorModeAdds extra functionalities for the Digital Overlap (DOL) Wide Dynamic Range (WDR) sensor mode type
  oExt::FaceDetectAdds internal face-detection algorithms
  oExt::InternalFrameCountAdds accessors for an internal frame count performance metric
  oExt::NonLinearHistogramThis adds a method to interpret the compressed histogram data correctly It introduces one new interface:
  oExt::PwlWdrSensorModeAdds extra functionalities for the Piecewise Linear (PWL) Wide Dynamic Range (WDR) sensor mode type
  oExt::SensorEepromDataAdds a EEPROM interface to get EEPROM data
  oExt::SensorOtpDataAdds a OTP interface to get OTP data
  oExt::SensorPrivateMetadataAdds accessors for sensor embedded metadata
  oExt::SensorPrivateMetadataClientBufferAdds accessors for set client buffer for sensor embedded metadata
  oExt::SensorTimestampTscAdds a timestamp interface to get TSC HW timestamp
  \Ext::SyncSensorCalibrationDataAdds accessors for sync sensor calibration data
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespaceArgus.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespaceArgus.html new file mode 100644 index 0000000..c356e59 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespaceArgus.html @@ -0,0 +1,11674 @@ + + + + + +Libargus API: Argus Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
Argus Namespace Reference
+
+
+ + + +

+Namespaces

namespace  Ext
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  Buffer
class  BufferSettings
class  IBufferOutputStreamSettings
 Interface that exposes the configuration available to Buffer-based OutputStreams. More...
class  IBufferOutputStream
 Interface that provides the methods used with Buffer-based OutputStreams. More...
class  IBuffer
 Interface that provides the core methods for Buffer objects. More...
class  CameraDevice
class  ICameraProperties
 Interface to the core CameraDevice properties. More...
class  SensorMode
class  ISensorMode
 Interface to the core properties of a SensorMode. More...
class  CameraProvider
class  ICameraProvider
 Interface to the core CameraProvider methods. More...
class  CaptureMetadata
class  CaptureMetadataContainer
 An object that holds a CaptureMetadata instance and is used to read the capture metadata from a consumer thread directly from the embedded EGLStream metadata. More...
class  IBayerHistogram
 Interface to Bayer histogram metadata (provided by ICaptureMetadata::getBayerHistogram()). More...
class  IRGBHistogram
 Interface to RGB histogram metadata (provided by ICaptureMetadata::getRGBHistogram()). More...
class  IStreamCaptureMetadata
 Interface to per-stream metadata (provided by ICaptureMetadata::getStreamMetadata()). More...
class  ICaptureMetadata
 Interface to the core capture metadata. More...
class  IDenoiseMetadata
 Interface to denoise metadata. More...
class  IEdgeEnhanceMetadata
 Interface to edge enhancement metadata. More...
class  CaptureSession
class  ICaptureSession
 Interface to the core CaptureSession methods. More...
class  IEGLImageBufferSettings
 Interface that provides the settings used to configure EGLImage Buffer creation. More...
class  IEGLImageBuffer
 Interface that provides methods to EGLImage Buffers. More...
class  IEGLOutputStreamSettings
 Interface that exposes the settings used for EGLStream-linked OutputStream creation. More...
class  IEGLOutputStream
 Interface that exposes the methods available to an EGLStream-linked OutputStream. More...
class  IEGLSync
 Interface that provides EGLSync input and output methods for a Buffer. More...
class  Event
class  EventType
 A unique identifier for a particular type of Event. More...
class  IEvent
 Interface to the common Event properties. More...
class  IEventError
 Interface exposed by Events having type EVENT_TYPE_ERROR. More...
class  IEventCaptureComplete
 Interface exposed by Events having type EVENT_TYPE_CAPTURE_COMPLETE. More...
class  IEventProvider
 Interface for an object which generates Events (such as CaptureSession). More...
class  EventQueue
class  IEventQueue
 Interface to the core EventQueue methods. More...
class  Request
class  IRequest
 Interface to the core Request settings. More...
class  ISourceSettings
 Interface to the source settings (provided by IRequest::getSourceSettings()). More...
class  IAutoControlSettings
 Interface to the auto control settings (provided by IRequest::getAutoControlSettings()). More...
class  IStreamSettings
 Interface to per-stream settings (provided by IRequest::getStreamSettings()). More...
class  IDenoiseSettings
 Interface to denoise settings. More...
class  IEdgeEnhanceSettings
 Interface to edge enhancement settings. More...
class  OutputStream
class  OutputStreamSettings
class  IOutputStreamSettings
 Interface that exposes the settings common to all OutputStream types. More...
class  NonCopyable
 Utility class for libargus interfaces. More...
class  Interface
 The top-level interface class. More...
class  InterfaceID
 A unique identifier for a libargus Interface. More...
class  InterfaceProvider
 The base interface for a class that provides libargus Interfaces. More...
class  Destructable
 A top level object class for libargus objects that are created and owned by the client. More...
class  UniqueObj
 Template helper emulating C++11 rvalue semantics. More...
class  Tuple
 Tuple template class. More...
class  BayerTuple
 BayerTuple template class. More...
class  RGBTuple
 RGBTuple template class. More...
class  Point2D
 Point2D template class. More...
class  Point3D
 Point3D template class. More...
class  Size2D
 Size2D template class. More...
class  Rectangle
 Rectangle template class. More...
class  Range
 Range template class. More...
class  AcRegion
 Defines an autocontrol region of interest (in pixel space). More...
class  Array2D
 A template class to hold a 2-dimensional array of data. More...
struct  UUID
 A universally unique identifier. More...
class  NamedUUID
 A universally unique identifier with a name (used for debugging purposes). More...
+ + +

+Typedefs

typedef uint32_t AutoControlId
+ + + + + + + + + + +

+Enumerations

enum  ArgusInjectError { ArgusInjectError_ErrorLongLine = 1 + }
enum  Status {
+  STATUS_OK = 0, +STATUS_INVALID_PARAMS = 1, +STATUS_INVALID_SETTINGS = 2, +STATUS_UNAVAILABLE = 3, +
+  STATUS_OUT_OF_MEMORY = 4, +STATUS_UNIMPLEMENTED = 5, +STATUS_TIMEOUT = 6, +STATUS_CANCELLED = 7, +
+  STATUS_DISCONNECTED = 8, +STATUS_END_OF_STREAM = 9, +STATUS_COUNT +
+ }
 Status values returned by API function calls. More...
enum  BayerChannel {
+  BAYER_CHANNEL_R, +BAYER_CHANNEL_G_EVEN, +BAYER_CHANNEL_G_ODD, +BAYER_CHANNEL_B, +
+  BAYER_CHANNEL_COUNT +
+ }
 Color channel constants for Bayer data. More...
enum  Coordinate {
+  COORDINATE_X, +COORDINATE_Y, +COORDINATE_Z, +COORDINATE_2D_COUNT = 2, +
+  COORDINATE_3D_COUNT = 3 +
+ }
 Coordinates used for 2D and 3D points. More...
enum  RGBChannel { RGB_CHANNEL_R, +RGB_CHANNEL_G, +RGB_CHANNEL_B, +RGB_CHANNEL_COUNT + }
 Color channel constants for RGB data. More...
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

 DEFINE_UUID (StreamType, STREAM_TYPE_BUFFER, c723d960, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 OutputStream type that writes to application-managed Buffers.
 DEFINE_NAMED_UUID_CLASS (BufferType)
 DEFINE_UUID (BufferType, BUFFER_TYPE_NONE, c723d961, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 DEFINE_NAMED_UUID_CLASS (SyncType)
 DEFINE_UUID (SyncType, SYNC_TYPE_NONE, c723d962, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_BUFFER_OUTPUT_STREAM_SETTINGS, c723d963, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_BUFFER_OUTPUT_STREAM, c723d964, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_BUFFER, c723d965, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_CAMERA_PROPERTIES, 436d2a73, c85b, 4a29, bce5, 15, 60, 6e, 35, 86, 91)
 DEFINE_UUID (InterfaceID, IID_SENSOR_MODE, e69015e0, db2a, 11e5, a837, 18, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_CAMERA_PROVIDER, a00f33d7, 8564, 4226, 955c, 2d, 1b, cd, af, a3, 5f)
 DEFINE_UUID (InterfaceID, IID_BAYER_HISTOGRAM, 50bc4f1c, 6424, beb7, baae, b0, 90, c9, c3, 25, 9e)
 DEFINE_UUID (InterfaceID, IID_RGB_HISTOGRAM, 50bc4f1d, 6424, beb7, baae, b0, 90, c9, c3, 25, 9e)
 DEFINE_UUID (InterfaceID, IID_STREAM_CAPTURE_METADATA, 61cbe0a8, 0ee1, 4c67, baae, 02, 02, 1a, b8, d9, 47)
 DEFINE_UUID (InterfaceID, IID_CAPTURE_METADATA, 5f6ac5d4, 59e8, 45d0, 8bac, 38, 09, 1f, f8, 74, a9)
 DEFINE_UUID (InterfaceID, IID_DENOISE_METADATA, 7A461D23, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (InterfaceID, IID_EDGE_ENHANCE_METADATA, 7A461D24, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (InterfaceID, IID_CAPTURE_SESSION, 813644f5, bc21, 4013, af44, dd, da, b5, 7a, 9d, 13)
 DEFINE_UUID (BufferType, BUFFER_TYPE_EGL_IMAGE, c723d966, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 Buffer type that wraps an EGLImage resource.
 DEFINE_UUID (InterfaceID, IID_EGL_IMAGE_BUFFER_SETTINGS, c723d967, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_EGL_IMAGE_BUFFER, c723d968, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (StreamType, STREAM_TYPE_EGL, 3a659360, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 OutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL).
 DEFINE_NAMED_UUID_CLASS (EGLStreamMode)
 Defines the EGLStream queue mode of operation (see IEGLOutputStreamSettings::setMode).
 DEFINE_UUID (EGLStreamMode, EGL_STREAM_MODE_MAILBOX, 33661d40, 3ee2, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (EGLStreamMode, EGL_STREAM_MODE_FIFO, 33661d41, 3ee2, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_EGL_OUTPUT_STREAM_SETTINGS, 3a659361, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_EGL_OUTPUT_STREAM, 3a659362, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (SyncType, SYNC_TYPE_EGL_SYNC, 5df77c90, 5d1b, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)
 Sync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC).
 DEFINE_UUID (InterfaceID, IID_EGL_SYNC, 5df77c91, 5d1b, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (EventType, EVENT_TYPE_ERROR, 2c80d8b0, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (EventType, EVENT_TYPE_CAPTURE_STARTED, 2c80d8b1, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (EventType, EVENT_TYPE_CAPTURE_COMPLETE, 2c80d8b2, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_EVENT, 98bcb49e, fd7d, 11e4, a322, 16, 97, f9, 25, ec, 7b)
 DEFINE_UUID (InterfaceID, IID_EVENT_ERROR, 13e0fc70, 1ab6, 11e5, b939, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_EVENT_CAPTURE_COMPLETE, 8b2b40b5, f1e4, 4c4d, ae1c, f3, 93, f6, 54, 06, d5)
 DEFINE_UUID (InterfaceID, IID_EVENT_PROVIDER, 523ed330, 25dc, 11e5, 867f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_EVENT_QUEUE, 944b11f6, e512, 49ad, 8573, fc, 82, 3e, 02, 25, ed)
 DEFINE_UUID (ExtensionName, EXT_BAYER_AVERAGE_MAP, 12c3de20, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (ExtensionName, EXT_BAYER_SHARPNESS_MAP, 7d5e0470, 4ea6, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (ExtensionName, EXT_BLOCKING_SESSION_CAMERA_PROVIDER, 1fff5f04, 2ea9, 4558, 8e92, c2, 4b, 0b, 82, b9, af)
 DEFINE_UUID (ExtensionName, EXT_DEBUG_CAPTURE_SESSION, 1fee5f03, 2ea9, 4558, 8e92, c2, 4b, 0b, 82, b9, af)
 DEFINE_UUID (ExtensionName, EXT_DE_FOG, 9cf05bd0, 1d99, 4be8, 8732, 75, 99, 55, 7f, ed, 3a)
 DEFINE_UUID (ExtensionName, EXT_DOL_WDR_SENSOR_MODE, 569fb210, 70d9, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (ExtensionName, EXT_FACE_DETECT, 40412bb0, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (ExtensionName, EXT_INTERNAL_FRAME_COUNT, 37afdbda, 0020, 4f91, 957b, 46, ea, eb, 79, 80, c7)
 DEFINE_UUID (ExtensionName, EXT_NON_LINEAR_HISTOGRAM, 45b6a850, e801, 11e8, b568, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (ExtensionName, EXT_PWL_WDR_SENSOR_MODE, 7f510b90, 582b, 11e6, bbb5, 40, 16, 7e, ab, 86, 92)
 DEFINE_UUID (ExtensionName, EXT_SENSOR_EEPROM_DATA, d14b2030, 181a, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (ExtensionName, EXT_SENSOR_OTP_DATA, 1651af90, 19b1, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (ExtensionName, EXT_SENSOR_PRIVATE_METADATA, 7acf4352, 3a75, 46e7, 9af1, 8d, 71, da, 83, 15, 23)
 DEFINE_UUID (ExtensionName, EXT_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER, 85cbb9b6, cd7f, 4e8c, 9462, 9f, 21, cd, a7, 40, 1c)
 DEFINE_UUID (ExtensionName, EXT_SENSOR_TIMESTAMP_TSC, e6cc1360, 06ea, 11eb, 8b6e, 08, 00, 20, 0c, 9a, 66)
 DEFINE_NAMED_UUID_CLASS (DistortionType)
 The DistortionType of a sync sensor defines the type of distortion model.
 DEFINE_UUID (DistortionType, DISTORTION_TYPE_POLYNOMIAL, 23e59580, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (DistortionType, DISTORTION_TYPE_FISHEYE, 23e59581, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (DistortionType, DISTORTION_TYPE_OMINI_DIRECTIONAL, 23e5bc90, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_NAMED_UUID_CLASS (MappingType)
 The MappingType of a sync sensor defines the type of mapping used for fisheye distortion model.
 DEFINE_UUID (MappingType, MAPPING_TYPE_EQUIDISTANT, 9e7f3c10, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (MappingType, MAPPING_TYPE_EQUISOLID, 9e7f3c11, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (MappingType, MAPPING_TYPE_ORTHOGRAPHIC, 9e7f3c12, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (MappingType, MAPPING_TYPE_STEREOGRAPHIC, 9e7f3c13, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (ExtensionName, EXT_SYNC_SENSOR_CALIBRATION_DATA, 10845a70, d52f, 11ea, 8b6e, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_REQUEST, eb9b3750, fc8d, 455f, 8e0f, 91, b3, 3b, d9, 4e, c5)
 DEFINE_UUID (InterfaceID, IID_SOURCE_SETTINGS, eb7ae38c, 3c62, 4161, a92a, a6, 4f, ba, c6, 38, 83)
 DEFINE_UUID (InterfaceID, IID_AUTO_CONTROL_SETTINGS, 1f2ad1c6, cb13, 440b, bc95, 3f, fd, 0d, 19, 91, db)
 DEFINE_UUID (InterfaceID, IID_STREAM_SETTINGS, c477aeaf, 9cc8, 4467, a834, c7, 07, d7, b6, 9f, a4)
 DEFINE_UUID (InterfaceID, IID_DENOISE_SETTINGS, 7A461D20, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (InterfaceID, IID_EDGE_ENHANCE_SETTINGS, 7A461D21, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 DEFINE_NAMED_UUID_CLASS (StreamType)
 The general operation, buffer source, and interfaces supported by a stream object are defined by its core StreamType.
 DEFINE_UUID (InterfaceID, IID_OUTPUT_STREAM_SETTINGS, 52f2b830, 3d52, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 DEFINE_NAMED_UUID_CLASS (AeAntibandingMode)
 Auto Exposure Anti-Banding Modes.
 DEFINE_UUID (AeAntibandingMode, AE_ANTIBANDING_MODE_OFF, AD1E5560, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AeAntibandingMode, AE_ANTIBANDING_MODE_AUTO, AD1E5561, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AeAntibandingMode, AE_ANTIBANDING_MODE_50HZ, AD1E5562, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AeAntibandingMode, AE_ANTIBANDING_MODE_60HZ, AD1E5563, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_NAMED_UUID_CLASS (AeFlickerState)
 Auto Exposure Flicker States.
 DEFINE_UUID (AeFlickerState, AE_FLICKER_NONE, AD1E5564, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AeFlickerState, AE_FLICKER_50HZ, AD1E5565, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AeFlickerState, AE_FLICKER_60HZ, AD1E5566, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_NAMED_UUID_CLASS (AeState)
 Auto Exposure States.
 DEFINE_UUID (AeState, AE_STATE_INACTIVE, D2EBEA50, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AeState, AE_STATE_SEARCHING, D2EBEA51, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AeState, AE_STATE_CONVERGED, D2EBEA52, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AeState, AE_STATE_FLASH_REQUIRED, D2EBEA53, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AeState, AE_STATE_TIMEOUT, D2EBEA54, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_NAMED_UUID_CLASS (AwbMode)
 Auto White Balance (AWB) Modes.
 DEFINE_UUID (AwbMode, AWB_MODE_OFF, FB3F365A, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (AwbMode, AWB_MODE_AUTO, FB3F365B, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (AwbMode, AWB_MODE_INCANDESCENT, FB3F365C, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (AwbMode, AWB_MODE_FLUORESCENT, FB3F365D, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (AwbMode, AWB_MODE_WARM_FLUORESCENT, FB3F365E, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (AwbMode, AWB_MODE_DAYLIGHT, FB3F365F, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (AwbMode, AWB_MODE_CLOUDY_DAYLIGHT, FB3F3660, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (AwbMode, AWB_MODE_TWILIGHT, FB3F3661, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (AwbMode, AWB_MODE_SHADE, FB3F3662, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (AwbMode, AWB_MODE_MANUAL, 20FB45DA, C49F, 4293, AB02, 13, 3F, 8C, CA, DD, 69)
 DEFINE_NAMED_UUID_CLASS (AwbState)
 Auto White-Balance States.
 DEFINE_UUID (AwbState, AWB_STATE_INACTIVE, E33CDB30, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AwbState, AWB_STATE_SEARCHING, E33CDB31, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AwbState, AWB_STATE_CONVERGED, E33CDB32, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (AwbState, AWB_STATE_LOCKED, E33CDB33, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)
 DEFINE_NAMED_UUID_CLASS (CaptureIntent)
 A CaptureIntent may be provided during capture request creation to initialize the new Request with default settings that are appropriate for captures of the given intent.
 DEFINE_UUID (CaptureIntent, CAPTURE_INTENT_MANUAL, FB3F3663, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (CaptureIntent, CAPTURE_INTENT_PREVIEW, FB3F3664, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (CaptureIntent, CAPTURE_INTENT_STILL_CAPTURE, FB3F3665, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (CaptureIntent, CAPTURE_INTENT_VIDEO_RECORD, FB3F3666, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (CaptureIntent, CAPTURE_INTENT_VIDEO_SNAPSHOT, FB3F3667, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_NAMED_UUID_CLASS (DenoiseMode)
 Denoise (noise reduction) Modes.
 DEFINE_UUID (DenoiseMode, DENOISE_MODE_OFF, FB3F3668, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (DenoiseMode, DENOISE_MODE_FAST, FB3F3669, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_UUID (DenoiseMode, DENOISE_MODE_HIGH_QUALITY, FB3F366A, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)
 DEFINE_NAMED_UUID_CLASS (EdgeEnhanceMode)
 Edge Enhance Modes.
 DEFINE_UUID (EdgeEnhanceMode, EDGE_ENHANCE_MODE_OFF, F7100B40, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (EdgeEnhanceMode, EDGE_ENHANCE_MODE_FAST, F7100B41, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 DEFINE_UUID (EdgeEnhanceMode, EDGE_ENHANCE_MODE_HIGH_QUALITY, F7100B42, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)
 DEFINE_NAMED_UUID_CLASS (ExtensionName)
 Extension Names.
 DEFINE_NAMED_UUID_CLASS (PixelFormat)
 Pixel formats.
 DEFINE_UUID (PixelFormat, PIXEL_FMT_UNKNOWN, 00000000, 93d5, 11e5, 0000, 1c, b7, 2c, ef, d4, 1e)
 DEFINE_UUID (PixelFormat, PIXEL_FMT_Y8, 569be14a, 93d5, 11e5, 91bc, 1c, b7, 2c, ef, d4, 1e)
 DEFINE_UUID (PixelFormat, PIXEL_FMT_Y16, 56ddb19c, 93d5, 11e5, 8e2c, 1c, b7, 2c, ef, d4, 1e)
 DEFINE_UUID (PixelFormat, PIXEL_FMT_YCbCr_420_888, 570c10e6, 93d5, 11e5, 8ff3, 1c, b7, 2c, ef, d4, 1e)
 DEFINE_UUID (PixelFormat, PIXEL_FMT_YCbCr_422_888, 573a7940, 93d5, 11e5, 99c2, 1c, b7, 2c, ef, d4, 1e)
 DEFINE_UUID (PixelFormat, PIXEL_FMT_YCbCr_444_888, 576043dc, 93d5, 11e5, 8983, 1c, b7, 2c, ef, d4, 1e)
 DEFINE_UUID (PixelFormat, PIXEL_FMT_JPEG_BLOB, 578b08c4, 93d5, 11e5, 9686, 1c, b7, 2c, ef, d4, 1e)
 DEFINE_UUID (PixelFormat, PIXEL_FMT_RAW16, 57b484d8, 93d5, 11e5, aeb6, 1c, b7, 2c, ef, d4, 1e)
 DEFINE_UUID (PixelFormat, PIXEL_FMT_P016, 57b484d9, 93d5, 11e5, aeb6, 1c, b7, 2c, ef, d4, 1e)
 DEFINE_NAMED_UUID_CLASS (SensorModeType)
 The SensorModeType of a sensor defines the type of image data that is output by the imaging sensor before any sort of image processing (ie.
 DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_DEPTH, 64483464, 4b91, 11e6, bbbd, 40, 16, 7e, ab, 86, 92)
 DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_YUV, 6453e00c, 4b91, 11e6, 871d, 40, 16, 7e, ab, 86, 92)
 DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_RGB, 6463d4c6, 4b91, 11e6, 88a3, 40, 16, 7e, ab, 86, 92)
 DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_BAYER, 646f04ea, 4b91, 11e6, 9c06, 40, 16, 7e, ab, 86, 92)
 DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_BAYER_PWL, f6a08220, 6a0f, 11eb, 8572, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (SensorModeType, SENSOR_MODE_TYPE_BAYER_DOL, f6a08221, 6a0f, 11eb, 8572, 08, 00, 20, 0c, 9a, 66)
 DEFINE_NAMED_UUID_CLASS (SensorPlacement)
 SensorPlacement defines the placement of the sensor on the module.
 DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_REAR_OR_BOTTOM_OR_BOTTOM_LEFT, 01dba8b0, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_FRONT_OR_TOP_OR_CENTER_LEFT, 01dba8b1, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_CENTER_OR_CENTER_RIGHT, 01dba8b2, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_TOP_LEFT, 01dba8b3, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_BOTTOM_RIGHT, 01dba8b4, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (SensorPlacement, SENSOR_PLACEMENT_TOP_RIGHT, 01dba8b5, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_NAMED_UUID_CLASS (BayerPhase)
 Bayer Phases.
 DEFINE_UUID (BayerPhase, BAYER_PHASE_UNKNOWN, b9d43270, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (BayerPhase, BAYER_PHASE_RGGB, b9d43271, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (BayerPhase, BAYER_PHASE_BGGR, b9d43272, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (BayerPhase, BAYER_PHASE_GRBG, b9d43273, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (BayerPhase, BAYER_PHASE_GBRG, b9d43274, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)
template<typename TheInterface >
TheInterface * interface_cast (InterfaceProvider *obj)
 Interface-casting helper similar to dynamic_cast.
template<typename TheInterface >
TheInterface * interface_cast (const InterfaceProvider *obj)
template<typename TheInterface , typename TObject >
TheInterface * interface_cast (const UniqueObj< TObject > &obj)
+ + + + +

+Variables

const uint64_t TIMEOUT_INFINITE = 0xFFFFFFFFFFFFFFFF
 Constant used for infinite timeouts.
const uint32_t MAX_UUID_NAME_SIZE = 32
+

Typedef Documentation

+ +
+
+ + + + +
typedef uint32_t Argus::AutoControlId
+
+ +

Definition at line 937 of file Types.h.

+ +
+
+

Enumeration Type Documentation

+ +
+
+ + + + +
enum Argus::ArgusInjectError
+
+
Enumerator:
+ +
ArgusInjectError_ErrorLongLine  +
+
+
+ +

Definition at line 42 of file DebugCaptureSession.h.

+ +
+
+ +
+
+ + + + +
enum Argus::BayerChannel
+
+ +

Color channel constants for Bayer data.

+
Enumerator:
+ + + + + +
BAYER_CHANNEL_R  +
BAYER_CHANNEL_G_EVEN  +
BAYER_CHANNEL_G_ODD  +
BAYER_CHANNEL_B  +
BAYER_CHANNEL_COUNT  +
+
+
+ +

Definition at line 132 of file Types.h.

+ +
+
+ +
+
+ + + + +
enum Argus::Coordinate
+
+ +

Coordinates used for 2D and 3D points.

+
Enumerator:
+ + + + + +
COORDINATE_X  +
COORDINATE_Y  +
COORDINATE_Z  +
COORDINATE_2D_COUNT  +
COORDINATE_3D_COUNT  +
+
+
+ +

Definition at line 145 of file Types.h.

+ +
+
+ +
+
+ + + + +
enum Argus::RGBChannel
+
+ +

Color channel constants for RGB data.

+
Enumerator:
+ + + + +
RGB_CHANNEL_R  +
RGB_CHANNEL_G  +
RGB_CHANNEL_B  +
RGB_CHANNEL_COUNT  +
+
+
+ +

Definition at line 158 of file Types.h.

+ +
+
+ +
+
+ + + + +
enum Argus::Status
+
+ +

Status values returned by API function calls.

+
Enumerator:
+ + + + + + + + + + + +
STATUS_OK  +

Function succeeded.

+
STATUS_INVALID_PARAMS  +

The set of parameters passed was invalid.

+
STATUS_INVALID_SETTINGS  +

The requested settings are invalid.

+
STATUS_UNAVAILABLE  +

The requested device is unavailable.

+
STATUS_OUT_OF_MEMORY  +

An operation failed because of insufficient mavailable memory.

+
STATUS_UNIMPLEMENTED  +

This method has not been implemented.

+
STATUS_TIMEOUT  +

An operation timed out.

+
STATUS_CANCELLED  +

The capture was aborted.

+
See also:
ICaptureSession::cancelRequests()
+
STATUS_DISCONNECTED  +

The stream or other resource has been disconnected.

+
STATUS_END_OF_STREAM  +

End of stream, used by Stream objects.

+
STATUS_COUNT  +
+
+
+ +

Definition at line 93 of file Types.h.

+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (DistortionType )
+
+ +

The DistortionType of a sync sensor defines the type of distortion model.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (StreamType )
+
+ +

The general operation, buffer source, and interfaces supported by a stream object are defined by its core StreamType.

+

The only StreamType currently supported is STREAM_TYPE_EGL (see EGLStream.h).

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (MappingType )
+
+ +

The MappingType of a sync sensor defines the type of mapping used for fisheye distortion model.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (EGLStreamMode )
+
+ +

Defines the EGLStream queue mode of operation (see IEGLOutputStreamSettings::setMode).

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (BufferType )
+
+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (SyncType )
+
+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (AeAntibandingMode )
+
+ +

Auto Exposure Anti-Banding Modes.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (AeFlickerState )
+
+ +

Auto Exposure Flicker States.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (AeState )
+
+ +

Auto Exposure States.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (AwbMode )
+
+ +

Auto White Balance (AWB) Modes.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (AwbState )
+
+ +

Auto White-Balance States.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (CaptureIntent )
+
+ +

A CaptureIntent may be provided during capture request creation to initialize the new Request with default settings that are appropriate for captures of the given intent.

+

More details regarding each intent are as follows: MANUAL intent disables auto white balance and auto-focus. PREVIEW intent disables noise reduction related post-processing in order to reduce latency and resource usage. STILL_CAPTURE intent enables Noise Reduction related post-processing in order to optimize still image quality. VIDEO_RECORD intent enables motion sensors related post-processing to optimize the video quality. Apart from above processing blocks each intent also helps in optimizing the processing resource usage appropriate for that intent.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (DenoiseMode )
+
+ +

Denoise (noise reduction) Modes.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (EdgeEnhanceMode )
+
+ +

Edge Enhance Modes.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (ExtensionName )
+
+ +

Extension Names.

+

Note that ExtensionName UUIDs are defined by their respective extension headers.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (PixelFormat )
+
+ +

Pixel formats.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (SensorModeType )
+
+ +

The SensorModeType of a sensor defines the type of image data that is output by the imaging sensor before any sort of image processing (ie.

+

pre-ISP format).

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (SensorPlacement )
+
+ +

SensorPlacement defines the placement of the sensor on the module.

+ +
+
+ +
+
+ + + + + + + + +
Argus::DEFINE_NAMED_UUID_CLASS (BayerPhase )
+
+ +

Bayer Phases.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (DistortionType ,
DISTORTION_TYPE_POLYNOMIAL ,
23e59580 ,
17ff ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (DistortionType ,
DISTORTION_TYPE_FISHEYE ,
23e59581 ,
17ff ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (DistortionType ,
DISTORTION_TYPE_OMINI_DIRECTIONAL ,
23e5bc90 ,
17ff ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_SOURCE_SETTINGS ,
eb7ae38c ,
3c62 ,
4161 ,
a92a ,
a6 ,
4f ,
ba ,
c6 ,
38 ,
83  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_DE_FOG ,
9cf05bd0 ,
1d99 ,
4be8 ,
8732 ,
75 ,
99 ,
55 ,
7f ,
ed ,
3a  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_SENSOR_TIMESTAMP_TSC ,
e6cc1360 ,
06ea ,
11eb ,
8b6e ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_SENSOR_EEPROM_DATA ,
d14b2030 ,
181a ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_SENSOR_OTP_DATA ,
1651af90 ,
19b1 ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_BLOCKING_SESSION_CAMERA_PROVIDER ,
1fff5f04 ,
2ea9 ,
4558 ,
8e92 ,
c2 ,
4b ,
0b ,
82 ,
b9 ,
af  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_NON_LINEAR_HISTOGRAM ,
45b6a850 ,
e801 ,
11e8 ,
b568 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_BAYER_SHARPNESS_MAP ,
7d5e0470 ,
4ea6 ,
11e6 ,
bdf4 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_DOL_WDR_SENSOR_MODE ,
569fb210 ,
70d9 ,
11e7 ,
9598 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_FACE_DETECT ,
40412bb0 ,
ba24 ,
11e5 ,
a837 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_SENSOR_PRIVATE_METADATA ,
7acf4352 ,
3a75 ,
46e7 ,
9af1 ,
8d ,
71 ,
da ,
83 ,
15 ,
23  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (MappingType ,
MAPPING_TYPE_EQUIDISTANT ,
9e7f3c10 ,
17ff ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EVENT_PROVIDER ,
523ed330 ,
25dc ,
11e5 ,
867f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_DEBUG_CAPTURE_SESSION ,
1fee5f03 ,
2ea9 ,
4558 ,
8e92 ,
c2 ,
4b ,
0b ,
82 ,
b9 ,
af  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (MappingType ,
MAPPING_TYPE_EQUISOLID ,
9e7f3c11 ,
17ff ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER ,
85cbb9b6 ,
cd7f ,
4e8c ,
9462 ,
9f ,
21 ,
cd ,
a7 ,
40 ,
1c  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (MappingType ,
MAPPING_TYPE_ORTHOGRAPHIC ,
9e7f3c12 ,
17ff ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (MappingType ,
MAPPING_TYPE_STEREOGRAPHIC ,
9e7f3c13 ,
17ff ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_PWL_WDR_SENSOR_MODE ,
7f510b90 ,
582b ,
11e6 ,
bbb5 ,
40 ,
16 ,
7e ,
ab ,
86 ,
92  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_BAYER_AVERAGE_MAP ,
12c3de20 ,
64c5 ,
11e6 ,
bdf4 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EGL_SYNC ,
5df77c91 ,
5d1b ,
11e7 ,
9598 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EVENT_QUEUE ,
944b11f6 ,
e512 ,
49ad ,
8573 ,
fc ,
82 ,
3e ,
02 ,
25 ,
ed  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_CAPTURE_SESSION ,
813644f5 ,
bc21 ,
4013 ,
af44 ,
dd ,
da ,
b5 ,
7a ,
9d ,
13  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_SYNC_SENSOR_CALIBRATION_DATA ,
10845a70 ,
d52f ,
11ea ,
8b6e ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_CAMERA_PROPERTIES ,
436d2a73 ,
c85b ,
4a29 ,
bce5 ,
15 ,
60 ,
6e ,
35 ,
86 ,
91  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EGL_IMAGE_BUFFER_SETTINGS ,
c723d967 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (EGLStreamMode ,
EGL_STREAM_MODE_MAILBOX ,
33661d40 ,
3ee2 ,
11e6 ,
bdf4 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (EGLStreamMode ,
EGL_STREAM_MODE_FIFO ,
33661d41 ,
3ee2 ,
11e6 ,
bdf4 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_REQUEST ,
eb9b3750 ,
fc8d ,
455f ,
8e0f ,
91 ,
b3 ,
3b ,
d9 ,
4e ,
c5  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_CAMERA_PROVIDER ,
a00f33d7 ,
8564 ,
4226 ,
955c ,
2d ,
1b ,
cd ,
af ,
a3 ,
5f  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_BAYER_HISTOGRAM ,
50bc4f1c ,
6424 ,
beb7 ,
baae ,
b0 ,
90 ,
c9 ,
c3 ,
25 ,
9e  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EGL_OUTPUT_STREAM_SETTINGS ,
3a659361 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (ExtensionName ,
EXT_INTERNAL_FRAME_COUNT ,
37afdbda ,
0020 ,
4f91 ,
957b ,
46 ,
ea ,
eb ,
79 ,
80 ,
c7  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (BufferType ,
BUFFER_TYPE_NONE ,
c723d961 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_OUTPUT_STREAM_SETTINGS ,
52f2b830 ,
3d52 ,
11e6 ,
bdf4 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (EventType ,
EVENT_TYPE_ERROR ,
2c80d8b0 ,
2bfd ,
11e5 ,
a2cb ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (EventType ,
EVENT_TYPE_CAPTURE_STARTED ,
2c80d8b1 ,
2bfd ,
11e5 ,
a2cb ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SyncType ,
SYNC_TYPE_NONE ,
c723d962 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (EventType ,
EVENT_TYPE_CAPTURE_COMPLETE ,
2c80d8b2 ,
2bfd ,
11e5 ,
a2cb ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EGL_IMAGE_BUFFER ,
c723d968 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_RGB_HISTOGRAM ,
50bc4f1d ,
6424 ,
beb7 ,
baae ,
b0 ,
90 ,
c9 ,
c3 ,
25 ,
9e  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EVENT ,
98bcb49e ,
fd7d ,
11e4 ,
a322 ,
16 ,
97 ,
f9 ,
25 ,
ec ,
7b  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_STREAM_CAPTURE_METADATA ,
61cbe0a8 ,
0ee1 ,
4c67 ,
baae ,
02 ,
02 ,
1a ,
b8 ,
d9 ,
47  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EVENT_ERROR ,
13e0fc70 ,
1ab6 ,
11e5 ,
b939 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_BUFFER_OUTPUT_STREAM_SETTINGS ,
c723d963 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EVENT_CAPTURE_COMPLETE ,
8b2b40b5 ,
f1e4 ,
4c4d ,
ae1c ,
f3 ,
93 ,
f6 ,
54 ,
06 ,
d5  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeAntibandingMode ,
AE_ANTIBANDING_MODE_OFF ,
AD1E5560 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeAntibandingMode ,
AE_ANTIBANDING_MODE_AUTO ,
AD1E5561 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeAntibandingMode ,
AE_ANTIBANDING_MODE_50HZ ,
AD1E5562 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeAntibandingMode ,
AE_ANTIBANDING_MODE_60HZ ,
AD1E5563 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeFlickerState ,
AE_FLICKER_NONE ,
AD1E5564 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeFlickerState ,
AE_FLICKER_50HZ ,
AD1E5565 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_CAPTURE_METADATA ,
5f6ac5d4 ,
59e8 ,
45d0 ,
8bac ,
38 ,
09 ,
1f ,
f8 ,
74 ,
a9  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeFlickerState ,
AE_FLICKER_60HZ ,
AD1E5566 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeState ,
AE_STATE_INACTIVE ,
D2EBEA50 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeState ,
AE_STATE_SEARCHING ,
D2EBEA51 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeState ,
AE_STATE_CONVERGED ,
D2EBEA52 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeState ,
AE_STATE_FLASH_REQUIRED ,
D2EBEA53 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AeState ,
AE_STATE_TIMEOUT ,
D2EBEA54 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbMode ,
AWB_MODE_OFF ,
FB3F365A ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbMode ,
AWB_MODE_AUTO ,
FB3F365B ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbMode ,
AWB_MODE_INCANDESCENT ,
FB3F365C ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbMode ,
AWB_MODE_FLUORESCENT ,
FB3F365D ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EGL_OUTPUT_STREAM ,
3a659362 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbMode ,
AWB_MODE_WARM_FLUORESCENT ,
FB3F365E ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbMode ,
AWB_MODE_DAYLIGHT ,
FB3F365F ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbMode ,
AWB_MODE_CLOUDY_DAYLIGHT ,
FB3F3660 ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbMode ,
AWB_MODE_TWILIGHT ,
FB3F3661 ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbMode ,
AWB_MODE_SHADE ,
FB3F3662 ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbMode ,
AWB_MODE_MANUAL ,
20FB45DA ,
C49F ,
4293 ,
AB02 ,
13 ,
3F ,
8C ,
CA ,
DD ,
69  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbState ,
AWB_STATE_INACTIVE ,
E33CDB30 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbState ,
AWB_STATE_SEARCHING ,
E33CDB31 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbState ,
AWB_STATE_CONVERGED ,
E33CDB32 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (AwbState ,
AWB_STATE_LOCKED ,
E33CDB33 ,
9C16 ,
11E8 ,
B568 ,
18 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_BUFFER_OUTPUT_STREAM ,
c723d964 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_SENSOR_MODE ,
e69015e0 ,
db2a ,
11e5 ,
a837 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_AUTO_CONTROL_SETTINGS ,
1f2ad1c6 ,
cb13 ,
440b ,
bc95 ,
3f ,
fd ,
0d ,
19 ,
91 ,
db  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (CaptureIntent ,
CAPTURE_INTENT_MANUAL ,
FB3F3663 ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (CaptureIntent ,
CAPTURE_INTENT_PREVIEW ,
FB3F3664 ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (CaptureIntent ,
CAPTURE_INTENT_STILL_CAPTURE ,
FB3F3665 ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (CaptureIntent ,
CAPTURE_INTENT_VIDEO_RECORD ,
FB3F3666 ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (CaptureIntent ,
CAPTURE_INTENT_VIDEO_SNAPSHOT ,
FB3F3667 ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (DenoiseMode ,
DENOISE_MODE_OFF ,
FB3F3668 ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (DenoiseMode ,
DENOISE_MODE_FAST ,
FB3F3669 ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (DenoiseMode ,
DENOISE_MODE_HIGH_QUALITY ,
FB3F366A ,
CC62 ,
11E5 ,
9956 ,
62 ,
56 ,
62 ,
87 ,
07 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (EdgeEnhanceMode ,
EDGE_ENHANCE_MODE_OFF ,
F7100B40 ,
6A5F ,
11E6 ,
BDF4 ,
08 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (EdgeEnhanceMode ,
EDGE_ENHANCE_MODE_FAST ,
F7100B41 ,
6A5F ,
11E6 ,
BDF4 ,
08 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (EdgeEnhanceMode ,
EDGE_ENHANCE_MODE_HIGH_QUALITY ,
F7100B42 ,
6A5F ,
11E6 ,
BDF4 ,
08 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (PixelFormat ,
PIXEL_FMT_UNKNOWN ,
00000000 ,
93d5 ,
11e5 ,
0000 ,
1c ,
b7 ,
2c ,
ef ,
d4 ,
1e  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (PixelFormat ,
PIXEL_FMT_Y8 ,
569be14a ,
93d5 ,
11e5 ,
91bc ,
1c ,
b7 ,
2c ,
ef ,
d4 ,
1e  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (PixelFormat ,
PIXEL_FMT_Y16 ,
56ddb19c ,
93d5 ,
11e5 ,
8e2c ,
1c ,
b7 ,
2c ,
ef ,
d4 ,
1e  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (PixelFormat ,
PIXEL_FMT_YCbCr_420_888 ,
570c10e6 ,
93d5 ,
11e5 ,
8ff3 ,
1c ,
b7 ,
2c ,
ef ,
d4 ,
1e  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (PixelFormat ,
PIXEL_FMT_YCbCr_422_888 ,
573a7940 ,
93d5 ,
11e5 ,
99c2 ,
1c ,
b7 ,
2c ,
ef ,
d4 ,
1e  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (PixelFormat ,
PIXEL_FMT_YCbCr_444_888 ,
576043dc ,
93d5 ,
11e5 ,
8983 ,
1c ,
b7 ,
2c ,
ef ,
d4 ,
1e  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (PixelFormat ,
PIXEL_FMT_JPEG_BLOB ,
578b08c4 ,
93d5 ,
11e5 ,
9686 ,
1c ,
b7 ,
2c ,
ef ,
d4 ,
1e  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (PixelFormat ,
PIXEL_FMT_RAW16 ,
57b484d8 ,
93d5 ,
11e5 ,
aeb6 ,
1c ,
b7 ,
2c ,
ef ,
d4 ,
1e  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (PixelFormat ,
PIXEL_FMT_P016 ,
57b484d9 ,
93d5 ,
11e5 ,
aeb6 ,
1c ,
b7 ,
2c ,
ef ,
d4 ,
1e  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorModeType ,
SENSOR_MODE_TYPE_DEPTH ,
64483464 ,
4b91 ,
11e6 ,
bbbd ,
40 ,
16 ,
7e ,
ab ,
86 ,
92  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorModeType ,
SENSOR_MODE_TYPE_YUV ,
6453e00c ,
4b91 ,
11e6 ,
871d ,
40 ,
16 ,
7e ,
ab ,
86 ,
92  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorModeType ,
SENSOR_MODE_TYPE_RGB ,
6463d4c6 ,
4b91 ,
11e6 ,
88a3 ,
40 ,
16 ,
7e ,
ab ,
86 ,
92  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorModeType ,
SENSOR_MODE_TYPE_BAYER ,
646f04ea ,
4b91 ,
11e6 ,
9c06 ,
40 ,
16 ,
7e ,
ab ,
86 ,
92  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorModeType ,
SENSOR_MODE_TYPE_BAYER_PWL ,
f6a08220 ,
6a0f ,
11eb ,
8572 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorModeType ,
SENSOR_MODE_TYPE_BAYER_DOL ,
f6a08221 ,
6a0f ,
11eb ,
8572 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorPlacement ,
SENSOR_PLACEMENT_REAR_OR_BOTTOM_OR_BOTTOM_LEFT ,
01dba8b0 ,
1946 ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorPlacement ,
SENSOR_PLACEMENT_FRONT_OR_TOP_OR_CENTER_LEFT ,
01dba8b1 ,
1946 ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorPlacement ,
SENSOR_PLACEMENT_CENTER_OR_CENTER_RIGHT ,
01dba8b2 ,
1946 ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorPlacement ,
SENSOR_PLACEMENT_TOP_LEFT ,
01dba8b3 ,
1946 ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorPlacement ,
SENSOR_PLACEMENT_BOTTOM_RIGHT ,
01dba8b4 ,
1946 ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (SensorPlacement ,
SENSOR_PLACEMENT_TOP_RIGHT ,
01dba8b5 ,
1946 ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (BayerPhase ,
BAYER_PHASE_UNKNOWN ,
b9d43270 ,
6a0e ,
12eb ,
8572 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (BayerPhase ,
BAYER_PHASE_RGGB ,
b9d43271 ,
6a0e ,
12eb ,
8572 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (BayerPhase ,
BAYER_PHASE_BGGR ,
b9d43272 ,
6a0e ,
12eb ,
8572 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (BayerPhase ,
BAYER_PHASE_GRBG ,
b9d43273 ,
6a0e ,
12eb ,
8572 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (BayerPhase ,
BAYER_PHASE_GBRG ,
b9d43274 ,
6a0e ,
12eb ,
8572 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_BUFFER ,
c723d965 ,
5231 ,
11e7 ,
9598 ,
18 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_DENOISE_METADATA ,
7A461D23 ,
6AE1 ,
11E6 ,
BDF4 ,
08 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EDGE_ENHANCE_METADATA ,
7A461D24 ,
6AE1 ,
11E6 ,
BDF4 ,
08 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_STREAM_SETTINGS ,
c477aeaf ,
9cc8 ,
4467 ,
a834 ,
c7 ,
07 ,
d7 ,
b6 ,
9f ,
a4  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_DENOISE_SETTINGS ,
7A461D20 ,
6AE1 ,
11E6 ,
BDF4 ,
08 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::DEFINE_UUID (InterfaceID ,
IID_EDGE_ENHANCE_SETTINGS ,
7A461D21 ,
6AE1 ,
11E6 ,
BDF4 ,
08 ,
00 ,
20 ,
0C ,
9A ,
66  
)
+
+ +
+
+ +
+
+
+template<typename TheInterface >
+ + + + + +
+ + + + + + + + +
TheInterface* Argus::interface_cast (InterfaceProvider * obj)
+
+inline
+
+ +

Interface-casting helper similar to dynamic_cast.

+ +

Definition at line 378 of file Types.h.

+ +
+
+ +
+
+
+template<typename TheInterface >
+ + + + + +
+ + + + + + + + +
TheInterface* Argus::interface_cast (const InterfaceProvider * obj)
+
+inline
+
+ +

Definition at line 384 of file Types.h.

+ +
+
+ +
+
+
+template<typename TheInterface , typename TObject >
+ + + + + +
+ + + + + + + + +
TheInterface* Argus::interface_cast (const UniqueObj< TObject > & obj)
+
+inline
+
+ +

Definition at line 472 of file Types.h.

+ +
+
+

Variable Documentation

+ +
+
+ + + + +
const uint32_t Argus::MAX_UUID_NAME_SIZE = 32
+
+ +

Definition at line 45 of file UUID.h.

+ +
+
+ +
+
+ + + + +
const uint64_t Argus::TIMEOUT_INFINITE = 0xFFFFFFFFFFFFFFFF
+
+ +

Constant used for infinite timeouts.

+ +

Definition at line 88 of file Types.h.

+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespaceArgus_1_1Ext.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespaceArgus_1_1Ext.html new file mode 100644 index 0000000..5884aa3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespaceArgus_1_1Ext.html @@ -0,0 +1,2159 @@ + + + + + +Libargus API: Argus::Ext Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::Ext Namespace Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  IBayerAverageMapSettings
 Interface to Bayer average map settings. More...
class  IBayerAverageMap
 Interface to Bayer average map metadata. More...
class  IBayerSharpnessMapSettings
 Interface to Bayer sharpness map settings. More...
class  IBayerSharpnessMap
 Interface to Bayer sharpness map metadata. More...
class  IBlockingSessionCameraProvider
 Interface used to create blocking capture session. More...
class  IDebugCaptureSession
 Interface used to dump CaptureSession runtime information. More...
class  IDeFogSettings
 Interface to de-fog settings. More...
class  IDolWdrSensorMode
 Interface to the properties of a DOL WDR device. More...
class  IFaceDetectCaps
 Interface to expose the face detection capabilities of a CaptureSession. More...
class  IFaceDetectSettings
 Interface to face detection settings. More...
class  IFaceDetectMetadata
 Interface to overall face detection results metadata. More...
class  IFaceDetectResult
 Interface to the properties of a single face detection result. More...
class  IInternalFrameCount
 Interface used to query the internal frame count for a request. More...
class  INonLinearHistogram
 Interface used to query the metadata to correctly interpret the compressed histogram data. More...
class  IPwlWdrSensorMode
 Interface to the properties of a PWL WDR device. More...
class  ISensorEepromData
 Interface used to get EEPROM data. More...
class  ISensorOtpData
 Interface used to get OTP data. More...
class  ISensorPrivateMetadataCaps
 Interface used to query the availability and size in bytes of sensor private metadata. More...
class  ISensorPrivateMetadataRequest
 Interface used enable the output of sensor private metadata for a request. More...
class  ISensorPrivateMetadata
 Interface used to access sensor private metadata. More...
class  ISensorPrivateMetadataClientBufferRequest
 Interface used to set client buffer for sensor private metadata for a request. More...
class  ISensorTimestampTsc
 Interface used to get TSC HW timestamp. More...
class  ISyncSensorCalibrationData
 Interface used to access sync sensor calibration data. More...
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

 DEFINE_UUID (InterfaceID, IID_BAYER_AVERAGE_MAP_SETTINGS, 12c3de21, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_BAYER_AVERAGE_MAP, 12c3de22, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_BAYER_SHARPNESS_MAP_SETTINGS, 7d5e0471, 4ea6, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_BAYER_SHARPNESS_MAP, 7d5e0472, 4ea6, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_BLOCKING_SESSION_CAMERA_PROVIDER, 3122fe85, b4cc, 4945, af5d, a3, 86, 26, 75, eb, a4)
 DEFINE_UUID (InterfaceID, IID_DEBUG_CAPTURE_SESSION, 2122fe84, b4cc, 4945, af5d, a3, 86, 26, 75, eb, a4)
 DEFINE_UUID (InterfaceID, IID_DE_FOG_SETTINGS, 9cf05bd1, 1d99, 4be8, 8732, 75, 99, 55, 7f, ed, 3a)
 DEFINE_UUID (InterfaceID, IID_DOL_WDR_SENSOR_MODE, a1f4cae0, 70dc, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_FACE_DETECT_CAPS, 40412bb0, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_FACE_DETECT_SETTINGS, 40412bb1, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_FACE_DETECT_METADATA, 40412bb2, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_FACE_DETECT_RESULT, 40412bb3, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_INTERNAL_FRAME_COUNT, c21a7ba2, 2b3f, 4275, 8469, a2, 56, 34, 93, 53, 93)
 DEFINE_UUID (InterfaceID, IID_NON_LINEAR_HISTOGRAM, 6e337ec0, e801, 11e8, b568, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_PWL_WDR_SENSOR_MODE, 7f5acea0, 582b, 11e6, 9414, 40, 16, 7e, ab, 86, 92)
 DEFINE_UUID (InterfaceID, IID_SENSOR_EEPROM_DATA, 063062b0, 181b, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_SENSOR_OTP_DATA, 3d125710, 19b1, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_SENSOR_PRIVATE_METADATA_CAPS, e492d2bf, 5285, 476e, 94c5, ee, 64, d5, 3d, 94, ef)
 DEFINE_UUID (InterfaceID, IID_SENSOR_PRIVATE_METADATA_REQUEST, 5c868b69, 42f5, 4ec9, 9b93, 44, 11, c9, 6c, 02, e3)
 DEFINE_UUID (InterfaceID, IID_SENSOR_PRIVATE_METADATA, 68cf6680, 70d7, 4b52, 9a99, 33, fb, 65, 81, a2, 61)
 DEFINE_UUID (InterfaceID, IID_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_REQUEST, 5c868b69, 42f5, 4ec9, 9b93, 44, 11, c9, 6c, 02, e4)
 DEFINE_UUID (InterfaceID, IID_SENSOR_TIMESTAMP_TSC, 35581ba0, 06eb, 11eb, 8b6e, 08, 00, 20, 0c, 9a, 66)
 DEFINE_UUID (InterfaceID, IID_SYNC_SENSOR_CALIBRATION_DATA, 5925f360, d52f, 11ea, 8b6e, 08, 00, 20, 0c, 9a, 66)
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_DE_FOG_SETTINGS ,
9cf05bd1 ,
1d99 ,
4be8 ,
8732 ,
75 ,
99 ,
55 ,
7f ,
ed ,
3a  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_SENSOR_EEPROM_DATA ,
063062b0 ,
181b ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_SENSOR_OTP_DATA ,
3d125710 ,
19b1 ,
11eb ,
8b6f ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_SENSOR_TIMESTAMP_TSC ,
35581ba0 ,
06eb ,
11eb ,
8b6e ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_BLOCKING_SESSION_CAMERA_PROVIDER ,
3122fe85 ,
b4cc ,
4945 ,
af5d ,
a3 ,
86 ,
26 ,
75 ,
eb ,
a4  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_BAYER_SHARPNESS_MAP_SETTINGS ,
7d5e0471 ,
4ea6 ,
11e6 ,
bdf4 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_FACE_DETECT_CAPS ,
40412bb0 ,
ba24 ,
11e5 ,
a837 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_SENSOR_PRIVATE_METADATA_CAPS ,
e492d2bf ,
5285 ,
476e ,
94c5 ,
ee ,
64 ,
d5 ,
3d ,
94 ,
ef  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_REQUEST ,
5c868b69 ,
42f5 ,
4ec9 ,
9b93 ,
44 ,
11 ,
c9 ,
6c ,
02 ,
e4  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_DEBUG_CAPTURE_SESSION ,
2122fe84 ,
b4cc ,
4945 ,
af5d ,
a3 ,
86 ,
26 ,
75 ,
eb ,
a4  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_NON_LINEAR_HISTOGRAM ,
6e337ec0 ,
e801 ,
11e8 ,
b568 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_BAYER_AVERAGE_MAP_SETTINGS ,
12c3de21 ,
64c5 ,
11e6 ,
bdf4 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_SYNC_SENSOR_CALIBRATION_DATA ,
5925f360 ,
d52f ,
11ea ,
8b6e ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_PWL_WDR_SENSOR_MODE ,
7f5acea0 ,
582b ,
11e6 ,
9414 ,
40 ,
16 ,
7e ,
ab ,
86 ,
92  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_SENSOR_PRIVATE_METADATA_REQUEST ,
5c868b69 ,
42f5 ,
4ec9 ,
9b93 ,
44 ,
11 ,
c9 ,
6c ,
02 ,
e3  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_FACE_DETECT_SETTINGS ,
40412bb1 ,
ba24 ,
11e5 ,
a837 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_INTERNAL_FRAME_COUNT ,
c21a7ba2 ,
2b3f ,
4275 ,
8469 ,
a2 ,
56 ,
34 ,
93 ,
53 ,
93  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_SENSOR_PRIVATE_METADATA ,
68cf6680 ,
70d7 ,
4b52 ,
9a99 ,
33 ,
fb ,
65 ,
81 ,
a2 ,
61  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_FACE_DETECT_METADATA ,
40412bb2 ,
ba24 ,
11e5 ,
a837 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_DOL_WDR_SENSOR_MODE ,
a1f4cae0 ,
70dc ,
11e7 ,
9598 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_BAYER_SHARPNESS_MAP ,
7d5e0472 ,
4ea6 ,
11e6 ,
bdf4 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_FACE_DETECT_RESULT ,
40412bb3 ,
ba24 ,
11e5 ,
a837 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Argus::Ext::DEFINE_UUID (InterfaceID ,
IID_BAYER_AVERAGE_MAP ,
12c3de22 ,
64c5 ,
11e6 ,
bdf4 ,
08 ,
00 ,
20 ,
0c ,
9a ,
66  
)
+
+ +
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers.html new file mode 100644 index 0000000..216c6db --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers.html @@ -0,0 +1,129 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+ +

- a -

    +
  • ArgusInjectError +: Argus +
  • +
  • ArgusInjectError_ErrorLongLine +: Argus +
  • +
  • AutoControlId +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x62.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x62.html new file mode 100644 index 0000000..6c74eb9 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x62.html @@ -0,0 +1,138 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+ +

- b -

    +
  • BAYER_CHANNEL_B +: Argus +
  • +
  • BAYER_CHANNEL_COUNT +: Argus +
  • +
  • BAYER_CHANNEL_G_EVEN +: Argus +
  • +
  • BAYER_CHANNEL_G_ODD +: Argus +
  • +
  • BAYER_CHANNEL_R +: Argus +
  • +
  • BayerChannel +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x63.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x63.html new file mode 100644 index 0000000..cf9355a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x63.html @@ -0,0 +1,138 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+ +

- c -

    +
  • Coordinate +: Argus +
  • +
  • COORDINATE_2D_COUNT +: Argus +
  • +
  • COORDINATE_3D_COUNT +: Argus +
  • +
  • COORDINATE_X +: Argus +
  • +
  • COORDINATE_Y +: Argus +
  • +
  • COORDINATE_Z +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x64.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x64.html new file mode 100644 index 0000000..dd09ad1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x64.html @@ -0,0 +1,158 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+ +

- d -

+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x69.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x69.html new file mode 100644 index 0000000..5035c92 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x69.html @@ -0,0 +1,123 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+ +

- i -

    +
  • interface_cast() +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x6d.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x6d.html new file mode 100644 index 0000000..be586e6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x6d.html @@ -0,0 +1,123 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+ +

- m -

    +
  • MAX_UUID_NAME_SIZE +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x72.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x72.html new file mode 100644 index 0000000..2b5989f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x72.html @@ -0,0 +1,135 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+ +

- r -

    +
  • RGB_CHANNEL_B +: Argus +
  • +
  • RGB_CHANNEL_COUNT +: Argus +
  • +
  • RGB_CHANNEL_G +: Argus +
  • +
  • RGB_CHANNEL_R +: Argus +
  • +
  • RGBChannel +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x73.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x73.html new file mode 100644 index 0000000..2f95cba --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x73.html @@ -0,0 +1,156 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+ +

- s -

    +
  • Status +: Argus +
  • +
  • STATUS_CANCELLED +: Argus +
  • +
  • STATUS_COUNT +: Argus +
  • +
  • STATUS_DISCONNECTED +: Argus +
  • +
  • STATUS_END_OF_STREAM +: Argus +
  • +
  • STATUS_INVALID_PARAMS +: Argus +
  • +
  • STATUS_INVALID_SETTINGS +: Argus +
  • +
  • STATUS_OK +: Argus +
  • +
  • STATUS_OUT_OF_MEMORY +: Argus +
  • +
  • STATUS_TIMEOUT +: Argus +
  • +
  • STATUS_UNAVAILABLE +: Argus +
  • +
  • STATUS_UNIMPLEMENTED +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x74.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x74.html new file mode 100644 index 0000000..3ff16f7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_0x74.html @@ -0,0 +1,123 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+ +

- t -

    +
  • TIMEOUT_INFINITE +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_enum.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_enum.html new file mode 100644 index 0000000..362e861 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_enum.html @@ -0,0 +1,120 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_eval.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_eval.html new file mode 100644 index 0000000..4a96306 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_eval.html @@ -0,0 +1,183 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + +
+ + + + +
+ +
+ +
    +
  • ArgusInjectError_ErrorLongLine +: Argus +
  • +
  • BAYER_CHANNEL_B +: Argus +
  • +
  • BAYER_CHANNEL_COUNT +: Argus +
  • +
  • BAYER_CHANNEL_G_EVEN +: Argus +
  • +
  • BAYER_CHANNEL_G_ODD +: Argus +
  • +
  • BAYER_CHANNEL_R +: Argus +
  • +
  • COORDINATE_2D_COUNT +: Argus +
  • +
  • COORDINATE_3D_COUNT +: Argus +
  • +
  • COORDINATE_X +: Argus +
  • +
  • COORDINATE_Y +: Argus +
  • +
  • COORDINATE_Z +: Argus +
  • +
  • RGB_CHANNEL_B +: Argus +
  • +
  • RGB_CHANNEL_COUNT +: Argus +
  • +
  • RGB_CHANNEL_G +: Argus +
  • +
  • RGB_CHANNEL_R +: Argus +
  • +
  • STATUS_CANCELLED +: Argus +
  • +
  • STATUS_COUNT +: Argus +
  • +
  • STATUS_DISCONNECTED +: Argus +
  • +
  • STATUS_END_OF_STREAM +: Argus +
  • +
  • STATUS_INVALID_PARAMS +: Argus +
  • +
  • STATUS_INVALID_SETTINGS +: Argus +
  • +
  • STATUS_OK +: Argus +
  • +
  • STATUS_OUT_OF_MEMORY +: Argus +
  • +
  • STATUS_TIMEOUT +: Argus +
  • +
  • STATUS_UNAVAILABLE +: Argus +
  • +
  • STATUS_UNIMPLEMENTED +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_func.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_func.html new file mode 100644 index 0000000..6d29296 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_func.html @@ -0,0 +1,158 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- d -

+ + +

- i -

    +
  • interface_cast() +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_type.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_type.html new file mode 100644 index 0000000..f4a87c5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_type.html @@ -0,0 +1,108 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + +
+ + + + +
+ +
+ +
    +
  • AutoControlId +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_vars.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_vars.html new file mode 100644 index 0000000..2aa0ec3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespacemembers_vars.html @@ -0,0 +1,111 @@ + + + + + +Libargus API: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + +
+ + + + +
+ +
+ +
    +
  • MAX_UUID_NAME_SIZE +: Argus +
  • +
  • TIMEOUT_INFINITE +: Argus +
  • +
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/namespaces.html b/jetson_multimedia_api/argus/docs/doxygen/html/namespaces.html new file mode 100644 index 0000000..50fd7e6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/namespaces.html @@ -0,0 +1,103 @@ + + + + + +Libargus API: Namespace List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Namespace List
+
+
+
Here is a list of all namespaces with brief descriptions:
+
[detail level 12]
+ + +
\NArgus
 \NExt
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/nav_f.png b/jetson_multimedia_api/argus/docs/doxygen/html/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/nav_f.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/nav_g.png b/jetson_multimedia_api/argus/docs/doxygen/html/nav_g.png new file mode 100644 index 0000000..8c6c13e Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/nav_g.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/nav_h.png b/jetson_multimedia_api/argus/docs/doxygen/html/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/nav_h.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/open.png b/jetson_multimedia_api/argus/docs/doxygen/html/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/open.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/pages.html b/jetson_multimedia_api/argus/docs/doxygen/html/pages.html new file mode 100644 index 0000000..f572891 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/pages.html @@ -0,0 +1,96 @@ + + + + + +Libargus API: Related Pages + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
Related Pages
+
+
+
Here is a list of all related documentation pages:
+ + +
\Todo List
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_61.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_61.html new file mode 100644 index 0000000..a3164d5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_61.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_61.js new file mode 100644 index 0000000..6061f9a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_61.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['acquirebuffer',['acquireBuffer',['../classArgus_1_1IBufferOutputStream.html#aded9446aa0e3e64cbad4f95b54df9633',1,'Argus::IBufferOutputStream']]], + ['acregion',['AcRegion',['../classArgus_1_1AcRegion.html',1,'Argus']]], + ['acregion',['AcRegion',['../classArgus_1_1AcRegion.html#ac384535f03f0d5f2c792789766de6fb0',1,'Argus::AcRegion::AcRegion()'],['../classArgus_1_1AcRegion.html#a5cfa0aa1c6d33fdad6050f57a57d03f9',1,'Argus::AcRegion::AcRegion(uint32_t _left, uint32_t _top, uint32_t _right, uint32_t _bottom, float _weight)']]], + ['area',['area',['../classArgus_1_1Size2D.html#a2cf8d97c8d5c55005669751735988568',1,'Argus::Size2D::area()'],['../classArgus_1_1Rectangle.html#a40b68104a2f3cf969dff0b7b26a8faf2',1,'Argus::Rectangle::area()']]], + ['argus',['Argus',['../namespaceArgus.html',1,'']]], + ['argus_2eh',['Argus.h',['../Argus_8h.html',1,'']]], + ['autocontrolsettings',['AutoControlSettings',['../group__ArgusAutoControlSettings.html',1,'']]], + ['argusinjecterror',['ArgusInjectError',['../namespaceArgus.html#a7354506ed0d455893cd19fc0f92e06c1',1,'Argus']]], + ['argusinjecterror_5ferrorlongline',['ArgusInjectError_ErrorLongLine',['../namespaceArgus.html#a7354506ed0d455893cd19fc0f92e06c1a60b6a393ff61b5054b22e36ea8c707f9',1,'Argus']]], + ['array2d',['Array2D',['../classArgus_1_1Array2D.html#a951a8a81048d0a2e221732fed4087729',1,'Argus::Array2D::Array2D()'],['../classArgus_1_1Array2D.html#a5176c6edb2a10014e2ec30659160669f',1,'Argus::Array2D::Array2D(const Size2D< uint32_t > &size)'],['../classArgus_1_1Array2D.html#ac2ab97e9bcbb931e374f21bf19a50d98',1,'Argus::Array2D::Array2D(const Size2D< uint32_t > &size, const T &value)'],['../classArgus_1_1Array2D.html#afba5aad8e211a848b824b4f4136bfd1b',1,'Argus::Array2D::Array2D(const Array2D< T > &other)']]], + ['array2d',['Array2D',['../classArgus_1_1Array2D.html',1,'Argus']]], + ['autocontrolid',['AutoControlId',['../namespaceArgus.html#aa22f825d6820fd3ceab8f5849705db01',1,'Argus']]], + ['ext',['Ext',['../namespaceArgus_1_1Ext.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_62.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_62.html new file mode 100644 index 0000000..ee8871c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_62.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_62.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_62.js new file mode 100644 index 0000000..7acc988 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_62.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['bayerhistogram',['BayerHistogram',['../group__ArgusBayerHistogram.html',1,'']]], + ['buffer',['Buffer',['../group__ArgusBuffer.html',1,'']]], + ['buffer_20types',['Buffer Types',['../group__ArgusBufferBuffer.html',1,'']]], + ['buffer_20types',['Buffer Types',['../group__ArgusBufferBufferSettings.html',1,'']]], + ['bufferoutputstream',['BufferOutputStream',['../group__ArgusBufferOutputStream.html',1,'']]], + ['bufferoutputstreamsettings',['BufferOutputStreamSettings',['../group__ArgusBufferOutputStreamSettings.html',1,'']]], + ['buffersettings',['BufferSettings',['../group__ArgusBufferSettings.html',1,'']]], + ['b',['b',['../classArgus_1_1BayerTuple.html#a7a405c9d6103ea4b2908dd90024f171c',1,'Argus::BayerTuple::b()'],['../classArgus_1_1BayerTuple.html#a4493be34f517bc456bb2e33bb5a5bc2c',1,'Argus::BayerTuple::b() const '],['../classArgus_1_1RGBTuple.html#aee75ddcdc97b817aaa38ad939d5c85d2',1,'Argus::RGBTuple::b()'],['../classArgus_1_1RGBTuple.html#aedaba96c6c208755de2fb53f93f6d36b',1,'Argus::RGBTuple::b() const ']]], + ['bayer_5fchannel_5fb',['BAYER_CHANNEL_B',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6daade7e0847d7c46e6ef48a73a5bfa7c0d2',1,'Argus']]], + ['bayer_5fchannel_5fcount',['BAYER_CHANNEL_COUNT',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6daa4fe9995810ef6c8d0b0e6293a644ca92',1,'Argus']]], + ['bayer_5fchannel_5fg_5feven',['BAYER_CHANNEL_G_EVEN',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6daa3a29cb5745107741b04433b0b640dd2c',1,'Argus']]], + ['bayer_5fchannel_5fg_5fodd',['BAYER_CHANNEL_G_ODD',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6daaa52d2aed864437720e59729ff3f307d4',1,'Argus']]], + ['bayer_5fchannel_5fr',['BAYER_CHANNEL_R',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6daa1a67e83aa27df93bdc85cda957c743bd',1,'Argus']]], + ['bayeraveragemap_2eh',['BayerAverageMap.h',['../BayerAverageMap_8h.html',1,'']]], + ['bayerchannel',['BayerChannel',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6da',1,'Argus']]], + ['bayersharpnessmap_2eh',['BayerSharpnessMap.h',['../BayerSharpnessMap_8h.html',1,'']]], + ['bayertuple',['BayerTuple',['../classArgus_1_1BayerTuple.html#a9adf5f2f70d07a6103e0c54c5f850dc3',1,'Argus::BayerTuple::BayerTuple()'],['../classArgus_1_1BayerTuple.html#a1f0f889eebfb6f231f630a3b5d2944eb',1,'Argus::BayerTuple::BayerTuple(const Tuple< BAYER_CHANNEL_COUNT, T > &other)'],['../classArgus_1_1BayerTuple.html#a1cd8e42e25bd900e255c66cd1411c47b',1,'Argus::BayerTuple::BayerTuple(T init)'],['../classArgus_1_1BayerTuple.html#af1176cf57964b8d444e0c71d43b5dd0e',1,'Argus::BayerTuple::BayerTuple(T _r, T _gEven, T _gOdd, T _b)']]], + ['bayertuple',['BayerTuple',['../classArgus_1_1BayerTuple.html',1,'Argus']]], + ['begin',['begin',['../classArgus_1_1Array2D.html#a29db9087e0f6db131319b36a60b3766c',1,'Argus::Array2D::begin() const '],['../classArgus_1_1Array2D.html#ab5b7e17b7c4be97161807f931da02e39',1,'Argus::Array2D::begin()']]], + ['blockingsessioncameraprovider_2eh',['BlockingSessionCameraProvider.h',['../BlockingSessionCameraProvider_8h.html',1,'']]], + ['bottom',['bottom',['../classArgus_1_1Rectangle.html#adc9f66f69cda97ea0999a94396b157a6',1,'Argus::Rectangle::bottom()'],['../classArgus_1_1Rectangle.html#a4a115e321d277ad9cdfa357af15dd154',1,'Argus::Rectangle::bottom() const ']]], + ['buffer',['Buffer',['../classArgus_1_1Buffer.html',1,'Argus']]], + ['buffersettings',['BufferSettings',['../classArgus_1_1BufferSettings.html',1,'Argus']]], + ['bufferstream_2eh',['BufferStream.h',['../BufferStream_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_63.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_63.html new file mode 100644 index 0000000..56b5ad1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_63.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_63.js new file mode 100644 index 0000000..272927b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_63.js @@ -0,0 +1,40 @@ +var searchData= +[ + ['cameradevice',['CameraDevice',['../group__ArgusCameraDevice.html',1,'']]], + ['cameraprovider',['CameraProvider',['../group__ArgusCameraProvider.html',1,'']]], + ['capturemetadata',['CaptureMetadata',['../group__ArgusCaptureMetadata.html',1,'']]], + ['capturesession',['CaptureSession',['../group__ArgusCaptureSession.html',1,'']]], + ['capturecomplete_20event',['CaptureComplete Event',['../group__ArgusEventCaptureComplete.html',1,'']]], + ['capturestarted_20event',['CaptureStarted Event',['../group__ArgusEventCaptureStarted.html',1,'']]], + ['cameradevice',['CameraDevice',['../classArgus_1_1CameraDevice.html',1,'Argus']]], + ['cameradevice_2eh',['CameraDevice.h',['../CameraDevice_8h.html',1,'']]], + ['cameraprovider',['CameraProvider',['../classArgus_1_1CameraProvider.html',1,'Argus']]], + ['cameraprovider_2eh',['CameraProvider.h',['../CameraProvider_8h.html',1,'']]], + ['cancelrequests',['cancelRequests',['../classArgus_1_1ICaptureSession.html#a04675ce7ace82c9ffe1f236dc9f55d39',1,'Argus::ICaptureSession']]], + ['capture',['capture',['../classArgus_1_1ICaptureSession.html#a3e02e8605e5ef5148cdbe79c26cf1fa8',1,'Argus::ICaptureSession']]], + ['captureburst',['captureBurst',['../classArgus_1_1ICaptureSession.html#af94f311dba11bdd33e1c5f3485cee7e7',1,'Argus::ICaptureSession']]], + ['capturemetadata',['CaptureMetadata',['../classArgus_1_1CaptureMetadata.html',1,'Argus']]], + ['capturemetadata_2eh',['CaptureMetadata.h',['../CaptureMetadata_8h.html',1,'']]], + ['capturemetadatacontainer',['CaptureMetadataContainer',['../classArgus_1_1CaptureMetadataContainer.html',1,'Argus']]], + ['capturesession',['CaptureSession',['../classArgus_1_1CaptureSession.html',1,'Argus']]], + ['capturesession_2eh',['CaptureSession.h',['../CaptureSession_8h.html',1,'']]], + ['checkindex',['checkIndex',['../classArgus_1_1Array2D.html#ad163c996aef3088d76489a29135350ee',1,'Argus::Array2D::checkIndex(uint32_t i) const '],['../classArgus_1_1Array2D.html#abaa546cbd24fd29c32cc172600f9ea03',1,'Argus::Array2D::checkIndex(uint32_t x, uint32_t y) const ']]], + ['clearoutputstreams',['clearOutputStreams',['../classArgus_1_1IRequest.html#a4fb634e7361d54e0a901cdff5f98dfc7',1,'Argus::IRequest']]], + ['clock_5fseq',['clock_seq',['../structArgus_1_1UUID.html#a77f391dcf5360456bba7363d7720a46b',1,'Argus::UUID']]], + ['const_5fiterator',['const_iterator',['../classArgus_1_1Array2D.html#add371d7b270f73ee356a4b0d3a4bd853',1,'Argus::Array2D']]], + ['coordinate',['Coordinate',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11',1,'Argus']]], + ['coordinate_5f2d_5fcount',['COORDINATE_2D_COUNT',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11ae2b523cffcee5546f0a69bff24ac8af7',1,'Argus']]], + ['coordinate_5f3d_5fcount',['COORDINATE_3D_COUNT',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11a08bd3ae1db3a9171228a2e1ae256bc81',1,'Argus']]], + ['coordinate_5fx',['COORDINATE_X',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11a0e413a227cc2d90a536c5070eb9d7702',1,'Argus']]], + ['coordinate_5fy',['COORDINATE_Y',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11a87b5caee86f1253fde029a8d47f54f29',1,'Argus']]], + ['coordinate_5fz',['COORDINATE_Z',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11a7757495a4c7e8223dd9b900b1a841416',1,'Argus']]], + ['create',['create',['../classArgus_1_1CameraProvider.html#a900190f5dd0f15ff7fa1dc2a7edb19ac',1,'Argus::CameraProvider']]], + ['createblockingcapturesession',['createBlockingCaptureSession',['../classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html#aaeda1333dd2bdc5705db481353ad7ccf',1,'Argus::Ext::IBlockingSessionCameraProvider::createBlockingCaptureSession(CameraDevice *device, Status *status=NULL)=0'],['../classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html#a63075766d5989f1a3ff6eb4a2bd95cef',1,'Argus::Ext::IBlockingSessionCameraProvider::createBlockingCaptureSession(const std::vector< CameraDevice * > &devices, Status *status=NULL)=0']]], + ['createbuffer',['createBuffer',['../classArgus_1_1IBufferOutputStream.html#a2143b4ef0bb3a9e97b328d32d4012485',1,'Argus::IBufferOutputStream']]], + ['createbuffersettings',['createBufferSettings',['../classArgus_1_1IBufferOutputStream.html#a9d235cc15ca874b552d2399daa22b900',1,'Argus::IBufferOutputStream']]], + ['createcapturesession',['createCaptureSession',['../classArgus_1_1ICameraProvider.html#ae84d50114342447dfbc2552a34288608',1,'Argus::ICameraProvider::createCaptureSession(CameraDevice *device, Status *status=NULL)=0'],['../classArgus_1_1ICameraProvider.html#a140866d0ad8bfa19ce850ee1223d52a8',1,'Argus::ICameraProvider::createCaptureSession(const std::vector< CameraDevice * > &devices, Status *status=NULL)=0']]], + ['createeventqueue',['createEventQueue',['../classArgus_1_1IEventProvider.html#a3bb3a439312b8cba86cbfcb397be63e8',1,'Argus::IEventProvider']]], + ['createoutputstream',['createOutputStream',['../classArgus_1_1ICaptureSession.html#a5650305125287666054bc3c862a76d84',1,'Argus::ICaptureSession']]], + ['createoutputstreamsettings',['createOutputStreamSettings',['../classArgus_1_1ICaptureSession.html#a3a36fcbfee5ac4896f1ae513ca8f96f5',1,'Argus::ICaptureSession']]], + ['createrequest',['createRequest',['../classArgus_1_1ICaptureSession.html#afc1d1d0c7ccaae5c96dbddcf98919a10',1,'Argus::ICaptureSession']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_64.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_64.html new file mode 100644 index 0000000..b53ff08 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_64.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_64.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_64.js new file mode 100644 index 0000000..1c0ca29 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_64.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['data',['data',['../classArgus_1_1Array2D.html#abd32fa609ef30114c9c64ef587b092e1',1,'Argus::Array2D::data() const '],['../classArgus_1_1Array2D.html#a06c6bf2916b243f7a660e4923cc3e1b1',1,'Argus::Array2D::data()']]], + ['debugcapturesession_2eh',['DebugCaptureSession.h',['../DebugCaptureSession_8h.html',1,'']]], + ['define_5fnamed_5fuuid_5fclass',['DEFINE_NAMED_UUID_CLASS',['../UUID_8h.html#a6b1889b812c85beb981b0f8d6db27fbc',1,'DEFINE_NAMED_UUID_CLASS(): UUID.h'],['../namespaceArgus.html#ae962bb092bc351459cbb08b688f94525',1,'Argus::DEFINE_NAMED_UUID_CLASS(BufferType)'],['../namespaceArgus.html#a93a3264868bb4477def733244b88f0fb',1,'Argus::DEFINE_NAMED_UUID_CLASS(SyncType)'],['../namespaceArgus.html#ab51c6bc4f25b501959800f1a54609069',1,'Argus::DEFINE_NAMED_UUID_CLASS(EGLStreamMode)'],['../namespaceArgus.html#a1289d9d37e81dd64a512d8f5504d50ec',1,'Argus::DEFINE_NAMED_UUID_CLASS(DistortionType)'],['../namespaceArgus.html#aceceff1fb91da3f61f41dce4126ab8fc',1,'Argus::DEFINE_NAMED_UUID_CLASS(MappingType)'],['../namespaceArgus.html#a3914500ce31d40cbea3554cc64d11c2d',1,'Argus::DEFINE_NAMED_UUID_CLASS(StreamType)'],['../namespaceArgus.html#aa8cb6e1f960f940e54414084170378f3',1,'Argus::DEFINE_NAMED_UUID_CLASS(AeAntibandingMode)'],['../namespaceArgus.html#a948f2d3af219c853387331ed98b6b15e',1,'Argus::DEFINE_NAMED_UUID_CLASS(AeFlickerState)'],['../namespaceArgus.html#ae9435b406ac2bcfdd29e0aef34504b18',1,'Argus::DEFINE_NAMED_UUID_CLASS(AeState)'],['../namespaceArgus.html#aa2c3341290e7572c667c30618ee3c74b',1,'Argus::DEFINE_NAMED_UUID_CLASS(AwbMode)'],['../namespaceArgus.html#a199bb99a7afc94f9487ac9a4a1010a0a',1,'Argus::DEFINE_NAMED_UUID_CLASS(AwbState)'],['../namespaceArgus.html#a7cb2f42916e6a666dcb04171bee1d38a',1,'Argus::DEFINE_NAMED_UUID_CLASS(CaptureIntent)'],['../namespaceArgus.html#a05d27294517f13a023c87736244dca9b',1,'Argus::DEFINE_NAMED_UUID_CLASS(DenoiseMode)'],['../namespaceArgus.html#a7f206dd8b4f535efdf7bec7990b3a793',1,'Argus::DEFINE_NAMED_UUID_CLASS(EdgeEnhanceMode)'],['../namespaceArgus.html#a94028c35f26bf5aebe0fba74671ab78c',1,'Argus::DEFINE_NAMED_UUID_CLASS(ExtensionName)'],['../namespaceArgus.html#ae524ffc411a5cc37c4adeea29774e9e8',1,'Argus::DEFINE_NAMED_UUID_CLASS(PixelFormat)'],['../namespaceArgus.html#a06f7163cdf99b4d05862ba8c3a1cced5',1,'Argus::DEFINE_NAMED_UUID_CLASS(SensorModeType)'],['../namespaceArgus.html#aa6ccc226a9d2a6764808655d3c1620f3',1,'Argus::DEFINE_NAMED_UUID_CLASS(SensorPlacement)'],['../namespaceArgus.html#a52e57c9767dc02944e162f229865fb4a',1,'Argus::DEFINE_NAMED_UUID_CLASS(BayerPhase)']]], + ['define_5fuuid',['DEFINE_UUID',['../UUID_8h.html#a004eb5183e98318035bf466f211c0b10',1,'DEFINE_UUID(): UUID.h'],['../group__ArgusOutputStreamSettings.html#ga8461b09a5e76475a66fcb206b98ae275',1,'Argus::DEFINE_UUID(StreamType, STREAM_TYPE_BUFFER, c723d960, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a6760f358350400386c3d0ad038e3cd4a',1,'Argus::DEFINE_UUID(BufferType, BUFFER_TYPE_NONE, c723d961, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a46b0b7dc6d27d205bd14d50cb67916c5',1,'Argus::DEFINE_UUID(SyncType, SYNC_TYPE_NONE, c723d962, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a3612973214e53c4c388e2fbc77ca0e59',1,'Argus::DEFINE_UUID(InterfaceID, IID_BUFFER_OUTPUT_STREAM_SETTINGS, c723d963, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ae5a2e23e8d26effc959eae42bd0fd5b1',1,'Argus::DEFINE_UUID(InterfaceID, IID_BUFFER_OUTPUT_STREAM, c723d964, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a09c961369ce66bc06d066af0771d06e2',1,'Argus::DEFINE_UUID(InterfaceID, IID_BUFFER, c723d965, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a6693bf82f71eba1b77f970effac11308',1,'Argus::DEFINE_UUID(InterfaceID, IID_CAMERA_PROPERTIES, 436d2a73, c85b, 4a29, bce5, 15, 60, 6e, 35, 86, 91)'],['../namespaceArgus.html#afd3e99d51e708803a0a0a1435b0de0ef',1,'Argus::DEFINE_UUID(InterfaceID, IID_SENSOR_MODE, e69015e0, db2a, 11e5, a837, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a118c3c9d81760c87f792223cf24bfedc',1,'Argus::DEFINE_UUID(InterfaceID, IID_CAMERA_PROVIDER, a00f33d7, 8564, 4226, 955c, 2d, 1b, cd, af, a3, 5f)'],['../namespaceArgus.html#a63605df02b590d90ae96f4cd7957fe33',1,'Argus::DEFINE_UUID(InterfaceID, IID_BAYER_HISTOGRAM, 50bc4f1c, 6424, beb7, baae, b0, 90, c9, c3, 25, 9e)'],['../namespaceArgus.html#a36b086cb4c400aad05e82d7cda889451',1,'Argus::DEFINE_UUID(InterfaceID, IID_RGB_HISTOGRAM, 50bc4f1d, 6424, beb7, baae, b0, 90, c9, c3, 25, 9e)'],['../namespaceArgus.html#ade8d4b1a844342fb766d256dfd2d279c',1,'Argus::DEFINE_UUID(InterfaceID, IID_STREAM_CAPTURE_METADATA, 61cbe0a8, 0ee1, 4c67, baae, 02, 02, 1a, b8, d9, 47)'],['../namespaceArgus.html#ad3b5c2b873ffc22fc7717b729a122249',1,'Argus::DEFINE_UUID(InterfaceID, IID_CAPTURE_METADATA, 5f6ac5d4, 59e8, 45d0, 8bac, 38, 09, 1f, f8, 74, a9)'],['../namespaceArgus.html#ab888ff9bf7d6c8d47721acdd669d1087',1,'Argus::DEFINE_UUID(InterfaceID, IID_DENOISE_METADATA, 7A461D23, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a1619caca225ef8894c6a1fe4d64e2208',1,'Argus::DEFINE_UUID(InterfaceID, IID_EDGE_ENHANCE_METADATA, 7A461D24, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a300e6c8cf6e06039fe1b87f35cf478b4',1,'Argus::DEFINE_UUID(InterfaceID, IID_CAPTURE_SESSION, 813644f5, bc21, 4013, af44, dd, da, b5, 7a, 9d, 13)'],['../group__ArgusBufferBufferSettings.html#ga48a730b679c153941bfcf6f9b28d42bc',1,'Argus::DEFINE_UUID(BufferType, BUFFER_TYPE_EGL_IMAGE, c723d966, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#af47908699cd189be38c8dd0434232fb7',1,'Argus::DEFINE_UUID(InterfaceID, IID_EGL_IMAGE_BUFFER_SETTINGS, c723d967, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a76c154b41a52a21d7716966d8dd989d8',1,'Argus::DEFINE_UUID(InterfaceID, IID_EGL_IMAGE_BUFFER, c723d968, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../group__ArgusOutputStreamSettings.html#gae2bcfd31518821768dd2ef3cb0d42b86',1,'Argus::DEFINE_UUID(StreamType, STREAM_TYPE_EGL, 3a659360, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#afd53e548866c90a5cf024eb79cae15ba',1,'Argus::DEFINE_UUID(EGLStreamMode, EGL_STREAM_MODE_MAILBOX, 33661d40, 3ee2, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ae4962dd28ca7f23e441bc782e3364c8c',1,'Argus::DEFINE_UUID(EGLStreamMode, EGL_STREAM_MODE_FIFO, 33661d41, 3ee2, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a5d40cda4a6a87df2bbb4029c74cf1b79',1,'Argus::DEFINE_UUID(InterfaceID, IID_EGL_OUTPUT_STREAM_SETTINGS, 3a659361, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a81bec55fcd4ff640695f475ef093acbe',1,'Argus::DEFINE_UUID(InterfaceID, IID_EGL_OUTPUT_STREAM, 3a659362, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../group__ArgusBufferSync.html#gab25f8c13502b3a0b96d4aa7ee7accf29',1,'Argus::DEFINE_UUID(SyncType, SYNC_TYPE_EGL_SYNC, 5df77c90, 5d1b, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a2bab11bdabb2949ee0d281f1678e110d',1,'Argus::DEFINE_UUID(InterfaceID, IID_EGL_SYNC, 5df77c91, 5d1b, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a3535f80c50ae3e44fc48ffc7ea4edf3c',1,'Argus::DEFINE_UUID(EventType, EVENT_TYPE_ERROR, 2c80d8b0, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a920d6574219fd4b18dac384f7beda0f0',1,'Argus::DEFINE_UUID(EventType, EVENT_TYPE_CAPTURE_STARTED, 2c80d8b1, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#af90c5bb0349160435180d76a5dceff2d',1,'Argus::DEFINE_UUID(EventType, EVENT_TYPE_CAPTURE_COMPLETE, 2c80d8b2, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#abeb9d319a9fc9eeb628b21940c35200e',1,'Argus::DEFINE_UUID(InterfaceID, IID_EVENT, 98bcb49e, fd7d, 11e4, a322, 16, 97, f9, 25, ec, 7b)'],['../namespaceArgus.html#a7ecb6fd23bcdf589511dc5f84a8e3686',1,'Argus::DEFINE_UUID(InterfaceID, IID_EVENT_ERROR, 13e0fc70, 1ab6, 11e5, b939, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a4c08ea4824fe7bbbf9d1fe4c0d850a49',1,'Argus::DEFINE_UUID(InterfaceID, IID_EVENT_CAPTURE_COMPLETE, 8b2b40b5, f1e4, 4c4d, ae1c, f3, 93, f6, 54, 06, d5)'],['../namespaceArgus.html#aa33f90071d2e7f0c243d91e7b4009071',1,'Argus::DEFINE_UUID(InterfaceID, IID_EVENT_PROVIDER, 523ed330, 25dc, 11e5, 867f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a475f9858daf584fca4ca78ba3805c788',1,'Argus::DEFINE_UUID(InterfaceID, IID_EVENT_QUEUE, 944b11f6, e512, 49ad, 8573, fc, 82, 3e, 02, 25, ed)'],['../namespaceArgus.html#a22228f417d5d728d2dcc1dcaabadaacd',1,'Argus::DEFINE_UUID(ExtensionName, EXT_BAYER_AVERAGE_MAP, 12c3de20, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#ab50287119bdfe8ebee24a1fca714761c',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_BAYER_AVERAGE_MAP_SETTINGS, 12c3de21, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#aaaeecb1d30f72f00e36de1ac08ceecdc',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_BAYER_AVERAGE_MAP, 12c3de22, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a8833d4742b538d122ffbc96c9f221eb6',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#ac3c5d5ded3bcda633c70d71081bac894',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_BAYER_SHARPNESS_MAP_SETTINGS, 7d5e0471, 4ea6, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#a942285b27764419526922695e1aeb4a6',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_BAYER_SHARPNESS_MAP, 7d5e0472, 4ea6, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a2e7eb1a9f3ae51f46b4a4b64b7b37916',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#ae6445a2658dc0a12cdd94d8f4eae727d',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a4d801124a23baad457325542bb07448d',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a15955d5296ced2c1577b975abb6e99f1',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a06776997bf07fdb26d0d7931ad76fd85',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a1e9a931124b58548d65523d5aacf8398',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a7ec234340d14190a381524f71a48c134',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a3ab17c142e7439acafe3ccc047e2938e',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a3aae68bca96f6dfc26772550c8c3609b',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#aa42649ee59294156faf77bb97a0ca484',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_FACE_DETECT_CAPS, 40412bb0, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#a52917550dee10678334e2d6993e98023',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_FACE_DETECT_SETTINGS, 40412bb1, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#a55fd8193402e35a6435b2c4af19f1c0b',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_FACE_DETECT_METADATA, 40412bb2, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#a5bac94b2bbf264486625e3a01520a9c0',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_FACE_DETECT_RESULT, 40412bb3, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#aedecf9988914982afa3e78cc532beb79',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a5ca74ec93c66a8125b1d4ad3eb4cc95f',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a95378f223be7a714dc37ee0a61ce45ad',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a688115e51328f7ffb555bb5e9ad0e6e8',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#ad544df8a18333779e0c0da86696a83d2',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a25bafbf08612afadc0321b76817fd6a7',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#ae0b699abb4793cf675ff4b3575c00fa7',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a832daf7d2d8d791c1faec435d1f26e28',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#ab096e724a608fec0ad0febdc5ef72287',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#ab0a8d7fa2d8d50834707069c9130d63a',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a3de1a0e68378a2ed5c38253634635b18',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#aabfdc11881e54497438c7cc96481aeef',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_CAPS, e492d2bf, 5285, 476e, 94c5, ee, 64, d5, 3d, 94, ef)'],['../namespaceArgus_1_1Ext.html#aa2bbec97ff48297aaaa8b332c079bc38',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_REQUEST, 5c868b69, 42f5, 4ec9, 9b93, 44, 11, c9, 6c, 02, e3)'],['../namespaceArgus_1_1Ext.html#ab1fd0918305c9be65715cb73f82e2cff',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA, 68cf6680, 70d7, 4b52, 9a99, 33, fb, 65, 81, a2, 61)'],['../namespaceArgus.html#a786bfc890d03e930fbd8071c98405c63',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a3990bec9e2abe10fcfcb7149be7f90a8',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a9dd27a708be764074960e844d8a0e15f',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a6220adb6deeee3b087a030f22a7765ff',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a14228670c21cc4ec5521f19310c62579',1,'Argus::DEFINE_UUID(DistortionType, DISTORTION_TYPE_POLYNOMIAL, 23e59580, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a69c04eb7e877a593558ebd9ba9457510',1,'Argus::DEFINE_UUID(DistortionType, DISTORTION_TYPE_FISHEYE, 23e59581, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ac8e662d7ac809d11631615c1231bd8e5',1,'Argus::DEFINE_UUID(DistortionType, DISTORTION_TYPE_OMINI_DIRECTIONAL, 23e5bc90, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a2762ed7fc270bcac64eaa56d941e82ef',1,'Argus::DEFINE_UUID(MappingType, MAPPING_TYPE_EQUIDISTANT, 9e7f3c10, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a1736b0c9086070bf9887fc2114adf9c1',1,'Argus::DEFINE_UUID(MappingType, MAPPING_TYPE_EQUISOLID, 9e7f3c11, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#aa68a1526a20ee1e49027c166b013f61a',1,'Argus::DEFINE_UUID(MappingType, MAPPING_TYPE_ORTHOGRAPHIC, 9e7f3c12, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a18a6b146f7d880e8ec93f0a6a618f046',1,'Argus::DEFINE_UUID(MappingType, MAPPING_TYPE_STEREOGRAPHIC, 9e7f3c13, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ad5908dc57ad25ff8629787193933ce11',1,'Argus::DEFINE_UUID(ExtensionName, EXT_SYNC_SENSOR_CALIBRATION_DATA, 10845a70, d52f, 11ea, 8b6e, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#ad7a88c3fd654c912a1df43d8d9da0087',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#ae10758ebe5c040fdf44dd0ae14aadd67',1,'Argus::DEFINE_UUID(InterfaceID, IID_REQUEST, eb9b3750, fc8d, 455f, 8e0f, 91, b3, 3b, d9, 4e, c5)'],['../namespaceArgus.html#a3c93a3fa29230ec9dbd3ddada9caa8ea',1,'Argus::DEFINE_UUID(InterfaceID, IID_SOURCE_SETTINGS, eb7ae38c, 3c62, 4161, a92a, a6, 4f, ba, c6, 38, 83)'],['../namespaceArgus.html#a6a02174e70d3267fa6fbfcec669f0b27',1,'Argus::DEFINE_UUID(InterfaceID, IID_AUTO_CONTROL_SETTINGS, 1f2ad1c6, cb13, 440b, bc95, 3f, fd, 0d, 19, 91, db)'],['../namespaceArgus.html#a63c4684e7250c4dd097cc1e3b81ab7b3',1,'Argus::DEFINE_UUID(InterfaceID, IID_STREAM_SETTINGS, c477aeaf, 9cc8, 4467, a834, c7, 07, d7, b6, 9f, a4)'],['../namespaceArgus.html#af57186f0565e9eab4867f0ed973d66b0',1,'Argus::DEFINE_UUID(InterfaceID, IID_DENOISE_SETTINGS, 7A461D20, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#ae6d0f920bbfb8ed8378f0c158fa5c82a',1,'Argus::DEFINE_UUID(InterfaceID, IID_EDGE_ENHANCE_SETTINGS, 7A461D21, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a287794f51463f98dd84a48612f468030',1,'Argus::DEFINE_UUID(InterfaceID, IID_OUTPUT_STREAM_SETTINGS, 52f2b830, 3d52, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#af64b103aeb58b8415341c7bbc158a8e5',1,'Argus::DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_OFF, AD1E5560, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a7c99fe88d5ad3d931902f6fdf78b757d',1,'Argus::DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_AUTO, AD1E5561, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a6f60e68740e4dad36140e3de61952bbe',1,'Argus::DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_50HZ, AD1E5562, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a8d77726ececc4550668adeee4d236e08',1,'Argus::DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_60HZ, AD1E5563, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a14a5caf1ed16469bacc5345f7d6b92cb',1,'Argus::DEFINE_UUID(AeFlickerState, AE_FLICKER_NONE, AD1E5564, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a706b57af8ce20e61b7cde59c8c80067e',1,'Argus::DEFINE_UUID(AeFlickerState, AE_FLICKER_50HZ, AD1E5565, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a0bb2f99864540f30f84ce64bbc1beeae',1,'Argus::DEFINE_UUID(AeFlickerState, AE_FLICKER_60HZ, AD1E5566, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#acf838aafcb058d52722b57fdf2669baf',1,'Argus::DEFINE_UUID(AeState, AE_STATE_INACTIVE, D2EBEA50, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a48a1ba7917e7d80ab82bf81aff70d394',1,'Argus::DEFINE_UUID(AeState, AE_STATE_SEARCHING, D2EBEA51, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#aa477f7b8882ae44b9d4124b2878d538b',1,'Argus::DEFINE_UUID(AeState, AE_STATE_CONVERGED, D2EBEA52, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#ad618857a7f9efa53e7f78253d11fed99',1,'Argus::DEFINE_UUID(AeState, AE_STATE_FLASH_REQUIRED, D2EBEA53, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a909bc082904975ef3b2f945ae0d4f7d4',1,'Argus::DEFINE_UUID(AeState, AE_STATE_TIMEOUT, D2EBEA54, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a9d0baa03c1f6066b0a2f187024e19c5b',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_OFF, FB3F365A, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#aecd936cb42af8686b0411dd950a498a7',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_AUTO, FB3F365B, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a3fee4ff380fce23cf6c69d415a353fe5',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_INCANDESCENT, FB3F365C, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a1195ea0dd5dab54d047eb7813804b48d',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_FLUORESCENT, FB3F365D, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a0c6485648870fb939afd490314f3f035',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_WARM_FLUORESCENT, FB3F365E, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a7494db59310cc25a4c334f81501e798b',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_DAYLIGHT, FB3F365F, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#afba59e9e7baeb939093d9bc67b9019b3',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_CLOUDY_DAYLIGHT, FB3F3660, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#ae62fb8ea45f3eeb240f6b9e57038c626',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_TWILIGHT, FB3F3661, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#aadcdc266ec7074d24d71a633ca0ad713',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_SHADE, FB3F3662, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a5db635f6d90d9e9fc32d20b77b9a9003',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_MANUAL, 20FB45DA, C49F, 4293, AB02, 13, 3F, 8C, CA, DD, 69)'],['../namespaceArgus.html#acafd1d2cd30cd83388242a7ee47d9602',1,'Argus::DEFINE_UUID(AwbState, AWB_STATE_INACTIVE, E33CDB30, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a9ed57a8d8d120c5704f095f02deab1c2',1,'Argus::DEFINE_UUID(AwbState, AWB_STATE_SEARCHING, E33CDB31, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#ae7be9bfe62ab7278187597a9651bad5c',1,'Argus::DEFINE_UUID(AwbState, AWB_STATE_CONVERGED, E33CDB32, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a5ea6773165bcfb406eeaadf9cda76c6f',1,'Argus::DEFINE_UUID(AwbState, AWB_STATE_LOCKED, E33CDB33, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a0738ace3853021c8c5590bde9f1cd96f',1,'Argus::DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_MANUAL, FB3F3663, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#ac5b6db863a18f0d9b15a487c6dae4e67',1,'Argus::DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_PREVIEW, FB3F3664, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a61a63b989377b3707922b6c522796dd9',1,'Argus::DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_STILL_CAPTURE, FB3F3665, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#ad0c46822435b6725d397458b9bd49598',1,'Argus::DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_VIDEO_RECORD, FB3F3666, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a80f02e787b4a9c13d15f852e4def4d6f',1,'Argus::DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_VIDEO_SNAPSHOT, FB3F3667, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#abfb987ab38d2d403756e843f7a0f60ea',1,'Argus::DEFINE_UUID(DenoiseMode, DENOISE_MODE_OFF, FB3F3668, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#ac839b5f9882095779109a39b05ae28c6',1,'Argus::DEFINE_UUID(DenoiseMode, DENOISE_MODE_FAST, FB3F3669, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a298e016550695d5d2e4df4acafc48938',1,'Argus::DEFINE_UUID(DenoiseMode, DENOISE_MODE_HIGH_QUALITY, FB3F366A, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#aeff9b21b294655958f7f05d2cf6b1bec',1,'Argus::DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_OFF, F7100B40, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a9c4e6f0a1e298ed3326f083d0695edcf',1,'Argus::DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_FAST, F7100B41, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a941091da7a35dc93b7875c39f482f058',1,'Argus::DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_HIGH_QUALITY, F7100B42, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a039fe3ef56533cd250bdb5dca72e2fd2',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_UNKNOWN, 00000000, 93d5, 11e5, 0000, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a66030b7e7355fa65d91ca707c88e6a4e',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_Y8, 569be14a, 93d5, 11e5, 91bc, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a3925fff072da759b0ba67afcfae79ed2',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_Y16, 56ddb19c, 93d5, 11e5, 8e2c, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#aa7f13bfbf04d48413192e116cdafe0c2',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_420_888, 570c10e6, 93d5, 11e5, 8ff3, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a7969f058d0b3a20c16a5c88167e6bf68',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_422_888, 573a7940, 93d5, 11e5, 99c2, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a5086b88ae9ee20f52c2a53f9def0fd8c',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_444_888, 576043dc, 93d5, 11e5, 8983, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a985da20c0396d4f80bad9716c3fe531f',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_JPEG_BLOB, 578b08c4, 93d5, 11e5, 9686, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a15c9a4ad3291db97edc5fdedbaa23b10',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_RAW16, 57b484d8, 93d5, 11e5, aeb6, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#ad8f4398efe05ae1ab6d255b82bb56edc',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_P016, 57b484d9, 93d5, 11e5, aeb6, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#abcd8119135e37616667178b0c031571d',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_DEPTH, 64483464, 4b91, 11e6, bbbd, 40, 16, 7e, ab, 86, 92)'],['../namespaceArgus.html#ada21e799d6b4b1884d9d5675005eeae9',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_YUV, 6453e00c, 4b91, 11e6, 871d, 40, 16, 7e, ab, 86, 92)'],['../namespaceArgus.html#a0d72c0d084dc7fc583276ec32fe93b49',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_RGB, 6463d4c6, 4b91, 11e6, 88a3, 40, 16, 7e, ab, 86, 92)'],['../namespaceArgus.html#af3c01144803283adacd42d85c852bac0',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER, 646f04ea, 4b91, 11e6, 9c06, 40, 16, 7e, ab, 86, 92)'],['../namespaceArgus.html#a68f73ab3307efc974b505fafa9556a5b',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER_PWL, f6a08220, 6a0f, 11eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#acf1e7bcea14fef64dc2f6398b1899eb6',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER_DOL, f6a08221, 6a0f, 11eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a90758ed100a827e48e74b4822492d54b',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_REAR_OR_BOTTOM_OR_BOTTOM_LEFT, 01dba8b0, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a214eda0a1857bf25b62c93bb976b1d5b',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_FRONT_OR_TOP_OR_CENTER_LEFT, 01dba8b1, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#acb3c83d5ed006aacc06ff92db3b47492',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_CENTER_OR_CENTER_RIGHT, 01dba8b2, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a3ca52350d089ddb5fa491faf914b9da3',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_TOP_LEFT, 01dba8b3, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a1aaf41063ac64a6e3caa5fe89fe5e8a8',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_BOTTOM_RIGHT, 01dba8b4, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#abfd25a0ba8e1b80bc0bf3c6fc4675bd3',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_TOP_RIGHT, 01dba8b5, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#aea6c632f9a32588fab25e79dbc316ecf',1,'Argus::DEFINE_UUID(BayerPhase, BAYER_PHASE_UNKNOWN, b9d43270, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ae67d46cbf9211a1208834f8f6b38e734',1,'Argus::DEFINE_UUID(BayerPhase, BAYER_PHASE_RGGB, b9d43271, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ad610720bed7d3086bc339209051b95c9',1,'Argus::DEFINE_UUID(BayerPhase, BAYER_PHASE_BGGR, b9d43272, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ad7f70006efb432338e777ea35dd072f6',1,'Argus::DEFINE_UUID(BayerPhase, BAYER_PHASE_GRBG, b9d43273, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a853a9be8745c1d531f05eea30dc25f40',1,'Argus::DEFINE_UUID(BayerPhase, BAYER_PHASE_GBRG, b9d43274, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)']]], + ['defog_2eh',['DeFog.h',['../DeFog_8h.html',1,'']]], + ['destroy',['destroy',['../classArgus_1_1Destructable.html#a0054a3170fd31e50e998a1f1618bf83a',1,'Argus::Destructable']]], + ['destructable',['Destructable',['../classArgus_1_1Destructable.html',1,'Argus']]], + ['disableoutputstream',['disableOutputStream',['../classArgus_1_1IRequest.html#a6c50745ce8435e28cd83d32399290f2f',1,'Argus::IRequest']]], + ['disconnect',['disconnect',['../classArgus_1_1IEGLOutputStream.html#a22dd0e5a516d25e7bd7e64668393aa7b',1,'Argus::IEGLOutputStream']]], + ['dolwdrsensormode_2eh',['DolWdrSensorMode.h',['../DolWdrSensorMode_8h.html',1,'']]], + ['dump',['dump',['../classArgus_1_1Ext_1_1IDebugCaptureSession.html#aadc128cae58a2e07e984a173cde175f9',1,'Argus::Ext::IDebugCaptureSession']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_65.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_65.html new file mode 100644 index 0000000..66cc834 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_65.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_65.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_65.js new file mode 100644 index 0000000..3547f63 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_65.js @@ -0,0 +1,42 @@ +var searchData= +[ + ['eglsync',['EGLSync',['../group__ArgusBufferEGLSync.html',1,'']]], + ['eglimagebuffer',['EGLImageBuffer',['../group__ArgusEGLImageBuffer.html',1,'']]], + ['eglimagebuffersettings',['EGLImageBufferSettings',['../group__ArgusEGLImageBufferSettings.html',1,'']]], + ['egloutputstream',['EGLOutputStream',['../group__ArgusEGLOutputStream.html',1,'']]], + ['egloutputstreamsettings',['EGLOutputStreamSettings',['../group__ArgusEGLOutputStreamSettings.html',1,'']]], + ['event',['Event',['../group__ArgusEvent.html',1,'']]], + ['error_20event',['Error Event',['../group__ArgusEventError.html',1,'']]], + ['eventqueue',['EventQueue',['../group__ArgusEventQueue.html',1,'']]], + ['ext_3a_3abayeraveragemap',['Ext::BayerAverageMap',['../group__ArgusExtBayerAverageMap.html',1,'']]], + ['ext_3a_3abayersharpnessmap',['Ext::BayerSharpnessMap',['../group__ArgusExtBayerSharpnessMap.html',1,'']]], + ['ext_3a_3ablockingsessioncameraprovider',['Ext::BlockingSessionCameraProvider',['../group__ArgusExtBlockingSessionCameraProvider.html',1,'']]], + ['ext_3a_3adebugcapturesession',['Ext::DebugCaptureSession',['../group__ArgusExtDebugCaptureSession.html',1,'']]], + ['ext_3a_3adefog',['Ext::DeFog',['../group__ArgusExtDeFog.html',1,'']]], + ['ext_3a_3adolwdrsensormode',['Ext::DolWdrSensorMode',['../group__ArgusExtDolWdrSensorMode.html',1,'']]], + ['ext_3a_3asensoreepromdata',['Ext::SensorEepromData',['../group__ArgusExtEepromData.html',1,'']]], + ['extensions',['Extensions',['../group__ArgusExtensions.html',1,'']]], + ['ext_3a_3afacedetect',['Ext::FaceDetect',['../group__ArgusExtFaceDetect.html',1,'']]], + ['ext_3a_3ainternalframecount',['Ext::InternalFrameCount',['../group__ArgusExtInternalFrameCount.html',1,'']]], + ['ext_3a_3anonlinearhistogram',['Ext::NonLinearHistogram',['../group__ArgusExtNonLinearHistogram.html',1,'']]], + ['ext_3a_3asensorotpdata',['Ext::SensorOtpData',['../group__ArgusExtOtpData.html',1,'']]], + ['ext_3a_3apwlwdrsensormode',['Ext::PwlWdrSensorMode',['../group__ArgusExtPwlWdrSensorMode.html',1,'']]], + ['ext_3a_3asensorprivatemetadata',['Ext::SensorPrivateMetadata',['../group__ArgusExtSensorPrivateMetadata.html',1,'']]], + ['ext_3a_3asensorprivatemetadataclientbuffer',['Ext::SensorPrivateMetadataClientBuffer',['../group__ArgusExtSensorPrivateMetadataClientBuffer.html',1,'']]], + ['ext_3a_3asensortimestamptsc',['Ext::SensorTimestampTsc',['../group__ArgusExtSensorTimestampTsc.html',1,'']]], + ['ext_3a_3asyncsensorcalibrationdata',['Ext::SyncSensorCalibrationData',['../group__ArgusExtSyncSensorCalibrationData.html',1,'']]], + ['eglimage_2eh',['EGLImage.h',['../EGLImage_8h.html',1,'']]], + ['eglstream_2eh',['EGLStream.h',['../EGLStream_8h.html',1,'']]], + ['eglsync_2eh',['EGLSync.h',['../EGLSync_8h.html',1,'']]], + ['empty',['empty',['../classArgus_1_1Range.html#a23933aeb5370bd95e058798ab9f7f44f',1,'Argus::Range']]], + ['enableoutputstream',['enableOutputStream',['../classArgus_1_1IRequest.html#af17a10f9bd3526670b61bc9477d5e429',1,'Argus::IRequest']]], + ['end',['end',['../classArgus_1_1Array2D.html#a9a9a704d74021dff1292b71d07ecbcd1',1,'Argus::Array2D::end() const '],['../classArgus_1_1Array2D.html#a3fd76e7ba43ddf77e96ad1c284bb2d40',1,'Argus::Array2D::end()']]], + ['endofstream',['endOfStream',['../classArgus_1_1IBufferOutputStream.html#a5338106d0412600780a0bb5b85e83ce0',1,'Argus::IBufferOutputStream']]], + ['event',['Event',['../classArgus_1_1Event.html',1,'Argus']]], + ['event_2eh',['Event.h',['../Event_8h.html',1,'']]], + ['eventprovider_2eh',['EventProvider.h',['../EventProvider_8h.html',1,'']]], + ['eventqueue',['EventQueue',['../classArgus_1_1EventQueue.html',1,'Argus']]], + ['eventqueue_2eh',['EventQueue.h',['../EventQueue_8h.html',1,'']]], + ['eventtype',['EventType',['../classArgus_1_1EventType.html',1,'Argus']]], + ['eventtype',['EventType',['../classArgus_1_1EventType.html#a96eed032e3dd95c2222eaacfe9b2dab2',1,'Argus::EventType::EventType(uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)'],['../classArgus_1_1EventType.html#a4171cbc4aa1579b39942e273976a9270',1,'Argus::EventType::EventType()']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_66.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_66.html new file mode 100644 index 0000000..3d1f8b3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_66.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_66.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_66.js new file mode 100644 index 0000000..7d02701 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_66.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['facedetectresult',['FaceDetectResult',['../group__ArgusFaceDetectResult.html',1,'']]], + ['facedetect_2eh',['FaceDetect.h',['../FaceDetect_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_67.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_67.html new file mode 100644 index 0000000..41a459a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_67.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_67.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_67.js new file mode 100644 index 0000000..e52feb5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_67.js @@ -0,0 +1,177 @@ +var searchData= +[ + ['g',['g',['../classArgus_1_1RGBTuple.html#a9516fdcf52eb502e914e51ef51d6dfc1',1,'Argus::RGBTuple::g()'],['../classArgus_1_1RGBTuple.html#a8aaba7c05b9ba66e75cff7cc4662caec',1,'Argus::RGBTuple::g() const ']]], + ['get',['get',['../classArgus_1_1UniqueObj.html#ac232da34a550fc649e83f324fcddcba2',1,'Argus::UniqueObj']]], + ['getacquiresync',['getAcquireSync',['../classArgus_1_1IEGLSync.html#aea29df21c9de3a372ea5054801df83ec',1,'Argus::IEGLSync']]], + ['getaeantibandingmode',['getAeAntibandingMode',['../classArgus_1_1IAutoControlSettings.html#ae01194a64dce1b96dac831b07e363688',1,'Argus::IAutoControlSettings']]], + ['getaelock',['getAeLock',['../classArgus_1_1IAutoControlSettings.html#a4bd156e2237d64c13de650d2a8c8f032',1,'Argus::IAutoControlSettings']]], + ['getaelocked',['getAeLocked',['../classArgus_1_1ICaptureMetadata.html#abf822cf9536f41f3a76d43e14b7d5ad9',1,'Argus::ICaptureMetadata']]], + ['getaeregions',['getAeRegions',['../classArgus_1_1ICaptureMetadata.html#a90e107b0a98925ec123bf2892bf708f3',1,'Argus::ICaptureMetadata::getAeRegions()'],['../classArgus_1_1IAutoControlSettings.html#a34283535ad28228952f23a9e46db2650',1,'Argus::IAutoControlSettings::getAeRegions()']]], + ['getaestate',['getAeState',['../classArgus_1_1ICaptureMetadata.html#a919f4bf191780091e046a1d33d356c36',1,'Argus::ICaptureMetadata']]], + ['getafregions',['getAfRegions',['../classArgus_1_1ICaptureMetadata.html#a33c4da9fd59ed4a9e1f60070540f7978',1,'Argus::ICaptureMetadata::getAfRegions()'],['../classArgus_1_1IAutoControlSettings.html#a06e71b5b6c09c4a4117282969c428d25',1,'Argus::IAutoControlSettings::getAfRegions()']]], + ['getallsensormodes',['getAllSensorModes',['../classArgus_1_1ICameraProperties.html#afc4a1031659b1448c6429a48f162ae31',1,'Argus::ICameraProperties']]], + ['getanaloggainrange',['getAnalogGainRange',['../classArgus_1_1ISensorMode.html#abe32fa7a650854b01764dfe73a42043c',1,'Argus::ISensorMode']]], + ['getangularvelocitybias',['getAngularVelocityBias',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#ae81fcd4e0bab6a5e4536eff75e64feca',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getaperturefnumber',['getApertureFNumber',['../classArgus_1_1ISourceSettings.html#a923b2e9f4443e47ea62c0cef24c198f5',1,'Argus::ISourceSettings']]], + ['getaperturemotorspeed',['getApertureMotorSpeed',['../classArgus_1_1ISourceSettings.html#a741bf1b033f17bfd27624998d65602ae',1,'Argus::ISourceSettings']]], + ['getaperturemotorspeedrange',['getApertureMotorSpeedRange',['../classArgus_1_1ICameraProperties.html#ab70e7596d6a4aba288745e9a0317f05f',1,'Argus::ICameraProperties']]], + ['getapertureposition',['getAperturePosition',['../classArgus_1_1ICaptureMetadata.html#a272fea91d57891ecd774d38701fd045a',1,'Argus::ICaptureMetadata::getAperturePosition()'],['../classArgus_1_1ISourceSettings.html#a849cf514b061b5d604a38a41ed25458a',1,'Argus::ISourceSettings::getAperturePosition()']]], + ['getaperturepositionrange',['getAperturePositionRange',['../classArgus_1_1ICameraProperties.html#a9cd98c451472926db4ac380b576c1aed',1,'Argus::ICameraProperties']]], + ['getaperturepositions',['getAperturePositions',['../classArgus_1_1ICameraProperties.html#a847d6f9679c6782ec8e8beba11e5b88e',1,'Argus::ICameraProperties']]], + ['getautocontrolsettings',['getAutoControlSettings',['../classArgus_1_1IRequest.html#a9d507e495cddb7545d406c4fec889695',1,'Argus::IRequest']]], + ['getavailableaperturefnumbers',['getAvailableApertureFNumbers',['../classArgus_1_1ICameraProperties.html#a423bb6659227e30ae4dec272e71ee403',1,'Argus::ICameraProperties']]], + ['getavailableeventtypes',['getAvailableEventTypes',['../classArgus_1_1IEventProvider.html#af38efc609dd89a838aef0be14f12d02e',1,'Argus::IEventProvider']]], + ['getaverages',['getAverages',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#aa46eec481fa2eeef8f497cab9bb1bcb3',1,'Argus::Ext::IBayerAverageMap']]], + ['getawbcct',['getAwbCct',['../classArgus_1_1ICaptureMetadata.html#a1dcf35b95160f8f636815fa0ff6da133',1,'Argus::ICaptureMetadata']]], + ['getawbgains',['getAwbGains',['../classArgus_1_1ICaptureMetadata.html#ac51f2a51d57de9f5e0319e2320e681ce',1,'Argus::ICaptureMetadata']]], + ['getawblock',['getAwbLock',['../classArgus_1_1IAutoControlSettings.html#a54bb7a31c80a75e1c6571be1f56e7787',1,'Argus::IAutoControlSettings']]], + ['getawbmode',['getAwbMode',['../classArgus_1_1ICaptureMetadata.html#a57895228042b144ba7bbea6319f7ea6c',1,'Argus::ICaptureMetadata::getAwbMode()'],['../classArgus_1_1IAutoControlSettings.html#ad739ff8af431390046a48722aa9ff7c3',1,'Argus::IAutoControlSettings::getAwbMode()']]], + ['getawbregions',['getAwbRegions',['../classArgus_1_1ICaptureMetadata.html#ad6546ade71adb7546533c2451d730f94',1,'Argus::ICaptureMetadata::getAwbRegions()'],['../classArgus_1_1IAutoControlSettings.html#a5a8f0f5c88879b23220dffc00ce86981',1,'Argus::IAutoControlSettings::getAwbRegions()']]], + ['getawbstate',['getAwbState',['../classArgus_1_1ICaptureMetadata.html#a62bdff18264fe2f6b200a630c98dc095',1,'Argus::ICaptureMetadata']]], + ['getawbwbestimate',['getAwbWbEstimate',['../classArgus_1_1ICaptureMetadata.html#afcfc8ac7a6d7ccd31b5277c45b8a1665',1,'Argus::ICaptureMetadata']]], + ['getbasicsensormodes',['getBasicSensorModes',['../classArgus_1_1ICameraProperties.html#ab485a075d86ace425b0a5372910b2c21',1,'Argus::ICameraProperties']]], + ['getbayeraveragemapenable',['getBayerAverageMapEnable',['../classArgus_1_1Ext_1_1IBayerAverageMapSettings.html#a0a4e8c05b58466bc4b5df96ff847044f',1,'Argus::Ext::IBayerAverageMapSettings']]], + ['getbayerhistogram',['getBayerHistogram',['../classArgus_1_1ICaptureMetadata.html#a2f81472b69ef2e2b1d0572cd521dab04',1,'Argus::ICaptureMetadata']]], + ['getbayerhistogramregion',['getBayerHistogramRegion',['../classArgus_1_1ICaptureMetadata.html#a293ec437308832511af56628a0f31805',1,'Argus::ICaptureMetadata::getBayerHistogramRegion()'],['../classArgus_1_1IAutoControlSettings.html#a0949075a8f46cee9dd84e1ec00f37e23',1,'Argus::IAutoControlSettings::getBayerHistogramRegion()']]], + ['getbayerphase',['getBayerPhase',['../classArgus_1_1ISensorMode.html#aeb37c9caa9c69ac8df524afb0ef9bdc1',1,'Argus::ISensorMode']]], + ['getbayersharpnessmapenable',['getBayerSharpnessMapEnable',['../classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html#ae3712057fe83dc2d2c619dabd2e46b19',1,'Argus::Ext::IBayerSharpnessMapSettings']]], + ['getbincount',['getBinCount',['../classArgus_1_1IBayerHistogram.html#af25acd8ae2b6320801343bdd6d239b9f',1,'Argus::IBayerHistogram::getBinCount()'],['../classArgus_1_1IRGBHistogram.html#acd569b4aacd4852a79a3c9f686270242',1,'Argus::IRGBHistogram::getBinCount()'],['../classArgus_1_1Ext_1_1IBayerAverageMap.html#a5115cae571ba9ae4615e47e2a84cecf6',1,'Argus::Ext::IBayerAverageMap::getBinCount()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#a857a09eccf5b7a79a1994e18e2c17cbb',1,'Argus::Ext::IBayerSharpnessMap::getBinCount()']]], + ['getbininterval',['getBinInterval',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#a8de14405e92ee3965825303fb73aae42',1,'Argus::Ext::IBayerAverageMap::getBinInterval()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#aae470d2f210c57b3b5927af2b234dd76',1,'Argus::Ext::IBayerSharpnessMap::getBinInterval()']]], + ['getbinningfactor',['getBinningFactor',['../classArgus_1_1ISensorMode.html#aef710a67fae8ef741da093adac84b727',1,'Argus::ISensorMode']]], + ['getbinsize',['getBinSize',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#a914049af3406294aaa83e73bed8fa0b3',1,'Argus::Ext::IBayerAverageMap::getBinSize()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#a5ff8828d18a95d48f839621f57b57665',1,'Argus::Ext::IBayerSharpnessMap::getBinSize()']]], + ['getbinstart',['getBinStart',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#af53cd6457aff366bd580c93f0296e2c4',1,'Argus::Ext::IBayerAverageMap::getBinStart()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#a0fd9503bf8eaa0f7a02c481507b5a6c0',1,'Argus::Ext::IBayerSharpnessMap::getBinStart()']]], + ['getbuffertype',['getBufferType',['../classArgus_1_1IBufferOutputStreamSettings.html#a0c723df4a2b2aabd993a331c32966aa8',1,'Argus::IBufferOutputStreamSettings::getBufferType()'],['../classArgus_1_1IBufferOutputStream.html#a8a4e87b7fe074a3604e50b8e53e95240',1,'Argus::IBufferOutputStream::getBufferType()'],['../classArgus_1_1IBuffer.html#ae95a436e83d498c7ce1ac7931653da11',1,'Argus::IBuffer::getBufferType()']]], + ['getcameradevice',['getCameraDevice',['../classArgus_1_1IOutputStreamSettings.html#aed4ac71a14aa0d97a61db34dbd28323a',1,'Argus::IOutputStreamSettings']]], + ['getcameradevices',['getCameraDevices',['../classArgus_1_1ICameraProvider.html#a7f63838a3f19a97e47a77a3bcb833fd6',1,'Argus::ICameraProvider']]], + ['getcaptureid',['getCaptureId',['../classArgus_1_1ICaptureMetadata.html#a4d9a04079b2060c0bdcd23f8969bcdc8',1,'Argus::ICaptureMetadata::getCaptureId()'],['../classArgus_1_1IEvent.html#a02d9c260f5d322cdf47eb303b3e65a89',1,'Argus::IEvent::getCaptureId()']]], + ['getclientdata',['getClientData',['../classArgus_1_1IBuffer.html#a767bd72bab79a4347f32c7a034f57bdb',1,'Argus::IBuffer::getClientData()'],['../classArgus_1_1ICaptureMetadata.html#a84ba48ca390cf19e816c0f5c3b5b143c',1,'Argus::ICaptureMetadata::getClientData()'],['../classArgus_1_1IRequest.html#a3bc9907a6109167e1bc65c157c57b6b9',1,'Argus::IRequest::getClientData()']]], + ['getclientmetadatabufferenable',['getClientMetadataBufferEnable',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html#a58780cf881ed140adaf8d6217dd9716b',1,'Argus::Ext::ISensorPrivateMetadataClientBufferRequest']]], + ['getclipcounts',['getClipCounts',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#a57c975266b4a2936bca6020db7b65301',1,'Argus::Ext::IBayerAverageMap']]], + ['getcolorcorrectionmatrix',['getColorCorrectionMatrix',['../classArgus_1_1ICaptureMetadata.html#ab6cdd7d5b1b700cedf26c4ab3ea78673',1,'Argus::ICaptureMetadata::getColorCorrectionMatrix()'],['../classArgus_1_1IAutoControlSettings.html#ae42dc1f98a706ea58e01947123067033',1,'Argus::IAutoControlSettings::getColorCorrectionMatrix()']]], + ['getcolorcorrectionmatrixenable',['getColorCorrectionMatrixEnable',['../classArgus_1_1ICaptureMetadata.html#a0502f76cd91c797644aea3cc23b42fd0',1,'Argus::ICaptureMetadata::getColorCorrectionMatrixEnable()'],['../classArgus_1_1IAutoControlSettings.html#a2880815ed38d23f5027c72b9ac93f2b8',1,'Argus::IAutoControlSettings::getColorCorrectionMatrixEnable()']]], + ['getcolorcorrectionmatrixsize',['getColorCorrectionMatrixSize',['../classArgus_1_1IAutoControlSettings.html#a2ea37ac7491888cb1fecf4b08d459083',1,'Argus::IAutoControlSettings']]], + ['getcolorsaturation',['getColorSaturation',['../classArgus_1_1ICaptureMetadata.html#aaf0a31203cf7ce8b6085ba2ce51cb09d',1,'Argus::ICaptureMetadata::getColorSaturation()'],['../classArgus_1_1IAutoControlSettings.html#a96598a88504668ea2e7a2ab9b45c33d8',1,'Argus::IAutoControlSettings::getColorSaturation()']]], + ['getcolorsaturationbias',['getColorSaturationBias',['../classArgus_1_1IAutoControlSettings.html#af2433b421f9534000f6813758fd974db',1,'Argus::IAutoControlSettings']]], + ['getcolorsaturationenable',['getColorSaturationEnable',['../classArgus_1_1IAutoControlSettings.html#aee82acb3f900fb4829bf377bd8bb8410',1,'Argus::IAutoControlSettings']]], + ['getconfidence',['getConfidence',['../classArgus_1_1Ext_1_1IFaceDetectResult.html#ae3a74ab8e63fbe0449f2b4a9726d9b1b',1,'Argus::Ext::IFaceDetectResult']]], + ['getcontrolpointcount',['getControlPointCount',['../classArgus_1_1Ext_1_1IPwlWdrSensorMode.html#a6e60adf988f519e381f3efbc63cfcce7',1,'Argus::Ext::IPwlWdrSensorMode']]], + ['getcontrolpoints',['getControlPoints',['../classArgus_1_1Ext_1_1IPwlWdrSensorMode.html#ae3bac9332fc586b6f03c31b799f3d707',1,'Argus::Ext::IPwlWdrSensorMode']]], + ['getcrop',['getCrop',['../classArgus_1_1ISensorMode.html#a0cf2a04164f05fb62a66c89e15238db2',1,'Argus::ISensorMode']]], + ['getdefogamount',['getDeFogAmount',['../classArgus_1_1Ext_1_1IDeFogSettings.html#a5e9b775314872ae4f80b1cc4501fab09',1,'Argus::Ext::IDeFogSettings']]], + ['getdefogenable',['getDeFogEnable',['../classArgus_1_1Ext_1_1IDeFogSettings.html#a22c549cba657523aeb1280fa19548c9d',1,'Argus::Ext::IDeFogSettings']]], + ['getdefogquality',['getDeFogQuality',['../classArgus_1_1Ext_1_1IDeFogSettings.html#a1deedf48baad18dfd64a88cb29429f8a',1,'Argus::Ext::IDeFogSettings']]], + ['getdenoisemode',['getDenoiseMode',['../classArgus_1_1IDenoiseMetadata.html#ad35ce53392cbb81d0508d64dcd669be1',1,'Argus::IDenoiseMetadata::getDenoiseMode()'],['../classArgus_1_1IDenoiseSettings.html#a54d567615841e8b277c0a2416bd329ea',1,'Argus::IDenoiseSettings::getDenoiseMode()']]], + ['getdenoisestrength',['getDenoiseStrength',['../classArgus_1_1IDenoiseMetadata.html#a5e1c3d84df8f08c8a216f65bf13165f1',1,'Argus::IDenoiseMetadata::getDenoiseStrength()'],['../classArgus_1_1IDenoiseSettings.html#a8d0f2f4d8bdf0991fe7f21c118f85c07',1,'Argus::IDenoiseSettings::getDenoiseStrength()']]], + ['getedgeenhancemode',['getEdgeEnhanceMode',['../classArgus_1_1IEdgeEnhanceMetadata.html#a23f59b915b7b8de00289d9c07b6fc2aa',1,'Argus::IEdgeEnhanceMetadata::getEdgeEnhanceMode()'],['../classArgus_1_1IEdgeEnhanceSettings.html#adbda0b29310a8b62f7f47bad811dba4d',1,'Argus::IEdgeEnhanceSettings::getEdgeEnhanceMode()']]], + ['getedgeenhancestrength',['getEdgeEnhanceStrength',['../classArgus_1_1IEdgeEnhanceMetadata.html#af82fb71ffd6c8b484c0b13917c7eb595',1,'Argus::IEdgeEnhanceMetadata::getEdgeEnhanceStrength()'],['../classArgus_1_1IEdgeEnhanceSettings.html#a82f3b4630bc4bcb2b35b85de24b4cc44',1,'Argus::IEdgeEnhanceSettings::getEdgeEnhanceStrength()']]], + ['getegldisplay',['getEGLDisplay',['../classArgus_1_1IEGLImageBufferSettings.html#ad0349c5881acc9445492ecacbc66202c',1,'Argus::IEGLImageBufferSettings::getEGLDisplay()'],['../classArgus_1_1IEGLImageBuffer.html#a5dac39c31791614e76c3d180cb488f05',1,'Argus::IEGLImageBuffer::getEGLDisplay()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a9876344f5ce237183146222485d56fd0',1,'Argus::IEGLOutputStreamSettings::getEGLDisplay()'],['../classArgus_1_1IEGLOutputStream.html#a649c208a3f42c70a325ef67335e79811',1,'Argus::IEGLOutputStream::getEGLDisplay()']]], + ['geteglimage',['getEGLImage',['../classArgus_1_1IEGLImageBufferSettings.html#a6b15630f79c3fa4f69d438368f9e767e',1,'Argus::IEGLImageBufferSettings::getEGLImage()'],['../classArgus_1_1IEGLImageBuffer.html#a4a8324d3c0f52f6ab6a691b01eecd3ba',1,'Argus::IEGLImageBuffer::getEGLImage()']]], + ['geteglstream',['getEGLStream',['../classArgus_1_1IEGLOutputStream.html#ae4f844fbd5403903e2f44fc7e7a99dd4',1,'Argus::IEGLOutputStream']]], + ['getenableispstage',['getEnableIspStage',['../classArgus_1_1IRequest.html#ac6c0dcb6c1760c64b5af5006eca0f8c5',1,'Argus::IRequest']]], + ['getevent',['getEvent',['../classArgus_1_1IEventQueue.html#a118c2b07a47740267925f4aa2dff640a',1,'Argus::IEventQueue']]], + ['geteventtype',['getEventType',['../classArgus_1_1IEvent.html#a4379af7f983acef26b7241f47e54b308',1,'Argus::IEvent']]], + ['geteventtypes',['getEventTypes',['../classArgus_1_1IEventQueue.html#a2460960a1e826e556125455d2a1e84a6',1,'Argus::IEventQueue']]], + ['getexposurecompensation',['getExposureCompensation',['../classArgus_1_1IAutoControlSettings.html#a0de8a80e016759234a4c110cd686bf7e',1,'Argus::IAutoControlSettings']]], + ['getexposurecompensationrange',['getExposureCompensationRange',['../classArgus_1_1ICameraProperties.html#a2ae73495b253bf7150ed6006ca113e9e',1,'Argus::ICameraProperties']]], + ['getexposurecount',['getExposureCount',['../classArgus_1_1IEGLOutputStreamSettings.html#a83857ede3837cff3e90c5bbd95588fb3',1,'Argus::IEGLOutputStreamSettings::getExposureCount()'],['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#aa963acd3129ebd78950a531dea2133d2',1,'Argus::Ext::IDolWdrSensorMode::getExposureCount()']]], + ['getexposuretimerange',['getExposureTimeRange',['../classArgus_1_1ISensorMode.html#a2b8b2f9aa1fab2217a7afa651ba902d0',1,'Argus::ISensorMode::getExposureTimeRange()'],['../classArgus_1_1ISourceSettings.html#aabdb1b6d5d271bb07122cc8b156de3e5',1,'Argus::ISourceSettings::getExposureTimeRange()']]], + ['getfacedetectenable',['getFaceDetectEnable',['../classArgus_1_1Ext_1_1IFaceDetectSettings.html#a27d11316ead281c727c7acd39441d008',1,'Argus::Ext::IFaceDetectSettings']]], + ['getfacedetectresults',['getFaceDetectResults',['../classArgus_1_1Ext_1_1IFaceDetectMetadata.html#a3d0da4295217fd2bf526ca86f9c9a9df',1,'Argus::Ext::IFaceDetectMetadata']]], + ['getfifolength',['getFifoLength',['../classArgus_1_1IEGLOutputStreamSettings.html#a424435e7de2180a0d53581993115fc01',1,'Argus::IEGLOutputStreamSettings']]], + ['getfisheyemappingtype',['getFisheyeMappingType',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#abba314769f933be1de3b2b85c05c66de',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getflickerstate',['getFlickerState',['../classArgus_1_1ICaptureMetadata.html#a129a230589b06db7a4ccb4e76cfc6771',1,'Argus::ICaptureMetadata']]], + ['getfocallength',['getFocalLength',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#aa0bf8d650782461dfbc596d14f5b10e7',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getfocuserposition',['getFocuserPosition',['../classArgus_1_1ICaptureMetadata.html#aabc2a04cf17cd231fe41f925c1bf905c',1,'Argus::ICaptureMetadata']]], + ['getfocusposition',['getFocusPosition',['../classArgus_1_1ISourceSettings.html#a2cdd0d750bba5848cec6c6cdb44b6b6f',1,'Argus::ISourceSettings']]], + ['getfocuspositionrange',['getFocusPositionRange',['../classArgus_1_1ICameraProperties.html#a905673cc0e0c9229fd6b48d4e33d7726',1,'Argus::ICameraProperties']]], + ['getframeduration',['getFrameDuration',['../classArgus_1_1ICaptureMetadata.html#ae56b617b3416599dae93145dda3792c5',1,'Argus::ICaptureMetadata']]], + ['getframedurationrange',['getFrameDurationRange',['../classArgus_1_1ISensorMode.html#a1c0962fe8bd2c5a562e799766e7f5d75',1,'Argus::ISensorMode::getFrameDurationRange()'],['../classArgus_1_1ISourceSettings.html#a6cbc2fe946e1f77f48c6d9f3df184c99',1,'Argus::ISourceSettings::getFrameDurationRange()']]], + ['getframereadouttime',['getFrameReadoutTime',['../classArgus_1_1ICaptureMetadata.html#a9d94662b7537f8c12554da01be4fb2a2',1,'Argus::ICaptureMetadata']]], + ['getgainrange',['getGainRange',['../classArgus_1_1ISourceSettings.html#a41c3135c4a5e43d37ac58e0983df9ad7',1,'Argus::ISourceSettings']]], + ['getgravityacc',['getGravityAcc',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a64336a87df5cb9a401057331e8ac4748',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['gethdrratiorange',['getHdrRatioRange',['../classArgus_1_1ISensorMode.html#ae0dcfe692f52c2059f9bafd588ab0a0c',1,'Argus::ISensorMode']]], + ['gethistogram',['getHistogram',['../classArgus_1_1IBayerHistogram.html#a2d9f63683adf9957dc3cebe351b974eb',1,'Argus::IBayerHistogram::getHistogram()'],['../classArgus_1_1IRGBHistogram.html#a3cfc447d9f7a1e84a945ec05b820b9fd',1,'Argus::IRGBHistogram::getHistogram()']]], + ['gethistogrambinvalues',['getHistogramBinValues',['../classArgus_1_1Ext_1_1INonLinearHistogram.html#ab8f03c971ede4fd6047563030991a532',1,'Argus::Ext::INonLinearHistogram']]], + ['getimagesizeinpixels',['getImageSizeInPixels',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a1113fcbd1a1697fc0e43dbfebd5914b9',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getimurotationparams',['getImuRotationParams',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#aa86b7fbb79b1b9a0e7f2cf568f2f8ba1',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getimutranslationparams',['getImuTranslationParams',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#aa6613e40858030fa752362969bb2f532',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getinputbitdepth',['getInputBitDepth',['../classArgus_1_1ISensorMode.html#a3df17c3f6e992a4f1bd24474da74ea0e',1,'Argus::ISensorMode']]], + ['getinterface',['getInterface',['../classArgus_1_1InterfaceProvider.html#a63917032ebe375098e45a673e5ae818a',1,'Argus::InterfaceProvider']]], + ['getinternalframecount',['getInternalFrameCount',['../classArgus_1_1Ext_1_1IInternalFrameCount.html#a7ff02d93895277658df8847f3120f73b',1,'Argus::Ext::IInternalFrameCount']]], + ['getispdigitalgain',['getIspDigitalGain',['../classArgus_1_1ICaptureMetadata.html#a10381e1e830640e2fc373569ffe17213',1,'Argus::ICaptureMetadata']]], + ['getispdigitalgainrange',['getIspDigitalGainRange',['../classArgus_1_1ICameraProperties.html#aea5453e4036326b63ea795237a135632',1,'Argus::ICameraProperties::getIspDigitalGainRange()'],['../classArgus_1_1IAutoControlSettings.html#a6b494e039255bed4679d43fb527fc28b',1,'Argus::IAutoControlSettings::getIspDigitalGainRange()']]], + ['getleftmarginwidth',['getLeftMarginWidth',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#aea95477edf8e6a80153d80eb7b8eb6ef',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getlensdistortiontype',['getLensDistortionType',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#af2de75ddea8925ef06166c09862836d7',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getlinearaccbias',['getLinearAccBias',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#ad20d55146f0d0407d52e54aa2c192b50',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getlineinfomarkerwidth',['getLineInfoMarkerWidth',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#a65967d24769d3d18c89c2410ebd76887',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getmaxaeregions',['getMaxAeRegions',['../classArgus_1_1ICameraProperties.html#a372e6b264377c0ff6f29b399d8687137',1,'Argus::ICameraProperties']]], + ['getmaxafregions',['getMaxAfRegions',['../classArgus_1_1ICameraProperties.html#a943c24c6f359a47b4c12699588053888',1,'Argus::ICameraProperties']]], + ['getmaxawbregions',['getMaxAwbRegions',['../classArgus_1_1ICameraProperties.html#a2e89af6e134c60d6ca3bc0caecdfdf63',1,'Argus::ICameraProperties']]], + ['getmaxfacedetectresults',['getMaxFaceDetectResults',['../classArgus_1_1Ext_1_1IFaceDetectCaps.html#a7aa3df99ba453beede25807788a9aef5',1,'Argus::Ext::IFaceDetectCaps']]], + ['getmetadata',['getMetadata',['../classArgus_1_1IBuffer.html#a2ad43954937515a506206e3fcbe7228e',1,'Argus::IBuffer::getMetadata()'],['../classArgus_1_1IEventCaptureComplete.html#aa23f7bf7ab6dec11970cd75426983120',1,'Argus::IEventCaptureComplete::getMetadata()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadata.html#ad5d098a7f14f18794ec53d3594d452a3',1,'Argus::Ext::ISensorPrivateMetadata::getMetadata()']]], + ['getmetadataenable',['getMetadataEnable',['../classArgus_1_1IBufferOutputStreamSettings.html#abb691b696dc815cbf2ce7f0bf3f1e3c4',1,'Argus::IBufferOutputStreamSettings::getMetadataEnable()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a6a118ad0b9031e1ccfb1bb24f348aac7',1,'Argus::IEGLOutputStreamSettings::getMetadataEnable()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html#a19c2e13714b5e8bc36525a7947ec43d6',1,'Argus::Ext::ISensorPrivateMetadataRequest::getMetadataEnable()']]], + ['getmetadatasize',['getMetadataSize',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.html#aaa5da5cf3038cedc5e26a92670411875',1,'Argus::Ext::ISensorPrivateMetadataCaps::getMetadataSize()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadata.html#a4a7d4d4ab579b47364215ae20d285b99',1,'Argus::Ext::ISensorPrivateMetadata::getMetadataSize()']]], + ['getminaeregionsize',['getMinAeRegionSize',['../classArgus_1_1ICameraProperties.html#afecb637989600986bc09e7305a7b9295',1,'Argus::ICameraProperties']]], + ['getmode',['getMode',['../classArgus_1_1IEGLOutputStreamSettings.html#a999f2f7245681f2521d5b4cc7a1901c3',1,'Argus::IEGLOutputStreamSettings']]], + ['getmodelname',['getModelName',['../classArgus_1_1ICameraProperties.html#a0b732f76de9af87565d17e46a23fe525',1,'Argus::ICameraProperties']]], + ['getmodulestring',['getModuleString',['../classArgus_1_1ICameraProperties.html#ab1f686ecac31392ab7d4e8d9ae895326',1,'Argus::ICameraProperties']]], + ['getname',['getName',['../classArgus_1_1NamedUUID.html#ac4b955b92325de19ef969e1de4e2d416',1,'Argus::NamedUUID']]], + ['getnextevent',['getNextEvent',['../classArgus_1_1IEventQueue.html#ac3410fdb8b9d18d39243d93d4645f26c',1,'Argus::IEventQueue']]], + ['getopticalblack',['getOpticalBlack',['../classArgus_1_1ISourceSettings.html#a81341fd47703ea1f48104b0e8a0af1a6',1,'Argus::ISourceSettings']]], + ['getopticalblackenable',['getOpticalBlackEnable',['../classArgus_1_1ISourceSettings.html#a0a5e6f5cb6b542d92ff0cc06736097cc',1,'Argus::ISourceSettings']]], + ['getopticalblackrowcount',['getOpticalBlackRowCount',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#afdc67463b0a659537fda47b1a6cb6c33',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getoutputbitdepth',['getOutputBitDepth',['../classArgus_1_1ISensorMode.html#abfb8ec340a93413809c6554a307ddde9',1,'Argus::ISensorMode']]], + ['getoutputstreams',['getOutputStreams',['../classArgus_1_1IRequest.html#a76357f02804e1a067c7f0496af9ffa78',1,'Argus::IRequest']]], + ['getphysicalresolution',['getPhysicalResolution',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#ae01072cebfa5b1c8ab86597e5d461e4f',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getpixelformat',['getPixelFormat',['../classArgus_1_1IEGLOutputStreamSettings.html#ae2ce3d388474993ab8aa31c2c44e04ec',1,'Argus::IEGLOutputStreamSettings::getPixelFormat()'],['../classArgus_1_1IEGLOutputStream.html#a3faf06ac487115f1be960fa1699a0aa9',1,'Argus::IEGLOutputStream::getPixelFormat()']]], + ['getpostprocessingenable',['getPostProcessingEnable',['../classArgus_1_1IStreamSettings.html#a77d1750bc5a1cfb7c7ec961f21ccef09',1,'Argus::IStreamSettings']]], + ['getprincipalpoint',['getPrincipalPoint',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#ac9454b20211b4880368990e86fc49011',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getradialcoeffs',['getRadialCoeffs',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#ad44a62d4736942172df28c21aba0484f',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getradialcoeffscount',['getRadialCoeffsCount',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#aedfce890d6c0f66d5d655cfb5f1c0053',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getrect',['getRect',['../classArgus_1_1Ext_1_1IFaceDetectResult.html#a670c55f9eae01fefd70cb256af2a4840',1,'Argus::Ext::IFaceDetectResult']]], + ['getresolution',['getResolution',['../classArgus_1_1ISensorMode.html#a07c3812c182fe139ef9b6a60804be398',1,'Argus::ISensorMode::getResolution()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a41c5a764536e61c7244c9877449a1e71',1,'Argus::IEGLOutputStreamSettings::getResolution()'],['../classArgus_1_1IEGLOutputStream.html#a4e572f8ba40483c833ec9c2e6ba71870',1,'Argus::IEGLOutputStream::getResolution()']]], + ['getrgbhistogram',['getRGBHistogram',['../classArgus_1_1ICaptureMetadata.html#a776256477536913b9d07759e170a4f50',1,'Argus::ICaptureMetadata']]], + ['getrightmarginwidth',['getRightMarginWidth',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#af3ab857774893a1ac66f13cf0310c93e',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getrotationparams',['getRotationParams',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a85b353befaef6a9fed831c76d3c11499',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getscenelux',['getSceneLux',['../classArgus_1_1ICaptureMetadata.html#a633017c0368156c00b99fcf45f81752c',1,'Argus::ICaptureMetadata']]], + ['getsensoranaloggain',['getSensorAnalogGain',['../classArgus_1_1ICaptureMetadata.html#af42d6b1c3a5cb94bd5ed444e06e5fb40',1,'Argus::ICaptureMetadata']]], + ['getsensoreepromdata',['getSensorEepromData',['../classArgus_1_1Ext_1_1ISensorEepromData.html#a285cb6e88f1dacae07895e839f8de6db',1,'Argus::Ext::ISensorEepromData']]], + ['getsensoreepromdatasize',['getSensorEepromDataSize',['../classArgus_1_1Ext_1_1ISensorEepromData.html#a52bb24f48c0977574c72ddcd7bf47a43',1,'Argus::Ext::ISensorEepromData']]], + ['getsensoreoftimestamptsc',['getSensorEofTimestampTsc',['../classArgus_1_1Ext_1_1ISensorTimestampTsc.html#a6bc7b6c60a86037d6a83536057d5c346',1,'Argus::Ext::ISensorTimestampTsc']]], + ['getsensorexposuretime',['getSensorExposureTime',['../classArgus_1_1ICaptureMetadata.html#a0bff976e9d1dfd965145e5c18f91fbb0',1,'Argus::ICaptureMetadata']]], + ['getsensormode',['getSensorMode',['../classArgus_1_1ISourceSettings.html#a2fb8a20e2e089ba358f4add0f5061924',1,'Argus::ISourceSettings']]], + ['getsensormodetype',['getSensorModeType',['../classArgus_1_1ISensorMode.html#ac1384dca87b03da766bdd6920847b8b6',1,'Argus::ISensorMode']]], + ['getsensorotpdata',['getSensorOtpData',['../classArgus_1_1Ext_1_1ISensorOtpData.html#a1e8afcb90ea7c8725b795b40551be761',1,'Argus::Ext::ISensorOtpData']]], + ['getsensorotpdatasize',['getSensorOtpDataSize',['../classArgus_1_1Ext_1_1ISensorOtpData.html#aa204a965890606d0a335d3e1d39a6dcb',1,'Argus::Ext::ISensorOtpData']]], + ['getsensorplacement',['getSensorPlacement',['../classArgus_1_1ICameraProperties.html#aced19b2fb5048198f53e6ae993eff008',1,'Argus::ICameraProperties']]], + ['getsensorsensitivity',['getSensorSensitivity',['../classArgus_1_1ICaptureMetadata.html#ab301501f415adfe2c1c69a87d39d9012',1,'Argus::ICaptureMetadata']]], + ['getsensorsoftimestamptsc',['getSensorSofTimestampTsc',['../classArgus_1_1Ext_1_1ISensorTimestampTsc.html#ac6f2ccee516561329ee9aef39ad3d6d1',1,'Argus::Ext::ISensorTimestampTsc']]], + ['getsensortimestamp',['getSensorTimestamp',['../classArgus_1_1ICaptureMetadata.html#ae4ff79489b0aef6766742a61d1a17cfc',1,'Argus::ICaptureMetadata']]], + ['getsharpnessscore',['getSharpnessScore',['../classArgus_1_1ICaptureMetadata.html#a61f732ae03d05a82b945a845b8862473',1,'Argus::ICaptureMetadata']]], + ['getsharpnessvalues',['getSharpnessValues',['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#adf6bf6562f95fcf538b9324471cd722e',1,'Argus::Ext::IBayerSharpnessMap']]], + ['getsize',['getSize',['../classArgus_1_1IEventQueue.html#ac3d00adb91d653dc9b1d3a60ce6b978e',1,'Argus::IEventQueue']]], + ['getskew',['getSkew',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#adf8cc6858060e1b213dccb073b203c3d',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getsourcecliprect',['getSourceClipRect',['../classArgus_1_1IStreamCaptureMetadata.html#a23a81e22a569df320c30183236e59602',1,'Argus::IStreamCaptureMetadata::getSourceClipRect()'],['../classArgus_1_1IStreamSettings.html#af62fc7ceaebb8be1cce415c83c213f03',1,'Argus::IStreamSettings::getSourceClipRect()']]], + ['getsourcesettings',['getSourceSettings',['../classArgus_1_1IRequest.html#ae1cda43ecffe49f5bd7688302c8c973d',1,'Argus::IRequest']]], + ['getstatus',['getStatus',['../classArgus_1_1IEventError.html#a693a4a9eccbe625ef1db5a25de4c76fb',1,'Argus::IEventError::getStatus()'],['../classArgus_1_1IEventCaptureComplete.html#aa0d532e250496e1e929a213afe7aeb70',1,'Argus::IEventCaptureComplete::getStatus()']]], + ['getstreammetadata',['getStreamMetadata',['../classArgus_1_1ICaptureMetadata.html#a6a29343fc48af79064fab6d5e390cce0',1,'Argus::ICaptureMetadata']]], + ['getstreamsettings',['getStreamSettings',['../classArgus_1_1IRequest.html#aae9e0f4a0f5d1d0bc4e7a657f24def41',1,'Argus::IRequest']]], + ['getsyncsensormoduleid',['getSyncSensorModuleId',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a8237d1f95c41bfc1c8b8b5b14460a821',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getsynctype',['getSyncType',['../classArgus_1_1IBufferOutputStreamSettings.html#a03dcea2162f099cda3b2a59c33ef8db2',1,'Argus::IBufferOutputStreamSettings::getSyncType()'],['../classArgus_1_1IBufferOutputStream.html#add4dafbd5b20400039a432c0c16fbdab',1,'Argus::IBufferOutputStream::getSyncType()'],['../classArgus_1_1IBuffer.html#ad7c08f7f67f07f3a7de16b4248a9992c',1,'Argus::IBuffer::getSyncType()']]], + ['gettangentialcoeffs',['getTangentialCoeffs',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a33b0b2255dd7963814ac1b6dfa36c6e7',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['gettangentialcoeffscount',['getTangentialCoeffsCount',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a15ba9ab34ad664c01b8b2f70e08b706a',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['gettime',['getTime',['../classArgus_1_1IEvent.html#a6ead1c7618a5679a9d19d766126ca3d9',1,'Argus::IEvent']]], + ['gettonemapcurve',['getToneMapCurve',['../classArgus_1_1ICaptureMetadata.html#a99b0918ad354b228b3202f4351a11d6a',1,'Argus::ICaptureMetadata::getToneMapCurve()'],['../classArgus_1_1IAutoControlSettings.html#a8bb8c7f22a54d01a325435df3a79ce57',1,'Argus::IAutoControlSettings::getToneMapCurve()']]], + ['gettonemapcurveenable',['getToneMapCurveEnable',['../classArgus_1_1IAutoControlSettings.html#ab5b6e206509f251ce7d5cd058d110b5c',1,'Argus::IAutoControlSettings']]], + ['gettonemapcurveenabled',['getToneMapCurveEnabled',['../classArgus_1_1ICaptureMetadata.html#aa42e458304f64dd30d9ce8b686286b5f',1,'Argus::ICaptureMetadata']]], + ['gettonemapcurvesize',['getToneMapCurveSize',['../classArgus_1_1IAutoControlSettings.html#ac813eee05838049acf97b1c23927573d',1,'Argus::IAutoControlSettings']]], + ['gettranslationparams',['getTranslationParams',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#aa8c0ef8a26358de0e2155ade57004c1d',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getuuid',['getUUID',['../classArgus_1_1ICameraProperties.html#acc03568c65948948525a19c8fefea785',1,'Argus::ICameraProperties']]], + ['getvendor',['getVendor',['../classArgus_1_1ICameraProvider.html#a7027c9a594e9c5a93d29b4717d21b004',1,'Argus::ICameraProvider']]], + ['getversion',['getVersion',['../classArgus_1_1ICameraProvider.html#a3012922e1e188d2c74ef0fbe6bc1e663',1,'Argus::ICameraProvider']]], + ['getverticalblankperiodrowcount',['getVerticalBlankPeriodRowCount',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#ab095a49fd2f0b2a7b213bc2292b4b00b',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getwbgains',['getWbGains',['../classArgus_1_1IAutoControlSettings.html#a444bde06c05f51441b27cc104c2978a6',1,'Argus::IAutoControlSettings']]], + ['getworkingrange',['getWorkingRange',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#ac1327cfca0f6e5c7abfff81ef04ab5aa',1,'Argus::Ext::IBayerAverageMap']]], + ['geven',['gEven',['../classArgus_1_1BayerTuple.html#ab793a9235eb65c86dc8a7c54301f8221',1,'Argus::BayerTuple::gEven()'],['../classArgus_1_1BayerTuple.html#a44641085e5c41d9b9df8fcba8c8e6069',1,'Argus::BayerTuple::gEven() const ']]], + ['godd',['gOdd',['../classArgus_1_1BayerTuple.html#a18b1d6c872f7bdfc8d5eab7ce44818c0',1,'Argus::BayerTuple::gOdd()'],['../classArgus_1_1BayerTuple.html#a2620eca95b0cf37a55fe04acfe5f82b9',1,'Argus::BayerTuple::gOdd() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_68.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_68.html new file mode 100644 index 0000000..6df9097 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_68.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_68.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_68.js new file mode 100644 index 0000000..63ce0c4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_68.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['height',['height',['../classArgus_1_1Size2D.html#a3310628cbf3765983b55c176914c3cb0',1,'Argus::Size2D::height()'],['../classArgus_1_1Size2D.html#a7c1245c85a78d0bdf9eb0be84a538c3a',1,'Argus::Size2D::height() const '],['../classArgus_1_1Rectangle.html#a20e462cdbdf495ce79beb62794049355',1,'Argus::Rectangle::height()']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_69.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_69.html new file mode 100644 index 0000000..1a00b55 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_69.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_69.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_69.js new file mode 100644 index 0000000..cb14f95 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_69.js @@ -0,0 +1,68 @@ +var searchData= +[ + ['iautocontrolsettings',['IAutoControlSettings',['../classArgus_1_1IAutoControlSettings.html',1,'Argus']]], + ['ibayeraveragemap',['IBayerAverageMap',['../classArgus_1_1Ext_1_1IBayerAverageMap.html',1,'Argus::Ext']]], + ['ibayeraveragemapsettings',['IBayerAverageMapSettings',['../classArgus_1_1Ext_1_1IBayerAverageMapSettings.html',1,'Argus::Ext']]], + ['ibayerhistogram',['IBayerHistogram',['../classArgus_1_1IBayerHistogram.html',1,'Argus']]], + ['ibayersharpnessmap',['IBayerSharpnessMap',['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html',1,'Argus::Ext']]], + ['ibayersharpnessmapsettings',['IBayerSharpnessMapSettings',['../classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html',1,'Argus::Ext']]], + ['iblockingsessioncameraprovider',['IBlockingSessionCameraProvider',['../classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html',1,'Argus::Ext']]], + ['ibuffer',['IBuffer',['../classArgus_1_1IBuffer.html',1,'Argus']]], + ['ibufferoutputstream',['IBufferOutputStream',['../classArgus_1_1IBufferOutputStream.html',1,'Argus']]], + ['ibufferoutputstreamsettings',['IBufferOutputStreamSettings',['../classArgus_1_1IBufferOutputStreamSettings.html',1,'Argus']]], + ['icameraproperties',['ICameraProperties',['../classArgus_1_1ICameraProperties.html',1,'Argus']]], + ['icameraprovider',['ICameraProvider',['../classArgus_1_1ICameraProvider.html',1,'Argus']]], + ['icapturemetadata',['ICaptureMetadata',['../classArgus_1_1ICaptureMetadata.html',1,'Argus']]], + ['icapturesession',['ICaptureSession',['../classArgus_1_1ICaptureSession.html',1,'Argus']]], + ['id',['id',['../classArgus_1_1IBufferOutputStreamSettings.html#a8743ff8e65cc4c21b098fabf38ade827',1,'Argus::IBufferOutputStreamSettings::id()'],['../classArgus_1_1IBufferOutputStream.html#a0317bd852f320c50c19ccd7eecd47ce1',1,'Argus::IBufferOutputStream::id()'],['../classArgus_1_1IBuffer.html#aab0e993dece314f2c8f7a837a251da64',1,'Argus::IBuffer::id()'],['../classArgus_1_1ICameraProperties.html#a39cac6824b6e2c3e5e7f66307c073995',1,'Argus::ICameraProperties::id()'],['../classArgus_1_1ISensorMode.html#a3e34f44c71cecef2249f4be9daa73f22',1,'Argus::ISensorMode::id()'],['../classArgus_1_1ICameraProvider.html#a77d41f6dc077fa98ff7a72215ab12a13',1,'Argus::ICameraProvider::id()'],['../classArgus_1_1IBayerHistogram.html#a4b532c3517e7674b97381e39b54e1470',1,'Argus::IBayerHistogram::id()'],['../classArgus_1_1IRGBHistogram.html#a4ae9c83ee71faaa158adf3d44edadefd',1,'Argus::IRGBHistogram::id()'],['../classArgus_1_1IStreamCaptureMetadata.html#a5e66389187fa1c61e37d537cb01fa32a',1,'Argus::IStreamCaptureMetadata::id()'],['../classArgus_1_1ICaptureMetadata.html#a58224c24f6e30da2fdefa0b8dcc6540c',1,'Argus::ICaptureMetadata::id()'],['../classArgus_1_1IDenoiseMetadata.html#af023e0cd90c9cbf7f3e19342c8230626',1,'Argus::IDenoiseMetadata::id()'],['../classArgus_1_1IEdgeEnhanceMetadata.html#af0af2ccc90e4df66a5cbb93f7f47e450',1,'Argus::IEdgeEnhanceMetadata::id()'],['../classArgus_1_1ICaptureSession.html#ac0b65ce5cbf34a96dfce31f93ba238b0',1,'Argus::ICaptureSession::id()'],['../classArgus_1_1IEGLImageBufferSettings.html#a88e64f62b51509828b4cf0cc1c4cd659',1,'Argus::IEGLImageBufferSettings::id()'],['../classArgus_1_1IEGLImageBuffer.html#a4f708348c9f7faf51f9f0b8043922b9e',1,'Argus::IEGLImageBuffer::id()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a0bb9593099b2cc1848883f20ac544552',1,'Argus::IEGLOutputStreamSettings::id()'],['../classArgus_1_1IEGLOutputStream.html#afaaee82ed7f3566ea19a35c2f62e9c84',1,'Argus::IEGLOutputStream::id()'],['../classArgus_1_1IEGLSync.html#a5bd06afd2feb573a35105b6f022e2e38',1,'Argus::IEGLSync::id()'],['../classArgus_1_1IEvent.html#a7547789827f85e25339bc2158b8d114d',1,'Argus::IEvent::id()'],['../classArgus_1_1IEventError.html#aae8cb52e1f66ae99bfde7fb080bd5c30',1,'Argus::IEventError::id()'],['../classArgus_1_1IEventCaptureComplete.html#a7114d3d6135df50ef9da0e0b587b8afd',1,'Argus::IEventCaptureComplete::id()'],['../classArgus_1_1IEventProvider.html#a7a20d0d3e719ee000443ea5c8503ceaa',1,'Argus::IEventProvider::id()'],['../classArgus_1_1IEventQueue.html#a4643369bf15d7893609f54c23f435de9',1,'Argus::IEventQueue::id()'],['../classArgus_1_1Ext_1_1IBayerAverageMapSettings.html#a096ebc7d424f3ef925f22df4755f7183',1,'Argus::Ext::IBayerAverageMapSettings::id()'],['../classArgus_1_1Ext_1_1IBayerAverageMap.html#a45045bc38cc6e9163dd1bda1e579026f',1,'Argus::Ext::IBayerAverageMap::id()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html#ae2ee78e747dfe0d31a6daac2ccc42ad5',1,'Argus::Ext::IBayerSharpnessMapSettings::id()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#ad74b3a663d6b2b2e696b8164b5175f64',1,'Argus::Ext::IBayerSharpnessMap::id()'],['../classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html#a220e4a0df69dfa7a639d2c167c7e7bae',1,'Argus::Ext::IBlockingSessionCameraProvider::id()'],['../classArgus_1_1Ext_1_1IDebugCaptureSession.html#a526f29e629fc81f38e8fd7e8d405c713',1,'Argus::Ext::IDebugCaptureSession::id()'],['../classArgus_1_1Ext_1_1IDeFogSettings.html#a6c8e9ba7395190b5c0cd3f95c053f7a2',1,'Argus::Ext::IDeFogSettings::id()'],['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#a18266d68df02d7b68d7ad588f2e9a84b',1,'Argus::Ext::IDolWdrSensorMode::id()'],['../classArgus_1_1Ext_1_1IFaceDetectCaps.html#a790a850832087de03fa30a7f244c94eb',1,'Argus::Ext::IFaceDetectCaps::id()'],['../classArgus_1_1Ext_1_1IFaceDetectSettings.html#a97456d83f8388e92250685c0d575502a',1,'Argus::Ext::IFaceDetectSettings::id()'],['../classArgus_1_1Ext_1_1IFaceDetectMetadata.html#ac18aed9c05787490c890b634cbc28f00',1,'Argus::Ext::IFaceDetectMetadata::id()'],['../classArgus_1_1Ext_1_1IFaceDetectResult.html#a0b6b3e7d3c37875dda95e2c5a95d26de',1,'Argus::Ext::IFaceDetectResult::id()'],['../classArgus_1_1Ext_1_1IInternalFrameCount.html#a3c63a6522b05edc2f086c789038d6b8d',1,'Argus::Ext::IInternalFrameCount::id()'],['../classArgus_1_1Ext_1_1INonLinearHistogram.html#a9c00f8caca6bb990aa939b46dbb2a8e0',1,'Argus::Ext::INonLinearHistogram::id()'],['../classArgus_1_1Ext_1_1IPwlWdrSensorMode.html#a024607e6f3094e2a48eb65a3fe4b8238',1,'Argus::Ext::IPwlWdrSensorMode::id()'],['../classArgus_1_1Ext_1_1ISensorEepromData.html#a623032c2fc4882eedc6b51538fdd3b68',1,'Argus::Ext::ISensorEepromData::id()'],['../classArgus_1_1Ext_1_1ISensorOtpData.html#a9554160485d03509712182eb90c4718e',1,'Argus::Ext::ISensorOtpData::id()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.html#a39eae4e52c8b673d8d58dde59bc15aa2',1,'Argus::Ext::ISensorPrivateMetadataCaps::id()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html#a46c4ca4fb719812ec02ea542e4ccddb3',1,'Argus::Ext::ISensorPrivateMetadataRequest::id()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadata.html#aabf382e60097c4858ec8270cf410b543',1,'Argus::Ext::ISensorPrivateMetadata::id()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html#a4d45457bcc5fd3d0a1d95aa24b479814',1,'Argus::Ext::ISensorPrivateMetadataClientBufferRequest::id()'],['../classArgus_1_1Ext_1_1ISensorTimestampTsc.html#a6db4487603a843ee984cb3a356927ec2',1,'Argus::Ext::ISensorTimestampTsc::id()'],['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a9b8fcbfad95e28c0a4c76411285d90fa',1,'Argus::Ext::ISyncSensorCalibrationData::id()'],['../classArgus_1_1IRequest.html#af4bd7cfdde0f23567dc35b1d21afd8cc',1,'Argus::IRequest::id()'],['../classArgus_1_1ISourceSettings.html#a56574ec0031b366004f4920ef49427d3',1,'Argus::ISourceSettings::id()'],['../classArgus_1_1IAutoControlSettings.html#a61f7cfc50b2667eac0f5db0356fcc525',1,'Argus::IAutoControlSettings::id()'],['../classArgus_1_1IStreamSettings.html#a64399957baa4a690fcc23d579cb18fc4',1,'Argus::IStreamSettings::id()'],['../classArgus_1_1IDenoiseSettings.html#ab4e8f4a7129fda06fa50bce26a4a8bdc',1,'Argus::IDenoiseSettings::id()'],['../classArgus_1_1IEdgeEnhanceSettings.html#ae685378dee0ab54edec873ebb78b7510',1,'Argus::IEdgeEnhanceSettings::id()'],['../classArgus_1_1IOutputStreamSettings.html#a6eb0986de2222efeb1659872a042976f',1,'Argus::IOutputStreamSettings::id()']]], + ['idebugcapturesession',['IDebugCaptureSession',['../classArgus_1_1Ext_1_1IDebugCaptureSession.html',1,'Argus::Ext']]], + ['idefogsettings',['IDeFogSettings',['../classArgus_1_1Ext_1_1IDeFogSettings.html',1,'Argus::Ext']]], + ['idenoisemetadata',['IDenoiseMetadata',['../classArgus_1_1IDenoiseMetadata.html',1,'Argus']]], + ['idenoisesettings',['IDenoiseSettings',['../classArgus_1_1IDenoiseSettings.html',1,'Argus']]], + ['idolwdrsensormode',['IDolWdrSensorMode',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html',1,'Argus::Ext']]], + ['iedgeenhancemetadata',['IEdgeEnhanceMetadata',['../classArgus_1_1IEdgeEnhanceMetadata.html',1,'Argus']]], + ['iedgeenhancesettings',['IEdgeEnhanceSettings',['../classArgus_1_1IEdgeEnhanceSettings.html',1,'Argus']]], + ['ieglimagebuffer',['IEGLImageBuffer',['../classArgus_1_1IEGLImageBuffer.html',1,'Argus']]], + ['ieglimagebuffersettings',['IEGLImageBufferSettings',['../classArgus_1_1IEGLImageBufferSettings.html',1,'Argus']]], + ['iegloutputstream',['IEGLOutputStream',['../classArgus_1_1IEGLOutputStream.html',1,'Argus']]], + ['iegloutputstreamsettings',['IEGLOutputStreamSettings',['../classArgus_1_1IEGLOutputStreamSettings.html',1,'Argus']]], + ['ieglsync',['IEGLSync',['../classArgus_1_1IEGLSync.html',1,'Argus']]], + ['ievent',['IEvent',['../classArgus_1_1IEvent.html',1,'Argus']]], + ['ieventcapturecomplete',['IEventCaptureComplete',['../classArgus_1_1IEventCaptureComplete.html',1,'Argus']]], + ['ieventerror',['IEventError',['../classArgus_1_1IEventError.html',1,'Argus']]], + ['ieventprovider',['IEventProvider',['../classArgus_1_1IEventProvider.html',1,'Argus']]], + ['ieventqueue',['IEventQueue',['../classArgus_1_1IEventQueue.html',1,'Argus']]], + ['ifacedetectcaps',['IFaceDetectCaps',['../classArgus_1_1Ext_1_1IFaceDetectCaps.html',1,'Argus::Ext']]], + ['ifacedetectmetadata',['IFaceDetectMetadata',['../classArgus_1_1Ext_1_1IFaceDetectMetadata.html',1,'Argus::Ext']]], + ['ifacedetectresult',['IFaceDetectResult',['../classArgus_1_1Ext_1_1IFaceDetectResult.html',1,'Argus::Ext']]], + ['ifacedetectsettings',['IFaceDetectSettings',['../classArgus_1_1Ext_1_1IFaceDetectSettings.html',1,'Argus::Ext']]], + ['iinternalframecount',['IInternalFrameCount',['../classArgus_1_1Ext_1_1IInternalFrameCount.html',1,'Argus::Ext']]], + ['inonlinearhistogram',['INonLinearHistogram',['../classArgus_1_1Ext_1_1INonLinearHistogram.html',1,'Argus::Ext']]], + ['interface',['Interface',['../classArgus_1_1Interface.html#a854506c99b87879c60e821c33aa65881',1,'Argus::Interface']]], + ['interface',['Interface',['../classArgus_1_1Interface.html',1,'Argus']]], + ['interface_5fcast',['interface_cast',['../namespaceArgus.html#a331c37645a2bf8b37aa9912b5408c683',1,'Argus::interface_cast(InterfaceProvider *obj)'],['../namespaceArgus.html#a8630747cc51ad50335f4a4a9dbebd7a4',1,'Argus::interface_cast(const InterfaceProvider *obj)'],['../namespaceArgus.html#a59fd0954abae19f59a0d1faf4d939644',1,'Argus::interface_cast(const UniqueObj< TObject > &obj)']]], + ['interfaceid',['InterfaceID',['../classArgus_1_1InterfaceID.html#ad4baf253c4980dc1f590122a15d0dc06',1,'Argus::InterfaceID::InterfaceID(uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)'],['../classArgus_1_1InterfaceID.html#a2d677545946d9adafa9cdfb293f97899',1,'Argus::InterfaceID::InterfaceID()']]], + ['interfaceid',['InterfaceID',['../classArgus_1_1InterfaceID.html',1,'Argus']]], + ['interfaceprovider',['InterfaceProvider',['../classArgus_1_1InterfaceProvider.html',1,'Argus']]], + ['internalframecount_2eh',['InternalFrameCount.h',['../InternalFrameCount_8h.html',1,'']]], + ['ioutputstreamsettings',['IOutputStreamSettings',['../classArgus_1_1IOutputStreamSettings.html',1,'Argus']]], + ['ipwlwdrsensormode',['IPwlWdrSensorMode',['../classArgus_1_1Ext_1_1IPwlWdrSensorMode.html',1,'Argus::Ext']]], + ['irequest',['IRequest',['../classArgus_1_1IRequest.html',1,'Argus']]], + ['irgbhistogram',['IRGBHistogram',['../classArgus_1_1IRGBHistogram.html',1,'Argus']]], + ['isbufferformatsupported',['isBufferFormatSupported',['../classArgus_1_1ISensorMode.html#a9fa64d4919b04838c696e6835f6a7b11',1,'Argus::ISensorMode']]], + ['isensoreepromdata',['ISensorEepromData',['../classArgus_1_1Ext_1_1ISensorEepromData.html',1,'Argus::Ext']]], + ['isensormode',['ISensorMode',['../classArgus_1_1ISensorMode.html',1,'Argus']]], + ['isensorotpdata',['ISensorOtpData',['../classArgus_1_1Ext_1_1ISensorOtpData.html',1,'Argus::Ext']]], + ['isensorprivatemetadata',['ISensorPrivateMetadata',['../classArgus_1_1Ext_1_1ISensorPrivateMetadata.html',1,'Argus::Ext']]], + ['isensorprivatemetadatacaps',['ISensorPrivateMetadataCaps',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.html',1,'Argus::Ext']]], + ['isensorprivatemetadataclientbufferrequest',['ISensorPrivateMetadataClientBufferRequest',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html',1,'Argus::Ext']]], + ['isensorprivatemetadatarequest',['ISensorPrivateMetadataRequest',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html',1,'Argus::Ext']]], + ['isensortimestamptsc',['ISensorTimestampTsc',['../classArgus_1_1Ext_1_1ISensorTimestampTsc.html',1,'Argus::Ext']]], + ['isimusensoravailable',['isImuSensorAvailable',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a6dddc72b76c11b5abcdca683efedb4e5',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['isourcesettings',['ISourceSettings',['../classArgus_1_1ISourceSettings.html',1,'Argus']]], + ['isrepeating',['isRepeating',['../classArgus_1_1ICaptureSession.html#a0742290dd27f4133c69994b098b458ea',1,'Argus::ICaptureSession']]], + ['istreamcapturemetadata',['IStreamCaptureMetadata',['../classArgus_1_1IStreamCaptureMetadata.html',1,'Argus']]], + ['istreamsettings',['IStreamSettings',['../classArgus_1_1IStreamSettings.html',1,'Argus']]], + ['isyncsensorcalibrationdata',['ISyncSensorCalibrationData',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html',1,'Argus::Ext']]], + ['iterator',['iterator',['../classArgus_1_1Array2D.html#aae6e9f999f526c37c63cb9fbaf338340',1,'Argus::Array2D']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6c.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6c.html new file mode 100644 index 0000000..f6383cc --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6c.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6c.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6c.js new file mode 100644 index 0000000..c1a5197 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['left',['left',['../classArgus_1_1Rectangle.html#a9600eb42c6c30e2d9b51e13c932093d7',1,'Argus::Rectangle::left()'],['../classArgus_1_1Rectangle.html#a5ea98785e63ae43c2d4986ed11f68dac',1,'Argus::Rectangle::left() const ']]], + ['libargus_20camera_20api',['Libargus Camera API',['../group__LibargusAPI.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6d.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6d.html new file mode 100644 index 0000000..2e27d4d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6d.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6d.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6d.js new file mode 100644 index 0000000..b04117d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6d.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['m_5fdata',['m_data',['../classArgus_1_1Tuple.html#ad05577e1cee2b9db3f90b630948a2c2f',1,'Argus::Tuple::m_data()'],['../classArgus_1_1Array2D.html#ac28271214bea3afd2640d883e040561d',1,'Argus::Array2D::m_data()']]], + ['m_5fname',['m_name',['../classArgus_1_1NamedUUID.html#a81a1df70da66ec0a4b5b87c996aa0a84',1,'Argus::NamedUUID']]], + ['m_5fobj',['m_obj',['../classArgus_1_1UniqueObj.html#ab81f739e261891be048ab5ede8dd2854',1,'Argus::UniqueObj']]], + ['m_5fsize',['m_size',['../classArgus_1_1Array2D.html#ab0709bf8b8193dfce87051aa996d0b00',1,'Argus::Array2D']]], + ['m_5fweight',['m_weight',['../classArgus_1_1AcRegion.html#aacaf2861e79e4c2f9ef1c3c8ea6c1c29',1,'Argus::AcRegion']]], + ['max',['max',['../classArgus_1_1Range.html#a8a858777c58bbaa6ae097d34872dc47e',1,'Argus::Range::max()'],['../classArgus_1_1Range.html#a6d4da216d1c8325ae5653e417a525f51',1,'Argus::Range::max() const ']]], + ['max_5fuuid_5fname_5fsize',['MAX_UUID_NAME_SIZE',['../namespaceArgus.html#a5bf0109911c01d2963a1d3d939e791a1',1,'Argus']]], + ['maxburstrequests',['maxBurstRequests',['../classArgus_1_1ICaptureSession.html#a38362740984f789d726973fa299f144d',1,'Argus::ICaptureSession']]], + ['min',['min',['../classArgus_1_1Range.html#a4a1f1b685b6ba32f158d1872cdc8bc4c',1,'Argus::Range::min()'],['../classArgus_1_1Range.html#abf0fd841953e3609718d61cba43f6de8',1,'Argus::Range::min() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6e.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6e.html new file mode 100644 index 0000000..1f92ee5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6e.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6e.js new file mode 100644 index 0000000..377086b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6e.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['nameduuid',['NamedUUID',['../classArgus_1_1NamedUUID.html',1,'Argus']]], + ['nameduuid',['NamedUUID',['../classArgus_1_1NamedUUID.html#a3279cd9db732ce6a3c22220dc3c82bfb',1,'Argus::NamedUUID::NamedUUID(uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)'],['../classArgus_1_1NamedUUID.html#a8a123a06ef2136fbb946b56935130d66',1,'Argus::NamedUUID::NamedUUID(const NamedUUID &copied)'],['../classArgus_1_1NamedUUID.html#af3b11599e47273125d7b1f5c795b33e5',1,'Argus::NamedUUID::NamedUUID()']]], + ['node',['node',['../structArgus_1_1UUID.html#a9634c1f28ccb599d63bd7c92257103ed',1,'Argus::UUID']]], + ['noncopyable',['NonCopyable',['../classArgus_1_1NonCopyable.html',1,'Argus']]], + ['noncopyable',['NonCopyable',['../classArgus_1_1NonCopyable.html#a1aad733b06de586e1cee4c0aa8e8ff49',1,'Argus::NonCopyable::NonCopyable()'],['../classArgus_1_1NonCopyable.html#a52f76b8f0c765a71a51a492a9fa59d61',1,'Argus::NonCopyable::NonCopyable(NonCopyable &other)']]], + ['nonlinearhistogram_2eh',['NonLinearHistogram.h',['../NonLinearHistogram_8h.html',1,'']]], + ['num_5fawb_5fwb_5festimate_5felements',['NUM_AWB_WB_ESTIMATE_ELEMENTS',['../classArgus_1_1ICaptureMetadata.html#a0ec63067082ae5325083f8f3fe217ba9',1,'Argus::ICaptureMetadata']]], + ['num_5fcolor_5fcorrection_5felements',['NUM_COLOR_CORRECTION_ELEMENTS',['../classArgus_1_1ICaptureMetadata.html#a66ada0c57da176187dd0bb3ac7e1920f',1,'Argus::ICaptureMetadata']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6f.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6f.html new file mode 100644 index 0000000..61827e8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6f.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6f.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6f.js new file mode 100644 index 0000000..559394c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_6f.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['objects_20and_20interfaces',['Objects and Interfaces',['../group__ArgusObjects.html',1,'']]], + ['outputstream',['OutputStream',['../group__ArgusOutputStream.html',1,'']]], + ['outputstreamsettings',['OutputStreamSettings',['../group__ArgusOutputStreamSettings.html',1,'']]], + ['operator_20bool',['operator bool',['../classArgus_1_1UniqueObj.html#ad46fcbcd7f12940960f9228245c24eea',1,'Argus::UniqueObj']]], + ['operator_20const_20rv_3c_20uniqueobj_20_3e_20_26',['operator const rv< UniqueObj > &',['../classArgus_1_1UniqueObj.html#ae419f21501c648e783c1a0fa5931b512',1,'Argus::UniqueObj']]], + ['operator_20rv_3c_20uniqueobj_20_3e_20_26',['operator rv< UniqueObj > &',['../classArgus_1_1UniqueObj.html#a360ce3fd61f7fc2fd8990a979d842e85',1,'Argus::UniqueObj']]], + ['operator_21_3d',['operator!=',['../classArgus_1_1Tuple.html#acd0565ce839204b78bf78f708277ddce',1,'Argus::Tuple::operator!=()'],['../classArgus_1_1NamedUUID.html#a6186228d1dd5d57975ad8f9542f7de73',1,'Argus::NamedUUID::operator!=()']]], + ['operator_28_29',['operator()',['../classArgus_1_1Array2D.html#abdf0358cf00c15c139203b03206a1342',1,'Argus::Array2D::operator()(uint32_t i) const '],['../classArgus_1_1Array2D.html#a7f6362eec6e786975a957643e2ebe30e',1,'Argus::Array2D::operator()(uint32_t x, uint32_t y) const '],['../classArgus_1_1Array2D.html#a0c7267ec95a13541cd06f9f8a1b0d015',1,'Argus::Array2D::operator()(const Point2D< uint32_t > &p) const '],['../classArgus_1_1Array2D.html#a61adf41f4abe3013958cb10eff98d2bd',1,'Argus::Array2D::operator()(uint32_t i)'],['../classArgus_1_1Array2D.html#ace5bc637ba1b5953ba8cfcb218a5203b',1,'Argus::Array2D::operator()(uint32_t x, uint32_t y)'],['../classArgus_1_1Array2D.html#a85faf3fedc11b96ceb8db46284af3988',1,'Argus::Array2D::operator()(const Point2D< uint32_t > &p)']]], + ['operator_2a',['operator*',['../classArgus_1_1UniqueObj.html#a4e589e1f59c606afca91c14241c7c1f1',1,'Argus::UniqueObj::operator*()'],['../classArgus_1_1Tuple.html#ac31e4cd27254d705eb8150bc693f5619',1,'Argus::Tuple::operator*()']]], + ['operator_2a_3d',['operator*=',['../classArgus_1_1Tuple.html#ab3414980ef376bd61f01625105a0e608',1,'Argus::Tuple']]], + ['operator_2b',['operator+',['../classArgus_1_1Tuple.html#a24aaec35d4ceed37709d4793820bc0e9',1,'Argus::Tuple']]], + ['operator_2b_3d',['operator+=',['../classArgus_1_1Tuple.html#aba4639c01c2055e888362aecc34f18ea',1,'Argus::Tuple']]], + ['operator_2d',['operator-',['../classArgus_1_1Tuple.html#a5211855f6671520c7c4d7b80b58d6f55',1,'Argus::Tuple']]], + ['operator_2d_3d',['operator-=',['../classArgus_1_1Tuple.html#a1f85d9dd1910f9b7644f649a1ad29231',1,'Argus::Tuple']]], + ['operator_2d_3e',['operator->',['../classArgus_1_1UniqueObj.html#a87b26e03b384eb8f85fe6fa5234585c4',1,'Argus::UniqueObj']]], + ['operator_2f',['operator/',['../classArgus_1_1Tuple.html#ac2a1729b29e7e8e575eff912326383ab',1,'Argus::Tuple']]], + ['operator_2f_3d',['operator/=',['../classArgus_1_1Tuple.html#a70ab9c8bf1bf927402e64b1eba167f4c',1,'Argus::Tuple']]], + ['operator_3c',['operator<',['../structArgus_1_1UUID.html#a19b92b424456b05553dc64dc2a89ce48',1,'Argus::UUID']]], + ['operator_3d',['operator=',['../classArgus_1_1NonCopyable.html#a52e60ff89540043c6b2c767bac4f4298',1,'Argus::NonCopyable::operator=()'],['../classArgus_1_1UniqueObj.html#a0b6258536e6ca5b31cba6bc21308c6cb',1,'Argus::UniqueObj::operator=()'],['../classArgus_1_1Array2D.html#a278d7b5e57301eb184434f09a6e86009',1,'Argus::Array2D::operator=()'],['../classArgus_1_1NamedUUID.html#ad07c8db536ab6fb71a342f5a9ef8b998',1,'Argus::NamedUUID::operator=()']]], + ['operator_3d_3d',['operator==',['../classArgus_1_1Tuple.html#a7177ad448d2c4216e8020310730b28eb',1,'Argus::Tuple::operator==()'],['../classArgus_1_1Array2D.html#adb16673e31e25f54bfce3aeefbd98e7e',1,'Argus::Array2D::operator==()'],['../structArgus_1_1UUID.html#a7b5ae80a47f121f315dd4df9a9b289f4',1,'Argus::UUID::operator==()'],['../classArgus_1_1NamedUUID.html#aca54b6c245998c2c43c2ad5cefeebf55',1,'Argus::NamedUUID::operator==()']]], + ['operator_5b_5d',['operator[]',['../classArgus_1_1Tuple.html#a298276ba3f2ab1676b779e7e8cd8070e',1,'Argus::Tuple::operator[](unsigned int i)'],['../classArgus_1_1Tuple.html#a947f862b6931f875f96e89701ef74429',1,'Argus::Tuple::operator[](unsigned int i) const '],['../classArgus_1_1Array2D.html#a555282c7a4bd79cfb29cc4d50839040e',1,'Argus::Array2D::operator[](unsigned int i)'],['../classArgus_1_1Array2D.html#a29fc7d76597d0b43abfbcc9c5c7b46cf',1,'Argus::Array2D::operator[](unsigned int i) const ']]], + ['outputstream',['OutputStream',['../classArgus_1_1OutputStream.html',1,'Argus']]], + ['outputstreamsettings',['OutputStreamSettings',['../classArgus_1_1OutputStreamSettings.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_70.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_70.html new file mode 100644 index 0000000..0340151 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_70.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_70.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_70.js new file mode 100644 index 0000000..3fb397c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_70.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['point2d',['Point2D',['../classArgus_1_1Point2D.html',1,'Argus']]], + ['point2d',['Point2D',['../classArgus_1_1Point2D.html#a5ba4776c596405301f46bed64e91ee3f',1,'Argus::Point2D::Point2D()'],['../classArgus_1_1Point2D.html#a465c01f070b4caf2cec44453076d5a75',1,'Argus::Point2D::Point2D(const Tuple< COORDINATE_2D_COUNT, T > &other)'],['../classArgus_1_1Point2D.html#a92a6e1325d18c6434b49f933da04399e',1,'Argus::Point2D::Point2D(T init)'],['../classArgus_1_1Point2D.html#af48383fbba93701915820f9b68b35774',1,'Argus::Point2D::Point2D(T _x, T _y)']]], + ['point3d',['Point3D',['../classArgus_1_1Point3D.html',1,'Argus']]], + ['point3d',['Point3D',['../classArgus_1_1Point3D.html#a47f3229204b06cd86737e994f60c1880',1,'Argus::Point3D::Point3D()'],['../classArgus_1_1Point3D.html#a4a1ba5c4f628036b3bbd6c2a4c28e50a',1,'Argus::Point3D::Point3D(const Tuple< COORDINATE_3D_COUNT, T > &other)'],['../classArgus_1_1Point3D.html#a93acb7eacd492d6ced173e4b87e42b25',1,'Argus::Point3D::Point3D(T init)'],['../classArgus_1_1Point3D.html#a6fab195b77bbdb9866beba826da42d09',1,'Argus::Point3D::Point3D(T _x, T _y, T _z)']]], + ['pwlwdrsensormode_2eh',['PwlWdrSensorMode.h',['../PwlWdrSensorMode_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_72.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_72.html new file mode 100644 index 0000000..0ab18d6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_72.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_72.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_72.js new file mode 100644 index 0000000..3fe4df9 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_72.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['request',['Request',['../group__ArgusRequest.html',1,'']]], + ['rgbhistogram',['RGBHistogram',['../group__ArgusRGBHistogram.html',1,'']]], + ['r',['r',['../classArgus_1_1BayerTuple.html#a29754f59fb3a04b0b23944b36c10cff3',1,'Argus::BayerTuple::r()'],['../classArgus_1_1BayerTuple.html#a566ddd06c9760e3dd14b98f3516d4ae1',1,'Argus::BayerTuple::r() const '],['../classArgus_1_1RGBTuple.html#afcd7d2f419a385ef2bbc3d6c19d873dc',1,'Argus::RGBTuple::r()'],['../classArgus_1_1RGBTuple.html#a462c05c4a083c96ee2c8f7ed79ea0644',1,'Argus::RGBTuple::r() const ']]], + ['range',['Range',['../classArgus_1_1Range.html#a56e612f76e2106d9cc2764a80e1d2042',1,'Argus::Range::Range()'],['../classArgus_1_1Range.html#a41987c9bd953dc188cb46e057b5153b3',1,'Argus::Range::Range(const Tuple< 2, T > &other)'],['../classArgus_1_1Range.html#a3999092f7affc7f359829d3e939a14c3',1,'Argus::Range::Range(T init)'],['../classArgus_1_1Range.html#afae3e536c4dda53f7e86722decf25030',1,'Argus::Range::Range(T _min, T _max)']]], + ['range',['Range',['../classArgus_1_1Range.html',1,'Argus']]], + ['rectangle',['Rectangle',['../classArgus_1_1Rectangle.html',1,'Argus']]], + ['rectangle',['Rectangle',['../classArgus_1_1Rectangle.html#adf2e0f359341d68ba4a00a53aa105cea',1,'Argus::Rectangle::Rectangle()'],['../classArgus_1_1Rectangle.html#a198a8e574ac7e52b5a34edcaa0163d0e',1,'Argus::Rectangle::Rectangle(const Tuple< 4, T > &other)'],['../classArgus_1_1Rectangle.html#af5787ac9e5609f52b2bbaf22de0f6cbd',1,'Argus::Rectangle::Rectangle(T init)'],['../classArgus_1_1Rectangle.html#ae9a655567c7f14cc0dbdfcf125e32431',1,'Argus::Rectangle::Rectangle(T _left, T _top, T _right, T _bottom)']]], + ['rectangle_3c_20uint32_5ft_20_3e',['Rectangle< uint32_t >',['../classArgus_1_1Rectangle.html',1,'Argus']]], + ['release',['release',['../classArgus_1_1UniqueObj.html#a6a16389a84396383e7398be6eed5ae07',1,'Argus::UniqueObj']]], + ['releasebuffer',['releaseBuffer',['../classArgus_1_1IBufferOutputStream.html#a30e1077668ddcf359eb2ff7c771d7aab',1,'Argus::IBufferOutputStream']]], + ['repeat',['repeat',['../classArgus_1_1ICaptureSession.html#a76f0c7a185351ddeb521e4d0f46b8ca2',1,'Argus::ICaptureSession']]], + ['repeatburst',['repeatBurst',['../classArgus_1_1ICaptureSession.html#aedf68af40770a5728c9a8572dba79da3',1,'Argus::ICaptureSession']]], + ['request',['Request',['../classArgus_1_1Request.html',1,'Argus']]], + ['request_2eh',['Request.h',['../Request_8h.html',1,'']]], + ['reset',['reset',['../classArgus_1_1UniqueObj.html#ae6cb4e063009b5128e9ae1d2ce946c52',1,'Argus::UniqueObj']]], + ['resize',['resize',['../classArgus_1_1Array2D.html#ae6166f6a5a3d6c48d93eec349b41b063',1,'Argus::Array2D']]], + ['rgb_5fchannel_5fb',['RGB_CHANNEL_B',['../namespaceArgus.html#a03bc9c133b0c1b7e7b6d12856058f0b0a55b19e84d40005a489f53d045cb112a9',1,'Argus']]], + ['rgb_5fchannel_5fcount',['RGB_CHANNEL_COUNT',['../namespaceArgus.html#a03bc9c133b0c1b7e7b6d12856058f0b0a410dbd53edc1206c3c9ea3a46b1c856f',1,'Argus']]], + ['rgb_5fchannel_5fg',['RGB_CHANNEL_G',['../namespaceArgus.html#a03bc9c133b0c1b7e7b6d12856058f0b0a5ec9528aa0ed1eba2abf7a01d99650f6',1,'Argus']]], + ['rgb_5fchannel_5fr',['RGB_CHANNEL_R',['../namespaceArgus.html#a03bc9c133b0c1b7e7b6d12856058f0b0ab55f8942510360d09e091910aab43bee',1,'Argus']]], + ['rgbchannel',['RGBChannel',['../namespaceArgus.html#a03bc9c133b0c1b7e7b6d12856058f0b0',1,'Argus']]], + ['rgbtuple',['RGBTuple',['../classArgus_1_1RGBTuple.html',1,'Argus']]], + ['rgbtuple',['RGBTuple',['../classArgus_1_1RGBTuple.html#a58018eb7737c918cb08f06cd53cb6e0f',1,'Argus::RGBTuple::RGBTuple()'],['../classArgus_1_1RGBTuple.html#afce945d9bb02ab48ed765317dad88e1d',1,'Argus::RGBTuple::RGBTuple(const Tuple< RGB_CHANNEL_COUNT, T > &other)'],['../classArgus_1_1RGBTuple.html#a65b588e522647e157fd1a140dc194659',1,'Argus::RGBTuple::RGBTuple(T init)'],['../classArgus_1_1RGBTuple.html#a1abb5a3f2b59c94db7b384c3815612d3',1,'Argus::RGBTuple::RGBTuple(T _r, T _g, T _b)']]], + ['right',['right',['../classArgus_1_1Rectangle.html#a9af576b44868a524ae6cd95df301488c',1,'Argus::Rectangle::right()'],['../classArgus_1_1Rectangle.html#a4e33e2a2dcd462e59fc95ef2be184268',1,'Argus::Rectangle::right() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_73.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_73.html new file mode 100644 index 0000000..1ec8f17 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_73.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_73.js new file mode 100644 index 0000000..452f8bc --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_73.js @@ -0,0 +1,92 @@ +var searchData= +[ + ['sync_20types',['Sync Types',['../group__ArgusBufferSync.html',1,'']]], + ['sensormode',['SensorMode',['../group__ArgusSensorMode.html',1,'']]], + ['sourcesettings',['SourceSettings',['../group__ArgusSourceSettings.html',1,'']]], + ['streammetadata',['StreamMetadata',['../group__ArgusStreamCaptureMetadata.html',1,'']]], + ['streamsettings',['StreamSettings',['../group__ArgusStreamSettings.html',1,'']]], + ['sensoreepromdata_2eh',['SensorEepromData.h',['../SensorEepromData_8h.html',1,'']]], + ['sensormode',['SensorMode',['../classArgus_1_1SensorMode.html',1,'Argus']]], + ['sensorotpdata_2eh',['SensorOtpData.h',['../SensorOtpData_8h.html',1,'']]], + ['sensorprivatemetadata_2eh',['SensorPrivateMetadata.h',['../SensorPrivateMetadata_8h.html',1,'']]], + ['sensorprivatemetadataclientbuffer_2eh',['SensorPrivateMetadataClientBuffer.h',['../SensorPrivateMetadataClientBuffer_8h.html',1,'']]], + ['sensortimestamptsc_2eh',['SensorTimestampTsc.h',['../SensorTimestampTsc_8h.html',1,'']]], + ['setaeantibandingmode',['setAeAntibandingMode',['../classArgus_1_1IAutoControlSettings.html#a1ee11801c9eb5281c6b551d1bde23f60',1,'Argus::IAutoControlSettings']]], + ['setaelock',['setAeLock',['../classArgus_1_1IAutoControlSettings.html#aeb0065ad73870e6dde05606e78088551',1,'Argus::IAutoControlSettings']]], + ['setaeregions',['setAeRegions',['../classArgus_1_1IAutoControlSettings.html#ae8b956909eff7e17a9a3a53a9f2f605c',1,'Argus::IAutoControlSettings']]], + ['setafregions',['setAfRegions',['../classArgus_1_1IAutoControlSettings.html#a76313a4e697a4f14c5d4912bf9944dff',1,'Argus::IAutoControlSettings']]], + ['setaperturefnumber',['setApertureFNumber',['../classArgus_1_1ISourceSettings.html#a5d1f6178d717423a951c82728e342495',1,'Argus::ISourceSettings']]], + ['setaperturemotorspeed',['setApertureMotorSpeed',['../classArgus_1_1ISourceSettings.html#ae0e3645fe7f7dc0ca1516d2ec4a830a7',1,'Argus::ISourceSettings']]], + ['setapertureposition',['setAperturePosition',['../classArgus_1_1ISourceSettings.html#aeae3265fd9d105098ee498461aba97bc',1,'Argus::ISourceSettings']]], + ['setawblock',['setAwbLock',['../classArgus_1_1IAutoControlSettings.html#ac14f7bf31f315c4f0f148aa17a30b312',1,'Argus::IAutoControlSettings']]], + ['setawbmode',['setAwbMode',['../classArgus_1_1IAutoControlSettings.html#a37d259ea62879c41c89e993e137e487d',1,'Argus::IAutoControlSettings']]], + ['setawbregions',['setAwbRegions',['../classArgus_1_1IAutoControlSettings.html#a487f7454abb8efddcbc90545ab7aaaaa',1,'Argus::IAutoControlSettings']]], + ['setbayeraveragemapenable',['setBayerAverageMapEnable',['../classArgus_1_1Ext_1_1IBayerAverageMapSettings.html#a3123de1b0c0011223da00a9fb912be9d',1,'Argus::Ext::IBayerAverageMapSettings']]], + ['setbayerhistogramregion',['setBayerHistogramRegion',['../classArgus_1_1IAutoControlSettings.html#ab4069e77b2fb5b8b2a254a36c980ca85',1,'Argus::IAutoControlSettings']]], + ['setbayersharpnessmapenable',['setBayerSharpnessMapEnable',['../classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html#a0eeeb789780fafa47d743bfedf6b3c29',1,'Argus::Ext::IBayerSharpnessMapSettings']]], + ['setbuffertype',['setBufferType',['../classArgus_1_1IBufferOutputStreamSettings.html#a044d6eed4ef067f601d2aa433d679e72',1,'Argus::IBufferOutputStreamSettings']]], + ['setcameradevice',['setCameraDevice',['../classArgus_1_1IOutputStreamSettings.html#ad746419d46b3e955525abdf2885419c5',1,'Argus::IOutputStreamSettings']]], + ['setclientdata',['setClientData',['../classArgus_1_1IBuffer.html#acb514fb8f0d6b2651a9fb82736143aa2',1,'Argus::IBuffer::setClientData()'],['../classArgus_1_1IRequest.html#a55e55ea823ad98f286f2505c067458ac',1,'Argus::IRequest::setClientData()']]], + ['setclientmetadatabuffer',['setClientMetadataBuffer',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html#a7f6178e6ed6678c614cf2d4407657b37',1,'Argus::Ext::ISensorPrivateMetadataClientBufferRequest']]], + ['setcolorcorrectionmatrix',['setColorCorrectionMatrix',['../classArgus_1_1IAutoControlSettings.html#a24001773f7a288aaa97b13f8181f5456',1,'Argus::IAutoControlSettings']]], + ['setcolorcorrectionmatrixenable',['setColorCorrectionMatrixEnable',['../classArgus_1_1IAutoControlSettings.html#a4a822eb05bc4398d6c38f1a67fc9883b',1,'Argus::IAutoControlSettings']]], + ['setcolorsaturation',['setColorSaturation',['../classArgus_1_1IAutoControlSettings.html#a0a94a306e28e90b5ca017c77e69c6436',1,'Argus::IAutoControlSettings']]], + ['setcolorsaturationbias',['setColorSaturationBias',['../classArgus_1_1IAutoControlSettings.html#abc4e0e250193be956d444f03767f0178',1,'Argus::IAutoControlSettings']]], + ['setcolorsaturationenable',['setColorSaturationEnable',['../classArgus_1_1IAutoControlSettings.html#a21009b33d8b636293f888752b1747eab',1,'Argus::IAutoControlSettings']]], + ['setdefogamount',['setDeFogAmount',['../classArgus_1_1Ext_1_1IDeFogSettings.html#ab3540ae030b9b94ad0638c9c2d734790',1,'Argus::Ext::IDeFogSettings']]], + ['setdefogenable',['setDeFogEnable',['../classArgus_1_1Ext_1_1IDeFogSettings.html#a457195ea6f2e2b40caa52045f6c1f85d',1,'Argus::Ext::IDeFogSettings']]], + ['setdefogquality',['setDeFogQuality',['../classArgus_1_1Ext_1_1IDeFogSettings.html#afbd75c96d0766ebaff93824b1d4cb68e',1,'Argus::Ext::IDeFogSettings']]], + ['setdenoisemode',['setDenoiseMode',['../classArgus_1_1IDenoiseSettings.html#af989064021965c35990fe83204d3b849',1,'Argus::IDenoiseSettings']]], + ['setdenoisestrength',['setDenoiseStrength',['../classArgus_1_1IDenoiseSettings.html#ac9659df2f9f363c73d554befa0b785b1',1,'Argus::IDenoiseSettings']]], + ['setedgeenhancemode',['setEdgeEnhanceMode',['../classArgus_1_1IEdgeEnhanceSettings.html#a600fc91a9d1695d33533d06c72a67570',1,'Argus::IEdgeEnhanceSettings']]], + ['setedgeenhancestrength',['setEdgeEnhanceStrength',['../classArgus_1_1IEdgeEnhanceSettings.html#acb561fb70e4b51491a540597b8f050c7',1,'Argus::IEdgeEnhanceSettings']]], + ['setegldisplay',['setEGLDisplay',['../classArgus_1_1IEGLImageBufferSettings.html#a41372cfe3a53e65d4a08d71e98f455d8',1,'Argus::IEGLImageBufferSettings::setEGLDisplay()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a193ea880e8a8b8c6882281c6c1d06fcc',1,'Argus::IEGLOutputStreamSettings::setEGLDisplay()']]], + ['seteglimage',['setEGLImage',['../classArgus_1_1IEGLImageBufferSettings.html#aeb95bffdf14662c019605cc2ffd3eafc',1,'Argus::IEGLImageBufferSettings']]], + ['setenableispstage',['setEnableIspStage',['../classArgus_1_1IRequest.html#acb66ca38578c66e59f24914e7aec3ba7',1,'Argus::IRequest']]], + ['seteventinjectionerrormsg',['setEventInjectionErrorMsg',['../classArgus_1_1Ext_1_1IDebugCaptureSession.html#a809772e51e6525ff82d2e75834c1887e',1,'Argus::Ext::IDebugCaptureSession']]], + ['setexposurecompensation',['setExposureCompensation',['../classArgus_1_1IAutoControlSettings.html#a15dae0f7e79587f29226ec184b50f45d',1,'Argus::IAutoControlSettings']]], + ['setexposurecount',['setExposureCount',['../classArgus_1_1IEGLOutputStreamSettings.html#a52c74e9f87ed80732824e63ce6d88b1d',1,'Argus::IEGLOutputStreamSettings']]], + ['setexposuretimerange',['setExposureTimeRange',['../classArgus_1_1ISourceSettings.html#a97259077b42ecfb13d139da5ede8c2a1',1,'Argus::ISourceSettings']]], + ['setfacedetectenable',['setFaceDetectEnable',['../classArgus_1_1Ext_1_1IFaceDetectSettings.html#ac16b0edce8d1b9d3c088aa3291c67227',1,'Argus::Ext::IFaceDetectSettings']]], + ['setfifolength',['setFifoLength',['../classArgus_1_1IEGLOutputStreamSettings.html#a73da480070bfed70ccc90af38e67972f',1,'Argus::IEGLOutputStreamSettings']]], + ['setfocusposition',['setFocusPosition',['../classArgus_1_1ISourceSettings.html#acb57376b76666a116ba68c14b3856c3e',1,'Argus::ISourceSettings']]], + ['setframedurationrange',['setFrameDurationRange',['../classArgus_1_1ISourceSettings.html#a46f05e2816befd695fd3ae68d856cf96',1,'Argus::ISourceSettings']]], + ['setgainrange',['setGainRange',['../classArgus_1_1ISourceSettings.html#a9cdfb914b0e1da3a2f9fe4143f9c8e57',1,'Argus::ISourceSettings']]], + ['setispdigitalgainrange',['setIspDigitalGainRange',['../classArgus_1_1IAutoControlSettings.html#ad2504986fcddc78fff56674c00c0d989',1,'Argus::IAutoControlSettings']]], + ['setmetadataenable',['setMetadataEnable',['../classArgus_1_1IBufferOutputStreamSettings.html#ac8936d0dab592d0bdbbe74adee2deb78',1,'Argus::IBufferOutputStreamSettings::setMetadataEnable()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a940c087cb046b2cf0e7ec1274ed9551a',1,'Argus::IEGLOutputStreamSettings::setMetadataEnable()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html#a3eec7c6b9d5cbe48399c8c658e0467c8',1,'Argus::Ext::ISensorPrivateMetadataRequest::setMetadataEnable()']]], + ['setmode',['setMode',['../classArgus_1_1IEGLOutputStreamSettings.html#a81ba6a662080f07809fb717b3a7e586f',1,'Argus::IEGLOutputStreamSettings']]], + ['setopticalblack',['setOpticalBlack',['../classArgus_1_1ISourceSettings.html#a38cfe2647989ff1bba4bba979977c487',1,'Argus::ISourceSettings']]], + ['setopticalblackenable',['setOpticalBlackEnable',['../classArgus_1_1ISourceSettings.html#a5ede1e4f4e44267ae1abc8eb758674fd',1,'Argus::ISourceSettings']]], + ['setpixelformat',['setPixelFormat',['../classArgus_1_1IEGLOutputStreamSettings.html#ae2354bf23b8fb0fd0d7df9057d016e59',1,'Argus::IEGLOutputStreamSettings']]], + ['setpostprocessingenable',['setPostProcessingEnable',['../classArgus_1_1IStreamSettings.html#aab91aa8fe6d07ab356d43bcc7712f2a0',1,'Argus::IStreamSettings']]], + ['setreleasesync',['setReleaseSync',['../classArgus_1_1IEGLSync.html#a21f3f31f4869ec8a35cce274e5b23943',1,'Argus::IEGLSync']]], + ['setresolution',['setResolution',['../classArgus_1_1IEGLOutputStreamSettings.html#a0cfb60bb7d22b1f52a6c57ea840cf0d0',1,'Argus::IEGLOutputStreamSettings']]], + ['setsensormode',['setSensorMode',['../classArgus_1_1ISourceSettings.html#a50b962954ae6fcc9d024999390383071',1,'Argus::ISourceSettings']]], + ['setsourcecliprect',['setSourceClipRect',['../classArgus_1_1IStreamSettings.html#afed99500f424659edacb8a55310311d2',1,'Argus::IStreamSettings']]], + ['setsynctype',['setSyncType',['../classArgus_1_1IBufferOutputStreamSettings.html#afac7de8fd641eccb142ebd8c2c070258',1,'Argus::IBufferOutputStreamSettings']]], + ['settings_2eh',['Settings.h',['../Settings_8h.html',1,'']]], + ['settonemapcurve',['setToneMapCurve',['../classArgus_1_1IAutoControlSettings.html#ad4467e28d8f8cdec4a0069a6e2dfb2af',1,'Argus::IAutoControlSettings']]], + ['settonemapcurveenable',['setToneMapCurveEnable',['../classArgus_1_1IAutoControlSettings.html#a054d1626fcf4a159fa41e87efbfac1ee',1,'Argus::IAutoControlSettings']]], + ['setwbgains',['setWbGains',['../classArgus_1_1IAutoControlSettings.html#ab224517cee96b01c666c0a774ac533da',1,'Argus::IAutoControlSettings']]], + ['size',['size',['../classArgus_1_1Array2D.html#ab2cc11837aaf23d1ea9c7e361438b592',1,'Argus::Array2D']]], + ['size2d',['Size2D',['../classArgus_1_1Size2D.html',1,'Argus']]], + ['size2d',['Size2D',['../classArgus_1_1Size2D.html#a030cea1165690b1120f27eb8e42327a5',1,'Argus::Size2D::Size2D()'],['../classArgus_1_1Size2D.html#ac2715348690a4bae9170e4294915b25e',1,'Argus::Size2D::Size2D(const Tuple< 2, T > &other)'],['../classArgus_1_1Size2D.html#ad6f5fab4c4b6686f4b97ab968ccd85d4',1,'Argus::Size2D::Size2D(T init)'],['../classArgus_1_1Size2D.html#a15d00d033095f2da873e92f1b346a812',1,'Argus::Size2D::Size2D(T _width, T _height)']]], + ['size2d_3c_20uint32_5ft_20_3e',['Size2D< uint32_t >',['../classArgus_1_1Size2D.html',1,'Argus']]], + ['status',['Status',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3',1,'Argus']]], + ['status_5fcancelled',['STATUS_CANCELLED',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3aa55fa5e99bf61b6ef7e4ae1ca5b8db66',1,'Argus']]], + ['status_5fcount',['STATUS_COUNT',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3adaec86364eed23dc1c6ea5e218698594',1,'Argus']]], + ['status_5fdisconnected',['STATUS_DISCONNECTED',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a87c974d5788baff2ae26d4fe673744d3',1,'Argus']]], + ['status_5fend_5fof_5fstream',['STATUS_END_OF_STREAM',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a4248e5d945ee01bc33c0618da0049d41',1,'Argus']]], + ['status_5finvalid_5fparams',['STATUS_INVALID_PARAMS',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a5a8f53a6db51a77a4a98a6d860b05c6f',1,'Argus']]], + ['status_5finvalid_5fsettings',['STATUS_INVALID_SETTINGS',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3aff5b73628bd366ea62cbd5c40e492daa',1,'Argus']]], + ['status_5fok',['STATUS_OK',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3ac634101cfcda82a1bd2bdd36adf521e6',1,'Argus']]], + ['status_5fout_5fof_5fmemory',['STATUS_OUT_OF_MEMORY',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a1e691b265a31a18f6318793519652bda',1,'Argus']]], + ['status_5ftimeout',['STATUS_TIMEOUT',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a0e849c83b15d5a4a3451a0d836a77bd5',1,'Argus']]], + ['status_5funavailable',['STATUS_UNAVAILABLE',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a5458780eca91f8bf5cc550278a5024e6',1,'Argus']]], + ['status_5funimplemented',['STATUS_UNIMPLEMENTED',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a8e0e3b991e47acd63f5fb30bcd72eb1c',1,'Argus']]], + ['stoprepeat',['stopRepeat',['../classArgus_1_1ICaptureSession.html#a49df8458b54d58fd5538c982565acd0e',1,'Argus::ICaptureSession']]], + ['stream_2eh',['Stream.h',['../Stream_8h.html',1,'']]], + ['supportsextension',['supportsExtension',['../classArgus_1_1ICameraProvider.html#acb729080a0071b42f9d4f801b18a17ca',1,'Argus::ICameraProvider']]], + ['supportsoutputstreamformat',['supportsOutputStreamFormat',['../classArgus_1_1IEGLOutputStreamSettings.html#a9f57d8b140a1fb8321e6022871d59402',1,'Argus::IEGLOutputStreamSettings']]], + ['syncsensorcalibrationdata_2eh',['SyncSensorCalibrationData.h',['../SyncSensorCalibrationData_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_74.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_74.html new file mode 100644 index 0000000..fdc6589 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_74.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_74.js new file mode 100644 index 0000000..81d1f8d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_74.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['time_5fhi_5fand_5fversion',['time_hi_and_version',['../structArgus_1_1UUID.html#a74a0c9bcfa0be324e79d35a2a879e4d9',1,'Argus::UUID']]], + ['time_5flow',['time_low',['../structArgus_1_1UUID.html#a53d749248928d1d8bdbf16ad8ba9a2cc',1,'Argus::UUID']]], + ['time_5fmid',['time_mid',['../structArgus_1_1UUID.html#a0c79f166c5da1ac63ab5aad4c21f35dc',1,'Argus::UUID']]], + ['timeout_5finfinite',['TIMEOUT_INFINITE',['../namespaceArgus.html#a4a5b172cb29e126c9433f8a712a0d0d4',1,'Argus']]], + ['todo_20list',['Todo List',['../todo.html',1,'']]], + ['top',['top',['../classArgus_1_1Rectangle.html#ab9765dbfead610f0ce19ce8df372fb1e',1,'Argus::Rectangle::top()'],['../classArgus_1_1Rectangle.html#a839670e70466fb9be9a108dba12558e5',1,'Argus::Rectangle::top() const ']]], + ['tuple',['Tuple',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple',['Tuple',['../classArgus_1_1Tuple.html#a6dc1a8c9aa1d2f6355d850e536c6c2b0',1,'Argus::Tuple::Tuple()'],['../classArgus_1_1Tuple.html#a16650d1e23c432f22b1e2b0f377dd1b9',1,'Argus::Tuple::Tuple(T init)']]], + ['tuple_3c_202_2c_20t_20_3e',['Tuple< 2, T >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_202_2c_20uint32_5ft_20_3e',['Tuple< 2, uint32_t >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_204_2c_20t_20_3e',['Tuple< 4, T >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_204_2c_20uint32_5ft_20_3e',['Tuple< 4, uint32_t >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_20bayer_5fchannel_5fcount_2c_20t_20_3e',['Tuple< BAYER_CHANNEL_COUNT, T >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_20coordinate_5f2d_5fcount_2c_20t_20_3e',['Tuple< COORDINATE_2D_COUNT, T >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_20coordinate_5f3d_5fcount_2c_20t_20_3e',['Tuple< COORDINATE_3D_COUNT, T >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_20rgb_5fchannel_5fcount_2c_20t_20_3e',['Tuple< RGB_CHANNEL_COUNT, T >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuplesize',['tupleSize',['../classArgus_1_1Tuple.html#a134a129b8b6f1c51db038d7b32e060c2',1,'Argus::Tuple']]], + ['types_2eh',['Types.h',['../Types_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_75.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_75.html new file mode 100644 index 0000000..ab8455e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_75.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_75.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_75.js new file mode 100644 index 0000000..b74cb43 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_75.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['uniqueobj',['UniqueObj',['../classArgus_1_1UniqueObj.html',1,'Argus']]], + ['uniqueobj',['UniqueObj',['../classArgus_1_1UniqueObj.html#ae4e2ea2238e55327f49e0ec7ad534f35',1,'Argus::UniqueObj::UniqueObj(T *obj=NULL)'],['../classArgus_1_1UniqueObj.html#a2bed2c0a8cc7812275f916e20812c2a4',1,'Argus::UniqueObj::UniqueObj(rv< UniqueObj > &moved)']]], + ['uuid',['UUID',['../structArgus_1_1UUID.html',1,'Argus']]], + ['uuid_2eh',['UUID.h',['../UUID_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_77.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_77.html new file mode 100644 index 0000000..73323d3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_77.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_77.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_77.js new file mode 100644 index 0000000..c8e2b83 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_77.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['waitforevents',['waitForEvents',['../classArgus_1_1IEventProvider.html#ab180e35467c20913c1972eead7b071f2',1,'Argus::IEventProvider::waitForEvents(const std::vector< EventQueue * > &queues, uint64_t timeout=TIMEOUT_INFINITE)=0'],['../classArgus_1_1IEventProvider.html#a54740e3b63a5598f3b2be0ed41e6a558',1,'Argus::IEventProvider::waitForEvents(EventQueue *queue, uint64_t timeout=TIMEOUT_INFINITE)=0']]], + ['waitforidle',['waitForIdle',['../classArgus_1_1ICaptureSession.html#a75ad81ef8a45909b265ae6a9bb71fc2d',1,'Argus::ICaptureSession']]], + ['waituntilconnected',['waitUntilConnected',['../classArgus_1_1IEGLOutputStream.html#a6d28c32eebc90014c7fa5a0a93f1713a',1,'Argus::IEGLOutputStream']]], + ['weight',['weight',['../classArgus_1_1AcRegion.html#ab67b12b3b392b7293d73829bd3253a6c',1,'Argus::AcRegion::weight()'],['../classArgus_1_1AcRegion.html#a433ac4ed5139993ad237ae2b944b8f3d',1,'Argus::AcRegion::weight() const ']]], + ['width',['width',['../classArgus_1_1Size2D.html#a0581a2d9c1a0192e7f32332bb7f1ea99',1,'Argus::Size2D::width()'],['../classArgus_1_1Size2D.html#a31b5d83afde45b4a4905b5903b3aa452',1,'Argus::Size2D::width() const '],['../classArgus_1_1Rectangle.html#adc4581f747c2a5224b7a187dad6569a5',1,'Argus::Rectangle::width()']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_78.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_78.html new file mode 100644 index 0000000..10780d6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_78.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_78.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_78.js new file mode 100644 index 0000000..f5e3555 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_78.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x',['x',['../classArgus_1_1Point2D.html#ad73268c47203fe77b1620039d156f7d0',1,'Argus::Point2D::x()'],['../classArgus_1_1Point2D.html#a6fb3d5312abe40c82693ac0fe1df5f72',1,'Argus::Point2D::x() const '],['../classArgus_1_1Point3D.html#a45f33a3692b8feb999823e11b97d6951',1,'Argus::Point3D::x()'],['../classArgus_1_1Point3D.html#a17f223053d51c6800af0eabf698706a3',1,'Argus::Point3D::x() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_79.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_79.html new file mode 100644 index 0000000..c9f8d75 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_79.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_79.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_79.js new file mode 100644 index 0000000..d639ad8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_79.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['y',['y',['../classArgus_1_1Point2D.html#a2e01fa1fa8556beb6c6f88bc43dadf19',1,'Argus::Point2D::y()'],['../classArgus_1_1Point2D.html#abacfa071db88f31f2fcb9868d9d4684d',1,'Argus::Point2D::y() const '],['../classArgus_1_1Point3D.html#ae1ddc7370fb335e1224419bad5330107',1,'Argus::Point3D::y()'],['../classArgus_1_1Point3D.html#a5b32f6ba5af995af4350ac48090f5364',1,'Argus::Point3D::y() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7a.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7a.html new file mode 100644 index 0000000..0593a62 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7a.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7a.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7a.js new file mode 100644 index 0000000..d824983 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['z',['z',['../classArgus_1_1Point3D.html#ad429ee565db8015d0c86c282b5048731',1,'Argus::Point3D::z()'],['../classArgus_1_1Point3D.html#a578badcc445b9894286fecc583c83002',1,'Argus::Point3D::z() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7e.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7e.html new file mode 100644 index 0000000..63512c6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7e.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7e.js new file mode 100644 index 0000000..fc276d1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/all_7e.js @@ -0,0 +1,73 @@ +var searchData= +[ + ['_7ebuffer',['~Buffer',['../classArgus_1_1Buffer.html#a3254a307d49d58cf9b7c619a5190b68a',1,'Argus::Buffer']]], + ['_7ebuffersettings',['~BufferSettings',['../classArgus_1_1BufferSettings.html#a34a44af0081014405ab8a7645c3e51a9',1,'Argus::BufferSettings']]], + ['_7ecameradevice',['~CameraDevice',['../classArgus_1_1CameraDevice.html#a89ed69980f09a6f74756204d9d315788',1,'Argus::CameraDevice']]], + ['_7ecameraprovider',['~CameraProvider',['../classArgus_1_1CameraProvider.html#a8c2c469ea8ff8588837fc9586348e905',1,'Argus::CameraProvider']]], + ['_7ecapturemetadata',['~CaptureMetadata',['../classArgus_1_1CaptureMetadata.html#a923f866db06f493a343cae30ec8780ba',1,'Argus::CaptureMetadata']]], + ['_7ecapturemetadatacontainer',['~CaptureMetadataContainer',['../classArgus_1_1CaptureMetadataContainer.html#a00718706a0f3071645909b7fa2ea470d',1,'Argus::CaptureMetadataContainer']]], + ['_7ecapturesession',['~CaptureSession',['../classArgus_1_1CaptureSession.html#a9a2458032e7679af5a8599b2b8f38fd7',1,'Argus::CaptureSession']]], + ['_7edestructable',['~Destructable',['../classArgus_1_1Destructable.html#a7c593df8a9b19ad0bf549328b74b1966',1,'Argus::Destructable']]], + ['_7eevent',['~Event',['../classArgus_1_1Event.html#a5b4ba4b8fb86a5a9a1d4a22e01901677',1,'Argus::Event']]], + ['_7eeventqueue',['~EventQueue',['../classArgus_1_1EventQueue.html#ac543f9b7d378447ee386c09446c9277a',1,'Argus::EventQueue']]], + ['_7eiautocontrolsettings',['~IAutoControlSettings',['../classArgus_1_1IAutoControlSettings.html#acbab28f70669ccf54c2099a0e22c8087',1,'Argus::IAutoControlSettings']]], + ['_7eibayeraveragemap',['~IBayerAverageMap',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#abfa540698e3e2eae79a8da22baaefa8c',1,'Argus::Ext::IBayerAverageMap']]], + ['_7eibayeraveragemapsettings',['~IBayerAverageMapSettings',['../classArgus_1_1Ext_1_1IBayerAverageMapSettings.html#aea7dc07595767d552a3bd31463b36dcd',1,'Argus::Ext::IBayerAverageMapSettings']]], + ['_7eibayerhistogram',['~IBayerHistogram',['../classArgus_1_1IBayerHistogram.html#ac181228b5fae46e334b55d7526ae77e0',1,'Argus::IBayerHistogram']]], + ['_7eibayersharpnessmap',['~IBayerSharpnessMap',['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#a2a0cacbc2d17585d75f07819b7fe01c0',1,'Argus::Ext::IBayerSharpnessMap']]], + ['_7eibayersharpnessmapsettings',['~IBayerSharpnessMapSettings',['../classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html#ab84f591c061907d8803cbd3bfeeb3052',1,'Argus::Ext::IBayerSharpnessMapSettings']]], + ['_7eiblockingsessioncameraprovider',['~IBlockingSessionCameraProvider',['../classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html#a24be84c7c669fcfc6f2b128a2899b540',1,'Argus::Ext::IBlockingSessionCameraProvider']]], + ['_7eibuffer',['~IBuffer',['../classArgus_1_1IBuffer.html#a1aa871945eceabec9ec193103622d9b6',1,'Argus::IBuffer']]], + ['_7eibufferoutputstream',['~IBufferOutputStream',['../classArgus_1_1IBufferOutputStream.html#a01eeb31ddf9c2a9b912d8685766b1671',1,'Argus::IBufferOutputStream']]], + ['_7eibufferoutputstreamsettings',['~IBufferOutputStreamSettings',['../classArgus_1_1IBufferOutputStreamSettings.html#ab95b8c362e1e901b2526ec14f91e6c1b',1,'Argus::IBufferOutputStreamSettings']]], + ['_7eicameraproperties',['~ICameraProperties',['../classArgus_1_1ICameraProperties.html#a0def3b8a38874ebcd9c93a69a9ab499f',1,'Argus::ICameraProperties']]], + ['_7eicameraprovider',['~ICameraProvider',['../classArgus_1_1ICameraProvider.html#ab2133beae7b27e198bf6c9d19c265d06',1,'Argus::ICameraProvider']]], + ['_7eicapturemetadata',['~ICaptureMetadata',['../classArgus_1_1ICaptureMetadata.html#a91b9e7e777cf9f05a303b7c2b6bcb7eb',1,'Argus::ICaptureMetadata']]], + ['_7eicapturesession',['~ICaptureSession',['../classArgus_1_1ICaptureSession.html#a762c4ff11f09b75289e19539db75c786',1,'Argus::ICaptureSession']]], + ['_7eidebugcapturesession',['~IDebugCaptureSession',['../classArgus_1_1Ext_1_1IDebugCaptureSession.html#a48c8b109e1b7d317ad6c2b6bed273abd',1,'Argus::Ext::IDebugCaptureSession']]], + ['_7eidefogsettings',['~IDeFogSettings',['../classArgus_1_1Ext_1_1IDeFogSettings.html#a977fcad7bdf0dfaad922d5fb3cba8675',1,'Argus::Ext::IDeFogSettings']]], + ['_7eidenoisemetadata',['~IDenoiseMetadata',['../classArgus_1_1IDenoiseMetadata.html#a6431b04221a0d2d2f25ca2e0ddc00038',1,'Argus::IDenoiseMetadata']]], + ['_7eidenoisesettings',['~IDenoiseSettings',['../classArgus_1_1IDenoiseSettings.html#a9b6031445a882410e277e50920186fc0',1,'Argus::IDenoiseSettings']]], + ['_7eidolwdrsensormode',['~IDolWdrSensorMode',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#ae45cbbf4fd4c885e50f16d377b04a220',1,'Argus::Ext::IDolWdrSensorMode']]], + ['_7eiedgeenhancemetadata',['~IEdgeEnhanceMetadata',['../classArgus_1_1IEdgeEnhanceMetadata.html#ac6c05c28759d3c3d6cd81b402bf655ed',1,'Argus::IEdgeEnhanceMetadata']]], + ['_7eiedgeenhancesettings',['~IEdgeEnhanceSettings',['../classArgus_1_1IEdgeEnhanceSettings.html#ae978dda106667cb532fab075f393bc96',1,'Argus::IEdgeEnhanceSettings']]], + ['_7eieglimagebuffer',['~IEGLImageBuffer',['../classArgus_1_1IEGLImageBuffer.html#a1a62df66e77a93537ab23158c98786c1',1,'Argus::IEGLImageBuffer']]], + ['_7eieglimagebuffersettings',['~IEGLImageBufferSettings',['../classArgus_1_1IEGLImageBufferSettings.html#a33418b95bac08e4104ecb622c78f3e82',1,'Argus::IEGLImageBufferSettings']]], + ['_7eiegloutputstream',['~IEGLOutputStream',['../classArgus_1_1IEGLOutputStream.html#a1aac1c285671f9970a042d8c259ea296',1,'Argus::IEGLOutputStream']]], + ['_7eiegloutputstreamsettings',['~IEGLOutputStreamSettings',['../classArgus_1_1IEGLOutputStreamSettings.html#a1ead3bd9916851ea1e14ed07767777f0',1,'Argus::IEGLOutputStreamSettings']]], + ['_7eieglsync',['~IEGLSync',['../classArgus_1_1IEGLSync.html#a8c569c690bef0a7c7a54679fb3cfb0b7',1,'Argus::IEGLSync']]], + ['_7eievent',['~IEvent',['../classArgus_1_1IEvent.html#ac849cd5864dca93192dbb4727fc84a5a',1,'Argus::IEvent']]], + ['_7eieventcapturecomplete',['~IEventCaptureComplete',['../classArgus_1_1IEventCaptureComplete.html#aa568e0f64a9eba17c5ef179747638d14',1,'Argus::IEventCaptureComplete']]], + ['_7eieventerror',['~IEventError',['../classArgus_1_1IEventError.html#a79ab2025ce1093120e0d40e08c69e4ca',1,'Argus::IEventError']]], + ['_7eieventprovider',['~IEventProvider',['../classArgus_1_1IEventProvider.html#adcd46afc1cc1e54c1fe4bc43ad74c688',1,'Argus::IEventProvider']]], + ['_7eieventqueue',['~IEventQueue',['../classArgus_1_1IEventQueue.html#ac3b597b833df2cc30cf6f01a9c4fa68c',1,'Argus::IEventQueue']]], + ['_7eifacedetectcaps',['~IFaceDetectCaps',['../classArgus_1_1Ext_1_1IFaceDetectCaps.html#abcd04972c675312a9b9ab771ab1a7b1e',1,'Argus::Ext::IFaceDetectCaps']]], + ['_7eifacedetectmetadata',['~IFaceDetectMetadata',['../classArgus_1_1Ext_1_1IFaceDetectMetadata.html#add0da7513c9b03cdd515ecc9f206b4b0',1,'Argus::Ext::IFaceDetectMetadata']]], + ['_7eifacedetectresult',['~IFaceDetectResult',['../classArgus_1_1Ext_1_1IFaceDetectResult.html#a8931136ae185a84d7eaa9109c1da99a2',1,'Argus::Ext::IFaceDetectResult']]], + ['_7eifacedetectsettings',['~IFaceDetectSettings',['../classArgus_1_1Ext_1_1IFaceDetectSettings.html#a7c948a8cecd01901e46f9030a040e838',1,'Argus::Ext::IFaceDetectSettings']]], + ['_7eiinternalframecount',['~IInternalFrameCount',['../classArgus_1_1Ext_1_1IInternalFrameCount.html#ac2f5297bccd5ece07b806d62ba13ed80',1,'Argus::Ext::IInternalFrameCount']]], + ['_7einonlinearhistogram',['~INonLinearHistogram',['../classArgus_1_1Ext_1_1INonLinearHistogram.html#ac9f17340f3efebe192507646213d227a',1,'Argus::Ext::INonLinearHistogram']]], + ['_7einterface',['~Interface',['../classArgus_1_1Interface.html#a3b94d7271c3143ba58696410eb79b5de',1,'Argus::Interface']]], + ['_7einterfaceprovider',['~InterfaceProvider',['../classArgus_1_1InterfaceProvider.html#a4cb7c57f553fdabf28830e2db520fa20',1,'Argus::InterfaceProvider']]], + ['_7eioutputstreamsettings',['~IOutputStreamSettings',['../classArgus_1_1IOutputStreamSettings.html#af9f0104ad5205fc01042c6ec08af640b',1,'Argus::IOutputStreamSettings']]], + ['_7eipwlwdrsensormode',['~IPwlWdrSensorMode',['../classArgus_1_1Ext_1_1IPwlWdrSensorMode.html#aa31455b2ac2dfda6927c67d2bf118d1b',1,'Argus::Ext::IPwlWdrSensorMode']]], + ['_7eirequest',['~IRequest',['../classArgus_1_1IRequest.html#a96b07b131b850e5fca316bcd95ed5c4e',1,'Argus::IRequest']]], + ['_7eirgbhistogram',['~IRGBHistogram',['../classArgus_1_1IRGBHistogram.html#aad145334a1d6b1c47f42511334c9bc5f',1,'Argus::IRGBHistogram']]], + ['_7eisensoreepromdata',['~ISensorEepromData',['../classArgus_1_1Ext_1_1ISensorEepromData.html#a8f8a1241a53bbe822a082c3624aca51e',1,'Argus::Ext::ISensorEepromData']]], + ['_7eisensormode',['~ISensorMode',['../classArgus_1_1ISensorMode.html#abe6ea096e0c725aebf9634ef9f243285',1,'Argus::ISensorMode']]], + ['_7eisensorotpdata',['~ISensorOtpData',['../classArgus_1_1Ext_1_1ISensorOtpData.html#a19ce70398df84878d7e82f5604c6363f',1,'Argus::Ext::ISensorOtpData']]], + ['_7eisensorprivatemetadata',['~ISensorPrivateMetadata',['../classArgus_1_1Ext_1_1ISensorPrivateMetadata.html#a8a954ce5c977e9b2408daf694a1479b3',1,'Argus::Ext::ISensorPrivateMetadata']]], + ['_7eisensorprivatemetadatacaps',['~ISensorPrivateMetadataCaps',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.html#ac037fd07585c00f9d545f450a28ec59b',1,'Argus::Ext::ISensorPrivateMetadataCaps']]], + ['_7eisensorprivatemetadataclientbufferrequest',['~ISensorPrivateMetadataClientBufferRequest',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html#a84cdb7c0939551fd79165c501a23973f',1,'Argus::Ext::ISensorPrivateMetadataClientBufferRequest']]], + ['_7eisensorprivatemetadatarequest',['~ISensorPrivateMetadataRequest',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html#a1d9bf08db373c506d6cd10f0b0eebbee',1,'Argus::Ext::ISensorPrivateMetadataRequest']]], + ['_7eisensortimestamptsc',['~ISensorTimestampTsc',['../classArgus_1_1Ext_1_1ISensorTimestampTsc.html#af93242181073622fb567f3c389255331',1,'Argus::Ext::ISensorTimestampTsc']]], + ['_7eisourcesettings',['~ISourceSettings',['../classArgus_1_1ISourceSettings.html#a11e9f5c2caf7dd2e07890b7c6fb24506',1,'Argus::ISourceSettings']]], + ['_7eistreamcapturemetadata',['~IStreamCaptureMetadata',['../classArgus_1_1IStreamCaptureMetadata.html#a6cc9561fdae98d31fdf0084e07612719',1,'Argus::IStreamCaptureMetadata']]], + ['_7eistreamsettings',['~IStreamSettings',['../classArgus_1_1IStreamSettings.html#a7b6c550fb2227d21757ffa0890b34e7f',1,'Argus::IStreamSettings']]], + ['_7eisyncsensorcalibrationdata',['~ISyncSensorCalibrationData',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a9bb2f50d6f388ac85728aea3fd5a08ed',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['_7eoutputstream',['~OutputStream',['../classArgus_1_1OutputStream.html#a16882333ea723c90e30ac31d614d2e0b',1,'Argus::OutputStream']]], + ['_7eoutputstreamsettings',['~OutputStreamSettings',['../classArgus_1_1OutputStreamSettings.html#a5503e085c6be8dd7d933a4d48d0e3556',1,'Argus::OutputStreamSettings']]], + ['_7erequest',['~Request',['../classArgus_1_1Request.html#a867defa619f58fca959c8f388d6b50f2',1,'Argus::Request']]], + ['_7esensormode',['~SensorMode',['../classArgus_1_1SensorMode.html#a71c73d83526ffcac39157dc0645ef48d',1,'Argus::SensorMode']]], + ['_7euniqueobj',['~UniqueObj',['../classArgus_1_1UniqueObj.html#a7c717fe84a8c6b0dbf7e98e5d6e60fe8',1,'Argus::UniqueObj']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_61.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_61.html new file mode 100644 index 0000000..85e5d72 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_61.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_61.js new file mode 100644 index 0000000..00b535a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_61.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['acregion',['AcRegion',['../classArgus_1_1AcRegion.html',1,'Argus']]], + ['array2d',['Array2D',['../classArgus_1_1Array2D.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_62.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_62.html new file mode 100644 index 0000000..10760de --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_62.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_62.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_62.js new file mode 100644 index 0000000..7a2d915 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_62.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['bayertuple',['BayerTuple',['../classArgus_1_1BayerTuple.html',1,'Argus']]], + ['buffer',['Buffer',['../classArgus_1_1Buffer.html',1,'Argus']]], + ['buffersettings',['BufferSettings',['../classArgus_1_1BufferSettings.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_63.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_63.html new file mode 100644 index 0000000..72c66b9 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_63.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_63.js new file mode 100644 index 0000000..1e46dd3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_63.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['cameradevice',['CameraDevice',['../classArgus_1_1CameraDevice.html',1,'Argus']]], + ['cameraprovider',['CameraProvider',['../classArgus_1_1CameraProvider.html',1,'Argus']]], + ['capturemetadata',['CaptureMetadata',['../classArgus_1_1CaptureMetadata.html',1,'Argus']]], + ['capturemetadatacontainer',['CaptureMetadataContainer',['../classArgus_1_1CaptureMetadataContainer.html',1,'Argus']]], + ['capturesession',['CaptureSession',['../classArgus_1_1CaptureSession.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_64.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_64.html new file mode 100644 index 0000000..5902708 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_64.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_64.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_64.js new file mode 100644 index 0000000..e00a25c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_64.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['destructable',['Destructable',['../classArgus_1_1Destructable.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_65.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_65.html new file mode 100644 index 0000000..15f57eb --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_65.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_65.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_65.js new file mode 100644 index 0000000..3ce8c83 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_65.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['event',['Event',['../classArgus_1_1Event.html',1,'Argus']]], + ['eventqueue',['EventQueue',['../classArgus_1_1EventQueue.html',1,'Argus']]], + ['eventtype',['EventType',['../classArgus_1_1EventType.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_69.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_69.html new file mode 100644 index 0000000..961dbea --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_69.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_69.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_69.js new file mode 100644 index 0000000..427f56a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_69.js @@ -0,0 +1,59 @@ +var searchData= +[ + ['iautocontrolsettings',['IAutoControlSettings',['../classArgus_1_1IAutoControlSettings.html',1,'Argus']]], + ['ibayeraveragemap',['IBayerAverageMap',['../classArgus_1_1Ext_1_1IBayerAverageMap.html',1,'Argus::Ext']]], + ['ibayeraveragemapsettings',['IBayerAverageMapSettings',['../classArgus_1_1Ext_1_1IBayerAverageMapSettings.html',1,'Argus::Ext']]], + ['ibayerhistogram',['IBayerHistogram',['../classArgus_1_1IBayerHistogram.html',1,'Argus']]], + ['ibayersharpnessmap',['IBayerSharpnessMap',['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html',1,'Argus::Ext']]], + ['ibayersharpnessmapsettings',['IBayerSharpnessMapSettings',['../classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html',1,'Argus::Ext']]], + ['iblockingsessioncameraprovider',['IBlockingSessionCameraProvider',['../classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html',1,'Argus::Ext']]], + ['ibuffer',['IBuffer',['../classArgus_1_1IBuffer.html',1,'Argus']]], + ['ibufferoutputstream',['IBufferOutputStream',['../classArgus_1_1IBufferOutputStream.html',1,'Argus']]], + ['ibufferoutputstreamsettings',['IBufferOutputStreamSettings',['../classArgus_1_1IBufferOutputStreamSettings.html',1,'Argus']]], + ['icameraproperties',['ICameraProperties',['../classArgus_1_1ICameraProperties.html',1,'Argus']]], + ['icameraprovider',['ICameraProvider',['../classArgus_1_1ICameraProvider.html',1,'Argus']]], + ['icapturemetadata',['ICaptureMetadata',['../classArgus_1_1ICaptureMetadata.html',1,'Argus']]], + ['icapturesession',['ICaptureSession',['../classArgus_1_1ICaptureSession.html',1,'Argus']]], + ['idebugcapturesession',['IDebugCaptureSession',['../classArgus_1_1Ext_1_1IDebugCaptureSession.html',1,'Argus::Ext']]], + ['idefogsettings',['IDeFogSettings',['../classArgus_1_1Ext_1_1IDeFogSettings.html',1,'Argus::Ext']]], + ['idenoisemetadata',['IDenoiseMetadata',['../classArgus_1_1IDenoiseMetadata.html',1,'Argus']]], + ['idenoisesettings',['IDenoiseSettings',['../classArgus_1_1IDenoiseSettings.html',1,'Argus']]], + ['idolwdrsensormode',['IDolWdrSensorMode',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html',1,'Argus::Ext']]], + ['iedgeenhancemetadata',['IEdgeEnhanceMetadata',['../classArgus_1_1IEdgeEnhanceMetadata.html',1,'Argus']]], + ['iedgeenhancesettings',['IEdgeEnhanceSettings',['../classArgus_1_1IEdgeEnhanceSettings.html',1,'Argus']]], + ['ieglimagebuffer',['IEGLImageBuffer',['../classArgus_1_1IEGLImageBuffer.html',1,'Argus']]], + ['ieglimagebuffersettings',['IEGLImageBufferSettings',['../classArgus_1_1IEGLImageBufferSettings.html',1,'Argus']]], + ['iegloutputstream',['IEGLOutputStream',['../classArgus_1_1IEGLOutputStream.html',1,'Argus']]], + ['iegloutputstreamsettings',['IEGLOutputStreamSettings',['../classArgus_1_1IEGLOutputStreamSettings.html',1,'Argus']]], + ['ieglsync',['IEGLSync',['../classArgus_1_1IEGLSync.html',1,'Argus']]], + ['ievent',['IEvent',['../classArgus_1_1IEvent.html',1,'Argus']]], + ['ieventcapturecomplete',['IEventCaptureComplete',['../classArgus_1_1IEventCaptureComplete.html',1,'Argus']]], + ['ieventerror',['IEventError',['../classArgus_1_1IEventError.html',1,'Argus']]], + ['ieventprovider',['IEventProvider',['../classArgus_1_1IEventProvider.html',1,'Argus']]], + ['ieventqueue',['IEventQueue',['../classArgus_1_1IEventQueue.html',1,'Argus']]], + ['ifacedetectcaps',['IFaceDetectCaps',['../classArgus_1_1Ext_1_1IFaceDetectCaps.html',1,'Argus::Ext']]], + ['ifacedetectmetadata',['IFaceDetectMetadata',['../classArgus_1_1Ext_1_1IFaceDetectMetadata.html',1,'Argus::Ext']]], + ['ifacedetectresult',['IFaceDetectResult',['../classArgus_1_1Ext_1_1IFaceDetectResult.html',1,'Argus::Ext']]], + ['ifacedetectsettings',['IFaceDetectSettings',['../classArgus_1_1Ext_1_1IFaceDetectSettings.html',1,'Argus::Ext']]], + ['iinternalframecount',['IInternalFrameCount',['../classArgus_1_1Ext_1_1IInternalFrameCount.html',1,'Argus::Ext']]], + ['inonlinearhistogram',['INonLinearHistogram',['../classArgus_1_1Ext_1_1INonLinearHistogram.html',1,'Argus::Ext']]], + ['interface',['Interface',['../classArgus_1_1Interface.html',1,'Argus']]], + ['interfaceid',['InterfaceID',['../classArgus_1_1InterfaceID.html',1,'Argus']]], + ['interfaceprovider',['InterfaceProvider',['../classArgus_1_1InterfaceProvider.html',1,'Argus']]], + ['ioutputstreamsettings',['IOutputStreamSettings',['../classArgus_1_1IOutputStreamSettings.html',1,'Argus']]], + ['ipwlwdrsensormode',['IPwlWdrSensorMode',['../classArgus_1_1Ext_1_1IPwlWdrSensorMode.html',1,'Argus::Ext']]], + ['irequest',['IRequest',['../classArgus_1_1IRequest.html',1,'Argus']]], + ['irgbhistogram',['IRGBHistogram',['../classArgus_1_1IRGBHistogram.html',1,'Argus']]], + ['isensoreepromdata',['ISensorEepromData',['../classArgus_1_1Ext_1_1ISensorEepromData.html',1,'Argus::Ext']]], + ['isensormode',['ISensorMode',['../classArgus_1_1ISensorMode.html',1,'Argus']]], + ['isensorotpdata',['ISensorOtpData',['../classArgus_1_1Ext_1_1ISensorOtpData.html',1,'Argus::Ext']]], + ['isensorprivatemetadata',['ISensorPrivateMetadata',['../classArgus_1_1Ext_1_1ISensorPrivateMetadata.html',1,'Argus::Ext']]], + ['isensorprivatemetadatacaps',['ISensorPrivateMetadataCaps',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.html',1,'Argus::Ext']]], + ['isensorprivatemetadataclientbufferrequest',['ISensorPrivateMetadataClientBufferRequest',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html',1,'Argus::Ext']]], + ['isensorprivatemetadatarequest',['ISensorPrivateMetadataRequest',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html',1,'Argus::Ext']]], + ['isensortimestamptsc',['ISensorTimestampTsc',['../classArgus_1_1Ext_1_1ISensorTimestampTsc.html',1,'Argus::Ext']]], + ['isourcesettings',['ISourceSettings',['../classArgus_1_1ISourceSettings.html',1,'Argus']]], + ['istreamcapturemetadata',['IStreamCaptureMetadata',['../classArgus_1_1IStreamCaptureMetadata.html',1,'Argus']]], + ['istreamsettings',['IStreamSettings',['../classArgus_1_1IStreamSettings.html',1,'Argus']]], + ['isyncsensorcalibrationdata',['ISyncSensorCalibrationData',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html',1,'Argus::Ext']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6e.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6e.html new file mode 100644 index 0000000..44803ba --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6e.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6e.js new file mode 100644 index 0000000..a55ef1f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['nameduuid',['NamedUUID',['../classArgus_1_1NamedUUID.html',1,'Argus']]], + ['noncopyable',['NonCopyable',['../classArgus_1_1NonCopyable.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6f.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6f.html new file mode 100644 index 0000000..926dcfc --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6f.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6f.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6f.js new file mode 100644 index 0000000..9a26047 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_6f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['outputstream',['OutputStream',['../classArgus_1_1OutputStream.html',1,'Argus']]], + ['outputstreamsettings',['OutputStreamSettings',['../classArgus_1_1OutputStreamSettings.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_70.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_70.html new file mode 100644 index 0000000..e4b5208 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_70.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_70.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_70.js new file mode 100644 index 0000000..c571aaf --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_70.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['point2d',['Point2D',['../classArgus_1_1Point2D.html',1,'Argus']]], + ['point3d',['Point3D',['../classArgus_1_1Point3D.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_72.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_72.html new file mode 100644 index 0000000..0d0ddb4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_72.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_72.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_72.js new file mode 100644 index 0000000..388e75a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_72.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['range',['Range',['../classArgus_1_1Range.html',1,'Argus']]], + ['rectangle',['Rectangle',['../classArgus_1_1Rectangle.html',1,'Argus']]], + ['rectangle_3c_20uint32_5ft_20_3e',['Rectangle< uint32_t >',['../classArgus_1_1Rectangle.html',1,'Argus']]], + ['request',['Request',['../classArgus_1_1Request.html',1,'Argus']]], + ['rgbtuple',['RGBTuple',['../classArgus_1_1RGBTuple.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_73.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_73.html new file mode 100644 index 0000000..a1bf0b9 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_73.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_73.js new file mode 100644 index 0000000..5b64bf8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_73.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['sensormode',['SensorMode',['../classArgus_1_1SensorMode.html',1,'Argus']]], + ['size2d',['Size2D',['../classArgus_1_1Size2D.html',1,'Argus']]], + ['size2d_3c_20uint32_5ft_20_3e',['Size2D< uint32_t >',['../classArgus_1_1Size2D.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_74.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_74.html new file mode 100644 index 0000000..f7f27ce --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_74.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_74.js new file mode 100644 index 0000000..c02739f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_74.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['tuple',['Tuple',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_202_2c_20t_20_3e',['Tuple< 2, T >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_202_2c_20uint32_5ft_20_3e',['Tuple< 2, uint32_t >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_204_2c_20t_20_3e',['Tuple< 4, T >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_204_2c_20uint32_5ft_20_3e',['Tuple< 4, uint32_t >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_20bayer_5fchannel_5fcount_2c_20t_20_3e',['Tuple< BAYER_CHANNEL_COUNT, T >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_20coordinate_5f2d_5fcount_2c_20t_20_3e',['Tuple< COORDINATE_2D_COUNT, T >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_20coordinate_5f3d_5fcount_2c_20t_20_3e',['Tuple< COORDINATE_3D_COUNT, T >',['../classArgus_1_1Tuple.html',1,'Argus']]], + ['tuple_3c_20rgb_5fchannel_5fcount_2c_20t_20_3e',['Tuple< RGB_CHANNEL_COUNT, T >',['../classArgus_1_1Tuple.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_75.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_75.html new file mode 100644 index 0000000..807d742 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_75.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_75.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_75.js new file mode 100644 index 0000000..dd5d58f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/classes_75.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['uniqueobj',['UniqueObj',['../classArgus_1_1UniqueObj.html',1,'Argus']]], + ['uuid',['UUID',['../structArgus_1_1UUID.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/close.png b/jetson_multimedia_api/argus/docs/doxygen/html/search/close.png new file mode 100644 index 0000000..9342d3d Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/search/close.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/defines_64.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/defines_64.html new file mode 100644 index 0000000..7b428bd --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/defines_64.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/defines_64.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/defines_64.js new file mode 100644 index 0000000..781dc29 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/defines_64.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['define_5fnamed_5fuuid_5fclass',['DEFINE_NAMED_UUID_CLASS',['../UUID_8h.html#a6b1889b812c85beb981b0f8d6db27fbc',1,'UUID.h']]], + ['define_5fuuid',['DEFINE_UUID',['../UUID_8h.html#a004eb5183e98318035bf466f211c0b10',1,'UUID.h']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_61.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_61.html new file mode 100644 index 0000000..f27490d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_61.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_61.js new file mode 100644 index 0000000..6d46847 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_61.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['argusinjecterror',['ArgusInjectError',['../namespaceArgus.html#a7354506ed0d455893cd19fc0f92e06c1',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_62.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_62.html new file mode 100644 index 0000000..321fe92 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_62.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_62.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_62.js new file mode 100644 index 0000000..1b32aae --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_62.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bayerchannel',['BayerChannel',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6da',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_63.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_63.html new file mode 100644 index 0000000..6cee236 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_63.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_63.js new file mode 100644 index 0000000..e4b11a3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_63.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['coordinate',['Coordinate',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_72.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_72.html new file mode 100644 index 0000000..517262d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_72.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_72.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_72.js new file mode 100644 index 0000000..a819171 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_72.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rgbchannel',['RGBChannel',['../namespaceArgus.html#a03bc9c133b0c1b7e7b6d12856058f0b0',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_73.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_73.html new file mode 100644 index 0000000..3f157e6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_73.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_73.js new file mode 100644 index 0000000..e93619a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enums_73.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['status',['Status',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_61.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_61.html new file mode 100644 index 0000000..deef591 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_61.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_61.js new file mode 100644 index 0000000..66405fa --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_61.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['argusinjecterror_5ferrorlongline',['ArgusInjectError_ErrorLongLine',['../namespaceArgus.html#a7354506ed0d455893cd19fc0f92e06c1a60b6a393ff61b5054b22e36ea8c707f9',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_62.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_62.html new file mode 100644 index 0000000..e770838 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_62.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_62.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_62.js new file mode 100644 index 0000000..710b20e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_62.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['bayer_5fchannel_5fb',['BAYER_CHANNEL_B',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6daade7e0847d7c46e6ef48a73a5bfa7c0d2',1,'Argus']]], + ['bayer_5fchannel_5fcount',['BAYER_CHANNEL_COUNT',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6daa4fe9995810ef6c8d0b0e6293a644ca92',1,'Argus']]], + ['bayer_5fchannel_5fg_5feven',['BAYER_CHANNEL_G_EVEN',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6daa3a29cb5745107741b04433b0b640dd2c',1,'Argus']]], + ['bayer_5fchannel_5fg_5fodd',['BAYER_CHANNEL_G_ODD',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6daaa52d2aed864437720e59729ff3f307d4',1,'Argus']]], + ['bayer_5fchannel_5fr',['BAYER_CHANNEL_R',['../namespaceArgus.html#a07e5912e70dde696b8bac5c28719a6daa1a67e83aa27df93bdc85cda957c743bd',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_63.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_63.html new file mode 100644 index 0000000..7399d30 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_63.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_63.js new file mode 100644 index 0000000..9bfc4e1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_63.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['coordinate_5f2d_5fcount',['COORDINATE_2D_COUNT',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11ae2b523cffcee5546f0a69bff24ac8af7',1,'Argus']]], + ['coordinate_5f3d_5fcount',['COORDINATE_3D_COUNT',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11a08bd3ae1db3a9171228a2e1ae256bc81',1,'Argus']]], + ['coordinate_5fx',['COORDINATE_X',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11a0e413a227cc2d90a536c5070eb9d7702',1,'Argus']]], + ['coordinate_5fy',['COORDINATE_Y',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11a87b5caee86f1253fde029a8d47f54f29',1,'Argus']]], + ['coordinate_5fz',['COORDINATE_Z',['../namespaceArgus.html#ad64ed97b721ce32ad8ad92781edd5c11a7757495a4c7e8223dd9b900b1a841416',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_72.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_72.html new file mode 100644 index 0000000..b53ce22 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_72.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_72.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_72.js new file mode 100644 index 0000000..056cbac --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_72.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['rgb_5fchannel_5fb',['RGB_CHANNEL_B',['../namespaceArgus.html#a03bc9c133b0c1b7e7b6d12856058f0b0a55b19e84d40005a489f53d045cb112a9',1,'Argus']]], + ['rgb_5fchannel_5fcount',['RGB_CHANNEL_COUNT',['../namespaceArgus.html#a03bc9c133b0c1b7e7b6d12856058f0b0a410dbd53edc1206c3c9ea3a46b1c856f',1,'Argus']]], + ['rgb_5fchannel_5fg',['RGB_CHANNEL_G',['../namespaceArgus.html#a03bc9c133b0c1b7e7b6d12856058f0b0a5ec9528aa0ed1eba2abf7a01d99650f6',1,'Argus']]], + ['rgb_5fchannel_5fr',['RGB_CHANNEL_R',['../namespaceArgus.html#a03bc9c133b0c1b7e7b6d12856058f0b0ab55f8942510360d09e091910aab43bee',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_73.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_73.html new file mode 100644 index 0000000..f2f7db4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_73.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_73.js new file mode 100644 index 0000000..4fd2cb8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/enumvalues_73.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['status_5fcancelled',['STATUS_CANCELLED',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3aa55fa5e99bf61b6ef7e4ae1ca5b8db66',1,'Argus']]], + ['status_5fcount',['STATUS_COUNT',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3adaec86364eed23dc1c6ea5e218698594',1,'Argus']]], + ['status_5fdisconnected',['STATUS_DISCONNECTED',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a87c974d5788baff2ae26d4fe673744d3',1,'Argus']]], + ['status_5fend_5fof_5fstream',['STATUS_END_OF_STREAM',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a4248e5d945ee01bc33c0618da0049d41',1,'Argus']]], + ['status_5finvalid_5fparams',['STATUS_INVALID_PARAMS',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a5a8f53a6db51a77a4a98a6d860b05c6f',1,'Argus']]], + ['status_5finvalid_5fsettings',['STATUS_INVALID_SETTINGS',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3aff5b73628bd366ea62cbd5c40e492daa',1,'Argus']]], + ['status_5fok',['STATUS_OK',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3ac634101cfcda82a1bd2bdd36adf521e6',1,'Argus']]], + ['status_5fout_5fof_5fmemory',['STATUS_OUT_OF_MEMORY',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a1e691b265a31a18f6318793519652bda',1,'Argus']]], + ['status_5ftimeout',['STATUS_TIMEOUT',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a0e849c83b15d5a4a3451a0d836a77bd5',1,'Argus']]], + ['status_5funavailable',['STATUS_UNAVAILABLE',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a5458780eca91f8bf5cc550278a5024e6',1,'Argus']]], + ['status_5funimplemented',['STATUS_UNIMPLEMENTED',['../namespaceArgus.html#a43dee5758547aaf78710c7c1fe122fe3a8e0e3b991e47acd63f5fb30bcd72eb1c',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_61.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_61.html new file mode 100644 index 0000000..5a8e454 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_61.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_61.js new file mode 100644 index 0000000..f73e97a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_61.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['argus_2eh',['Argus.h',['../Argus_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_62.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_62.html new file mode 100644 index 0000000..bb7577e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_62.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_62.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_62.js new file mode 100644 index 0000000..2d90bea --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_62.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['bayeraveragemap_2eh',['BayerAverageMap.h',['../BayerAverageMap_8h.html',1,'']]], + ['bayersharpnessmap_2eh',['BayerSharpnessMap.h',['../BayerSharpnessMap_8h.html',1,'']]], + ['blockingsessioncameraprovider_2eh',['BlockingSessionCameraProvider.h',['../BlockingSessionCameraProvider_8h.html',1,'']]], + ['bufferstream_2eh',['BufferStream.h',['../BufferStream_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_63.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_63.html new file mode 100644 index 0000000..6611a5b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_63.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_63.js new file mode 100644 index 0000000..dbbf4a2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_63.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['cameradevice_2eh',['CameraDevice.h',['../CameraDevice_8h.html',1,'']]], + ['cameraprovider_2eh',['CameraProvider.h',['../CameraProvider_8h.html',1,'']]], + ['capturemetadata_2eh',['CaptureMetadata.h',['../CaptureMetadata_8h.html',1,'']]], + ['capturesession_2eh',['CaptureSession.h',['../CaptureSession_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_64.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_64.html new file mode 100644 index 0000000..1a32bf8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_64.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_64.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_64.js new file mode 100644 index 0000000..04e321e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_64.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['debugcapturesession_2eh',['DebugCaptureSession.h',['../DebugCaptureSession_8h.html',1,'']]], + ['defog_2eh',['DeFog.h',['../DeFog_8h.html',1,'']]], + ['dolwdrsensormode_2eh',['DolWdrSensorMode.h',['../DolWdrSensorMode_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_65.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_65.html new file mode 100644 index 0000000..1eadd1b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_65.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_65.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_65.js new file mode 100644 index 0000000..794134b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_65.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['eglimage_2eh',['EGLImage.h',['../EGLImage_8h.html',1,'']]], + ['eglstream_2eh',['EGLStream.h',['../EGLStream_8h.html',1,'']]], + ['eglsync_2eh',['EGLSync.h',['../EGLSync_8h.html',1,'']]], + ['event_2eh',['Event.h',['../Event_8h.html',1,'']]], + ['eventprovider_2eh',['EventProvider.h',['../EventProvider_8h.html',1,'']]], + ['eventqueue_2eh',['EventQueue.h',['../EventQueue_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_66.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_66.html new file mode 100644 index 0000000..c056403 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_66.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_66.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_66.js new file mode 100644 index 0000000..0c777c1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_66.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['facedetect_2eh',['FaceDetect.h',['../FaceDetect_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_69.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_69.html new file mode 100644 index 0000000..7fbd757 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_69.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_69.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_69.js new file mode 100644 index 0000000..4b116f6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_69.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['internalframecount_2eh',['InternalFrameCount.h',['../InternalFrameCount_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_6e.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_6e.html new file mode 100644 index 0000000..9e30d62 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_6e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_6e.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_6e.js new file mode 100644 index 0000000..f2012db --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_6e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nonlinearhistogram_2eh',['NonLinearHistogram.h',['../NonLinearHistogram_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_70.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_70.html new file mode 100644 index 0000000..abcae9a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_70.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_70.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_70.js new file mode 100644 index 0000000..b7fad32 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_70.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pwlwdrsensormode_2eh',['PwlWdrSensorMode.h',['../PwlWdrSensorMode_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_72.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_72.html new file mode 100644 index 0000000..609fb48 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_72.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_72.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_72.js new file mode 100644 index 0000000..15b3174 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_72.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['request_2eh',['Request.h',['../Request_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_73.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_73.html new file mode 100644 index 0000000..e0de9e6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_73.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_73.js new file mode 100644 index 0000000..30b4937 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_73.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['sensoreepromdata_2eh',['SensorEepromData.h',['../SensorEepromData_8h.html',1,'']]], + ['sensorotpdata_2eh',['SensorOtpData.h',['../SensorOtpData_8h.html',1,'']]], + ['sensorprivatemetadata_2eh',['SensorPrivateMetadata.h',['../SensorPrivateMetadata_8h.html',1,'']]], + ['sensorprivatemetadataclientbuffer_2eh',['SensorPrivateMetadataClientBuffer.h',['../SensorPrivateMetadataClientBuffer_8h.html',1,'']]], + ['sensortimestamptsc_2eh',['SensorTimestampTsc.h',['../SensorTimestampTsc_8h.html',1,'']]], + ['settings_2eh',['Settings.h',['../Settings_8h.html',1,'']]], + ['stream_2eh',['Stream.h',['../Stream_8h.html',1,'']]], + ['syncsensorcalibrationdata_2eh',['SyncSensorCalibrationData.h',['../SyncSensorCalibrationData_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_74.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_74.html new file mode 100644 index 0000000..017b3fe --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_74.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_74.js new file mode 100644 index 0000000..758f67e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_74.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['types_2eh',['Types.h',['../Types_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_75.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_75.html new file mode 100644 index 0000000..8ea7b3d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_75.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/files_75.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_75.js new file mode 100644 index 0000000..0731edb --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/files_75.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['uuid_2eh',['UUID.h',['../UUID_8h.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_61.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_61.html new file mode 100644 index 0000000..7f39533 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_61.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_61.js new file mode 100644 index 0000000..5d3dfd6 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_61.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['acquirebuffer',['acquireBuffer',['../classArgus_1_1IBufferOutputStream.html#aded9446aa0e3e64cbad4f95b54df9633',1,'Argus::IBufferOutputStream']]], + ['acregion',['AcRegion',['../classArgus_1_1AcRegion.html#ac384535f03f0d5f2c792789766de6fb0',1,'Argus::AcRegion::AcRegion()'],['../classArgus_1_1AcRegion.html#a5cfa0aa1c6d33fdad6050f57a57d03f9',1,'Argus::AcRegion::AcRegion(uint32_t _left, uint32_t _top, uint32_t _right, uint32_t _bottom, float _weight)']]], + ['area',['area',['../classArgus_1_1Size2D.html#a2cf8d97c8d5c55005669751735988568',1,'Argus::Size2D::area()'],['../classArgus_1_1Rectangle.html#a40b68104a2f3cf969dff0b7b26a8faf2',1,'Argus::Rectangle::area()']]], + ['array2d',['Array2D',['../classArgus_1_1Array2D.html#a951a8a81048d0a2e221732fed4087729',1,'Argus::Array2D::Array2D()'],['../classArgus_1_1Array2D.html#a5176c6edb2a10014e2ec30659160669f',1,'Argus::Array2D::Array2D(const Size2D< uint32_t > &size)'],['../classArgus_1_1Array2D.html#ac2ab97e9bcbb931e374f21bf19a50d98',1,'Argus::Array2D::Array2D(const Size2D< uint32_t > &size, const T &value)'],['../classArgus_1_1Array2D.html#afba5aad8e211a848b824b4f4136bfd1b',1,'Argus::Array2D::Array2D(const Array2D< T > &other)']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_62.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_62.html new file mode 100644 index 0000000..def0606 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_62.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_62.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_62.js new file mode 100644 index 0000000..2ccff40 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_62.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['b',['b',['../classArgus_1_1BayerTuple.html#a7a405c9d6103ea4b2908dd90024f171c',1,'Argus::BayerTuple::b()'],['../classArgus_1_1BayerTuple.html#a4493be34f517bc456bb2e33bb5a5bc2c',1,'Argus::BayerTuple::b() const '],['../classArgus_1_1RGBTuple.html#aee75ddcdc97b817aaa38ad939d5c85d2',1,'Argus::RGBTuple::b()'],['../classArgus_1_1RGBTuple.html#aedaba96c6c208755de2fb53f93f6d36b',1,'Argus::RGBTuple::b() const ']]], + ['bayertuple',['BayerTuple',['../classArgus_1_1BayerTuple.html#a9adf5f2f70d07a6103e0c54c5f850dc3',1,'Argus::BayerTuple::BayerTuple()'],['../classArgus_1_1BayerTuple.html#a1f0f889eebfb6f231f630a3b5d2944eb',1,'Argus::BayerTuple::BayerTuple(const Tuple< BAYER_CHANNEL_COUNT, T > &other)'],['../classArgus_1_1BayerTuple.html#a1cd8e42e25bd900e255c66cd1411c47b',1,'Argus::BayerTuple::BayerTuple(T init)'],['../classArgus_1_1BayerTuple.html#af1176cf57964b8d444e0c71d43b5dd0e',1,'Argus::BayerTuple::BayerTuple(T _r, T _gEven, T _gOdd, T _b)']]], + ['begin',['begin',['../classArgus_1_1Array2D.html#a29db9087e0f6db131319b36a60b3766c',1,'Argus::Array2D::begin() const '],['../classArgus_1_1Array2D.html#ab5b7e17b7c4be97161807f931da02e39',1,'Argus::Array2D::begin()']]], + ['bottom',['bottom',['../classArgus_1_1Rectangle.html#adc9f66f69cda97ea0999a94396b157a6',1,'Argus::Rectangle::bottom()'],['../classArgus_1_1Rectangle.html#a4a115e321d277ad9cdfa357af15dd154',1,'Argus::Rectangle::bottom() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_63.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_63.html new file mode 100644 index 0000000..9ebe11d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_63.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_63.js new file mode 100644 index 0000000..aaafc3d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_63.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['cancelrequests',['cancelRequests',['../classArgus_1_1ICaptureSession.html#a04675ce7ace82c9ffe1f236dc9f55d39',1,'Argus::ICaptureSession']]], + ['capture',['capture',['../classArgus_1_1ICaptureSession.html#a3e02e8605e5ef5148cdbe79c26cf1fa8',1,'Argus::ICaptureSession']]], + ['captureburst',['captureBurst',['../classArgus_1_1ICaptureSession.html#af94f311dba11bdd33e1c5f3485cee7e7',1,'Argus::ICaptureSession']]], + ['checkindex',['checkIndex',['../classArgus_1_1Array2D.html#ad163c996aef3088d76489a29135350ee',1,'Argus::Array2D::checkIndex(uint32_t i) const '],['../classArgus_1_1Array2D.html#abaa546cbd24fd29c32cc172600f9ea03',1,'Argus::Array2D::checkIndex(uint32_t x, uint32_t y) const ']]], + ['clearoutputstreams',['clearOutputStreams',['../classArgus_1_1IRequest.html#a4fb634e7361d54e0a901cdff5f98dfc7',1,'Argus::IRequest']]], + ['create',['create',['../classArgus_1_1CameraProvider.html#a900190f5dd0f15ff7fa1dc2a7edb19ac',1,'Argus::CameraProvider']]], + ['createblockingcapturesession',['createBlockingCaptureSession',['../classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html#aaeda1333dd2bdc5705db481353ad7ccf',1,'Argus::Ext::IBlockingSessionCameraProvider::createBlockingCaptureSession(CameraDevice *device, Status *status=NULL)=0'],['../classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html#a63075766d5989f1a3ff6eb4a2bd95cef',1,'Argus::Ext::IBlockingSessionCameraProvider::createBlockingCaptureSession(const std::vector< CameraDevice * > &devices, Status *status=NULL)=0']]], + ['createbuffer',['createBuffer',['../classArgus_1_1IBufferOutputStream.html#a2143b4ef0bb3a9e97b328d32d4012485',1,'Argus::IBufferOutputStream']]], + ['createbuffersettings',['createBufferSettings',['../classArgus_1_1IBufferOutputStream.html#a9d235cc15ca874b552d2399daa22b900',1,'Argus::IBufferOutputStream']]], + ['createcapturesession',['createCaptureSession',['../classArgus_1_1ICameraProvider.html#ae84d50114342447dfbc2552a34288608',1,'Argus::ICameraProvider::createCaptureSession(CameraDevice *device, Status *status=NULL)=0'],['../classArgus_1_1ICameraProvider.html#a140866d0ad8bfa19ce850ee1223d52a8',1,'Argus::ICameraProvider::createCaptureSession(const std::vector< CameraDevice * > &devices, Status *status=NULL)=0']]], + ['createeventqueue',['createEventQueue',['../classArgus_1_1IEventProvider.html#a3bb3a439312b8cba86cbfcb397be63e8',1,'Argus::IEventProvider']]], + ['createoutputstream',['createOutputStream',['../classArgus_1_1ICaptureSession.html#a5650305125287666054bc3c862a76d84',1,'Argus::ICaptureSession']]], + ['createoutputstreamsettings',['createOutputStreamSettings',['../classArgus_1_1ICaptureSession.html#a3a36fcbfee5ac4896f1ae513ca8f96f5',1,'Argus::ICaptureSession']]], + ['createrequest',['createRequest',['../classArgus_1_1ICaptureSession.html#afc1d1d0c7ccaae5c96dbddcf98919a10',1,'Argus::ICaptureSession']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_64.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_64.html new file mode 100644 index 0000000..d8b6394 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_64.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_64.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_64.js new file mode 100644 index 0000000..b9b7160 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_64.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['data',['data',['../classArgus_1_1Array2D.html#abd32fa609ef30114c9c64ef587b092e1',1,'Argus::Array2D::data() const '],['../classArgus_1_1Array2D.html#a06c6bf2916b243f7a660e4923cc3e1b1',1,'Argus::Array2D::data()']]], + ['define_5fnamed_5fuuid_5fclass',['DEFINE_NAMED_UUID_CLASS',['../namespaceArgus.html#ae962bb092bc351459cbb08b688f94525',1,'Argus::DEFINE_NAMED_UUID_CLASS(BufferType)'],['../namespaceArgus.html#a93a3264868bb4477def733244b88f0fb',1,'Argus::DEFINE_NAMED_UUID_CLASS(SyncType)'],['../namespaceArgus.html#ab51c6bc4f25b501959800f1a54609069',1,'Argus::DEFINE_NAMED_UUID_CLASS(EGLStreamMode)'],['../namespaceArgus.html#a1289d9d37e81dd64a512d8f5504d50ec',1,'Argus::DEFINE_NAMED_UUID_CLASS(DistortionType)'],['../namespaceArgus.html#aceceff1fb91da3f61f41dce4126ab8fc',1,'Argus::DEFINE_NAMED_UUID_CLASS(MappingType)'],['../namespaceArgus.html#a3914500ce31d40cbea3554cc64d11c2d',1,'Argus::DEFINE_NAMED_UUID_CLASS(StreamType)'],['../namespaceArgus.html#aa8cb6e1f960f940e54414084170378f3',1,'Argus::DEFINE_NAMED_UUID_CLASS(AeAntibandingMode)'],['../namespaceArgus.html#a948f2d3af219c853387331ed98b6b15e',1,'Argus::DEFINE_NAMED_UUID_CLASS(AeFlickerState)'],['../namespaceArgus.html#ae9435b406ac2bcfdd29e0aef34504b18',1,'Argus::DEFINE_NAMED_UUID_CLASS(AeState)'],['../namespaceArgus.html#aa2c3341290e7572c667c30618ee3c74b',1,'Argus::DEFINE_NAMED_UUID_CLASS(AwbMode)'],['../namespaceArgus.html#a199bb99a7afc94f9487ac9a4a1010a0a',1,'Argus::DEFINE_NAMED_UUID_CLASS(AwbState)'],['../namespaceArgus.html#a7cb2f42916e6a666dcb04171bee1d38a',1,'Argus::DEFINE_NAMED_UUID_CLASS(CaptureIntent)'],['../namespaceArgus.html#a05d27294517f13a023c87736244dca9b',1,'Argus::DEFINE_NAMED_UUID_CLASS(DenoiseMode)'],['../namespaceArgus.html#a7f206dd8b4f535efdf7bec7990b3a793',1,'Argus::DEFINE_NAMED_UUID_CLASS(EdgeEnhanceMode)'],['../namespaceArgus.html#a94028c35f26bf5aebe0fba74671ab78c',1,'Argus::DEFINE_NAMED_UUID_CLASS(ExtensionName)'],['../namespaceArgus.html#ae524ffc411a5cc37c4adeea29774e9e8',1,'Argus::DEFINE_NAMED_UUID_CLASS(PixelFormat)'],['../namespaceArgus.html#a06f7163cdf99b4d05862ba8c3a1cced5',1,'Argus::DEFINE_NAMED_UUID_CLASS(SensorModeType)'],['../namespaceArgus.html#aa6ccc226a9d2a6764808655d3c1620f3',1,'Argus::DEFINE_NAMED_UUID_CLASS(SensorPlacement)'],['../namespaceArgus.html#a52e57c9767dc02944e162f229865fb4a',1,'Argus::DEFINE_NAMED_UUID_CLASS(BayerPhase)']]], + ['define_5fuuid',['DEFINE_UUID',['../group__ArgusOutputStreamSettings.html#ga8461b09a5e76475a66fcb206b98ae275',1,'Argus::DEFINE_UUID(StreamType, STREAM_TYPE_BUFFER, c723d960, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a6760f358350400386c3d0ad038e3cd4a',1,'Argus::DEFINE_UUID(BufferType, BUFFER_TYPE_NONE, c723d961, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a46b0b7dc6d27d205bd14d50cb67916c5',1,'Argus::DEFINE_UUID(SyncType, SYNC_TYPE_NONE, c723d962, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a3612973214e53c4c388e2fbc77ca0e59',1,'Argus::DEFINE_UUID(InterfaceID, IID_BUFFER_OUTPUT_STREAM_SETTINGS, c723d963, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ae5a2e23e8d26effc959eae42bd0fd5b1',1,'Argus::DEFINE_UUID(InterfaceID, IID_BUFFER_OUTPUT_STREAM, c723d964, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a09c961369ce66bc06d066af0771d06e2',1,'Argus::DEFINE_UUID(InterfaceID, IID_BUFFER, c723d965, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a6693bf82f71eba1b77f970effac11308',1,'Argus::DEFINE_UUID(InterfaceID, IID_CAMERA_PROPERTIES, 436d2a73, c85b, 4a29, bce5, 15, 60, 6e, 35, 86, 91)'],['../namespaceArgus.html#afd3e99d51e708803a0a0a1435b0de0ef',1,'Argus::DEFINE_UUID(InterfaceID, IID_SENSOR_MODE, e69015e0, db2a, 11e5, a837, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a118c3c9d81760c87f792223cf24bfedc',1,'Argus::DEFINE_UUID(InterfaceID, IID_CAMERA_PROVIDER, a00f33d7, 8564, 4226, 955c, 2d, 1b, cd, af, a3, 5f)'],['../namespaceArgus.html#a63605df02b590d90ae96f4cd7957fe33',1,'Argus::DEFINE_UUID(InterfaceID, IID_BAYER_HISTOGRAM, 50bc4f1c, 6424, beb7, baae, b0, 90, c9, c3, 25, 9e)'],['../namespaceArgus.html#a36b086cb4c400aad05e82d7cda889451',1,'Argus::DEFINE_UUID(InterfaceID, IID_RGB_HISTOGRAM, 50bc4f1d, 6424, beb7, baae, b0, 90, c9, c3, 25, 9e)'],['../namespaceArgus.html#ade8d4b1a844342fb766d256dfd2d279c',1,'Argus::DEFINE_UUID(InterfaceID, IID_STREAM_CAPTURE_METADATA, 61cbe0a8, 0ee1, 4c67, baae, 02, 02, 1a, b8, d9, 47)'],['../namespaceArgus.html#ad3b5c2b873ffc22fc7717b729a122249',1,'Argus::DEFINE_UUID(InterfaceID, IID_CAPTURE_METADATA, 5f6ac5d4, 59e8, 45d0, 8bac, 38, 09, 1f, f8, 74, a9)'],['../namespaceArgus.html#ab888ff9bf7d6c8d47721acdd669d1087',1,'Argus::DEFINE_UUID(InterfaceID, IID_DENOISE_METADATA, 7A461D23, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a1619caca225ef8894c6a1fe4d64e2208',1,'Argus::DEFINE_UUID(InterfaceID, IID_EDGE_ENHANCE_METADATA, 7A461D24, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a300e6c8cf6e06039fe1b87f35cf478b4',1,'Argus::DEFINE_UUID(InterfaceID, IID_CAPTURE_SESSION, 813644f5, bc21, 4013, af44, dd, da, b5, 7a, 9d, 13)'],['../group__ArgusBufferBufferSettings.html#ga48a730b679c153941bfcf6f9b28d42bc',1,'Argus::DEFINE_UUID(BufferType, BUFFER_TYPE_EGL_IMAGE, c723d966, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#af47908699cd189be38c8dd0434232fb7',1,'Argus::DEFINE_UUID(InterfaceID, IID_EGL_IMAGE_BUFFER_SETTINGS, c723d967, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a76c154b41a52a21d7716966d8dd989d8',1,'Argus::DEFINE_UUID(InterfaceID, IID_EGL_IMAGE_BUFFER, c723d968, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../group__ArgusOutputStreamSettings.html#gae2bcfd31518821768dd2ef3cb0d42b86',1,'Argus::DEFINE_UUID(StreamType, STREAM_TYPE_EGL, 3a659360, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#afd53e548866c90a5cf024eb79cae15ba',1,'Argus::DEFINE_UUID(EGLStreamMode, EGL_STREAM_MODE_MAILBOX, 33661d40, 3ee2, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ae4962dd28ca7f23e441bc782e3364c8c',1,'Argus::DEFINE_UUID(EGLStreamMode, EGL_STREAM_MODE_FIFO, 33661d41, 3ee2, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a5d40cda4a6a87df2bbb4029c74cf1b79',1,'Argus::DEFINE_UUID(InterfaceID, IID_EGL_OUTPUT_STREAM_SETTINGS, 3a659361, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a81bec55fcd4ff640695f475ef093acbe',1,'Argus::DEFINE_UUID(InterfaceID, IID_EGL_OUTPUT_STREAM, 3a659362, 5231, 11e7, 9598, 18, 00, 20, 0c, 9a, 66)'],['../group__ArgusBufferSync.html#gab25f8c13502b3a0b96d4aa7ee7accf29',1,'Argus::DEFINE_UUID(SyncType, SYNC_TYPE_EGL_SYNC, 5df77c90, 5d1b, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a2bab11bdabb2949ee0d281f1678e110d',1,'Argus::DEFINE_UUID(InterfaceID, IID_EGL_SYNC, 5df77c91, 5d1b, 11e7, 9598, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a3535f80c50ae3e44fc48ffc7ea4edf3c',1,'Argus::DEFINE_UUID(EventType, EVENT_TYPE_ERROR, 2c80d8b0, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a920d6574219fd4b18dac384f7beda0f0',1,'Argus::DEFINE_UUID(EventType, EVENT_TYPE_CAPTURE_STARTED, 2c80d8b1, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#af90c5bb0349160435180d76a5dceff2d',1,'Argus::DEFINE_UUID(EventType, EVENT_TYPE_CAPTURE_COMPLETE, 2c80d8b2, 2bfd, 11e5, a2cb, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#abeb9d319a9fc9eeb628b21940c35200e',1,'Argus::DEFINE_UUID(InterfaceID, IID_EVENT, 98bcb49e, fd7d, 11e4, a322, 16, 97, f9, 25, ec, 7b)'],['../namespaceArgus.html#a7ecb6fd23bcdf589511dc5f84a8e3686',1,'Argus::DEFINE_UUID(InterfaceID, IID_EVENT_ERROR, 13e0fc70, 1ab6, 11e5, b939, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a4c08ea4824fe7bbbf9d1fe4c0d850a49',1,'Argus::DEFINE_UUID(InterfaceID, IID_EVENT_CAPTURE_COMPLETE, 8b2b40b5, f1e4, 4c4d, ae1c, f3, 93, f6, 54, 06, d5)'],['../namespaceArgus.html#aa33f90071d2e7f0c243d91e7b4009071',1,'Argus::DEFINE_UUID(InterfaceID, IID_EVENT_PROVIDER, 523ed330, 25dc, 11e5, 867f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a475f9858daf584fca4ca78ba3805c788',1,'Argus::DEFINE_UUID(InterfaceID, IID_EVENT_QUEUE, 944b11f6, e512, 49ad, 8573, fc, 82, 3e, 02, 25, ed)'],['../namespaceArgus.html#a22228f417d5d728d2dcc1dcaabadaacd',1,'Argus::DEFINE_UUID(ExtensionName, EXT_BAYER_AVERAGE_MAP, 12c3de20, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#ab50287119bdfe8ebee24a1fca714761c',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_BAYER_AVERAGE_MAP_SETTINGS, 12c3de21, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#aaaeecb1d30f72f00e36de1ac08ceecdc',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_BAYER_AVERAGE_MAP, 12c3de22, 64c5, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a8833d4742b538d122ffbc96c9f221eb6',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#ac3c5d5ded3bcda633c70d71081bac894',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_BAYER_SHARPNESS_MAP_SETTINGS, 7d5e0471, 4ea6, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#a942285b27764419526922695e1aeb4a6',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_BAYER_SHARPNESS_MAP, 7d5e0472, 4ea6, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a2e7eb1a9f3ae51f46b4a4b64b7b37916',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#ae6445a2658dc0a12cdd94d8f4eae727d',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a4d801124a23baad457325542bb07448d',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a15955d5296ced2c1577b975abb6e99f1',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a06776997bf07fdb26d0d7931ad76fd85',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a1e9a931124b58548d65523d5aacf8398',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a7ec234340d14190a381524f71a48c134',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a3ab17c142e7439acafe3ccc047e2938e',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a3aae68bca96f6dfc26772550c8c3609b',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#aa42649ee59294156faf77bb97a0ca484',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_FACE_DETECT_CAPS, 40412bb0, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#a52917550dee10678334e2d6993e98023',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_FACE_DETECT_SETTINGS, 40412bb1, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#a55fd8193402e35a6435b2c4af19f1c0b',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_FACE_DETECT_METADATA, 40412bb2, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#a5bac94b2bbf264486625e3a01520a9c0',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_FACE_DETECT_RESULT, 40412bb3, ba24, 11e5, a837, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#aedecf9988914982afa3e78cc532beb79',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a5ca74ec93c66a8125b1d4ad3eb4cc95f',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a95378f223be7a714dc37ee0a61ce45ad',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a688115e51328f7ffb555bb5e9ad0e6e8',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#ad544df8a18333779e0c0da86696a83d2',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a25bafbf08612afadc0321b76817fd6a7',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#ae0b699abb4793cf675ff4b3575c00fa7',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a832daf7d2d8d791c1faec435d1f26e28',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#ab096e724a608fec0ad0febdc5ef72287',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#ab0a8d7fa2d8d50834707069c9130d63a',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a3de1a0e68378a2ed5c38253634635b18',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#aabfdc11881e54497438c7cc96481aeef',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_CAPS, e492d2bf, 5285, 476e, 94c5, ee, 64, d5, 3d, 94, ef)'],['../namespaceArgus_1_1Ext.html#aa2bbec97ff48297aaaa8b332c079bc38',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_REQUEST, 5c868b69, 42f5, 4ec9, 9b93, 44, 11, c9, 6c, 02, e3)'],['../namespaceArgus_1_1Ext.html#ab1fd0918305c9be65715cb73f82e2cff',1,'Argus::Ext::DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA, 68cf6680, 70d7, 4b52, 9a99, 33, fb, 65, 81, a2, 61)'],['../namespaceArgus.html#a786bfc890d03e930fbd8071c98405c63',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a3990bec9e2abe10fcfcb7149be7f90a8',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a9dd27a708be764074960e844d8a0e15f',1,'Argus::DEFINE_UUID()'],['../namespaceArgus_1_1Ext.html#a6220adb6deeee3b087a030f22a7765ff',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#a14228670c21cc4ec5521f19310c62579',1,'Argus::DEFINE_UUID(DistortionType, DISTORTION_TYPE_POLYNOMIAL, 23e59580, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a69c04eb7e877a593558ebd9ba9457510',1,'Argus::DEFINE_UUID(DistortionType, DISTORTION_TYPE_FISHEYE, 23e59581, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ac8e662d7ac809d11631615c1231bd8e5',1,'Argus::DEFINE_UUID(DistortionType, DISTORTION_TYPE_OMINI_DIRECTIONAL, 23e5bc90, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a2762ed7fc270bcac64eaa56d941e82ef',1,'Argus::DEFINE_UUID(MappingType, MAPPING_TYPE_EQUIDISTANT, 9e7f3c10, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a1736b0c9086070bf9887fc2114adf9c1',1,'Argus::DEFINE_UUID(MappingType, MAPPING_TYPE_EQUISOLID, 9e7f3c11, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#aa68a1526a20ee1e49027c166b013f61a',1,'Argus::DEFINE_UUID(MappingType, MAPPING_TYPE_ORTHOGRAPHIC, 9e7f3c12, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a18a6b146f7d880e8ec93f0a6a618f046',1,'Argus::DEFINE_UUID(MappingType, MAPPING_TYPE_STEREOGRAPHIC, 9e7f3c13, 17ff, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ad5908dc57ad25ff8629787193933ce11',1,'Argus::DEFINE_UUID(ExtensionName, EXT_SYNC_SENSOR_CALIBRATION_DATA, 10845a70, d52f, 11ea, 8b6e, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus_1_1Ext.html#ad7a88c3fd654c912a1df43d8d9da0087',1,'Argus::Ext::DEFINE_UUID()'],['../namespaceArgus.html#ae10758ebe5c040fdf44dd0ae14aadd67',1,'Argus::DEFINE_UUID(InterfaceID, IID_REQUEST, eb9b3750, fc8d, 455f, 8e0f, 91, b3, 3b, d9, 4e, c5)'],['../namespaceArgus.html#a3c93a3fa29230ec9dbd3ddada9caa8ea',1,'Argus::DEFINE_UUID(InterfaceID, IID_SOURCE_SETTINGS, eb7ae38c, 3c62, 4161, a92a, a6, 4f, ba, c6, 38, 83)'],['../namespaceArgus.html#a6a02174e70d3267fa6fbfcec669f0b27',1,'Argus::DEFINE_UUID(InterfaceID, IID_AUTO_CONTROL_SETTINGS, 1f2ad1c6, cb13, 440b, bc95, 3f, fd, 0d, 19, 91, db)'],['../namespaceArgus.html#a63c4684e7250c4dd097cc1e3b81ab7b3',1,'Argus::DEFINE_UUID(InterfaceID, IID_STREAM_SETTINGS, c477aeaf, 9cc8, 4467, a834, c7, 07, d7, b6, 9f, a4)'],['../namespaceArgus.html#af57186f0565e9eab4867f0ed973d66b0',1,'Argus::DEFINE_UUID(InterfaceID, IID_DENOISE_SETTINGS, 7A461D20, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#ae6d0f920bbfb8ed8378f0c158fa5c82a',1,'Argus::DEFINE_UUID(InterfaceID, IID_EDGE_ENHANCE_SETTINGS, 7A461D21, 6AE1, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a287794f51463f98dd84a48612f468030',1,'Argus::DEFINE_UUID(InterfaceID, IID_OUTPUT_STREAM_SETTINGS, 52f2b830, 3d52, 11e6, bdf4, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#af64b103aeb58b8415341c7bbc158a8e5',1,'Argus::DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_OFF, AD1E5560, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a7c99fe88d5ad3d931902f6fdf78b757d',1,'Argus::DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_AUTO, AD1E5561, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a6f60e68740e4dad36140e3de61952bbe',1,'Argus::DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_50HZ, AD1E5562, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a8d77726ececc4550668adeee4d236e08',1,'Argus::DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_60HZ, AD1E5563, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a14a5caf1ed16469bacc5345f7d6b92cb',1,'Argus::DEFINE_UUID(AeFlickerState, AE_FLICKER_NONE, AD1E5564, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a706b57af8ce20e61b7cde59c8c80067e',1,'Argus::DEFINE_UUID(AeFlickerState, AE_FLICKER_50HZ, AD1E5565, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a0bb2f99864540f30f84ce64bbc1beeae',1,'Argus::DEFINE_UUID(AeFlickerState, AE_FLICKER_60HZ, AD1E5566, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#acf838aafcb058d52722b57fdf2669baf',1,'Argus::DEFINE_UUID(AeState, AE_STATE_INACTIVE, D2EBEA50, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a48a1ba7917e7d80ab82bf81aff70d394',1,'Argus::DEFINE_UUID(AeState, AE_STATE_SEARCHING, D2EBEA51, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#aa477f7b8882ae44b9d4124b2878d538b',1,'Argus::DEFINE_UUID(AeState, AE_STATE_CONVERGED, D2EBEA52, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#ad618857a7f9efa53e7f78253d11fed99',1,'Argus::DEFINE_UUID(AeState, AE_STATE_FLASH_REQUIRED, D2EBEA53, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a909bc082904975ef3b2f945ae0d4f7d4',1,'Argus::DEFINE_UUID(AeState, AE_STATE_TIMEOUT, D2EBEA54, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a9d0baa03c1f6066b0a2f187024e19c5b',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_OFF, FB3F365A, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#aecd936cb42af8686b0411dd950a498a7',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_AUTO, FB3F365B, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a3fee4ff380fce23cf6c69d415a353fe5',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_INCANDESCENT, FB3F365C, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a1195ea0dd5dab54d047eb7813804b48d',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_FLUORESCENT, FB3F365D, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a0c6485648870fb939afd490314f3f035',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_WARM_FLUORESCENT, FB3F365E, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a7494db59310cc25a4c334f81501e798b',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_DAYLIGHT, FB3F365F, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#afba59e9e7baeb939093d9bc67b9019b3',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_CLOUDY_DAYLIGHT, FB3F3660, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#ae62fb8ea45f3eeb240f6b9e57038c626',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_TWILIGHT, FB3F3661, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#aadcdc266ec7074d24d71a633ca0ad713',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_SHADE, FB3F3662, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a5db635f6d90d9e9fc32d20b77b9a9003',1,'Argus::DEFINE_UUID(AwbMode, AWB_MODE_MANUAL, 20FB45DA, C49F, 4293, AB02, 13, 3F, 8C, CA, DD, 69)'],['../namespaceArgus.html#acafd1d2cd30cd83388242a7ee47d9602',1,'Argus::DEFINE_UUID(AwbState, AWB_STATE_INACTIVE, E33CDB30, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a9ed57a8d8d120c5704f095f02deab1c2',1,'Argus::DEFINE_UUID(AwbState, AWB_STATE_SEARCHING, E33CDB31, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#ae7be9bfe62ab7278187597a9651bad5c',1,'Argus::DEFINE_UUID(AwbState, AWB_STATE_CONVERGED, E33CDB32, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a5ea6773165bcfb406eeaadf9cda76c6f',1,'Argus::DEFINE_UUID(AwbState, AWB_STATE_LOCKED, E33CDB33, 9C16, 11E8, B568, 18, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a0738ace3853021c8c5590bde9f1cd96f',1,'Argus::DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_MANUAL, FB3F3663, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#ac5b6db863a18f0d9b15a487c6dae4e67',1,'Argus::DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_PREVIEW, FB3F3664, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a61a63b989377b3707922b6c522796dd9',1,'Argus::DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_STILL_CAPTURE, FB3F3665, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#ad0c46822435b6725d397458b9bd49598',1,'Argus::DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_VIDEO_RECORD, FB3F3666, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a80f02e787b4a9c13d15f852e4def4d6f',1,'Argus::DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_VIDEO_SNAPSHOT, FB3F3667, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#abfb987ab38d2d403756e843f7a0f60ea',1,'Argus::DEFINE_UUID(DenoiseMode, DENOISE_MODE_OFF, FB3F3668, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#ac839b5f9882095779109a39b05ae28c6',1,'Argus::DEFINE_UUID(DenoiseMode, DENOISE_MODE_FAST, FB3F3669, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#a298e016550695d5d2e4df4acafc48938',1,'Argus::DEFINE_UUID(DenoiseMode, DENOISE_MODE_HIGH_QUALITY, FB3F366A, CC62, 11E5, 9956, 62, 56, 62, 87, 07, 61)'],['../namespaceArgus.html#aeff9b21b294655958f7f05d2cf6b1bec',1,'Argus::DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_OFF, F7100B40, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a9c4e6f0a1e298ed3326f083d0695edcf',1,'Argus::DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_FAST, F7100B41, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a941091da7a35dc93b7875c39f482f058',1,'Argus::DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_HIGH_QUALITY, F7100B42, 6A5F, 11E6, BDF4, 08, 00, 20, 0C, 9A, 66)'],['../namespaceArgus.html#a039fe3ef56533cd250bdb5dca72e2fd2',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_UNKNOWN, 00000000, 93d5, 11e5, 0000, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a66030b7e7355fa65d91ca707c88e6a4e',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_Y8, 569be14a, 93d5, 11e5, 91bc, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a3925fff072da759b0ba67afcfae79ed2',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_Y16, 56ddb19c, 93d5, 11e5, 8e2c, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#aa7f13bfbf04d48413192e116cdafe0c2',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_420_888, 570c10e6, 93d5, 11e5, 8ff3, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a7969f058d0b3a20c16a5c88167e6bf68',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_422_888, 573a7940, 93d5, 11e5, 99c2, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a5086b88ae9ee20f52c2a53f9def0fd8c',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_444_888, 576043dc, 93d5, 11e5, 8983, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a985da20c0396d4f80bad9716c3fe531f',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_JPEG_BLOB, 578b08c4, 93d5, 11e5, 9686, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#a15c9a4ad3291db97edc5fdedbaa23b10',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_RAW16, 57b484d8, 93d5, 11e5, aeb6, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#ad8f4398efe05ae1ab6d255b82bb56edc',1,'Argus::DEFINE_UUID(PixelFormat, PIXEL_FMT_P016, 57b484d9, 93d5, 11e5, aeb6, 1c, b7, 2c, ef, d4, 1e)'],['../namespaceArgus.html#abcd8119135e37616667178b0c031571d',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_DEPTH, 64483464, 4b91, 11e6, bbbd, 40, 16, 7e, ab, 86, 92)'],['../namespaceArgus.html#ada21e799d6b4b1884d9d5675005eeae9',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_YUV, 6453e00c, 4b91, 11e6, 871d, 40, 16, 7e, ab, 86, 92)'],['../namespaceArgus.html#a0d72c0d084dc7fc583276ec32fe93b49',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_RGB, 6463d4c6, 4b91, 11e6, 88a3, 40, 16, 7e, ab, 86, 92)'],['../namespaceArgus.html#af3c01144803283adacd42d85c852bac0',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER, 646f04ea, 4b91, 11e6, 9c06, 40, 16, 7e, ab, 86, 92)'],['../namespaceArgus.html#a68f73ab3307efc974b505fafa9556a5b',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER_PWL, f6a08220, 6a0f, 11eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#acf1e7bcea14fef64dc2f6398b1899eb6',1,'Argus::DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER_DOL, f6a08221, 6a0f, 11eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a90758ed100a827e48e74b4822492d54b',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_REAR_OR_BOTTOM_OR_BOTTOM_LEFT, 01dba8b0, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a214eda0a1857bf25b62c93bb976b1d5b',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_FRONT_OR_TOP_OR_CENTER_LEFT, 01dba8b1, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#acb3c83d5ed006aacc06ff92db3b47492',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_CENTER_OR_CENTER_RIGHT, 01dba8b2, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a3ca52350d089ddb5fa491faf914b9da3',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_TOP_LEFT, 01dba8b3, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a1aaf41063ac64a6e3caa5fe89fe5e8a8',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_BOTTOM_RIGHT, 01dba8b4, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#abfd25a0ba8e1b80bc0bf3c6fc4675bd3',1,'Argus::DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_TOP_RIGHT, 01dba8b5, 1946, 11eb, 8b6f, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#aea6c632f9a32588fab25e79dbc316ecf',1,'Argus::DEFINE_UUID(BayerPhase, BAYER_PHASE_UNKNOWN, b9d43270, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ae67d46cbf9211a1208834f8f6b38e734',1,'Argus::DEFINE_UUID(BayerPhase, BAYER_PHASE_RGGB, b9d43271, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ad610720bed7d3086bc339209051b95c9',1,'Argus::DEFINE_UUID(BayerPhase, BAYER_PHASE_BGGR, b9d43272, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#ad7f70006efb432338e777ea35dd072f6',1,'Argus::DEFINE_UUID(BayerPhase, BAYER_PHASE_GRBG, b9d43273, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)'],['../namespaceArgus.html#a853a9be8745c1d531f05eea30dc25f40',1,'Argus::DEFINE_UUID(BayerPhase, BAYER_PHASE_GBRG, b9d43274, 6a0e, 12eb, 8572, 08, 00, 20, 0c, 9a, 66)']]], + ['destroy',['destroy',['../classArgus_1_1Destructable.html#a0054a3170fd31e50e998a1f1618bf83a',1,'Argus::Destructable']]], + ['disableoutputstream',['disableOutputStream',['../classArgus_1_1IRequest.html#a6c50745ce8435e28cd83d32399290f2f',1,'Argus::IRequest']]], + ['disconnect',['disconnect',['../classArgus_1_1IEGLOutputStream.html#a22dd0e5a516d25e7bd7e64668393aa7b',1,'Argus::IEGLOutputStream']]], + ['dump',['dump',['../classArgus_1_1Ext_1_1IDebugCaptureSession.html#aadc128cae58a2e07e984a173cde175f9',1,'Argus::Ext::IDebugCaptureSession']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_65.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_65.html new file mode 100644 index 0000000..a77deba --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_65.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_65.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_65.js new file mode 100644 index 0000000..451e18f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_65.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['empty',['empty',['../classArgus_1_1Range.html#a23933aeb5370bd95e058798ab9f7f44f',1,'Argus::Range']]], + ['enableoutputstream',['enableOutputStream',['../classArgus_1_1IRequest.html#af17a10f9bd3526670b61bc9477d5e429',1,'Argus::IRequest']]], + ['end',['end',['../classArgus_1_1Array2D.html#a9a9a704d74021dff1292b71d07ecbcd1',1,'Argus::Array2D::end() const '],['../classArgus_1_1Array2D.html#a3fd76e7ba43ddf77e96ad1c284bb2d40',1,'Argus::Array2D::end()']]], + ['endofstream',['endOfStream',['../classArgus_1_1IBufferOutputStream.html#a5338106d0412600780a0bb5b85e83ce0',1,'Argus::IBufferOutputStream']]], + ['eventtype',['EventType',['../classArgus_1_1EventType.html#a96eed032e3dd95c2222eaacfe9b2dab2',1,'Argus::EventType::EventType(uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)'],['../classArgus_1_1EventType.html#a4171cbc4aa1579b39942e273976a9270',1,'Argus::EventType::EventType()']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_67.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_67.html new file mode 100644 index 0000000..d0ab42a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_67.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_67.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_67.js new file mode 100644 index 0000000..e52feb5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_67.js @@ -0,0 +1,177 @@ +var searchData= +[ + ['g',['g',['../classArgus_1_1RGBTuple.html#a9516fdcf52eb502e914e51ef51d6dfc1',1,'Argus::RGBTuple::g()'],['../classArgus_1_1RGBTuple.html#a8aaba7c05b9ba66e75cff7cc4662caec',1,'Argus::RGBTuple::g() const ']]], + ['get',['get',['../classArgus_1_1UniqueObj.html#ac232da34a550fc649e83f324fcddcba2',1,'Argus::UniqueObj']]], + ['getacquiresync',['getAcquireSync',['../classArgus_1_1IEGLSync.html#aea29df21c9de3a372ea5054801df83ec',1,'Argus::IEGLSync']]], + ['getaeantibandingmode',['getAeAntibandingMode',['../classArgus_1_1IAutoControlSettings.html#ae01194a64dce1b96dac831b07e363688',1,'Argus::IAutoControlSettings']]], + ['getaelock',['getAeLock',['../classArgus_1_1IAutoControlSettings.html#a4bd156e2237d64c13de650d2a8c8f032',1,'Argus::IAutoControlSettings']]], + ['getaelocked',['getAeLocked',['../classArgus_1_1ICaptureMetadata.html#abf822cf9536f41f3a76d43e14b7d5ad9',1,'Argus::ICaptureMetadata']]], + ['getaeregions',['getAeRegions',['../classArgus_1_1ICaptureMetadata.html#a90e107b0a98925ec123bf2892bf708f3',1,'Argus::ICaptureMetadata::getAeRegions()'],['../classArgus_1_1IAutoControlSettings.html#a34283535ad28228952f23a9e46db2650',1,'Argus::IAutoControlSettings::getAeRegions()']]], + ['getaestate',['getAeState',['../classArgus_1_1ICaptureMetadata.html#a919f4bf191780091e046a1d33d356c36',1,'Argus::ICaptureMetadata']]], + ['getafregions',['getAfRegions',['../classArgus_1_1ICaptureMetadata.html#a33c4da9fd59ed4a9e1f60070540f7978',1,'Argus::ICaptureMetadata::getAfRegions()'],['../classArgus_1_1IAutoControlSettings.html#a06e71b5b6c09c4a4117282969c428d25',1,'Argus::IAutoControlSettings::getAfRegions()']]], + ['getallsensormodes',['getAllSensorModes',['../classArgus_1_1ICameraProperties.html#afc4a1031659b1448c6429a48f162ae31',1,'Argus::ICameraProperties']]], + ['getanaloggainrange',['getAnalogGainRange',['../classArgus_1_1ISensorMode.html#abe32fa7a650854b01764dfe73a42043c',1,'Argus::ISensorMode']]], + ['getangularvelocitybias',['getAngularVelocityBias',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#ae81fcd4e0bab6a5e4536eff75e64feca',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getaperturefnumber',['getApertureFNumber',['../classArgus_1_1ISourceSettings.html#a923b2e9f4443e47ea62c0cef24c198f5',1,'Argus::ISourceSettings']]], + ['getaperturemotorspeed',['getApertureMotorSpeed',['../classArgus_1_1ISourceSettings.html#a741bf1b033f17bfd27624998d65602ae',1,'Argus::ISourceSettings']]], + ['getaperturemotorspeedrange',['getApertureMotorSpeedRange',['../classArgus_1_1ICameraProperties.html#ab70e7596d6a4aba288745e9a0317f05f',1,'Argus::ICameraProperties']]], + ['getapertureposition',['getAperturePosition',['../classArgus_1_1ICaptureMetadata.html#a272fea91d57891ecd774d38701fd045a',1,'Argus::ICaptureMetadata::getAperturePosition()'],['../classArgus_1_1ISourceSettings.html#a849cf514b061b5d604a38a41ed25458a',1,'Argus::ISourceSettings::getAperturePosition()']]], + ['getaperturepositionrange',['getAperturePositionRange',['../classArgus_1_1ICameraProperties.html#a9cd98c451472926db4ac380b576c1aed',1,'Argus::ICameraProperties']]], + ['getaperturepositions',['getAperturePositions',['../classArgus_1_1ICameraProperties.html#a847d6f9679c6782ec8e8beba11e5b88e',1,'Argus::ICameraProperties']]], + ['getautocontrolsettings',['getAutoControlSettings',['../classArgus_1_1IRequest.html#a9d507e495cddb7545d406c4fec889695',1,'Argus::IRequest']]], + ['getavailableaperturefnumbers',['getAvailableApertureFNumbers',['../classArgus_1_1ICameraProperties.html#a423bb6659227e30ae4dec272e71ee403',1,'Argus::ICameraProperties']]], + ['getavailableeventtypes',['getAvailableEventTypes',['../classArgus_1_1IEventProvider.html#af38efc609dd89a838aef0be14f12d02e',1,'Argus::IEventProvider']]], + ['getaverages',['getAverages',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#aa46eec481fa2eeef8f497cab9bb1bcb3',1,'Argus::Ext::IBayerAverageMap']]], + ['getawbcct',['getAwbCct',['../classArgus_1_1ICaptureMetadata.html#a1dcf35b95160f8f636815fa0ff6da133',1,'Argus::ICaptureMetadata']]], + ['getawbgains',['getAwbGains',['../classArgus_1_1ICaptureMetadata.html#ac51f2a51d57de9f5e0319e2320e681ce',1,'Argus::ICaptureMetadata']]], + ['getawblock',['getAwbLock',['../classArgus_1_1IAutoControlSettings.html#a54bb7a31c80a75e1c6571be1f56e7787',1,'Argus::IAutoControlSettings']]], + ['getawbmode',['getAwbMode',['../classArgus_1_1ICaptureMetadata.html#a57895228042b144ba7bbea6319f7ea6c',1,'Argus::ICaptureMetadata::getAwbMode()'],['../classArgus_1_1IAutoControlSettings.html#ad739ff8af431390046a48722aa9ff7c3',1,'Argus::IAutoControlSettings::getAwbMode()']]], + ['getawbregions',['getAwbRegions',['../classArgus_1_1ICaptureMetadata.html#ad6546ade71adb7546533c2451d730f94',1,'Argus::ICaptureMetadata::getAwbRegions()'],['../classArgus_1_1IAutoControlSettings.html#a5a8f0f5c88879b23220dffc00ce86981',1,'Argus::IAutoControlSettings::getAwbRegions()']]], + ['getawbstate',['getAwbState',['../classArgus_1_1ICaptureMetadata.html#a62bdff18264fe2f6b200a630c98dc095',1,'Argus::ICaptureMetadata']]], + ['getawbwbestimate',['getAwbWbEstimate',['../classArgus_1_1ICaptureMetadata.html#afcfc8ac7a6d7ccd31b5277c45b8a1665',1,'Argus::ICaptureMetadata']]], + ['getbasicsensormodes',['getBasicSensorModes',['../classArgus_1_1ICameraProperties.html#ab485a075d86ace425b0a5372910b2c21',1,'Argus::ICameraProperties']]], + ['getbayeraveragemapenable',['getBayerAverageMapEnable',['../classArgus_1_1Ext_1_1IBayerAverageMapSettings.html#a0a4e8c05b58466bc4b5df96ff847044f',1,'Argus::Ext::IBayerAverageMapSettings']]], + ['getbayerhistogram',['getBayerHistogram',['../classArgus_1_1ICaptureMetadata.html#a2f81472b69ef2e2b1d0572cd521dab04',1,'Argus::ICaptureMetadata']]], + ['getbayerhistogramregion',['getBayerHistogramRegion',['../classArgus_1_1ICaptureMetadata.html#a293ec437308832511af56628a0f31805',1,'Argus::ICaptureMetadata::getBayerHistogramRegion()'],['../classArgus_1_1IAutoControlSettings.html#a0949075a8f46cee9dd84e1ec00f37e23',1,'Argus::IAutoControlSettings::getBayerHistogramRegion()']]], + ['getbayerphase',['getBayerPhase',['../classArgus_1_1ISensorMode.html#aeb37c9caa9c69ac8df524afb0ef9bdc1',1,'Argus::ISensorMode']]], + ['getbayersharpnessmapenable',['getBayerSharpnessMapEnable',['../classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html#ae3712057fe83dc2d2c619dabd2e46b19',1,'Argus::Ext::IBayerSharpnessMapSettings']]], + ['getbincount',['getBinCount',['../classArgus_1_1IBayerHistogram.html#af25acd8ae2b6320801343bdd6d239b9f',1,'Argus::IBayerHistogram::getBinCount()'],['../classArgus_1_1IRGBHistogram.html#acd569b4aacd4852a79a3c9f686270242',1,'Argus::IRGBHistogram::getBinCount()'],['../classArgus_1_1Ext_1_1IBayerAverageMap.html#a5115cae571ba9ae4615e47e2a84cecf6',1,'Argus::Ext::IBayerAverageMap::getBinCount()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#a857a09eccf5b7a79a1994e18e2c17cbb',1,'Argus::Ext::IBayerSharpnessMap::getBinCount()']]], + ['getbininterval',['getBinInterval',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#a8de14405e92ee3965825303fb73aae42',1,'Argus::Ext::IBayerAverageMap::getBinInterval()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#aae470d2f210c57b3b5927af2b234dd76',1,'Argus::Ext::IBayerSharpnessMap::getBinInterval()']]], + ['getbinningfactor',['getBinningFactor',['../classArgus_1_1ISensorMode.html#aef710a67fae8ef741da093adac84b727',1,'Argus::ISensorMode']]], + ['getbinsize',['getBinSize',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#a914049af3406294aaa83e73bed8fa0b3',1,'Argus::Ext::IBayerAverageMap::getBinSize()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#a5ff8828d18a95d48f839621f57b57665',1,'Argus::Ext::IBayerSharpnessMap::getBinSize()']]], + ['getbinstart',['getBinStart',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#af53cd6457aff366bd580c93f0296e2c4',1,'Argus::Ext::IBayerAverageMap::getBinStart()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#a0fd9503bf8eaa0f7a02c481507b5a6c0',1,'Argus::Ext::IBayerSharpnessMap::getBinStart()']]], + ['getbuffertype',['getBufferType',['../classArgus_1_1IBufferOutputStreamSettings.html#a0c723df4a2b2aabd993a331c32966aa8',1,'Argus::IBufferOutputStreamSettings::getBufferType()'],['../classArgus_1_1IBufferOutputStream.html#a8a4e87b7fe074a3604e50b8e53e95240',1,'Argus::IBufferOutputStream::getBufferType()'],['../classArgus_1_1IBuffer.html#ae95a436e83d498c7ce1ac7931653da11',1,'Argus::IBuffer::getBufferType()']]], + ['getcameradevice',['getCameraDevice',['../classArgus_1_1IOutputStreamSettings.html#aed4ac71a14aa0d97a61db34dbd28323a',1,'Argus::IOutputStreamSettings']]], + ['getcameradevices',['getCameraDevices',['../classArgus_1_1ICameraProvider.html#a7f63838a3f19a97e47a77a3bcb833fd6',1,'Argus::ICameraProvider']]], + ['getcaptureid',['getCaptureId',['../classArgus_1_1ICaptureMetadata.html#a4d9a04079b2060c0bdcd23f8969bcdc8',1,'Argus::ICaptureMetadata::getCaptureId()'],['../classArgus_1_1IEvent.html#a02d9c260f5d322cdf47eb303b3e65a89',1,'Argus::IEvent::getCaptureId()']]], + ['getclientdata',['getClientData',['../classArgus_1_1IBuffer.html#a767bd72bab79a4347f32c7a034f57bdb',1,'Argus::IBuffer::getClientData()'],['../classArgus_1_1ICaptureMetadata.html#a84ba48ca390cf19e816c0f5c3b5b143c',1,'Argus::ICaptureMetadata::getClientData()'],['../classArgus_1_1IRequest.html#a3bc9907a6109167e1bc65c157c57b6b9',1,'Argus::IRequest::getClientData()']]], + ['getclientmetadatabufferenable',['getClientMetadataBufferEnable',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html#a58780cf881ed140adaf8d6217dd9716b',1,'Argus::Ext::ISensorPrivateMetadataClientBufferRequest']]], + ['getclipcounts',['getClipCounts',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#a57c975266b4a2936bca6020db7b65301',1,'Argus::Ext::IBayerAverageMap']]], + ['getcolorcorrectionmatrix',['getColorCorrectionMatrix',['../classArgus_1_1ICaptureMetadata.html#ab6cdd7d5b1b700cedf26c4ab3ea78673',1,'Argus::ICaptureMetadata::getColorCorrectionMatrix()'],['../classArgus_1_1IAutoControlSettings.html#ae42dc1f98a706ea58e01947123067033',1,'Argus::IAutoControlSettings::getColorCorrectionMatrix()']]], + ['getcolorcorrectionmatrixenable',['getColorCorrectionMatrixEnable',['../classArgus_1_1ICaptureMetadata.html#a0502f76cd91c797644aea3cc23b42fd0',1,'Argus::ICaptureMetadata::getColorCorrectionMatrixEnable()'],['../classArgus_1_1IAutoControlSettings.html#a2880815ed38d23f5027c72b9ac93f2b8',1,'Argus::IAutoControlSettings::getColorCorrectionMatrixEnable()']]], + ['getcolorcorrectionmatrixsize',['getColorCorrectionMatrixSize',['../classArgus_1_1IAutoControlSettings.html#a2ea37ac7491888cb1fecf4b08d459083',1,'Argus::IAutoControlSettings']]], + ['getcolorsaturation',['getColorSaturation',['../classArgus_1_1ICaptureMetadata.html#aaf0a31203cf7ce8b6085ba2ce51cb09d',1,'Argus::ICaptureMetadata::getColorSaturation()'],['../classArgus_1_1IAutoControlSettings.html#a96598a88504668ea2e7a2ab9b45c33d8',1,'Argus::IAutoControlSettings::getColorSaturation()']]], + ['getcolorsaturationbias',['getColorSaturationBias',['../classArgus_1_1IAutoControlSettings.html#af2433b421f9534000f6813758fd974db',1,'Argus::IAutoControlSettings']]], + ['getcolorsaturationenable',['getColorSaturationEnable',['../classArgus_1_1IAutoControlSettings.html#aee82acb3f900fb4829bf377bd8bb8410',1,'Argus::IAutoControlSettings']]], + ['getconfidence',['getConfidence',['../classArgus_1_1Ext_1_1IFaceDetectResult.html#ae3a74ab8e63fbe0449f2b4a9726d9b1b',1,'Argus::Ext::IFaceDetectResult']]], + ['getcontrolpointcount',['getControlPointCount',['../classArgus_1_1Ext_1_1IPwlWdrSensorMode.html#a6e60adf988f519e381f3efbc63cfcce7',1,'Argus::Ext::IPwlWdrSensorMode']]], + ['getcontrolpoints',['getControlPoints',['../classArgus_1_1Ext_1_1IPwlWdrSensorMode.html#ae3bac9332fc586b6f03c31b799f3d707',1,'Argus::Ext::IPwlWdrSensorMode']]], + ['getcrop',['getCrop',['../classArgus_1_1ISensorMode.html#a0cf2a04164f05fb62a66c89e15238db2',1,'Argus::ISensorMode']]], + ['getdefogamount',['getDeFogAmount',['../classArgus_1_1Ext_1_1IDeFogSettings.html#a5e9b775314872ae4f80b1cc4501fab09',1,'Argus::Ext::IDeFogSettings']]], + ['getdefogenable',['getDeFogEnable',['../classArgus_1_1Ext_1_1IDeFogSettings.html#a22c549cba657523aeb1280fa19548c9d',1,'Argus::Ext::IDeFogSettings']]], + ['getdefogquality',['getDeFogQuality',['../classArgus_1_1Ext_1_1IDeFogSettings.html#a1deedf48baad18dfd64a88cb29429f8a',1,'Argus::Ext::IDeFogSettings']]], + ['getdenoisemode',['getDenoiseMode',['../classArgus_1_1IDenoiseMetadata.html#ad35ce53392cbb81d0508d64dcd669be1',1,'Argus::IDenoiseMetadata::getDenoiseMode()'],['../classArgus_1_1IDenoiseSettings.html#a54d567615841e8b277c0a2416bd329ea',1,'Argus::IDenoiseSettings::getDenoiseMode()']]], + ['getdenoisestrength',['getDenoiseStrength',['../classArgus_1_1IDenoiseMetadata.html#a5e1c3d84df8f08c8a216f65bf13165f1',1,'Argus::IDenoiseMetadata::getDenoiseStrength()'],['../classArgus_1_1IDenoiseSettings.html#a8d0f2f4d8bdf0991fe7f21c118f85c07',1,'Argus::IDenoiseSettings::getDenoiseStrength()']]], + ['getedgeenhancemode',['getEdgeEnhanceMode',['../classArgus_1_1IEdgeEnhanceMetadata.html#a23f59b915b7b8de00289d9c07b6fc2aa',1,'Argus::IEdgeEnhanceMetadata::getEdgeEnhanceMode()'],['../classArgus_1_1IEdgeEnhanceSettings.html#adbda0b29310a8b62f7f47bad811dba4d',1,'Argus::IEdgeEnhanceSettings::getEdgeEnhanceMode()']]], + ['getedgeenhancestrength',['getEdgeEnhanceStrength',['../classArgus_1_1IEdgeEnhanceMetadata.html#af82fb71ffd6c8b484c0b13917c7eb595',1,'Argus::IEdgeEnhanceMetadata::getEdgeEnhanceStrength()'],['../classArgus_1_1IEdgeEnhanceSettings.html#a82f3b4630bc4bcb2b35b85de24b4cc44',1,'Argus::IEdgeEnhanceSettings::getEdgeEnhanceStrength()']]], + ['getegldisplay',['getEGLDisplay',['../classArgus_1_1IEGLImageBufferSettings.html#ad0349c5881acc9445492ecacbc66202c',1,'Argus::IEGLImageBufferSettings::getEGLDisplay()'],['../classArgus_1_1IEGLImageBuffer.html#a5dac39c31791614e76c3d180cb488f05',1,'Argus::IEGLImageBuffer::getEGLDisplay()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a9876344f5ce237183146222485d56fd0',1,'Argus::IEGLOutputStreamSettings::getEGLDisplay()'],['../classArgus_1_1IEGLOutputStream.html#a649c208a3f42c70a325ef67335e79811',1,'Argus::IEGLOutputStream::getEGLDisplay()']]], + ['geteglimage',['getEGLImage',['../classArgus_1_1IEGLImageBufferSettings.html#a6b15630f79c3fa4f69d438368f9e767e',1,'Argus::IEGLImageBufferSettings::getEGLImage()'],['../classArgus_1_1IEGLImageBuffer.html#a4a8324d3c0f52f6ab6a691b01eecd3ba',1,'Argus::IEGLImageBuffer::getEGLImage()']]], + ['geteglstream',['getEGLStream',['../classArgus_1_1IEGLOutputStream.html#ae4f844fbd5403903e2f44fc7e7a99dd4',1,'Argus::IEGLOutputStream']]], + ['getenableispstage',['getEnableIspStage',['../classArgus_1_1IRequest.html#ac6c0dcb6c1760c64b5af5006eca0f8c5',1,'Argus::IRequest']]], + ['getevent',['getEvent',['../classArgus_1_1IEventQueue.html#a118c2b07a47740267925f4aa2dff640a',1,'Argus::IEventQueue']]], + ['geteventtype',['getEventType',['../classArgus_1_1IEvent.html#a4379af7f983acef26b7241f47e54b308',1,'Argus::IEvent']]], + ['geteventtypes',['getEventTypes',['../classArgus_1_1IEventQueue.html#a2460960a1e826e556125455d2a1e84a6',1,'Argus::IEventQueue']]], + ['getexposurecompensation',['getExposureCompensation',['../classArgus_1_1IAutoControlSettings.html#a0de8a80e016759234a4c110cd686bf7e',1,'Argus::IAutoControlSettings']]], + ['getexposurecompensationrange',['getExposureCompensationRange',['../classArgus_1_1ICameraProperties.html#a2ae73495b253bf7150ed6006ca113e9e',1,'Argus::ICameraProperties']]], + ['getexposurecount',['getExposureCount',['../classArgus_1_1IEGLOutputStreamSettings.html#a83857ede3837cff3e90c5bbd95588fb3',1,'Argus::IEGLOutputStreamSettings::getExposureCount()'],['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#aa963acd3129ebd78950a531dea2133d2',1,'Argus::Ext::IDolWdrSensorMode::getExposureCount()']]], + ['getexposuretimerange',['getExposureTimeRange',['../classArgus_1_1ISensorMode.html#a2b8b2f9aa1fab2217a7afa651ba902d0',1,'Argus::ISensorMode::getExposureTimeRange()'],['../classArgus_1_1ISourceSettings.html#aabdb1b6d5d271bb07122cc8b156de3e5',1,'Argus::ISourceSettings::getExposureTimeRange()']]], + ['getfacedetectenable',['getFaceDetectEnable',['../classArgus_1_1Ext_1_1IFaceDetectSettings.html#a27d11316ead281c727c7acd39441d008',1,'Argus::Ext::IFaceDetectSettings']]], + ['getfacedetectresults',['getFaceDetectResults',['../classArgus_1_1Ext_1_1IFaceDetectMetadata.html#a3d0da4295217fd2bf526ca86f9c9a9df',1,'Argus::Ext::IFaceDetectMetadata']]], + ['getfifolength',['getFifoLength',['../classArgus_1_1IEGLOutputStreamSettings.html#a424435e7de2180a0d53581993115fc01',1,'Argus::IEGLOutputStreamSettings']]], + ['getfisheyemappingtype',['getFisheyeMappingType',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#abba314769f933be1de3b2b85c05c66de',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getflickerstate',['getFlickerState',['../classArgus_1_1ICaptureMetadata.html#a129a230589b06db7a4ccb4e76cfc6771',1,'Argus::ICaptureMetadata']]], + ['getfocallength',['getFocalLength',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#aa0bf8d650782461dfbc596d14f5b10e7',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getfocuserposition',['getFocuserPosition',['../classArgus_1_1ICaptureMetadata.html#aabc2a04cf17cd231fe41f925c1bf905c',1,'Argus::ICaptureMetadata']]], + ['getfocusposition',['getFocusPosition',['../classArgus_1_1ISourceSettings.html#a2cdd0d750bba5848cec6c6cdb44b6b6f',1,'Argus::ISourceSettings']]], + ['getfocuspositionrange',['getFocusPositionRange',['../classArgus_1_1ICameraProperties.html#a905673cc0e0c9229fd6b48d4e33d7726',1,'Argus::ICameraProperties']]], + ['getframeduration',['getFrameDuration',['../classArgus_1_1ICaptureMetadata.html#ae56b617b3416599dae93145dda3792c5',1,'Argus::ICaptureMetadata']]], + ['getframedurationrange',['getFrameDurationRange',['../classArgus_1_1ISensorMode.html#a1c0962fe8bd2c5a562e799766e7f5d75',1,'Argus::ISensorMode::getFrameDurationRange()'],['../classArgus_1_1ISourceSettings.html#a6cbc2fe946e1f77f48c6d9f3df184c99',1,'Argus::ISourceSettings::getFrameDurationRange()']]], + ['getframereadouttime',['getFrameReadoutTime',['../classArgus_1_1ICaptureMetadata.html#a9d94662b7537f8c12554da01be4fb2a2',1,'Argus::ICaptureMetadata']]], + ['getgainrange',['getGainRange',['../classArgus_1_1ISourceSettings.html#a41c3135c4a5e43d37ac58e0983df9ad7',1,'Argus::ISourceSettings']]], + ['getgravityacc',['getGravityAcc',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a64336a87df5cb9a401057331e8ac4748',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['gethdrratiorange',['getHdrRatioRange',['../classArgus_1_1ISensorMode.html#ae0dcfe692f52c2059f9bafd588ab0a0c',1,'Argus::ISensorMode']]], + ['gethistogram',['getHistogram',['../classArgus_1_1IBayerHistogram.html#a2d9f63683adf9957dc3cebe351b974eb',1,'Argus::IBayerHistogram::getHistogram()'],['../classArgus_1_1IRGBHistogram.html#a3cfc447d9f7a1e84a945ec05b820b9fd',1,'Argus::IRGBHistogram::getHistogram()']]], + ['gethistogrambinvalues',['getHistogramBinValues',['../classArgus_1_1Ext_1_1INonLinearHistogram.html#ab8f03c971ede4fd6047563030991a532',1,'Argus::Ext::INonLinearHistogram']]], + ['getimagesizeinpixels',['getImageSizeInPixels',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a1113fcbd1a1697fc0e43dbfebd5914b9',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getimurotationparams',['getImuRotationParams',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#aa86b7fbb79b1b9a0e7f2cf568f2f8ba1',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getimutranslationparams',['getImuTranslationParams',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#aa6613e40858030fa752362969bb2f532',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getinputbitdepth',['getInputBitDepth',['../classArgus_1_1ISensorMode.html#a3df17c3f6e992a4f1bd24474da74ea0e',1,'Argus::ISensorMode']]], + ['getinterface',['getInterface',['../classArgus_1_1InterfaceProvider.html#a63917032ebe375098e45a673e5ae818a',1,'Argus::InterfaceProvider']]], + ['getinternalframecount',['getInternalFrameCount',['../classArgus_1_1Ext_1_1IInternalFrameCount.html#a7ff02d93895277658df8847f3120f73b',1,'Argus::Ext::IInternalFrameCount']]], + ['getispdigitalgain',['getIspDigitalGain',['../classArgus_1_1ICaptureMetadata.html#a10381e1e830640e2fc373569ffe17213',1,'Argus::ICaptureMetadata']]], + ['getispdigitalgainrange',['getIspDigitalGainRange',['../classArgus_1_1ICameraProperties.html#aea5453e4036326b63ea795237a135632',1,'Argus::ICameraProperties::getIspDigitalGainRange()'],['../classArgus_1_1IAutoControlSettings.html#a6b494e039255bed4679d43fb527fc28b',1,'Argus::IAutoControlSettings::getIspDigitalGainRange()']]], + ['getleftmarginwidth',['getLeftMarginWidth',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#aea95477edf8e6a80153d80eb7b8eb6ef',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getlensdistortiontype',['getLensDistortionType',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#af2de75ddea8925ef06166c09862836d7',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getlinearaccbias',['getLinearAccBias',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#ad20d55146f0d0407d52e54aa2c192b50',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getlineinfomarkerwidth',['getLineInfoMarkerWidth',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#a65967d24769d3d18c89c2410ebd76887',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getmaxaeregions',['getMaxAeRegions',['../classArgus_1_1ICameraProperties.html#a372e6b264377c0ff6f29b399d8687137',1,'Argus::ICameraProperties']]], + ['getmaxafregions',['getMaxAfRegions',['../classArgus_1_1ICameraProperties.html#a943c24c6f359a47b4c12699588053888',1,'Argus::ICameraProperties']]], + ['getmaxawbregions',['getMaxAwbRegions',['../classArgus_1_1ICameraProperties.html#a2e89af6e134c60d6ca3bc0caecdfdf63',1,'Argus::ICameraProperties']]], + ['getmaxfacedetectresults',['getMaxFaceDetectResults',['../classArgus_1_1Ext_1_1IFaceDetectCaps.html#a7aa3df99ba453beede25807788a9aef5',1,'Argus::Ext::IFaceDetectCaps']]], + ['getmetadata',['getMetadata',['../classArgus_1_1IBuffer.html#a2ad43954937515a506206e3fcbe7228e',1,'Argus::IBuffer::getMetadata()'],['../classArgus_1_1IEventCaptureComplete.html#aa23f7bf7ab6dec11970cd75426983120',1,'Argus::IEventCaptureComplete::getMetadata()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadata.html#ad5d098a7f14f18794ec53d3594d452a3',1,'Argus::Ext::ISensorPrivateMetadata::getMetadata()']]], + ['getmetadataenable',['getMetadataEnable',['../classArgus_1_1IBufferOutputStreamSettings.html#abb691b696dc815cbf2ce7f0bf3f1e3c4',1,'Argus::IBufferOutputStreamSettings::getMetadataEnable()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a6a118ad0b9031e1ccfb1bb24f348aac7',1,'Argus::IEGLOutputStreamSettings::getMetadataEnable()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html#a19c2e13714b5e8bc36525a7947ec43d6',1,'Argus::Ext::ISensorPrivateMetadataRequest::getMetadataEnable()']]], + ['getmetadatasize',['getMetadataSize',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.html#aaa5da5cf3038cedc5e26a92670411875',1,'Argus::Ext::ISensorPrivateMetadataCaps::getMetadataSize()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadata.html#a4a7d4d4ab579b47364215ae20d285b99',1,'Argus::Ext::ISensorPrivateMetadata::getMetadataSize()']]], + ['getminaeregionsize',['getMinAeRegionSize',['../classArgus_1_1ICameraProperties.html#afecb637989600986bc09e7305a7b9295',1,'Argus::ICameraProperties']]], + ['getmode',['getMode',['../classArgus_1_1IEGLOutputStreamSettings.html#a999f2f7245681f2521d5b4cc7a1901c3',1,'Argus::IEGLOutputStreamSettings']]], + ['getmodelname',['getModelName',['../classArgus_1_1ICameraProperties.html#a0b732f76de9af87565d17e46a23fe525',1,'Argus::ICameraProperties']]], + ['getmodulestring',['getModuleString',['../classArgus_1_1ICameraProperties.html#ab1f686ecac31392ab7d4e8d9ae895326',1,'Argus::ICameraProperties']]], + ['getname',['getName',['../classArgus_1_1NamedUUID.html#ac4b955b92325de19ef969e1de4e2d416',1,'Argus::NamedUUID']]], + ['getnextevent',['getNextEvent',['../classArgus_1_1IEventQueue.html#ac3410fdb8b9d18d39243d93d4645f26c',1,'Argus::IEventQueue']]], + ['getopticalblack',['getOpticalBlack',['../classArgus_1_1ISourceSettings.html#a81341fd47703ea1f48104b0e8a0af1a6',1,'Argus::ISourceSettings']]], + ['getopticalblackenable',['getOpticalBlackEnable',['../classArgus_1_1ISourceSettings.html#a0a5e6f5cb6b542d92ff0cc06736097cc',1,'Argus::ISourceSettings']]], + ['getopticalblackrowcount',['getOpticalBlackRowCount',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#afdc67463b0a659537fda47b1a6cb6c33',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getoutputbitdepth',['getOutputBitDepth',['../classArgus_1_1ISensorMode.html#abfb8ec340a93413809c6554a307ddde9',1,'Argus::ISensorMode']]], + ['getoutputstreams',['getOutputStreams',['../classArgus_1_1IRequest.html#a76357f02804e1a067c7f0496af9ffa78',1,'Argus::IRequest']]], + ['getphysicalresolution',['getPhysicalResolution',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#ae01072cebfa5b1c8ab86597e5d461e4f',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getpixelformat',['getPixelFormat',['../classArgus_1_1IEGLOutputStreamSettings.html#ae2ce3d388474993ab8aa31c2c44e04ec',1,'Argus::IEGLOutputStreamSettings::getPixelFormat()'],['../classArgus_1_1IEGLOutputStream.html#a3faf06ac487115f1be960fa1699a0aa9',1,'Argus::IEGLOutputStream::getPixelFormat()']]], + ['getpostprocessingenable',['getPostProcessingEnable',['../classArgus_1_1IStreamSettings.html#a77d1750bc5a1cfb7c7ec961f21ccef09',1,'Argus::IStreamSettings']]], + ['getprincipalpoint',['getPrincipalPoint',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#ac9454b20211b4880368990e86fc49011',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getradialcoeffs',['getRadialCoeffs',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#ad44a62d4736942172df28c21aba0484f',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getradialcoeffscount',['getRadialCoeffsCount',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#aedfce890d6c0f66d5d655cfb5f1c0053',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getrect',['getRect',['../classArgus_1_1Ext_1_1IFaceDetectResult.html#a670c55f9eae01fefd70cb256af2a4840',1,'Argus::Ext::IFaceDetectResult']]], + ['getresolution',['getResolution',['../classArgus_1_1ISensorMode.html#a07c3812c182fe139ef9b6a60804be398',1,'Argus::ISensorMode::getResolution()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a41c5a764536e61c7244c9877449a1e71',1,'Argus::IEGLOutputStreamSettings::getResolution()'],['../classArgus_1_1IEGLOutputStream.html#a4e572f8ba40483c833ec9c2e6ba71870',1,'Argus::IEGLOutputStream::getResolution()']]], + ['getrgbhistogram',['getRGBHistogram',['../classArgus_1_1ICaptureMetadata.html#a776256477536913b9d07759e170a4f50',1,'Argus::ICaptureMetadata']]], + ['getrightmarginwidth',['getRightMarginWidth',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#af3ab857774893a1ac66f13cf0310c93e',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getrotationparams',['getRotationParams',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a85b353befaef6a9fed831c76d3c11499',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getscenelux',['getSceneLux',['../classArgus_1_1ICaptureMetadata.html#a633017c0368156c00b99fcf45f81752c',1,'Argus::ICaptureMetadata']]], + ['getsensoranaloggain',['getSensorAnalogGain',['../classArgus_1_1ICaptureMetadata.html#af42d6b1c3a5cb94bd5ed444e06e5fb40',1,'Argus::ICaptureMetadata']]], + ['getsensoreepromdata',['getSensorEepromData',['../classArgus_1_1Ext_1_1ISensorEepromData.html#a285cb6e88f1dacae07895e839f8de6db',1,'Argus::Ext::ISensorEepromData']]], + ['getsensoreepromdatasize',['getSensorEepromDataSize',['../classArgus_1_1Ext_1_1ISensorEepromData.html#a52bb24f48c0977574c72ddcd7bf47a43',1,'Argus::Ext::ISensorEepromData']]], + ['getsensoreoftimestamptsc',['getSensorEofTimestampTsc',['../classArgus_1_1Ext_1_1ISensorTimestampTsc.html#a6bc7b6c60a86037d6a83536057d5c346',1,'Argus::Ext::ISensorTimestampTsc']]], + ['getsensorexposuretime',['getSensorExposureTime',['../classArgus_1_1ICaptureMetadata.html#a0bff976e9d1dfd965145e5c18f91fbb0',1,'Argus::ICaptureMetadata']]], + ['getsensormode',['getSensorMode',['../classArgus_1_1ISourceSettings.html#a2fb8a20e2e089ba358f4add0f5061924',1,'Argus::ISourceSettings']]], + ['getsensormodetype',['getSensorModeType',['../classArgus_1_1ISensorMode.html#ac1384dca87b03da766bdd6920847b8b6',1,'Argus::ISensorMode']]], + ['getsensorotpdata',['getSensorOtpData',['../classArgus_1_1Ext_1_1ISensorOtpData.html#a1e8afcb90ea7c8725b795b40551be761',1,'Argus::Ext::ISensorOtpData']]], + ['getsensorotpdatasize',['getSensorOtpDataSize',['../classArgus_1_1Ext_1_1ISensorOtpData.html#aa204a965890606d0a335d3e1d39a6dcb',1,'Argus::Ext::ISensorOtpData']]], + ['getsensorplacement',['getSensorPlacement',['../classArgus_1_1ICameraProperties.html#aced19b2fb5048198f53e6ae993eff008',1,'Argus::ICameraProperties']]], + ['getsensorsensitivity',['getSensorSensitivity',['../classArgus_1_1ICaptureMetadata.html#ab301501f415adfe2c1c69a87d39d9012',1,'Argus::ICaptureMetadata']]], + ['getsensorsoftimestamptsc',['getSensorSofTimestampTsc',['../classArgus_1_1Ext_1_1ISensorTimestampTsc.html#ac6f2ccee516561329ee9aef39ad3d6d1',1,'Argus::Ext::ISensorTimestampTsc']]], + ['getsensortimestamp',['getSensorTimestamp',['../classArgus_1_1ICaptureMetadata.html#ae4ff79489b0aef6766742a61d1a17cfc',1,'Argus::ICaptureMetadata']]], + ['getsharpnessscore',['getSharpnessScore',['../classArgus_1_1ICaptureMetadata.html#a61f732ae03d05a82b945a845b8862473',1,'Argus::ICaptureMetadata']]], + ['getsharpnessvalues',['getSharpnessValues',['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#adf6bf6562f95fcf538b9324471cd722e',1,'Argus::Ext::IBayerSharpnessMap']]], + ['getsize',['getSize',['../classArgus_1_1IEventQueue.html#ac3d00adb91d653dc9b1d3a60ce6b978e',1,'Argus::IEventQueue']]], + ['getskew',['getSkew',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#adf8cc6858060e1b213dccb073b203c3d',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getsourcecliprect',['getSourceClipRect',['../classArgus_1_1IStreamCaptureMetadata.html#a23a81e22a569df320c30183236e59602',1,'Argus::IStreamCaptureMetadata::getSourceClipRect()'],['../classArgus_1_1IStreamSettings.html#af62fc7ceaebb8be1cce415c83c213f03',1,'Argus::IStreamSettings::getSourceClipRect()']]], + ['getsourcesettings',['getSourceSettings',['../classArgus_1_1IRequest.html#ae1cda43ecffe49f5bd7688302c8c973d',1,'Argus::IRequest']]], + ['getstatus',['getStatus',['../classArgus_1_1IEventError.html#a693a4a9eccbe625ef1db5a25de4c76fb',1,'Argus::IEventError::getStatus()'],['../classArgus_1_1IEventCaptureComplete.html#aa0d532e250496e1e929a213afe7aeb70',1,'Argus::IEventCaptureComplete::getStatus()']]], + ['getstreammetadata',['getStreamMetadata',['../classArgus_1_1ICaptureMetadata.html#a6a29343fc48af79064fab6d5e390cce0',1,'Argus::ICaptureMetadata']]], + ['getstreamsettings',['getStreamSettings',['../classArgus_1_1IRequest.html#aae9e0f4a0f5d1d0bc4e7a657f24def41',1,'Argus::IRequest']]], + ['getsyncsensormoduleid',['getSyncSensorModuleId',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a8237d1f95c41bfc1c8b8b5b14460a821',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getsynctype',['getSyncType',['../classArgus_1_1IBufferOutputStreamSettings.html#a03dcea2162f099cda3b2a59c33ef8db2',1,'Argus::IBufferOutputStreamSettings::getSyncType()'],['../classArgus_1_1IBufferOutputStream.html#add4dafbd5b20400039a432c0c16fbdab',1,'Argus::IBufferOutputStream::getSyncType()'],['../classArgus_1_1IBuffer.html#ad7c08f7f67f07f3a7de16b4248a9992c',1,'Argus::IBuffer::getSyncType()']]], + ['gettangentialcoeffs',['getTangentialCoeffs',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a33b0b2255dd7963814ac1b6dfa36c6e7',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['gettangentialcoeffscount',['getTangentialCoeffsCount',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a15ba9ab34ad664c01b8b2f70e08b706a',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['gettime',['getTime',['../classArgus_1_1IEvent.html#a6ead1c7618a5679a9d19d766126ca3d9',1,'Argus::IEvent']]], + ['gettonemapcurve',['getToneMapCurve',['../classArgus_1_1ICaptureMetadata.html#a99b0918ad354b228b3202f4351a11d6a',1,'Argus::ICaptureMetadata::getToneMapCurve()'],['../classArgus_1_1IAutoControlSettings.html#a8bb8c7f22a54d01a325435df3a79ce57',1,'Argus::IAutoControlSettings::getToneMapCurve()']]], + ['gettonemapcurveenable',['getToneMapCurveEnable',['../classArgus_1_1IAutoControlSettings.html#ab5b6e206509f251ce7d5cd058d110b5c',1,'Argus::IAutoControlSettings']]], + ['gettonemapcurveenabled',['getToneMapCurveEnabled',['../classArgus_1_1ICaptureMetadata.html#aa42e458304f64dd30d9ce8b686286b5f',1,'Argus::ICaptureMetadata']]], + ['gettonemapcurvesize',['getToneMapCurveSize',['../classArgus_1_1IAutoControlSettings.html#ac813eee05838049acf97b1c23927573d',1,'Argus::IAutoControlSettings']]], + ['gettranslationparams',['getTranslationParams',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#aa8c0ef8a26358de0e2155ade57004c1d',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['getuuid',['getUUID',['../classArgus_1_1ICameraProperties.html#acc03568c65948948525a19c8fefea785',1,'Argus::ICameraProperties']]], + ['getvendor',['getVendor',['../classArgus_1_1ICameraProvider.html#a7027c9a594e9c5a93d29b4717d21b004',1,'Argus::ICameraProvider']]], + ['getversion',['getVersion',['../classArgus_1_1ICameraProvider.html#a3012922e1e188d2c74ef0fbe6bc1e663',1,'Argus::ICameraProvider']]], + ['getverticalblankperiodrowcount',['getVerticalBlankPeriodRowCount',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#ab095a49fd2f0b2a7b213bc2292b4b00b',1,'Argus::Ext::IDolWdrSensorMode']]], + ['getwbgains',['getWbGains',['../classArgus_1_1IAutoControlSettings.html#a444bde06c05f51441b27cc104c2978a6',1,'Argus::IAutoControlSettings']]], + ['getworkingrange',['getWorkingRange',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#ac1327cfca0f6e5c7abfff81ef04ab5aa',1,'Argus::Ext::IBayerAverageMap']]], + ['geven',['gEven',['../classArgus_1_1BayerTuple.html#ab793a9235eb65c86dc8a7c54301f8221',1,'Argus::BayerTuple::gEven()'],['../classArgus_1_1BayerTuple.html#a44641085e5c41d9b9df8fcba8c8e6069',1,'Argus::BayerTuple::gEven() const ']]], + ['godd',['gOdd',['../classArgus_1_1BayerTuple.html#a18b1d6c872f7bdfc8d5eab7ce44818c0',1,'Argus::BayerTuple::gOdd()'],['../classArgus_1_1BayerTuple.html#a2620eca95b0cf37a55fe04acfe5f82b9',1,'Argus::BayerTuple::gOdd() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_68.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_68.html new file mode 100644 index 0000000..66b85be --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_68.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_68.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_68.js new file mode 100644 index 0000000..63ce0c4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_68.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['height',['height',['../classArgus_1_1Size2D.html#a3310628cbf3765983b55c176914c3cb0',1,'Argus::Size2D::height()'],['../classArgus_1_1Size2D.html#a7c1245c85a78d0bdf9eb0be84a538c3a',1,'Argus::Size2D::height() const '],['../classArgus_1_1Rectangle.html#a20e462cdbdf495ce79beb62794049355',1,'Argus::Rectangle::height()']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_69.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_69.html new file mode 100644 index 0000000..e204197 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_69.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_69.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_69.js new file mode 100644 index 0000000..1d8d056 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_69.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['id',['id',['../classArgus_1_1IBufferOutputStreamSettings.html#a8743ff8e65cc4c21b098fabf38ade827',1,'Argus::IBufferOutputStreamSettings::id()'],['../classArgus_1_1IBufferOutputStream.html#a0317bd852f320c50c19ccd7eecd47ce1',1,'Argus::IBufferOutputStream::id()'],['../classArgus_1_1IBuffer.html#aab0e993dece314f2c8f7a837a251da64',1,'Argus::IBuffer::id()'],['../classArgus_1_1ICameraProperties.html#a39cac6824b6e2c3e5e7f66307c073995',1,'Argus::ICameraProperties::id()'],['../classArgus_1_1ISensorMode.html#a3e34f44c71cecef2249f4be9daa73f22',1,'Argus::ISensorMode::id()'],['../classArgus_1_1ICameraProvider.html#a77d41f6dc077fa98ff7a72215ab12a13',1,'Argus::ICameraProvider::id()'],['../classArgus_1_1IBayerHistogram.html#a4b532c3517e7674b97381e39b54e1470',1,'Argus::IBayerHistogram::id()'],['../classArgus_1_1IRGBHistogram.html#a4ae9c83ee71faaa158adf3d44edadefd',1,'Argus::IRGBHistogram::id()'],['../classArgus_1_1IStreamCaptureMetadata.html#a5e66389187fa1c61e37d537cb01fa32a',1,'Argus::IStreamCaptureMetadata::id()'],['../classArgus_1_1ICaptureMetadata.html#a58224c24f6e30da2fdefa0b8dcc6540c',1,'Argus::ICaptureMetadata::id()'],['../classArgus_1_1IDenoiseMetadata.html#af023e0cd90c9cbf7f3e19342c8230626',1,'Argus::IDenoiseMetadata::id()'],['../classArgus_1_1IEdgeEnhanceMetadata.html#af0af2ccc90e4df66a5cbb93f7f47e450',1,'Argus::IEdgeEnhanceMetadata::id()'],['../classArgus_1_1ICaptureSession.html#ac0b65ce5cbf34a96dfce31f93ba238b0',1,'Argus::ICaptureSession::id()'],['../classArgus_1_1IEGLImageBufferSettings.html#a88e64f62b51509828b4cf0cc1c4cd659',1,'Argus::IEGLImageBufferSettings::id()'],['../classArgus_1_1IEGLImageBuffer.html#a4f708348c9f7faf51f9f0b8043922b9e',1,'Argus::IEGLImageBuffer::id()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a0bb9593099b2cc1848883f20ac544552',1,'Argus::IEGLOutputStreamSettings::id()'],['../classArgus_1_1IEGLOutputStream.html#afaaee82ed7f3566ea19a35c2f62e9c84',1,'Argus::IEGLOutputStream::id()'],['../classArgus_1_1IEGLSync.html#a5bd06afd2feb573a35105b6f022e2e38',1,'Argus::IEGLSync::id()'],['../classArgus_1_1IEvent.html#a7547789827f85e25339bc2158b8d114d',1,'Argus::IEvent::id()'],['../classArgus_1_1IEventError.html#aae8cb52e1f66ae99bfde7fb080bd5c30',1,'Argus::IEventError::id()'],['../classArgus_1_1IEventCaptureComplete.html#a7114d3d6135df50ef9da0e0b587b8afd',1,'Argus::IEventCaptureComplete::id()'],['../classArgus_1_1IEventProvider.html#a7a20d0d3e719ee000443ea5c8503ceaa',1,'Argus::IEventProvider::id()'],['../classArgus_1_1IEventQueue.html#a4643369bf15d7893609f54c23f435de9',1,'Argus::IEventQueue::id()'],['../classArgus_1_1Ext_1_1IBayerAverageMapSettings.html#a096ebc7d424f3ef925f22df4755f7183',1,'Argus::Ext::IBayerAverageMapSettings::id()'],['../classArgus_1_1Ext_1_1IBayerAverageMap.html#a45045bc38cc6e9163dd1bda1e579026f',1,'Argus::Ext::IBayerAverageMap::id()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html#ae2ee78e747dfe0d31a6daac2ccc42ad5',1,'Argus::Ext::IBayerSharpnessMapSettings::id()'],['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#ad74b3a663d6b2b2e696b8164b5175f64',1,'Argus::Ext::IBayerSharpnessMap::id()'],['../classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html#a220e4a0df69dfa7a639d2c167c7e7bae',1,'Argus::Ext::IBlockingSessionCameraProvider::id()'],['../classArgus_1_1Ext_1_1IDebugCaptureSession.html#a526f29e629fc81f38e8fd7e8d405c713',1,'Argus::Ext::IDebugCaptureSession::id()'],['../classArgus_1_1Ext_1_1IDeFogSettings.html#a6c8e9ba7395190b5c0cd3f95c053f7a2',1,'Argus::Ext::IDeFogSettings::id()'],['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#a18266d68df02d7b68d7ad588f2e9a84b',1,'Argus::Ext::IDolWdrSensorMode::id()'],['../classArgus_1_1Ext_1_1IFaceDetectCaps.html#a790a850832087de03fa30a7f244c94eb',1,'Argus::Ext::IFaceDetectCaps::id()'],['../classArgus_1_1Ext_1_1IFaceDetectSettings.html#a97456d83f8388e92250685c0d575502a',1,'Argus::Ext::IFaceDetectSettings::id()'],['../classArgus_1_1Ext_1_1IFaceDetectMetadata.html#ac18aed9c05787490c890b634cbc28f00',1,'Argus::Ext::IFaceDetectMetadata::id()'],['../classArgus_1_1Ext_1_1IFaceDetectResult.html#a0b6b3e7d3c37875dda95e2c5a95d26de',1,'Argus::Ext::IFaceDetectResult::id()'],['../classArgus_1_1Ext_1_1IInternalFrameCount.html#a3c63a6522b05edc2f086c789038d6b8d',1,'Argus::Ext::IInternalFrameCount::id()'],['../classArgus_1_1Ext_1_1INonLinearHistogram.html#a9c00f8caca6bb990aa939b46dbb2a8e0',1,'Argus::Ext::INonLinearHistogram::id()'],['../classArgus_1_1Ext_1_1IPwlWdrSensorMode.html#a024607e6f3094e2a48eb65a3fe4b8238',1,'Argus::Ext::IPwlWdrSensorMode::id()'],['../classArgus_1_1Ext_1_1ISensorEepromData.html#a623032c2fc4882eedc6b51538fdd3b68',1,'Argus::Ext::ISensorEepromData::id()'],['../classArgus_1_1Ext_1_1ISensorOtpData.html#a9554160485d03509712182eb90c4718e',1,'Argus::Ext::ISensorOtpData::id()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.html#a39eae4e52c8b673d8d58dde59bc15aa2',1,'Argus::Ext::ISensorPrivateMetadataCaps::id()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html#a46c4ca4fb719812ec02ea542e4ccddb3',1,'Argus::Ext::ISensorPrivateMetadataRequest::id()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadata.html#aabf382e60097c4858ec8270cf410b543',1,'Argus::Ext::ISensorPrivateMetadata::id()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html#a4d45457bcc5fd3d0a1d95aa24b479814',1,'Argus::Ext::ISensorPrivateMetadataClientBufferRequest::id()'],['../classArgus_1_1Ext_1_1ISensorTimestampTsc.html#a6db4487603a843ee984cb3a356927ec2',1,'Argus::Ext::ISensorTimestampTsc::id()'],['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a9b8fcbfad95e28c0a4c76411285d90fa',1,'Argus::Ext::ISyncSensorCalibrationData::id()'],['../classArgus_1_1IRequest.html#af4bd7cfdde0f23567dc35b1d21afd8cc',1,'Argus::IRequest::id()'],['../classArgus_1_1ISourceSettings.html#a56574ec0031b366004f4920ef49427d3',1,'Argus::ISourceSettings::id()'],['../classArgus_1_1IAutoControlSettings.html#a61f7cfc50b2667eac0f5db0356fcc525',1,'Argus::IAutoControlSettings::id()'],['../classArgus_1_1IStreamSettings.html#a64399957baa4a690fcc23d579cb18fc4',1,'Argus::IStreamSettings::id()'],['../classArgus_1_1IDenoiseSettings.html#ab4e8f4a7129fda06fa50bce26a4a8bdc',1,'Argus::IDenoiseSettings::id()'],['../classArgus_1_1IEdgeEnhanceSettings.html#ae685378dee0ab54edec873ebb78b7510',1,'Argus::IEdgeEnhanceSettings::id()'],['../classArgus_1_1IOutputStreamSettings.html#a6eb0986de2222efeb1659872a042976f',1,'Argus::IOutputStreamSettings::id()']]], + ['interface',['Interface',['../classArgus_1_1Interface.html#a854506c99b87879c60e821c33aa65881',1,'Argus::Interface']]], + ['interface_5fcast',['interface_cast',['../namespaceArgus.html#a331c37645a2bf8b37aa9912b5408c683',1,'Argus::interface_cast(InterfaceProvider *obj)'],['../namespaceArgus.html#a8630747cc51ad50335f4a4a9dbebd7a4',1,'Argus::interface_cast(const InterfaceProvider *obj)'],['../namespaceArgus.html#a59fd0954abae19f59a0d1faf4d939644',1,'Argus::interface_cast(const UniqueObj< TObject > &obj)']]], + ['interfaceid',['InterfaceID',['../classArgus_1_1InterfaceID.html#ad4baf253c4980dc1f590122a15d0dc06',1,'Argus::InterfaceID::InterfaceID(uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)'],['../classArgus_1_1InterfaceID.html#a2d677545946d9adafa9cdfb293f97899',1,'Argus::InterfaceID::InterfaceID()']]], + ['isbufferformatsupported',['isBufferFormatSupported',['../classArgus_1_1ISensorMode.html#a9fa64d4919b04838c696e6835f6a7b11',1,'Argus::ISensorMode']]], + ['isimusensoravailable',['isImuSensorAvailable',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a6dddc72b76c11b5abcdca683efedb4e5',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['isrepeating',['isRepeating',['../classArgus_1_1ICaptureSession.html#a0742290dd27f4133c69994b098b458ea',1,'Argus::ICaptureSession']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6c.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6c.html new file mode 100644 index 0000000..da371cf --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6c.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6c.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6c.js new file mode 100644 index 0000000..716d300 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['left',['left',['../classArgus_1_1Rectangle.html#a9600eb42c6c30e2d9b51e13c932093d7',1,'Argus::Rectangle::left()'],['../classArgus_1_1Rectangle.html#a5ea98785e63ae43c2d4986ed11f68dac',1,'Argus::Rectangle::left() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6d.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6d.html new file mode 100644 index 0000000..d01ac53 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6d.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6d.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6d.js new file mode 100644 index 0000000..4621cfb --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['max',['max',['../classArgus_1_1Range.html#a8a858777c58bbaa6ae097d34872dc47e',1,'Argus::Range::max()'],['../classArgus_1_1Range.html#a6d4da216d1c8325ae5653e417a525f51',1,'Argus::Range::max() const ']]], + ['maxburstrequests',['maxBurstRequests',['../classArgus_1_1ICaptureSession.html#a38362740984f789d726973fa299f144d',1,'Argus::ICaptureSession']]], + ['min',['min',['../classArgus_1_1Range.html#a4a1f1b685b6ba32f158d1872cdc8bc4c',1,'Argus::Range::min()'],['../classArgus_1_1Range.html#abf0fd841953e3609718d61cba43f6de8',1,'Argus::Range::min() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6e.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6e.html new file mode 100644 index 0000000..d734dd0 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6e.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6e.js new file mode 100644 index 0000000..6b81cd0 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['nameduuid',['NamedUUID',['../classArgus_1_1NamedUUID.html#a3279cd9db732ce6a3c22220dc3c82bfb',1,'Argus::NamedUUID::NamedUUID(uint32_t time_low_, uint16_t time_mid_, uint16_t time_hi_and_version_, uint16_t clock_seq_, uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5, const char *name)'],['../classArgus_1_1NamedUUID.html#a8a123a06ef2136fbb946b56935130d66',1,'Argus::NamedUUID::NamedUUID(const NamedUUID &copied)'],['../classArgus_1_1NamedUUID.html#af3b11599e47273125d7b1f5c795b33e5',1,'Argus::NamedUUID::NamedUUID()']]], + ['noncopyable',['NonCopyable',['../classArgus_1_1NonCopyable.html#a1aad733b06de586e1cee4c0aa8e8ff49',1,'Argus::NonCopyable::NonCopyable()'],['../classArgus_1_1NonCopyable.html#a52f76b8f0c765a71a51a492a9fa59d61',1,'Argus::NonCopyable::NonCopyable(NonCopyable &other)']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6f.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6f.html new file mode 100644 index 0000000..222f0f8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6f.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6f.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6f.js new file mode 100644 index 0000000..890de8b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_6f.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['operator_20bool',['operator bool',['../classArgus_1_1UniqueObj.html#ad46fcbcd7f12940960f9228245c24eea',1,'Argus::UniqueObj']]], + ['operator_20const_20rv_3c_20uniqueobj_20_3e_20_26',['operator const rv< UniqueObj > &',['../classArgus_1_1UniqueObj.html#ae419f21501c648e783c1a0fa5931b512',1,'Argus::UniqueObj']]], + ['operator_20rv_3c_20uniqueobj_20_3e_20_26',['operator rv< UniqueObj > &',['../classArgus_1_1UniqueObj.html#a360ce3fd61f7fc2fd8990a979d842e85',1,'Argus::UniqueObj']]], + ['operator_21_3d',['operator!=',['../classArgus_1_1Tuple.html#acd0565ce839204b78bf78f708277ddce',1,'Argus::Tuple::operator!=()'],['../classArgus_1_1NamedUUID.html#a6186228d1dd5d57975ad8f9542f7de73',1,'Argus::NamedUUID::operator!=()']]], + ['operator_28_29',['operator()',['../classArgus_1_1Array2D.html#abdf0358cf00c15c139203b03206a1342',1,'Argus::Array2D::operator()(uint32_t i) const '],['../classArgus_1_1Array2D.html#a7f6362eec6e786975a957643e2ebe30e',1,'Argus::Array2D::operator()(uint32_t x, uint32_t y) const '],['../classArgus_1_1Array2D.html#a0c7267ec95a13541cd06f9f8a1b0d015',1,'Argus::Array2D::operator()(const Point2D< uint32_t > &p) const '],['../classArgus_1_1Array2D.html#a61adf41f4abe3013958cb10eff98d2bd',1,'Argus::Array2D::operator()(uint32_t i)'],['../classArgus_1_1Array2D.html#ace5bc637ba1b5953ba8cfcb218a5203b',1,'Argus::Array2D::operator()(uint32_t x, uint32_t y)'],['../classArgus_1_1Array2D.html#a85faf3fedc11b96ceb8db46284af3988',1,'Argus::Array2D::operator()(const Point2D< uint32_t > &p)']]], + ['operator_2a',['operator*',['../classArgus_1_1UniqueObj.html#a4e589e1f59c606afca91c14241c7c1f1',1,'Argus::UniqueObj::operator*()'],['../classArgus_1_1Tuple.html#ac31e4cd27254d705eb8150bc693f5619',1,'Argus::Tuple::operator*()']]], + ['operator_2a_3d',['operator*=',['../classArgus_1_1Tuple.html#ab3414980ef376bd61f01625105a0e608',1,'Argus::Tuple']]], + ['operator_2b',['operator+',['../classArgus_1_1Tuple.html#a24aaec35d4ceed37709d4793820bc0e9',1,'Argus::Tuple']]], + ['operator_2b_3d',['operator+=',['../classArgus_1_1Tuple.html#aba4639c01c2055e888362aecc34f18ea',1,'Argus::Tuple']]], + ['operator_2d',['operator-',['../classArgus_1_1Tuple.html#a5211855f6671520c7c4d7b80b58d6f55',1,'Argus::Tuple']]], + ['operator_2d_3d',['operator-=',['../classArgus_1_1Tuple.html#a1f85d9dd1910f9b7644f649a1ad29231',1,'Argus::Tuple']]], + ['operator_2d_3e',['operator->',['../classArgus_1_1UniqueObj.html#a87b26e03b384eb8f85fe6fa5234585c4',1,'Argus::UniqueObj']]], + ['operator_2f',['operator/',['../classArgus_1_1Tuple.html#ac2a1729b29e7e8e575eff912326383ab',1,'Argus::Tuple']]], + ['operator_2f_3d',['operator/=',['../classArgus_1_1Tuple.html#a70ab9c8bf1bf927402e64b1eba167f4c',1,'Argus::Tuple']]], + ['operator_3c',['operator<',['../structArgus_1_1UUID.html#a19b92b424456b05553dc64dc2a89ce48',1,'Argus::UUID']]], + ['operator_3d',['operator=',['../classArgus_1_1NonCopyable.html#a52e60ff89540043c6b2c767bac4f4298',1,'Argus::NonCopyable::operator=()'],['../classArgus_1_1UniqueObj.html#a0b6258536e6ca5b31cba6bc21308c6cb',1,'Argus::UniqueObj::operator=()'],['../classArgus_1_1Array2D.html#a278d7b5e57301eb184434f09a6e86009',1,'Argus::Array2D::operator=()'],['../classArgus_1_1NamedUUID.html#ad07c8db536ab6fb71a342f5a9ef8b998',1,'Argus::NamedUUID::operator=()']]], + ['operator_3d_3d',['operator==',['../classArgus_1_1Tuple.html#a7177ad448d2c4216e8020310730b28eb',1,'Argus::Tuple::operator==()'],['../classArgus_1_1Array2D.html#adb16673e31e25f54bfce3aeefbd98e7e',1,'Argus::Array2D::operator==()'],['../structArgus_1_1UUID.html#a7b5ae80a47f121f315dd4df9a9b289f4',1,'Argus::UUID::operator==()'],['../classArgus_1_1NamedUUID.html#aca54b6c245998c2c43c2ad5cefeebf55',1,'Argus::NamedUUID::operator==()']]], + ['operator_5b_5d',['operator[]',['../classArgus_1_1Tuple.html#a298276ba3f2ab1676b779e7e8cd8070e',1,'Argus::Tuple::operator[](unsigned int i)'],['../classArgus_1_1Tuple.html#a947f862b6931f875f96e89701ef74429',1,'Argus::Tuple::operator[](unsigned int i) const '],['../classArgus_1_1Array2D.html#a555282c7a4bd79cfb29cc4d50839040e',1,'Argus::Array2D::operator[](unsigned int i)'],['../classArgus_1_1Array2D.html#a29fc7d76597d0b43abfbcc9c5c7b46cf',1,'Argus::Array2D::operator[](unsigned int i) const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_70.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_70.html new file mode 100644 index 0000000..c62125e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_70.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_70.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_70.js new file mode 100644 index 0000000..820d627 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_70.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['point2d',['Point2D',['../classArgus_1_1Point2D.html#a5ba4776c596405301f46bed64e91ee3f',1,'Argus::Point2D::Point2D()'],['../classArgus_1_1Point2D.html#a465c01f070b4caf2cec44453076d5a75',1,'Argus::Point2D::Point2D(const Tuple< COORDINATE_2D_COUNT, T > &other)'],['../classArgus_1_1Point2D.html#a92a6e1325d18c6434b49f933da04399e',1,'Argus::Point2D::Point2D(T init)'],['../classArgus_1_1Point2D.html#af48383fbba93701915820f9b68b35774',1,'Argus::Point2D::Point2D(T _x, T _y)']]], + ['point3d',['Point3D',['../classArgus_1_1Point3D.html#a47f3229204b06cd86737e994f60c1880',1,'Argus::Point3D::Point3D()'],['../classArgus_1_1Point3D.html#a4a1ba5c4f628036b3bbd6c2a4c28e50a',1,'Argus::Point3D::Point3D(const Tuple< COORDINATE_3D_COUNT, T > &other)'],['../classArgus_1_1Point3D.html#a93acb7eacd492d6ced173e4b87e42b25',1,'Argus::Point3D::Point3D(T init)'],['../classArgus_1_1Point3D.html#a6fab195b77bbdb9866beba826da42d09',1,'Argus::Point3D::Point3D(T _x, T _y, T _z)']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_72.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_72.html new file mode 100644 index 0000000..a4336f7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_72.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_72.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_72.js new file mode 100644 index 0000000..8379a30 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_72.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['r',['r',['../classArgus_1_1BayerTuple.html#a29754f59fb3a04b0b23944b36c10cff3',1,'Argus::BayerTuple::r()'],['../classArgus_1_1BayerTuple.html#a566ddd06c9760e3dd14b98f3516d4ae1',1,'Argus::BayerTuple::r() const '],['../classArgus_1_1RGBTuple.html#afcd7d2f419a385ef2bbc3d6c19d873dc',1,'Argus::RGBTuple::r()'],['../classArgus_1_1RGBTuple.html#a462c05c4a083c96ee2c8f7ed79ea0644',1,'Argus::RGBTuple::r() const ']]], + ['range',['Range',['../classArgus_1_1Range.html#a56e612f76e2106d9cc2764a80e1d2042',1,'Argus::Range::Range()'],['../classArgus_1_1Range.html#a41987c9bd953dc188cb46e057b5153b3',1,'Argus::Range::Range(const Tuple< 2, T > &other)'],['../classArgus_1_1Range.html#a3999092f7affc7f359829d3e939a14c3',1,'Argus::Range::Range(T init)'],['../classArgus_1_1Range.html#afae3e536c4dda53f7e86722decf25030',1,'Argus::Range::Range(T _min, T _max)']]], + ['rectangle',['Rectangle',['../classArgus_1_1Rectangle.html#adf2e0f359341d68ba4a00a53aa105cea',1,'Argus::Rectangle::Rectangle()'],['../classArgus_1_1Rectangle.html#a198a8e574ac7e52b5a34edcaa0163d0e',1,'Argus::Rectangle::Rectangle(const Tuple< 4, T > &other)'],['../classArgus_1_1Rectangle.html#af5787ac9e5609f52b2bbaf22de0f6cbd',1,'Argus::Rectangle::Rectangle(T init)'],['../classArgus_1_1Rectangle.html#ae9a655567c7f14cc0dbdfcf125e32431',1,'Argus::Rectangle::Rectangle(T _left, T _top, T _right, T _bottom)']]], + ['release',['release',['../classArgus_1_1UniqueObj.html#a6a16389a84396383e7398be6eed5ae07',1,'Argus::UniqueObj']]], + ['releasebuffer',['releaseBuffer',['../classArgus_1_1IBufferOutputStream.html#a30e1077668ddcf359eb2ff7c771d7aab',1,'Argus::IBufferOutputStream']]], + ['repeat',['repeat',['../classArgus_1_1ICaptureSession.html#a76f0c7a185351ddeb521e4d0f46b8ca2',1,'Argus::ICaptureSession']]], + ['repeatburst',['repeatBurst',['../classArgus_1_1ICaptureSession.html#aedf68af40770a5728c9a8572dba79da3',1,'Argus::ICaptureSession']]], + ['reset',['reset',['../classArgus_1_1UniqueObj.html#ae6cb4e063009b5128e9ae1d2ce946c52',1,'Argus::UniqueObj']]], + ['resize',['resize',['../classArgus_1_1Array2D.html#ae6166f6a5a3d6c48d93eec349b41b063',1,'Argus::Array2D']]], + ['rgbtuple',['RGBTuple',['../classArgus_1_1RGBTuple.html#a58018eb7737c918cb08f06cd53cb6e0f',1,'Argus::RGBTuple::RGBTuple()'],['../classArgus_1_1RGBTuple.html#afce945d9bb02ab48ed765317dad88e1d',1,'Argus::RGBTuple::RGBTuple(const Tuple< RGB_CHANNEL_COUNT, T > &other)'],['../classArgus_1_1RGBTuple.html#a65b588e522647e157fd1a140dc194659',1,'Argus::RGBTuple::RGBTuple(T init)'],['../classArgus_1_1RGBTuple.html#a1abb5a3f2b59c94db7b384c3815612d3',1,'Argus::RGBTuple::RGBTuple(T _r, T _g, T _b)']]], + ['right',['right',['../classArgus_1_1Rectangle.html#a9af576b44868a524ae6cd95df301488c',1,'Argus::Rectangle::right()'],['../classArgus_1_1Rectangle.html#a4e33e2a2dcd462e59fc95ef2be184268',1,'Argus::Rectangle::right() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_73.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_73.html new file mode 100644 index 0000000..774d577 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_73.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_73.js new file mode 100644 index 0000000..3dd5b5d --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_73.js @@ -0,0 +1,64 @@ +var searchData= +[ + ['setaeantibandingmode',['setAeAntibandingMode',['../classArgus_1_1IAutoControlSettings.html#a1ee11801c9eb5281c6b551d1bde23f60',1,'Argus::IAutoControlSettings']]], + ['setaelock',['setAeLock',['../classArgus_1_1IAutoControlSettings.html#aeb0065ad73870e6dde05606e78088551',1,'Argus::IAutoControlSettings']]], + ['setaeregions',['setAeRegions',['../classArgus_1_1IAutoControlSettings.html#ae8b956909eff7e17a9a3a53a9f2f605c',1,'Argus::IAutoControlSettings']]], + ['setafregions',['setAfRegions',['../classArgus_1_1IAutoControlSettings.html#a76313a4e697a4f14c5d4912bf9944dff',1,'Argus::IAutoControlSettings']]], + ['setaperturefnumber',['setApertureFNumber',['../classArgus_1_1ISourceSettings.html#a5d1f6178d717423a951c82728e342495',1,'Argus::ISourceSettings']]], + ['setaperturemotorspeed',['setApertureMotorSpeed',['../classArgus_1_1ISourceSettings.html#ae0e3645fe7f7dc0ca1516d2ec4a830a7',1,'Argus::ISourceSettings']]], + ['setapertureposition',['setAperturePosition',['../classArgus_1_1ISourceSettings.html#aeae3265fd9d105098ee498461aba97bc',1,'Argus::ISourceSettings']]], + ['setawblock',['setAwbLock',['../classArgus_1_1IAutoControlSettings.html#ac14f7bf31f315c4f0f148aa17a30b312',1,'Argus::IAutoControlSettings']]], + ['setawbmode',['setAwbMode',['../classArgus_1_1IAutoControlSettings.html#a37d259ea62879c41c89e993e137e487d',1,'Argus::IAutoControlSettings']]], + ['setawbregions',['setAwbRegions',['../classArgus_1_1IAutoControlSettings.html#a487f7454abb8efddcbc90545ab7aaaaa',1,'Argus::IAutoControlSettings']]], + ['setbayeraveragemapenable',['setBayerAverageMapEnable',['../classArgus_1_1Ext_1_1IBayerAverageMapSettings.html#a3123de1b0c0011223da00a9fb912be9d',1,'Argus::Ext::IBayerAverageMapSettings']]], + ['setbayerhistogramregion',['setBayerHistogramRegion',['../classArgus_1_1IAutoControlSettings.html#ab4069e77b2fb5b8b2a254a36c980ca85',1,'Argus::IAutoControlSettings']]], + ['setbayersharpnessmapenable',['setBayerSharpnessMapEnable',['../classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html#a0eeeb789780fafa47d743bfedf6b3c29',1,'Argus::Ext::IBayerSharpnessMapSettings']]], + ['setbuffertype',['setBufferType',['../classArgus_1_1IBufferOutputStreamSettings.html#a044d6eed4ef067f601d2aa433d679e72',1,'Argus::IBufferOutputStreamSettings']]], + ['setcameradevice',['setCameraDevice',['../classArgus_1_1IOutputStreamSettings.html#ad746419d46b3e955525abdf2885419c5',1,'Argus::IOutputStreamSettings']]], + ['setclientdata',['setClientData',['../classArgus_1_1IBuffer.html#acb514fb8f0d6b2651a9fb82736143aa2',1,'Argus::IBuffer::setClientData()'],['../classArgus_1_1IRequest.html#a55e55ea823ad98f286f2505c067458ac',1,'Argus::IRequest::setClientData()']]], + ['setclientmetadatabuffer',['setClientMetadataBuffer',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html#a7f6178e6ed6678c614cf2d4407657b37',1,'Argus::Ext::ISensorPrivateMetadataClientBufferRequest']]], + ['setcolorcorrectionmatrix',['setColorCorrectionMatrix',['../classArgus_1_1IAutoControlSettings.html#a24001773f7a288aaa97b13f8181f5456',1,'Argus::IAutoControlSettings']]], + ['setcolorcorrectionmatrixenable',['setColorCorrectionMatrixEnable',['../classArgus_1_1IAutoControlSettings.html#a4a822eb05bc4398d6c38f1a67fc9883b',1,'Argus::IAutoControlSettings']]], + ['setcolorsaturation',['setColorSaturation',['../classArgus_1_1IAutoControlSettings.html#a0a94a306e28e90b5ca017c77e69c6436',1,'Argus::IAutoControlSettings']]], + ['setcolorsaturationbias',['setColorSaturationBias',['../classArgus_1_1IAutoControlSettings.html#abc4e0e250193be956d444f03767f0178',1,'Argus::IAutoControlSettings']]], + ['setcolorsaturationenable',['setColorSaturationEnable',['../classArgus_1_1IAutoControlSettings.html#a21009b33d8b636293f888752b1747eab',1,'Argus::IAutoControlSettings']]], + ['setdefogamount',['setDeFogAmount',['../classArgus_1_1Ext_1_1IDeFogSettings.html#ab3540ae030b9b94ad0638c9c2d734790',1,'Argus::Ext::IDeFogSettings']]], + ['setdefogenable',['setDeFogEnable',['../classArgus_1_1Ext_1_1IDeFogSettings.html#a457195ea6f2e2b40caa52045f6c1f85d',1,'Argus::Ext::IDeFogSettings']]], + ['setdefogquality',['setDeFogQuality',['../classArgus_1_1Ext_1_1IDeFogSettings.html#afbd75c96d0766ebaff93824b1d4cb68e',1,'Argus::Ext::IDeFogSettings']]], + ['setdenoisemode',['setDenoiseMode',['../classArgus_1_1IDenoiseSettings.html#af989064021965c35990fe83204d3b849',1,'Argus::IDenoiseSettings']]], + ['setdenoisestrength',['setDenoiseStrength',['../classArgus_1_1IDenoiseSettings.html#ac9659df2f9f363c73d554befa0b785b1',1,'Argus::IDenoiseSettings']]], + ['setedgeenhancemode',['setEdgeEnhanceMode',['../classArgus_1_1IEdgeEnhanceSettings.html#a600fc91a9d1695d33533d06c72a67570',1,'Argus::IEdgeEnhanceSettings']]], + ['setedgeenhancestrength',['setEdgeEnhanceStrength',['../classArgus_1_1IEdgeEnhanceSettings.html#acb561fb70e4b51491a540597b8f050c7',1,'Argus::IEdgeEnhanceSettings']]], + ['setegldisplay',['setEGLDisplay',['../classArgus_1_1IEGLImageBufferSettings.html#a41372cfe3a53e65d4a08d71e98f455d8',1,'Argus::IEGLImageBufferSettings::setEGLDisplay()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a193ea880e8a8b8c6882281c6c1d06fcc',1,'Argus::IEGLOutputStreamSettings::setEGLDisplay()']]], + ['seteglimage',['setEGLImage',['../classArgus_1_1IEGLImageBufferSettings.html#aeb95bffdf14662c019605cc2ffd3eafc',1,'Argus::IEGLImageBufferSettings']]], + ['setenableispstage',['setEnableIspStage',['../classArgus_1_1IRequest.html#acb66ca38578c66e59f24914e7aec3ba7',1,'Argus::IRequest']]], + ['seteventinjectionerrormsg',['setEventInjectionErrorMsg',['../classArgus_1_1Ext_1_1IDebugCaptureSession.html#a809772e51e6525ff82d2e75834c1887e',1,'Argus::Ext::IDebugCaptureSession']]], + ['setexposurecompensation',['setExposureCompensation',['../classArgus_1_1IAutoControlSettings.html#a15dae0f7e79587f29226ec184b50f45d',1,'Argus::IAutoControlSettings']]], + ['setexposurecount',['setExposureCount',['../classArgus_1_1IEGLOutputStreamSettings.html#a52c74e9f87ed80732824e63ce6d88b1d',1,'Argus::IEGLOutputStreamSettings']]], + ['setexposuretimerange',['setExposureTimeRange',['../classArgus_1_1ISourceSettings.html#a97259077b42ecfb13d139da5ede8c2a1',1,'Argus::ISourceSettings']]], + ['setfacedetectenable',['setFaceDetectEnable',['../classArgus_1_1Ext_1_1IFaceDetectSettings.html#ac16b0edce8d1b9d3c088aa3291c67227',1,'Argus::Ext::IFaceDetectSettings']]], + ['setfifolength',['setFifoLength',['../classArgus_1_1IEGLOutputStreamSettings.html#a73da480070bfed70ccc90af38e67972f',1,'Argus::IEGLOutputStreamSettings']]], + ['setfocusposition',['setFocusPosition',['../classArgus_1_1ISourceSettings.html#acb57376b76666a116ba68c14b3856c3e',1,'Argus::ISourceSettings']]], + ['setframedurationrange',['setFrameDurationRange',['../classArgus_1_1ISourceSettings.html#a46f05e2816befd695fd3ae68d856cf96',1,'Argus::ISourceSettings']]], + ['setgainrange',['setGainRange',['../classArgus_1_1ISourceSettings.html#a9cdfb914b0e1da3a2f9fe4143f9c8e57',1,'Argus::ISourceSettings']]], + ['setispdigitalgainrange',['setIspDigitalGainRange',['../classArgus_1_1IAutoControlSettings.html#ad2504986fcddc78fff56674c00c0d989',1,'Argus::IAutoControlSettings']]], + ['setmetadataenable',['setMetadataEnable',['../classArgus_1_1IBufferOutputStreamSettings.html#ac8936d0dab592d0bdbbe74adee2deb78',1,'Argus::IBufferOutputStreamSettings::setMetadataEnable()'],['../classArgus_1_1IEGLOutputStreamSettings.html#a940c087cb046b2cf0e7ec1274ed9551a',1,'Argus::IEGLOutputStreamSettings::setMetadataEnable()'],['../classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html#a3eec7c6b9d5cbe48399c8c658e0467c8',1,'Argus::Ext::ISensorPrivateMetadataRequest::setMetadataEnable()']]], + ['setmode',['setMode',['../classArgus_1_1IEGLOutputStreamSettings.html#a81ba6a662080f07809fb717b3a7e586f',1,'Argus::IEGLOutputStreamSettings']]], + ['setopticalblack',['setOpticalBlack',['../classArgus_1_1ISourceSettings.html#a38cfe2647989ff1bba4bba979977c487',1,'Argus::ISourceSettings']]], + ['setopticalblackenable',['setOpticalBlackEnable',['../classArgus_1_1ISourceSettings.html#a5ede1e4f4e44267ae1abc8eb758674fd',1,'Argus::ISourceSettings']]], + ['setpixelformat',['setPixelFormat',['../classArgus_1_1IEGLOutputStreamSettings.html#ae2354bf23b8fb0fd0d7df9057d016e59',1,'Argus::IEGLOutputStreamSettings']]], + ['setpostprocessingenable',['setPostProcessingEnable',['../classArgus_1_1IStreamSettings.html#aab91aa8fe6d07ab356d43bcc7712f2a0',1,'Argus::IStreamSettings']]], + ['setreleasesync',['setReleaseSync',['../classArgus_1_1IEGLSync.html#a21f3f31f4869ec8a35cce274e5b23943',1,'Argus::IEGLSync']]], + ['setresolution',['setResolution',['../classArgus_1_1IEGLOutputStreamSettings.html#a0cfb60bb7d22b1f52a6c57ea840cf0d0',1,'Argus::IEGLOutputStreamSettings']]], + ['setsensormode',['setSensorMode',['../classArgus_1_1ISourceSettings.html#a50b962954ae6fcc9d024999390383071',1,'Argus::ISourceSettings']]], + ['setsourcecliprect',['setSourceClipRect',['../classArgus_1_1IStreamSettings.html#afed99500f424659edacb8a55310311d2',1,'Argus::IStreamSettings']]], + ['setsynctype',['setSyncType',['../classArgus_1_1IBufferOutputStreamSettings.html#afac7de8fd641eccb142ebd8c2c070258',1,'Argus::IBufferOutputStreamSettings']]], + ['settonemapcurve',['setToneMapCurve',['../classArgus_1_1IAutoControlSettings.html#ad4467e28d8f8cdec4a0069a6e2dfb2af',1,'Argus::IAutoControlSettings']]], + ['settonemapcurveenable',['setToneMapCurveEnable',['../classArgus_1_1IAutoControlSettings.html#a054d1626fcf4a159fa41e87efbfac1ee',1,'Argus::IAutoControlSettings']]], + ['setwbgains',['setWbGains',['../classArgus_1_1IAutoControlSettings.html#ab224517cee96b01c666c0a774ac533da',1,'Argus::IAutoControlSettings']]], + ['size',['size',['../classArgus_1_1Array2D.html#ab2cc11837aaf23d1ea9c7e361438b592',1,'Argus::Array2D']]], + ['size2d',['Size2D',['../classArgus_1_1Size2D.html#a030cea1165690b1120f27eb8e42327a5',1,'Argus::Size2D::Size2D()'],['../classArgus_1_1Size2D.html#ac2715348690a4bae9170e4294915b25e',1,'Argus::Size2D::Size2D(const Tuple< 2, T > &other)'],['../classArgus_1_1Size2D.html#ad6f5fab4c4b6686f4b97ab968ccd85d4',1,'Argus::Size2D::Size2D(T init)'],['../classArgus_1_1Size2D.html#a15d00d033095f2da873e92f1b346a812',1,'Argus::Size2D::Size2D(T _width, T _height)']]], + ['stoprepeat',['stopRepeat',['../classArgus_1_1ICaptureSession.html#a49df8458b54d58fd5538c982565acd0e',1,'Argus::ICaptureSession']]], + ['supportsextension',['supportsExtension',['../classArgus_1_1ICameraProvider.html#acb729080a0071b42f9d4f801b18a17ca',1,'Argus::ICameraProvider']]], + ['supportsoutputstreamformat',['supportsOutputStreamFormat',['../classArgus_1_1IEGLOutputStreamSettings.html#a9f57d8b140a1fb8321e6022871d59402',1,'Argus::IEGLOutputStreamSettings']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_74.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_74.html new file mode 100644 index 0000000..e3c96c3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_74.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_74.js new file mode 100644 index 0000000..c69c0be --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_74.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['top',['top',['../classArgus_1_1Rectangle.html#ab9765dbfead610f0ce19ce8df372fb1e',1,'Argus::Rectangle::top()'],['../classArgus_1_1Rectangle.html#a839670e70466fb9be9a108dba12558e5',1,'Argus::Rectangle::top() const ']]], + ['tuple',['Tuple',['../classArgus_1_1Tuple.html#a6dc1a8c9aa1d2f6355d850e536c6c2b0',1,'Argus::Tuple::Tuple()'],['../classArgus_1_1Tuple.html#a16650d1e23c432f22b1e2b0f377dd1b9',1,'Argus::Tuple::Tuple(T init)']]], + ['tuplesize',['tupleSize',['../classArgus_1_1Tuple.html#a134a129b8b6f1c51db038d7b32e060c2',1,'Argus::Tuple']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_75.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_75.html new file mode 100644 index 0000000..2d61754 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_75.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_75.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_75.js new file mode 100644 index 0000000..4bedac1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_75.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['uniqueobj',['UniqueObj',['../classArgus_1_1UniqueObj.html#ae4e2ea2238e55327f49e0ec7ad534f35',1,'Argus::UniqueObj::UniqueObj(T *obj=NULL)'],['../classArgus_1_1UniqueObj.html#a2bed2c0a8cc7812275f916e20812c2a4',1,'Argus::UniqueObj::UniqueObj(rv< UniqueObj > &moved)']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_77.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_77.html new file mode 100644 index 0000000..8fe9755 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_77.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_77.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_77.js new file mode 100644 index 0000000..c8e2b83 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_77.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['waitforevents',['waitForEvents',['../classArgus_1_1IEventProvider.html#ab180e35467c20913c1972eead7b071f2',1,'Argus::IEventProvider::waitForEvents(const std::vector< EventQueue * > &queues, uint64_t timeout=TIMEOUT_INFINITE)=0'],['../classArgus_1_1IEventProvider.html#a54740e3b63a5598f3b2be0ed41e6a558',1,'Argus::IEventProvider::waitForEvents(EventQueue *queue, uint64_t timeout=TIMEOUT_INFINITE)=0']]], + ['waitforidle',['waitForIdle',['../classArgus_1_1ICaptureSession.html#a75ad81ef8a45909b265ae6a9bb71fc2d',1,'Argus::ICaptureSession']]], + ['waituntilconnected',['waitUntilConnected',['../classArgus_1_1IEGLOutputStream.html#a6d28c32eebc90014c7fa5a0a93f1713a',1,'Argus::IEGLOutputStream']]], + ['weight',['weight',['../classArgus_1_1AcRegion.html#ab67b12b3b392b7293d73829bd3253a6c',1,'Argus::AcRegion::weight()'],['../classArgus_1_1AcRegion.html#a433ac4ed5139993ad237ae2b944b8f3d',1,'Argus::AcRegion::weight() const ']]], + ['width',['width',['../classArgus_1_1Size2D.html#a0581a2d9c1a0192e7f32332bb7f1ea99',1,'Argus::Size2D::width()'],['../classArgus_1_1Size2D.html#a31b5d83afde45b4a4905b5903b3aa452',1,'Argus::Size2D::width() const '],['../classArgus_1_1Rectangle.html#adc4581f747c2a5224b7a187dad6569a5',1,'Argus::Rectangle::width()']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_78.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_78.html new file mode 100644 index 0000000..2b33d25 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_78.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_78.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_78.js new file mode 100644 index 0000000..f5e3555 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_78.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x',['x',['../classArgus_1_1Point2D.html#ad73268c47203fe77b1620039d156f7d0',1,'Argus::Point2D::x()'],['../classArgus_1_1Point2D.html#a6fb3d5312abe40c82693ac0fe1df5f72',1,'Argus::Point2D::x() const '],['../classArgus_1_1Point3D.html#a45f33a3692b8feb999823e11b97d6951',1,'Argus::Point3D::x()'],['../classArgus_1_1Point3D.html#a17f223053d51c6800af0eabf698706a3',1,'Argus::Point3D::x() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_79.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_79.html new file mode 100644 index 0000000..09fd7d7 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_79.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_79.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_79.js new file mode 100644 index 0000000..d639ad8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_79.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['y',['y',['../classArgus_1_1Point2D.html#a2e01fa1fa8556beb6c6f88bc43dadf19',1,'Argus::Point2D::y()'],['../classArgus_1_1Point2D.html#abacfa071db88f31f2fcb9868d9d4684d',1,'Argus::Point2D::y() const '],['../classArgus_1_1Point3D.html#ae1ddc7370fb335e1224419bad5330107',1,'Argus::Point3D::y()'],['../classArgus_1_1Point3D.html#a5b32f6ba5af995af4350ac48090f5364',1,'Argus::Point3D::y() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7a.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7a.html new file mode 100644 index 0000000..c134771 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7a.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7a.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7a.js new file mode 100644 index 0000000..d824983 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['z',['z',['../classArgus_1_1Point3D.html#ad429ee565db8015d0c86c282b5048731',1,'Argus::Point3D::z()'],['../classArgus_1_1Point3D.html#a578badcc445b9894286fecc583c83002',1,'Argus::Point3D::z() const ']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7e.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7e.html new file mode 100644 index 0000000..fd1d3ce --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7e.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7e.js new file mode 100644 index 0000000..fc276d1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/functions_7e.js @@ -0,0 +1,73 @@ +var searchData= +[ + ['_7ebuffer',['~Buffer',['../classArgus_1_1Buffer.html#a3254a307d49d58cf9b7c619a5190b68a',1,'Argus::Buffer']]], + ['_7ebuffersettings',['~BufferSettings',['../classArgus_1_1BufferSettings.html#a34a44af0081014405ab8a7645c3e51a9',1,'Argus::BufferSettings']]], + ['_7ecameradevice',['~CameraDevice',['../classArgus_1_1CameraDevice.html#a89ed69980f09a6f74756204d9d315788',1,'Argus::CameraDevice']]], + ['_7ecameraprovider',['~CameraProvider',['../classArgus_1_1CameraProvider.html#a8c2c469ea8ff8588837fc9586348e905',1,'Argus::CameraProvider']]], + ['_7ecapturemetadata',['~CaptureMetadata',['../classArgus_1_1CaptureMetadata.html#a923f866db06f493a343cae30ec8780ba',1,'Argus::CaptureMetadata']]], + ['_7ecapturemetadatacontainer',['~CaptureMetadataContainer',['../classArgus_1_1CaptureMetadataContainer.html#a00718706a0f3071645909b7fa2ea470d',1,'Argus::CaptureMetadataContainer']]], + ['_7ecapturesession',['~CaptureSession',['../classArgus_1_1CaptureSession.html#a9a2458032e7679af5a8599b2b8f38fd7',1,'Argus::CaptureSession']]], + ['_7edestructable',['~Destructable',['../classArgus_1_1Destructable.html#a7c593df8a9b19ad0bf549328b74b1966',1,'Argus::Destructable']]], + ['_7eevent',['~Event',['../classArgus_1_1Event.html#a5b4ba4b8fb86a5a9a1d4a22e01901677',1,'Argus::Event']]], + ['_7eeventqueue',['~EventQueue',['../classArgus_1_1EventQueue.html#ac543f9b7d378447ee386c09446c9277a',1,'Argus::EventQueue']]], + ['_7eiautocontrolsettings',['~IAutoControlSettings',['../classArgus_1_1IAutoControlSettings.html#acbab28f70669ccf54c2099a0e22c8087',1,'Argus::IAutoControlSettings']]], + ['_7eibayeraveragemap',['~IBayerAverageMap',['../classArgus_1_1Ext_1_1IBayerAverageMap.html#abfa540698e3e2eae79a8da22baaefa8c',1,'Argus::Ext::IBayerAverageMap']]], + ['_7eibayeraveragemapsettings',['~IBayerAverageMapSettings',['../classArgus_1_1Ext_1_1IBayerAverageMapSettings.html#aea7dc07595767d552a3bd31463b36dcd',1,'Argus::Ext::IBayerAverageMapSettings']]], + ['_7eibayerhistogram',['~IBayerHistogram',['../classArgus_1_1IBayerHistogram.html#ac181228b5fae46e334b55d7526ae77e0',1,'Argus::IBayerHistogram']]], + ['_7eibayersharpnessmap',['~IBayerSharpnessMap',['../classArgus_1_1Ext_1_1IBayerSharpnessMap.html#a2a0cacbc2d17585d75f07819b7fe01c0',1,'Argus::Ext::IBayerSharpnessMap']]], + ['_7eibayersharpnessmapsettings',['~IBayerSharpnessMapSettings',['../classArgus_1_1Ext_1_1IBayerSharpnessMapSettings.html#ab84f591c061907d8803cbd3bfeeb3052',1,'Argus::Ext::IBayerSharpnessMapSettings']]], + ['_7eiblockingsessioncameraprovider',['~IBlockingSessionCameraProvider',['../classArgus_1_1Ext_1_1IBlockingSessionCameraProvider.html#a24be84c7c669fcfc6f2b128a2899b540',1,'Argus::Ext::IBlockingSessionCameraProvider']]], + ['_7eibuffer',['~IBuffer',['../classArgus_1_1IBuffer.html#a1aa871945eceabec9ec193103622d9b6',1,'Argus::IBuffer']]], + ['_7eibufferoutputstream',['~IBufferOutputStream',['../classArgus_1_1IBufferOutputStream.html#a01eeb31ddf9c2a9b912d8685766b1671',1,'Argus::IBufferOutputStream']]], + ['_7eibufferoutputstreamsettings',['~IBufferOutputStreamSettings',['../classArgus_1_1IBufferOutputStreamSettings.html#ab95b8c362e1e901b2526ec14f91e6c1b',1,'Argus::IBufferOutputStreamSettings']]], + ['_7eicameraproperties',['~ICameraProperties',['../classArgus_1_1ICameraProperties.html#a0def3b8a38874ebcd9c93a69a9ab499f',1,'Argus::ICameraProperties']]], + ['_7eicameraprovider',['~ICameraProvider',['../classArgus_1_1ICameraProvider.html#ab2133beae7b27e198bf6c9d19c265d06',1,'Argus::ICameraProvider']]], + ['_7eicapturemetadata',['~ICaptureMetadata',['../classArgus_1_1ICaptureMetadata.html#a91b9e7e777cf9f05a303b7c2b6bcb7eb',1,'Argus::ICaptureMetadata']]], + ['_7eicapturesession',['~ICaptureSession',['../classArgus_1_1ICaptureSession.html#a762c4ff11f09b75289e19539db75c786',1,'Argus::ICaptureSession']]], + ['_7eidebugcapturesession',['~IDebugCaptureSession',['../classArgus_1_1Ext_1_1IDebugCaptureSession.html#a48c8b109e1b7d317ad6c2b6bed273abd',1,'Argus::Ext::IDebugCaptureSession']]], + ['_7eidefogsettings',['~IDeFogSettings',['../classArgus_1_1Ext_1_1IDeFogSettings.html#a977fcad7bdf0dfaad922d5fb3cba8675',1,'Argus::Ext::IDeFogSettings']]], + ['_7eidenoisemetadata',['~IDenoiseMetadata',['../classArgus_1_1IDenoiseMetadata.html#a6431b04221a0d2d2f25ca2e0ddc00038',1,'Argus::IDenoiseMetadata']]], + ['_7eidenoisesettings',['~IDenoiseSettings',['../classArgus_1_1IDenoiseSettings.html#a9b6031445a882410e277e50920186fc0',1,'Argus::IDenoiseSettings']]], + ['_7eidolwdrsensormode',['~IDolWdrSensorMode',['../classArgus_1_1Ext_1_1IDolWdrSensorMode.html#ae45cbbf4fd4c885e50f16d377b04a220',1,'Argus::Ext::IDolWdrSensorMode']]], + ['_7eiedgeenhancemetadata',['~IEdgeEnhanceMetadata',['../classArgus_1_1IEdgeEnhanceMetadata.html#ac6c05c28759d3c3d6cd81b402bf655ed',1,'Argus::IEdgeEnhanceMetadata']]], + ['_7eiedgeenhancesettings',['~IEdgeEnhanceSettings',['../classArgus_1_1IEdgeEnhanceSettings.html#ae978dda106667cb532fab075f393bc96',1,'Argus::IEdgeEnhanceSettings']]], + ['_7eieglimagebuffer',['~IEGLImageBuffer',['../classArgus_1_1IEGLImageBuffer.html#a1a62df66e77a93537ab23158c98786c1',1,'Argus::IEGLImageBuffer']]], + ['_7eieglimagebuffersettings',['~IEGLImageBufferSettings',['../classArgus_1_1IEGLImageBufferSettings.html#a33418b95bac08e4104ecb622c78f3e82',1,'Argus::IEGLImageBufferSettings']]], + ['_7eiegloutputstream',['~IEGLOutputStream',['../classArgus_1_1IEGLOutputStream.html#a1aac1c285671f9970a042d8c259ea296',1,'Argus::IEGLOutputStream']]], + ['_7eiegloutputstreamsettings',['~IEGLOutputStreamSettings',['../classArgus_1_1IEGLOutputStreamSettings.html#a1ead3bd9916851ea1e14ed07767777f0',1,'Argus::IEGLOutputStreamSettings']]], + ['_7eieglsync',['~IEGLSync',['../classArgus_1_1IEGLSync.html#a8c569c690bef0a7c7a54679fb3cfb0b7',1,'Argus::IEGLSync']]], + ['_7eievent',['~IEvent',['../classArgus_1_1IEvent.html#ac849cd5864dca93192dbb4727fc84a5a',1,'Argus::IEvent']]], + ['_7eieventcapturecomplete',['~IEventCaptureComplete',['../classArgus_1_1IEventCaptureComplete.html#aa568e0f64a9eba17c5ef179747638d14',1,'Argus::IEventCaptureComplete']]], + ['_7eieventerror',['~IEventError',['../classArgus_1_1IEventError.html#a79ab2025ce1093120e0d40e08c69e4ca',1,'Argus::IEventError']]], + ['_7eieventprovider',['~IEventProvider',['../classArgus_1_1IEventProvider.html#adcd46afc1cc1e54c1fe4bc43ad74c688',1,'Argus::IEventProvider']]], + ['_7eieventqueue',['~IEventQueue',['../classArgus_1_1IEventQueue.html#ac3b597b833df2cc30cf6f01a9c4fa68c',1,'Argus::IEventQueue']]], + ['_7eifacedetectcaps',['~IFaceDetectCaps',['../classArgus_1_1Ext_1_1IFaceDetectCaps.html#abcd04972c675312a9b9ab771ab1a7b1e',1,'Argus::Ext::IFaceDetectCaps']]], + ['_7eifacedetectmetadata',['~IFaceDetectMetadata',['../classArgus_1_1Ext_1_1IFaceDetectMetadata.html#add0da7513c9b03cdd515ecc9f206b4b0',1,'Argus::Ext::IFaceDetectMetadata']]], + ['_7eifacedetectresult',['~IFaceDetectResult',['../classArgus_1_1Ext_1_1IFaceDetectResult.html#a8931136ae185a84d7eaa9109c1da99a2',1,'Argus::Ext::IFaceDetectResult']]], + ['_7eifacedetectsettings',['~IFaceDetectSettings',['../classArgus_1_1Ext_1_1IFaceDetectSettings.html#a7c948a8cecd01901e46f9030a040e838',1,'Argus::Ext::IFaceDetectSettings']]], + ['_7eiinternalframecount',['~IInternalFrameCount',['../classArgus_1_1Ext_1_1IInternalFrameCount.html#ac2f5297bccd5ece07b806d62ba13ed80',1,'Argus::Ext::IInternalFrameCount']]], + ['_7einonlinearhistogram',['~INonLinearHistogram',['../classArgus_1_1Ext_1_1INonLinearHistogram.html#ac9f17340f3efebe192507646213d227a',1,'Argus::Ext::INonLinearHistogram']]], + ['_7einterface',['~Interface',['../classArgus_1_1Interface.html#a3b94d7271c3143ba58696410eb79b5de',1,'Argus::Interface']]], + ['_7einterfaceprovider',['~InterfaceProvider',['../classArgus_1_1InterfaceProvider.html#a4cb7c57f553fdabf28830e2db520fa20',1,'Argus::InterfaceProvider']]], + ['_7eioutputstreamsettings',['~IOutputStreamSettings',['../classArgus_1_1IOutputStreamSettings.html#af9f0104ad5205fc01042c6ec08af640b',1,'Argus::IOutputStreamSettings']]], + ['_7eipwlwdrsensormode',['~IPwlWdrSensorMode',['../classArgus_1_1Ext_1_1IPwlWdrSensorMode.html#aa31455b2ac2dfda6927c67d2bf118d1b',1,'Argus::Ext::IPwlWdrSensorMode']]], + ['_7eirequest',['~IRequest',['../classArgus_1_1IRequest.html#a96b07b131b850e5fca316bcd95ed5c4e',1,'Argus::IRequest']]], + ['_7eirgbhistogram',['~IRGBHistogram',['../classArgus_1_1IRGBHistogram.html#aad145334a1d6b1c47f42511334c9bc5f',1,'Argus::IRGBHistogram']]], + ['_7eisensoreepromdata',['~ISensorEepromData',['../classArgus_1_1Ext_1_1ISensorEepromData.html#a8f8a1241a53bbe822a082c3624aca51e',1,'Argus::Ext::ISensorEepromData']]], + ['_7eisensormode',['~ISensorMode',['../classArgus_1_1ISensorMode.html#abe6ea096e0c725aebf9634ef9f243285',1,'Argus::ISensorMode']]], + ['_7eisensorotpdata',['~ISensorOtpData',['../classArgus_1_1Ext_1_1ISensorOtpData.html#a19ce70398df84878d7e82f5604c6363f',1,'Argus::Ext::ISensorOtpData']]], + ['_7eisensorprivatemetadata',['~ISensorPrivateMetadata',['../classArgus_1_1Ext_1_1ISensorPrivateMetadata.html#a8a954ce5c977e9b2408daf694a1479b3',1,'Argus::Ext::ISensorPrivateMetadata']]], + ['_7eisensorprivatemetadatacaps',['~ISensorPrivateMetadataCaps',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataCaps.html#ac037fd07585c00f9d545f450a28ec59b',1,'Argus::Ext::ISensorPrivateMetadataCaps']]], + ['_7eisensorprivatemetadataclientbufferrequest',['~ISensorPrivateMetadataClientBufferRequest',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataClientBufferRequest.html#a84cdb7c0939551fd79165c501a23973f',1,'Argus::Ext::ISensorPrivateMetadataClientBufferRequest']]], + ['_7eisensorprivatemetadatarequest',['~ISensorPrivateMetadataRequest',['../classArgus_1_1Ext_1_1ISensorPrivateMetadataRequest.html#a1d9bf08db373c506d6cd10f0b0eebbee',1,'Argus::Ext::ISensorPrivateMetadataRequest']]], + ['_7eisensortimestamptsc',['~ISensorTimestampTsc',['../classArgus_1_1Ext_1_1ISensorTimestampTsc.html#af93242181073622fb567f3c389255331',1,'Argus::Ext::ISensorTimestampTsc']]], + ['_7eisourcesettings',['~ISourceSettings',['../classArgus_1_1ISourceSettings.html#a11e9f5c2caf7dd2e07890b7c6fb24506',1,'Argus::ISourceSettings']]], + ['_7eistreamcapturemetadata',['~IStreamCaptureMetadata',['../classArgus_1_1IStreamCaptureMetadata.html#a6cc9561fdae98d31fdf0084e07612719',1,'Argus::IStreamCaptureMetadata']]], + ['_7eistreamsettings',['~IStreamSettings',['../classArgus_1_1IStreamSettings.html#a7b6c550fb2227d21757ffa0890b34e7f',1,'Argus::IStreamSettings']]], + ['_7eisyncsensorcalibrationdata',['~ISyncSensorCalibrationData',['../classArgus_1_1Ext_1_1ISyncSensorCalibrationData.html#a9bb2f50d6f388ac85728aea3fd5a08ed',1,'Argus::Ext::ISyncSensorCalibrationData']]], + ['_7eoutputstream',['~OutputStream',['../classArgus_1_1OutputStream.html#a16882333ea723c90e30ac31d614d2e0b',1,'Argus::OutputStream']]], + ['_7eoutputstreamsettings',['~OutputStreamSettings',['../classArgus_1_1OutputStreamSettings.html#a5503e085c6be8dd7d933a4d48d0e3556',1,'Argus::OutputStreamSettings']]], + ['_7erequest',['~Request',['../classArgus_1_1Request.html#a867defa619f58fca959c8f388d6b50f2',1,'Argus::Request']]], + ['_7esensormode',['~SensorMode',['../classArgus_1_1SensorMode.html#a71c73d83526ffcac39157dc0645ef48d',1,'Argus::SensorMode']]], + ['_7euniqueobj',['~UniqueObj',['../classArgus_1_1UniqueObj.html#a7c717fe84a8c6b0dbf7e98e5d6e60fe8',1,'Argus::UniqueObj']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_61.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_61.html new file mode 100644 index 0000000..260ea61 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_61.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_61.js new file mode 100644 index 0000000..a7dc179 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_61.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['autocontrolsettings',['AutoControlSettings',['../group__ArgusAutoControlSettings.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_62.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_62.html new file mode 100644 index 0000000..9c8b752 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_62.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_62.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_62.js new file mode 100644 index 0000000..1ddda22 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_62.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['bayerhistogram',['BayerHistogram',['../group__ArgusBayerHistogram.html',1,'']]], + ['buffer',['Buffer',['../group__ArgusBuffer.html',1,'']]], + ['buffer_20types',['Buffer Types',['../group__ArgusBufferBuffer.html',1,'']]], + ['buffer_20types',['Buffer Types',['../group__ArgusBufferBufferSettings.html',1,'']]], + ['bufferoutputstream',['BufferOutputStream',['../group__ArgusBufferOutputStream.html',1,'']]], + ['bufferoutputstreamsettings',['BufferOutputStreamSettings',['../group__ArgusBufferOutputStreamSettings.html',1,'']]], + ['buffersettings',['BufferSettings',['../group__ArgusBufferSettings.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_63.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_63.html new file mode 100644 index 0000000..dd75625 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_63.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_63.js new file mode 100644 index 0000000..7f2a8d8 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_63.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['cameradevice',['CameraDevice',['../group__ArgusCameraDevice.html',1,'']]], + ['cameraprovider',['CameraProvider',['../group__ArgusCameraProvider.html',1,'']]], + ['capturemetadata',['CaptureMetadata',['../group__ArgusCaptureMetadata.html',1,'']]], + ['capturesession',['CaptureSession',['../group__ArgusCaptureSession.html',1,'']]], + ['capturecomplete_20event',['CaptureComplete Event',['../group__ArgusEventCaptureComplete.html',1,'']]], + ['capturestarted_20event',['CaptureStarted Event',['../group__ArgusEventCaptureStarted.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_65.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_65.html new file mode 100644 index 0000000..f084d02 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_65.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_65.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_65.js new file mode 100644 index 0000000..16c1824 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_65.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['eglsync',['EGLSync',['../group__ArgusBufferEGLSync.html',1,'']]], + ['eglimagebuffer',['EGLImageBuffer',['../group__ArgusEGLImageBuffer.html',1,'']]], + ['eglimagebuffersettings',['EGLImageBufferSettings',['../group__ArgusEGLImageBufferSettings.html',1,'']]], + ['egloutputstream',['EGLOutputStream',['../group__ArgusEGLOutputStream.html',1,'']]], + ['egloutputstreamsettings',['EGLOutputStreamSettings',['../group__ArgusEGLOutputStreamSettings.html',1,'']]], + ['event',['Event',['../group__ArgusEvent.html',1,'']]], + ['error_20event',['Error Event',['../group__ArgusEventError.html',1,'']]], + ['eventqueue',['EventQueue',['../group__ArgusEventQueue.html',1,'']]], + ['ext_3a_3abayeraveragemap',['Ext::BayerAverageMap',['../group__ArgusExtBayerAverageMap.html',1,'']]], + ['ext_3a_3abayersharpnessmap',['Ext::BayerSharpnessMap',['../group__ArgusExtBayerSharpnessMap.html',1,'']]], + ['ext_3a_3ablockingsessioncameraprovider',['Ext::BlockingSessionCameraProvider',['../group__ArgusExtBlockingSessionCameraProvider.html',1,'']]], + ['ext_3a_3adebugcapturesession',['Ext::DebugCaptureSession',['../group__ArgusExtDebugCaptureSession.html',1,'']]], + ['ext_3a_3adefog',['Ext::DeFog',['../group__ArgusExtDeFog.html',1,'']]], + ['ext_3a_3adolwdrsensormode',['Ext::DolWdrSensorMode',['../group__ArgusExtDolWdrSensorMode.html',1,'']]], + ['ext_3a_3asensoreepromdata',['Ext::SensorEepromData',['../group__ArgusExtEepromData.html',1,'']]], + ['extensions',['Extensions',['../group__ArgusExtensions.html',1,'']]], + ['ext_3a_3afacedetect',['Ext::FaceDetect',['../group__ArgusExtFaceDetect.html',1,'']]], + ['ext_3a_3ainternalframecount',['Ext::InternalFrameCount',['../group__ArgusExtInternalFrameCount.html',1,'']]], + ['ext_3a_3anonlinearhistogram',['Ext::NonLinearHistogram',['../group__ArgusExtNonLinearHistogram.html',1,'']]], + ['ext_3a_3asensorotpdata',['Ext::SensorOtpData',['../group__ArgusExtOtpData.html',1,'']]], + ['ext_3a_3apwlwdrsensormode',['Ext::PwlWdrSensorMode',['../group__ArgusExtPwlWdrSensorMode.html',1,'']]], + ['ext_3a_3asensorprivatemetadata',['Ext::SensorPrivateMetadata',['../group__ArgusExtSensorPrivateMetadata.html',1,'']]], + ['ext_3a_3asensorprivatemetadataclientbuffer',['Ext::SensorPrivateMetadataClientBuffer',['../group__ArgusExtSensorPrivateMetadataClientBuffer.html',1,'']]], + ['ext_3a_3asensortimestamptsc',['Ext::SensorTimestampTsc',['../group__ArgusExtSensorTimestampTsc.html',1,'']]], + ['ext_3a_3asyncsensorcalibrationdata',['Ext::SyncSensorCalibrationData',['../group__ArgusExtSyncSensorCalibrationData.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_66.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_66.html new file mode 100644 index 0000000..b1879e4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_66.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_66.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_66.js new file mode 100644 index 0000000..0414d63 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_66.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['facedetectresult',['FaceDetectResult',['../group__ArgusFaceDetectResult.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6c.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6c.html new file mode 100644 index 0000000..157903c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6c.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6c.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6c.js new file mode 100644 index 0000000..fdeb3c5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['libargus_20camera_20api',['Libargus Camera API',['../group__LibargusAPI.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6f.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6f.html new file mode 100644 index 0000000..6a664e1 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6f.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6f.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6f.js new file mode 100644 index 0000000..a0e653e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_6f.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['objects_20and_20interfaces',['Objects and Interfaces',['../group__ArgusObjects.html',1,'']]], + ['outputstream',['OutputStream',['../group__ArgusOutputStream.html',1,'']]], + ['outputstreamsettings',['OutputStreamSettings',['../group__ArgusOutputStreamSettings.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_72.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_72.html new file mode 100644 index 0000000..a4430da --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_72.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_72.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_72.js new file mode 100644 index 0000000..ca7dc36 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_72.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['request',['Request',['../group__ArgusRequest.html',1,'']]], + ['rgbhistogram',['RGBHistogram',['../group__ArgusRGBHistogram.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_73.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_73.html new file mode 100644 index 0000000..feab00e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_73.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_73.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_73.js new file mode 100644 index 0000000..cab669c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/groups_73.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['sync_20types',['Sync Types',['../group__ArgusBufferSync.html',1,'']]], + ['sensormode',['SensorMode',['../group__ArgusSensorMode.html',1,'']]], + ['sourcesettings',['SourceSettings',['../group__ArgusSourceSettings.html',1,'']]], + ['streammetadata',['StreamMetadata',['../group__ArgusStreamCaptureMetadata.html',1,'']]], + ['streamsettings',['StreamSettings',['../group__ArgusStreamSettings.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/mag_sel.png b/jetson_multimedia_api/argus/docs/doxygen/html/search/mag_sel.png new file mode 100644 index 0000000..81f6040 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/search/mag_sel.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/namespaces_61.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/namespaces_61.html new file mode 100644 index 0000000..2ef4404 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/namespaces_61.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/namespaces_61.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/namespaces_61.js new file mode 100644 index 0000000..96b732a --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/namespaces_61.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['argus',['Argus',['../namespaceArgus.html',1,'']]], + ['ext',['Ext',['../namespaceArgus_1_1Ext.html',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/nomatches.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/pages_74.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/pages_74.html new file mode 100644 index 0000000..bbff83e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/pages_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/pages_74.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/pages_74.js new file mode 100644 index 0000000..441b2de --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/pages_74.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['todo_20list',['Todo List',['../todo.html',1,'']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/search.css b/jetson_multimedia_api/argus/docs/doxygen/html/search/search.css new file mode 100644 index 0000000..d18c1da --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/search.css @@ -0,0 +1,238 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:116px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/search.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/search.js new file mode 100644 index 0000000..69ceeac --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/search.js @@ -0,0 +1,817 @@ +// Search script generated by doxygen +// Copyright (C) 2009 by Dimitri van Heesch. + +// The code in this file is loosly based on main.js, part of Natural Docs, +// which is Copyright (C) 2003-2008 Greg Valure +// Natural Docs is licensed under the GPL. + +var indexSectionsWithContent = +{ + 0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111001111101111011110001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111110001000011101111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111001000010101111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111110111001111101111011110001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 5: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000110000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 6: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 7: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 8: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 9: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 10: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111011000001001001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 11: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "files", + 4: "functions", + 5: "variables", + 6: "typedefs", + 7: "enums", + 8: "enumvalues", + 9: "defines", + 10: "groups", + 11: "pages" +}; + +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var hexCode; + if (code<16) + { + hexCode="0"+code.toString(16); + } + else + { + hexCode=code.toString(16); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1') + { + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_61.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_61.js new file mode 100644 index 0000000..4fa554e --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_61.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['autocontrolid',['AutoControlId',['../namespaceArgus.html#aa22f825d6820fd3ceab8f5849705db01',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_63.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_63.html new file mode 100644 index 0000000..6aa327f --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_63.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_63.js new file mode 100644 index 0000000..eb940a4 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_63.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['const_5fiterator',['const_iterator',['../classArgus_1_1Array2D.html#add371d7b270f73ee356a4b0d3a4bd853',1,'Argus::Array2D']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_69.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_69.html new file mode 100644 index 0000000..983811b --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_69.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_69.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_69.js new file mode 100644 index 0000000..d003879 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/typedefs_69.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['iterator',['iterator',['../classArgus_1_1Array2D.html#aae6e9f999f526c37c63cb9fbaf338340',1,'Argus::Array2D']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_63.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_63.html new file mode 100644 index 0000000..c649c81 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_63.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_63.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_63.js new file mode 100644 index 0000000..27b5eb3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_63.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['clock_5fseq',['clock_seq',['../structArgus_1_1UUID.html#a77f391dcf5360456bba7363d7720a46b',1,'Argus::UUID']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6d.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6d.html new file mode 100644 index 0000000..b7924e3 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6d.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6d.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6d.js new file mode 100644 index 0000000..69728f2 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6d.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['m_5fdata',['m_data',['../classArgus_1_1Tuple.html#ad05577e1cee2b9db3f90b630948a2c2f',1,'Argus::Tuple::m_data()'],['../classArgus_1_1Array2D.html#ac28271214bea3afd2640d883e040561d',1,'Argus::Array2D::m_data()']]], + ['m_5fname',['m_name',['../classArgus_1_1NamedUUID.html#a81a1df70da66ec0a4b5b87c996aa0a84',1,'Argus::NamedUUID']]], + ['m_5fobj',['m_obj',['../classArgus_1_1UniqueObj.html#ab81f739e261891be048ab5ede8dd2854',1,'Argus::UniqueObj']]], + ['m_5fsize',['m_size',['../classArgus_1_1Array2D.html#ab0709bf8b8193dfce87051aa996d0b00',1,'Argus::Array2D']]], + ['m_5fweight',['m_weight',['../classArgus_1_1AcRegion.html#aacaf2861e79e4c2f9ef1c3c8ea6c1c29',1,'Argus::AcRegion']]], + ['max_5fuuid_5fname_5fsize',['MAX_UUID_NAME_SIZE',['../namespaceArgus.html#a5bf0109911c01d2963a1d3d939e791a1',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6e.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6e.html new file mode 100644 index 0000000..4cc41d5 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6e.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6e.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6e.js new file mode 100644 index 0000000..d50e499 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_6e.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['node',['node',['../structArgus_1_1UUID.html#a9634c1f28ccb599d63bd7c92257103ed',1,'Argus::UUID']]], + ['num_5fawb_5fwb_5festimate_5felements',['NUM_AWB_WB_ESTIMATE_ELEMENTS',['../classArgus_1_1ICaptureMetadata.html#a0ec63067082ae5325083f8f3fe217ba9',1,'Argus::ICaptureMetadata']]], + ['num_5fcolor_5fcorrection_5felements',['NUM_COLOR_CORRECTION_ELEMENTS',['../classArgus_1_1ICaptureMetadata.html#a66ada0c57da176187dd0bb3ac7e1920f',1,'Argus::ICaptureMetadata']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_74.html b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_74.html new file mode 100644 index 0000000..6093922 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_74.html @@ -0,0 +1,25 @@ + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_74.js b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_74.js new file mode 100644 index 0000000..6ef02fc --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/search/variables_74.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['time_5fhi_5fand_5fversion',['time_hi_and_version',['../structArgus_1_1UUID.html#a74a0c9bcfa0be324e79d35a2a879e4d9',1,'Argus::UUID']]], + ['time_5flow',['time_low',['../structArgus_1_1UUID.html#a53d749248928d1d8bdbf16ad8ba9a2cc',1,'Argus::UUID']]], + ['time_5fmid',['time_mid',['../structArgus_1_1UUID.html#a0c79f166c5da1ac63ab5aad4c21f35dc',1,'Argus::UUID']]], + ['timeout_5finfinite',['TIMEOUT_INFINITE',['../namespaceArgus.html#a4a5b172cb29e126c9433f8a712a0d0d4',1,'Argus']]] +]; diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/structArgus_1_1UUID-members.html b/jetson_multimedia_api/argus/docs/doxygen/html/structArgus_1_1UUID-members.html new file mode 100644 index 0000000..9cd5c9c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/structArgus_1_1UUID-members.html @@ -0,0 +1,113 @@ + + + + + +Libargus API: Member List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Argus::UUID Member List
+
+
+ +

This is the complete list of members for Argus::UUID, including all inherited members.

+ + + + + + + + +
clock_seqArgus::UUID
nodeArgus::UUID
operator<(const UUID &r) const Argus::UUIDinline
operator==(const UUID &r) const Argus::UUIDinline
time_hi_and_versionArgus::UUID
time_lowArgus::UUID
time_midArgus::UUID
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/structArgus_1_1UUID.html b/jetson_multimedia_api/argus/docs/doxygen/html/structArgus_1_1UUID.html new file mode 100644 index 0000000..4836567 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/structArgus_1_1UUID.html @@ -0,0 +1,269 @@ + + + + + +Libargus API: Argus::UUID Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Argus::UUID Struct Reference
+
+
+ +

A universally unique identifier. + More...

+ +

#include <UUID.h>

+
+Inheritance diagram for Argus::UUID:
+
+
+ + +Argus::NamedUUID +Argus::EventType +Argus::InterfaceID + +
+ +

List of all members.

+ + + + +

+Public Member Functions

bool operator== (const UUID &r) const
bool operator< (const UUID &r) const
+ + + + + + +

+Public Attributes

uint32_t time_low
uint16_t time_mid
uint16_t time_hi_and_version
uint16_t clock_seq
uint8_t node [6]
+

Detailed Description

+

A universally unique identifier.

+ +

Definition at line 50 of file UUID.h.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool Argus::UUID::operator< (const UUIDr) const
+
+inline
+
+ +

Definition at line 63 of file UUID.h.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool Argus::UUID::operator== (const UUIDr) const
+
+inline
+
+ +

Definition at line 58 of file UUID.h.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
uint16_t Argus::UUID::clock_seq
+
+ +

Definition at line 55 of file UUID.h.

+ +
+
+ +
+
+ + + + +
uint8_t Argus::UUID::node[6]
+
+ +

Definition at line 56 of file UUID.h.

+ +
+
+ +
+
+ + + + +
uint16_t Argus::UUID::time_hi_and_version
+
+ +

Definition at line 54 of file UUID.h.

+ +
+
+ +
+
+ + + + +
uint32_t Argus::UUID::time_low
+
+ +

Definition at line 52 of file UUID.h.

+ +
+
+ +
+
+ + + + +
uint16_t Argus::UUID::time_mid
+
+ +

Definition at line 53 of file UUID.h.

+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/structArgus_1_1UUID.png b/jetson_multimedia_api/argus/docs/doxygen/html/structArgus_1_1UUID.png new file mode 100644 index 0000000..f1d25dc Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/structArgus_1_1UUID.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/tab_a.png b/jetson_multimedia_api/argus/docs/doxygen/html/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/tab_a.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/tab_b.png b/jetson_multimedia_api/argus/docs/doxygen/html/tab_b.png new file mode 100644 index 0000000..258c141 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/tab_b.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/tab_h.png b/jetson_multimedia_api/argus/docs/doxygen/html/tab_h.png new file mode 100644 index 0000000..4ca9102 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/tab_h.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/tab_s.png b/jetson_multimedia_api/argus/docs/doxygen/html/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/jetson_multimedia_api/argus/docs/doxygen/html/tab_s.png differ diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/tabs.css b/jetson_multimedia_api/argus/docs/doxygen/html/tabs.css new file mode 100644 index 0000000..2192056 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/tabs.css @@ -0,0 +1,59 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/jetson_multimedia_api/argus/docs/doxygen/html/todo.html b/jetson_multimedia_api/argus/docs/doxygen/html/todo.html new file mode 100644 index 0000000..208d537 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/doxygen/html/todo.html @@ -0,0 +1,99 @@ + + + + + +Libargus API: Todo List + + + + + + + + + +
+
+ + + + + + +
+
Libargus API +
+
Libargus Camera API
+
+
+ + + + + + + + +
+ +
+ +
+
+
+
Todo List
+
+
+
+
Member Argus::ICaptureMetadata::getAwbWbEstimate (std::vector< float > *estimate) const =0
+
Document the meaning of an AWB WB estimate.
+
Member Argus::ICaptureMetadata::getFrameDuration () const =0
+
Provide a more precise description of frame duration.
+
Member Argus::ISourceSettings::setExposureTimeRange (const Range< uint64_t > &exposureTimeRange)=0
+
Document implications of quantization.
+
+
+ + + + diff --git a/jetson_multimedia_api/argus/docs/extensions/ArgusExt.tex b/jetson_multimedia_api/argus/docs/extensions/ArgusExt.tex new file mode 100644 index 0000000..e056c23 --- /dev/null +++ b/jetson_multimedia_api/argus/docs/extensions/ArgusExt.tex @@ -0,0 +1,241 @@ +\documentclass[11pt]{article} +\usepackage{fullpage} +\usepackage{parskip} +\usepackage{enumitem} +\usepackage{listings} +\usepackage{xcolor} +\usepackage{color, colortbl} +\usepackage{longtable, tabu} +\usepackage{hyperref} +\usepackage[none]{hyphenat} + +% Set the default formatting for C++ code. +\lstset{ + language=C++, + backgroundcolor=\color{black!5}, + basicstyle=\footnotesize, + xleftmargin=4em, + xrightmargin=4em, + showspaces=false, + showstringspaces=false, +} + +% Set the default formatting for description lists. +\setlist[description]{ + style=standard, + align=parleft, + labelwidth=!, + labelindent=2em, + leftmargin=10em, +} + +% Add slight padding between table rows. +\tabulinesep=0.2em + +% Generic text classes. +\newcommand{\classname}[1]{\textbf{#1}} +\newcommand{\methodname}[1]{\textbf{#1}} +\newcommand{\paramname}[1]{\textbf{#1}} +\makeatletter +\renewcommand{\paragraph}{\@startsection{paragraph}{4}{0ex}% + {-3.25ex plus -1ex minus -0.2ex}% + {1.5ex plus 0.2ex}% + {\normalfont\normalsize\bfseries}} +\makeatother + +% Environment used for member tables in the form [Name | Type | Description] +% Parameters: {Class/Interface name}{Label} +\newenvironment{membertable}[2] +{ + \definecolor{TableHeader}{rgb}{0.5,0.7,0.9} + \begin{longtabu} to \linewidth {|l|l|X|} + \caption[#1]{#1\label{#2}} \\ + \hline \rowcolor{TableHeader} Name & Type & Description \\ \hline + \endfirsthead + \multicolumn{3}{c}{{\bfseries \tablename\ \thetable{}: #1 + -- continued from previous page}} \\ + \hline \rowcolor{TableHeader} Name & Type & Description \\ \hline + \endhead +} +{ + \end{longtabu} +} + +\stepcounter{secnumdepth} +\stepcounter{tocdepth} + +\begin{document} + +\title{Argus API Extensions 0.98} +\date{April 15, 2020} + +\maketitle +\thispagestyle{empty} +\newpage +\tableofcontents +\pagenumbering{roman} +\newpage +\listoftables + +\newpage +\pagenumbering{arabic} +\section{BayerAverageMap} + +BayerAverageMap generates local averages of a capture's raw Bayer data. These averages are +generated from small rectangles, called bins, that are evenly distributed across +the image. + +This extension introduces two new interfaces: +\subsection{IBayerAverageMapSettings} Provides methods to set bayer average map settings. +\classname{IBayerAverageMapSettings} defines two methods: + +\begin{description}[style=nextline,align=left,leftmargin=4em] +\item[setBayerAverageMapEnable()] Enables or disables Bayer average map generation. +When enabled, \classname{CaptureMetadata} returned by completed captures will expose the +\classname{IBayerAverageMap} interface. +\item[getBayerAverageMapEnable()] Returns whether or not Bayer average map generation is enabled. +\end{description} + +\subsection{IBayerAverageMap} Provides methods to get Bayer average map metadata. Each average +is a floating-point value that is normalized such that [0.0, 1.0] maps to the full optical range +of the output pixels, however values outside this range may be included in the averages so long +as they are within the working range of the average calculation. +For pixels that have values outside the working range, the API excludes such pixels from the +average calculation and increments the clipped pixel counter for the containing region. + +The \classname{IBayerAverageMap} interface supports the following methods: + +\begin{description}[style=nextline,align=left,leftmargin=4em] +\item[getBinStart()] Returns the starting location of the first bin, in pixels, where the +location is relative to the top-left corner of the image. +\item[getBinSize()] Returns the size of each bin, in pixels. +\item[getBinCount()] Returns the number of bins in both the horizontal (width) and vertical +(height) directions. +\item[getBinInterval()] Returns the bin intervals for both the x and y axis, defined as the +number of pixels between the first pixel of a bin and that o f the adjacent bin. +\item[getWorkingRange()] Returns the range of values that are included in the average +calculation (not clipped), and may extend beyond the normalized [0.0, 1.0] range of the +optical output. +\item[getAverages()] Returns the average values for all bins normalized such that [0.0, 1.0] +maps to the optical range of the output. Argus excludes input pixels that have values outside the working range +\methodname{getWorkingRange()} from the average calculation, and counts them as clipped +pixels \methodname{getClipCounts()}. +\item[getClipCounts()] Returns, for all bins, the number of pixels whose value exceeds the working +range and have been excluded from average calculation. +\end{description} + +\section{BayerSharpnessMap} + +BayerSharpnessMap generates sharpness metrics that can be used to determine +the correct position of the lens to achieve the best focus. + +This extension introduces two new interfaces: +\subsection{IBayerSharpnessMapSettings} Provides methods to set Bayer sharpness map. +\classname{IBayerSharpnessMapSettings} defines two methods: + +\begin{description}[style=nextline,align=left,leftmargin=4em] +\item[setBayerSharpnessMapEnable()] Enables or disables Bayer sharpness map generation. +When enabled, \classname{CaptureMetadata} returned by completed captures will expose the +\classname{IBayerSharpnessMap} interface. +\item[getBayerSharpnessMapEnable()] Returns whether or not Bayer sharpness map generation +is enabled. +\end{description} + +\subsection{IBayerSharpnessMap} Provides methods to get Bayer sharpness metrics. Each metric +is a normalized floating-point value representing the estimated sharpness for a particular color +channel and pixel region, called bins, where 0.0 and 1.0 map to the minimum and maximum possible +sharpness values, respectively. + +The \classname{IBayerSharpnessMap} interface supports the following methods: + +\begin{description}[style=nextline,align=left,leftmargin=4em] +\item[getBinStart()] Returns the starting location of the first bin, in pixels, where the +location is relative to the top-left corner of the image. +\item[getBinSize()] Returns the size of each bin, in pixels. +\item[getBinCount()] Returns the number of bins in both the horizontal (width) and vertical +(height) directions. +\item[getBinInterval()] Returns the bin intervals for both the x and y axis, defined as the +number of pixels between the first pixel of a bin and that of the adjacent bin. +\item[getSharpnessValue()] Returns the sharpness values for all bins and color channels. +\end{description} + +\section{NonLinearHistogram} + +NonLinearHistogram provides a method to interpret the compressed histogram data correctly. + +This extension introduces one new interface: +\subsection{INonLinearHistogram} This interface returns the normalized bin values to correctly +interpret the compressed bayer histogram data. This interface is available from histogram child +objects returned by \methodname{ICaptureMetadata::getBayerHistogram()}. + +\classname{INonLinearHistogram} defines following method: +\begin{description}[style=nextline,align=left,leftmargin=4em] +\item[getHistogramBinValues()] Returns a floating point vector having normalized bins which maps +the bin indexes of histogram \methodname{IBayerHistogram::getHistogram()}to the actual pixel +values after considering compression. This vector has the same count as the vector returned by +\methodname{IBayerHistogram::getBinCount()}. +For Example: + +\begin{lstlisting} +IBayerHistogram->getHistogram(&histogram); +INonLinearHistogram->getBinValues(&values); +for(int i = 0 ; i < histogram.size() ; i++) +{ + cout<<" bin: " << i + <<" normalized bin Value: " << values[i] + <<" frequency: " << histogram[i]; +} +\end{lstlisting} +\end{description} + +\section{PwlWdrSensorMode} + +PwlWdrSensorMode provideds extra functionalities for the Piecewise Linear (PWL) +Wide Dynamic Range (WDR) sensor mode type. + +This extension introduces one new interface: +\subsection{IPwlWdrSensorMode} This interface returns a list of normalized float coordinates (x,y) +that defines the PWL compression curve used in the PWL WDR mode. +This PWL compression curve is used by the sensor to compress WDR pixel values before sending +them over CSI. This is done to save bandwidth for data transmission over +VI-CSI. The compression converts the WDR pixel values from InputBitDepth +space to OutputBitDepth space. The Bit depths can be +obtained by using the respective methods in the ISensorMode interface. +@see ISensorMode + +\classname{IPwlWdrSensorMode} defines the following methods: +\begin{description}[style=nextline,align=left,leftmargin=4em] +\item[getControlPointCount()] Returns the number of control points coordinates in the +Piecewise Linear compression curve. +\item[getControlPoints()] Returns the Piecewise Linear (PWL) compression curve coordinates. +\end{description} + +\section{DolWdrSensorMode} + +DolWdrSensorMode provides extra functionalities for the Digital Overlap (DOL) Wide Dynamic +Range (WDR) sensor mode type. + +This extension introduces one new interface: +\subsection{IDolWdrSensorMode} This interface returns the extended properties specific to +DOL WDR sensor mode. DOL WDR is a multi-exposure technology that enables the fusion of +various exposures from a single frame to produce a WDR image. Basic sensor mode +properties are available through the \classname{ISensorMode} interface. + +\classname{IDolWdrSensorMode} defines the following methods: +\begin{description}[style=nextline,align=left,leftmargin=4em] +\item[getExposureCount()] Returns the number of exposures captured per frame for this +DOL WDR mode. +\item[getOpticalBlackRowCount()] Returns the number of Optical Black rows at the start +of each exposure in a DOL WDR frame. +\item[getVerticalBlankPeriodRowCount()] Populates the verticalBlankPeriodRowCounts vector to +store the vertical blank period rows per DOL WDR exposure. Size of the vector is +\methodname{getExposureCount()} - 1 count values. +\item[getLineInfoMarkerWidth()] Returns the line info markers width in pixels. +These occur at the start of each pixel row to distinguish row types. +\item[getLeftMarginWidth()] Returns the number of margin pixels on the left per row. +\item[getRightMarginWidth()] Returns the number of margin pixels on the right per row. +\item[getPhysicalResolution()] Returns the physical resolution derived due to interleaved +exposure output from DOL WDR frames. +\end{description} + +\end{document} diff --git a/jetson_multimedia_api/argus/docs/extensions/Makefile b/jetson_multimedia_api/argus/docs/extensions/Makefile new file mode 100644 index 0000000..6df470c --- /dev/null +++ b/jetson_multimedia_api/argus/docs/extensions/Makefile @@ -0,0 +1,67 @@ +# Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +LATEX=pdflatex +LATEXOPT=--shell-escape +NONSTOP=--interaction=nonstopmode + +LATEXMK=latexmk +LATEXMKOPT=-pdf +CONTINUOUS=-pvc + +MAIN=ArgusExt +SOURCES=$(MAIN).tex Makefile +FIGURES := $(shell find figures/* images/* -type f) + +all: $(MAIN).pdf + +.refresh: + touch .refresh + +$(MAIN).pdf: $(MAIN).tex .refresh $(SOURCES) $(FIGURES) + $(LATEXMK) $(LATEXMKOPT) $(CONTINUOUS) \ + -pdflatex="$(LATEX) $(LATEXOPT) $(NONSTOP) %O %S" $(MAIN) + +force: + touch .refresh + rm $(MAIN).pdf + $(LATEXMK) $(LATEXMKOPT) $(CONTINUOUS) \ + -pdflatex="$(LATEX) $(LATEXOPT) %O %S" $(MAIN) + +clean: + $(LATEXMK) -C $(MAIN) + rm -f $(MAIN).pdfsync + rm -rf *~ *.tmp + rm -f *.bbl *.blg *.aux *.end *.fls *.log *.out *.fdb_latexmk + rm -f .refresh + +once: + $(LATEXMK) $(LATEXMKOPT) -pdflatex="$(LATEX) $(LATEXOPT) %O %S" $(MAIN) + +debug: + $(LATEX) $(LATEXOPT) $(MAIN) + +.PHONY: clean force once all diff --git a/jetson_multimedia_api/argus/include/Argus/Argus.h b/jetson_multimedia_api/argus/include/Argus/Argus.h new file mode 100644 index 0000000..f0e911b --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Argus.h @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Main Include File + * + * @b Description: This is the main include file for libargus applications. + */ + +#ifndef _ARGUS_H +#define _ARGUS_H + +/** + * @defgroup LibargusAPI Libargus Camera API + * + * Libargus is an API for acquiring images and associated metadata from cameras. + * The fundamental libargus operation is a capture: + * acquiring an image from a sensor and processing it into a final output image. + * + * Currently, libargus is supported on Android and all Jetson Linux platforms. + * + * Libargus is designed to address a number of fundamental requirements: + * + * - Support for a wide variety of use cases (traditional photography, computational photography, + * video, computer vision, and other application areas.) + * To this end, libargus is a frame-based API; every capture is triggered by an explicit request that + * specifies exactly how the capture is to be performed. + * + * - Support for multiple platforms, including L4T and Android. + * + * - Efficient and simple integration into applications and larger frameworks. In support of this, + * libargus delivers images with EGLStreams, which are directly supported by other system components + * such as OpenGL and Cuda, and which require no buffer copies during delivery to the consumer. + * + * - Expansive metadata along with each output image. + * + * - Support for multiple sensors, including both separate control over independent sensors and + * access to synchronized multi-sensor configurations. (The latter are unsupported in the current + * release. When support is added, it will be available on only some NVIDIA platforms.) + * + * - Version stability and extensibility, which are provided by unchanging virtual interfaces and + * the ability for vendors to add specialized extension interfaces. + * + * Libargus provides functionality in a number of different areas: + * + * - Captures with a wide variety of settings. + * + * - Optional autocontrol (such as auto-exposure and auto-white-balance.) + * + * - Libraries that consume the EGLStream outputs in different ways; for example, jpeg encoding or + * direct application access to the images. + * + * - Metadata delivery via both libargus events and EGLStream metadata. + * + * - Image post-processing such as noise reduction and edge sharpening. + * + * - Notification of errors, image acquisition start, and other events via synchronous event queues. + * + * Functionality not provided by libargus: + * + * - Auto-focus. (Planned to be added in a later release.) + * + * - Reprocessing of YUV images (such as that required by Android’s Zero Shutter Lag feature.) + * + * - Reprocessing of Bayer (raw) images. (Planned to be added in a later release.) + * + * @defgroup ArgusObjects Objects and Interfaces + * This module provides a list of libargus objects and the interfaces that they support. + * Children of objects in this list describe either child InterfaceProviders provided by + * the object or specialized types of the object (ie. Event types). + * @ingroup LibargusAPI + * + * @defgroup ArgusExtensions Extensions + * This module provides a list of extensions currently available for libargus. + * @ingroup LibargusAPI + */ + +/** + * @ifnot SWDOCS_L4T + * @mainpage + * Proceed to the \ref LibargusAPI module for libargus documentation. + * @endif + */ + +#include + +#include "Argus/UUID.h" +#include "Argus/Types.h" +#include "Argus/Stream.h" + +#include "Argus/BufferStream.h" +#include "Argus/CameraDevice.h" +#include "Argus/CameraProvider.h" +#include "Argus/CaptureMetadata.h" +#include "Argus/CaptureSession.h" +#include "Argus/EGLImage.h" +#include "Argus/EGLStream.h" +#include "Argus/EGLSync.h" +#include "Argus/Event.h" +#include "Argus/EventProvider.h" +#include "Argus/EventQueue.h" +#include "Argus/Request.h" +#include "Argus/Settings.h" + +#endif diff --git a/jetson_multimedia_api/argus/include/Argus/BufferStream.h b/jetson_multimedia_api/argus/include/Argus/BufferStream.h new file mode 100644 index 0000000..d4306c0 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/BufferStream.h @@ -0,0 +1,408 @@ +/* + * Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: BufferStream API + * + * @b Description: Defines an OutputStream type used to write to application-managed buffers. + */ + +#ifndef _ARGUS_BUFFER_STREAM_H +#define _ARGUS_BUFFER_STREAM_H + +namespace Argus +{ + +/** + * @defgroup ArgusBufferOutputStream BufferOutputStream + * @ingroup ArgusOutputStream + * @ref ArgusOutputStream type that writes to application-managed buffers (STREAM_TYPE_BUFFER). + * + * Buffer-based OutputStream objects maintain a set of Buffer objects that are + * created by the application to wrap native image buffers allocated and owned + * by the application. These Buffer objects do not take possession of the native + * resources, which continue to be owned by the application; rather, they are used + * to control data access between libargus (as capture results are written) and the + * application (as the capture results are read). + * + * Every Buffer stream is associated with a single BufferType, which corresponds + * to the native resource type that is being wrapped by its Buffers. This BufferType + * dictates which interfaces will be supported by the OutputStream and the child + * BufferSettings and Buffer objects created by it, and is immutable after stream + * creation. + * + * In addition to image data, Buffer objects may be optionally used to transport + * sync information between libargus and the application in order to support hardware + * level synchronization and pipelining across the API boundary. The type of sync + * information, and the sync interfaces supported by a Buffer, is controlled by + * the SyncType. + */ +/** + * @defgroup ArgusBufferOutputStreamSettings BufferOutputStreamSettings + * @ingroup ArgusOutputStreamSettings + * Settings type used to configure/create @ref ArgusBufferOutputStream streams (STREAM_TYPE_BUFFER). + */ + +/** + * @ref ArgusOutputStream type that writes to application-managed Buffers. + * @ingroup ArgusOutputStreamSettings + */ +DEFINE_UUID(StreamType, STREAM_TYPE_BUFFER, c723d960,5231,11e7,9598,18,00,20,0c,9a,66); + +/** + * @defgroup ArgusBufferBuffer Buffer Types + * @ingroup ArgusBuffer + * The buffer type describes the type of the image resource being wrapped by the @ref ArgusBuffer. + */ +/** + * @defgroup ArgusBufferBufferSettings Buffer Types + * @ingroup ArgusBufferSettings + * Provides buffer type specific configuration settings. + */ +DEFINE_NAMED_UUID_CLASS(BufferType); +DEFINE_UUID(BufferType, BUFFER_TYPE_NONE, c723d961,5231,11e7,9598,18,00,20,0c,9a,66); + +/** + * @defgroup ArgusBufferSync Sync Types + * @ingroup ArgusBuffer + * The sync type describes the type of sync object to use with the @ref ArgusBuffer. + */ +/** + * @defgroup ArgusBufferBufferSettings Buffer Types + * @ingroup ArgusBufferSettings + * Provides sync type specific configuration settings. + */ +DEFINE_NAMED_UUID_CLASS(SyncType); +DEFINE_UUID(SyncType, SYNC_TYPE_NONE, c723d962,5231,11e7,9598,18,00,20,0c,9a,66); + +/** + * Object that wraps an application-managed buffer for use as a capture request destination. + * + * Every Buffer is associated with a single BufferType, which corresponds to the + * native resource type that is being wrapped by it, and dictates which interfaces + * it will support. + * + * In addition to image data, Buffer objects may optionally transport sync + * information between libargus and the application in order to support hardware + * level synchronization and pipelining across the API boundary. The type of sync + * information, and the sync interfaces supported by a Buffer, is controlled by + * the SyncType. + * + * All Buffer objects will support the IBuffer interface in order to query the + * core BufferType and SyncType. + * + * @defgroup ArgusBuffer Buffer + * @ingroup ArgusObjects + */ +class Buffer : public InterfaceProvider, public Destructable +{ +protected: + ~Buffer() {} +}; + +/** + * Container for settings used to configure/create a @ref ArgusBuffer. + * + * These objects are created by IBufferOutputStream::createBufferSettings, and + * are used to configure the various parameters required for Buffer creation. + * Since the Buffer OutputStream which creates this object uses a single + * BufferType and SyncType, the interfaces supported by BufferSettings objects + * are dictated by these types. + * + * @defgroup ArgusBufferSettings BufferSettings + * @ingroup ArgusObjects + */ +class BufferSettings : public InterfaceProvider, public Destructable +{ +protected: + ~BufferSettings() {} +}; + +/** + * @class IBufferOutputStreamSettings + * + * Interface that exposes the configuration available to Buffer-based OutputStreams. + * + * @ingroup ArgusBufferOutputStreamSettings + */ +DEFINE_UUID(InterfaceID, IID_BUFFER_OUTPUT_STREAM_SETTINGS, + c723d963,5231,11e7,9598,18,00,20,0c,9a,66); +class IBufferOutputStreamSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_BUFFER_OUTPUT_STREAM_SETTINGS; } + + /** + * Sets the BufferType for the stream. This controls which type of native buffer + * type will be wrapped by this OutputStream, and thus will dictate which interfaces + * are supported by the OutputStream and child BufferSettings and Buffer objects. + * This value defaults to BUFFER_TYPE_NONE and must be set by the application + * to a BufferType supported by this libargus implementation. + * + * @param[in] type The BufferType to use for the new OutputStream. + */ + virtual Status setBufferType(const BufferType& type) = 0; + + /** + * Returns the BufferType to be used for the stream. + */ + virtual BufferType getBufferType() const = 0; + + /** + * Sets the SyncType for the stream. This controls which type of native sync + * information will be attached to Buffers for sync support between libargus + * and the application. + * This value defaults to SYNC_TYPE_NONE, which means that no sync information + * will be supported. In this case, both the application and libargus are + * expected to be done all read and/or write operations before passing the + * Buffer to the other. + * + * @param[in] type The SyncType to use for the new OutputStream. + */ + virtual Status setSyncType(const SyncType& type) = 0; + + /** + * Returns the SyncType to be used for the stream. + */ + virtual SyncType getSyncType() const = 0; + + /** + * Sets the metadata enable for the stream. When metadata is enabled, a CaptureMetadata + * object may be attached to each Buffer when it is output from libargus as the result + * of a successful capture request (see IBuffer::getMetadata). + * + * @param[in] enable Whether or not metadata is enabled for the stream. + */ + virtual void setMetadataEnable(bool enable) = 0; + + /** + * Returns the metadata enable. + */ + virtual bool getMetadataEnable() const = 0; + +protected: + ~IBufferOutputStreamSettings() {} +}; + +/** + * @class IBufferOutputStream + * + * Interface that provides the methods used with Buffer-based OutputStreams. + * + * @ingroup ArgusBufferOutputStream + */ +DEFINE_UUID(InterfaceID, IID_BUFFER_OUTPUT_STREAM, c723d964,5231,11e7,9598,18,00,20,0c,9a,66); +class IBufferOutputStream : public Interface +{ +public: + static const InterfaceID& id() { return IID_BUFFER_OUTPUT_STREAM; } + + /** + * Returns the BufferType of the stream. + */ + virtual BufferType getBufferType() const = 0; + + /** + * @returns the SyncType of the stream. + */ + virtual SyncType getSyncType() const = 0; + + /** + * Creates a BufferSettings object. This Destructable object is used to configure + * the settings for a new Buffer object, including things like the native buffer + * handle that is to be wrapped by the Buffer. The interfaces and settings that + * are supported by the new BufferSettings object are dictated by the BufferType + * and SyncType of the creating OutputStream. + * + * @param[out] status An optional pointer to return success/status. + * + * @returns a new BufferSettings, or NULL on failure (error code written to 'status'). + */ + virtual BufferSettings* createBufferSettings(Status* status = NULL) = 0; + + /** + * Creates a Buffer object. All of the settings used to configure Buffer creation + * are provided by the BufferSettings object (which continues to be owned by the + * application and can be reused until destroyed). + * + * New Buffer objects are returned to the application in the "acquired" state, + * meaning that the application must call releaseBuffer on the Buffer before it + * may be used by libargus. + * + * @param[in] settings the buffer settings to use for Buffer creation. + * @param[out] status An optional pointer to return success/status. + * + * @returns a new BufferSettings, or NULL on failure (error code written to 'status'). + */ + virtual Buffer* createBuffer(const BufferSettings* settings, Status* status = NULL) = 0; + + /** + * Acquires a Buffer from the stream that was written to by a libargus capture request. + * + * Buffers are acquired from the stream in FIFO order relative to when they are + * produced by libargus (which may not match the original request submission order). + * If a non-zero timeout is provided, this operation will block until a new Buffer + * is produced by libargus or the timeout period is exceeded. + * + * Once a Buffer has been acquired, the application will have exclusive access to the + * Buffer's image data, which it will retain until the Buffer is released back to the + * stream for further capture request use via releaseBuffer. Buffers may also be + * destroyed while acquired; doing so prevents any further use of the Buffer object + * within the Stream and releases any buffer resources or references held by the Buffer + * object. + * + * If sync support has been enabled for this Stream/Buffer (ie. SyncType is not + * STREAM_TYPE_NONE), hardware synchronization capabilities may be used to allow hardware + * operations on a Buffer to still be pending when it is acquired from or released back to + * libargus. In this case, the returned Buffer will contain the output sync information + * provided by libargus which the application must obey before accessing the Buffer's + * image data. Similarly, the application may need to write input sync information to + * the Buffer before calling releaseBuffer such that libargus will obey the sync before + * the Buffer is written to by a new capture request. The exact mechanism used for reading + * and writing this sync state depends on and is documented by the various SyncTypes and + * their corresponding interfaces. + * + * @param[in] timeout The amount of time to allow for the acquire. + * @param[out] status An optional pointer to return success/status. + * + * @returns A Buffer that has been written to by a capture request + */ + virtual Buffer* acquireBuffer(uint64_t timeout = TIMEOUT_INFINITE, Status* status = NULL) = 0; + + /** + * Release a Buffer back to the stream to make it available for a future capture request. + * + * Once a Buffer has been released to the Stream, libargus will have exclusive access to + * the Buffer's image resources until it is once again acquired by the application via + * acquireBuffer. Any buffer access outside of libargus during this time may lead to + * undefined results. + * + * While it is often the case that Buffers may be used by libargus in the order they are + * released, this is not a requirement; libargus may reuse Buffers in any order once they + * have been released. + * + * If sync support has been enabled for this StreamBuffer (ie. SyncType is not + * STREAM_TYPE_NONE), sync information may need to be written to the Buffer by the client + * before releaseBuffer is called. The exact mechanism used for writing this sync state + * depends on and is documented by the various SyncTypes and their corresponding interfaces. + * + * Note that while it is safe to destroy a Buffer object while it has been released to + * libargus, it is possible that pending requests may be using this Buffer and may still + * output Events that reference the Buffer object, and so the application is responsible + * for making sure that it does not use any Buffer object that it has previously destroyed. + * If there are no pending requests using a particular Stream, destroying any of its + * released Buffers will prevent them from ever being used or returned by libargus again. + * + * @param[in] buffer The Buffer to release back to the stream. + */ + virtual Status releaseBuffer(Buffer* buffer) = 0; + + /** + * Signals the end of the stream. + * + * Once the end of stream has been signalled on a stream, any call made to acquireBuffer + * will immediately (ignoring the timeout parameter) return NULL with a STATUS_END_OF_STREAM + * status when the following is true: + * 1) There are no Buffers immediately available to be acquired, and + * 2) There are no capture requests pending writes to the stream. + * This implies that no pending or completed frames will be lost, and that all pending or + * completed frames must be acquired before an END_OF_STREAM status is returned. + * + * If any thread is blocked in acquireBuffer when the end of stream is signalled, and the + * above conditions are met, then that thread will unblock and return END_OF_STREAM immediately. + */ + virtual Status endOfStream() = 0; + +protected: + ~IBufferOutputStream() {} +}; + +/** + * @class IBuffer + * + * Interface that provides the core methods for Buffer objects. + * + * @ingroup ArgusBuffer + */ +DEFINE_UUID(InterfaceID, IID_BUFFER, c723d965,5231,11e7,9598,18,00,20,0c,9a,66); +class IBuffer : public Interface +{ +public: + static const InterfaceID& id() { return IID_BUFFER; } + + /** + * Returns the BufferType of the Buffer. + */ + virtual BufferType getBufferType() const = 0; + + /** + * Returns the SyncType of the Buffer. + */ + virtual SyncType getSyncType() const = 0; + + /** + * Sets the client data for the Buffer. + * This is provided as a convenience for applications to be able to map Buffers to + * other client-managed data. It is not used at all by the libargus implementation, + * and is returned as-is by getClientData. + * Default value: NULL + * + * @param[in] clientData The client data pointer to set in the buffer. + */ + virtual void setClientData(const void* clientData) = 0; + + /** + * Returns the client data from the Buffer. + */ + virtual const void* getClientData() const = 0; + + /** + * Returns the CaptureMetadata object that was attached to this Buffer when it was last + * output to the stream from the result of a successful capture request. + * + * This method should only ever be called while the Buffer is in an acquired state; ie. the + * time between when the Buffer was acquired by IBufferOutputStream::acquireBuffer and when + * it was released by IBufferOutputStream::releaseBuffer. If called outside of the acquired + * state, NULL will be returned. Similarly, the returned object will only remain valid so + * long as the Buffer is acquired -- if this object or any of its interfaces are accessed + * outside of the acquired state, undefined results or abnormal process termination may occur. + * + * Metadata will only be written if metadata is enabled for the stream (see + * IBufferOutputStreamSettings::setMetadataEnable). NULL may also still be returned if there + * were any capture errors or metadata is otherwise unavailable. + */ + virtual const CaptureMetadata* getMetadata() const = 0; + +protected: + ~IBuffer() {} +}; + +} // namespace Argus + +#endif // _ARGUS_BUFFER_STREAM_H diff --git a/jetson_multimedia_api/argus/include/Argus/CameraDevice.h b/jetson_multimedia_api/argus/include/Argus/CameraDevice.h new file mode 100644 index 0000000..321c5f6 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/CameraDevice.h @@ -0,0 +1,306 @@ +/* + * Copyright (c) 2016-2020, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Camera Device API + * + * @b Description: This file defines objects representing a single camera device. + */ + +#ifndef _ARGUS_CAMERA_DEVICE_H +#define _ARGUS_CAMERA_DEVICE_H + +namespace Argus +{ + +/** + * Object representing a single camera device. + * + * CameraDevices are provided by a CameraProvider and are used to + * access the camera devices available within the system. + * Each device is based on a single sensor or a set of synchronized sensors. + * + * @see ICameraProvider::getCameraDevices + * + * @defgroup ArgusCameraDevice CameraDevice + * @ingroup ArgusObjects + */ +class CameraDevice : public InterfaceProvider +{ +protected: + ~CameraDevice() {} +}; + +/** + * @class ICameraProperties + * + * Interface to the core CameraDevice properties. + * + * @ingroup ArgusCameraDevice + */ +DEFINE_UUID(InterfaceID, IID_CAMERA_PROPERTIES, 436d2a73,c85b,4a29,bce5,15,60,6e,35,86,91); +class ICameraProperties : public Interface +{ +public: + static const InterfaceID& id() { return IID_CAMERA_PROPERTIES; } + + /** + * Returns the camera UUID. + * In UUID, clock_seq contains low 16 bits of GUID, + * node[6] contains high 48 bits of GUID. + */ + virtual UUID getUUID() const = 0; + + /** + * Returns the camera sensor placement position on the module. + */ + virtual SensorPlacement getSensorPlacement() const = 0; + + /** + * Returns the maximum number of regions of interest supported by AE. + * A value of 0 means that the entire image is the only supported region of interest. + * + * @see IAutoControlSettings::setAeRegions() + */ + virtual uint32_t getMaxAeRegions() const = 0; + + /** + * Returns the minimum size of resultant region required by AE. + * + * @see IAutoControlSettings::setAeRegions() + */ + virtual Size2D getMinAeRegionSize() const = 0; + + /** + * Returns the maximum number of regions of interest supported by AWB. + * A value of 0 means that the entire image is the only supported region of interest. + * + * @see IAutoControlSettings::setAwbRegions() + */ + virtual uint32_t getMaxAwbRegions() const = 0; + + /** + * Returns the maximum number of regions of interest supported by AF. + * A value of 0 means that the entire image is the only supported region of interest. + * + * @see IAutoControlSettings::setAfRegions() + */ + virtual uint32_t getMaxAfRegions() const = 0; + + /** + * Returns only the basic available sensor modes that do not have an associated + * extension. Basic mode types include Depth, RGB, YUV and Bayer types. + * + * @param[out] modes A vector that will be populated with the sensor modes. + * + * @returns success/status of the call. + */ + virtual Status getBasicSensorModes(std::vector* modes) const = 0; + + /** + * Returns all the available sensor modes including the ones that have extensions. + * The extended modes support some form of Wide Dynamic Range (WDR) technology. + * + * All the returned modes will support the basic sensor mode interface. + * @see ISensorMode + * + * @param[out] modes A vector that will be populated with the sensor modes. + * + * @returns success/status of the call. + */ + virtual Status getAllSensorModes(std::vector* modes) const = 0; + + /** + * Returns all the recommended aperture positions. + * + * @param[out] positions a vector that will be populated with the aperture positions. + * + * @returns success/status of the call. + */ + virtual Status getAperturePositions(std::vector* positions) const = 0; + + /** + * Returns all the available aperture f-numbers. + * + * @param[out] fnumbers A pointer to a vector to be populated with the + * aperture f-numbers. + * + * @returns success/status of the call. + */ + virtual Status getAvailableApertureFNumbers(std::vector* fnumbers) const = 0; + + /** + * Returns the valid range of focuser positions. + * The units are focuser steps. + */ + virtual Range getFocusPositionRange() const = 0; + + /** + * Returns the valid range of aperture positions. + * The units are aperture positions. + */ + virtual Range getAperturePositionRange() const = 0; + + /** + * Returns the valid range of aperture step positions per second. + * The units are aperture motor steps/second. + */ + virtual Range getApertureMotorSpeedRange() const = 0; + + /** + * Returns the supported range of ISP digital gain. + */ + virtual Range getIspDigitalGainRange() const = 0; + + /** + * Returns the supported range of Exposure Compensation. + */ + virtual Range getExposureCompensationRange() const = 0; + + /** + * Returns the model name of the device. + */ + virtual const std::string& getModelName() const = 0; + + /** + * Returns the module string for the device. + * Contains the device's name, position, and partial model number. + * This string is unique for each device on the system. + */ + virtual const std::string& getModuleString() const = 0; + +protected: + ~ICameraProperties() {} +}; + +/** + * Child object representing a CameraDevice's sensor mode, returned by + * ICameraProperties::getAllSensorModes + * + * @defgroup ArgusSensorMode SensorMode + * @ingroup ArgusCameraDevice + */ +class SensorMode : public InterfaceProvider +{ +protected: + ~SensorMode() {} +}; + +/** + * @class ISensorMode + * + * Interface to the core properties of a SensorMode. + * + * @ingroup ArgusSensorMode + */ +DEFINE_UUID(InterfaceID, IID_SENSOR_MODE, e69015e0,db2a,11e5,a837,18,00,20,0c,9a,66); +class ISensorMode : public Interface +{ +public: + static const InterfaceID& id() { return IID_SENSOR_MODE; } + + /** + * Returns the image resolution, in pixels. + */ + virtual Size2D getResolution() const = 0; + + /** + * Returns the sensor crop region + */ + virtual Rectangle getCrop() const = 0; + + /** + * Returns the binning factor + */ + virtual float getBinningFactor() const = 0; + + /** + * Returns the supported exposure time range (in nanoseconds). + */ + virtual Range getExposureTimeRange() const = 0; + + /** + * Returns the hdr ratio range, it is the ratio of long exposure vs short exposure. + * When min and/or max is greater than 1, long exposure range is given by getExposureTimeRange() + * and short exposure range is computed as following: + * short exposure min = getExposureTimeRange().min() / getHdrRatioRange().max() + * short exposure max = getExposureTimeRange().max() / getHdrRatioRange().min(). + */ + virtual Range getHdrRatioRange() const = 0; + + /** + * Returns the supported frame duration range (in nanoseconds). + */ + virtual Range getFrameDurationRange() const = 0; + + /** + * Returns the supported analog gain range. + */ + virtual Range getAnalogGainRange() const = 0; + + /** + * Returns the bit depth of the image captured by the image sensor in the + * current mode. For example, a wide dynamic range image sensor capturing + * 16 bits per pixel would have an input bit depth of 16. + */ + virtual uint32_t getInputBitDepth() const = 0; + + /** + * Returns the bit depth of the image returned from the image sensor in the + * current mode. For example, a wide dynamic range image sensor capturing + * 16 bits per pixel might be connected through a Camera Serial Interface + * (CSI-3) which is limited to 12 bits per pixel. The sensor would have to + * compress the image internally and would have an output bit depth not + * exceeding 12. + */ + virtual uint32_t getOutputBitDepth() const = 0; + + /** + * Describes the type of the sensor (Bayer, Yuv, etc.) and key modes of + * operation which are enabled in the sensor mode (Wide-dynamic range, + * Piecewise Linear Compressed output, etc.) + */ + virtual SensorModeType getSensorModeType() const = 0; + + /** + * Describes the bayer phase of Bayer mode + */ + virtual BayerPhase getBayerPhase() const = 0; + + /** + * Checks if the buffer provided is supported by the camera device. + */ + virtual bool isBufferFormatSupported(Buffer* buffer) const = 0; +protected: + ~ISensorMode() {} +}; + +} // namespace Argus + +#endif // _ARGUS_CAMERA_DEVICE_H diff --git a/jetson_multimedia_api/argus/include/Argus/CameraProvider.h b/jetson_multimedia_api/argus/include/Argus/CameraProvider.h new file mode 100644 index 0000000..a862e78 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/CameraProvider.h @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Camera Provider API + * + * @b Description: This file defines the CameraProvider object and interface. + */ + +#ifndef _ARGUS_CAMERA_PROVIDER_H +#define _ARGUS_CAMERA_PROVIDER_H + +namespace Argus +{ + +/** + * Object providing the entry point to the libargus runtime. + * + * It provides methods for querying the cameras in the system and for + * creating camera devices. + * + * @defgroup ArgusCameraProvider CameraProvider + * @ingroup ArgusObjects + */ +class CameraProvider : public InterfaceProvider, public Destructable +{ +public: + + /** + * Creates and returns a new CameraProvider. + * If a CameraProvider object has already been created, + * this method will return a pointer to that object. + * + * @param[out] status Optional pointer to return success/status of the call. + */ + static CameraProvider* create(Status* status = NULL); + +protected: + ~CameraProvider() {} +}; + +/** + * @class ICameraProvider + * + * Interface to the core CameraProvider methods. + * + * @ingroup ArgusCameraProvider + */ +DEFINE_UUID(InterfaceID, IID_CAMERA_PROVIDER, a00f33d7,8564,4226,955c,2d,1b,cd,af,a3,5f); + +class ICameraProvider : public Interface +{ +public: + static const InterfaceID& id() { return IID_CAMERA_PROVIDER; } + + /** + * Returns the version number of the libargus implementation. This string will begin with + * the major and minor version numbers, separated by a period, and may be followed by + * any additional vendor-specific version information. + */ + virtual const std::string& getVersion() const = 0; + + /** + * Returns the vendor string for the libargus implementation. + */ + virtual const std::string& getVendor() const = 0; + + /** + * Returns whether or not an extension is supported by this libargus implementation. + * This is generally used during process initialization to ensure that all required + * extensions are present before initializing any CaptureSessions. Note, however, + * that having an extension be supported does not imply that the resources or + * devices required for that extension are available; standard interface checking + * and any other extension-specific runtime checks, as described by the extension + * documentation, should always be performed before any extension is used. + * @param[in] extension the extension identifier. + */ + virtual bool supportsExtension(const ExtensionName& extension) const = 0; + + /** + * Returns the list of camera devices that are exposed by the provider. This + * includes devices that may already be in use by active CaptureSessions, and + * it's the application's responsibility to check device availability and/or + * handle any errors returned when CaptureSession creation fails due to a + * device already being in use. + * @param[out] devices A vector that will be populated by the available devices. + * + * @returns success/status of the call. + */ + virtual Status getCameraDevices(std::vector* devices) const = 0; + + /** + * Creates and returns a new CaptureSession using the given device. + * STATUS_UNAVAILABLE will be placed into @c status if the device is already in use. + * @param[in] device The device to use for the CaptureSession. + * @param[out] status Optional pointer to return success/status of the call. + * @returns The new CaptureSession, or NULL if an error occurred. + */ + virtual CaptureSession* createCaptureSession(CameraDevice* device, + Status* status = NULL) = 0; + + /** + * Creates and returns a new CaptureSession using the given device(s). + * STATUS_UNAVAILABLE will be placed into @c status if any of the devices are already in use. + * @param[in] devices The device(s) to use for the CaptureSession. + * @param[out] status Optional pointer to return success/status of the call. + * @returns The new CaptureSession, or NULL if an error occurred. + */ + virtual CaptureSession* createCaptureSession(const std::vector& devices, + Status* status = NULL) = 0; + +protected: + ~ICameraProvider() {} +}; + +} // namespace Argus + +#endif // _ARGUS_CAMERA_PROVIDER_H diff --git a/jetson_multimedia_api/argus/include/Argus/CaptureMetadata.h b/jetson_multimedia_api/argus/include/Argus/CaptureMetadata.h new file mode 100644 index 0000000..0764e57 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/CaptureMetadata.h @@ -0,0 +1,465 @@ +/* + * Copyright (c) 2016-2023, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Capture Metadata API + * + * @b Description: Defines the CaptureMetadata objects and interfaces. + */ + +#ifndef _ARGUS_CAPTURE_METADATA_H +#define _ARGUS_CAPTURE_METADATA_H + +namespace Argus +{ + +/** + * Container for metadata generated by a single completed capture. + * + * @defgroup ArgusCaptureMetadata CaptureMetadata + * @ingroup ArgusObjects + */ +class CaptureMetadata : public InterfaceProvider +{ +protected: + ~CaptureMetadata() {} +}; + +/** + * An object that holds a CaptureMetadata instance + * and is used to read the capture metadata from a consumer thread directly from + * the embedded EGLStream metadata. It exposes the same interfaces as + * CaptureMetadata, but is owned by the consumer. + */ +class CaptureMetadataContainer : public InterfaceProvider, public Destructable +{ +protected: + ~CaptureMetadataContainer() {} +}; + +/** + * @class IBayerHistogram + * + * Interface to Bayer histogram metadata (provided by ICaptureMetadata::getBayerHistogram()). + * + * Bins are evenly distributed across the possible range of values, each containing + * the number of pixels whose value fell within the range for that bin. + * + * @ingroup ArgusBayerHistogram + */ +DEFINE_UUID(InterfaceID, IID_BAYER_HISTOGRAM, 50bc4f1c,6424,beb7,baae,b0,90,c9,c3,25,9e); +class IBayerHistogram : public Interface +{ +public: + + static const InterfaceID& id() { return IID_BAYER_HISTOGRAM; } + + /** + * Returns the number of bins in the histogram. + */ + virtual uint32_t getBinCount() const = 0; + + /** + * Returns the histogram data. + * + * @param[out] histogram The output vector to store the histogram data. Upon successful + * return, this vector will be replaced with getBinCount() bin values, + * each containing per-channel pixel counts within a BayerTuple container. + */ + virtual Status getHistogram(std::vector< BayerTuple >* histogram) const = 0; + +protected: + + ~IBayerHistogram() {} +}; + +/** + * @class IRGBHistogram + * + * Interface to RGB histogram metadata (provided by ICaptureMetadata::getRGBHistogram()). + * + * Bins are evenly distributed across the possible range of values, each containing + * the number of pixels whose value fell within the range for that bin. + * + * @ingroup ArgusRGBHistogram + */ +DEFINE_UUID(InterfaceID, IID_RGB_HISTOGRAM, 50bc4f1d,6424,beb7,baae,b0,90,c9,c3,25,9e); +class IRGBHistogram : public Interface +{ +public: + + static const InterfaceID& id() { return IID_RGB_HISTOGRAM; } + + /** + * Returns the number of bins in the histogram. + */ + virtual uint32_t getBinCount() const = 0; + + /** + * Returns the histogram data. + * + * @param[out] histogram The output vector to store the histogram data. Upon successful + * return, this vector will be replaced with getBinCount() bin values, + * each containing per-channel pixel counts within an RGBTuple container. + */ + virtual Status getHistogram(std::vector< RGBTuple >* histogram) const = 0; + +protected: + + ~IRGBHistogram() {} +}; + +/** + * @class IStreamCaptureMetadata + * + * Interface to per-stream metadata (provided by ICaptureMetadata::getStreamMetadata()). + * + * @ingroup ArgusStreamCaptureMetadata + */ +DEFINE_UUID(InterfaceID, IID_STREAM_CAPTURE_METADATA, 61cbe0a8,0ee1,4c67,baae,02,02,1a,b8,d9,47); +class IStreamCaptureMetadata : public Interface +{ +public: + + static const InterfaceID& id() { return IID_STREAM_CAPTURE_METADATA; } + + /** + * Returns the clip rectangle used for this stream. + */ + virtual Rectangle getSourceClipRect() const = 0; + +protected: + + ~IStreamCaptureMetadata() {} +}; + +/** + * @class ICaptureMetadata + * + * Interface to the core capture metadata. + * + * @ingroup ArgusCaptureMetadata + * + * @defgroup ArgusStreamCaptureMetadata StreamMetadata + * Child stream metadata, returned by ICaptureMetadata::getStreamMetadata + * @ingroup ArgusCaptureMetadata + * + * @defgroup ArgusRGBHistogram RGBHistogram + * Child RGB histogram metadata, returned by ICaptureMetadata::getRGBHistogram + * @ingroup ArgusCaptureMetadata + * + * @defgroup ArgusBayerHistogram BayerHistogram + * Child Bayer histogram metadata, returned by ICaptureMetadata::getBayerHistogram + * @ingroup ArgusCaptureMetadata + */ +DEFINE_UUID(InterfaceID, IID_CAPTURE_METADATA, 5f6ac5d4,59e8,45d0,8bac,38,09,1f,f8,74,a9); +class ICaptureMetadata : public Interface +{ +public: + + static const InterfaceID& id() { return IID_CAPTURE_METADATA; } + + static const uint32_t NUM_COLOR_CORRECTION_ELEMENTS = 9; + static const uint32_t NUM_AWB_WB_ESTIMATE_ELEMENTS = 4; + + /** + * Returns the capture id (the value returned from ICaptureSession::capture()) + * of the capture that generated this metadata. + */ + virtual uint32_t getCaptureId() const = 0; + + /** + * Returns the @c clientData value for the Request used in the capture + * that generated this metadata. + * + * @see ICaptureSession::createRequest() + */ + virtual uint32_t getClientData() const = 0; + + /** + * Returns the per-stream metadata provider for @c stream. + * This object will provide the IStreamCaptureMetadata interface. + */ + virtual InterfaceProvider* getStreamMetadata(const OutputStream* stream) const = 0; + + /** + * Returns the Bayer histogram for this capture. + * This object will provide the IBayerHistogram interface. + */ + virtual const InterfaceProvider* getBayerHistogram() const = 0; + + /** + * Returns the RGB histogram for this capture. + * This object will provide the IRGBHistogram interface. + */ + virtual const InterfaceProvider* getRGBHistogram() const = 0; + + /** + * Returns true if and only if AE was locked for this capture. + */ + virtual bool getAeLocked() const = 0; + + /** + * Gets the AE regions of interest used for this capture. + * + * @param[in] regions A vector that will be populated with the AE regions used in capture. + * + * @returns success/status of the call. + */ + virtual Status getAeRegions(std::vector* regions) const = 0; + + /** + * Returns the rectangle of the bayer histogram region of interest. + */ + virtual Rectangle getBayerHistogramRegion() const = 0; + + /** + * Returns the state of AE when it ran for this capture. + */ + virtual AeState getAeState() const = 0; + + /** + * Returns the flicker state of this capture. + */ + virtual AeFlickerState getFlickerState() const = 0; + + /** + * Returns the aperture position. + */ + virtual int32_t getAperturePosition() const = 0; + + /** + * Returns the focuser position used for this capture (in focuser steps). + */ + virtual int32_t getFocuserPosition() const = 0; + + /** + * Returns the CCT calculated by AWB for this capture. + */ + virtual uint32_t getAwbCct() const = 0; + + /** + * Returns the AWB gains used for this capture. + */ + virtual BayerTuple getAwbGains() const = 0; + + /** + * Returns the AWB mode used for this capture. + */ + virtual AwbMode getAwbMode() const = 0; + + /** + * Gets the AWB regions of interest used for this capture. + * + * @param[in] regions A vector that will be populated with the AWB regions used in capture. + * + * @returns success/status of the call. + */ + virtual Status getAwbRegions(std::vector* regions) const = 0; + + /** + * Returns the AF mode used for this capture. + */ + virtual AfMode getAfMode() const = 0; + + /** + * Gets the AF regions of interest used for this capture. + * + * @param[in] regions A vector that will be populated with the AF regions used in capture. + * + * @returns success/status of the call. + */ + virtual Status getAfRegions(std::vector* regions) const = 0; + + /** + * Gets the sharpness score values calculated for corresponding AF regions. + * + * @param[in] values A vector that will be populated with the sharpness scores used in capture. + * + * @returns success/status of the call. + */ + virtual Status getSharpnessScore(std::vector* values) const = 0; + + /** + * @returns the state of AWB when it ran for this capture. + */ + virtual AwbState getAwbState() const = 0; + + /** + * Gets the current AWB WB estimate as a vector of NUM_AWB_WB_ESTIMATE_ELEMENTS values. + * @todo Document the meaning of an AWB WB estimate. + * + * @param[in] estimate A vector that will be populated with the AWB WB estimates. + * + * @returns success/status of the call. + */ + virtual Status getAwbWbEstimate(std::vector* estimate) const = 0; + + /** + * Returns the enable state for the client-supplied Color Correction Matrix. + */ + virtual bool getColorCorrectionMatrixEnable() const = 0; + + /** + * Gets the 3x3 client-supplied Color Correction Matrix as a flattened + * (row-major) vector of 9 values. This matrix is irrelevant if + * getColorCorrectionMatrixEnable() == false. + * + * @param[in] ccMatrix A vector that will be populated with the color correction matrix. + * + * @returns success/status of the call. + */ + virtual Status getColorCorrectionMatrix(std::vector* ccMatrix) const = 0; + + /** + * Returns the color saturation value used for this capture (including biasing). + */ + virtual float getColorSaturation() const = 0; + + /** + * Returns the time it took to integrate this capture (in nanoseconds). + * @todo Provide a more precise description of frame duration. + */ + virtual uint64_t getFrameDuration() const = 0; + + /** + * Returns the digital gain used for this capture. + */ + virtual float getIspDigitalGain() const = 0; + + /** + * Returns the frame readout time for this capture (in nanoseconds) from + * the beginning of the first line to the beginning of the last line. + */ + virtual uint64_t getFrameReadoutTime() const = 0; + + /** + * Returns the estimated scene brightness for this capture (in lux). + */ + virtual float getSceneLux() const = 0; + + /** + * Returns the sensor analog gain used for this capture. + */ + virtual float getSensorAnalogGain() const = 0; + + /** + * Returns the sensor exposure time for this capture (in nanoseconds). + */ + virtual uint64_t getSensorExposureTime() const = 0; + + /** + * Returns the ISO value used for this capture. + */ + virtual uint32_t getSensorSensitivity() const = 0; + + /** + * Returns the kernel (SOF) timestamp for the sensor (in nanoseconds). + * This is the time that the first data from this capture arrives from the sensor. + */ + virtual uint64_t getSensorTimestamp() const = 0; + + /** + * Returns true if and only if a user-specified tone map curve was used for this capture. + */ + virtual bool getToneMapCurveEnabled() const = 0; + + /** + * Returns the specified color channel for the tone mapping table + * (as a vector of NUM_TONE_MAP_ELEMENTS values). These values are irrelevant if + * getToneMapCurveEnabled() == false. + * + * @param[in] channel Specified the color channel for which the curve will be returned. + * @param[in] curve A vector that will be populated with the color curve used in capture. + * + * @returns success/status of the call. + */ + virtual Status getToneMapCurve(RGBChannel channel, std::vector* curve) const = 0; + +protected: + ~ICaptureMetadata() {} +}; + +/** + * @class IDenoiseMetadata + * + * Interface to denoise metadata. + * + * @ingroup ArgusCaptureMetadata + */ +DEFINE_UUID(InterfaceID, IID_DENOISE_METADATA, 7A461D23,6AE1,11E6,BDF4,08,00,20,0C,9A,66); +class IDenoiseMetadata : public Interface +{ +public: + static const InterfaceID& id() { return IID_DENOISE_METADATA; } + + /** + * Returns the denoise mode used for the capture. + */ + virtual DenoiseMode getDenoiseMode() const = 0; + + /** + * Returns the denoise strength used for the capture. + */ + virtual float getDenoiseStrength() const = 0; + +protected: + ~IDenoiseMetadata() {} +}; + +/** + * @class IEdgeEnhanceMetadata + * + * Interface to edge enhancement metadata. + * + * @ingroup ArgusCaptureMetadata + */ +DEFINE_UUID(InterfaceID, IID_EDGE_ENHANCE_METADATA, 7A461D24,6AE1,11E6,BDF4,08,00,20,0C,9A,66); +class IEdgeEnhanceMetadata : public Interface +{ +public: + static const InterfaceID& id() { return IID_EDGE_ENHANCE_METADATA; } + + /** + * Returns the edge enhancement mode used for the capture. + */ + virtual EdgeEnhanceMode getEdgeEnhanceMode() const = 0; + + /** + * Returns the edge enhancement strength used for the capture. + */ + virtual float getEdgeEnhanceStrength() const = 0; + +protected: + ~IEdgeEnhanceMetadata() {} +}; + +} // namespace Argus + +#endif // _ARGUS_CAPTURE_METADATA_H diff --git a/jetson_multimedia_api/argus/include/Argus/CaptureSession.h b/jetson_multimedia_api/argus/include/Argus/CaptureSession.h new file mode 100644 index 0000000..1ed595a --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/CaptureSession.h @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Capture Session API + * + * @b Description: Defines the CaptureSession object and interface. + */ + +#ifndef _ARGUS_CAPTURE_SESSION_H +#define _ARGUS_CAPTURE_SESSION_H + +namespace Argus +{ + +/** + * Object that controls all operations on a single sensor. + * + * A capture session is bound to a single sensor (or, in future, a group of synchronized sensors) + * and provides methods to perform captures on that sensor (via the ICaptureSession interface). + * + * @defgroup ArgusCaptureSession CaptureSession + * @ingroup ArgusObjects + */ +class CaptureSession : public InterfaceProvider, public Destructable +{ +protected: + ~CaptureSession() {} +}; + +/** + * @class ICaptureSession + * + * Interface to the core CaptureSession methods. + * + * @ingroup ArgusCaptureSession + */ +DEFINE_UUID(InterfaceID, IID_CAPTURE_SESSION, 813644f5,bc21,4013,af44,dd,da,b5,7a,9d,13); +class ICaptureSession : public Interface +{ +public: + static const InterfaceID& id() { return IID_CAPTURE_SESSION; } + + /** + * Removes all previously submitted requests from the queue. When all requests + * are cancelled, both the FIFO and the streaming requests will be removed. + * If repeat captures are enabled, an implicit call to ICaptureSession::stopRepeat() + * will be made before cancelling the requests. + * + * @returns success/status of this call. + */ + virtual Status cancelRequests() = 0; + + /** + * Submits a single capture request. + * For blocking capture session (created by ICameraProvider::createBlockingCaptureSession), + * it will wait until the request is accepted by lower level driver. + * For non-blocking capture session (created by ICameraProvider::createCaptureSession), + * it will queue a copy of the request to a queue and return. + * + * The client can submit the same request instance in a future call. + * The request will be copied by the runtime. + * + * @param[in] request Parameters for the capture. + * @param[in] timeout The timeout in nanoseconds. The camera device will + * try to issue the request within the timeout period. If it can't it + * will return and set @c status to STATUS_UNAVAILABLE. + * @param[out] status An optional pointer to return success/status. + * + * @returns the capture id, a number that uniquely identifies (within this session) the request. + * If the submission request failed, zero will be returned. + * The request could fail because the timeout is reached, + * or because some parameter(s) of the @c request are invalid. + */ + virtual uint32_t capture(const Request* request, + uint64_t timeout = TIMEOUT_INFINITE, + Status* status = NULL) = 0; + + /** + * Submits a burst of requests. + * + * For blocking capture session (created by ICameraProvider::createBlockingCaptureSession), + * it will wait until the first request is accepted by lower level driver. + * For non-blocking capture session (created by ICameraProvider::createCaptureSession), + * it will queue a copy of the requests to a queue and return. + + * The runtime will either accept the entire burst or refuse it completely + * (that is, no partial bursts will be accepted). + * + * @param[in] requestList The list of requests that make up the burst. + * @param[in] timeout The timeout in nanoseconds. The camera device will try to issue + * the request within the timeout period. If it can't it will return and set + * @c status to STATUS_UNAVAILABLE. + * @param[out] status An optional pointer to return success/status. + * + * @returns the capture id of the capture associated with the first request in the burst. + * The capture id will increment by one for the captures associated with each successive + * request. + * If the submission request failed, zero will be returned. + * The request could fail because the timeout is reached, + * or because some parameter(s) of the @c request are invalid. + */ + virtual uint32_t captureBurst(const std::vector& requestList, + uint64_t timeout = TIMEOUT_INFINITE, + Status* status = NULL) = 0; + + /** + * Returns the maximum number of capture requests that can be included in a burst capture. + */ + virtual uint32_t maxBurstRequests() const = 0; + + /** + * Creates a request object that can be later used with this CaptureSession. + * + * @param[in] intent Optional parameter that specifies the intent of the capture request and + * instructs the driver to populate the request with recommended settings + * for that intent. + * @param[out] status An optional pointer to return success/status. + * + * @see ICaptureMetadata::getClientData() + */ + virtual Request* createRequest(const CaptureIntent& intent = CAPTURE_INTENT_PREVIEW, + Status* status = NULL) = 0; + + /** + * Creates an OutputStreamSettings object that is used to configure the creation of + * an OutputStream (see createOutputStream). The type of OutputStream that will be + * configured and created by these settings are determined by the StreamType. + * + * @param[in] type The type of the OutputStream to configure/create with these settings. + * @param[out] status An optional pointer to return success/status. + * + * @returns The newly created OutputStreamSettings, or NULL on failure. + */ + virtual OutputStreamSettings* createOutputStreamSettings(const StreamType& type, + Status* status = NULL) = 0; + + /** + * Creates an OutputStream object using the settings configured by an OutputStreamSettings + * object (see createOutputStreamSettings). + * + * @param[in] settings The settings to use for the new output stream. + * @param[out] status An optional pointer to return success/status. + * + * @returns The newly created OutputStream, or NULL on failure. + */ + virtual OutputStream* createOutputStream(const OutputStreamSettings* settings, + Status* status = NULL) = 0; + + /** + * Returns true if there is a streaming request in place. + */ + virtual bool isRepeating() const = 0; + + /** + * Sets up a repeating request. This is a convenience method that will queue + * a request whenever the request queue is empty and the camera is ready to + * accept new requests. + * + * To stop repeating the request, call stopRepeat(). + * + * @param[in] request The request to repeat. + * + * @returns success/status of the call. + */ + virtual Status repeat(const Request* request) = 0; + + /** + * Sets up a repeating burst request. This is a convenience method that will queue + * a request whenever the request queue is empty and the camera is ready to + * accept new requests. + * + * To stop repeating the requests, call stopRepeat(). + * + * @param[in] requestList The list of requests that make up the repeating burst. + * + * @returns success/status of the call. + */ + virtual Status repeatBurst(const std::vector& requestList) = 0; + + /** + * Shuts down any repeating capture. + * + * @returns The range of capture ids generated by the most recent repeat() / repeatBurst() call. + * Note that some captures within that range may have been generated by explicit capture() calls + * made while the repeating capture was in force. + * If no captures were generated by the most recent repeat() / repeatBurst() call, + * Range(0,0) will be returned. + */ + virtual Range stopRepeat() = 0; + + /** + * Waits until all pending captures are complete. + * + * @param[in] timeout The timeout value (in nanoseconds) for this call. + * If the pipe has not become idle when the timeout expires, + * the call will return STATUS_TIMEOUT. + */ + virtual Status waitForIdle(uint64_t timeout = TIMEOUT_INFINITE) const = 0; + +protected: + ~ICaptureSession() {} +}; + +} // namespace Argus + +#endif // _ARGUS_CAPTURE_SESSION_H diff --git a/jetson_multimedia_api/argus/include/Argus/EGLImage.h b/jetson_multimedia_api/argus/include/Argus/EGLImage.h new file mode 100644 index 0000000..d23fd00 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/EGLImage.h @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: EGLImage API + * + * @b Description: Defines a BufferType that wraps an EGLImage resource. + */ + +#ifndef _ARGUS_EGL_IMAGE_H +#define _ARGUS_EGL_IMAGE_H + +namespace Argus +{ + +/** + * @defgroup ArgusEGLImageBuffer EGLImageBuffer + * @ingroup ArgusBufferBuffer + * @ref ArgusBuffer type that wraps an EGLImage resource (BUFFER_TYPE_EGL_IMAGE). + */ +/** + * @defgroup ArgusEGLImageBufferSettings EGLImageBufferSettings + * @ingroup ArgusBufferBufferSettings + * Settings type used to configure/create @ref ArgusEGLImageBuffer Buffers (BUFFER_TYPE_EGL_IMAGE). + */ + +/** + * @ref ArgusBuffer type that wraps an EGLImage resource. + * @ingroup ArgusBufferBufferSettings + */ +DEFINE_UUID(BufferType, BUFFER_TYPE_EGL_IMAGE, c723d966,5231,11e7,9598,18,00,20,0c,9a,66); + +/** + * @class IEGLImageBufferSettings + * + * Interface that provides the settings used to configure EGLImage Buffer creation. + * These Buffers act as siblings for the EGLImage, providing libargus write access + * to the underlying buffer resources for the destination of capture requests. + * + * @ingroup ArgusEGLImageBufferSettings + */ +DEFINE_UUID(InterfaceID, IID_EGL_IMAGE_BUFFER_SETTINGS, c723d967,5231,11e7,9598,18,00,20,0c,9a,66); +class IEGLImageBufferSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_EGL_IMAGE_BUFFER_SETTINGS; } + + /** + * Sets the EGLDisplay which owns the EGLImage. + * @param[in] eglDisplay The EGLDisplay that owns the EGLImage. + */ + virtual Status setEGLDisplay(EGLDisplay eglDisplay) = 0; + + /** + * Returns the EGLDisplay which owns the EGLImage. + */ + virtual EGLDisplay getEGLDisplay() const = 0; + + /** + * Sets the EGLImage to use as the sibling for this Buffer. + * @param[in] eglImage The EGLImage to use as the sibling for this Buffer. + */ + virtual Status setEGLImage(EGLImageKHR eglImage) = 0; + + /** + * Returns the EGLImage to use as the sibling for this Buffer. + */ + virtual EGLImageKHR getEGLImage() const = 0; + +protected: + ~IEGLImageBufferSettings() {} +}; + +/** + * @class IEGLImageBuffer + * + * Interface that provides methods to EGLImage Buffers. + * + * @ingroup ArgusEGLImageBuffer + */ +DEFINE_UUID(InterfaceID, IID_EGL_IMAGE_BUFFER, c723d968,5231,11e7,9598,18,00,20,0c,9a,66); +class IEGLImageBuffer : public Interface +{ +public: + static const InterfaceID& id() { return IID_EGL_IMAGE_BUFFER; } + + /** + * Returns the EGLDisplay that owns the EGLImage. + */ + virtual EGLDisplay getEGLDisplay() const = 0; + + /** + * Returns the EGLImage being used for this Buffer. + */ + virtual EGLImageKHR getEGLImage() const = 0; + +protected: + ~IEGLImageBuffer() {} +}; + +} // namespace Argus + +#endif // _ARGUS_EGL_IMAGE_H diff --git a/jetson_multimedia_api/argus/include/Argus/EGLStream.h b/jetson_multimedia_api/argus/include/Argus/EGLStream.h new file mode 100644 index 0000000..69cc7ad --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/EGLStream.h @@ -0,0 +1,247 @@ +/* + * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: EGLStream API + * + * @b Description: This file defines an EGLStream-linked OutputStream type. + */ + +#ifndef _ARGUS_EGL_STREAM_H +#define _ARGUS_EGL_STREAM_H + +namespace Argus +{ + +/** + * @defgroup ArgusEGLOutputStream EGLOutputStream + * @ingroup ArgusOutputStream + * @ref ArgusOutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL). + * + * EGLStream-linked OutputStream objects maintain a connection to an EGLStream + * as the producer endpoint. The EGLStream implementation is responsible for + * buffer allocation, management, and synchronization as frames are presented + * to the EGLStream from libargus and then consumed using an EGLStream consumer. + */ +/** + * @defgroup ArgusEGLOutputStreamSettings EGLOutputStreamSettings + * @ingroup ArgusOutputStreamSettings + * Settings type used to configure/create @ref ArgusEGLOutputStream streams (STREAM_TYPE_EGL). + */ + +/** + * @ref ArgusOutputStream type that generates frames as an EGLStream producer (STREAM_TYPE_EGL). + * @ingroup ArgusOutputStreamSettings + */ +DEFINE_UUID(StreamType, STREAM_TYPE_EGL, 3a659360,5231,11e7,9598,18,00,20,0c,9a,66); + +/** + * Defines the EGLStream queue mode of operation (see IEGLOutputStreamSettings::setMode). + */ +DEFINE_NAMED_UUID_CLASS(EGLStreamMode); +DEFINE_UUID(EGLStreamMode, EGL_STREAM_MODE_MAILBOX, 33661d40,3ee2,11e6,bdf4,08,00,20,0c,9a,66); +DEFINE_UUID(EGLStreamMode, EGL_STREAM_MODE_FIFO, 33661d41,3ee2,11e6,bdf4,08,00,20,0c,9a,66); + +/** + * @class IEGLOutputStreamSettings + * + * Interface that exposes the settings used for EGLStream-linked OutputStream creation. + * + * @ingroup ArgusEGLOutputStreamSettings + */ +DEFINE_UUID(InterfaceID, IID_EGL_OUTPUT_STREAM_SETTINGS, 3a659361,5231,11e7,9598,18,00,20,0c,9a,66); +class IEGLOutputStreamSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_EGL_OUTPUT_STREAM_SETTINGS; } + + /** + * Set the format of the stream. + * Default value: PIXEL_FMT_UNKNOWN + */ + virtual Status setPixelFormat(const PixelFormat& format) = 0; + virtual PixelFormat getPixelFormat() const = 0; + + /** + * Set the resolution of the stream. + * Default value: (0, 0) + */ + virtual Status setResolution(const Size2D& resolution) = 0; + virtual Size2D getResolution() const = 0; + + /** + * Set the number of exposures per stream frame. + * This number should match the number of exposures that are going to be provided + * with each stream frame when capturing from multi-exposure WDR sources. + * Note that the EGLStream consumer must support consuming multi-exposure/buffer + * EGLStreams. In the case of the EGLStream::FrameConsumer consumer, the multiple + * exposures are treated as separate buffers in the acquired Image and may be + * accessed using any Image interface which supports multi-buffer/plane image access + * (see EGLStream::IImage::getBufferCount()). + * Default value: 1 + */ + virtual Status setExposureCount(uint32_t exposureCount) = 0; + virtual uint32_t getExposureCount() const = 0; + + /** + * Set the EGLDisplay the created stream must belong to. + * Default value: EGL_NO_DISPLAY - stream is display-agnostic. + */ + virtual Status setEGLDisplay(EGLDisplay eglDisplay) = 0; + virtual EGLDisplay getEGLDisplay() const = 0; + + /** + * Sets the mode of the OutputStream. Available options are: + * + * MAILBOX: + * In this mode, only the newest frame is made available to the consumer. When Argus + * completes a frame it empties the mailbox and inserts the new frame into the mailbox. + * The consumer then retrieves the frame from the mailbox and processes it; when + * finished, the frame is either placed back into the mailbox (if the mailbox is empty) + * or discarded (if the mailbox is not empty). This mode implies 2 things: + * + * - If the consumer consumes frames slower than Argus produces frames, then some + * frames may be lost (never seen by the consumer). + * + * - If the consumer consumes frames faster than Argus produces frames, then the + * consumer may see some frames more than once. + * + * FIFO: + * When using this mode, every producer frame is made available to the consumer through + * the use of a fifo queue for the frames. When using this mode, the fifo queue length + * must be specified using setFifoLength. When Argus completes a frame it inserts it to + * the head of the fifo queue. If the fifo is full (already contains the number of frames + * equal to the fifo queue length), Argus will stall until the fifo is no longer + * full. The consumer consumes frames from the tail of the queue; however, if the + * consumer releases a frame while the queue is empty, the frame is set aside and will + * be returned again the next time the consumer requests a frame if another new frame + * has not been inserted into the fifo queue before then. Once a new frame is inserted + * into the fifo queue, any previously released frame will be permanently discarded. + * This mode implies: + * + * - Frames are never discarded until the consumer has processed them. + * + * - If the consumer consumes frames slower than Argus produces them, Argus will stall. + * + * - If the consumer consumes frames faster than Argus produces them, then the + * consumer may see some frames more than once. + * + * Default value: STREAM_MODE_MAILBOX + */ + virtual Status setMode(const EGLStreamMode& mode) = 0; + virtual EGLStreamMode getMode() const = 0; + + /** + * Sets the FIFO queue length of the stream. This value is only used if the stream is using + * the FIFO mode (@see OutputStreamSettings::setMode). Value must be > 0. + * Default value: 1 + */ + virtual Status setFifoLength(uint32_t fifoLength) = 0; + virtual uint32_t getFifoLength() const = 0; + + /** + * Enables or disables embedding Argus CaptureMetadata within frames written to the EGLStream. + * Enabling this will allow an EGLStream::MetadataContainer to be created from frames acquired + * on the consumer side of the EGLStream that will expose the EGLStream::IArgusCaptureMetadata + * interface, which in turn provides access to the CaptureMetadata corresponding to that frame. + * This will also enable the IArgusCaptureMetadata interface directly on EGLStream::Frames + * acquired by an EGLStream::FrameConsumer. + * Default value: disabled. + */ + virtual Status setMetadataEnable(bool metadataEnable) = 0; + virtual bool getMetadataEnable() const = 0; + + /** + * @returns True if the output pixel format is supported by the CaptureSession for the + * queried sensor mode. Otherwise, returns false. + * + * @param[in] sensorMode The sensor mode being queried for the output pixel type. + * @param[in] outputFormat The output pixel format being queried for support. + */ + virtual bool supportsOutputStreamFormat(const SensorMode* sensorMode, + const PixelFormat& outputFormat) const = 0; + +protected: + ~IEGLOutputStreamSettings() {} +}; + +/** + * @class IEGLOutputStream + * + * Interface that exposes the methods available to an EGLStream-linked OutputStream. + * + * @ingroup ArgusEGLOutputStream + */ +DEFINE_UUID(InterfaceID, IID_EGL_OUTPUT_STREAM, 3a659362,5231,11e7,9598,18,00,20,0c,9a,66); +class IEGLOutputStream : public Interface +{ +public: + static const InterfaceID& id() { return IID_EGL_OUTPUT_STREAM; } + + /** + * Waits until both the producer and consumer endpoints of the stream are connected. + * + * @param[in] timeout The timeout in nanoseconds. + * + * @returns success/status of this call. + */ + virtual Status waitUntilConnected(uint64_t timeout = TIMEOUT_INFINITE) const = 0; + + /** + * Disconnects the stream from the underlying EGLStream. + */ + virtual void disconnect() = 0; + + /** + * Returns the format of the stream. + */ + virtual PixelFormat getPixelFormat() const = 0; + + /** + * Returns the image resolution of the stream, in pixels. + */ + virtual Size2D getResolution() const = 0; + + /** + * Returns the EGLDisplay the stream's EGLStream belongs to. + */ + virtual EGLDisplay getEGLDisplay() const = 0; + + /** + * Returns the EGLStream backing the stream. + */ + virtual EGLStreamKHR getEGLStream() const = 0; + +protected: + ~IEGLOutputStream() {} +}; + +} // namespace Argus + +#endif // _ARGUS_EGL_STREAM_H diff --git a/jetson_multimedia_api/argus/include/Argus/EGLSync.h b/jetson_multimedia_api/argus/include/Argus/EGLSync.h new file mode 100644 index 0000000..a44706f --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/EGLSync.h @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: EGLSync API + * + * @b Description: Defines a SyncType that uses EGLSync objects. + */ + +#ifndef _ARGUS_EGL_SYNC_H +#define _ARGUS_EGL_SYNC_H + +namespace Argus +{ + +/** + * @defgroup ArgusBufferEGLSync EGLSync + * @ingroup ArgusBufferSync + * Sync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC). + */ + +/** + * Sync type that uses EGLSync objects (SYNC_TYPE_EGL_SYNC). + * @ingroup ArgusBufferSync + */ +DEFINE_UUID(SyncType, SYNC_TYPE_EGL_SYNC, 5df77c90,5d1b,11e7,9598,08,00,20,0c,9a,66); + +/** + * @class IEGLSync + * + * Interface that provides EGLSync input and output methods for a Buffer. + * + * @ingroup ArgusBufferEGLSync + */ +DEFINE_UUID(InterfaceID, IID_EGL_SYNC, 5df77c91,5d1b,11e7,9598,08,00,20,0c,9a,66); +class IEGLSync : public Interface +{ +public: + static const InterfaceID& id() { return IID_EGL_SYNC; } + + /** + * Creates and returns a new EGLSync object that is signalled when all operations on the + * Buffer from the previous libargus capture request have completed. + * + * When sync support is enabled for a Stream, libargus may output Buffers to that stream + * even if hardware operations are still pending on the Buffer's image data. In this case, + * libargus will attach sync information to the Buffer when it is acquired by the client + * that must be used to block any client operations on the image data until all preceeding + * libargus operations have completed. Failure to block on this sync information may lead + * to undefined buffer contents. + * + * This method will create and output a new EGLSync object that will be signalled once all + * libargus operations on the Buffer have completed. Ownership of this EGLSync object is + * given to the caller, who must then wait on the sync object as needed before destroying + * it using eglDestroySyncKHR. Calling this method more than once is allowed, and each call + * will create and return a new EGLSync object. + * + * This method should only ever be called while the Buffer is in an acquired state; ie. the + * time between when the Buffer was acquired by IBufferOutputStream::acquireBuffer and when + * it was released by IBufferOutputStream::releaseBuffer. If called outside of the acquired + * state, STATUS_UNAVAILABLE will be returned. + * + * When successful, STATUS_OK will be returned and 'eglSync' will be written with the new + * EGLSync object. Note that EGL_NO_SYNC_KHR is still a valid output for the 'eglSync' even + * when STATUS_OK is returned; this implies that libargus does not have any pending + * operations to the Buffer and so the client need not take any sync precautions before + * accessing the image data. Thus, the returned Status code should be used for detecting + * failures rather than checking for an EGL_NO_SYNC_KHR output. + * + * @param[in] eglDisplay The EGLDisplay that shall own the returned EGLSync object. + * @param[out] eglSync Output for the newly created EGLSync object. Ownership of this object + * is given to the client. + * + * @returns success/status of this call. + */ + virtual Status getAcquireSync(EGLDisplay eglDisplay, EGLSyncKHR* eglSync) = 0; + + /** + * Sets the client-provided EGLSync for a Buffer prior to its release. + * + * When sync support is enabled for a Stream, the client may release Buffers back to + * libargus for future capture use even if the client has hardware operations pending on + * the Buffer's image data. In this case, the client must provide an EGLSync object to + * libargus that will be signalled by the completion of the client's pending operations. + * This sync object will then be waited on by libargus to prevent any buffer operations + * from occuring before the client sync has been signalled. + * + * This method should only ever be called while the Buffer is in an acquired state; ie. the + * time between when the Buffer was acquired by IBufferOutputStream::acquireBuffer and when + * it was released by IBufferOutputStream::releaseBuffer. If called outside of this period, + * STATUS_UNAVAILBLE will be returned and no object updates will be made. Otherwise, when + * called in the acquired state, this method will set the EGLSync that will be provided to + * libargus at the time that the Buffer is released by IBufferOutputStream::releaseBuffer + * and STATUS_OK will be returned. On success, ownership of the EGLSync object will be passed + * to libargus; further use of the EGLSync by the client after this point may lead to + * undefined results or abnormal termination. If called more than once when in the acquired + * state, any previously set EGLSync will be replaced; only the last set EGLSync before + * calling releaseBuffer will be waited on by libargus. + * + * If the client does not have any pending operations on the Buffer at the time that + * releaseBuffer is called, it is allowed for the client to either skip calling this method + * or to call it using EGL_NO_DISPLAY and EGL_NO_SYNC_KHR such that libargus will not have + * to consider any sync requirements and may use the Buffer immediately. + * + * @param[in] eglDisplay The EGLDisplay that created the EGLSync object being provided. + * @param[in] eglSync The EGLSync that libargus must wait on before accessing the buffer. + * + * @returns success/status of this call. + */ + virtual Status setReleaseSync(EGLDisplay eglDisplay, EGLSyncKHR eglSync) = 0; + +protected: + ~IEGLSync() {} +}; + +} // namespace Argus + +#endif // _ARGUS_EGL_SYNC_H diff --git a/jetson_multimedia_api/argus/include/Argus/Event.h b/jetson_multimedia_api/argus/include/Argus/Event.h new file mode 100644 index 0000000..0b94c3a --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Event.h @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Event API + * + * @b Description: Defines the Event objects and interfaces. + */ + +#ifndef _ARGUS_EVENT_H +#define _ARGUS_EVENT_H + +namespace Argus +{ + +/** + * Container representing a single event. + * + * Every Event will have a single EventType and will expose one or more + * interfaces, with the core IEvent interface being mandatory. + * + * @defgroup ArgusEvent Event + * @ingroup ArgusObjects + */ +class Event : public InterfaceProvider +{ +protected: + ~Event() {} +}; + +/** + * A unique identifier for a particular type of Event. + * + * @ingroup ArgusEvent + */ +class EventType : public NamedUUID +{ +public: + EventType(uint32_t time_low_ + , uint16_t time_mid_ + , uint16_t time_hi_and_version_ + , uint16_t clock_seq_ + , uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5 + , const char* name) + : NamedUUID(time_low_, time_mid_, time_hi_and_version_, clock_seq_, + c0, c1, c2, c3, c4, c5, name) + {} + + EventType() + : NamedUUID(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "EVENT_TYPE_UNSPECIFIED") + {} +}; + + +/* + * Core Event types + */ + +/** + * Event type used to report an error. + * + * @defgroup ArgusEventError Error Event + * @ingroup ArgusEvent + */ +DEFINE_UUID(EventType, EVENT_TYPE_ERROR, 2c80d8b0,2bfd,11e5,a2cb,08,00,20,0c,9a,66); + +/** + * Event type used to report when a capture starts. + * + * @defgroup ArgusEventCaptureStarted CaptureStarted Event + * @ingroup ArgusEvent + */ +DEFINE_UUID(EventType, EVENT_TYPE_CAPTURE_STARTED, 2c80d8b1,2bfd,11e5,a2cb,08,00,20,0c,9a,66); + +/** + * Event type used to report when all capture processing has completed. + * + * @defgroup ArgusEventCaptureComplete CaptureComplete Event + * @ingroup ArgusEvent + */ +DEFINE_UUID(EventType, EVENT_TYPE_CAPTURE_COMPLETE, 2c80d8b2,2bfd,11e5,a2cb,08,00,20,0c,9a,66); + + +/** + * @class IEvent + * + * Interface to the common Event properties. + * + * @ingroup ArgusEvent + */ +DEFINE_UUID(InterfaceID, IID_EVENT, 98bcb49e,fd7d,11e4,a322,16,97,f9,25,ec,7b); +class IEvent : public Interface +{ +public: + static const InterfaceID& id() { return IID_EVENT; } + + /** + * Returns the event type. + */ + virtual EventType getEventType() const = 0; + + /** + * Returns the time of the event, in nanoseconds. + */ + virtual uint64_t getTime() const = 0; + + /** + * Returns the capture id for the event. + */ + virtual uint32_t getCaptureId() const = 0; + +protected: + ~IEvent() {} +}; + +/** + * @class IEventError + * + * Interface exposed by Events having type EVENT_TYPE_ERROR. + * + * @ingroup ArgusEventError + */ +DEFINE_UUID(InterfaceID, IID_EVENT_ERROR, 13e0fc70,1ab6,11e5,b939,08,00,20,0c,9a,66); +class IEventError : public Interface +{ +public: + static const InterfaceID& id() { return IID_EVENT_ERROR; } + + /** + * Returns the Status value describing the error. + */ + virtual Status getStatus() const = 0; + +protected: + ~IEventError() {} +}; + +/** + * @class IEventCaptureComplete + * + * Interface exposed by Events having type EVENT_TYPE_CAPTURE_COMPLETE + * + * @ingroup ArgusEventCaptureComplete + */ +DEFINE_UUID(InterfaceID, IID_EVENT_CAPTURE_COMPLETE, 8b2b40b5,f1e4,4c4d,ae1c,f3,93,f6,54,06,d5); +class IEventCaptureComplete : public Interface +{ +public: + static const InterfaceID& id() { return IID_EVENT_CAPTURE_COMPLETE; } + + /** + * Returns all dynamic metadata associated with this capture. + * The lifetime of the returned pointer is equivalent to the lifetime of this event. + * NULL may be returned if no metadata is available because the + * capture failed or was aborted. + */ + virtual const CaptureMetadata* getMetadata() const = 0; + + /** + * Returns the error status of the metadata event. + * If this value is not STATUS_OK, getMetadata() will return NULL. + */ + virtual Status getStatus() const = 0; + +protected: + ~IEventCaptureComplete() {} +}; + +} // namespace Argus + +#endif // _ARGUS_EVENT_H diff --git a/jetson_multimedia_api/argus/include/Argus/EventProvider.h b/jetson_multimedia_api/argus/include/Argus/EventProvider.h new file mode 100644 index 0000000..756afff --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/EventProvider.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Event Provider API + * + * @b Description: Defines the EventProvider interface. + */ + +#ifndef _ARGUS_EVENT_PROVIDER_H +#define _ARGUS_EVENT_PROVIDER_H + +namespace Argus +{ + +/** + * @class IEventProvider + * + * Interface for an object which generates Events (such as CaptureSession). + * + * Any generated Events are initially stored by the provider itself, and they + * are not copied out to public EventQueues until waitForEvents() is called. + * If at any time there is an event type offered by a provider that is not + * accepted by an active EventQueue created by that provider, all events of + * that type will be discarded. + * + * @ingroup ArgusCaptureSession + */ +DEFINE_UUID(InterfaceID, IID_EVENT_PROVIDER, 523ed330,25dc,11e5,867f,08,00,20,0c,9a,66); +class IEventProvider : public Interface +{ +public: + static const InterfaceID& id() { return IID_EVENT_PROVIDER; } + + /** + * Returns a list of event types that this provider can generate. + * @param[out] types A vector that will be populated by the available event types. + * + * @returns success/status of the call. + */ + virtual Status getAvailableEventTypes(std::vector* types) const = 0; + + /** + * Creates an event queue for events of the given type(s) + * @param[in] eventTypes The list of event types for the queue. + * @param[out] status An optional pointer to return success/status. + * + * @returns the new EventQueue object, or NULL on failure. + */ + virtual EventQueue* createEventQueue(const std::vector& eventTypes, + Status* status = NULL) = 0; + + /** + * Waits for and transfers any pending events from the provider to the + * provided queues. + * + * Ownership of all events transfered to a queue will be passed from the + * provider to the queue, and these event object pointers will remain + * valid until the queue is destroyed or until the next call to this + * function with that queue. In other words, any events in a queue will be + * destroyed when the queue is provided to another call of this function, + * regardless of whether or not it receives any new events, or when the + * queue is destroyed. + * + * If more than one given queue accepts events of the same type, only the + * first of these queues will receive events of that type. + * + * Any events that are not copied to queues by this function are left in + * the provider until they are queried using a queue receiving events of + * that type. + * + * If there are no pending events of the requested types at the time this + * function is called, it will block until one is available or a timeout + * occurs. + * + * @param[in] queues The list of queues to transfer events to. + * @param[in] timeout The maximum time (in nanoseconds) to wait for new events. + * + * @returns success/status of the call. + */ + virtual Status waitForEvents(const std::vector& queues, + uint64_t timeout = TIMEOUT_INFINITE) = 0; + + /** + * Variant of waitForEvents() that waits for only one EventQueue. + */ + virtual Status waitForEvents(EventQueue* queue, + uint64_t timeout = TIMEOUT_INFINITE) = 0; + +protected: + ~IEventProvider() {} +}; + +} // namespace Argus + +#endif // _ARGUS_EVENT_PROVIDER_H diff --git a/jetson_multimedia_api/argus/include/Argus/EventQueue.h b/jetson_multimedia_api/argus/include/Argus/EventQueue.h new file mode 100644 index 0000000..6018923 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/EventQueue.h @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Event Queue API + * + * @b Description: Defines the EventQueue object and interface. + */ + +#ifndef _ARGUS_EVENT_QUEUE_H +#define _ARGUS_EVENT_QUEUE_H + +namespace Argus +{ + +/** + * Object to receive and expose Events from an IEventProvider. + * + * @see IEventProvider::createEventQueue. + * + * @defgroup ArgusEventQueue EventQueue + * @ingroup ArgusObjects + */ +class EventQueue : public InterfaceProvider, public Destructable +{ +protected: + ~EventQueue() {} +}; + +/** + * @class IEventQueue + * + * Interface to the core EventQueue methods. + * + * @ingroup ArgusEventQueue + */ +DEFINE_UUID(InterfaceID, IID_EVENT_QUEUE, 944b11f6,e512,49ad,8573,fc,82,3e,02,25,ed); +class IEventQueue : public Interface +{ +public: + static const InterfaceID& id() { return IID_EVENT_QUEUE; } + + /** + * Returns the event types that this queue will receive. + * @param[out] types This vector will be populated with the event types + * registered to this queue. + * + * @returns success/status of the call. + */ + virtual Status getEventTypes(std::vector* types) const = 0; + + /** + * Returns the next event in the queue (that is, the event at index 0). The returned + * event will be removed from the queue, though the object will remain valid + * according to the rules described by waitForEvents(). + * If the queue is empty, returns NULL. + */ + virtual const Event* getNextEvent() = 0; + + /** + * Returns the number of events in the queue. + */ + virtual uint32_t getSize() const = 0; + + /** + * Returns the event with the given index, where index 0 corresponds to the oldest + * event and [getSize() - 1] is the newest. The returned event is not removed + * from the queue. If index is not in [0, getSize()-1], NULL is returned. + */ + virtual const Event* getEvent(uint32_t index) const = 0; + +protected: + ~IEventQueue() {} +}; + +} // namespace Argus + +#endif // _ARGUS_EVENT_QUEUE_H diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/BayerAverageMap.h b/jetson_multimedia_api/argus/include/Argus/Ext/BayerAverageMap.h new file mode 100644 index 0000000..80e1fbb --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/BayerAverageMap.h @@ -0,0 +1,236 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Bayer Average Map API + * + * @b Description: This file defines the BayerAverageMap extension. + */ + +#ifndef _ARGUS_EXT_BAYER_AVERAGE_MAP_H +#define _ARGUS_EXT_BAYER_AVERAGE_MAP_H + +namespace Argus +{ + +/** + * Generates local averages of a capture's raw Bayer data. These averages are generated for + * a number of small rectangles, called bins, that are evenly distributed across the image. + * These averages may be calculated before optical clipping to the output bit depth occurs, thus + * the working range of this averaging may extend beyond the optical range of the output pixels; + * this allows the averages to remain steady while the sensor freely modifies its optical range. + * + * Any pixel values outside of the working range are clipped with respect to this averaging. + * Specifically, the API excludes them from the average calculation and increments + * the clipped pixel counter for the containing region. + * @see Ext::IBayerAverageMap::getClipCounts() + * + * This extension introduces two new interfaces: + * - Ext::IBayerAverageMapSettings enables average map generation in a capture Request. + * - Ext::IBayerAverageMap exposes the average map values from the CaptureMetadata. + * + * @defgroup ArgusExtBayerAverageMap Ext::BayerAverageMap + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_BAYER_AVERAGE_MAP, 12c3de20,64c5,11e6,bdf4,08,00,20,0c,9a,66); + +namespace Ext +{ + +/** + * @class IBayerAverageMapSettings + * + * Interface to Bayer average map settings. + * + * @ingroup ArgusRequest ArgusExtBayerAverageMap + */ +DEFINE_UUID(InterfaceID, IID_BAYER_AVERAGE_MAP_SETTINGS, 12c3de21,64c5,11e6,bdf4,08,00,20,0c,9a,66); +class IBayerAverageMapSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_BAYER_AVERAGE_MAP_SETTINGS; } + + /** + * Enables or disables Bayer average map generation. When enabled, CaptureMetadata + * returned by completed captures will expose the IBayerAverageMap interface. + * + * @param[in] enable whether or not Bayer average map generation is enabled. + */ + virtual void setBayerAverageMapEnable(bool enable) = 0; + + /** + * @returns whether or not Bayer average map generation is enabled. + */ + virtual bool getBayerAverageMapEnable() const = 0; + +protected: + ~IBayerAverageMapSettings() {} +}; + +/** + * @class IBayerAverageMap + * + * Interface to Bayer average map metadata. + * + * The Bayer average map provides local averages of the capture's raw pixels for a number + * of small rectangular regions, called bins, that are evenly distributed across the image. + * Each average is a floating-point value that is nomalized such that [0.0, 1.0] maps to the + * full optical range of the output pixels, but values outside this range may be included in + * the averages so long as they are within the working range of the average calculation. + * For pixels that have values outside the working range, the API excludes such pixels from the + * average calculation and increments the clipped pixel counter for the containing region. + * @see IBayerAverageMap::getWorkingRange() + * @see IBayerAverageMap::getClipCounts() + * + * The size and layout of the bins used to calculate the averages are determined by the Argus + * implementation and are illustrated in the following diagram. The bin size and interval are + * constant across the image, and are positioned such that the generated averages cover the + * majority of the full image. All dimensions are given in pixels. + * + * @code + * start.x interval.width + * _______ _________________ + * | | | | + * _ ________________________________________________________ + * | | | + * start.y | | | + * |_ | _____ _____ _____ | _ + * | | | | | | | | | + * | | 0,0 | | 1,0 | | 2,0 | | | + * | |_____| |_____| |_____| | | + * | | | interval.height + * | | | + * | | | + * | _____ _____ _____ | _| + * | | | | | | | | + * | | 0,1 | | 1,1 | | 2,1 | | + * | |_____| |_____| |_____| | + * | | + * | | + * | | + * | _____ _____ _____ | _ + * | | | | | | | | | + * | | 0,2 | | 1,2 | | 2,2 | | | size.height + * | |_____| |_____| |_____| | _| + * | | + * | | + * |________________________________________________________| + * + * |_____| + * + * size.width + * @endcode + * + * @ingroup ArgusCaptureMetadata ArgusExtBayerAverageMap + */ +DEFINE_UUID(InterfaceID, IID_BAYER_AVERAGE_MAP, 12c3de22,64c5,11e6,bdf4,08,00,20,0c,9a,66); +class IBayerAverageMap : public Interface +{ +public: + static const InterfaceID& id() { return IID_BAYER_AVERAGE_MAP; } + + /** + * Returns the starting location of the first bin, in pixels, where the + * location is relative to the top-left corner of the image. + */ + virtual Point2D getBinStart() const = 0; + + /** + * Returns the size of each bin, in pixels. + */ + virtual Size2D getBinSize() const = 0; + + /** + * Returns the number of bins in both the horizontal (width) and vertical (height) directions. + * This size is equivalent to the array dimensions for the output from + * IBayerAverageMap::getAverages() or IBayerAverageMap::getClipCounts(). + */ + virtual Size2D getBinCount() const = 0; + + /** + * Returns the bin intervals for both the x and y axis. These intervals are defined as the + * number of pixels between the first pixel of a bin and that of the immediate next bin. + */ + virtual Size2D getBinInterval() const = 0; + + /** + * Returns the working range of the averaging calculation. The working range is defined as + * the range of values that are included in the average calculation (e.g. not clipped), + * and may extend beyond the normalized [0.0, 1.0] range of the optical output. For example, + * if the working range is [-0.5, 1.5], this means that values in [-0.5, 0) and (1, 1.5] will + * still be included in the average calculation despite being clipped to [0.0, 1.0] in the + * output pixels. Any pixels outside this working range are excluded from average calculation + * and will increment the clip count. + * @see IBayerAverageMap::getClipCounts() + * + * @note When the bit depth available for averaging is equal to the optical bit depth of + * the output, the working range will be less than the full [0.0, 1.0] optical range. For + * example, when 10 bits of data are available, the raw output pixels in [0u, 1023u] will + * map to [0.0, 1.0]; however, the values of 0 and 1023 will be considered clipped for the + * sake of average calculation, and so the working range would be [1/1023.0, 1022/1023.0]. + */ + virtual Range getWorkingRange() const = 0; + + /** + * Returns the average values for all bins. These values are normalized such that + * [0.0, 1.0] maps to the optical range of the output, but the range of possible values + * is determined by the working range. For input pixels that have values outside the + * working range, the API excludes such pixels from the average calculation and + * increments the clipped pixel counter for the containing region. + * @see IBayerAverageMap::getWorkingRange() + * @see IBayerAverageMap::getClipCounts() + * + * @param[out] averages The output array to store the averages for all bins. This + * 2-dimensional array is sized as returned by IBayerAverageMap::getBinCount(), + * where each array element is a floating point BayerTuple containing the R, + * G_EVEN, G_ODD, and B averages for that bin. + */ + virtual Status getAverages(Array2D< BayerTuple >* averages) const = 0; + + /** + * Returns the clipped pixel counts for all bins. This is the number of pixels in the bin + * whose value exceeds the working range and have been excluded from average calculation. + * @see IBayerAverageMap::getWorkingRange() + * + * @param[out] clipCounts The output array to store the clip counts for all bins. This + * 2-dimensional array is sized as returned by + * Ext::IBayerAverageMap::getBinCount(), where each array element is an uint32_t + * BayerTuple containing the R, G_EVEN, G_ODD, and B clip counts for that bin. + */ + virtual Status getClipCounts(Array2D< BayerTuple >* clipCounts) const = 0; + +protected: + ~IBayerAverageMap() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif // _ARGUS_EXT_BAYER_AVERAGE_MAP_H diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/BayerSharpnessMap.h b/jetson_multimedia_api/argus/include/Argus/Ext/BayerSharpnessMap.h new file mode 100644 index 0000000..c6217f1 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/BayerSharpnessMap.h @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Bayer Sharpness Map API + * + * @b Description: This file defines the BayerSharpnessMap extension. + */ + +#ifndef _ARGUS_EXT_BAYER_SHARPNESS_MAP_H +#define _ARGUS_EXT_BAYER_SHARPNESS_MAP_H + +namespace Argus +{ + +/** + * Adds internally-generated sharpness metrics to CaptureMetadata results. These are used + * in order to help determine the correct position of the lens to achieve the best focus. + * It introduces two new interfaces: + * - Ext::IBayerSharpnessMapSettings: enables sharness map generation in a capture Request. + * - Ext::IBayerSharpnessMap: exposes the sharpness map metrics from the CaptureMetadata. + * + * @defgroup ArgusExtBayerSharpnessMap Ext::BayerSharpnessMap + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_BAYER_SHARPNESS_MAP, 7d5e0470,4ea6,11e6,bdf4,08,00,20,0c,9a,66); + +namespace Ext +{ + +/** + * @class IBayerSharpnessMapSettings + * + * Interface to Bayer sharpness map settings. + * + * @ingroup ArgusRequest ArgusExtBayerSharpnessMap + */ +DEFINE_UUID(InterfaceID, IID_BAYER_SHARPNESS_MAP_SETTINGS, 7d5e0471,4ea6,11e6,bdf4,08,00,20,0c,9a,66); +class IBayerSharpnessMapSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_BAYER_SHARPNESS_MAP_SETTINGS; } + + /** + * Enables or disables Bayer sharpness map generation. When enabled, CaptureMetadata + * returned by completed captures expose the IBayerSharpnessMap interface. + * @param[in] enable If True, Bayer sharpness map generation is enabled. + */ + virtual void setBayerSharpnessMapEnable(bool enable) = 0; + + /** + * Returns True if sharpness map generation is enabled. + */ + virtual bool getBayerSharpnessMapEnable() const = 0; + +protected: + ~IBayerSharpnessMapSettings() {} +}; + +/** + * @class IBayerSharpnessMap + * + * Interface to Bayer sharpness map metadata. + * + * The Bayer sharpness map exposes image sharpness metrics that can be used in order + * to help determine the correct position of the lens to achieve the best focus. + * Each metric is a normalized floating-point value representing the estimated sharpness + * for a particular color channel and pixel region, called bins, where 0.0 and 1.0 map to + * the minimum and maximum possible sharpness values, respectively. Sharpness values + * generally correlate with image focus in that a low sharpness implies a poorly focused + * (blurry) region while a high sharpness implies a well focused (sharp) region. + * + * The size and layout of the bins used to calculate the sharpness metrics are determined + * by the libargus implementation, and are illustrated in the following diagram. The bin size + * and interval are constant across the image, and are positioned such that the generated + * metrics cover the majority of the full image. All dimensions are given in pixels. + * + * @code + * start.x interval.width + * _______ _________________ + * | | | | + * _ ________________________________________________________ + * | | | + * start.y | | | + * |_ | _____ _____ _____ | _ + * | | | | | | | | | + * | | 0,0 | | 1,0 | | 2,0 | | | + * | |_____| |_____| |_____| | | + * | | | interval.height + * | | | + * | | | + * | _____ _____ _____ | _| + * | | | | | | | | + * | | 0,1 | | 1,1 | | 2,1 | | + * | |_____| |_____| |_____| | + * | | + * | | + * | | + * | _____ _____ _____ | _ + * | | | | | | | | | + * | | 0,2 | | 1,2 | | 2,2 | | | size.height + * | |_____| |_____| |_____| | _| + * | | + * | | + * |________________________________________________________| + * + * |_____| + * + * size.width + * @endcode + * + * @ingroup ArgusCaptureMetadata ArgusExtBayerSharpnessMap + */ +DEFINE_UUID(InterfaceID, IID_BAYER_SHARPNESS_MAP, 7d5e0472,4ea6,11e6,bdf4,08,00,20,0c,9a,66); +class IBayerSharpnessMap : public Interface +{ +public: + static const InterfaceID& id() { return IID_BAYER_SHARPNESS_MAP; } + + /** + * Returns the starting location of the first bin, in pixels, where the + * location is relative to the top-left corner of the image. + */ + virtual Point2D getBinStart() const = 0; + + /** + * Returns the size of each bin, in pixels. + */ + virtual Size2D getBinSize() const = 0; + + /** + * Returns the number of bins in both the horizontal (width) and vertical (height) directions. + */ + virtual Size2D getBinCount() const = 0; + + /** + * Returns the bin intervals for both the x and y axis. These intervals are defined as the + * number of pixels between the first pixel of a bin and that of the immediate next bin. + */ + virtual Size2D getBinInterval() const = 0; + + /** + * Returns the sharpness values for all bins and color channels. These values are normalized + * such that 0.0 and 1.0 map to the minimum and maximum possible sharpness values, respectively. + * + * @param[out] values The output array to store the sharpness values for all bins. This + * 2-dimensional array will be sized as returned by @see getBinCount(), where + * each array element is a floating point BayerTuple containing the R, G_EVEN, + * G_ODD, and B sharpness values for that bin. + */ + virtual Status getSharpnessValues(Array2D< BayerTuple >* values) const = 0; + +protected: + ~IBayerSharpnessMap() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif // _ARGUS_EXT_BAYER_SHARPNESS_MAP_H diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/BlockingSessionCameraProvider.h b/jetson_multimedia_api/argus/include/Argus/Ext/BlockingSessionCameraProvider.h new file mode 100644 index 0000000..aa5ae8c --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/BlockingSessionCameraProvider.h @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Blocking Session Capture Provider API + * + * @b Description: This file defines the BlockingSessionCaptureProvider extension. + */ + +#ifndef _ARGUS_BLOCKING_SESSION_CAMERA_PROVIDER_H +#define _ARGUS_BLOCKING_SESSION_CAMERA_PROVIDER_H + +namespace Argus +{ + +/** + * Adds a interface to camera provider to create a blocking capture session. + * It introduces two new interface: + * - Ext::IBlockingSessionCameraProvider: creates blocking capture session. + * + * @defgroup ArgusExtBlockingSessionCameraProvider Ext::BlockingSessionCameraProvider + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_BLOCKING_SESSION_CAMERA_PROVIDER, 1fff5f04,2ea9,4558,8e92,c2,4b,0b,82,b9,af); + + +namespace Ext +{ + +/** + * @class IBlockingSessionCameraProvider + * + * Interface used to create blocking capture session + * + * @ingroup ArgusCameraProvider ArgusExtBlockingSessionCameraProvider + */ +DEFINE_UUID(InterfaceID, IID_BLOCKING_SESSION_CAMERA_PROVIDER, 3122fe85,b4cc,4945,af5d,a3,86,26,75,eb,a4); +class IBlockingSessionCameraProvider : public Interface +{ +public: + static const InterfaceID& id() { return IID_BLOCKING_SESSION_CAMERA_PROVIDER; } + + /** + * Creates and returns a blocking CaptureSession using the given device. + * For blocking CaptureSession, the capture related API call will block wait until the request + * is serviced by underlying driver. This will help timing control in client side + * when client auto control is involved. + * In compare, for the default CaptureSession, the capture related API call will put + * the request in a internal queue and return immediately, without blocking client thread. + * STATUS_UNAVAILABLE will be placed into @c status if the device is already in use. + * @param[in] device The device to use for the CaptureSession. + * @param[out] status Optional pointer to return success/status of the call. + * @returns The new CaptureSession, or NULL if an error occurred. + */ + virtual CaptureSession* createBlockingCaptureSession(CameraDevice* device, + Status* status = NULL) = 0; + + /** + * Creates and returns a blocking CaptureSession using the given device. + * For blocking CaptureSession, the capture related API call will block wait until the request + * is serviced by underlying driver. This will help timing control in client side + * when client auto control is involved. + * STATUS_UNAVAILABLE will be placed into @c status if any of the devices are already in use. + * @param[in] devices The device(s) to use for the CaptureSession. + * @param[out] status Optional pointer to return success/status of the call. + * @returns The new CaptureSession, or NULL if an error occurred. + */ + virtual CaptureSession* createBlockingCaptureSession(const std::vector& devices, + Status* status = NULL) = 0; + +protected: + ~IBlockingSessionCameraProvider() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif + diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/DeFog.h b/jetson_multimedia_api/argus/include/Argus/Ext/DeFog.h new file mode 100644 index 0000000..d299a74 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/DeFog.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: DeFog API + * + * @b Description: This file defines the DeFog extension. + */ + +#ifndef _ARGUS_DE_FOG_H +#define _ARGUS_DE_FOG_H + +namespace Argus +{ + +/** + * Adds internal de-fog post-processing algorithms. It introduces one new interface: + * - Ext::IDeFogSettings: enables de-fog for a Request. + * + * @defgroup ArgusExtDeFog Ext::DeFog + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_DE_FOG, 9cf05bd0,1d99,4be8,8732,75,99,55,7f,ed,3a); +namespace Ext +{ + +/** + * @class IDeFogSettings + * + * Interface to de-fog settings. + * + * @ingroup ArgusRequest ArgusExtDeFog + */ +DEFINE_UUID(InterfaceID, IID_DE_FOG_SETTINGS, 9cf05bd1,1d99,4be8,8732,75,99,55,7f,ed,3a); +class IDeFogSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_DE_FOG_SETTINGS; } + + /** + * Enables or disables de-fog. + * @param[in] enable whether or not de-fog is enabled. + */ + virtual void setDeFogEnable(bool enable) = 0; + + /** + * @returns whether or not de-fog is enabled. + */ + virtual bool getDeFogEnable() const = 0; + + /** + * Sets the amount of fog to be removed. Range 0.0 - 1.0 (none - all). + * @param[in] amount amount of fog to remove. + */ + virtual Status setDeFogAmount(float amount) = 0; + + /** + * @returns the amount of fog to remove. + */ + virtual float getDeFogAmount() const = 0; + + /** + * Set the quality of the effect, lower quality results in lower execution time. + * Range 0.0 - 1.0 (low quality - high quality). + * @param[in] quality effect quality. + */ + virtual Status setDeFogQuality(float quality) = 0; + + /** + * @returns the effect quality. + */ + virtual float getDeFogQuality() const = 0; + +protected: + ~IDeFogSettings() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif // _ARGUS_DE_FOG_H diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/DebugCaptureSession.h b/jetson_multimedia_api/argus/include/Argus/Ext/DebugCaptureSession.h new file mode 100644 index 0000000..cf80726 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/DebugCaptureSession.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Debug Capture Session API + * + * @b Description: This file defines the DebugCaptureSession extension. + */ + +#ifndef _ARGUS_DEBUG_CAPTURE_SESSION_H +#define _ARGUS_DEBUG_CAPTURE_SESSION_H + +namespace Argus +{ + +enum ArgusInjectError +{ + ArgusInjectError_ErrorLongLine = 1 +}; + +/** + * Adds a debug interface to dump internal libargus runtime information. + * It introduces one new interface: + * - Ext::IDebugCaptureSession: dumps session runtime information. + * + * @defgroup ArgusExtDebugCaptureSession Ext::DebugCaptureSession + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_DEBUG_CAPTURE_SESSION, 1fee5f03,2ea9,4558,8e92,c2,4b,0b,82,b9,af); + + +namespace Ext +{ + +/** + * @class IDebugCaptureSession + * + * Interface used to dump CaptureSession runtime information + * + * @ingroup ArgusCaptureSession ArgusExtDebugCaptureSession + */ +DEFINE_UUID(InterfaceID, IID_DEBUG_CAPTURE_SESSION, 2122fe84,b4cc,4945,af5d,a3,86,26,75,eb,a4); +class IDebugCaptureSession : public Interface +{ +public: + static const InterfaceID& id() { return IID_DEBUG_CAPTURE_SESSION; } + + /** + * Returns session runtime information to the specified file descriptor. + */ + virtual Status dump(int32_t fd) const = 0; + + /** + * Set event injection error id. + */ + virtual Status setEventInjectionErrorMsg(ArgusInjectError errorId) = 0; + +protected: + ~IDebugCaptureSession() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif + diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/DolWdrSensorMode.h b/jetson_multimedia_api/argus/include/Argus/Ext/DolWdrSensorMode.h new file mode 100644 index 0000000..14897b6 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/DolWdrSensorMode.h @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Digital Overlap WDR Sensor Modes + * + * @b Description: Adds extra functionalities for the + * Digital Overlap (DOL) Wide Dynamic Range (WDR) sensor mode type. + */ + +#ifndef _ARGUS_EXT_DOL_WDR_SENSOR_MODE_H +#define _ARGUS_EXT_DOL_WDR_SENSOR_MODE_H + +namespace Argus +{ + +/** + * Adds extra functionalities for the Digital Overlap (DOL) Wide Dynamic + * Range (WDR) sensor mode type. It introduces one new interface: + * - Ext::IDolWdrSensorMode: Returns the extended properties specific to a Digital Overlap (DOL) + * Wide Dynamic Range (WDR) extended sensor mode. DOL WDR is a + * multi-exposure technology that enables fusion of various exposures + * from a single frame to produce a WDR image. + * + * @defgroup ArgusExtDolWdrSensorMode Ext::DolWdrSensorMode + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_DOL_WDR_SENSOR_MODE, 569fb210,70d9,11e7,9598,08,00,20,0c,9a,66); + +namespace Ext +{ + +/** + * @class IDolWdrSensorMode + * + * Interface to the properties of a DOL WDR device. + * + * Returns the extended properties specific to a Digital Overlap (DOL) + * Wide Dynamic Range (WDR) extended sensor mode. DOL WDR is a multi-exposure technology + * that enables fusion of various exposures from a single frame to produce a WDR image. + * + * A DOL WDR RAW buffer contains different DOL exposures in an interleaved layout. DOL WDR + * supports two exposure (long and short) and three exposure (long, short and very short) schemes. + * These schemes are referred to as DOL-2 and DOL-3 respectively. + * + * Exposures are time staggered which leads to vertical blank period (VBP) rows being inserted + * in between various exposures. This scheme results in (N-1) sections of VBP rows for an N exposure + * DOL WDR frame. + * + * Each exposure is preceded by optical black (OB) rows. + * + * Each row of DOL WDR RAW interleaved frame starts with a few Line Info (LI) marker pixels. + * LI pixels distinguish the kind of row. + * Row types include: + * a. Long Exposure + * b. Short Exposure + * c. Very Short Exposure + * d. Vertical Blank Period + * + * For a DOL-2 exposure scheme, there is only one section of VBP rows. The data layout per exposure + * looks like this: + * Long exposure has OB rows, image rows, VBP rows. + * Short exposure has OB rows, VBP rows, image rows. + * + * The ordering of VBP rows changes across exposures but the count of VBP rows per exposure + * remains the same. The final interleaved DOL WDR RAW frame buffer is produced by interleaving + * each exposure's data on a per row basis in a round robin fashion across exposures. + * + * For a DOL-3 exposure scheme, there are two sections of VBP rows. For the sake of terminology + * these are referred to as VBP[0] and VBP[1]. The data layout per exposure looks like this: + * Long exposure has OB rows, image rows, VBP[0] rows, VBP[1] rows. + * Short exposure has OB rows, VBP[0] rows, image rows, VBP[1] rows. + * Very Short exposure has OB rows, VBP[0] rows, VBP[1] rows, image rows. + * + * Again, only the ordering of VBP[0] and VBP[1] rows changes across exposures but the count of + * VBP[0] and VBP[1] rows remains the same. Similar to the DOL-2 scheme, the final interleaved + * DOL WDR RAW frame buffer for DOL-3 scheme is produced by interleaving each exposure's data + * on a per row basis in a round robin fashion across exposures. + * + * This scheme can be extended to DOL-N exposures with (N-1) sections of VBP rows ranging from + * VBP[0] to VBP[N-2]. When considering the vertical blank period sections for exposure N, + * the rows of VBP[X] will come before the image data if X < N, otherwise they will come + * after the image data. + * + * Hence, a DOL-N RAW buffer would have different dimensions than the fused output + * WDR frame buffer. The resolution of the DOL-N RAW buffer is referred to as physical resolution. + * + * The set of properties for basic sensor modes is still applicable to DOL WDR sensor mode. Those + * properties are available through the ISensorMode interface. The only difference is that the + * resolution property provided by the ISensorMode interface for DOL WDR would be the size of the + * fused WDR frame. WDR fusion typically eliminates LI markers, OB rows and VBP rows and merges the + * individual exposures to create a frame that is smaller in height and width than the + * DOL WDR RAW interleaved frame. + * + * Following the LI marker pixels is the actual pixel data for each row. This data may include + * margin pixels on the left or right side of the row, which are generally used for filtering + * and cropped out of a fused DOL image. The width of these margin pixels can be queried by + * getLeftMarginWidth()/getRightMarginWidth(). + * @see ISensorMode + * + * @ingroup ArgusSensorMode ArgusExtDolWdrSensorMode + */ +DEFINE_UUID(InterfaceID, IID_DOL_WDR_SENSOR_MODE, a1f4cae0,70dc,11e7,9598,08,00,20,0c,9a,66); +class IDolWdrSensorMode : public Interface +{ +public: + static const InterfaceID& id() { return IID_DOL_WDR_SENSOR_MODE; } + + /** + * Returns the number of exposures captured per frame for this DOL WDR mode. + * Typically, 2 = Long, Short or 3 = Long, Short, Very Short exposures. + */ + virtual uint32_t getExposureCount() const = 0; + + /** + * Returns number of Optical Black rows at the start of each exposure in a DOL WDR frame. + */ + virtual uint32_t getOpticalBlackRowCount() const = 0; + + /** + * Returns number of vertical blank period rows for each DOL WDR exposure. + * + * @param[out] verticalBlankPeriodRowCounts The output vector to store the + * vertical blank period (VBP) rows per DOL WDR exposure. Size of the vector is + * getExposureCount()-1 count values. When considering the vertical blank period + * sections for exposure N, the rows of VBP[X] will come before the image data + * if X < N, otherwise they will come after the image data. + */ + virtual Status getVerticalBlankPeriodRowCount( + std::vector* verticalBlankPeriodRowCounts) const = 0; + + /** + * Returns line info markers width in pixels. + * These occur at the start of each pixel row to distinguish row types. There are different + * line info markers to distinguish each different exposure and vertical blank period rows. + * + * Optical black rows have the same line info markers as the exposure type they appear on. + */ + virtual uint32_t getLineInfoMarkerWidth() const = 0; + + /** + * Returns number of margin pixels on left per row. + */ + virtual uint32_t getLeftMarginWidth() const = 0; + + /** + * Returns number of margin pixels on right per row. + */ + virtual uint32_t getRightMarginWidth() const = 0; + + /** + * Returns the physical resolution derived due to the interleaved exposure output from DOL WDR + * frames. + */ + virtual Size2D getPhysicalResolution() const = 0; + +protected: + ~IDolWdrSensorMode() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif // _ARGUS_EXT_DOL_WDR_SENSOR_MODE_H diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/FaceDetect.h b/jetson_multimedia_api/argus/include/Argus/Ext/FaceDetect.h new file mode 100644 index 0000000..3fa85c8 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/FaceDetect.h @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Face Detect API + * + * @b Description: This file defines the FaceDetect extension. + */ + +#ifndef _ARGUS_FACE_DETECT_H +#define _ARGUS_FACE_DETECT_H + +namespace Argus +{ + +/** + * Adds internal face-detection algorithms. It introduces four new interfaces: + * - Ext::IFaceDetectCaps; exposes the face detection capabilities of a CaptureSession. + * - Ext::IFaceDetectSettings; enables face detection for a Request. + * - Ext::IFaceDetectMetadata; returns a list of FaceDetectResult objects from a + * completed capture's CaptureMetadata. + * - Ext::IFaceDetectResult; exposes the image rect and confidence level of a result object + * returned by getFaceDetectResults. + * + * @defgroup ArgusExtFaceDetect Ext::FaceDetect + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_FACE_DETECT, 40412bb0,ba24,11e5,a837,08,00,20,0c,9a,66); + +namespace Ext +{ + +/** + * @class IFaceDetectCaps + * + * Interface to expose the face detection capabilities of a CaptureSession. + * + * @ingroup ArgusCaptureSession ArgusExtFaceDetect + */ +DEFINE_UUID(InterfaceID, IID_FACE_DETECT_CAPS, 40412bb0,ba24,11e5,a837,08,00,20,0c,9a,66); +class IFaceDetectCaps : public Interface +{ +public: + static const InterfaceID& id() { return IID_FACE_DETECT_CAPS; } + + /** + * Returns the maximum number of faces that can be detected by the face detection + * algorithm per request. Returned value must be >= 1. + */ + virtual uint32_t getMaxFaceDetectResults() const = 0; + +protected: + ~IFaceDetectCaps() {} +}; + +/** + * @class IFaceDetectSettings + * + * Interface to face detection settings. + * + * @ingroup ArgusRequest ArgusExtFaceDetect + */ +DEFINE_UUID(InterfaceID, IID_FACE_DETECT_SETTINGS, 40412bb1,ba24,11e5,a837,08,00,20,0c,9a,66); +class IFaceDetectSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_FACE_DETECT_SETTINGS; } + + /** + * Enables or disables face detection. When face detection is enabled the CaptureMetadata + * returned by completed captures will expose the IFaceDetectMetadata interface and the + * FaceDetectResults returned by this interface will expose the IFaceDetectResults interface. + * @param[in] enable whether or not face detection is enabled. + */ + virtual void setFaceDetectEnable(bool enable) = 0; + + /** + * @returns whether or not face detection is enabled. + */ + virtual bool getFaceDetectEnable() const = 0; + +protected: + ~IFaceDetectSettings() {} +}; + +/** + * @class IFaceDetectMetadata + * + * Interface to overall face detection results metadata. + * + * @ingroup ArgusCaptureMetadata ArgusExtFaceDetect + * + * @defgroup ArgusFaceDetectResult FaceDetectResult + * Metadata for a single face detection result, returned by + * Ext::IFaceDetectMetadata::getFaceDetectResults + * @ingroup ArgusCaptureMetadata + */ +DEFINE_UUID(InterfaceID, IID_FACE_DETECT_METADATA, 40412bb2,ba24,11e5,a837,08,00,20,0c,9a,66); +class IFaceDetectMetadata : public Interface +{ +public: + static const InterfaceID& id() { return IID_FACE_DETECT_METADATA; } + + /** + * @returns the face detection results. + * @param[out] results A vector that will be populated with the face detect results. + * + * @returns success/status of the call. + */ + virtual Status getFaceDetectResults(std::vector* results) const = 0; + +protected: + ~IFaceDetectMetadata() {} +}; + +/** + * @class IFaceDetectResult + * + * Interface to the properties of a single face detection result. + * + * @ingroup ArgusFaceDetectResult ArgusExtFaceDetect + */ +DEFINE_UUID(InterfaceID, IID_FACE_DETECT_RESULT, 40412bb3,ba24,11e5,a837,08,00,20,0c,9a,66); +class IFaceDetectResult : public Interface +{ +public: + static const InterfaceID& id() { return IID_FACE_DETECT_RESULT; } + + /** + * @returns the normlized coordinates of the region containing the face, relative + * to the uncropped image sensor mode size. + */ + virtual Rectangle getRect() const = 0; + + /** + * @returns the confidence level of the result. This confidence is in the range + * [0, 1], where 1 is the highest confidence. For a typical application that + * highlights faces in a scene, filtering results to ignore those with a + * confidence less than 0.5 is suggested. + */ + virtual float getConfidence() const = 0; + +protected: + ~IFaceDetectResult() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif // _ARGUS_FACE_DETECT_H diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/InternalFrameCount.h b/jetson_multimedia_api/argus/include/Argus/Ext/InternalFrameCount.h new file mode 100644 index 0000000..99e8549 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/InternalFrameCount.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Internal Frame Count + * + * @b Description: This file defines the InternalFrameCount extension. + * @ingroup ArgusExtInternalFrameCount + */ + +#ifndef _ARGUS_INTERNAL_FRAME_COUNT_H +#define _ARGUS_INTERNAL_FRAME_COUNT_H + +namespace Argus +{ + +/** + * Adds accessors for an internal frame count performance metric. + * The "internal frame count" is an implementation-dependent metric that may be + * used to detect performance issues and producer frame drops for libargus + * implementations that make use of internal captures. + * + * When a device is opened by a CaptureSession, the libargus implementation may + * begin to immediately capture and process frames from the device in order to + * initialize the camera subsystem even before a client request has been + * submitted. Similarly, frames may be captured and processed by the + * implementation when the client is idle or not ready for output in order to + * maintain the driver subsystem and/or auto-control state (exposure, white + * balance, etc). These captures are started and processed entirely within the + * libargus implementation, with no inputs from or outputs to the client + * application, and so are referred to as "internal" captures. These internal + * captures are typically submitted when there are no client requests in the + * capture queue or no stream buffers available for output within a sensor + * frame period, and so knowing when an internal capture has been submitted can + * be used to detect application or performance issues in cases where these + * conditions are not expected to occur. This extension provides this + * information in the form of an "internal frame count", which is the total + * number of captures submitted by the session including both the internal + * captures as well as client-submitted requests. If an internal frame count + * gap appears between two client-submitted captures, this means that one or + * more internal captures have been performed. + * + * When an application is saturating the capture queue to maintain driver + * efficiency, either manually or by using repeat capture requests, the + * internal frame count can be used to detect when internal captures are + * submitted due to a lack of available output stream buffers. This situation + * leads to sensor frames that are not output to the client's output stream, + * which is usually an undesirable behavior that is referred to as "producer + * frame drop". This is generally caused by a high consumer processing time, + * which starves the stream’s available buffer pool, and can often be resolved + * by decreasing the consumer processing time (reducing the time a buffer is + * acquired, decreasing system load, increasing hardware clocks, etc.) + * + * @defgroup ArgusExtInternalFrameCount Ext::InternalFrameCount + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_INTERNAL_FRAME_COUNT, 37afdbda,0020,4f91,957b,46,ea,eb,79,80,c7); + +namespace Ext +{ + +/** + * @class IInternalFrameCount + * + * Interface used to query the internal frame count for a request. + * + * Since internal captures do not generate events, detecting internal captures + * must be done by comparing the internal capture count of successive client- + * submitted capture requests. + * + * This interface is available from: + * - CaptureMetadata objects. + * - Event objects of type EVENT_TYPE_CAPTURE_STARTED. + * + * @ingroup ArgusCaptureMetadata ArgusEventCaptureStarted ArgusExtInternalFrameCount + */ +DEFINE_UUID(InterfaceID, IID_INTERNAL_FRAME_COUNT, c21a7ba2,2b3f,4275,8469,a2,56,34,93,53,93); +class IInternalFrameCount : public Interface +{ +public: + static const InterfaceID& id() { return IID_INTERNAL_FRAME_COUNT; } + + /** + * Returns the internal frame count for the request. + */ + virtual uint64_t getInternalFrameCount() const = 0; + +protected: + ~IInternalFrameCount() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/NonLinearHistogram.h b/jetson_multimedia_api/argus/include/Argus/Ext/NonLinearHistogram.h new file mode 100644 index 0000000..71ae421 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/NonLinearHistogram.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Non Linear Histogram + * + * @b Description: This file defines the Non Linear Histogram extension, and provide + * methods to interpret non linear data in case of compressed data + */ + +#ifndef _ARGUS_NON_LINEAR_HISTOGRAM_H +#define _ARGUS_NON_LINEAR_HISTOGRAM_H + +namespace Argus +{ + +/** + * This adds a method to interpret the compressed histogram data correctly + * It introduces one new interface: + * - Ext::INonLinearHistogram: returns a list of normalized bin indices that map bins from + * getHistogram() to compressed pixel values. + * @defgroup ArgusExtNonLinearHistogram Ext::NonLinearHistogram + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_NON_LINEAR_HISTOGRAM, 45b6a850,e801,11e8,b568,08,00,20,0c,9a,66); + +namespace Ext +{ + +/** + * @class INonLinearHistogram + * + * Interface used to query the metadata to correctly interpret the compressed histogram data. + * Returns the normalized bin values to correctly interpret the compressed bayer histogram + * data. This interface will only be exposed in case the histogram is compressed. + * + * This interface is available from: + * - Histogram child objects returned by ICaptureMetadata::getBayerHistogram() + * + * @ingroup ArgusCaptureMetadata ArgusExtNonLinearHistogram + */ +DEFINE_UUID(InterfaceID, IID_NON_LINEAR_HISTOGRAM, 6e337ec0,e801,11e8,b568,08,00,20,0c,9a,66); +class INonLinearHistogram : public Interface +{ +public: + static const InterfaceID& id() { return IID_NON_LINEAR_HISTOGRAM; } + + /** + * Returns the average bayer values of bins for bayer histogram data. + * + * @param[out] binValues Returns the normalized average bin values (float in [0,1]) for + * bins provided by IBayerHistogram interface. + * In case the histogram data provided by IBayerHistogram::getHistogram() + * is non-linear, this method will return a vector having the same size as + * histogram (i.e. IBayerHistogram::getBinCount()), and will contain + * normalized bayer colour values to which the histogram bin of the same + * index corresponds. + * + * For Example, in case of Non Linear Histogram + * + * IBayerHistogram->getHistogram(&histogram); + * INonLinearHistogram->getBinValues(&values); + * + * for(int i = 0 ; i < histogram.size() ; i++) + * { + * cout<<" bin: " << i + * <<" normalized bin Value: " << values[i] + * <<" frequency: " << histogram[i]; + * } + */ + virtual Status getHistogramBinValues(std::vector< BayerTuple >* binValues) const = 0; + +protected: + ~INonLinearHistogram() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif // _ARGUS_NON_LINEAR_HISTOGRAM_H diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/PwlWdrSensorMode.h b/jetson_multimedia_api/argus/include/Argus/Ext/PwlWdrSensorMode.h new file mode 100644 index 0000000..258d228 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/PwlWdrSensorMode.h @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Piecewise Linear Compression for WDR Sensor Modes + * + * @b Description: Adds extra functionalities for the + * Piecewise Linear (PWL) compressed Wide Dynamic Range (WDR) sensor mode type. + */ + +#ifndef _ARGUS_EXT_PWL_WDR_SENSOR_MODE_H +#define _ARGUS_EXT_PWL_WDR_SENSOR_MODE_H + +namespace Argus +{ + +/** + * Adds extra functionalities for the Piecewise Linear (PWL) Wide Dynamic + * Range (WDR) sensor mode type. It introduces one new interface: + * - Ext::IPwlWdrSensorMode; returns a list of normalized float coordinates (x,y) that define + * the PWL compression curve used in the PWL WDR mode. This PWL compression + * curve is used by the sensor to compress WDR pixel values before sending + * them over CSI. This is done to save bandwidth for data transmission over + * VI-CSI. The compression converts the WDR pixel values from InputBitDepth + * space to OutputBitDepth space.The coordinates of the PWL compression + * curve can be un-normalized by scaling x-axis and y-axis values + * by InputBitDepth and OutputBitDepth respectively. The Bit depths can be + * obtained by using the respective methods in the ISensorMode interface. + * @see ISensorMode + * + * @defgroup ArgusExtPwlWdrSensorMode Ext::PwlWdrSensorMode + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_PWL_WDR_SENSOR_MODE, 7f510b90,582b,11e6,bbb5,40,16,7e,ab,86,92); + +namespace Ext +{ + +/** + * @class IPwlWdrSensorMode + * + * Interface to the properties of a PWL WDR device. + * + * Returns a list of normalized float coordinates (x,y) that define + * the Piecewise Linear (PWL) compression curve used in the PWL Wide Dynamic Range (WDR) mode. + * The coordinates are returned in a Point2D tuple. The coordinates + * can be un-normalized by scaling x-axis and y-axis values by InputBitDepth + * and OutputBitDepth respectively. The Bit depths can be obtained by using + * the respective methods in the ISensorMode interface. + * @see ISensorMode + * + * @ingroup ArgusSensorMode ArgusExtPwlWdrSensorMode + */ +DEFINE_UUID(InterfaceID, IID_PWL_WDR_SENSOR_MODE, 7f5acea0,582b,11e6,9414,40,16,7e,ab,86,92); +class IPwlWdrSensorMode : public Interface +{ +public: + static const InterfaceID& id() { return IID_PWL_WDR_SENSOR_MODE; } + + /** + * Returns the number of control points coordinates in the Piecewise Linear compression + * curve. + */ + virtual uint32_t getControlPointCount() const = 0; + + /** + * Returns the Piecewise Linear (PWL) compression curve coordinates. + * + * @param[out] points The output vector to store the PWL compression curve coordinates. + * Upon successful return, this vector will filled in with + * getControlPointCount() count values, each containing a coordinates of + * PWL compression curve within a Point2D tuple. + */ + virtual Status getControlPoints(std::vector< Point2D >* points) const = 0; + +protected: + ~IPwlWdrSensorMode() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif // _ARGUS_EXT_PWL_WDR_SENSOR_MODE_H diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/SensorEepromData.h b/jetson_multimedia_api/argus/include/Argus/Ext/SensorEepromData.h new file mode 100644 index 0000000..877818e --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/SensorEepromData.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Sensor EEPROM data API + * + * @b Description: This file defines the SensorEepromData extension. + */ + +#ifndef _ARGUS_SENSOR_EEPROM_DATA_H +#define _ARGUS_SENSOR_EEPROM_DATA_H + +namespace Argus +{ + +/** + * Adds a EEPROM interface to get EEPROM data. + * It introduces one new interface: + * - Ext::ISensorEepromData: Gets EEPROM data. + * @defgroup ArgusExtEepromData Ext::SensorEepromData + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_SENSOR_EEPROM_DATA, d14b2030,181a,11eb,8b6f,08,00,20,0c,9a,66); + +namespace Ext +{ + +/** + * @class ISensorEepromData + * + * Interface used to get EEPROM data + * + * @ingroup ArgusCameraDevice ArgusExtSensorEepromData + */ +DEFINE_UUID(InterfaceID, IID_SENSOR_EEPROM_DATA, 063062b0,181b,11eb,8b6f,08,00,20,0c,9a,66); +class ISensorEepromData : public Interface +{ +public: + static const InterfaceID& id() { return IID_SENSOR_EEPROM_DATA; } + + /** + * Returns the size of the EEPROM data. + */ + virtual uint32_t getSensorEepromDataSize() const = 0; + + /** + * Copies back the EEPROM data to the provided memory location. + * If the size of @a dst is smaller than the total size of the EEPROM data, only the first + * bytes up to size are copied. + * @param [out] dst The pointer to the location where the data will be copied. + * The caller is responsible for allocating and managing the memory. + * @param [in] size The size of the destination. + */ + virtual Status getSensorEepromData(void *dst, uint32_t size) const = 0; + +protected: + ~ISensorEepromData() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif + diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/SensorOtpData.h b/jetson_multimedia_api/argus/include/Argus/Ext/SensorOtpData.h new file mode 100644 index 0000000..ab07699 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/SensorOtpData.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Sensor OTP data API + * + * @b Description: This file defines the SensorOtpData extension. + */ + +#ifndef _ARGUS_SENSOR_OTP_DATA_H +#define _ARGUS_SENSOR_OTP_DATA_H + +namespace Argus +{ + +/** + * Adds a OTP interface to get OTP data. + * It introduces one new interface: + * - Ext::ISensorOtpData: gets OTP data. + * @defgroup ArgusExtOtpData Ext::SensorOtpData + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_SENSOR_OTP_DATA, 1651af90,19b1,11eb,8b6f,08,00,20,0c,9a,66); + +namespace Ext +{ + +/** + * @class ISensorOtpData + * + * Interface used to get OTP data + * + * @ingroup ArgusCameraDevice ArgusExtSensorOtpData + */ +DEFINE_UUID(InterfaceID, IID_SENSOR_OTP_DATA, 3d125710,19b1,11eb,8b6f,08,00,20,0c,9a,66); +class ISensorOtpData : public Interface +{ +public: + static const InterfaceID& id() { return IID_SENSOR_OTP_DATA; } + + /** + * Returns the size of the OTP data. + */ + virtual uint32_t getSensorOtpDataSize() const = 0; + + /** + * Copies back the OTP data to the provided memory location. + * If the size of @a dst is smaller than the total size of the EEPROM data, only the first + * bytes up to size are copied. + * @param [out] dst The pointer to the location where the data will be copied. + * The caller is responsible for allocating and managing the memory. + * @param [in] size The size of the destination. + */ + virtual Status getSensorOtpData(void *dst, uint32_t size) const = 0; + +protected: + ~ISensorOtpData() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif + + diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/SensorPrivateMetadata.h b/jetson_multimedia_api/argus/include/Argus/Ext/SensorPrivateMetadata.h new file mode 100644 index 0000000..ae65fdc --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/SensorPrivateMetadata.h @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Sensor Private Metadata API + * + * @b Description: This file defines the SensorPrivateMetadata extension. + */ + +#ifndef _ARGUS_SENSOR_PRIVATE_METADATA_H +#define _ARGUS_SENSOR_PRIVATE_METADATA_H + +namespace Argus +{ +/** + * Adds accessors for sensor embedded metadata. This data is metadata that the sensor embeds + * inside the frame, the type and formating of which depends on the sensor. It is up to the + * user to correctly parse the data based on the specifics of the sensor used. + * + * - Ext::ISensorPrivateMetadataCaps: Determines whether a device is capable of + * private metadata output. + * - Ext::ISensorPrivateMetadataRequest: Enables private metadata output from a capture request. + * - Ext::ISensorPrivateMetadata: Accesses the sensor private metadata. + * + * @defgroup ArgusExtSensorPrivateMetadata Ext::SensorPrivateMetadata + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_SENSOR_PRIVATE_METADATA, 7acf4352,3a75,46e7,9af1,8d,71,da,83,15,23); + +namespace Ext +{ + +/** + * @class ISensorPrivateMetadataCaps + * + * Interface used to query the availability and size in bytes of sensor private metadata. + * + * @ingroup ArgusCameraDevice ArgusExtSensorPrivateMetadata + */ +DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_CAPS, e492d2bf,5285,476e,94c5,ee,64,d5,3d,94,ef); +class ISensorPrivateMetadataCaps : public Interface +{ +public: + static const InterfaceID& id() { return IID_SENSOR_PRIVATE_METADATA_CAPS; } + + /** + * Returns the size in bytes of the private metadata. + */ + virtual size_t getMetadataSize() const = 0; + +protected: + ~ISensorPrivateMetadataCaps() {} +}; + +/** + * @class ISensorPrivateMetadataRequest + * + * Interface used enable the output of sensor private metadata for a request. + * + * @ingroup ArgusRequest ArgusExtSensorPrivateMetadata + */ +DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_REQUEST, 5c868b69,42f5,4ec9,9b93,44,11,c9,6c,02,e3); +class ISensorPrivateMetadataRequest : public Interface +{ +public: + static const InterfaceID& id() { return IID_SENSOR_PRIVATE_METADATA_REQUEST; } + + /** + * Enables the sensor private metadata, will only work if the sensor supports embedded metadata. + * @param[in] enable whether to output embedded metadata. + */ + virtual void setMetadataEnable(bool enable) = 0; + + /** + * Returns if the metadata is enabled for this request. + */ + virtual bool getMetadataEnable() const = 0; + +protected: + ~ISensorPrivateMetadataRequest() {} +}; + +/** + * @class ISensorPrivateMetadata + * + * Interface used to access sensor private metadata. + * + * @ingroup ArgusCaptureMetadata ArgusExtSensorPrivateMetadata + */ +DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA, 68cf6680,70d7,4b52,9a99,33,fb,65,81,a2,61); +class ISensorPrivateMetadata : public Interface +{ +public: + static const InterfaceID& id() { return IID_SENSOR_PRIVATE_METADATA; } + + /** + * Returns the size of the embedded metadata. + */ + virtual size_t getMetadataSize() const = 0; + + /** + * Copies back the metadata to the provided memory location. + * If the size of @a dst is smaller than the total size of the metadata, only the first + * bytes up to size are copied. + * @param [in,out] dst The pointer to the location where the data will be copied. + * The caller is responsible for allocating and managing the memory. + * @param [in] size The size of the destination. + */ + virtual Status getMetadata(void *dst, size_t size) const = 0; + +protected: + ~ISensorPrivateMetadata() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif // _ARGUS_SENSOR_PRIVATE_METADATA_H diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/SensorPrivateMetadataClientBuffer.h b/jetson_multimedia_api/argus/include/Argus/Ext/SensorPrivateMetadataClientBuffer.h new file mode 100644 index 0000000..d13b2a2 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/SensorPrivateMetadataClientBuffer.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Sensor Private Metadata Client Buffer API + * + * @b Description: This file defines the SensorPrivateMetadataClientBuffer extension. + */ + +#ifndef _ARGUS_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_H +#define _ARGUS_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_H + +namespace Argus +{ +/** + * Adds accessors for set client buffer for sensor embedded metadata. Sensor embeds private info + * (for example PDAF data) in sensor metadata. Client using Ext::SensorPrivateMetadata API + * to obtain this meta data involves several memcpy. When sensor metadata size is large, + * this will cause high CPU usage and affect camera performance. + * ISensorPrivateMetadataClientBufferRequest allow client to set a client buffer and Argus write + * to it directly without extra memcpy. + * This is only supported in single process mode as in client-server (multiprocess) mode, client + * and server are in different process and their own address space. + * + * - Ext::ISensorPrivateMetadataClientBufferRequest: Sets client buffer for private metadata. + * + * @defgroup ArgusExtSensorPrivateMetadataClientBuffer Ext::SensorPrivateMetadataClientBuffer + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER, 85cbb9b6,cd7f,4e8c,9462,9f,21,cd,a7,40,1c); + +namespace Ext +{ + +/** + * @class ISensorPrivateMetadataClientBufferRequest + * + * Interface used to set client buffer for sensor private metadata for a request + * + * @ingroup ArgusRequest ArgusExtSensorPrivateMetadataClientBuffer + */ +DEFINE_UUID(InterfaceID, IID_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_REQUEST, 5c868b69,42f5,4ec9,9b93,44,11,c9,6c,02,e4); +class ISensorPrivateMetadataClientBufferRequest : public Interface +{ +public: + static const InterfaceID& id() { return IID_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_REQUEST; } + + /** + * Client allocate the metadata buffer and set the address of the buffer, + * Argus writes the sensor metadata directly to the buffer. + * This method is supported only in single process mode. + * @param[in] buf Specifies the address of client buffer. + * @param[in] size Specifies the size in bytes of the metadata buffer. + */ + virtual Status setClientMetadataBuffer(void* buf, size_t size) = 0; + + /** + * Returns if client metadata buffer is used for this request. + */ + virtual bool getClientMetadataBufferEnable() const = 0; + +protected: + ~ISensorPrivateMetadataClientBufferRequest() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif // _ARGUS_SENSOR_PRIVATE_METADATA_CLIENT_BUFFER_H diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/SensorTimestampTsc.h b/jetson_multimedia_api/argus/include/Argus/Ext/SensorTimestampTsc.h new file mode 100644 index 0000000..f2790cd --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/SensorTimestampTsc.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: TSC HW SensorTimestamp API + * + * @b Description: This file defines the SensorTimestampTsc extension. + */ + +#ifndef _ARGUS_SENSOR_TIMESTAMP_TSC_H +#define _ARGUS_SENSOR_TIMESTAMP_TSC_H + +namespace Argus +{ + +/** + * Adds a timestamp interface to get TSC HW timestamp. + * It introduces one new interface: + * - Ext::ISensorTimestampTsc: gets TSC HW timestamp. + * @defgroup ArgusExtSensorTimestampTsc Ext::SensorTimestampTsc + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_SENSOR_TIMESTAMP_TSC, e6cc1360,06ea,11eb,8b6e,08,00,20,0c,9a,66); + + +namespace Ext +{ + +/** + * @class ISensorTimestampTsc + * + * Interface used to get TSC HW timestamp + * + * @ingroup ArgusCaptureMetadata ArgusExtSensorTimestampTsc + */ +DEFINE_UUID(InterfaceID, IID_SENSOR_TIMESTAMP_TSC, 35581ba0,06eb,11eb,8b6e,08,00,20,0c,9a,66); +class ISensorTimestampTsc : public Interface +{ +public: + static const InterfaceID& id() { return IID_SENSOR_TIMESTAMP_TSC; } + + /** + * Returns the VI HW (SOF) timestamp based on tegra wide timestamp system counter (TSC) + * This is the start timestamp for the sensor (in nanoseconds). + */ + virtual uint64_t getSensorSofTimestampTsc() const = 0; + + /** + * Returns the VI HW (EOF) timestamp based on tegra wide timestamp system counter (TSC) + * This is the end timestamp for the sensor (in nanoseconds). + */ + virtual uint64_t getSensorEofTimestampTsc() const = 0; + +protected: + ~ISensorTimestampTsc() {} +}; + +} // namespace Ext + +} // namespace Argus + +#endif diff --git a/jetson_multimedia_api/argus/include/Argus/Ext/SyncSensorCalibrationData.h b/jetson_multimedia_api/argus/include/Argus/Ext/SyncSensorCalibrationData.h new file mode 100644 index 0000000..7a2b73f --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Ext/SyncSensorCalibrationData.h @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus Extension: Sync Sensor Calibration Data API + * + * @b Description: This file defines the SyncSensorCalibrationData extension. + */ + +#ifndef _ARGUS_SYNC_SENSOR_CALIBRATION_DATA_H +#define _ARGUS_SYNC_SENSOR_CALIBRATION_DATA_H + +namespace Argus +{ + +/** + * The DistortionType of a sync sensor defines the type of distortion model. + */ +DEFINE_NAMED_UUID_CLASS(DistortionType); +DEFINE_UUID(DistortionType, DISTORTION_TYPE_POLYNOMIAL, 23e59580,17ff,11eb,8b6f,08,00,20,0c,9a,66); +DEFINE_UUID(DistortionType, DISTORTION_TYPE_FISHEYE, 23e59581,17ff,11eb,8b6f,08,00,20,0c,9a,66); +DEFINE_UUID(DistortionType, DISTORTION_TYPE_OMINI_DIRECTIONAL, 23e5bc90,17ff,11eb,8b6f,08,00,20,0c,9a,66); + +/** + * The MappingType of a sync sensor defines the type of mapping used for fisheye distortion model. + */ +DEFINE_NAMED_UUID_CLASS(MappingType); +DEFINE_UUID(MappingType, MAPPING_TYPE_EQUIDISTANT, 9e7f3c10,17ff,11eb,8b6f,08,00,20,0c,9a,66); +DEFINE_UUID(MappingType, MAPPING_TYPE_EQUISOLID, 9e7f3c11,17ff,11eb,8b6f,08,00,20,0c,9a,66); +DEFINE_UUID(MappingType, MAPPING_TYPE_ORTHOGRAPHIC, 9e7f3c12,17ff,11eb,8b6f,08,00,20,0c,9a,66); +DEFINE_UUID(MappingType, MAPPING_TYPE_STEREOGRAPHIC, 9e7f3c13,17ff,11eb,8b6f,08,00,20,0c,9a,66); + +/** + * Adds accessors for sync sensor calibration data. + * - Ext::ISyncSensorCalibrationData : Accesses the sync sensor calibration data. + * + * @defgroup ArgusExtSyncSensorCalibrationData Ext::SyncSensorCalibrationData + * @ingroup ArgusExtensions + */ +DEFINE_UUID(ExtensionName, EXT_SYNC_SENSOR_CALIBRATION_DATA, 10845a70,d52f,11ea,8b6e,08,00,20,0c,9a,66); +namespace Ext +{ +/** + * @class ISyncSensorCalibrationData + * + * Interface used to access sync sensor calibration data. + * + * @ingroup ArgusCameraDevice ArgusExtSyncSensorCalibrationData + */ +DEFINE_UUID(InterfaceID, IID_SYNC_SENSOR_CALIBRATION_DATA, 5925f360,d52f,11ea,8b6e,08,00,20,0c,9a,66); +class ISyncSensorCalibrationData : public Interface +{ +public: + static const InterfaceID& id() { return IID_SYNC_SENSOR_CALIBRATION_DATA; } + + /** + * Returns the sync sensor module id in the provided memory location. + * The maximum supported length of sync sensor id string is 32. + * @param [in,out] syncSensorId Pointer for getting the sync sensor id string associated + * with sensor. + * @param [in] size The size of the syncSensorId. + */ + virtual Status getSyncSensorModuleId(void* syncSensorId, size_t size) const = 0; + + /** + * Returns the size of the image in pixels. + */ + virtual Size2D getImageSizeInPixels() const = 0; + + /** + * Returns the focal length fx and fy from intrinsic parameters. + */ + virtual Point2D getFocalLength() const = 0; + + /** + * Returns the skew from intrinsic parameters. + */ + virtual float getSkew() const = 0; + + /** + * Returns the principal point (optical center) x and y from intrinsic parameters. + */ + virtual Point2D getPrincipalPoint() const = 0; + + /** + * Returns the lens distortion type as per the model being used. + */ + virtual DistortionType getLensDistortionType() const = 0; + + /** + * Returns the mapping type in case of fisheye distortion. + */ + virtual MappingType getFisheyeMappingType() const = 0; + + /** + * Returns the radial coefficients count in case of polynomial or fisheye distortion. + * + * @param[in] distortionType The lens distortion type. + */ + virtual uint32_t getRadialCoeffsCount(const DistortionType& distortionType) const = 0; + + /** + * Returns the radial coefficients vector as per distortion type and + * size of the vector is given by getRadialCoeffsCount(). + * + * @param[out] k The radial coefficient vector from distortion properties. + * + * @param[in] distortionType The lens distortion type. + */ + virtual Status getRadialCoeffs(std::vector* k, + const DistortionType& distortionType) const = 0; + + /** + * Returns the tangential coefficients count in case of polynomial distortion. + */ + virtual uint32_t getTangentialCoeffsCount() const = 0; + + /** + * Returns the tangential coefficients in case of polynomial distortion and + * size of the vector is given by getTangentialCoeffsCount(). + * + * @param[out] p The tangential coefficient vector from distortion properties. + */ + virtual Status getTangentialCoeffs(std::vector* p) const = 0; + + /** + * Returns the rotation parameter expressed in Rodrigues notation from extrinsic parameters. + * angle = sqrt(rx^2+ry^2+rz^2). + * unit axis = [rx,ry,rz]/angle. + */ + virtual Point3D getRotationParams() const = 0; + + /** + * Returns the translation parameters in x, y and z co-ordinates with respect to a + * reference point from extrinsic params. + */ + virtual Point3D getTranslationParams() const = 0; + + /** + * Returns whether IMU sensor is present or not. + */ + virtual bool isImuSensorAvailable() const = 0; + + /** + * Returns the linear acceleration bias for all three axes x, y and z of the IMU device. + */ + virtual Point3D getLinearAccBias() const = 0; + + /** + * Returns the angular velocity bias for all three axes x, y and z of the IMU device. + */ + virtual Point3D getAngularVelocityBias() const = 0; + + /** + * Returns the gravity acceleration for all three axes x, y and z of the IMU device. + */ + virtual Point3D getGravityAcc() const = 0; + + /** + * Returns the IMU rotation parameter expressed in Rodrigues notation from extrinsic parameters. + * angle = sqrt(rx^2+ry^2+rz^2). + * unit axis = [rx,ry,rz]/angle. + */ + virtual Point3D getImuRotationParams() const = 0; + + /** + * Returns the IMU translation parameters in x, y and z co-ordinates with respect to a + * reference point from extrinsic params. + */ + virtual Point3D getImuTranslationParams() const = 0; + +protected: + ~ISyncSensorCalibrationData() {} + +}; + +} // namespace Ext + +} // namespace Argus + +#endif // _ARGUS_SYNC_SENSOR_CALIBRATION_DATA_H + diff --git a/jetson_multimedia_api/argus/include/Argus/Request.h b/jetson_multimedia_api/argus/include/Argus/Request.h new file mode 100644 index 0000000..f3a1c7e --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Request.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2016-2022, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Request API + * + * @b Description: Defines the Request object and core IRequest interface. + */ + +#ifndef _ARGUS_REQUEST_H +#define _ARGUS_REQUEST_H + +namespace Argus +{ + +/** + * Container for all settings used by a single capture request. + * + * @defgroup ArgusRequest Request + * @ingroup ArgusObjects + */ +class Request : public InterfaceProvider, public Destructable +{ +protected: + ~Request() {} +}; + +/** + * @class IRequest + * + * Interface to the core Request settings. + * + * @ingroup ArgusRequest + * + * @defgroup ArgusAutoControlSettings AutoControlSettings + * Child auto control settings, returned by IRequest::getAutoControlSettings + * @ingroup ArgusRequest + * + * @defgroup ArgusStreamSettings StreamSettings + * Child per-stream settings, returned by IRequest::getStreamSettings + * @ingroup ArgusRequest + * + * @defgroup ArgusSourceSettings SourceSettings + * Child source settings, returned by IRequest::getSourceSettings + * @ingroup ArgusRequest + */ +DEFINE_UUID(InterfaceID, IID_REQUEST, eb9b3750,fc8d,455f,8e0f,91,b3,3b,d9,4e,c5); +class IRequest : public Interface +{ +public: + static const InterfaceID& id() { return IID_REQUEST; } + + /** + * Enables the specified output stream. + * Captures made with this Request will produce output on that stream. + */ + virtual Status enableOutputStream(OutputStream* stream) = 0; + + /** + * Disables the specified output stream. + */ + virtual Status disableOutputStream(OutputStream* stream) = 0; + + /** + * Disables all output streams. + */ + virtual Status clearOutputStreams() = 0; + + /** + * Returns all enabled output streams. + * @param[out] streams A vector that will be populated with the enabled streams. + * + * @returns success/status of the call. + */ + virtual Status getOutputStreams(std::vector* streams) const = 0; + + /** + * Returns the Stream settings for a particular stream in the request. + * The returned object will have the same lifespan as this object, + * and expose the IStreamSettings interface. + * @param[in] stream The stream for which the settings are requested. + */ + virtual InterfaceProvider* getStreamSettings(const OutputStream* stream) = 0; + + /** + * Returns the capture control settings for a given AC. + * The returned object will have the same lifespan as this object, + * and expose the IAutoControlSettings interface. + * @param[in] acId The id of the AC component for which the settings are requested. + * (Currently unused) + */ + virtual InterfaceProvider* getAutoControlSettings(const AutoControlId acId = 0) = 0; + + /** + * Returns the source settings for the request. + * The returned object will have the same lifespan as this object, + * and expose the ISourceSettings interface. + */ + virtual InterfaceProvider* getSourceSettings() = 0; + + /** + * Sets the client data for the request. This value is passed through to and queryable + * from the CaptureMetadata generated for any captures completed using this Request. + * Default value is 0. + * @param[in] data The client data. + */ + virtual Status setClientData(uint32_t data) = 0; + + /** + * Gets the client data for the request. + */ + virtual uint32_t getClientData() const = 0; + + /** + * Set this to false if o/p buffer is Bayer and ISP stage needs to be skipped + */ + virtual Status setEnableIspStage(bool enableIspStage) = 0; + + /** + * Check if ISP stage is enabled/disabled. + */ + virtual bool getEnableIspStage() const = 0; + +protected: + ~IRequest() {} +}; + +} // namespace Argus + +#endif // _ARGUS_REQUEST_H diff --git a/jetson_multimedia_api/argus/include/Argus/Settings.h b/jetson_multimedia_api/argus/include/Argus/Settings.h new file mode 100644 index 0000000..93cd347 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Settings.h @@ -0,0 +1,717 @@ +/* + * Copyright (c) 2016-2023, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Settings API + * + * @b Description: This file defines the settings that control the sensor module. + */ + +#ifndef _ARGUS_SETTINGS_H +#define _ARGUS_SETTINGS_H + +namespace Argus +{ + +/** + * @class ISourceSettings + * + * Interface to the source settings (provided by IRequest::getSourceSettings()). + * + * @ingroup ArgusSourceSettings + */ +DEFINE_UUID(InterfaceID, IID_SOURCE_SETTINGS, eb7ae38c,3c62,4161,a92a,a6,4f,ba,c6,38,83); +class ISourceSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_SOURCE_SETTINGS; } + + /** + * Sets the exposure time range of the source, in nanoseconds. + * If the exposure range is outside of the available range, the capture's exposure time + * will be as close as possible to the exposure range specified. + * @param[in] exposureTimeRange Exposure time range, in nanoseconds. + * @see ISensorMode::getExposureTimeRange() + * @todo Document implications of quantization. + * + * @returns success/status of the call. + */ + virtual Status setExposureTimeRange(const Range& exposureTimeRange) = 0; + + /** + * Returns the exposure time range of the source, in nanoseconds. + */ + virtual Range getExposureTimeRange() const = 0; + + /** + * Sets the focus position, in focuser units. If the position + * is set outside of the focuser limits, the position will be clamped. + * @param[in] position The new focus position, in focuser units. + * @see ICameraProperties::getFocusPositionRange() + * + * @returns success/status of the call. + */ + virtual Status setFocusPosition(int32_t position) = 0; + + /** + * Returns the focus position, in focuser units. + */ + virtual int32_t getFocusPosition() const = 0; + + /** + * Sets the aperture position. If the position is not valid, + * error will be returned. + * @param[in] position The new aperture position. + * @see ICameraProperties::getAperturePositionRange() + * + * @returns success/status of the call. + */ + virtual Status setAperturePosition(int32_t position) = 0; + + /** + * Returns the aperture position. + */ + virtual int32_t getAperturePosition() const = 0; + + /** + * Sets the aperture motor speed in motor steps/second. If the speed + * is set outside of the speed limits, the speed will be clamped. + * @param[in] speed The new speed. + * @see ICameraProperties::getApertureMotorSpeedRange() + * + * @returns success/status of the call. + */ + virtual Status setApertureMotorSpeed(float speed) = 0; + + /** + * Returns the aperture motor speed in motor steps/second. + */ + virtual float getApertureMotorSpeed() const = 0; + + /** + * Sets the aperture f-number. If the f-number is not valid, + * error will be returned. + * @param[in] fnumber The new f-number. + * + * @returns success/status of the call. + */ + virtual Status setApertureFNumber(float fnumber) = 0; + + /** + * Returns the aperture f-number. + */ + virtual float getApertureFNumber() const = 0; + + /** + * Sets the frame duration range, in nanoseconds. + * If frame range is out of bounds of the current sensor mode, + * the capture's frame duration will be as close as possible to the range specified. + * @param[in] frameDurationRange Frame duration range, in nanoseconds + * @see ISensorMode::getFrameDurationRange() + * + * @returns success/status of the call. + */ + virtual Status setFrameDurationRange(const Range& frameDurationRange) = 0; + + /** + * Returns the frame duration range, in nanoseconds. + */ + virtual Range getFrameDurationRange() const = 0; + + /** + * Sets the gain range for the sensor. + * The range has to be within the max and min reported in the CameraProperties + * Otherwise the range will be clipped. + * @param[in] gainRange scalar gain range + * @see ISensorMode::getAnalogGainRange() + * + * @returns success/status of the call. + */ + virtual Status setGainRange(const Range& gainRange) = 0; + + /** + * Returns the gain range. + */ + virtual Range getGainRange() const = 0; + + /** + * Sets the sensor mode. + * Note that changing sensor mode from one capture to the next may result in + * multiple sensor frames being dropped between the two captures. + * @param[in] mode Desired sensor mode for the capture. + * @see ICameraProperties::getAllSensorModes() + * + * @returns success/status of the call. + */ + virtual Status setSensorMode(SensorMode* mode) = 0; + + /** + * Returns the sensor mode. + */ + virtual SensorMode* getSensorMode() const = 0; + + /** + * Sets the user-specified optical black levels. + * These values will be ignored unless getOpticalBlackEnable() == true + * Values are floating point in the range [0,1) normalized based on sensor bit depth. + * @param[in] opticalBlackLevels opticalBlack levels in range [0,1) per bayer phase + * + * @returns success/status of the call. + */ + virtual Status setOpticalBlack(const BayerTuple& opticalBlackLevels) = 0; + + /** + * Returns user-specified opticalBlack level per bayer phase. + * + * @returns opticalBlackLevels + */ + virtual BayerTuple getOpticalBlack() const = 0; + + /** + * Sets whether or not user-provided optical black levels are used. + * @param[in] enable If @c true, Argus will use the user-specified optical black levels. + * @see setOpticalBlack() + * If @c false, the Argus implementation will choose the optical black values. + * + * @returns success/status of the call. + */ + virtual Status setOpticalBlackEnable(bool enable) = 0; + + /** + * Returns whether user-specified optical black levels are enabled. + * If false, the Argus implementation will choose the optical black values. + * @see setOpticalBlackEnable() + * + * @returns enable + */ + virtual bool getOpticalBlackEnable() const = 0; + + +protected: + ~ISourceSettings() {} +}; + +/** + * @class IAutoControlSettings + * + * Interface to the auto control settings (provided by IRequest::getAutoControlSettings()). + * + * @ingroup ArgusAutoControlSettings + */ +DEFINE_UUID(InterfaceID, IID_AUTO_CONTROL_SETTINGS, 1f2ad1c6,cb13,440b,bc95,3f,fd,0d,19,91,db); +class IAutoControlSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_AUTO_CONTROL_SETTINGS; } + + /** + * Sets the AE antibanding mode. + * @param[in] mode The requested antibanding mode. + * + * @returns success/status of the call. + */ + virtual Status setAeAntibandingMode(const AeAntibandingMode& mode) = 0; + + /** + * Returns the AE antibanding mode. + */ + virtual AeAntibandingMode getAeAntibandingMode() const = 0; + + /** + * Sets the AE mode. + * @param[in] mode The new AE mode. + * + * @returns success/status of the call. + */ + virtual Status setAeMode(const AeMode& mode) = 0; + + /** + * Returns the AE mode. + */ + virtual AeMode getAeMode() const = 0; + + /** + * Sets the AE lock. When locked, AE will maintain constant exposure. + * @param[in] lock If @c true, locks AE at its current exposure. + * + * @returns success/status of the call. + */ + virtual Status setAeLock(bool lock) = 0; + + /** + * Returns the AE lock. + */ + virtual bool getAeLock() const = 0; + + /** + * Sets the AE regions of interest. + * If no regions are specified, the region of interest will be determined by device + * and obtain by CameraMetadata::getAeRegions. + * @param[in] regions The AE regions of interest. + * The maximum number of regions is returned by @c ICameraProperties::getMaxAeRegions(). + * The minimum supported size of resultatnt region is returned by + * @c ICameraProperties::getMinAeRegionSize(). + * + * @returns success/status of the call. + */ + virtual Status setAeRegions(const std::vector& regions) = 0; + + /** + * Returns the AE regions of interest. + * @param[out] regions A vector that will be populated with the AE regions of interest. + * + * @returns success/status of the call. + */ + virtual Status getAeRegions(std::vector* regions) const = 0; + + /** + * Sets the bayer histogram region of interest. + * If no region is specified, the entire image is the region of interest. + * @param[in] region The bayer histogram region of interest. + * + * @returns success/status of the call. + */ + virtual Status setBayerHistogramRegion(const Rectangle& region) = 0; + + /** + * Returns the rectangle of the bayer histogram region of interest. + */ + virtual Rectangle getBayerHistogramRegion() const = 0; + + /** + * Sets the AWB lock. + * @param[in] lock If @c true, locks AWB at its current state. + * + * @returns success/status of the call. + */ + virtual Status setAwbLock(bool lock) = 0; + + /** + * Returns the AWB lock. + */ + virtual bool getAwbLock() const = 0; + + /** + * Sets the AWB mode. + * @param[in] mode The new AWB mode. + * + * @returns success/status of the call. + */ + virtual Status setAwbMode(const AwbMode& mode) = 0; + + /** + * Returns the AWB mode. + */ + virtual AwbMode getAwbMode() const = 0; + + /** + * Sets the AWB regions of interest. + * If no regions are specified, the region of interest will be determined by device + * and obtain by CameraMetadata::getAwbRegions. + * @param[in] regions The AWB regions of interest. + * The maximum number of regions is returned by @c ICameraProperties::getMaxAwbRegions(). + * + * @returns success/status of the call. + */ + virtual Status setAwbRegions(const std::vector& regions) = 0; + + /** + * Returns the AWB regions of interest. + * @param[out] regions A vector that will be populated with the AWB regions of interest. + * + * @returns success/status of the call. + */ + virtual Status getAwbRegions(std::vector* regions) const = 0; + + /** + * Sets the AF mode. + * @param[in] mode The new AF mode. + * + * @returns success/status of the call. + */ + virtual Status setAfMode(const AfMode& mode) = 0; + + /** + * Returns the AF mode. + */ + virtual AfMode getAfMode() const = 0; + + /** + * Sets the AF regions of interest. + * If no regions are specified, the region of interest will be determined by device + * and obtain by CameraMetadata::getAfRegions. + * @param[in] regions The AF regions of interest. + * The maximum number of regions is returned by @c ICameraProperties::getMaxAfRegions(). + * + * @returns success/status of the call. + */ + virtual Status setAfRegions(const std::vector& regions) = 0; + + /** + * Returns the AF regions of interest. + * @param[out] regions A vector that will be populated with the AF regions of interest. + * + * @returns success/status of the call. + */ + virtual Status getAfRegions(std::vector* regions) const = 0; + + /** + * Sets the Manual White Balance gains. + * @param[in] gains The Manual White Balance Gains + * + * @returns success/status of the call. + */ + virtual Status setWbGains(const BayerTuple& gains) = 0; + + /** + * Returns the Manual White Balance gains. + * + * @returns Manual White Balance Gains structure + */ + virtual BayerTuple getWbGains() const = 0; + + /** + * Returns the size of the color correction matrix. + */ + virtual Size2D getColorCorrectionMatrixSize() const = 0; + + /** + * Sets the user-specified color correction matrix. + * This matrix will be ignored unless getColorCorrectionMatrixEnable() == true. + * The active color correction matrix used for image processing may be internally modified + * to account for the active color saturation value (either user-specified or automatically + * generated, after biasing, @see setColorSaturation and @see setColorSaturationBias). + * @param[in] matrix A color correction matrix that maps sensor RGB to linear sRGB. This matrix + * is given in row-major order and must have the size w*h, where w and h are + * the width and height of the Size returned by getColorCorrectionMatrixSize() + * + * @returns success/status of the call. + */ + virtual Status setColorCorrectionMatrix(const std::vector& matrix) = 0; + + /** + * Returns the user-specified color correction matrix. + * @param[out] matrix A matrix that will be populated with the CCM. + * + * @returns success/status of the call. + */ + virtual Status getColorCorrectionMatrix(std::vector* matrix) const = 0; + + /** + * Enables the user-specified color correction matrix. + * @param[in] enable If @c true, libargus uses the user-specified matrix. + * @see setColorCorrectionMatrix() + * + * @returns success/status of the call. + */ + virtual Status setColorCorrectionMatrixEnable(bool enable) = 0; + + /** + * Returns the enable for the user-specified color correction matrix. + */ + virtual bool getColorCorrectionMatrixEnable() const = 0; + + /** + * Sets the user-specified absolute color saturation. This must be enabled via + * @see setColorSaturationEnable, otherwise saturation will be determined automatically. + * This saturation value may be used to modify the color correction matrix used + * for processing (@see setColorCorrectionMatrix), and these changes will be reflected + * in the color correction matrix output to the capture metadata. + * @param[in] saturation The absolute color saturation. Acceptable values are in + * [0.0, 2.0], and the default value is 1.0. + + * @returns success/status of the call. + */ + virtual Status setColorSaturation(float saturation) = 0; + + /** + * Returns the user-specified absolute color saturation (@see setColorSaturation). + */ + virtual float getColorSaturation() const = 0; + + /** + * Enables the user-specified absolute color saturation. + * @param[in] enable If @c true, libargus uses the user-specified color saturation. + * @see setColorSaturation() + * + * @returns success/status of the call. + */ + virtual Status setColorSaturationEnable(bool enable) = 0; + + /** + * Returns the enable for the user-specified color saturation. + */ + virtual bool getColorSaturationEnable() const = 0; + + /** + * Sets the color saturation bias. This bias is used to multiply the active saturation + * value, either the user-specified or the automatically generated value depending on the state + * of @see getColorSaturationEnable, and produces the final saturation value to use for + * capture processing. This is used primarily to tweak automatically generated saturation + * values when the application prefers more or less saturation than what the implementation + * or hardware generates by default. The final saturation value (after biasing) may affect the + * color correction matrix used for processing (@see setColorCorrectionMatrix). + * @param[in] bias The color saturation bias. Acceptable values are in [0.0, 2.0], where + * 1.0 does not modify the saturation (default), 0.0 is fully desaturated + * (greyscale), and 2.0 is highly saturated. + * + * @returns success/status of the call. + */ + virtual Status setColorSaturationBias(float bias) = 0; + + /** + * Returns the color saturation bias. + */ + virtual float getColorSaturationBias() const = 0; + + /** + * Sets the exposure compensation. + * Exposure compensation is applied after AE is solved. + * @param[in] ev The exposure adjustment step in stops. + * + * @returns success/status of the call. + */ + virtual Status setExposureCompensation(float ev) = 0; + + /** + * Returns the exposure compensation. + */ + virtual float getExposureCompensation() const = 0; + + /** + * Returns the number of elements required for the tone map curve. + * @param[in] channel The color channel the curve size corresponds to. + */ + virtual uint32_t getToneMapCurveSize(RGBChannel channel) const = 0; + + /** + * Sets the user-specified tone map curve for a channel on the stream. + * The user-specified tone map will be ignored unless getToneMapCurveEnable() == true. + * @param[in] channel The color the curve corresponds to. + * @param[in] curve A float vector that describes the LUT. + * The number of elements must match the number of elements + * returned from getToneMapCurve() of the same channel. + * + * @returns success/status of the call. + */ + virtual Status setToneMapCurve(RGBChannel channel, const std::vector& curve) = 0; + + /** + * Returns the user-specified tone map curve for a channel on the stream. + * @param[in] channel The color the curve corresponds to. + * @param[out] curve A vector that will be populated by the tone map curve for the specified + * color channel. + * + * @returns success/status of the call. + */ + virtual Status getToneMapCurve(RGBChannel channel, std::vector* curve) const = 0; + + /** + * Enables the user-specified tone map. + * @param[in] enable If @c true, libargus uses the user-specified tone map. + * + * @returns success/status of the call. + */ + virtual Status setToneMapCurveEnable(bool enable) = 0; + + /** + * Returns the enable for the user-specified tone map. + */ + virtual bool getToneMapCurveEnable() const = 0; + + /** + * Sets the user-specified Isp Digital gain range. + * @param[in] gain The user-specified Isp Digital gain. + * + * @returns success/status of the call. + */ + virtual Status setIspDigitalGainRange(const Range& gain) = 0; + + /** + * Returns the user-specified Isp Digital gain range. + * + * @returns Isp Digital gain + */ + virtual Range getIspDigitalGainRange() const = 0; + +protected: + ~IAutoControlSettings() {} +}; + +/** + * @class IStreamSettings + * + * Interface to per-stream settings (provided by IRequest::getStreamSettings()). + * + * @ingroup ArgusStreamSettings + */ +DEFINE_UUID(InterfaceID, IID_STREAM_SETTINGS, c477aeaf,9cc8,4467,a834,c7,07,d7,b6,9f,a4); +class IStreamSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_STREAM_SETTINGS; } + + /** + * Sets the clip rectangle for the stream. + * A clip rectangle is a normalized rectangle + * with valid coordinates contained in the [0.0,1.0] range. + * @param[in] clipRect The clip rectangle. + * + * @returns success/status of the call. + */ + virtual Status setSourceClipRect(const Rectangle& clipRect) = 0; + + /** + * Returns the clip rectangle for the stream. + */ + virtual Rectangle getSourceClipRect() const = 0; + + /** + * Sets whether or not post-processing is enabled for this stream. + * Post-processing features are controlled on a per-Request basis and all streams share the + * same post-processing control values, but this enable allows certain streams to be excluded + * from all post-processing. The current controls defined to be a part of "post-processing" + * includes (but may not be limited to): + * - Denoise + * Default value is true. + */ + virtual void setPostProcessingEnable(bool enable) = 0; + + /** + * Returns the post-processing enable for the stream. + */ + virtual bool getPostProcessingEnable() const = 0; + +protected: + ~IStreamSettings() {} +}; + +/** + * @class IDenoiseSettings + * + * Interface to denoise settings. + * + * @ingroup ArgusRequest + */ +DEFINE_UUID(InterfaceID, IID_DENOISE_SETTINGS, 7A461D20,6AE1,11E6,BDF4,08,00,20,0C,9A,66); +class IDenoiseSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_DENOISE_SETTINGS; } + + /** + * Sets the denoise (noise reduction) mode for the request. + * @param[in] mode The denoise mode: + * OFF: Denoise algorithms are disabled. + * FAST: Noise reduction will be enabled, but it will not slow down + * the capture rate. + * HIGH_QUALITY: Maximum noise reduction will be enabled to achieve + * the highest quality, but may slow down the capture rate. + * @returns success/status of the call. + */ + virtual Status setDenoiseMode(const DenoiseMode& mode) = 0; + + /** + * Returns the denoise mode for the request. + */ + virtual DenoiseMode getDenoiseMode() const = 0; + + /** + * Sets the strength for the denoise operation. + * @param[in] strength The denoise strength. This must be within the range [0.0, 1.0], where + * 0.0 is the least and 1.0 is the most amount of noise reduction that can be + * applied. This denoise strength is relative to the current noise reduction mode; + * using a FAST denoise mode with a full strength of 1.0 may not perform as well + * as using a HIGH_QUALITY mode with a lower relative strength. + * @returns success/status of the call. + */ + virtual Status setDenoiseStrength(float strength) = 0; + + /** + * Returns the denoise strength. + */ + virtual float getDenoiseStrength() const = 0; + +protected: + ~IDenoiseSettings() {} +}; + +/** + * @class IEdgeEnhanceSettings + * + * Interface to edge enhancement settings. + * + * @ingroup ArgusRequest + */ +DEFINE_UUID(InterfaceID, IID_EDGE_ENHANCE_SETTINGS, 7A461D21,6AE1,11E6,BDF4,08,00,20,0C,9A,66); +class IEdgeEnhanceSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_EDGE_ENHANCE_SETTINGS; } + + /** + * Sets the edge enhancement mode for the request. + * @param[in] mode The edge enhancement mode: + * OFF: Edge enhancement algorithms are disabled. + * FAST: Edge enhancement will be enabled, but it will not slow down + * the capture rate. + * HIGH_QUALITY: Maximum edge enhancement will be enabled to achieve + * the highest quality, but may slow down the capture rate. + * @returns success/status of the call. + */ + virtual Status setEdgeEnhanceMode(const EdgeEnhanceMode& mode) = 0; + + /** + * Returns the edge enhancement mode for the request. + */ + virtual EdgeEnhanceMode getEdgeEnhanceMode() const = 0; + + /** + * Sets the strength for the edge enhancement operation. + * @param[in] strength The edge enhancement strength. This must be within the range [0.0, 1.0], + * where 0.0 is the least and 1.0 is the most amount of edge enhancement that can be + * applied. This strength is relative to the current edge enhancement mode; using + * a FAST edge enhancement mode with a full strength of 1.0 may not perform as well + * as using a HIGH_QUALITY mode with a lower relative strength. + * @returns success/status of the call. + */ + virtual Status setEdgeEnhanceStrength(float strength) = 0; + + /** + * Returns the edge enhancement strength. + */ + virtual float getEdgeEnhanceStrength() const = 0; + +protected: + ~IEdgeEnhanceSettings() {} +}; + +} // namespace Argus + +#endif // _ARGUS_SETTINGS_H diff --git a/jetson_multimedia_api/argus/include/Argus/Stream.h b/jetson_multimedia_api/argus/include/Argus/Stream.h new file mode 100644 index 0000000..3ca9e80 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Stream.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Stream API + * + * @b Description: Defines stream related objects and interfaces. + */ + +#ifndef _ARGUS_STREAM_H +#define _ARGUS_STREAM_H + +namespace Argus +{ + +/** + * The general operation, buffer source, and interfaces supported by a stream + * object are defined by its core StreamType. The only StreamType currently + * supported is STREAM_TYPE_EGL (see EGLStream.h). + */ +DEFINE_NAMED_UUID_CLASS(StreamType); + +/** + * Object representing an output stream capable of receiving image frames from a capture. + * + * OutputStream objects are used as the destination for image frames output from + * capture requests. The operation of a stream, the source for its buffers, and the + * interfaces it supports depend on the StreamType of the stream. + * + * @defgroup ArgusOutputStream OutputStream + * @ingroup ArgusObjects + */ +class OutputStream : public InterfaceProvider, public Destructable +{ +protected: + ~OutputStream() {} +}; + +/** + * Container for settings used to configure/create an OutputStream. + * + * The interfaces and configuration supported by these settings objects + * depend on the StreamType that was provided during settings creation + * (see ICaptureSession::createOutputStreamSettings). + * These objects are passed to ICaptureSession::createOutputStream to create + * OutputStream objects, after which they may be destroyed. + * + * @defgroup ArgusOutputStreamSettings OutputStreamSettings + * @ingroup ArgusObjects + */ +class OutputStreamSettings : public InterfaceProvider, public Destructable +{ +protected: + ~OutputStreamSettings() {} +}; + +/** + * @class IOutputStreamSettings + * + * Interface that exposes the settings common to all OutputStream types. + * + * @ingroup ArgusOutputStreamSettings + */ +DEFINE_UUID(InterfaceID, IID_OUTPUT_STREAM_SETTINGS, 52f2b830,3d52,11e6,bdf4,08,00,20,0c,9a,66); +class IOutputStreamSettings : public Interface +{ +public: + static const InterfaceID& id() { return IID_OUTPUT_STREAM_SETTINGS; } + + /** + * Set the camera device to use as the source for this stream. + * Default value: First available device in the session. + */ + virtual Status setCameraDevice(CameraDevice* device) = 0; + virtual CameraDevice* getCameraDevice() const = 0; + +protected: + ~IOutputStreamSettings() {} +}; + +} // namespace Argus + +#endif // _ARGUS_STREAM_H diff --git a/jetson_multimedia_api/argus/include/Argus/Types.h b/jetson_multimedia_api/argus/include/Argus/Types.h new file mode 100644 index 0000000..0908e41 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/Types.h @@ -0,0 +1,958 @@ +/* + * Copyright (c) 2016-2023, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: Types API + * + * @b Description: Defines the basic types that are used by the API. + */ + +#ifndef _ARGUS_TYPES_H +#define _ARGUS_TYPES_H + +#include +#include +#include +#include + +#include +#include + +// Some versions of the Xlib.h header file define 'Status' to 'int'. +// This collides with the libargus 'Status' type. +// If 'Status' is defined then undefine it and use a typedef instead. +#ifdef Status +#undef Status +typedef int Status; +#endif // Status + +namespace Argus +{ + +/* + * Forward declaration of standard objects + */ +class CameraDevice; +class CameraProvider; +class CaptureSession; +class CaptureMetadata; +class CaptureMetadataContainer; +class Event; +class EventQueue; +class InputStream; +class OutputStream; +class OutputStreamSettings; +class Request; +class SensorMode; + +/* + * Forward declaration of standard interfaces + */ +class ICameraProperties; +class ICameraProvider; +class ICaptureSession; +class IAutoControlSettings; +class IRequest; +class IStream; +class IStreamSettings; + +/** + * Constant used for infinite timeouts. + */ +const uint64_t TIMEOUT_INFINITE = 0xFFFFFFFFFFFFFFFF; + +/** + * Status values returned by API function calls. + */ +enum Status +{ + /// Function succeeded. + STATUS_OK = 0, + + /// The set of parameters passed was invalid. + STATUS_INVALID_PARAMS = 1, + + /// The requested settings are invalid. + STATUS_INVALID_SETTINGS = 2, + + /// The requested device is unavailable. + STATUS_UNAVAILABLE = 3, + + /// An operation failed because of insufficient mavailable memory. + STATUS_OUT_OF_MEMORY = 4, + + /// This method has not been implemented. + STATUS_UNIMPLEMENTED = 5, + + /// An operation timed out. + STATUS_TIMEOUT = 6, + + /// The capture was aborted. @see ICaptureSession::cancelRequests() + STATUS_CANCELLED = 7, + + /// The stream or other resource has been disconnected. + STATUS_DISCONNECTED = 8, + + /// End of stream, used by Stream objects. + STATUS_END_OF_STREAM = 9, + + // Number of elements in this enum. + STATUS_COUNT +}; + +/** + * Color channel constants for Bayer data. + */ +enum BayerChannel +{ + BAYER_CHANNEL_R, + BAYER_CHANNEL_G_EVEN, + BAYER_CHANNEL_G_ODD, + BAYER_CHANNEL_B, + + BAYER_CHANNEL_COUNT +}; + +/** + * Coordinates used for 2D and 3D points. + */ +enum Coordinate +{ + COORDINATE_X, + COORDINATE_Y, + COORDINATE_Z, + + COORDINATE_2D_COUNT = 2, + COORDINATE_3D_COUNT = 3 +}; + +/** + * Color channel constants for RGB data. + */ +enum RGBChannel +{ + RGB_CHANNEL_R, + RGB_CHANNEL_G, + RGB_CHANNEL_B, + + RGB_CHANNEL_COUNT +}; + +/** + * Auto Exposure Anti-Banding Modes. + */ +DEFINE_NAMED_UUID_CLASS(AeAntibandingMode); +DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_OFF, AD1E5560,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_AUTO, AD1E5561,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_50HZ, AD1E5562,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AeAntibandingMode, AE_ANTIBANDING_MODE_60HZ, AD1E5563,9C16,11E8,B568,18,00,20,0C,9A,66); + +/** + * Auto Exposure (AE) Modes. + */ +DEFINE_NAMED_UUID_CLASS(AeMode); +DEFINE_UUID(AeMode, AE_MODE_OFF, FCACB1E0,C6E5,11ED,A901,08,00,20,0C,9A,66); +DEFINE_UUID(AeMode, AE_MODE_ON, FCACB1E1,C6E5,11ED,A901,08,00,20,0C,9A,66); +DEFINE_UUID(AeMode, AE_MODE_OTHERS, FCACB1E2,C6E5,11ED,A901,08,00,20,0C,9A,66); + +/** + * Auto Exposure Flicker States. + */ +DEFINE_NAMED_UUID_CLASS(AeFlickerState); +DEFINE_UUID(AeFlickerState, AE_FLICKER_NONE, AD1E5564,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AeFlickerState, AE_FLICKER_50HZ, AD1E5565,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AeFlickerState, AE_FLICKER_60HZ, AD1E5566,9C16,11E8,B568,18,00,20,0C,9A,66); + +/** + * Auto Exposure States. + */ +DEFINE_NAMED_UUID_CLASS(AeState); +DEFINE_UUID(AeState, AE_STATE_INACTIVE, D2EBEA50,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AeState, AE_STATE_SEARCHING, D2EBEA51,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AeState, AE_STATE_CONVERGED, D2EBEA52,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AeState, AE_STATE_FLASH_REQUIRED, D2EBEA53,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AeState, AE_STATE_TIMEOUT, D2EBEA54,9C16,11E8,B568,18,00,20,0C,9A,66); + +/** + * Auto White Balance (AWB) Modes. + */ +DEFINE_NAMED_UUID_CLASS(AwbMode); +DEFINE_UUID(AwbMode, AWB_MODE_OFF, FB3F365A,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(AwbMode, AWB_MODE_AUTO, FB3F365B,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(AwbMode, AWB_MODE_INCANDESCENT, FB3F365C,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(AwbMode, AWB_MODE_FLUORESCENT, FB3F365D,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(AwbMode, AWB_MODE_WARM_FLUORESCENT, FB3F365E,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(AwbMode, AWB_MODE_DAYLIGHT, FB3F365F,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(AwbMode, AWB_MODE_CLOUDY_DAYLIGHT, FB3F3660,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(AwbMode, AWB_MODE_TWILIGHT, FB3F3661,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(AwbMode, AWB_MODE_SHADE, FB3F3662,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(AwbMode, AWB_MODE_MANUAL, 20FB45DA,C49F,4293,AB02,13,3F,8C,CA,DD,69); + +/** + * Auto White-Balance States. + */ +DEFINE_NAMED_UUID_CLASS(AwbState); +DEFINE_UUID(AwbState, AWB_STATE_INACTIVE, E33CDB30,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AwbState, AWB_STATE_SEARCHING, E33CDB31,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AwbState, AWB_STATE_CONVERGED, E33CDB32,9C16,11E8,B568,18,00,20,0C,9A,66); +DEFINE_UUID(AwbState, AWB_STATE_LOCKED, E33CDB33,9C16,11E8,B568,18,00,20,0C,9A,66); + +/** + * Auto Focus (AF) Modes. + */ +DEFINE_NAMED_UUID_CLASS(AfMode); +DEFINE_UUID(AfMode, AF_MODE_OFF, FCACB1E3,C6E5,11ED,A901,08,00,20,0C,9A,66); +DEFINE_UUID(AfMode, AF_MODE_AUTO, FCACB1E4,C6E5,11ED,A901,08,00,20,0C,9A,66); +DEFINE_UUID(AfMode, AF_MODE_MANUAL, FCACB1E5,C6E5,11ED,A901,08,00,20,0C,9A,66); +DEFINE_UUID(AfMode, AF_MODE_OTHERS, FCACB1E6,C6E5,11ED,A901,08,00,20,0C,9A,66); + +/** + * A CaptureIntent may be provided during capture request creation to initialize the new + * Request with default settings that are appropriate for captures of the given intent. + * More details regarding each intent are as follows: + * MANUAL intent disables auto white balance and auto-focus. + * PREVIEW intent disables noise reduction related post-processing in order to + * reduce latency and resource usage. + * STILL_CAPTURE intent enables Noise Reduction related post-processing in order + * to optimize still image quality. + * VIDEO_RECORD intent enables motion sensors related post-processing to optimize + * the video quality. + * Apart from above processing blocks each intent also helps in optimizing the + * processing resource usage appropriate for that intent. + */ +DEFINE_NAMED_UUID_CLASS(CaptureIntent); +DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_MANUAL, FB3F3663,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_PREVIEW, FB3F3664,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_STILL_CAPTURE, FB3F3665,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_VIDEO_RECORD, FB3F3666,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(CaptureIntent, CAPTURE_INTENT_VIDEO_SNAPSHOT, FB3F3667,CC62,11E5,9956,62,56,62,87,07,61); + +/** + * Denoise (noise reduction) Modes. + */ +DEFINE_NAMED_UUID_CLASS(DenoiseMode); +DEFINE_UUID(DenoiseMode, DENOISE_MODE_OFF, FB3F3668,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(DenoiseMode, DENOISE_MODE_FAST, FB3F3669,CC62,11E5,9956,62,56,62,87,07,61); +DEFINE_UUID(DenoiseMode, DENOISE_MODE_HIGH_QUALITY, FB3F366A,CC62,11E5,9956,62,56,62,87,07,61); + +/** + * Edge Enhance Modes. + */ +DEFINE_NAMED_UUID_CLASS(EdgeEnhanceMode); +DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_OFF, F7100B40,6A5F,11E6,BDF4,08,00,20,0C,9A,66); +DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_FAST, F7100B41,6A5F,11E6,BDF4,08,00,20,0C,9A,66); +DEFINE_UUID(EdgeEnhanceMode, EDGE_ENHANCE_MODE_HIGH_QUALITY, F7100B42,6A5F,11E6,BDF4,08,00,20,0C,9A,66); + +/** + * Extension Names. Note that ExtensionName UUIDs are defined by their respective extension headers. + */ +DEFINE_NAMED_UUID_CLASS(ExtensionName); + +/** + * Pixel formats. + */ +DEFINE_NAMED_UUID_CLASS(PixelFormat); +DEFINE_UUID(PixelFormat, PIXEL_FMT_UNKNOWN, 00000000,93d5,11e5,0000,1c,b7,2c,ef,d4,1e); +DEFINE_UUID(PixelFormat, PIXEL_FMT_Y8, 569be14a,93d5,11e5,91bc,1c,b7,2c,ef,d4,1e); +DEFINE_UUID(PixelFormat, PIXEL_FMT_Y16, 56ddb19c,93d5,11e5,8e2c,1c,b7,2c,ef,d4,1e); +DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_420_888, 570c10e6,93d5,11e5,8ff3,1c,b7,2c,ef,d4,1e); +DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_422_888, 573a7940,93d5,11e5,99c2,1c,b7,2c,ef,d4,1e); +DEFINE_UUID(PixelFormat, PIXEL_FMT_YCbCr_444_888, 576043dc,93d5,11e5,8983,1c,b7,2c,ef,d4,1e); +DEFINE_UUID(PixelFormat, PIXEL_FMT_JPEG_BLOB, 578b08c4,93d5,11e5,9686,1c,b7,2c,ef,d4,1e); +DEFINE_UUID(PixelFormat, PIXEL_FMT_RAW16, 57b484d8,93d5,11e5,aeb6,1c,b7,2c,ef,d4,1e); +DEFINE_UUID(PixelFormat, PIXEL_FMT_P016, 57b484d9,93d5,11e5,aeb6,1c,b7,2c,ef,d4,1e); + +/** + * The SensorModeType of a sensor defines the type of image data that is output by the + * imaging sensor before any sort of image processing (ie. pre-ISP format). + */ +DEFINE_NAMED_UUID_CLASS(SensorModeType); +DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_DEPTH, 64483464,4b91,11e6,bbbd,40,16,7e,ab,86,92); +DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_YUV, 6453e00c,4b91,11e6,871d,40,16,7e,ab,86,92); +DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_RGB, 6463d4c6,4b91,11e6,88a3,40,16,7e,ab,86,92); +DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER, 646f04ea,4b91,11e6,9c06,40,16,7e,ab,86,92); +DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER_PWL, f6a08220,6a0f,11eb,8572,08,00,20,0c,9a,66); +DEFINE_UUID(SensorModeType, SENSOR_MODE_TYPE_BAYER_DOL, f6a08221,6a0f,11eb,8572,08,00,20,0c,9a,66); + +/** + * SensorPlacement defines the placement of the sensor on the module + */ +DEFINE_NAMED_UUID_CLASS(SensorPlacement); +DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_REAR_OR_BOTTOM_OR_BOTTOM_LEFT, 01dba8b0,1946,11eb,8b6f,08,00,20,0c,9a,66); +DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_FRONT_OR_TOP_OR_CENTER_LEFT, 01dba8b1,1946,11eb,8b6f,08,00,20,0c,9a,66); +DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_CENTER_OR_CENTER_RIGHT, 01dba8b2,1946,11eb,8b6f,08,00,20,0c,9a,66); +DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_TOP_LEFT, 01dba8b3,1946,11eb,8b6f,08,00,20,0c,9a,66); +DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_BOTTOM_RIGHT, 01dba8b4,1946,11eb,8b6f,08,00,20,0c,9a,66); +DEFINE_UUID(SensorPlacement, SENSOR_PLACEMENT_TOP_RIGHT, 01dba8b5,1946,11eb,8b6f,08,00,20,0c,9a,66); + +/** + * Bayer Phases + */ +DEFINE_NAMED_UUID_CLASS(BayerPhase); +DEFINE_UUID(BayerPhase, BAYER_PHASE_UNKNOWN, b9d43270,6a0e,12eb,8572,08,00,20,0c,9a,66); +DEFINE_UUID(BayerPhase, BAYER_PHASE_RGGB, b9d43271,6a0e,12eb,8572,08,00,20,0c,9a,66); +DEFINE_UUID(BayerPhase, BAYER_PHASE_BGGR, b9d43272,6a0e,12eb,8572,08,00,20,0c,9a,66); +DEFINE_UUID(BayerPhase, BAYER_PHASE_GRBG, b9d43273,6a0e,12eb,8572,08,00,20,0c,9a,66); +DEFINE_UUID(BayerPhase, BAYER_PHASE_GBRG, b9d43274,6a0e,12eb,8572,08,00,20,0c,9a,66); + +/** + * Utility class for libargus interfaces. + */ +class NonCopyable +{ +protected: + NonCopyable() {} + +private: + NonCopyable(NonCopyable& other); + NonCopyable& operator=(NonCopyable& other); +}; + +/** + * The top-level interface class. + * + * By convention, every Interface subclass exposes a public static method called @c id(), + * which returns the unique InterfaceID for that interface. + * This is required for the @c interface_cast<> template to work with that interface. + */ +class Interface : NonCopyable +{ +protected: + Interface() {} + ~Interface() {} +}; + +/** + * A unique identifier for a libargus Interface. + */ +class InterfaceID : public NamedUUID +{ +public: + InterfaceID(uint32_t time_low_ + , uint16_t time_mid_ + , uint16_t time_hi_and_version_ + , uint16_t clock_seq_ + , uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5 + , const char* name) + : NamedUUID(time_low_, time_mid_, time_hi_and_version_, clock_seq_, + c0, c1, c2, c3, c4, c5, name) + {} + + InterfaceID() + : NamedUUID(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "IID_UNSPECIFIED") + {} +}; + +/** + * The base interface for a class that provides libargus Interfaces. + */ +class InterfaceProvider : NonCopyable +{ +public: + + /** + * Acquire the interface specified by @c interfaceId. + * @returns An instance of the requested interface, + * or NULL if that interface is not available. + */ + virtual Interface* getInterface(const InterfaceID& interfaceId) = 0; + +protected: + ~InterfaceProvider() {} +}; + +/** + * Interface-casting helper similar to dynamic_cast. + */ + +template +inline TheInterface* interface_cast(InterfaceProvider* obj) +{ + return static_cast(obj ? obj->getInterface(TheInterface::id()): 0); +} + +template +inline TheInterface* interface_cast(const InterfaceProvider* obj) +{ + return static_cast( + obj ? const_cast( + const_cast(obj)->getInterface(TheInterface::id())): 0); +} + +/** + * A top level object class for libargus objects that are created and owned by + * the client. All Destructable objects created by the client must be explicitly destroyed. + */ +class Destructable +{ +public: + + /** + * Destroy this object. + * After making this call, the client cannot make any more calls on this object. + */ + virtual void destroy() = 0; + +protected: + ~Destructable() {} +}; + +/** + * Template helper emulating C++11 rvalue semantics. + * @cond + */ +template +class rv : public T +{ + rv(); + ~rv(); + rv(const rv&); + void operator=(const rv&); +}; + +template + rv& move(T& self) +{ + return *static_cast*>(&self); +} +/** @endcond */ + +/** + * Movable smart pointer mimicking std::unique_ptr. + * @cond + */ +template struct remove_const; +template struct remove_const{ typedef T& type; }; +template struct remove_const{ typedef T* type; }; +template struct remove_const{ typedef T type; }; +template struct remove_const { typedef T type; }; +/** @endcond */ + +template +class UniqueObj : NonCopyable +{ +public: + explicit UniqueObj(T* obj=NULL): m_obj(obj) {} + + void reset(T* obj=NULL) + { if (m_obj && (m_obj != obj)) const_cast::type>(m_obj)->destroy(); m_obj = obj; } + T* release() + { T* obj = m_obj; m_obj = NULL; return obj; } + + UniqueObj( rv& moved ): m_obj(moved.release()) {} + UniqueObj& operator=( rv& moved ){ reset( moved.release()); return *this; } + + ~UniqueObj() { reset(); } + + T& operator*() const { return *m_obj; } + T* get() const { return m_obj; } + + operator bool() const { return !!m_obj; } + + operator rv&() { return *static_cast< rv*>(this); } + operator const rv&() const { return *static_cast*>(this); } + +private: + T* m_obj; + + T* operator->() const; // Prevent calling destroy() directly. + // Note: For getInterface functionality use interface_cast. +}; + +template +inline TheInterface* interface_cast(const UniqueObj& obj) +{ + return interface_cast( obj.get()); +} + +/** + * Tuple template class. This provides a finite ordered list of N elements having type T. + */ +template +class Tuple +{ +public: + Tuple() {} + + /// Initialize every element of the tuple to a single value. + Tuple(T init) + { + for (unsigned int i = 0; i < N; i++) + m_data[i] = init; + } + + /// Returns true when every element in the two tuples are identical. + bool operator==(const Tuple& rhs) const + { + return !memcmp(m_data, rhs.m_data, sizeof(m_data)); + } + + /// Returns true if there are any differences between the two tuples. + bool operator!=(const Tuple& rhs) const + { + return !(*this == rhs); + } + + /// Adds every element of another tuple to the elements of this tuple. + Tuple& operator+=(const Tuple& rhs) + { + for (unsigned int i = 0; i < N; i++) + m_data[i] += rhs.m_data[i]; + return *this; + } + + /// Subtracts every element of another tuple from the elements of this tuple. + Tuple& operator-=(const Tuple& rhs) + { + for (unsigned int i = 0; i < N; i++) + m_data[i] -= rhs.m_data[i]; + return *this; + } + + /// Multiplies every element in the tuple by a single value. + Tuple& operator*=(const T& rhs) + { + for (unsigned int i = 0; i < N; i++) + m_data[i] *= rhs; + return *this; + } + + /// Divides every element in the tuple by a single value. + Tuple& operator/=(const T& rhs) + { + for (unsigned int i = 0; i < N; i++) + m_data[i] /= rhs; + return *this; + } + + /// Returns the result of adding another tuple to this tuple. + const Tuple operator+(const Tuple& rhs) const + { + return Tuple(*this) += rhs; + } + + /// Returns the result of subtracting another tuple from this tuple. + const Tuple operator-(const Tuple& rhs) const + { + return Tuple(*this) -= rhs; + } + + /// Returns the result of multiplying this tuple by a single value. + const Tuple operator*(const T& rhs) const + { + return Tuple(*this) *= rhs; + } + + /// Returns the result of dividing this tuple by a single value. + const Tuple operator/(const T& rhs) const + { + return Tuple(*this) /= rhs; + } + + T& operator[](unsigned int i) { assert(i < N); return m_data[i]; } + const T& operator[](unsigned int i) const { assert(i < N); return m_data[i]; } + + /// Returns the number of elements in the tuple. + static unsigned int tupleSize() { return N; } + +protected: + T m_data[N]; +}; + +/** + * BayerTuple template class. This is a Tuple specialization containing 4 elements corresponding + * to the Bayer color channels: R, G_EVEN, G_ODD, and B. Values can be accessed using the named + * methods or subscript indexing using the Argus::BayerChannel enum. + */ +template +class BayerTuple : public Tuple +{ +public: + BayerTuple() {} + BayerTuple(const Tuple& other) : Tuple(other) {} + + BayerTuple(T init) + { + r() = gEven() = gOdd() = b() = init; + } + + BayerTuple(T _r, T _gEven, T _gOdd, T _b) + { + r() = _r; + gEven() = _gEven; + gOdd() = _gOdd; + b() = _b; + } + + T& r() { return Tuple::m_data[BAYER_CHANNEL_R]; } + const T& r() const { return Tuple::m_data[BAYER_CHANNEL_R]; } + T& gEven() { return Tuple::m_data[BAYER_CHANNEL_G_EVEN]; } + const T& gEven() const { return Tuple::m_data[BAYER_CHANNEL_G_EVEN]; } + T& gOdd() { return Tuple::m_data[BAYER_CHANNEL_G_ODD]; } + const T& gOdd() const { return Tuple::m_data[BAYER_CHANNEL_G_ODD]; } + T& b() { return Tuple::m_data[BAYER_CHANNEL_B]; } + const T& b() const { return Tuple::m_data[BAYER_CHANNEL_B]; } +}; + +/** + * RGBTuple template class. This is a Tuple specialization containing 3 elements corresponding + * to the RGB color channels: R, G, and B. Values can be accessed using the named methods or + * subscript indexing using the Argus::RGBChannel enum. + */ +template +class RGBTuple : public Tuple +{ +public: + RGBTuple() {} + RGBTuple(const Tuple& other) : Tuple(other) {} + + RGBTuple(T init) + { + r() = g() = b() = init; + } + + RGBTuple(T _r, T _g, T _b) + { + r() = _r; + g() = _g; + b() = _b; + } + + T& r() { return Tuple::m_data[RGB_CHANNEL_R]; } + const T& r() const { return Tuple::m_data[RGB_CHANNEL_R]; } + T& g() { return Tuple::m_data[RGB_CHANNEL_G]; } + const T& g() const { return Tuple::m_data[RGB_CHANNEL_G]; } + T& b() { return Tuple::m_data[RGB_CHANNEL_B]; } + const T& b() const { return Tuple::m_data[RGB_CHANNEL_B]; } +}; + +/** + * Point2D template class. This is a Tuple specialization containing 2 elements corresponding + * to the x and y coordinates a 2D point. Values can be accessed using the named methods or + * subscript indexing using the Argus::Coordinate enum. + */ +template +class Point2D : public Tuple +{ +public: + Point2D() {} + Point2D(const Tuple& other) : Tuple(other) {} + + Point2D(T init) + { + x() = y() = init; + } + + Point2D(T _x, T _y) + { + x() = _x; + y() = _y; + } + + T& x() { return Tuple::m_data[COORDINATE_X]; } + const T& x() const { return Tuple::m_data[COORDINATE_X]; } + T& y() { return Tuple::m_data[COORDINATE_Y]; } + const T& y() const { return Tuple::m_data[COORDINATE_Y]; } +}; + + +/** + * Point3D template class. This is a Tuple specialization containing 3 elements corresponding + * to the x, y and z coordinates of a 3D point. Values can be accessed using the named methods or + * subscript indexing using the Argus::Coordinate enum. + */ +template +class Point3D : public Tuple +{ +public: + Point3D() {} + Point3D(const Tuple& other) : Tuple(other) {} + + Point3D(T init) + { + x() = y() = z() = init; + } + + Point3D(T _x, T _y, T _z) + { + x() = _x; + y() = _y; + z() = _z; + } + + T& x() { return Tuple::m_data[COORDINATE_X]; } + const T& x() const { return Tuple::m_data[COORDINATE_X]; } + T& y() { return Tuple::m_data[COORDINATE_Y]; } + const T& y() const { return Tuple::m_data[COORDINATE_Y]; } + T& z() { return Tuple::m_data[COORDINATE_Z]; } + const T& z() const { return Tuple::m_data[COORDINATE_Z]; } +}; + +/** + * Size2D template class. This is a Tuple specialization containing 2 elements corresponding to the + * width and height of a 2D size, in that order. Values can be accessed using the named methods. + */ +template +class Size2D : public Tuple<2, T> +{ +public: + Size2D() {} + Size2D(const Tuple<2, T>& other) : Tuple<2, T>(other) {} + + Size2D(T init) + { + width() = height() = init; + } + + Size2D(T _width, T _height) + { + width() = _width; + height() = _height; + } + + T& width() { return Tuple<2, T>::m_data[0]; } + const T& width() const { return Tuple<2, T>::m_data[0]; } + T& height() { return Tuple<2, T>::m_data[1]; } + const T& height() const { return Tuple<2, T>::m_data[1]; } + + /// Returns the area of the size (width * height). + T area() const { return width() * height(); } +}; + +/** + * Rectangle template class. This is a Tuple specialization containing 4 elements corresponding + * to the positions of the left, top, right, and bottom edges of a rectangle, in that order. + * Values can be accessed using the named methods. + */ +template +class Rectangle : public Tuple<4, T> +{ +public: + Rectangle() {} + Rectangle(const Tuple<4, T>& other) : Tuple<4, T>(other) {} + + Rectangle(T init) + { + left() = top() = right() = bottom() = init; + } + + Rectangle(T _left, T _top, T _right, T _bottom) + { + left() = _left; + top() = _top; + right() = _right; + bottom() = _bottom; + } + + T& left() { return Tuple<4, T>::m_data[0]; } + const T& left() const { return Tuple<4, T>::m_data[0]; } + T& top() { return Tuple<4, T>::m_data[1]; } + const T& top() const { return Tuple<4, T>::m_data[1]; } + T& right() { return Tuple<4, T>::m_data[2]; } + const T& right() const { return Tuple<4, T>::m_data[2]; } + T& bottom() { return Tuple<4, T>::m_data[3]; } + const T& bottom() const { return Tuple<4, T>::m_data[3]; } + + /// Returns the width of the rectangle. + T width() const { return right() - left(); } + + /// Returns the height of the rectangle. + T height() const { return bottom() - top(); } + + /// Returns the area of the rectangle (width * height). + T area() const { return width() * height(); } +}; + +/** + * Range template class. This is a Tuple specialization containing 2 elements corresponding to the + * min and max values of the range, in that order. Values can be accessed using the named methods. + */ +template +class Range : public Tuple<2, T> +{ +public: + Range() {} + Range(const Tuple<2, T>& other) : Tuple<2, T>(other) {} + + Range(T init) + { + min() = max() = init; + } + + Range(T _min, T _max) + { + min() = _min; + max() = _max; + } + + T& min() { return Tuple<2, T>::m_data[0]; } + const T& min() const { return Tuple<2, T>::m_data[0]; } + T& max() { return Tuple<2, T>::m_data[1]; } + const T& max() const { return Tuple<2, T>::m_data[1]; } + + bool empty() const { return max() < min(); } +}; + +/** + * Defines an autocontrol region of interest (in pixel space). This region consists of a rectangle + * (inherited from the Rectangle Tuple) and a floating point weight value. + */ +class AcRegion : public Rectangle +{ +public: + AcRegion() + : Rectangle(0, 0, 0, 0) + , m_weight(1.0f) + {} + + AcRegion(uint32_t _left, uint32_t _top, uint32_t _right, uint32_t _bottom, float _weight) + : Rectangle(_left, _top, _right, _bottom) + , m_weight(_weight) + {} + + float& weight() { return m_weight; } + const float& weight() const { return m_weight; } + +protected: + float m_weight; +}; + +/** + * A template class to hold a 2-dimensional array of data. + * Data in this array is tightly packed in a 1-dimensional vector in row-major order; + * that is, the vector index for any value given its 2-dimensional location (Point2D) is + * index = location.x() + (location.y() * size.x()); + * Indexing operators using iterators, 1-dimensional, or 2-dimensional coordinates are provided. + */ +template +class Array2D +{ +public: + // Iterator types. + typedef T* iterator; + typedef const T* const_iterator; + + /// Default Constructor. + Array2D() : m_size(0, 0) {} + + /// Constructor given initial array size. + Array2D(const Size2D& size) : m_size(size) + { + m_data.resize(size.width() * size.height()); + } + + /// Constructor given initial array size and initial fill value. + Array2D(const Size2D& size, const T& value) : m_size(size) + { + m_data.resize(size.width() * size.height(), value); + } + + /// Copy constructor. + Array2D(const Array2D& other) + { + m_data = other.m_data; + m_size = other.m_size; + } + + /// Assignment operator. + Array2D& operator= (const Array2D& other) + { + m_data = other.m_data; + m_size = other.m_size; + return *this; + } + + /// Equality operator. + bool operator== (const Array2D& other) const + { + return (m_size == other.m_size && m_data == other.m_data); + } + + /// Returns the size (dimensions) of the array. + Size2D size() const { return m_size; } + + /// Resize the array. Array contents after resize are undefined. + /// Boolean return value enables error checking when exceptions are not available. + bool resize(const Size2D& size) + { + uint32_t s = size.width() * size.height(); + m_data.resize(s); + if (m_data.size() != s) + return false; + m_size = size; + return true; + } + + /// STL style iterators. + inline const_iterator begin() const { return m_data.data(); } + inline const_iterator end() const { return m_data.data() + m_data.size(); } + inline iterator begin() { return m_data.data(); } + inline iterator end() { return m_data.data() + m_data.size(); } + + /// Array indexing using [] operator. + T& operator[](unsigned int i) { return m_data[checkIndex(i)]; } + const T& operator[](unsigned int i) const { return m_data[checkIndex(i)]; } + + /// Array indexing using () operator. + inline const T& operator() (uint32_t i) const { return m_data[checkIndex(i)]; } + inline const T& operator() (uint32_t x, uint32_t y) const { return m_data[checkIndex(x, y)]; } + inline const T& operator() (const Point2D& p) const + { return m_data[checkIndex(p.x(), p.y())]; } + inline T& operator() (uint32_t i) { return m_data[checkIndex(i)]; } + inline T& operator() (uint32_t x, uint32_t y) { return m_data[checkIndex(x, y)]; } + inline T& operator() (const Point2D& p) + { return m_data[checkIndex(p.x(), p.y())]; } + + // Get pointers to data. + inline const T* data() const { return m_data.data(); } + inline T* data() { return m_data.data(); } + +private: + inline uint32_t checkIndex(uint32_t i) const + { + assert(i < m_data.size()); + return i; + } + + inline uint32_t checkIndex(uint32_t x, uint32_t y) const + { + assert(x < m_size.width()); + assert(y < m_size.height()); + return x + (y * m_size.width()); + } + + std::vector m_data; + Size2D m_size; +}; + +typedef uint32_t AutoControlId; + +} // namespace Argus + +#endif // _ARGUS_TYPES_H diff --git a/jetson_multimedia_api/argus/include/Argus/UUID.h b/jetson_multimedia_api/argus/include/Argus/UUID.h new file mode 100644 index 0000000..500caa8 --- /dev/null +++ b/jetson_multimedia_api/argus/include/Argus/UUID.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * Libargus API: UUID API + * + * @b Description: Defines the UUID types used by libargus. + */ + +#ifndef _ARGUS_UUID_H +#define _ARGUS_UUID_H + +#include +#include + +namespace Argus +{ + +const uint32_t MAX_UUID_NAME_SIZE = 32; + +/** + * A universally unique identifier. + */ +struct UUID +{ + uint32_t time_low; + uint16_t time_mid; + uint16_t time_hi_and_version; + uint16_t clock_seq; + uint8_t node[6]; + + bool operator==(const UUID &r) const + { + return memcmp(this, &r, sizeof(UUID)) == 0; + } + + bool operator<(const UUID &r) const + { + return memcmp(this, &r, sizeof(UUID)) < 0; + } +}; + +/** + * A universally unique identifier with a name (used for debugging purposes). + */ +class NamedUUID : public UUID +{ +public: + NamedUUID(uint32_t time_low_ + , uint16_t time_mid_ + , uint16_t time_hi_and_version_ + , uint16_t clock_seq_ + , uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5 + , const char* name) + { + time_low = time_low_; + time_mid = time_mid_; + time_hi_and_version = time_hi_and_version_; + clock_seq = clock_seq_; + node[0] = c0; node[1] = c1; node[2] = c2; node[3] = c3; node[4] = c4; node[5] = c5; + strncpy(m_name, name, sizeof(m_name)-1); + m_name[sizeof(m_name)-1] = '\0'; + } + + NamedUUID(const NamedUUID& copied) + : UUID(copied) + { + strncpy(m_name, copied.m_name, sizeof(m_name)-1); + m_name[sizeof(m_name)-1] = '\0'; + } + + NamedUUID& operator=(const NamedUUID& copied) + { + static_cast(*this) = copied; + + strncpy(m_name, copied.m_name, sizeof(m_name)-1); + m_name[sizeof(m_name)-1] = '\0'; + + return *this; + } + + bool operator==(const NamedUUID& compared) const + { + return static_cast(*this) == compared; + } + + bool operator!=(const NamedUUID& compared) const + { + return !(static_cast(*this) == compared); + } + + const char* getName() const { return m_name; } + +private: + char m_name[MAX_UUID_NAME_SIZE]; + + NamedUUID(); +}; + +/// Helper macro used to define NamedUUID-derived values. +#define DEFINE_UUID(TYPE, NAME, l, s0, s1, s2, c0,c1,c2,c3,c4,c5) \ + static const TYPE NAME(0x##l, 0x##s0, 0x##s1, 0x##s2, \ + 0x##c0, 0x##c1, 0x##c2, 0x##c3, 0x##c4, 0x##c5, #NAME); + +#define DEFINE_NAMED_UUID_CLASS(NAME) \ + class NAME : public NamedUUID \ + { \ + public: \ + NAME(uint32_t time_low_ \ + , uint16_t time_mid_ \ + , uint16_t time_hi_and_version_ \ + , uint16_t clock_seq_ \ + , uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4, uint8_t c5 \ + , const char* name) \ + : NamedUUID(time_low_, time_mid_, time_hi_and_version_, clock_seq_, \ + c0, c1, c2, c3, c4, c5, name) \ + {} \ + private: \ + NAME();\ + }; + +} // namespace Argus + +#endif // _ARGUS_UUID_H diff --git a/jetson_multimedia_api/argus/include/EGLStream/ArgusCaptureMetadata.h b/jetson_multimedia_api/argus/include/EGLStream/ArgusCaptureMetadata.h new file mode 100644 index 0000000..73b2db0 --- /dev/null +++ b/jetson_multimedia_api/argus/include/EGLStream/ArgusCaptureMetadata.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _EGLSTREAM_ARGUS_CAPTURE_METADATA_H +#define _EGLSTREAM_ARGUS_CAPTURE_METADATA_H + +namespace EGLStream +{ + +/** + * @class IArgusCaptureMetadata + * + * This interface is used to access Argus::CaptureMetadata from an object. + * Objects that may support this interface are EGLStream::Frame objects + * originating from an Argus producer, or a MetadataContainer object + * created directly from an EGLStream frame's embedded metadata. + */ +DEFINE_UUID(Argus::InterfaceID, IID_ARGUS_CAPTURE_METADATA, b94aa2e0,c3c8,11e5,a837,08,00,20,0c,9a,66); +class IArgusCaptureMetadata : public Argus::Interface +{ +public: + static const Argus::InterfaceID& id() { return IID_ARGUS_CAPTURE_METADATA; } + + /** + * Returns the CaptureMetadata associated with the object.. The lifetime of this + * metadata is equivalent to that of the object being called. NULL may be returned + * if there is no metadata available. + */ + virtual Argus::CaptureMetadata* getMetadata() const = 0; + +protected: + ~IArgusCaptureMetadata() {} +}; + +} // namespace EGLStream + +#endif // _EGLSTREAM_ARGUS_CAPTURE_METADATA_H diff --git a/jetson_multimedia_api/argus/include/EGLStream/EGLStream.h b/jetson_multimedia_api/argus/include/EGLStream/EGLStream.h new file mode 100644 index 0000000..54e329d --- /dev/null +++ b/jetson_multimedia_api/argus/include/EGLStream/EGLStream.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _EGLSTREAM_H +#define _EGLSTREAM_H + +/** + * @file EGLStream.h + * This is the main include file for the EGLStream utility library. + */ + +#include "EGLStream/ArgusCaptureMetadata.h" +#include "EGLStream/FrameConsumer.h" +#include "EGLStream/Frame.h" +#include "EGLStream/Image.h" +#include "EGLStream/MetadataContainer.h" + +#endif diff --git a/jetson_multimedia_api/argus/include/EGLStream/Frame.h b/jetson_multimedia_api/argus/include/EGLStream/Frame.h new file mode 100644 index 0000000..a4baa81 --- /dev/null +++ b/jetson_multimedia_api/argus/include/EGLStream/Frame.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _EGLSTREAM_FRAME_H +#define _EGLSTREAM_FRAME_H + +namespace EGLStream +{ + +class Image; + +/** + * Frame objects are acquired and returned by a FrameConsumer, and correspond + * to frames that have been written to the stream. Frames contain metadata + * corresponsing to the stream frame as well as the Image data of the frame. + * Destroying a Frame will return its image buffers back to the stream for reuse. + */ +class Frame : public Argus::InterfaceProvider, public Argus::Destructable +{ +protected: + ~Frame() {} +}; + +/** + * @class IFrame + * + * Interface that provides core access to a Frame. + */ +DEFINE_UUID(Argus::InterfaceID, IID_FRAME, 546F4520,87EF,11E5,A837,08,00,20,0C,9A,66); +class IFrame : public Argus::Interface +{ +public: + static const Argus::InterfaceID& id() { return IID_FRAME; } + + /** + * Returns the frame number. + */ + virtual uint64_t getNumber() const = 0; + + /** + * Returns the timestamp of the frame, in nanoseconds. + */ + virtual uint64_t getTime() const = 0; + + /** + * Returns the Image contained in the Frame. The returned Image object is + * owned by the Frame and is valid as long as the Frame is valid. (that is, while + * the Frame is acquired). + */ + virtual Image* getImage() = 0; + +protected: + ~IFrame() {} +}; + +} // namespace EGLStream + +#endif // _EGLSTREAM_FRAME_H diff --git a/jetson_multimedia_api/argus/include/EGLStream/FrameConsumer.h b/jetson_multimedia_api/argus/include/EGLStream/FrameConsumer.h new file mode 100644 index 0000000..a4d0b9a --- /dev/null +++ b/jetson_multimedia_api/argus/include/EGLStream/FrameConsumer.h @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _EGLSTREAM_FRAME_CONSUMER_H +#define _EGLSTREAM_FRAME_CONSUMER_H + +#include "Frame.h" + +namespace EGLStream +{ + +/** + * A FrameConsumer object acts as a consumer endpoint to an OutputStream or + * EGLStream, provided during creation, and exposes interfaces to return + * Frame objects that provide various image reading interfaces. + * + * Destroying a Consumer will disconnect the consumer from the EGLStream, but + * Frame objects returned by IFrameConsumer::acquireFrame will persist until + * the application explicitly destroys those objects. + */ +class FrameConsumer : public Argus::InterfaceProvider, public Argus::Destructable +{ +public: + /** + * Creates a new FrameConsumer to read frames from an Argus OutputStream. + * + * @param[in] outputStream The output stream to read from. + * @param[out] status An optional pointer to return an error status code. + * + * @returns A new FrameConsumer object, or NULL on error. + */ + static FrameConsumer* create(Argus::OutputStream* outputStream, + Argus::Status* status = NULL); + + /** + * Creates a new FrameConsumer to read frames from an EGLStream. + * + * @param[in] eglDisplay The EGLDisplay the stream belongs to. + * @param[in] eglDisplay The EGLStream to connect to. + * @param[out] status An optional pointer to return an error status code. + * + * @returns A new FrameConsumer object, or NULL on error. + */ + static FrameConsumer* create(EGLDisplay eglDisplay, + EGLStreamKHR eglStream, + Argus::Status* status = NULL); +protected: + ~FrameConsumer() {} +}; + +/** + * @class IFrameConsumer + * + * Exposes the methods used to acquire Frames from a FrameConsumer. + */ +DEFINE_UUID(Argus::InterfaceID, IID_FRAME_CONSUMER, b94a7bd1,c3c8,11e5,a837,08,00,20,0c,9a,66); +class IFrameConsumer : public Argus::Interface +{ +public: + static const Argus::InterfaceID& id() { return IID_FRAME_CONSUMER; } + + /** + * Acquires a new frame from the FrameConsumer, returning a Frame object. This Frame object + * behaves as its own entity, and may persist even after the FrameConsumer is destroyed. + * It is the application's responsibility to destroy any Frame returned by this method. + * + * Destroying a Frame causes all resources held by that frame to be returned to the EGLStream + * producer so that they may be used to produce another frame. If too many Frames are held + * by the consumer, or these frames are acquired at a slower rate than the producer is + * producing frames, it may be possible to stall the producer. Frame objects should always be + * be destroyed as soon as possible to minimize resource overhead. + * + * If NULL is returned and the status code is STATUS_DISCONNECTED, the producer has + * disconnected from the stream and no more frames can ever be acquired from this consumer. + * + * @param[in] timeout The timeout (in nanoseconds) to wait for a frame if one isn't available. + * @param[out] status An optional pointer to return an error status code. + * + * @returns A pointer to the frame acquired from the stream, or NULL on error. + */ + virtual Frame* acquireFrame(uint64_t timeout = Argus::TIMEOUT_INFINITE, + Argus::Status* status = NULL) = 0; + +protected: + ~IFrameConsumer() {} +}; + +} // namespace EGLStream + +#endif // _EGLSTREAM_FRAME_CONSUMER_H diff --git a/jetson_multimedia_api/argus/include/EGLStream/Image.h b/jetson_multimedia_api/argus/include/EGLStream/Image.h new file mode 100644 index 0000000..61c4b9c --- /dev/null +++ b/jetson_multimedia_api/argus/include/EGLStream/Image.h @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _EGLSTREAM_IMAGE_H +#define _EGLSTREAM_IMAGE_H + +namespace EGLStream +{ + +/** + * Image objects wrap the image data included in an acquired Frame. + */ + +class Image : public Argus::InterfaceProvider +{ +protected: + ~Image() {} +}; + +/** + * @class IImage + * + * Interface to provide the core functions for an Image. + */ +DEFINE_UUID(Argus::InterfaceID, IID_IMAGE, 546F4522,87EF,11E5,A837,08,00,20,0C,9A,66); +class IImage : public Argus::Interface +{ +public: + static const Argus::InterfaceID& id() { return IID_IMAGE; } + + /** + * Returns the number of buffers in the Image. + */ + virtual uint32_t getBufferCount() const = 0; + + /** + * Returns the size of one of the Image's buffers. + * @param[in] index The index of the buffer whose size to return (defaults to 0). + */ + virtual uint64_t getBufferSize(uint32_t index = 0) const = 0; + + /** + * Maps a buffer for CPU access and returns the mapped pointer. + * How this data is laid out in memory may be described by another Frame interface, + * or if the pixel format is UNKNOWN then it should be defined by the stream's producer. + * @param[in] index The buffer index to map. + * @param[out] status An optional pointer to return an error status code. + */ + virtual const void* mapBuffer(uint32_t index, Argus::Status* status = NULL) = 0; + + /** + * Maps the first/only buffer for CPU access and returns the mapped pointer. + * How this data is laid out in memory may be described by another Frame interface, + * or if the pixel format is UNKNOWN then it should be defined by the stream's producer. + * @param[out] status An optional pointer to return an error status code. + */ + virtual const void* mapBuffer(Argus::Status* status = NULL) = 0; + +protected: + ~IImage() {} +}; + +/** + * @class IImage2D + * + * Interface that describes a 2D Image. + * + * Note that some 2D Image formats are composed of multiple 2D planes -- for + * example, the color planes of a YUV image, or the buffer pyramid of a mipmap + * stack. Each buffer in the image corresponds to an image plane, and the index + * parameters used by this interfaces are identical to those used in IImage. + */ +DEFINE_UUID(Argus::InterfaceID, IID_IMAGE_2D, 546F4525,87EF,11E5,A837,08,00,20,0C,9A,66); +class IImage2D : public Argus::Interface +{ +public: + static const Argus::InterfaceID& id() { return IID_IMAGE_2D; } + + /** + * Returns the size of the image plane, in pixels. + * @param[in] index buffer index to get the size of (defaults to 0). + */ + virtual Argus::Size2D getSize(uint32_t index = 0) const = 0; + + /** + * Returns the stride, or bytes per pixel row, of the image plane. + * @param[in] index buffer index to get the width of (defaults to 0). + */ + virtual uint32_t getStride(uint32_t index = 0) const = 0; + +protected: + ~IImage2D() {} +}; + +/** + * @class IImageJPEG + * + * Provides a method to encode Images as JPEG data and write to disk. + */ +DEFINE_UUID(Argus::InterfaceID, IID_IMAGE_JPEG, 48aeddc9,c8d8,11e5,a837,08,00,20,0c,9a,66); +class IImageJPEG : public Argus::Interface +{ +public: + static const Argus::InterfaceID& id() { return IID_IMAGE_JPEG; } + + /** + * Encodes the Image to JPEG and write to disk. This call blocks + * until writing of the file is complete. + * @param[in] path The file path to write the JPEG to. + */ + virtual Argus::Status writeJPEG(const char* path) const = 0; + +protected: + ~IImageJPEG() {} +}; + +/** + * @class IImageHeaderlessFile + * + * Provides a method to write image data to disk with no encoding, + * and no header. + * + * All pixels are written to file in buffer, row, column order, with + * multi-byte pixels stored little-endian. + * + * Filename should specify width and height, and pixel/layout i.e. NV12, P016, + * or a specific Bayer layout. + */ +DEFINE_UUID(Argus::InterfaceID, IID_IMAGE_HEADERLESS_FILE, + 03018970,9254,11e7,9598,08,00,20,0c,9a,66); +class IImageHeaderlessFile : public Argus::Interface +{ +public: + static const Argus::InterfaceID& id() { return IID_IMAGE_HEADERLESS_FILE; } + + /** + * Writes the pixels to disk. + * This call blocks until writing of the file is complete. + * @param[in] path The file path to write. + */ + virtual Argus::Status writeHeaderlessFile(const char* path) const = 0; + +protected: + ~IImageHeaderlessFile() {} +}; + +} // namespace EGLStream + +#endif // _EGLSTREAM_IMAGE_H diff --git a/jetson_multimedia_api/argus/include/EGLStream/MetadataContainer.h b/jetson_multimedia_api/argus/include/EGLStream/MetadataContainer.h new file mode 100644 index 0000000..9eef53d --- /dev/null +++ b/jetson_multimedia_api/argus/include/EGLStream/MetadataContainer.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _EGLSTREAM_METADATA_CONTAINER_H +#define _EGLSTREAM_METADATA_CONTAINER_H + +namespace EGLStream +{ + +/** + * @class MetadataContainer + * + * When image frames are presented to EGLStreams, private metadata may be + * embedded in the frame data. This class provides a means for consumer-side + * applications to extract and access this metadata directly from the EGLStream + * without needing to initialize the producer library. + */ +class MetadataContainer : public Argus::InterfaceProvider, public Argus::Destructable +{ +public: + enum MetadataFrame + { + CONSUMER, + PRODUCER + }; + + /** + * Create and return a MetadataContainer object from the metadata embedded + * in the EGLStream frame. + * @param[in] eglDisplay The EGL display that owns the stream. + * @param[in] eglStream The EGL stream. + * @param[in] frame The frame for which the metadata should be extracted. + * This can be either CONSUMER or PRODUCER, corresponding to the last + * frame acquired by the consumer or presented by the producer, respectively. + * @param[out] status Optional pointer to return success/status of the call. + */ + static MetadataContainer* create(EGLDisplay eglDisplay, + EGLStreamKHR eglStream, + MetadataFrame frame = CONSUMER, + Argus::Status* status = NULL); +protected: + ~MetadataContainer() {} +}; + +} // namespace EGLStream + +#endif // _EGLSTREAM_METADATA_CONTAINER_H diff --git a/jetson_multimedia_api/argus/include/EGLStream/NV/ImageNativeBuffer.h b/jetson_multimedia_api/argus/include/EGLStream/NV/ImageNativeBuffer.h new file mode 100644 index 0000000..4ab87b9 --- /dev/null +++ b/jetson_multimedia_api/argus/include/EGLStream/NV/ImageNativeBuffer.h @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _EGLSTREAM_NV_IMAGE_NATIVE_BUFFER_H +#define _EGLSTREAM_NV_IMAGE_NATIVE_BUFFER_H + +#include + +namespace EGLStream +{ + +/** + * The NV::ImageNativeBuffer extension adds an interface to create and/or + * copy EGLStream Images to NvBuffers (see nvbuf_utils.h). + */ +DEFINE_UUID(Argus::ExtensionName, NV_IMAGE_NATIVE_BUFFER, ce9e8c60,1792,11e6,bdf4,08,00,20,0c,9a,66); + +namespace NV +{ + +/* + * Counterclockwise rotation value, in degree + */ +enum Rotation +{ + ROTATION_0, + ROTATION_90, + ROTATION_180, + ROTATION_270, + ROTATION_COUNT +}; + +/** + * @class IImageNativeBuffer + * + * Interface that supports creating new NvBuffers and/or copying Image contents + * to existing NvBuffers. + */ +DEFINE_UUID(Argus::InterfaceID, IID_IMAGE_NATIVE_BUFFER, 2f410340,1793,11e6,bdf4,08,00,20,0c,9a,66); +class IImageNativeBuffer : public Argus::Interface +{ +public: + static const Argus::InterfaceID& id() { return IID_IMAGE_NATIVE_BUFFER; } + + /** + * Creates a new NvBuffer, copies the image contents to the new buffer, then + * returns the dmabuf-fd. Ownership of this dmabuf-fd is given to the caller + * and must be destroyed using NvBufferDestroy (see nvbuf_utils.h). + * + * Note that the size, format, and layout of the new buffer can be different from + * what is being used for the EGLStream, and if this is the case then scaling + * and format conversion will be performed when the image is copied to the + * new buffer. Details of this scaling and conversion are left up to the + * implementation, but the application should consider and account for any + * measured performance penalties associated with such operations. + * + * @param[in] size the size of the NvBuffer to create. + * @param[in] format the color format to use for the new NvBuffer. + * @param[in] layout the buffer layout to use for the new NvBuffer. + * @param[in] rotation flag that could be 0/90/180/270 degree. + * @param[out] status optional status return code. + * @returns -1 on failure, or a valid dmabuf-fd on success. + */ + virtual int createNvBuffer(Argus::Size2D size, + NvBufferColorFormat format, + NvBufferLayout layout, + Rotation rotation = ROTATION_0, + Argus::Status* status = NULL) const = 0; + + /** + * Copies the image contents to the given NvBuffer. This performs an uncropped + * (full-surface) copy of the image to the provided buffer, which is permitted + * to have different size, format, and layout attributes than those of the buffer + * backing this EGLStream image. If this is the case, scaling and format conversion + * will be performed when the image is copied to the buffer. Details of this scaling + * and conversion are left up to the implementation, but the application should + * consider and account for any measured performance penalties associated with such + * operations. + * + * @param[in] fd the dmabuf-fd of the NvBuffer to copy to. + * @param[in] rotation flag that could be 0/90/180/270 degree. + */ + virtual Argus::Status copyToNvBuffer(int fd, Rotation rotation = ROTATION_0) const = 0; + +protected: + ~IImageNativeBuffer() {} +}; + +} // namespace NV + +} // namespace EGLStream + +#endif // _EGLSTREAM_NV_IMAGE_NATIVE_BUFFER_H diff --git a/jetson_multimedia_api/argus/samples/bayerAverageMap/CMakeLists.txt b/jetson_multimedia_api/argus/samples/bayerAverageMap/CMakeLists.txt new file mode 100644 index 0000000..3aca7b3 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/bayerAverageMap/CMakeLists.txt @@ -0,0 +1,58 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_bayeraveragemap) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(Argus REQUIRED) +find_package(OpenGLES REQUIRED) +find_package(EGL REQUIRED) + +set(SOURCES + main.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + ${OPENGLES_LIBRARIES} + argussampleutils + ) + +install(TARGETS ${PROJECT_NAME} DESTINATION bin) + +include(CPack) diff --git a/jetson_multimedia_api/argus/samples/bayerAverageMap/main.cpp b/jetson_multimedia_api/argus/samples/bayerAverageMap/main.cpp new file mode 100644 index 0000000..d178e2a --- /dev/null +++ b/jetson_multimedia_api/argus/samples/bayerAverageMap/main.cpp @@ -0,0 +1,502 @@ +/* + * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ArgusHelpers.h" +#include "CommonOptions.h" +#include "Error.h" +#include "EGLGlobal.h" +#include "GLContext.h" +#include "Window.h" +#include "Thread.h" + +#include +#include +#include + +#include +#include + +using namespace Argus; + +namespace ArgusSamples +{ + +// Constants. +static const float TEXT_SIZE = 32.0f; + +// By default the average values are rendered to areas that include the +// bin spacing in order to make them more visible. Setting this to true will +// render the values such that only the bin area is filled. +static const bool RENDER_BINS_ACTUAL_SIZE = false; + +// The average values are based on raw Bayer data and may be a little dark. +// This multiplier can be used to tweak the rendered values to make them more visible. +static const float AVERAGE_GAIN = 3.0f; + +// Similar to the average gain, this can be used to brighten the clip severity. +static const float CLIP_GAIN = 3.0f; + +// Globals. +UniqueObj g_cameraProvider; +EGLDisplayHolder g_display; + +// BayerAverageMap coordinates are relative to the sensor mode resolution, so +// this must be available to the consumer in order to scale to window coordinates. +static Size2D g_sensorModeResolution; + +// Debug print macros. +#define PRODUCER_PRINT(...) printf("PRODUCER: " __VA_ARGS__) +#define CONSUMER_PRINT(...) printf("CONSUMER: " __VA_ARGS__) + +/******************************************************************************* + * GL Consumer thread: + * Opens an on-screen window and renders the camera preview to the top third, + * Bayer average values to the middle, and clip severity in the bottom third. + ******************************************************************************/ +class ConsumerThread : public Thread +{ +public: + explicit ConsumerThread(const ArgusSamples::CommonOptions& options, + IEGLOutputStream* stream) + : m_options(options) + , m_stream(stream) + , m_eglStream(stream->getEGLStream()) + , m_streamTexture(0) + , m_textureProgram(0) + , m_binProgram(0) + { + } + ~ConsumerThread() + { + } + +private: + /** @name Thread methods */ + /**@{*/ + virtual bool threadInitialize(); + virtual bool threadExecute(); + virtual bool threadShutdown(); + /**@}*/ + + const ArgusSamples::CommonOptions& m_options; + IEGLOutputStream* m_stream; + EGLStreamKHR m_eglStream; + GLContext m_context; + GLuint m_streamTexture; + GLuint m_textureProgram; + GLuint m_binProgram; +}; + +bool ConsumerThread::threadInitialize() +{ + Window &window = Window::getInstance(); + + // Create the context and make it current. + CONSUMER_PRINT("Creating context.\n"); + PROPAGATE_ERROR(m_context.initialize(&window)); + PROPAGATE_ERROR(m_context.makeCurrent()); + m_context.setTextBackground(0.2f, 0.2f, 0.2f); + + // Initialize the shader for rendering bin values (both averages and clip counts). + // Using a single shader program and viewport prevents excessive OpenGL state changes + // which require a large amount of overhead if changed per-bin. + // When the 'bayerQuad' uniform is true, the 'color' uniform will be rendered as a single + // color value to the top half of the viewport. When 'bayerQuad' is false, the 'color' uniform + // will be used to render the color as a Bayer quad to the bottom half of the viewport, + // where color.g is the gEven component and color.a is the gOdd component. + { + static const char vtxSrc[] = + "#version 300 es\n" + "in layout(location = 0) vec2 binCoord;\n" + "in layout(location = 1) vec2 vertexCoord;\n" + "uniform bool bayerQuad;\n" + "out vec2 vBinCoord;\n" + "void main() {\n" + " float x = vertexCoord.x * 2.0 - 1.0;\n" + " float y = 1.0 - vertexCoord.y;\n" + " if (bayerQuad)\n" + " y = y - 1.0;\n" + " gl_Position = vec4(x, y, 0.0, 1.0);\n" + " vBinCoord = binCoord;\n" + "}\n"; + static const char frgSrc[] = + "#version 300 es\n" + "precision lowp float;\n" + "uniform vec4 color;\n" + "uniform bool bayerQuad;\n" + "in vec2 vBinCoord;\n" + "out vec4 fragColor;\n" + "void main() {\n" + " if (bayerQuad) {\n" + " if (vBinCoord.y > 0.5) {\n" + " if (vBinCoord.x < 0.5)\n" + " fragColor = vec4(color.r, 0.0, 0.0, 1.0);\n" + " else\n" + " fragColor = vec4(0.0, color.g, 0.0, 1.0);\n" + " } else {\n" + " if (vBinCoord.x < 0.5)\n" + " fragColor = vec4(0.0, color.a, 0.0, 1.0);\n" + " else\n" + " fragColor = vec4(0.0, 0.0, color.b, 1.0);\n" + " }\n" + " } else {\n" + " fragColor = color;\n" + " }\n" + "}\n"; + PROPAGATE_ERROR(m_context.createProgram(vtxSrc, frgSrc, &m_binProgram)); + } + + // Initialize the shader for rendering the stream texture. + { + static const char vtxSrc[] = + "#version 300 es\n" + "in layout(location = 0) vec2 coord;\n" + "out vec2 texCoord;\n" + "void main() {\n" + " gl_Position = vec4((coord * 2.0) - 1.0, 0.0, 1.0);\n" + " texCoord = vec2(coord.x, 1.0 - coord.y);\n" + "}\n"; + static const char frgSrc[] = + "#version 300 es\n" + "#extension GL_OES_EGL_image_external : require\n" + "precision lowp float;\n" + "uniform samplerExternalOES texSampler;\n" + "in vec2 texCoord;\n" + "out vec4 fragColor;\n" + "void main() {\n" + " fragColor = texture2D(texSampler, texCoord);\n" + "}\n"; + PROPAGATE_ERROR(m_context.createProgram(vtxSrc, frgSrc, &m_textureProgram)); + glUseProgram(m_textureProgram); + glUniform1i(glGetUniformLocation(m_textureProgram, "texSampler"), 0); + } + + // Initialize the shared vertex attrib state. + static const GLfloat quadCoords[] = {1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f}; + glEnableVertexAttribArray(0); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, quadCoords); + + // Create an external texture and connect it to the stream as a the consumer. + CONSUMER_PRINT("Connecting to stream.\n"); + glGenTextures(1, &m_streamTexture); + glBindTexture(GL_TEXTURE_EXTERNAL_OES, m_streamTexture); + if (!eglStreamConsumerGLTextureExternalKHR(g_display.get(), m_eglStream)) + ORIGINATE_ERROR("Unable to connect GL as consumer"); + CONSUMER_PRINT("Connected to stream.\n"); + + // Set the acquire timeout to infinite. + eglStreamAttribKHR(g_display.get(), m_eglStream, EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR, -1); + + return true; +} + +bool ConsumerThread::threadExecute() +{ + const Argus::Rectangle windowRect = m_options.windowRect(); + + // Wait until the Argus producer is connected. + CONSUMER_PRINT("Waiting until producer is connected...\n"); + if (m_stream->waitUntilConnected() != STATUS_OK) + ORIGINATE_ERROR("Stream failed to connect."); + CONSUMER_PRINT("Producer is connected; continuing.\n"); + + // Initialize the vertex attrib array state for bin rendering (values updated per bin, below). + static float rectCoords[] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, rectCoords); + + // Render until there are no more frames (the producer has disconnected). + uint32_t frame = 0; + while (eglStreamConsumerAcquireKHR(g_display.get(), m_eglStream)) + { + frame++; + + + // Render the image to the left half of the window. + glViewport(0, windowRect.height() / 4, windowRect.width() / 2, windowRect.height() / 2); + glUseProgram(m_textureProgram); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + m_context.setTextSize(TEXT_SIZE / windowRect.height()); + m_context.setTextPosition(0.02f, 0.98f); + char str[128]; + snprintf(str, sizeof(str), " Stream Output \n Frame %4u ", frame); + m_context.renderText(str); + + // Get the metadata from the current EGLStream frame. + // Note: This will likely fail for the last frame since the producer has + // already disconected from the EGLStream, so we need to handle + // failure gracefully. + UniqueObj metadataContainer( + EGLStream::MetadataContainer::create(g_display.get(), m_eglStream)); + EGLStream::IArgusCaptureMetadata *iArgusCaptureMetadata = + interface_cast(metadataContainer); + if (iArgusCaptureMetadata) + { + // Get the BayerAverageMap metadata. + CaptureMetadata *argusCaptureMetadata = iArgusCaptureMetadata->getMetadata(); + const Ext::IBayerAverageMap* iBayerAverageMap = + interface_cast(argusCaptureMetadata); + if (!iBayerAverageMap) + ORIGINATE_ERROR("Failed to get IBayerAverageMap interface"); + Array2D< BayerTuple > averages; + if (iBayerAverageMap->getAverages(&averages) != STATUS_OK) + ORIGINATE_ERROR("Failed to get averages"); + Array2D< BayerTuple > clipCounts; + if (iBayerAverageMap->getClipCounts(&clipCounts) != STATUS_OK) + ORIGINATE_ERROR("Failed to get clip counts"); + const Point2D binStart = iBayerAverageMap->getBinStart(); + const Size2D binSize = iBayerAverageMap->getBinSize(); + const Size2D binCount = iBayerAverageMap->getBinCount(); + const Size2D binInterval = iBayerAverageMap->getBinInterval(); + + float startX = 0.0f; + float startY = 0.0f; + float binWidth = 1.0f / binCount.width(); + float binHeight = 1.0f / binCount.height(); + float intervalX = binWidth; + float intervalY = binHeight; + if (RENDER_BINS_ACTUAL_SIZE) + { + startX = (float)binStart.x() / g_sensorModeResolution.width(); + startY = (float)binStart.y() / g_sensorModeResolution.width(); + binWidth = (float)binSize.width() / g_sensorModeResolution.width(); + binHeight = (float)binSize.height() / g_sensorModeResolution.height(); + intervalX = (float)binInterval.width() / g_sensorModeResolution.width(); + intervalY = (float)binInterval.width() / g_sensorModeResolution.width(); + } + + // Render the average map bins to the top right and the clip + // count severity to the bottom right. + glViewport(windowRect.width() / 2, 0, windowRect.width() / 2, windowRect.height()); + glUseProgram(m_binProgram); + GLint colorUniform = glGetUniformLocation(m_binProgram, "color"); + GLint bayerUniform = glGetUniformLocation(m_binProgram, "bayerQuad"); + glEnableVertexAttribArray(1); + for (uint32_t x = 0; x < binCount.width(); x++) + { + for (uint32_t y = 0; y < binCount.height(); y++) + { + // Set the bin coordinates. + rectCoords[0] = startX + intervalX * x + binWidth; + rectCoords[1] = startY + intervalY * y; + rectCoords[2] = startX + intervalX * x + binWidth; + rectCoords[3] = startY + intervalY * y + binHeight; + rectCoords[4] = startX + intervalX * x; + rectCoords[5] = startY + intervalY * y; + rectCoords[6] = startX + intervalX * x; + rectCoords[7] = startY + intervalY * y + binHeight; + + // Render the averages (clamped to [0, 1]). + float r = std::max(0.0f, std::min(1.0f, averages(x, y).r())); + float gE = std::max(0.0f, std::min(1.0f, averages(x, y).gEven())); + float gO = std::max(0.0f, std::min(1.0f, averages(x, y).gOdd())); + float g = (gE + gO) / 2.0f; + float b = std::max(0.0f, std::min(1.0f, averages(x, y).b())); + glUniform4f(colorUniform, + r * AVERAGE_GAIN, g * AVERAGE_GAIN, b * AVERAGE_GAIN, 1.0); + glUniform1i(bayerUniform, GL_FALSE); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + // Render the clip severities. + float pixelsPerBin = binSize.width() * binSize.height(); + r = clipCounts(x, y).r() / pixelsPerBin; + gE = clipCounts(x, y).gEven() / pixelsPerBin; + gO = clipCounts(x, y).gOdd() / pixelsPerBin; + b = clipCounts(x, y).b() / pixelsPerBin; + glUniform4f(colorUniform, + r * CLIP_GAIN, gE * CLIP_GAIN, b * CLIP_GAIN, gO * CLIP_GAIN); + glUniform1i(bayerUniform, GL_TRUE); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + } + } + glDisableVertexAttribArray(1); + + // Add average/clip viewport labels. + m_context.setTextSize(TEXT_SIZE / windowRect.height() / 2.0, 2.0); + m_context.setTextPosition(0.02f, 0.98); + m_context.renderText(" Bayer Averages "); + m_context.setTextPosition(0.02f, 0.48); + m_context.renderText(" Clip Severity "); + } + + PROPAGATE_ERROR(m_context.swapBuffers()); + } + CONSUMER_PRINT("No more frames. Cleaning up.\n"); + + PROPAGATE_ERROR(requestShutdown()); + + return true; +} + +bool ConsumerThread::threadShutdown() +{ + glDeleteProgram(m_textureProgram); + glDeleteTextures(1, &m_streamTexture); + m_context.cleanup(); + + CONSUMER_PRINT("Done.\n"); + + return true; +} + +/******************************************************************************* + * Argus Producer thread: + * Opens the Argus camera driver, creates an OutputStream to be consumed by the + * GL consumer, then performs repeating capture requests for a given number of + * seconds before closing the producer and Argus driver. + ******************************************************************************/ +static bool execute(const ArgusSamples::CommonOptions& options) +{ + // Initialize the window and EGL display. + Window &window = Window::getInstance(); + window.setWindowRect(options.windowRect()); + PROPAGATE_ERROR(g_display.initialize(window.getEGLNativeDisplay())); + + // Initialize the Argus camera provider. + g_cameraProvider = UniqueObj(CameraProvider::create()); + ICameraProvider *iCameraProvider = interface_cast(g_cameraProvider); + if (!iCameraProvider) + ORIGINATE_ERROR("Failed to get ICameraProvider interface"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Ensure BayerAverageMap extension is supported. + if (!iCameraProvider->supportsExtension(EXT_BAYER_AVERAGE_MAP)) + ORIGINATE_ERROR("Face detection not supported."); + + // Get the selected CameraDevice and SensorMode. + CameraDevice *cameraDevice = ArgusHelpers::getCameraDevice( + g_cameraProvider.get(), options.cameraDeviceIndex()); + ICameraProperties *iCameraProperties = interface_cast(cameraDevice); + if (!iCameraProperties) + ORIGINATE_ERROR("Failed to get ICameraProperties interface"); + SensorMode* sensorMode = ArgusHelpers::getSensorMode(cameraDevice, options.sensorModeIndex()); + ISensorMode *iSensorMode = interface_cast(sensorMode); + if (!iSensorMode) + ORIGINATE_ERROR("Failed to get ISensorMode interface"); + + // Create CaptureSession. + UniqueObj captureSession(iCameraProvider->createCaptureSession(cameraDevice)); + ICaptureSession *iSession = interface_cast(captureSession); + if (!iSession) + ORIGINATE_ERROR("Failed to create CaptureSession"); + + // Create the OutputStream, which only needs to fill 1/4 of the window. + PRODUCER_PRINT("Creating output stream\n"); + UniqueObj streamSettings( + iSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iStreamSettings = + interface_cast(streamSettings); + if (!iStreamSettings) + ORIGINATE_ERROR("Failed to create OutputStreamSettings"); + iStreamSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888); + iStreamSettings->setResolution(Size2D(options.windowRect().width() / 2, + options.windowRect().height() / 2)); + iStreamSettings->setEGLDisplay(g_display.get()); + iStreamSettings->setMetadataEnable(true); + UniqueObj outputStream(iSession->createOutputStream(streamSettings.get())); + IEGLOutputStream *iStream = interface_cast(outputStream); + if (!iStream) + ORIGINATE_ERROR("Failed to create OutputStream"); + + // Launch the GL consumer thread to consume frames from the OutputStream's EGLStream. + PRODUCER_PRINT("Launching consumer thread\n"); + ConsumerThread glConsumerThread(options, iStream); + PROPAGATE_ERROR(glConsumerThread.initialize()); + + // Wait until the consumer is connected to the stream. + PROPAGATE_ERROR(glConsumerThread.waitRunning()); + + // Create capture request and enable output stream and set sensor mode. + UniqueObj request(iSession->createRequest()); + IRequest *iRequest = interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to create Request"); + iRequest->enableOutputStream(outputStream.get()); + ISourceSettings* iSourceSettings = interface_cast(request); + if (!iSourceSettings) + ORIGINATE_ERROR("Failed to get SourceSettings interface"); + iSourceSettings->setSensorMode(sensorMode); + + // Enable BayerAverageMap generation in the request. + Ext::IBayerAverageMapSettings *iBayerAverageMapSettings = + interface_cast(request); + if (!iBayerAverageMapSettings) + ORIGINATE_ERROR("Failed to get BayerAverageMapSettings interface"); + iBayerAverageMapSettings->setBayerAverageMapEnable(true); + + // Submit capture requests. + PRODUCER_PRINT("Starting repeat capture requests.\n"); + if (iSession->repeat(request.get()) != STATUS_OK) + ORIGINATE_ERROR("Failed to start repeat capture request"); + + // Wait for the specified number of seconds. + PROPAGATE_ERROR(window.pollingSleep(options.captureTime())); + + // Stop the repeating request and wait for idle. + iSession->stopRepeat(); + iSession->waitForIdle(); + + // Destroy the output stream. This destroys the EGLStream which causes + // the GL consumer acquire to fail and the consumer thread to end. + outputStream.reset(); + + // Wait for the consumer thread to complete. + PROPAGATE_ERROR(glConsumerThread.shutdown()); + + // Shut down Argus. + g_cameraProvider.reset(); + + // Shut down the window (destroys window's EGLSurface). + window.shutdown(); + + // Cleanup the EGL display + PROPAGATE_ERROR(g_display.cleanup()); + + PRODUCER_PRINT("Done -- exiting.\n"); + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char **argv) +{ + ArgusSamples::CommonOptions options(basename(argv[0]), + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_M_SensorMode | + ArgusSamples::CommonOptions::Option_R_WindowRect | + ArgusSamples::CommonOptions::Option_T_CaptureTime); + + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + if (!ArgusSamples::execute(options)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CMakeLists.txt b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CMakeLists.txt new file mode 100644 index 0000000..4750c6e --- /dev/null +++ b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CMakeLists.txt @@ -0,0 +1,63 @@ +# Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_cudabayerdemosaic) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(CUDA) + +# Fail silently if CUDA is not found +if(CUDA_FOUND) + find_package(Argus REQUIRED) + + set(SOURCES + main.cpp + CudaBayerDemosaicConsumer.cpp + CudaBayerDemosaicKernel.cu + ) + + include_directories( + ${ARGUS_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + + cuda_add_executable(${PROJECT_NAME} ${SOURCES}) + + target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + argussampleutils + cuda + ) + + install(TARGETS ${PROJECT_NAME} DESTINATION bin) + + include(CPack) +else(CUDA_FOUND) + message(CUDA toolkit not found, skipping ${PROJECT_NAME}) +endif(CUDA_FOUND) diff --git a/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicConsumer.cpp b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicConsumer.cpp new file mode 100644 index 0000000..36b712c --- /dev/null +++ b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicConsumer.cpp @@ -0,0 +1,264 @@ +/* + * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "CudaBayerDemosaicConsumer.h" + +namespace ArgusSamples +{ + +CudaBayerDemosaicConsumer::CudaBayerDemosaicConsumer(EGLDisplay display, EGLStreamKHR stream, + Argus::Size2D size, + uint32_t frameCount) + : m_eglDisplay(display) + , m_bayerInputStream(stream) + , m_bayerSize(size) + , m_frameCount(frameCount) +{ + // ARGB output size is half of the Bayer size after demosaicing. + m_outputSize.width() = m_bayerSize.width() / 2; + m_outputSize.height() = m_bayerSize.height() / 2; +} + +CudaBayerDemosaicConsumer::~CudaBayerDemosaicConsumer() +{ + shutdown(); +} + +bool CudaBayerDemosaicConsumer::threadInitialize() +{ + PROPAGATE_ERROR(initCUDA(&m_cudaContext)); + + // Connect this CUDA consumer to the RAW16 Bayer stream being produced by Argus. + CUresult cuResult = cuEGLStreamConsumerConnect( + &m_cudaBayerStreamConnection, m_bayerInputStream); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to connect CUDA to EGLStream as a consumer (CUresult %s)", + getCudaErrorString(cuResult)); + } + + // Create the EGLStream for the demosaiced RGBA output to the OpenGL PreviewConsumer. + if (!m_rgbaOutputStream.create(m_eglDisplay)) + { + ORIGINATE_ERROR("Failed to create EGLStream for RGBA output"); + } + + // Connect the OpenGL PreviewConsumer to the RGBA stream. + m_previewConsumerThread = new PreviewConsumerThread(m_eglDisplay, m_rgbaOutputStream.get()); + if (!m_previewConsumerThread) + { + ORIGINATE_ERROR("Failed to allocate preview consumer thread"); + } + PROPAGATE_ERROR(m_previewConsumerThread->initialize()); + PROPAGATE_ERROR(m_previewConsumerThread->waitRunning()); + + // Connect CUDA to the RGBA stream to procude the demosaiced output. + cuResult = cuEGLStreamProducerConnect(&m_cudaRGBAStreamConnection, m_rgbaOutputStream.get(), + m_outputSize.width(), m_outputSize.height()); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to connect CUDA to EGLStream as a producer (CUresult %s)", + getCudaErrorString(cuResult)); + } + + // Allocate two RGBA buffers for double-buffering the EGLStream between CUDA and OpenGL. + for (unsigned int i = 0; i < RGBA_BUFFER_COUNT; i++) + { + size_t bufferSize = m_outputSize.width() * m_outputSize.height() * sizeof(uint32_t); + cuResult = cuMemAlloc(&m_rgbaBuffers[i], bufferSize); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Failed to allocate CUDA buffer"); + } + } + + return true; +} + +bool CudaBayerDemosaicConsumer::threadExecute() +{ + // Wait for the Argus producer to connect to the stream. + while (true) + { + EGLint state = EGL_STREAM_STATE_CONNECTING_KHR; + if (!eglQueryStreamKHR(m_eglDisplay, m_bayerInputStream, EGL_STREAM_STATE_KHR, &state)) + { + ORIGINATE_ERROR("Failed to query stream state (possible producer failure)."); + } + if (state == EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR) + { + break; + } + Window::getInstance().pollEvents(); + } + + // Acquire and process all of the frames. + for (uint32_t frame = 0; frame < m_frameCount; frame++) + { + // Acquire the new Bayer frame from the Argus EGLStream and get the CUDA resource. + CUgraphicsResource bayerResource = 0; + CUresult cuResult = cuEGLStreamConsumerAcquireFrame( + &m_cudaBayerStreamConnection, &bayerResource, NULL, -1); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to acquire an image frame from the EGLStream (CUresult %s)", + getCudaErrorString(cuResult)); + } + + // Get the Bayer EGL frame information from the CUDA resource. + CUeglFrame bayerEglFrame; + memset(&bayerEglFrame, 0, sizeof(bayerEglFrame)); + cuResult = cuGraphicsResourceGetMappedEglFrame(&bayerEglFrame, bayerResource, 0, 0); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to get the CUDA EGL frame (CUresult %s)", + getCudaErrorString(cuResult)); + } + + // On the first frame, print the information contained in the CUDA EGL frame structure. + if (frame == 0) + { + printf("CUDA CONSUMER: Input frame format:\n"); + PROPAGATE_ERROR(printCUDAEGLFrame(bayerEglFrame)); + } + + // Sanity check for one of the required input color formats. + if ((bayerEglFrame.cuFormat != CU_AD_FORMAT_SIGNED_INT16) || + ((bayerEglFrame.eglColorFormat != CU_EGL_COLOR_FORMAT_BAYER_RGGB) && + (bayerEglFrame.eglColorFormat != CU_EGL_COLOR_FORMAT_BAYER_BGGR) && + (bayerEglFrame.eglColorFormat != CU_EGL_COLOR_FORMAT_BAYER_GRBG) && + (bayerEglFrame.eglColorFormat != CU_EGL_COLOR_FORMAT_BAYER_GBRG))) + { + ORIGINATE_ERROR("Only 16bit signed Bayer color formats are supported"); + } + + // Prepare the next output frame for the RGBA stream. This will either be + // an unused buffer or one that has been released by the OpenGL consumer. + CUeglFrame rgbaEglFrame; + if (frame < RGBA_BUFFER_COUNT) + { + // Populate a new CUeglFrame from one of the available buffers. + rgbaEglFrame.frame.pPitch[0] = (void*)m_rgbaBuffers[frame]; + rgbaEglFrame.width = m_outputSize.width(); + rgbaEglFrame.height = m_outputSize.height(); + rgbaEglFrame.depth = 1; + rgbaEglFrame.pitch = m_outputSize.width() * sizeof(uint32_t); + rgbaEglFrame.frameType = CU_EGL_FRAME_TYPE_PITCH; + rgbaEglFrame.planeCount = 1; + rgbaEglFrame.numChannels = 4; + rgbaEglFrame.eglColorFormat = CU_EGL_COLOR_FORMAT_ARGB; + rgbaEglFrame.cuFormat = CU_AD_FORMAT_UNSIGNED_INT8; + if (frame == 0) + { + printf("CUDA PRODUCER: Output frame format:\n"); + PROPAGATE_ERROR(printCUDAEGLFrame(rgbaEglFrame)); + } + } + else + { + // Reuse a returned frame. + cuResult = cuEGLStreamProducerReturnFrame( + &m_cudaRGBAStreamConnection, &rgbaEglFrame, NULL); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to return frame to the CUDA producer(CUresult %s).", + getCudaErrorString(cuResult)); + } + } + + printf("CUDA CONSUMER: Acquired Bayer frame %d\n", frame + 1); + + // Run the CUDA kernel to demosaic the Bayer input into the RGBA output. + cudaBayerDemosaic((CUdeviceptr)(bayerEglFrame.frame.pPitch[0]), + bayerEglFrame.width, + bayerEglFrame.height, + bayerEglFrame.pitch, + bayerEglFrame.eglColorFormat, + (CUdeviceptr)(rgbaEglFrame.frame.pPitch[0])); + + // Return the Bayer frame to the Argus stream. + cuResult = cuEGLStreamConsumerReleaseFrame( + &m_cudaBayerStreamConnection, bayerResource, NULL); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to release frame to EGLStream (CUresult %s).", + getCudaErrorString(cuResult)); + } + + // Present the RGBA output frame to the OpenGL PreviewConsumer stream. + printf("CUDA PRODUCER: Presented frame %d to RGBA EGLStream\n", frame + 1); + cuResult = cuEGLStreamProducerPresentFrame( + &m_cudaRGBAStreamConnection, rgbaEglFrame, NULL); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Failed to present frame to EGLStream (CUresult %s).", + getCudaErrorString(cuResult)); + } + } + + printf("CUDA CONSUMER: No more frames. Cleaning up\n"); + printf("CUDA CONSUMER: Done\n"); + + return true; +} + +bool CudaBayerDemosaicConsumer::threadShutdown() +{ + // Disconnect from the Argus RAW16 stream + CUresult cuResult = cuEGLStreamConsumerDisconnect(&m_cudaBayerStreamConnection); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to disconnect CUDA from Bayer EGLStream (CUresult %s)", + getCudaErrorString(cuResult)); + } + + // Disconnect the producer from the RGBA stream + cuResult = cuEGLStreamProducerDisconnect(&m_cudaRGBAStreamConnection); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to disconnect CUDA from RGBA EGLStream (CUresult %s)", + getCudaErrorString(cuResult)); + } + + // Destroy the OpenGL consumer thread. + m_previewConsumerThread->shutdown(); + delete m_previewConsumerThread; + m_previewConsumerThread = NULL; + + // Free the RGBA stream buffers. + for (unsigned int i = 0; i < RGBA_BUFFER_COUNT; i++) + { + cuMemFree(m_rgbaBuffers[i]); + } + + PROPAGATE_ERROR(cleanupCUDA(&m_cudaContext)); + + return true; +} + +} // namespace ArgusSamples diff --git a/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicConsumer.h b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicConsumer.h new file mode 100644 index 0000000..15483d4 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicConsumer.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef CUDA_BAYER_DEMOSAIC_CONSUMER_H +#define CUDA_BAYER_DEMOSAIC_CONSUMER_H + +#include "CUDAHelper.h" +#include "Error.h" +#include "PreviewConsumer.h" + +#include "CudaBayerDemosaicKernel.h" + +namespace ArgusSamples +{ + +/** + * The CudaBayerDemosaicConsumer acts as an EGLStream consumer for Bayer buffers output + * from argus (RAW16), and uses a CUDA kernel to perform simple Bayer demosaic on the + * input in order to output RGBA data. This component then acts as a producer to another + * EGLStream, pushing the RGBA results buffer into a PreviewConsumer so that its + * contents are rendered on screen using OpenGL. + * + * This sample effectively chains two EGLStreams together as follows: + * Argus --> [Bayer EGLStream] --> CUDA Demosaic --> [RGBA EGLStream] --> OpenGL + */ +class CudaBayerDemosaicConsumer : public Thread +{ +public: + + explicit CudaBayerDemosaicConsumer(EGLDisplay display, EGLStreamKHR stream, + Argus::Size2D size, uint32_t frameCount); + ~CudaBayerDemosaicConsumer(); + +private: + /** @name Thread methods */ + /**@{*/ + virtual bool threadInitialize(); + virtual bool threadExecute(); + virtual bool threadShutdown(); + /**@}*/ + + static const uint32_t RGBA_BUFFER_COUNT = 2; // Number of buffers to alloc in RGBA stream. + + EGLDisplay m_eglDisplay; // EGLDisplay handle. + EGLStreamKHR m_bayerInputStream; // EGLStream between Argus and CUDA. + EGLStreamHolder m_rgbaOutputStream; // EGLStream between CUDA and OpenGL. + + Argus::Size2D m_bayerSize; // Size of Bayer input. + Argus::Size2D m_outputSize; // Size of RGBA output. + + uint32_t m_frameCount; // Number of frames to process. + + CUcontext m_cudaContext; + CUeglStreamConnection m_cudaBayerStreamConnection; // CUDA handle to Bayer stream. + CUeglStreamConnection m_cudaRGBAStreamConnection; // CUDA handle to RGBA stream. + + CUdeviceptr m_rgbaBuffers[RGBA_BUFFER_COUNT]; // RGBA buffers used for CUDA output. + + PreviewConsumerThread* m_previewConsumerThread; // OpenGL consumer thread. +}; + +}; // namespace ArgusSamples + +#endif // CUDA_BAYER_DEMOSAIC_CONSUMER_H diff --git a/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicKernel.cu b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicKernel.cu new file mode 100644 index 0000000..c62985c --- /dev/null +++ b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicKernel.cu @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "CudaBayerDemosaicKernel.h" +#include + +#ifndef CU_EGL_COLOR_FORMAT_BAYER_RGGB +#define CU_EGL_COLOR_FORMAT_BAYER_RGGB (0x2D) +#define CU_EGL_COLOR_FORMAT_BAYER_BGGR (0x2E) +#define CU_EGL_COLOR_FORMAT_BAYER_GRBG (0x2F) +#define CU_EGL_COLOR_FORMAT_BAYER_GBRG (0x30) +#endif + +// Constant used to store the component ordering of the Bayer input (used by bayerToRgba). +// These values provide the indexes into the original data that will provide an RGGB ordering. +__constant__ short bayerPattern[4]; + +// Converts a 16-bit Bayer quad to 32bit RGBA. The Bayer components are provided +// in the order they're stored in the buffer, as this function will also handle +// the component ordering during conversion using the 'bayerPattern' constant. +static __device__ uchar4 +bayerToRgba(short bayerQuad[4]) +{ + // Signed 16-bit Bayer maps 1<<14 to white. + const float whitePoint = 1<<14; + + // Order the Bayer components based on the format component ordering. + short r = bayerQuad[bayerPattern[0]]; + short g1 = bayerQuad[bayerPattern[1]]; + short g2 = bayerQuad[bayerPattern[2]]; + short b = bayerQuad[bayerPattern[3]]; + + // Map [0, 1<<14] to [0, 255]. + uchar4 rgba; + rgba.x = ((float)b / whitePoint) * 255; + rgba.y = ((float)((g1 + g2) / 2) / whitePoint) * 255; + rgba.z = ((float)r / whitePoint) * 255; + + return rgba; +} + +// Demosaics a Bayer buffer into an RGBA output. +__global__ void +bayerDemosaicKernel(short* bayerSrc, + int bayerWidth, + int bayerHeight, + int bayerPitch, + uchar4* rgbaDst) +{ + int x = blockIdx.x * blockDim.x + threadIdx.x; + int y = blockIdx.y * blockDim.y + threadIdx.y; + int stepX = blockDim.x * gridDim.x; + int stepY = blockDim.y * gridDim.y; + + int rgbaWidth = bayerWidth / 2; + int rgbaHeight = bayerHeight / 2; + + for (int col = x; col < rgbaWidth; col += stepX) + { + for (int row = y; row < rgbaHeight; row += stepY) + { + // Extract the Bayer quad. + short* bayerOffset = bayerSrc + (col * 2) + (row * bayerPitch); + short bayerQuad[4]; + bayerQuad[0] = *(bayerOffset); + bayerQuad[1] = *(bayerOffset + 1); + bayerQuad[2] = *(bayerOffset + (bayerPitch / 2)); + bayerQuad[3] = *(bayerOffset + (bayerPitch / 2) + 1); + + // Demosaic the Bayer quad to RGBA. + uchar4 rgba = bayerToRgba(bayerQuad); + + // Optional: Add gain (useful to debug dark output). + unsigned int gain = 5; + rgba.x = umin(rgba.x * gain, 255); + rgba.y = umin(rgba.y * gain, 255); + rgba.z = umin(rgba.z * gain, 255); + + // Output the RGBA pixels to the output buffer. + rgbaDst[rgbaWidth * row + col] = rgba; + } + } +} + +// Sets the Bayer pattern constant used to order Bayer components. +static void setBayerPatternConstant(int bayerFormat) +{ + short pattern[4]; + if (bayerFormat == CU_EGL_COLOR_FORMAT_BAYER_RGGB) + { + pattern[0] = 0; + pattern[1] = 1; + pattern[2] = 2; + pattern[3] = 3; + } + else if (bayerFormat == CU_EGL_COLOR_FORMAT_BAYER_BGGR) + { + pattern[0] = 3; + pattern[1] = 1; + pattern[2] = 2; + pattern[3] = 0; + } + else if (bayerFormat == CU_EGL_COLOR_FORMAT_BAYER_GRBG) + { + pattern[0] = 1; + pattern[1] = 0; + pattern[2] = 3; + pattern[3] = 2; + } + else // bayerFormat == CU_EGL_COLOR_FORMAT_BAYER_GBRG + { + pattern[0] = 2; + pattern[1] = 0; + pattern[2] = 3; + pattern[3] = 1; + } + cudaMemcpyToSymbol(bayerPattern, pattern, sizeof(pattern)); +} + +// Entrypoint to the CUDA Bayer Demosaic. +int cudaBayerDemosaic(CUdeviceptr bayerSrc, + int bayerWidth, + int bayerHeight, + int bayerPitch, + int bayerFormat, + CUdeviceptr rgbaDst) +{ + setBayerPatternConstant(bayerFormat); + + dim3 threadsPerBlock(32, 32); + dim3 blocks(2, 2); + + cudaEvent_t start; + cudaEvent_t stop; + + cudaEventCreate(&start); + cudaEventCreate(&stop); + + cudaEventRecord(start, 0); + + bayerDemosaicKernel<<>>( + (short*)bayerSrc, bayerWidth, bayerHeight, bayerPitch, (uchar4*)rgbaDst); + + cudaEventRecord(stop, 0); + + cudaEventSynchronize(stop); + float elapsedMillis; + cudaEventElapsedTime(&elapsedMillis, start, stop); + + printf("CUDA KERNEL: Processed frame in %fms\n", elapsedMillis); + + return 0; +} diff --git a/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicKernel.h b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicKernel.h new file mode 100644 index 0000000..0d108a0 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/CudaBayerDemosaicKernel.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef CUDA_BAYER_DEMOSAIC_KERNEL_H +#define CUDA_BAYER_DEMOSAIC_KERNEL_H + +#include + +extern int cudaBayerDemosaic(CUdeviceptr bayerSrc, + int bayerWidth, + int bayerHeight, + int bayerPitch, + int bayerFormat, + CUdeviceptr rgbaDst); + +#endif // CUDA_BAYER_DEMOSAIC_KERNEL_H diff --git a/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/main.cpp b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/main.cpp new file mode 100644 index 0000000..f75d2f7 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/cudaBayerDemosaic/main.cpp @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include "ArgusHelpers.h" +#include "CommonOptions.h" +#include "CudaBayerDemosaicConsumer.h" + +namespace ArgusSamples +{ + +// Globals and derived constants. +EGLDisplayHolder g_display; + +/** + * Main thread function opens connection to Argus driver, creates a capture session for + * a given camera device and sensor mode, then creates a RAW16 stream attached to a + * CudaBayerConsumer such that the CUDA consumer will acquire the outputs of capture + * results as raw Bayer data (which it then demosaics to RGBA for demonstration purposes). + */ +static bool execute(const CommonOptions& options) +{ + // Initialize the preview window and EGL display. + Window &window = Window::getInstance(); + window.setWindowRect(options.windowRect()); + PROPAGATE_ERROR(g_display.initialize(window.getEGLNativeDisplay())); + + // Create the Argus CameraProvider object + UniqueObj cameraProvider(CameraProvider::create()); + ICameraProvider *iCameraProvider = interface_cast(cameraProvider); + if (!iCameraProvider) + { + ORIGINATE_ERROR("Failed to create CameraProvider"); + } + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Get the selected camera device and sensor mode. + CameraDevice* cameraDevice = ArgusHelpers::getCameraDevice( + cameraProvider.get(), options.cameraDeviceIndex()); + if (!cameraDevice) + ORIGINATE_ERROR("Selected camera device is not available"); + SensorMode* sensorMode = ArgusHelpers::getSensorMode(cameraDevice, options.sensorModeIndex()); + ISensorMode *iSensorMode = interface_cast(sensorMode); + if (!iSensorMode) + ORIGINATE_ERROR("Selected sensor mode not available"); + + // Create the capture session using the selected device. + UniqueObj captureSession(iCameraProvider->createCaptureSession(cameraDevice)); + ICaptureSession *iCaptureSession = interface_cast(captureSession); + if (!iCaptureSession) + { + ORIGINATE_ERROR("Failed to create CaptureSession"); + } + + // Create the RAW16 output EGLStream using the sensor mode resolution. + UniqueObj streamSettings( + iCaptureSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iEGLStreamSettings = + interface_cast(streamSettings); + if (!iEGLStreamSettings) + { + ORIGINATE_ERROR("Failed to create OutputStreamSettings"); + } + iEGLStreamSettings->setEGLDisplay(g_display.get()); + iEGLStreamSettings->setPixelFormat(PIXEL_FMT_RAW16); + iEGLStreamSettings->setResolution(iSensorMode->getResolution()); + iEGLStreamSettings->setMode(EGL_STREAM_MODE_FIFO); + UniqueObj outputStream(iCaptureSession->createOutputStream(streamSettings.get())); + IEGLOutputStream *iEGLOutputStream = interface_cast(outputStream); + if (!iEGLOutputStream) + { + ORIGINATE_ERROR("Failed to create EGLOutputStream"); + } + + // Create capture request and enable output stream. + UniqueObj request(iCaptureSession->createRequest()); + IRequest *iRequest = interface_cast(request); + if (!iRequest) + { + ORIGINATE_ERROR("Failed to create Request"); + } + iRequest->enableOutputStream(outputStream.get()); + + // Set the sensor mode in the request. + ISourceSettings *iSourceSettings = interface_cast(request); + if (!iSourceSettings) + ORIGINATE_ERROR("Failed to get source settings request interface"); + iSourceSettings->setSensorMode(sensorMode); + + // Create the CUDA Bayer consumer and connect it to the RAW16 output stream. + CudaBayerDemosaicConsumer cudaConsumer(iEGLOutputStream->getEGLDisplay(), + iEGLOutputStream->getEGLStream(), + iEGLStreamSettings->getResolution(), + options.frameCount()); + PROPAGATE_ERROR(cudaConsumer.initialize()); + PROPAGATE_ERROR(cudaConsumer.waitRunning()); + + // Submit the batch of capture requests. + for (unsigned int frame = 0; frame < options.frameCount(); ++frame) + { + Argus::Status status; + uint32_t result = iCaptureSession->capture(request.get(), TIMEOUT_INFINITE, &status); + if (result == 0) + { + ORIGINATE_ERROR("Failed to submit capture request (status %x)", status); + } + } + + // Wait until all captures have completed. + iCaptureSession->waitForIdle(); + + // Shutdown the CUDA consumer. + PROPAGATE_ERROR(cudaConsumer.shutdown()); + + // Shut down Argus. + cameraProvider.reset(); + + // Shut down the window (destroys window's EGLSurface). + window.shutdown(); + + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char** argv) +{ + printf("Executing Argus Sample: %s\n", basename(argv[0])); + + ArgusSamples::CommonOptions options(basename(argv[0]), + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_M_SensorMode | + ArgusSamples::CommonOptions::Option_R_WindowRect | + ArgusSamples::CommonOptions::Option_F_FrameCount); + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + if (!ArgusSamples::execute(options)) + return EXIT_FAILURE; + + printf("Argus sample '%s' completed successfully.\n", basename(argv[0])); + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/cudaHistogram/CMakeLists.txt b/jetson_multimedia_api/argus/samples/cudaHistogram/CMakeLists.txt new file mode 100644 index 0000000..b45e5c6 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/cudaHistogram/CMakeLists.txt @@ -0,0 +1,62 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_cudahistogram) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(CUDA) + +# Fail silently if CUDA is not found +if(CUDA_FOUND) + find_package(Argus REQUIRED) + + set(SOURCES + main.cpp + histogram.cu + ) + + include_directories( + ${ARGUS_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + + cuda_add_executable(${PROJECT_NAME} ${SOURCES}) + + target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + argussampleutils + cuda + ) + + install(TARGETS ${PROJECT_NAME} DESTINATION bin) + + include(CPack) +else(CUDA_FOUND) + message(CUDA toolkit not found, skipping ${PROJECT_NAME}) +endif(CUDA_FOUND) diff --git a/jetson_multimedia_api/argus/samples/cudaHistogram/histogram.cu b/jetson_multimedia_api/argus/samples/cudaHistogram/histogram.cu new file mode 100644 index 0000000..b6b97d1 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/cudaHistogram/histogram.cu @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Based on CUB histogram code: https://github.com/NVlabs/cub/tree/master/experimental/histogram + */ + +#include +#include "histogram.h" + +// First-pass histogram kernel (binning into privatized counters) +template < + int NUM_PARTS, + int NUM_BINS> +__global__ void histogram_smem_atomics( + CUsurfObject surface, + unsigned int width, + unsigned int height, + unsigned int *out) +{ + // global position and size + int x = blockIdx.x * blockDim.x + threadIdx.x; + int y = blockIdx.y * blockDim.y + threadIdx.y; + int nx = blockDim.x * gridDim.x; + int ny = blockDim.y * gridDim.y; + + // threads in workgroup + int t = threadIdx.x + threadIdx.y * blockDim.x; // thread index in workgroup, linear in 0..nt-1 + int nt = blockDim.x * blockDim.y; // total threads in workgroup + + // group index in 0..ngroups-1 + int g = blockIdx.x + blockIdx.y * gridDim.x; + + // initialize smem + __shared__ unsigned int smem[NUM_BINS]; + for (int i = t; i < NUM_BINS; i += nt) + smem[i] = 0; + + // process pixels (updates our group's partial histogram in smem) + for (int col = x; col < width; col += nx) + { + for (int row = y; row < height; row += ny) + { + uchar1 data; + surf2Dread(&data, surface, col, row); + + atomicAdd(&smem[((unsigned int)data.x) % NUM_BINS], 1); + } + } + + __syncthreads(); + + // move to our workgroup's slice of output + out += g * NUM_PARTS; + + // store local output to global + for (int i = t; i < NUM_BINS; i += nt) + { + out[i] = smem[i]; + } +} + +// Second pass histogram kernel (accumulation) +template < + int NUM_PARTS, + int NUM_BINS> +__global__ void histogram_smem_accum( + const unsigned int *in, + int n, + unsigned int *out) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i > NUM_BINS) + return; // out of range + + unsigned int total = 0; + for (int j = 0; j < n; j++) + total += in[i + NUM_PARTS * j]; + + out[i] = total; +} + +template < + int NUM_BINS> +float run_smem_atomics( + CUsurfObject surface, + unsigned int width, + unsigned int height, + unsigned int *h_hist) +{ + enum + { + NUM_PARTS = 1024 + }; + cudaError_t err = cudaSuccess; + dim3 block(32, 4); + dim3 grid(16, 16); + int total_blocks = grid.x * grid.y; + + // allocate device histogram + unsigned int *d_hist; + err = cudaMalloc(&d_hist, NUM_BINS * sizeof(unsigned int)); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to allocate device d_hist (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + // allocate partial histogram + unsigned int *d_part_hist; + err = cudaMalloc(&d_part_hist, total_blocks * NUM_PARTS * sizeof(unsigned int)); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to allocate device d_part_hist (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + dim3 block2(128); + dim3 grid2((NUM_BINS + block.x - 1) / block.x); + + cudaEvent_t start; + cudaEvent_t stop; + + cudaEventCreate(&stop); + cudaEventCreate(&start); + + cudaEventRecord(start, 0); + + histogram_smem_atomics<<>>( + surface, + width, + height, + d_part_hist); + err = cudaGetLastError(); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to launch histogram_smem_atomics kernel (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + histogram_smem_accum<<>>( + d_part_hist, + total_blocks, + d_hist); + err = cudaGetLastError(); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to launch histogram_smem_accum kernel (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + cudaEventRecord(stop, 0); + + cudaEventSynchronize(stop); + float elapsed_millis; + cudaEventElapsedTime(&elapsed_millis, start, stop); + + cudaEventDestroy(start); + cudaEventDestroy(stop); + + err = cudaMemcpy(h_hist, d_hist, NUM_BINS * sizeof(unsigned int), cudaMemcpyDeviceToHost); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to copy into h_hist (error code %s)!\n", cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + err = cudaFree(d_part_hist); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to free device vector d_part_hist (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + err = cudaFree(d_hist); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to free device vector d_hist (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + return elapsed_millis; +} + +float histogram(CUsurfObject surface, unsigned int width, unsigned int height, + unsigned int *histogram) +{ + return run_smem_atomics(surface, width, height, histogram); +} diff --git a/jetson_multimedia_api/argus/samples/cudaHistogram/histogram.h b/jetson_multimedia_api/argus/samples/cudaHistogram/histogram.h new file mode 100644 index 0000000..3be1028 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/cudaHistogram/histogram.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef HISTOGRAM_H +#define HISTOGRAM_H + +#include + +#define HISTOGRAM_BINS 64 + +extern float histogram(CUsurfObject surface, unsigned int width, unsigned int height, + unsigned int *histogram); + +#endif // HISTOGRAM_H diff --git a/jetson_multimedia_api/argus/samples/cudaHistogram/main.cpp b/jetson_multimedia_api/argus/samples/cudaHistogram/main.cpp new file mode 100644 index 0000000..d751d6b --- /dev/null +++ b/jetson_multimedia_api/argus/samples/cudaHistogram/main.cpp @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2016 - 2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include + +#include "ArgusHelpers.h" +#include "CommonOptions.h" +#include "Error.h" +#include "UniquePointer.h" + +#include +#include + +#include "CUDAHelper.h" +#include "histogram.h" + +using namespace Argus; + +namespace ArgusSamples +{ + +// Global variables +CUcontext g_cudaContext = 0; + +static bool execute(const ArgusSamples::CommonOptions& options) +{ + // Create the CameraProvider object + UniqueObj cameraProvider(CameraProvider::create()); + ICameraProvider *iCameraProvider = interface_cast(cameraProvider); + if (!iCameraProvider) + ORIGINATE_ERROR("Failed to create CameraProvider"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Get the selected CameraDevice and SensorMode. + CameraDevice* cameraDevice = ArgusHelpers::getCameraDevice( + cameraProvider.get(), options.cameraDeviceIndex()); + if (!cameraDevice) + ORIGINATE_ERROR("Selected camera device is not available"); + SensorMode* sensorMode = ArgusHelpers::getSensorMode(cameraDevice, options.sensorModeIndex()); + ISensorMode *iSensorMode = interface_cast(sensorMode); + if (!iSensorMode) + ORIGINATE_ERROR("Selected sensor mode not available"); + + // Create the capture session using the selected device. + UniqueObj captureSession(iCameraProvider->createCaptureSession(cameraDevice)); + ICaptureSession *iCaptureSession = interface_cast(captureSession); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to create CaptureSession"); + + printf("Creating output stream\n"); + UniqueObj streamSettings( + iCaptureSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iEGLStreamSettings = + interface_cast(streamSettings); + if (!iEGLStreamSettings) + ORIGINATE_ERROR("Failed to create OutputStreamSettings"); + iEGLStreamSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888); + iEGLStreamSettings->setResolution(iSensorMode->getResolution()); + UniqueObj outputStream(iCaptureSession->createOutputStream(streamSettings.get())); + IEGLOutputStream *iEGLOutputStream = interface_cast(outputStream); + if (!iEGLOutputStream) + ORIGINATE_ERROR("Failed to create EGLOutputStream"); + + // Initialize and connect CUDA as the EGLStream consumer. + PROPAGATE_ERROR(initCUDA(&g_cudaContext)); + CUresult cuResult; + CUeglStreamConnection cudaConnection; + printf("Connecting CUDA to OutputStream as an EGLStream consumer\n"); + cuResult = cuEGLStreamConsumerConnect(&cudaConnection, iEGLOutputStream->getEGLStream()); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to connect CUDA to EGLStream as a consumer (CUresult %s)", + getCudaErrorString(cuResult)); + } + + // Create capture request, set sensor mode, and enable output stream. + UniqueObj request(iCaptureSession->createRequest()); + IRequest *iRequest = interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to create Request"); + iRequest->enableOutputStream(outputStream.get()); + + // Set the sensor mode in the request. + ISourceSettings *iSourceSettings = interface_cast(request); + if (!iSourceSettings) + ORIGINATE_ERROR("Failed to get source settings request interface"); + iSourceSettings->setSensorMode(sensorMode); + + // Submit some captures and calculate the histogram with CUDA + UniquePointer histogramData(new unsigned int[HISTOGRAM_BINS]); + if (!histogramData) + ORIGINATE_ERROR("Failed to allocate histogram"); + for (unsigned int frame = 0; frame < options.frameCount(); ++frame) + { + /* + * For simplicity this example submits a capture then waits for an output. + * This pattern will not provide the best possible performance as the camera + * stack runs in a pipeline, it is best to keep submitting as many captures as + * possible prior to waiting for the result. + */ + printf("Submitting a capture request\n"); + { + Argus::Status status; + const uint64_t ONE_SECOND = 1000000000; + uint32_t result = iCaptureSession->capture(request.get(), ONE_SECOND, &status); + if (result == 0) + ORIGINATE_ERROR("Failed to submit capture request (status %x)", status); + } + + printf("Acquiring an image from the EGLStream\n"); + CUgraphicsResource cudaResource = 0; + CUstream cudaStream = 0; + cuResult = cuEGLStreamConsumerAcquireFrame(&cudaConnection, &cudaResource, &cudaStream, -1); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to acquire an image frame from the EGLStream with CUDA as a " + "consumer (CUresult %s).", getCudaErrorString(cuResult)); + } + + // Get the CUDA EGL frame. + CUeglFrame cudaEGLFrame; + cuResult = cuGraphicsResourceGetMappedEglFrame(&cudaEGLFrame, cudaResource, 0, 0); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to get the CUDA EGL frame (CUresult %s).", + getCudaErrorString(cuResult)); + } + + // Print the information contained in the CUDA EGL frame structure. + PROPAGATE_ERROR(printCUDAEGLFrame(cudaEGLFrame)); + + if (!isCudaFormatYUV(cudaEGLFrame.eglColorFormat)) + { + ORIGINATE_ERROR("Only YUV color formats are supported"); + } + if (cudaEGLFrame.cuFormat != CU_AD_FORMAT_UNSIGNED_INT8) + ORIGINATE_ERROR("Only 8-bit unsigned int formats are supported"); + + // Create a surface from the luminance plane + CUDA_RESOURCE_DESC cudaResourceDesc; + memset(&cudaResourceDesc, 0, sizeof(cudaResourceDesc)); + cudaResourceDesc.resType = CU_RESOURCE_TYPE_ARRAY; + cudaResourceDesc.res.array.hArray = cudaEGLFrame.frame.pArray[0]; + CUsurfObject cudaSurfObj = 0; + cuResult = cuSurfObjectCreate(&cudaSurfObj, &cudaResourceDesc); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to create the surface object (CUresult %s)", + getCudaErrorString(cuResult)); + } + + printf("Calculating histogram with %d bins...\n", HISTOGRAM_BINS); + float time = histogram(cudaSurfObj, cudaEGLFrame.width, cudaEGLFrame.height, + histogramData.get()); + printf("Finished after %f ms.\n", time); + + printf("Result:"); + for (unsigned int index = 0; index < HISTOGRAM_BINS; ++index) + { + if (index % 8 == 0) + printf("\n%2d:", index); + printf(" %8d", histogramData.get()[index]); + } + printf("\n"); + + cuResult = cuSurfObjectDestroy(cudaSurfObj); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to destroy the surface object (CUresult %s)", + getCudaErrorString(cuResult)); + } + + cuResult = cuEGLStreamConsumerReleaseFrame(&cudaConnection, cudaResource, &cudaStream); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to release the last frame acquired from the EGLStream " + "(CUresult %s).", getCudaErrorString(cuResult)); + } + } + + printf("Cleaning up\n"); + + // Disconnect the Argus producer from the stream. + /// @todo: This is a WAR for a bug in cuEGLStreamConsumerDisconnect (see bug 200239336). + iEGLOutputStream->disconnect(); + + cuResult = cuEGLStreamConsumerDisconnect(&cudaConnection); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to disconnect CUDA as a consumer from EGLStream (CUresult %s)", + getCudaErrorString(cuResult)); + } + + PROPAGATE_ERROR(cleanupCUDA(&g_cudaContext)); + + // Shut down Argus. + cameraProvider.reset(); + + printf("Done\n"); + + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char** argv) +{ + ArgusSamples::CommonOptions options(basename(argv[0]), + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_M_SensorMode | + ArgusSamples::CommonOptions::Option_F_FrameCount); + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + if (!ArgusSamples::execute(options)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/denoise/CMakeLists.txt b/jetson_multimedia_api/argus/samples/denoise/CMakeLists.txt new file mode 100644 index 0000000..a6a3b30 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/denoise/CMakeLists.txt @@ -0,0 +1,58 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_denoise) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(Argus REQUIRED) +find_package(OpenGLES REQUIRED) +find_package(EGL REQUIRED) + +set(SOURCES + main.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + ${OPENGLES_LIBRARIES} + argussampleutils + ) + +install(TARGETS ${PROJECT_NAME} DESTINATION bin) + +include(CPack) diff --git a/jetson_multimedia_api/argus/samples/denoise/main.cpp b/jetson_multimedia_api/argus/samples/denoise/main.cpp new file mode 100644 index 0000000..6a8abc4 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/denoise/main.cpp @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ArgusHelpers.h" +#include "CommonOptions.h" +#include "Error.h" +#include "EGLGlobal.h" +#include "GLContext.h" +#include "Window.h" +#include "Thread.h" +#include "PreviewConsumer.h" + +#include +#include + +#include +#include + +using namespace Argus; + +/* + * This sample outputs capture requests to two streams, one of which has denoise algorithms + * enabled while the other does not, and then renders them to a split-screen window. + */ + +namespace ArgusSamples +{ + +// Constants. +static const Rectangle SOURCE_CLIP_RECT (0.4f, 0.4f, 0.6f, 0.6f); + +// Globals. +UniqueObj g_cameraProvider; +EGLDisplayHolder g_display; + +// Debug print macros. +#define PRODUCER_PRINT(...) printf("PRODUCER: " __VA_ARGS__) + +static bool execute(const ArgusSamples::CommonOptions& options) +{ + // Initialize the window and EGL display. + Window &window = Window::getInstance(); + window.setWindowRect(options.windowRect()); + PROPAGATE_ERROR(g_display.initialize(window.getEGLNativeDisplay())); + + // Initialize the Argus camera provider. + g_cameraProvider = UniqueObj(CameraProvider::create()); + ICameraProvider *iCameraProvider = interface_cast(g_cameraProvider); + if (!iCameraProvider) + ORIGINATE_ERROR("Failed to get ICameraProvider interface"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Get the selected camera device and sensor mode. + CameraDevice* cameraDevice = ArgusHelpers::getCameraDevice( + g_cameraProvider.get(), options.cameraDeviceIndex()); + if (!cameraDevice) + ORIGINATE_ERROR("Selected camera device is not available"); + SensorMode* sensorMode = ArgusHelpers::getSensorMode(cameraDevice, options.sensorModeIndex()); + ISensorMode *iSensorMode = interface_cast(sensorMode); + if (!iSensorMode) + ORIGINATE_ERROR("Selected sensor mode not available"); + + // Create a capture session using the selected device. + UniqueObj captureSession(iCameraProvider->createCaptureSession(cameraDevice)); + ICaptureSession *iCaptureSession = interface_cast(captureSession); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to create CaptureSession"); + + // Create two output streams, one for unprocessed preview and one for denoise. + PRODUCER_PRINT("Creating output streams\n"); + UniqueObj streamSettings( + iCaptureSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iStreamSettings = + interface_cast(streamSettings); + if (!iStreamSettings) + ORIGINATE_ERROR("Failed to create OutputStreamSettings"); + iStreamSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888); + iStreamSettings->setResolution(Size2D(options.windowRect().width(), + options.windowRect().height())); + iStreamSettings->setEGLDisplay(g_display.get()); + UniqueObj previewStream(iCaptureSession->createOutputStream(streamSettings.get())); + IEGLOutputStream *iPreviewStream = interface_cast(previewStream); + if (!iPreviewStream) + ORIGINATE_ERROR("Failed to create preview stream"); + UniqueObj denoiseStream(iCaptureSession->createOutputStream(streamSettings.get())); + IEGLOutputStream *iDenoiseStream = interface_cast(denoiseStream); + if (!iDenoiseStream) + ORIGINATE_ERROR("Failed to create denoise stream"); + + // Connect a PreviewConsumer to the streams to render a split-screen, side-by-side rendering. + PRODUCER_PRINT("Launching consumer thread\n"); + std::vector eglStreams; + eglStreams.push_back(iPreviewStream->getEGLStream()); + eglStreams.push_back(iDenoiseStream->getEGLStream()); + PreviewConsumerThread consumerThread(g_display.get(), eglStreams, + PreviewConsumerThread::LAYOUT_SPLIT_VERTICAL, + true /* Sync stream frames */); + PROPAGATE_ERROR(consumerThread.initialize()); + consumerThread.setLineWidth(1); + consumerThread.setLineColor(1.0f, 0.0f, 0.0f); + + // Wait until the consumer is connected to the streams. + PROPAGATE_ERROR(consumerThread.waitRunning()); + + // Create capture request and enable output streams. + UniqueObj request(iCaptureSession->createRequest()); + IRequest *iRequest = interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to create Request"); + iRequest->enableOutputStream(previewStream.get()); + iRequest->enableOutputStream(denoiseStream.get()); + + // Set the sensor mode in the request. + ISourceSettings *iSourceSettings = interface_cast(request); + if (!iSourceSettings) + ORIGINATE_ERROR("Failed to get source settings request interface"); + iSourceSettings->setSensorMode(sensorMode); + + // Use small source clip rects to zoom the image to make noise more visible. + IStreamSettings *previewStreamSettings = + interface_cast(iRequest->getStreamSettings(previewStream.get())); + if (!previewStreamSettings) + ORIGINATE_ERROR("Failed to get preview stream settings interface"); + IStreamSettings *denoiseStreamSettings = + interface_cast(iRequest->getStreamSettings(denoiseStream.get())); + if (!denoiseStreamSettings) + ORIGINATE_ERROR("Failed to get denoise stream settings interface"); + previewStreamSettings->setSourceClipRect(SOURCE_CLIP_RECT); + denoiseStreamSettings->setSourceClipRect(SOURCE_CLIP_RECT); + + // Enable denoise for the request. + IDenoiseSettings *denoiseSettings = interface_cast(request); + if (!denoiseSettings) + ORIGINATE_ERROR("Failed to get DenoiseSettings interface"); + denoiseSettings->setDenoiseMode(DENOISE_MODE_FAST); + denoiseSettings->setDenoiseStrength(1.0f); + + // Disable all post-processing (including denoise) for the preview stream (enabled by default). + previewStreamSettings->setPostProcessingEnable(false); + + // Submit capture requests. + PRODUCER_PRINT("Starting repeat capture requests.\n"); + if (iCaptureSession->repeat(request.get()) != STATUS_OK) + ORIGINATE_ERROR("Failed to start repeat capture request"); + + // Wait for CAPTURE_TIME seconds. + PROPAGATE_ERROR(window.pollingSleep(options.captureTime())); + + // Stop the repeating request and wait for idle. + iCaptureSession->stopRepeat(); + iCaptureSession->waitForIdle(); + + // Destroy the output streams and wait for the consumer thread to complete. + previewStream.reset(); + denoiseStream.reset(); + PROPAGATE_ERROR(consumerThread.shutdown()); + + // Shut down Argus. + g_cameraProvider.reset(); + + // Shut down the window (destroys window's EGLSurface). + window.shutdown(); + + // Cleanup the EGL display + PROPAGATE_ERROR(g_display.cleanup()); + + PRODUCER_PRINT("Done -- exiting.\n"); + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char **argv) +{ + ArgusSamples::CommonOptions options(basename(argv[0]), + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_M_SensorMode | + ArgusSamples::CommonOptions::Option_R_WindowRect | + ArgusSamples::CommonOptions::Option_T_CaptureTime); + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + if (!ArgusSamples::execute(options)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/eglImage/CMakeLists.txt b/jetson_multimedia_api/argus/samples/eglImage/CMakeLists.txt new file mode 100644 index 0000000..2c23102 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/eglImage/CMakeLists.txt @@ -0,0 +1,64 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_eglimage) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +# Fail silently if NVMMAPI not found. +find_package(NVMMAPI) +if(NVMMAPI_FOUND) + find_package(Argus REQUIRED) + find_package(OpenGLES REQUIRED) + find_package(EGL REQUIRED) + + set(SOURCES + main.cpp + ) + + include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + + add_executable(${PROJECT_NAME} ${SOURCES}) + + target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + ${OPENGLES_LIBRARIES} + argussampleutils + ) + + install(TARGETS ${PROJECT_NAME} DESTINATION bin) + + include(CPack) +else(NVMMAPI_FOUND) + message(NVIDIA Tegra Multimedia API not found, skipping ${PROJECT_NAME}) +endif(NVMMAPI_FOUND) diff --git a/jetson_multimedia_api/argus/samples/eglImage/main.cpp b/jetson_multimedia_api/argus/samples/eglImage/main.cpp new file mode 100644 index 0000000..dda4d1b --- /dev/null +++ b/jetson_multimedia_api/argus/samples/eglImage/main.cpp @@ -0,0 +1,420 @@ +/* + * Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ArgusHelpers.h" +#include "CommonOptions.h" +#include "EGLGlobal.h" +#include "Error.h" +#include "GLContext.h" +#include "NativeBuffer.h" +#include "Thread.h" +#include "Window.h" + +#include + +#include +#include + +using namespace Argus; + +namespace ArgusSamples +{ + +// Constants. +static const uint32_t NUM_BUFFERS = 10; + +// Globals. +UniqueObj g_cameraProvider; +EGLDisplayHolder g_display; +PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES; + +/******************************************************************************* + * Extended options class to add additional options specific to this sample. + ******************************************************************************/ +class EGLImageSampleOptions : public CommonOptions +{ +public: + EGLImageSampleOptions(const char *programName) + : CommonOptions(programName, + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_M_SensorMode | + ArgusSamples::CommonOptions::Option_R_WindowRect | + ArgusSamples::CommonOptions::Option_T_CaptureTime) + , m_useEGLSync(true) + { + addOption(createValueOption + ("eglsync", 's', "0 or 1", "Enable EGLSync usage.", m_useEGLSync, "1")); + } + + bool useEGLSync() const { return m_useEGLSync.get(); } + +protected: + Value m_useEGLSync; +}; + +/******************************************************************************* + * EGLImage Rendering Thread. + * Acquires completed Buffers from an EGLImage OutputStream and renders them + * to an on-screen window. + ******************************************************************************/ +class EGLImageRenderingThread : public Thread +{ +public: + explicit EGLImageRenderingThread(OutputStream* stream, const EGLImageSampleOptions& options) + : m_stream(stream) + , m_options(options) + { + } + ~EGLImageRenderingThread() + { + } + +private: + /** @name Thread methods */ + /**@{*/ + virtual bool threadInitialize(); + virtual bool threadExecute(); + virtual bool threadShutdown(); + /**@}*/ + + OutputStream* m_stream; + const EGLImageSampleOptions& m_options; + + GLContext m_context; + GLuint m_program; + GLuint m_texture; +}; + +bool EGLImageRenderingThread::threadInitialize() +{ + Window &window = Window::getInstance(); + + // Create the context and make it current. + PROPAGATE_ERROR(m_context.initialize(&window)); + PROPAGATE_ERROR(m_context.makeCurrent()); + + glEGLImageTargetTexture2DOES = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) + eglGetProcAddress("glEGLImageTargetTexture2DOES"); + + // Create the shader program to render the texture. + { + static const char vtxSrc[] = + "#version 300 es\n" + "in layout(location = 0) vec2 coord;\n" + "out vec2 texCoord;\n" + "void main() {\n" + " gl_Position = vec4((coord * 2.0) - 1.0, 0.0, 1.0);\n" + // Note: Argus frames use a top-left origin and need to be inverted for GL texture use. + " texCoord = vec2(coord.x, 1.0 - coord.y);\n" + "}\n"; + static const char frgSrc[] = + "#version 300 es\n" + "#extension GL_OES_EGL_image_external : require\n" + "precision highp float;\n" + "uniform samplerExternalOES texSampler;\n" + "in vec2 texCoord;\n" + "out vec4 fragColor;\n" + "void main() {\n" + " fragColor = texture2D(texSampler, texCoord);\n" + "}\n"; + PROPAGATE_ERROR(m_context.createProgram(vtxSrc, frgSrc, &m_program)); + glUseProgram(m_program); + glUniform1i(glGetUniformLocation(m_program, "texSampler"), 0); + } + + // Set the vertex attrib state. + static const GLfloat quadCoords[] = {1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f}; + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, quadCoords); + glEnableVertexAttribArray(0); + + // Create the external texture. + glGenTextures(1, &m_texture); + glBindTexture(GL_TEXTURE_EXTERNAL_OES, m_texture); + + return true; +} + +bool EGLImageRenderingThread::threadExecute() +{ + IBufferOutputStream* stream = interface_cast(m_stream); + if (!stream) + ORIGINATE_ERROR("Failed to get IBufferOutputStream interface"); + + while (true) + { + Window::getInstance().pollEvents(); + + // Acquire a Buffer from a completed capture request until END_OF_STREAM is received. + Argus::Status status = STATUS_OK; + Buffer* buffer = stream->acquireBuffer(TIMEOUT_INFINITE, &status); + if (status == STATUS_END_OF_STREAM) + { + break; + } + + IEGLImageBuffer* eglImageBuffer = interface_cast(buffer); + if (!eglImageBuffer) + ORIGINATE_ERROR("Failed to get IEGLImageBuffer interface"); + + if (m_options.useEGLSync()) + { + // Get (create) the EGLSync acquire sync. + IEGLSync* eglSync = interface_cast(buffer); + if (!eglSync) + ORIGINATE_ERROR("Failed to get IEGLSync interface"); + EGLSyncKHR acquireSync = EGL_NO_SYNC_KHR; + if (eglSync->getAcquireSync(g_display.get(), &acquireSync) != STATUS_OK) + ORIGINATE_ERROR("Failed to get acquire sync"); + + // getAcquireSync may return EGL_NO_SYNC_KHR, in which case no sync is needed. + if (acquireSync != EGL_NO_SYNC_KHR) + { + // Push the EGLSync to the GL command stream to block all future rendering + // operations. This ensures that GL will not read from the buffer until + // libargus has completed all write operations. + if (!eglWaitSyncKHR(g_display.get(), acquireSync, 0)) + ORIGINATE_ERROR("Failed to wait on EGLSync"); + eglDestroySyncKHR(g_display.get(), acquireSync); + } + } + + // Render the EGLImage from the buffer. + glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES, eglImageBuffer->getEGLImage()); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + if (m_options.useEGLSync()) + { + // Create an EGLSync object from the GL context that will correspond to the end of all + // previous rendering operations. This is then pushed to the Buffer before it is + // released so that libargus will not use the buffer until after all GL operations + // using the Buffer have completed. + IEGLSync* eglSync = interface_cast(buffer); + if (!eglSync) + ORIGINATE_ERROR("Failed to get IEGLSync interface"); + EGLSyncKHR releaseSync = eglCreateSyncKHR(g_display.get(), EGL_SYNC_FENCE_KHR, NULL); + if (releaseSync == EGL_NO_SYNC_KHR) + ORIGINATE_ERROR("Failed to issue EGLSync"); + if (eglSync->setReleaseSync(g_display.get(), releaseSync) != STATUS_OK) + ORIGINATE_ERROR("Failed to set release sync"); + } + else + { + // If sync is disabled, we must ensure all reads from the Buffer have completed + // before we release the Buffer back to the libargus Stream. + glFinish(); + } + + // Release the Buffer back to the stream. + stream->releaseBuffer(buffer); + + PROPAGATE_ERROR(m_context.swapBuffers()); + } + + PROPAGATE_ERROR(requestShutdown()); + + return true; +} + +bool EGLImageRenderingThread::threadShutdown() +{ + glDeleteTextures(1, &m_texture); + glDeleteProgram(m_program); + m_context.cleanup(); + + return true; +} + + +/******************************************************************************* + * This sample uses an BufferOutputStream with EGLImage sibling Buffers in + * order to output capture request results to EGLImages that are allocated + * and managed by this application. + ******************************************************************************/ +static bool execute(const EGLImageSampleOptions& options) +{ + // Initialize the window and EGL display. + Window &window = Window::getInstance(); + window.setWindowRect(options.windowRect()); + PROPAGATE_ERROR(g_display.initialize(window.getEGLNativeDisplay())); + + // Initialize the Argus camera provider. + g_cameraProvider = UniqueObj(CameraProvider::create()); + ICameraProvider *iCameraProvider = interface_cast(g_cameraProvider); + if (!iCameraProvider) + ORIGINATE_ERROR("Failed to get ICameraProvider interface"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Get the selected camera device and sensor mode. + CameraDevice* cameraDevice = ArgusHelpers::getCameraDevice( + g_cameraProvider.get(), options.cameraDeviceIndex()); + if (!cameraDevice) + ORIGINATE_ERROR("Selected camera device is not available"); + SensorMode* sensorMode = ArgusHelpers::getSensorMode(cameraDevice, options.sensorModeIndex()); + ISensorMode *iSensorMode = interface_cast(sensorMode); + if (!iSensorMode) + ORIGINATE_ERROR("Selected sensor mode not available"); + + // Create the capture session using the specified device and get its interfaces. + UniqueObj captureSession(iCameraProvider->createCaptureSession(cameraDevice)); + ICaptureSession *iCaptureSession = interface_cast(captureSession); + IEventProvider *iEventProvider = interface_cast(captureSession); + if (!iCaptureSession || !iEventProvider) + ORIGINATE_ERROR("Failed to create CaptureSession"); + + // Create the OutputStreamSettings object for a Buffer-based OutputStream. + UniqueObj streamSettings( + iCaptureSession->createOutputStreamSettings(STREAM_TYPE_BUFFER)); + IBufferOutputStreamSettings *iStreamSettings = + interface_cast(streamSettings); + if (!iStreamSettings) + ORIGINATE_ERROR("Failed to create OutputStreamSettings"); + + // Configure the OutputStream to use the EGLImage BufferType. + iStreamSettings->setBufferType(BUFFER_TYPE_EGL_IMAGE); + + // Enable EGLSync use with the stream (if requested). + if (options.useEGLSync() && (iStreamSettings->setSyncType(SYNC_TYPE_EGL_SYNC) != STATUS_OK)) + ORIGINATE_ERROR("EGLSync not supported"); + + // Create the OutputStream. + UniqueObj outputStream(iCaptureSession->createOutputStream(streamSettings.get())); + IBufferOutputStream *iBufferOutputStream = interface_cast(outputStream); + if (!iBufferOutputStream) + ORIGINATE_ERROR("Failed to create BufferOutputStream"); + + // Allocate native buffers. + NativeBuffer* nativeBuffers[NUM_BUFFERS]; + for (uint32_t i = 0; i < NUM_BUFFERS; i++) + { + nativeBuffers[i] = NativeBuffer::create(Size2D(options.windowRect().width(), + options.windowRect().height())); + if (!nativeBuffers[i]) + ORIGINATE_ERROR("Failed to allocate NativeBuffer"); + } + + // Create EGLImages from the native buffers. + EGLImageKHR eglImages[NUM_BUFFERS]; + for (uint32_t i = 0; i < NUM_BUFFERS; i++) + { + eglImages[i] = nativeBuffers[i]->createEGLImage(g_display.get()); + if (eglImages[i] == EGL_NO_IMAGE_KHR) + ORIGINATE_ERROR("Failed to create EGLImage"); + } + + // Create the BufferSettings object to configure Buffer creation. + UniqueObj bufferSettings(iBufferOutputStream->createBufferSettings()); + IEGLImageBufferSettings *iBufferSettings = + interface_cast(bufferSettings); + if (!iBufferSettings) + ORIGINATE_ERROR("Failed to create BufferSettings"); + iBufferSettings->setEGLDisplay(g_display.get()); + + // Create the Buffers for each EGLImage (and release to stream for initial capture use). + UniqueObj buffers[NUM_BUFFERS]; + for (uint32_t i = 0; i < NUM_BUFFERS; i++) + { + iBufferSettings->setEGLImage(eglImages[i]); + buffers[i].reset(iBufferOutputStream->createBuffer(bufferSettings.get())); + if (!interface_cast(buffers[i])) + ORIGINATE_ERROR("Failed to create Buffer"); + if (iBufferOutputStream->releaseBuffer(buffers[i].get()) != STATUS_OK) + ORIGINATE_ERROR("Failed to release Buffer for capture use"); + } + + // Create capture request, set the sensor mode, and enable the output stream. + UniqueObj request(iCaptureSession->createRequest()); + IRequest *iRequest = interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to create Request"); + iRequest->enableOutputStream(outputStream.get()); + ISourceSettings *iSourceSettings = interface_cast(request); + if (!iSourceSettings) + ORIGINATE_ERROR("Failed to get source settings request interface"); + iSourceSettings->setSensorMode(sensorMode); + + // Start the EGLImage rendering thread. + EGLImageRenderingThread renderingThread(outputStream.get(), options); + PROPAGATE_ERROR(renderingThread.initialize()); + PROPAGATE_ERROR(renderingThread.waitRunning()); + + // Submit capture requests. + if (iCaptureSession->repeat(request.get()) != STATUS_OK) + ORIGINATE_ERROR("Failed to start repeat capture request"); + + // Wait for (capture) specified number of seconds. + PROPAGATE_ERROR(window.pollingSleep(options.captureTime())); + + // Stop the repeating request and signal end of stream to stop the rendering thread. + iCaptureSession->stopRepeat(); + iBufferOutputStream->endOfStream(); + + // Wait for the rendering thread to complete. + PROPAGATE_ERROR(renderingThread.shutdown()); + + // Destroy the buffers and output stream. + for (uint32_t i = 0; i < NUM_BUFFERS; i++) + buffers[i].reset(); + outputStream.reset(); + + // Destroy the EGLImages. + for (uint32_t i = 0; i < NUM_BUFFERS; i++) + eglDestroyImageKHR(g_display.get(), eglImages[i]); + + // Destroy the native buffers. + for (uint32_t i = 0; i < NUM_BUFFERS; i++) + delete nativeBuffers[i]; + + // Shut down Argus. + g_cameraProvider.reset(); + + // Shut down the window (destroys window's EGLSurface). + window.shutdown(); + + // Cleanup the EGL display + PROPAGATE_ERROR(g_display.cleanup()); + + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char** argv) +{ + ArgusSamples::EGLImageSampleOptions options(basename(argv[0])); + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + printf("EGLSync enabled: %s\n", options.useEGLSync() ? "true" : "false"); + + if (!ArgusSamples::execute(options)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/gstVideoEncode/CMakeLists.txt b/jetson_multimedia_api/argus/samples/gstVideoEncode/CMakeLists.txt new file mode 100644 index 0000000..c587f9f --- /dev/null +++ b/jetson_multimedia_api/argus/samples/gstVideoEncode/CMakeLists.txt @@ -0,0 +1,67 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_gstvideoencode) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(Argus REQUIRED) + +set(SOURCES + main.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +# Begin of gstreamer +find_package(PkgConfig REQUIRED) + +pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0) +include_directories(${GSTREAMER_INCLUDE_DIRS}) +target_link_libraries(${PROJECT_NAME} ${GSTREAMER_LIBRARIES}) + +pkg_check_modules(GLIB REQUIRED glib-2.0) +include_directories(${GLIB_INCLUDE_DIRS}) +target_link_libraries(${PROJECT_NAME} ${GLIB_LIBRARIES}) +# End of gstreamer + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + argussampleutils + ) + +install(TARGETS ${PROJECT_NAME} DESTINATION bin) + +include(CPack) diff --git a/jetson_multimedia_api/argus/samples/gstVideoEncode/main.cpp b/jetson_multimedia_api/argus/samples/gstVideoEncode/main.cpp new file mode 100644 index 0000000..f8c09de --- /dev/null +++ b/jetson_multimedia_api/argus/samples/gstVideoEncode/main.cpp @@ -0,0 +1,873 @@ +/* + * Copyright (c) 2016 - 2019, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include "ArgusHelpers.h" +#include "CommonOptions.h" +#include "Error.h" +#include "PreviewConsumer.h" +#include +#include + +namespace ArgusSamples +{ + +// Globals. +EGLDisplayHolder g_display; +volatile sig_atomic_t shutdownSignalReceived = 0; + +void ctrl_c_sig_handler(int signo); +void ctrl_c_sig_handler(int signo) +{ + shutdownSignalReceived = 1; +} + +/******************************************************************************* + * Extended options class to add additional options specific to this sample. + ******************************************************************************/ +class GstVideoEncodeSampleOptions : public CommonOptions +{ +public: + enum NoiseModeArg + { + NOISE_MODE_ARG_OFF = 1, + NOISE_MODE_ARG_FAST = 2, + NOISE_MODE_ARG_HIGH_QUALITY = 3 + }; + + GstVideoEncodeSampleOptions(const char *programName) + : CommonOptions(programName, + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_M_SensorMode | + ArgusSamples::CommonOptions::Option_R_WindowRect | + ArgusSamples::CommonOptions::Option_T_CaptureTime) + , m_enablePreview(true) + , m_framerate(0) + , m_bitrate(14000000) + , m_useP016(false) + , m_nrMode(NOISE_MODE_ARG_FAST) + , m_useH264(false) + , m_useWdr(false) + , m_path("./") + , m_filename("argus_gstvideoencode_out") + , m_remoteAddress("") + , m_remoteUsername("") + , m_remotePath("~/") + , m_keepLocalFiles(false) + , m_partSize(0) + { + addOption(createValueOption + ("preview", 'p', "0 or 1", "Enable preview window.", m_enablePreview, "1")); + addOption(createValueOption + ("framerate", 0, "RATE", "Video recording framerate. 0 indicates sensor mode maximum.", + m_framerate)); + addOption(createValueOption + ("bitrate", 0, "RATE", "Video recording bitrate.", m_bitrate)); + addOption(createValueOption + ("usep016", 0, "FLAG", "Use P016 deep-color format (instead of NV12).", m_useP016)); + addOption(createValueOption + ("nrmode", 'n', "MODE", "Noise reduction: 1=off, 2=fast, 3=best", m_nrMode)); + addOption(createValueOption + ("useh264", 0, "FLAG", "Use H.264 video format (else H.265)", m_useH264)); + addOption(createValueOption + ("usewdr", 'w', "0 or 1", "Force the use of a WDR SensorMode. This will use the first " + "available WDR (DOL or PWL) mode, and overrides any explicit --mode setting.", + m_useWdr, "1")); + addOption(createValueOption + ("path", 0, "PATH", "Output path (directory) for the output file(s). This path must be " + "writable by the application, and files will be written to this location regardless" + "of whether or not files are being sent to a remote server. See --keeplocal.", + m_path)); + addOption(createValueOption + ("file", 0, "FILE", "Filename for the output file(s). This will be prefixed to " + "the part number and file type suffix (i.e. '.mkv') that will be appended by the app.", + m_filename)); + addOption(createValueOption + ("partsize", 0, "MBYTES", "Maximum size, in MBytes, of the output video files. When " + "non-zero, the video output will be divided into multiple parts of this maximum size, " + "identified by a part number appended to the filename. These parts are written as " + "raw HEVC data (i.e. it is not written to an mp4 or mkv container).", + m_partSize, "0")); + addOption(createValueOption + ("remoteaddress", 0, "ADDRESS", "Address (host name or IP address) for remote file writes.", + m_remoteAddress)); + addOption(createValueOption + ("remoteusername", 0, "USER", "Username for remote file writes. Note that no 'password' " + "option is available; the expectation is that SSH passwordless login is configured " + "for this user on the remote device.", + m_remoteUsername)); + addOption(createValueOption + ("remotepath", 0, "PATH", "Path on the remote server where the files will be copied.", + m_remotePath)); + addOption(createValueOption + ("keeplocal", 0, "FLAG", "When remote copies are enabled, this flag will specify " + "whether or not the local copy should be deleted after being copied.", + m_keepLocalFiles)); + + addDescription("\nThis sample demonstrates the use of a GStreamer consumer for encoding\n" + "video streams from an Argus OutputStream.\n\n" + "In order to support 24x7 use cases such as security camera recording,\n" + "this sample can record indefinitely (specified with a capture time of 0),\n" + "and can optionally write the output stream to multiple file parts using\n" + "a maximum file size. These parts can then be optionally copied to a\n" + "remote server, and then kept or deleted from the local device.\n" + "For example, the following will indefinitely record video in 100MB chunks\n" + "that will be written to the local path '/argusLocal/' before being copied\n" + "to 192.168.1.1:/argusRemote/ using the 'argus' username. The local files\n" + "will also be preserved using --keeplocal\n\n" + " argus_gstvideoencode -t0 \\\n" + " --partsize=100 \\\n" + " --path=/argusLocal/ \\\n" + " --remoteaddress=192.168.1.1 \\\n" + " --remoteusername=argus \\\n" + " --remotepath=/argusRemote/ \\\n" + " --keeplocal\n\n"); + } + + bool enablePreview() const { return m_enablePreview.get(); } + uint32_t framerate() const { return m_framerate.get(); } + uint32_t bitrate() const { return m_bitrate.get(); } + bool useP016() const { return m_useP016.get(); } + NoiseModeArg nrMode() const { return static_cast(m_nrMode.get()); } + bool useH264() const { return m_useH264.get(); } + bool useWdr() const { return m_useWdr.get(); } + const std::string& path() const { return m_path.get(); } + const std::string& filename() const { return m_filename.get(); } + const std::string& address() const { return m_remoteAddress.get(); } + const std::string& username() const { return m_remoteUsername.get(); } + const std::string& remotePath() const { return m_remotePath.get(); } + bool keepLocalFiles() const { return m_keepLocalFiles.get(); } + uint64_t partSize() const { return m_partSize.get() * 1024 * 1024; } + bool isRemoteDestination() const { return m_remoteAddress.get() != ""; } + +protected: + Value m_enablePreview; + Value m_framerate; + Value m_bitrate; + Value m_useP016; + Value m_nrMode; + Value m_useH264; + Value m_useWdr; + Value m_path; + Value m_filename; + Value m_remoteAddress; + Value m_remoteUsername; + Value m_remotePath; + Value m_keepLocalFiles; + Value m_partSize; +}; + +/** + * Utility thread to copy files to a remote server using scp. + * This class is only used when the --remoteaddress option is provided for remote file writes. + */ +class FileTransferThread : public Thread +{ +public: + FileTransferThread(const GstVideoEncodeSampleOptions& options) + : m_options(options) + { + } + + /** + * Queues a file to be transfered to the remote destination. + * If the keepLocalFiles option is false, the source file is deleted after the copy. + */ + void sendFile(const std::string& fileName) + { + m_queue.push(fileName); + } + +private: + virtual bool threadInitialize() { return true; } + virtual bool threadShutdown() { return true; } + + virtual bool threadExecute() + { + while (!m_doShutdown && m_queue.size() == 0) + sleep(1); + + if (m_queue.size() > 0) + { + // Copy file to server. + const char* filename = m_queue.front().c_str(); + std::string cmd = std::string("scp ") + filename + " " + m_options.username() + + "@" + m_options.address() + ":" + m_options.remotePath() + + " > /dev/null"; + if (system(cmd.c_str())) + { + printf("Failed to copy %s to %s\n", filename, m_options.address().c_str()); + return false; + } + else + { + printf("Copied %s to %s:%s (source file is being %s)\n", + filename, m_options.address().c_str(), + m_options.remotePath().c_str(), + (m_options.keepLocalFiles() ? "kept" : "deleted")); + } + + if (!m_options.keepLocalFiles()) + { + // Delete file. + cmd = std::string("rm ") + filename; + if (system(cmd.c_str())) + { + printf("Failed to delete %s\n", filename); + } + } + + m_queue.pop(); + } + + return true; + } + + const GstVideoEncodeSampleOptions& m_options; + std::queue< std::string > m_queue; +}; + + +/** + * Class to initialize and control GStreamer video encoding from an EGLStream. + */ +class GstVideoEncoder +{ +public: + GstVideoEncoder(const GstVideoEncodeSampleOptions& options) + : m_options(options) + , m_state(GST_STATE_NULL) + , m_pipeline(NULL) + , m_videoEncoder(NULL) + , m_fileTransferThread(NULL) + , m_currentPartNumber(0) + , m_currentPartFile(NULL) + , m_totalBytesWritten(0) + { + } + + ~GstVideoEncoder() + { + shutdown(); + } + + /** + * Initialize the GStreamer video encoder pipeline. + * @param[in] eglStream The EGLStream to consume frames from. + * @param[in] resolution The resolution of the video. + * @param[in] framerate The framerate of the video (in frames per second). + */ + bool initialize(EGLStreamKHR eglStream, Argus::Size2D resolution, int32_t framerate) + { + // Only H265 supports resolutions > 4k. + const uint32_t WIDTH_4K = 3840; + if (resolution.width() > WIDTH_4K && m_options.useH264()) + { + ORIGINATE_ERROR("Resolution > 4k requires encoder to be H265\n"); + } + + // If we're outputting to a remote destination, allocate/start the FileTransferThread. + if (m_options.isRemoteDestination()) + { + m_fileTransferThread = new FileTransferThread(m_options); + if (!m_fileTransferThread) + ORIGINATE_ERROR("Failed to create FileTransferThread"); + PROPAGATE_ERROR(m_fileTransferThread->initialize()); + } + + // Initialize GStreamer. + gst_init(NULL, NULL); + + // Create pipeline. + m_pipeline = gst_pipeline_new("video_pipeline"); + if (!m_pipeline) + ORIGINATE_ERROR("Failed to create video pipeline"); + + // Create EGLStream video source. + GstElement *videoSource = gst_element_factory_make("nveglstreamsrc", NULL); + if (!videoSource) + ORIGINATE_ERROR("Failed to create EGLStream video source"); + if (!gst_bin_add(GST_BIN(m_pipeline), videoSource)) + { + gst_object_unref(videoSource); + ORIGINATE_ERROR("Failed to add video source to pipeline"); + } + g_object_set(G_OBJECT(videoSource), "display", g_display.get(), NULL); + g_object_set(G_OBJECT(videoSource), "eglstream", eglStream, NULL); + + // Create queue. + GstElement *queue = gst_element_factory_make("queue", NULL); + if (!queue) + ORIGINATE_ERROR("Failed to create queue"); + if (!gst_bin_add(GST_BIN(m_pipeline), queue)) + { + gst_object_unref(queue); + ORIGINATE_ERROR("Failed to add queue to pipeline"); + } + + // Create encoder. + const char* encoder = m_options.useH264() ? "omxh264enc" : "omxh265enc"; + m_videoEncoder = gst_element_factory_make(encoder, NULL); + if (!m_videoEncoder) + ORIGINATE_ERROR("Failed to create video encoder"); + if (!gst_bin_add(GST_BIN(m_pipeline), m_videoEncoder)) + { + gst_object_unref(m_videoEncoder); + ORIGINATE_ERROR("Failed to add video encoder to pipeline"); + } + g_object_set(G_OBJECT(m_videoEncoder), "bitrate", m_options.bitrate(), NULL); + + // If the video stream is going to be divided into parts then it will be output as a raw + // video stream via the writeFileParts() callback, otherwise it is muxed to a container + // format for file output (i.e. MKV or MP4). + GstElement *encoderQueue = NULL; + GstElement *fakeSink = NULL; + GstElement *fileSink = NULL; + GstElement *videoMuxer = NULL; + if (m_options.partSize() > 0) + { + // Create encoder queue. + encoderQueue = gst_element_factory_make("queue", NULL); + if (!encoderQueue) + ORIGINATE_ERROR("Failed to create encoder queue"); + if (!gst_bin_add(GST_BIN(m_pipeline), encoderQueue)) + { + gst_object_unref(encoderQueue); + ORIGINATE_ERROR("Failed to add encoder queue to pipeline"); + } + + // Create fake sink to connect the file writing thread as the output destination. + fakeSink = gst_element_factory_make("fakesink", NULL); + if (!fakeSink) + ORIGINATE_ERROR("Failed to create fake sink"); + if (!gst_bin_add(GST_BIN(m_pipeline), fakeSink)) + { + gst_object_unref(fakeSink); + ORIGINATE_ERROR("Failed to add fake sink to pipeline"); + } + } + else + { + // Create muxer. + const char* muxer = (m_options.useH264() ? "qtmux" : "matroskamux"); + const char* suffix = (m_options.useH264() ? ".mp4" : ".mkv"); + videoMuxer = gst_element_factory_make(muxer, NULL); + if (!videoMuxer) + ORIGINATE_ERROR("Failed to create video muxer"); + if (!gst_bin_add(GST_BIN(m_pipeline), videoMuxer)) + { + gst_object_unref(videoMuxer); + ORIGINATE_ERROR("Failed to add video muxer to pipeline"); + } + + // Create file sink as the final destination for the output file. + fileSink = gst_element_factory_make("filesink", NULL); + if (!fileSink) + ORIGINATE_ERROR("Failed to create file sink"); + if (!gst_bin_add(GST_BIN(m_pipeline), fileSink)) + { + gst_object_unref(fileSink); + ORIGINATE_ERROR("Failed to add file sink to pipeline"); + } + m_currentPartName = m_options.path() + m_options.filename() + suffix; + printf("Writing output to %s\n", m_currentPartName.c_str()); + g_object_set(G_OBJECT(fileSink), "location", m_currentPartName.c_str(), NULL); + } + + // Create caps filter to describe EGLStream image format. + GstCaps *caps = gst_caps_new_simple("video/x-raw", + "format", G_TYPE_STRING, "NV12", + "width", G_TYPE_INT, resolution.width(), + "height", G_TYPE_INT, resolution.height(), + "framerate", GST_TYPE_FRACTION, framerate, 1, + NULL); + if (!caps) + ORIGINATE_ERROR("Failed to create caps"); + GstCapsFeatures *features = gst_caps_features_new("memory:NVMM", NULL); + if (!features) + { + gst_caps_unref(caps); + ORIGINATE_ERROR("Failed to create caps feature"); + } + gst_caps_set_features(caps, 0, features); + + // Link EGLStream source to queue via caps filter. + if (!gst_element_link_filtered(videoSource, queue, caps)) + { + gst_caps_unref(caps); + ORIGINATE_ERROR("Failed to link EGLStream source to queue"); + } + gst_caps_unref(caps); + + // Link queue to encoder + if (!gst_element_link(queue, m_videoEncoder)) + ORIGINATE_ERROR("Failed to link queue to encoder"); + + if (m_options.partSize() > 0) + { + printf("Writing parts with a maximum size of %lu bytes.\n", m_options.partSize()); + + // Link EGLStream encoder queue to h264 encoder queue via new encoder caps filter. + const char* format = m_options.useH264() ? "video/x-h264" : "video/x-h265"; + GstCaps *encoderCaps = gst_caps_new_simple( + format, "stream-format", G_TYPE_STRING, "byte-stream", NULL); + if (!gst_element_link_filtered(m_videoEncoder, encoderQueue, encoderCaps)) + { + gst_caps_unref(encoderCaps); + ORIGINATE_ERROR("Failed to link m_videoEncoder & encoder caps source to queue"); + } + gst_caps_unref(encoderCaps); + + // Link encoder queue to fake sink. + if (!gst_element_link(encoderQueue, fakeSink)) + ORIGINATE_ERROR("Failed to link encoder queue to fake sink"); + + // Set encoder buffer probe to connect the writeFileParts callback. + GstPad *src_pad = gst_element_get_static_pad(m_videoEncoder, "src"); + gst_pad_add_probe(src_pad, GST_PAD_PROBE_TYPE_BUFFER, + (GstPadProbeCallback)writeFilePartsStatic, this, NULL); + gst_object_unref(src_pad); + } + else + { + // Link encoder to muxer pad. + if (!gst_element_link_pads(m_videoEncoder, "src", videoMuxer, "video_%u")) + ORIGINATE_ERROR("Failed to link encoder to muxer pad"); + + // Link muxer to sink. + if (!gst_element_link(videoMuxer, fileSink)) + ORIGINATE_ERROR("Failed to link muxer to sink"); + } + + return true; + } + + /** + * Shutdown the GStreamer pipeline. + */ + void shutdown() + { + if (m_state == GST_STATE_PLAYING) + stopRecording(); + + if (m_pipeline) + gst_object_unref(GST_OBJECT(m_pipeline)); + m_pipeline = NULL; + + if (m_fileTransferThread) + { + m_fileTransferThread->sendFile(m_currentPartName); + m_fileTransferThread->shutdown(); + delete m_fileTransferThread; + m_fileTransferThread = NULL; + } + } + + /** + * Start recording video. + */ + bool startRecording() + { + if (!m_pipeline || !m_videoEncoder) + ORIGINATE_ERROR("Video encoder not initialized"); + + if (m_state != GST_STATE_NULL) + ORIGINATE_ERROR("Video encoder already recording"); + + // Start the pipeline. + if (gst_element_set_state(m_pipeline, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) + ORIGINATE_ERROR("Failed to start recording."); + + time(&m_startTime); + m_lastPrintTime = 0; + m_state = GST_STATE_PLAYING; + return true; + } + + /** + * Stop recording video. + */ + bool stopRecording() + { + if (!m_pipeline || !m_videoEncoder) + ORIGINATE_ERROR("Video encoder not initialized"); + + if (m_state != GST_STATE_PLAYING) + ORIGINATE_ERROR("Video encoder not recording"); + + // Send the end-of-stream event. + GstPad *pad = gst_element_get_static_pad(m_videoEncoder, "sink"); + if (!pad) + ORIGINATE_ERROR("Failed to get 'sink' pad"); + bool result = gst_pad_send_event(pad, gst_event_new_eos()); + gst_object_unref(pad); + if (!result) + ORIGINATE_ERROR("Failed to send end of stream event to encoder"); + + // Wait for the event to complete. + GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(m_pipeline)); + if (!bus) + ORIGINATE_ERROR("Failed to get bus"); + result = gst_bus_poll(bus, GST_MESSAGE_EOS, GST_CLOCK_TIME_NONE); + gst_object_unref(bus); + if (!result) + ORIGINATE_ERROR("Failed to wait for the EOF event"); + + // Stop the pipeline. + if (gst_element_set_state(m_pipeline, GST_STATE_NULL) == GST_STATE_CHANGE_FAILURE) + ORIGINATE_ERROR("Failed to stop recording."); + + m_state = GST_STATE_NULL; + return true; + } + + static GstPadProbeReturn writeFilePartsStatic( + GstPad *pad, GstPadProbeInfo *info, gpointer user_data) + { + GstVideoEncoder *thiz = static_cast(user_data); + return thiz->writeFileParts(pad, info); + } + + GstPadProbeReturn writeFileParts(GstPad *pad, GstPadProbeInfo *info) + { + GstMapInfo map; + GstBuffer *buffer = GST_PAD_PROBE_INFO_BUFFER(info); + buffer = gst_buffer_make_writable(buffer); + gst_buffer_map(buffer, &map, GST_MAP_WRITE); + + // If the write will exceed the file size maximum, start a new part. + int64_t writeSize = gst_buffer_get_size(buffer); + if (m_currentPartFile) + { + int64_t partBytesWritten = ftell(m_currentPartFile); + if ((uint64_t)(partBytesWritten + writeSize) > m_options.partSize()) + { + fclose(m_currentPartFile); + m_currentPartFile = NULL; + + printf("Finished part %s (%ld bytes)\n", + m_currentPartName.c_str(), partBytesWritten); + + // If we have a file transfer thread, send the file to the remote destination. + if (m_fileTransferThread) + { + m_fileTransferThread->sendFile(m_currentPartName); + } + } + } + + // Create new file part if needed. + if (!m_currentPartFile) + { + std::string partString = std::to_string(m_currentPartNumber++); + m_currentPartName = m_options.path() + m_options.filename() + + std::string(6 - partString.size(), '0') + partString + + (m_options.useH264() ? ".h264" : ".h265"); + m_currentPartFile = fopen(m_currentPartName.c_str(), "w"); + if (!m_currentPartFile) + { + printf("File open failed\n"); + return (GstPadProbeReturn)(0); + } + } + + // Write to file. + if (fwrite(map.data, writeSize, 1, m_currentPartFile) != 1) + { + fclose(m_currentPartFile); + m_currentPartFile = NULL; + printf("Write to file %s failed!\n", m_currentPartName.c_str()); + return (GstPadProbeReturn)(0); + } + else + { + m_totalBytesWritten += writeSize; + + time_t now = time(0); + if (difftime(now, m_lastPrintTime) >= 1) + { + uint64_t runtime = difftime(now, m_startTime); + const uint32_t days = runtime / (60*60*24); + runtime -= days * (60*60*24); + const uint32_t hours = runtime / (60*60); + runtime -= hours * (60*60); + const uint32_t minutes = runtime / 60; + runtime -= minutes * 60; + const uint32_t seconds = runtime; + printf("Recording: %u days, %02u:%02u:%02u, %ld MB written to %s, %lu MB total.\n", + days, hours, minutes, seconds, + (ftell(m_currentPartFile) / 1024 / 1024), + m_currentPartName.c_str(), + (m_totalBytesWritten / 1024 / 1024)); + m_lastPrintTime = now; + } + } + + gst_buffer_unmap(buffer, &map); + GST_PAD_PROBE_INFO_DATA(info) = buffer; + + return GST_PAD_PROBE_OK; + } + +protected: + const GstVideoEncodeSampleOptions& m_options; + + GstState m_state; + GstElement *m_pipeline; + GstElement *m_videoEncoder; + + FileTransferThread *m_fileTransferThread; + uint32_t m_currentPartNumber; + std::string m_currentPartName; + FILE *m_currentPartFile; + uint64_t m_totalBytesWritten; + time_t m_startTime; + time_t m_lastPrintTime; +}; + +static bool execute(const GstVideoEncodeSampleOptions& options) +{ + using namespace Argus; + + // Initialize the preview window and EGL display. + Window &window = Window::getInstance(); + if (options.enablePreview()) + { + window.setWindowRect(options.windowRect()); + PROPAGATE_ERROR(g_display.initialize(window.getEGLNativeDisplay())); + } + else + { + PROPAGATE_ERROR(g_display.initialize(EGL_DEFAULT_DISPLAY)); + } + + // Create CameraProvider. + UniqueObj cameraProvider(CameraProvider::create()); + ICameraProvider *iCameraProvider = interface_cast(cameraProvider); + if (!iCameraProvider) + ORIGINATE_ERROR("Failed to open CameraProvider"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Get the selected camera device and sensor mode. + CameraDevice* cameraDevice = ArgusHelpers::getCameraDevice( + cameraProvider.get(), options.cameraDeviceIndex()); + if (!cameraDevice) + ORIGINATE_ERROR("Selected camera device is not available"); + SensorMode* sensorMode = options.useWdr() + ? ArgusHelpers::getWdrSensorMode(cameraDevice) + : ArgusHelpers::getSensorMode(cameraDevice, options.sensorModeIndex()); + ISensorMode *iSensorMode = interface_cast(sensorMode); + if (!iSensorMode) + ORIGINATE_ERROR("Selected sensor mode not available"); + + // Create CaptureSession. + UniqueObj captureSession(iCameraProvider->createCaptureSession(cameraDevice)); + ICaptureSession *iSession = interface_cast(captureSession); + if (!iSession) + ORIGINATE_ERROR("Failed to create CaptureSession"); + + // Set common output stream settings. + UniqueObj streamSettings( + iSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iEGLStreamSettings = + interface_cast(streamSettings); + if (!iEGLStreamSettings) + ORIGINATE_ERROR("Failed to create OutputStreamSettings"); + if (options.useP016()) + iEGLStreamSettings->setPixelFormat(PIXEL_FMT_P016); + else + iEGLStreamSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888); + iEGLStreamSettings->setEGLDisplay(g_display.get()); + + // Create video encoder stream using the sensor mode resolution. + iEGLStreamSettings->setResolution(iSensorMode->getResolution()); + UniqueObj videoStream(iSession->createOutputStream(streamSettings.get())); + IEGLOutputStream *iVideoStream = interface_cast(videoStream); + if (!iVideoStream) + ORIGINATE_ERROR("Failed to create video stream"); + + // Create preview stream. + UniqueObj previewStream; + IEGLOutputStream *iPreviewStream = NULL; + if (options.enablePreview()) + { + iEGLStreamSettings->setResolution(Size2D(options.windowRect().width(), + options.windowRect().height())); + previewStream.reset(iSession->createOutputStream(streamSettings.get())); + iPreviewStream = interface_cast(previewStream); + if (!iPreviewStream) + ORIGINATE_ERROR("Failed to create preview stream"); + } + + // Create capture Request and enable the streams in the Request. + UniqueObj request(iSession->createRequest(CAPTURE_INTENT_VIDEO_RECORD)); + IRequest *iRequest = interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to create Request"); + if (iRequest->enableOutputStream(videoStream.get()) != STATUS_OK) + ORIGINATE_ERROR("Failed to enable video stream in Request"); + if (options.enablePreview()) + { + if (iRequest->enableOutputStream(previewStream.get()) != STATUS_OK) + ORIGINATE_ERROR("Failed to enable preview stream in Request"); + } + + // Determine the framerate (0 indicates max framerate for sensor mode). + uint32_t maxFramerate = (1000000000 / (iSensorMode->getFrameDurationRange().min() - 1)); + uint32_t minFramerate = (1000000000 / iSensorMode->getFrameDurationRange().max()) + 1; + uint32_t framerate = (options.framerate() == 0) ? maxFramerate : options.framerate(); + if (framerate < minFramerate || framerate > maxFramerate) + { + ORIGINATE_ERROR("Requested framerate (%d) exceeds limits [%d, %d].\n", + framerate, minFramerate, maxFramerate); + } + + // Set the sensor mode in the request. + ISourceSettings *iSourceSettings = interface_cast(request); + if (!iSourceSettings) + ORIGINATE_ERROR("Failed to get source settings request interface"); + iSourceSettings->setSensorMode(sensorMode); + iSourceSettings->setFrameDurationRange(1000000000 / framerate); + + // Set the denoise settings. + IDenoiseSettings *denoiseSettings = interface_cast(request); + if (!denoiseSettings) + ORIGINATE_ERROR("Failed to get DenoiseSettings interface"); + switch (options.nrMode()) + { + case GstVideoEncodeSampleOptions::NOISE_MODE_ARG_OFF: + denoiseSettings->setDenoiseMode(DENOISE_MODE_OFF); + break; + + default: + case GstVideoEncodeSampleOptions::NOISE_MODE_ARG_FAST: + denoiseSettings->setDenoiseMode(DENOISE_MODE_FAST); + break; + + case GstVideoEncodeSampleOptions::NOISE_MODE_ARG_HIGH_QUALITY: + denoiseSettings->setDenoiseMode(DENOISE_MODE_HIGH_QUALITY); + break; + } + denoiseSettings->setDenoiseStrength(1.0f); + + // Initialize the GStreamer video encoder consumer. + GstVideoEncoder gstVideoEncoder(options); + if (!gstVideoEncoder.initialize(iVideoStream->getEGLStream(), + iSensorMode->getResolution(), + framerate)) + { + ORIGINATE_ERROR("Failed to initialize GstVideoEncoder EGLStream consumer"); + } + if (!gstVideoEncoder.startRecording()) + { + ORIGINATE_ERROR("Failed to start video recording"); + } + + // Initialize the preview consumer. + PreviewConsumerThread previewConsumer(iPreviewStream ? iPreviewStream->getEGLDisplay() : NULL, + iPreviewStream ? iPreviewStream->getEGLStream() : NULL); + if (options.enablePreview()) + { + PROPAGATE_ERROR(previewConsumer.initialize()); + PROPAGATE_ERROR(previewConsumer.waitRunning()); + } + + // If the capture time is 0, register the signal handler to terminate the infinite captures. + if (options.captureTime() == 0 && signal(SIGINT, ArgusSamples::ctrl_c_sig_handler) == SIG_ERR) + ORIGINATE_ERROR("Failed to register signal handler"); + + // Start repeat capture requests. + if (iSession->repeat(request.get()) != STATUS_OK) + ORIGINATE_ERROR("Failed to start repeat capture requests"); + + // Wait for the requested amount of time while the repeat captures continue. + // If the capture time is 0, we capture infinitely until a shutdown signal is received. + uint32_t sleepTime = std::max(1u, options.captureTime()); + do + { + if (options.enablePreview()) + { + PROPAGATE_ERROR(Window::getInstance().pollingSleep(sleepTime)); + } + else + { + sleep(sleepTime); + } + } while (options.captureTime() == 0 && !shutdownSignalReceived); + + // Stop the repeating captures. + iSession->stopRepeat(); + + // Wait until all frames have completed before stopping recording. + /// @todo: Not doing this may cause a deadlock. + iSession->waitForIdle(); + + // Stop video recording. + if (!gstVideoEncoder.stopRecording()) + ORIGINATE_ERROR("Failed to stop video recording"); + gstVideoEncoder.shutdown(); + videoStream.reset(); + + // Stop preview. + if (options.enablePreview()) + { + previewStream.reset(); + PROPAGATE_ERROR(previewConsumer.shutdown()); + } + + // Shut down Argus. + cameraProvider.reset(); + + // Shut down the window (destroys window's EGLSurface). + window.shutdown(); + + // Cleanup the EGL display + PROPAGATE_ERROR(g_display.cleanup()); + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char** argv) +{ + ArgusSamples::GstVideoEncodeSampleOptions options(basename(argv[0])); + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + if (!ArgusSamples::execute(options)) + return EXIT_FAILURE; + + printf("Done.\n"); + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/histogram/CMakeLists.txt b/jetson_multimedia_api/argus/samples/histogram/CMakeLists.txt new file mode 100644 index 0000000..f87316e --- /dev/null +++ b/jetson_multimedia_api/argus/samples/histogram/CMakeLists.txt @@ -0,0 +1,58 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_histogram) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(Argus REQUIRED) +find_package(OpenGLES REQUIRED) +find_package(EGL REQUIRED) + +set(SOURCES + main.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + ${OPENGLES_LIBRARIES} + argussampleutils + ) + +install(TARGETS ${PROJECT_NAME} DESTINATION bin) + +include(CPack) diff --git a/jetson_multimedia_api/argus/samples/histogram/main.cpp b/jetson_multimedia_api/argus/samples/histogram/main.cpp new file mode 100644 index 0000000..2e31e3c --- /dev/null +++ b/jetson_multimedia_api/argus/samples/histogram/main.cpp @@ -0,0 +1,552 @@ +/* + * Copyright (c) 2016 - 2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ArgusHelpers.h" +#include "CommonOptions.h" +#include "Error.h" +#include "EGLGlobal.h" +#include "GLContext.h" +#include "Window.h" +#include "Thread.h" + +#include +#include + +#include +#include +#include + +using namespace Argus; + +namespace ArgusSamples +{ + +// Constants. +static const uint32_t DEFAULT_CAPTURE_TIME = 10; // In seconds. +static const uint32_t DEFAULT_CAMERA_INDEX = 0; +static const Rectangle DEFAULT_WINDOW_RECT(0, 0, 1024, 768); +static const Size2D STREAM_SIZE(640, 480); + +// Due to clipping and differences in color correction algorithms, the +// upper-most bins may negatively affect the graph scaling. This constant +// specifies how many of the upper-most bins are excluded from the graphs. +static const uint32_t CLIP_BINS = 10; + +// Globals. +UniqueObj g_cameraProvider; +EGLDisplayHolder g_display; + +// Debug print macros. +#define PRODUCER_PRINT(...) printf("PRODUCER: " __VA_ARGS__) +#define CONSUMER_PRINT(...) printf("CONSUMER: " __VA_ARGS__) + +/******************************************************************************* + * Extended options class to add additional options specific to this sample. + ******************************************************************************/ +class HistogramSampleOptions : public CommonOptions +{ +public: + HistogramSampleOptions(const char *programName) + : CommonOptions(programName, + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_M_SensorMode | + ArgusSamples::CommonOptions::Option_R_WindowRect | + ArgusSamples::CommonOptions::Option_T_CaptureTime) + , m_useBayer(false) + { + addOption(createValueOption + ("usebayer", 'b', "0 or 1", "Use Bayer histogram (instead of RGB).", m_useBayer, "1")); + } + + bool useBayer() const { return m_useBayer.get(); } + +protected: + Value m_useBayer; +}; + +/******************************************************************************* + * Histogram Consumer thread: + * Opens an on-screen GL window, and renders a live camera preview with + * histogram overlays. + ******************************************************************************/ +class ConsumerThread : public Thread +{ +public: + explicit ConsumerThread(const HistogramSampleOptions& options, EGLStreamKHR stream) + : m_options(options) + , m_stream(stream) + , m_streamTexture(0) + , m_textureProgram(0) + , m_histogramProgram(0) + , m_histogramTexture(0) + , m_colorMaskLoc(0) + , m_binMaxLoc(0) + , m_combinedLoc(0) + { + uint32_t yDiv = HISTOGRAM_COUNT + 1; + m_histogramSpacing = options.windowRect().height() / (yDiv * yDiv); + m_histogramSize = Size2D( + options.windowRect().width() / 2 - (m_histogramSpacing * 2), + options.windowRect().height() / yDiv); + + } + ~ConsumerThread() + { + } + + enum HistogramType + { + HISTOGRAM_R, + HISTOGRAM_G, + HISTOGRAM_B, + HISTOGRAM_RGB, + HISTOGRAM_COMBINED, + + HISTOGRAM_COUNT + }; + +private: + /** @name Thread methods */ + /**@{*/ + virtual bool threadInitialize(); + virtual bool threadExecute(); + virtual bool threadShutdown(); + /**@}*/ + + /** + * Renders a single histogram to the display. + * @param[in] type The HistogramType being rendered. + * @param[in] label The label/title for the histogram. + * @param[in] max The maximum value containined in the histogram. + * @param[in] colorMask The color mask to use for the shader. + */ + void renderHistogram(HistogramType type, const char* label, + uint32_t max, RGBTuple colorMask); + + const HistogramSampleOptions& m_options; + EGLStreamKHR m_stream; + GLContext m_context; + GLuint m_streamTexture; + GLuint m_textureProgram; + GLuint m_histogramProgram; + GLuint m_histogramTexture; + GLuint m_colorMaskLoc; + GLuint m_binMaxLoc; + GLuint m_combinedLoc; + Size2D m_histogramSize; + uint32_t m_histogramSpacing; +}; + +bool ConsumerThread::threadInitialize() +{ + Window &window = Window::getInstance(); + + // Create the context and make it current. + CONSUMER_PRINT("Creating context.\n"); + PROPAGATE_ERROR(m_context.initialize(&window)); + PROPAGATE_ERROR(m_context.makeCurrent()); + + // Create the shader program to render the texture. + { + static const char vtxSrc[] = + "#version 300 es\n" + "in layout(location = 0) vec2 coord;\n" + "out vec2 texCoord;\n" + "void main() {\n" + " gl_Position = vec4((coord * 2.0) - 1.0, 0.0, 1.0);\n" + " texCoord = vec2(coord.x, 1.0 - coord.y);\n" + "}\n"; + static const char frgSrc[] = + "#version 300 es\n" + "#extension GL_OES_EGL_image_external : require\n" + "precision highp float;\n" + "uniform samplerExternalOES texSampler;\n" + "in vec2 texCoord;\n" + "out vec4 fragColor;\n" + "void main() {\n" + " fragColor = texture2D(texSampler, texCoord);\n" + "}\n"; + PROPAGATE_ERROR(m_context.createProgram(vtxSrc, frgSrc, &m_textureProgram)); + glUseProgram(m_textureProgram); + glUniform1i(glGetUniformLocation(m_textureProgram, "texSampler"), 0); + } + + // Create the shader program to render the histograms. + { + static const char vtxSrc[] = + "#version 300 es\n" + "in layout(location = 0) vec2 coord;\n" + "out vec2 binCoord;\n" + "void main() {\n" + " gl_Position = vec4((coord * 2.0) - 1.0, 0.0, 1.0);\n" + " binCoord = coord;\n" + "}\n"; + static const char frgSrc[] = + "#version 300 es\n" + "precision highp float;\n" + "uniform usampler2D histogramSampler;\n" + "uniform float binMax;\n" + "uniform vec4 colorMask;\n" + "uniform bool combined;\n" + "in vec2 binCoord;\n" + "out vec4 fragColor;\n" + "void main() {\n" + " if (combined) {\n" + " uint totalCount = texture2D(histogramSampler, binCoord).a;\n" + " float totalValue = float(totalCount) / binMax;\n" + " fragColor = vec4(vec3(step(binCoord.y, totalValue)), colorMask.a);\n" + " } else {\n" + " uvec3 rgbCounts = texture2D(histogramSampler, binCoord).rgb;\n" + " vec3 binValues = vec3(rgbCounts) / binMax;\n" + " fragColor = colorMask * vec4(step(binCoord.y, binValues), 1.0);\n" + " }\n" + "}\n"; + PROPAGATE_ERROR(m_context.createProgram(vtxSrc, frgSrc, &m_histogramProgram)); + glUseProgram(m_textureProgram); + glUniform1i(glGetUniformLocation(m_histogramProgram, "histogramSampler"), 0); + m_binMaxLoc = glGetUniformLocation(m_histogramProgram, "binMax"); + m_colorMaskLoc = glGetUniformLocation(m_histogramProgram, "colorMask"); + m_combinedLoc = glGetUniformLocation(m_histogramProgram, "combined"); + } + + // Initialize the vertex attrib state (used for both shader programs). + static const GLfloat quadCoords[] = {1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f}; + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, quadCoords); + glEnableVertexAttribArray(0); + + // Enable alpha blending. + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + // Set text parameters. + m_context.setTextSize(16.0f / m_histogramSize.height(), + (float)m_histogramSize.height() / (float)m_histogramSize.width()); + m_context.setTextColor(1.0f, 1.0f, 1.0f); + m_context.setTextBackground(0.0f, 0.0f, 0.0f, 0.5f); + + // Create a 1D integer texture to store the histogram values. + glGenTextures(1, &m_histogramTexture); + glBindTexture(GL_TEXTURE_2D, m_histogramTexture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32UI, 1, 1, 0, GL_RGBA_INTEGER, GL_UNSIGNED_INT, NULL); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + // Create an external texture and connect it to the stream as the consumer. + CONSUMER_PRINT("Connecting to stream.\n"); + glGenTextures(1, &m_streamTexture); + glBindTexture(GL_TEXTURE_EXTERNAL_OES, m_streamTexture); + if (!eglStreamConsumerGLTextureExternalKHR(g_display.get(), m_stream)) + ORIGINATE_ERROR("Unable to connect GL as consumer"); + CONSUMER_PRINT("Connected to stream.\n"); + + // Set the acquire timeout to infinite. + eglStreamAttribKHR(g_display.get(), m_stream, EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR, -1); + + return true; +} + +bool ConsumerThread::threadExecute() +{ + // Wait until the Argus producer is connected. + CONSUMER_PRINT("Waiting until producer is connected...\n"); + while (true) + { + EGLint state = EGL_STREAM_STATE_CONNECTING_KHR; + if (!eglQueryStreamKHR(g_display.get(), m_stream, EGL_STREAM_STATE_KHR, &state)) + ORIGINATE_ERROR("Failed to query stream state (possible producer failure)."); + if (state != EGL_STREAM_STATE_CONNECTING_KHR) + break; + usleep(1000); + } + CONSUMER_PRINT("Producer is connected; continuing.\n"); + + // Render until there are no more frames (the producer has disconnected). + uint32_t frame = 0; + while (eglStreamConsumerAcquireKHR(g_display.get(), m_stream)) + { + frame++; + CONSUMER_PRINT("Acquired frame %d. Rendering.\n", frame); + + // Render the image. + glViewport(0, 0, m_options.windowRect().width(), m_options.windowRect().height()); + glUseProgram(m_textureProgram); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + // Get the metadata from the current EGLStream frame. + // Note: This will likely fail for the last frame since the producer has + // already disconected from the EGLStream, so we need to handle + // failure gracefully. + UniqueObj metadataContainer( + EGLStream::MetadataContainer::create(g_display.get(), m_stream)); + EGLStream::IArgusCaptureMetadata *iArgusCaptureMetadata = + interface_cast(metadataContainer); + if (iArgusCaptureMetadata) + { + CaptureMetadata *metadata = iArgusCaptureMetadata->getMetadata(); + const ICaptureMetadata* iMetadata = interface_cast(metadata); + if (!iMetadata) + ORIGINATE_ERROR("Failed to get Argus metadata\n"); + + std::vector< Tuple<4, uint32_t> > rgbaData; + if (m_options.useBayer()) + { + // Read the Bayer histogram. + std::vector< BayerTuple > histogram; + const IBayerHistogram* bayerHistogram = + interface_cast(iMetadata->getBayerHistogram()); + if (!bayerHistogram || bayerHistogram->getHistogram(&histogram) != STATUS_OK) + ORIGINATE_ERROR("Failed to get histogram data\n"); + + // Generate RGBA data by combining gEven/Odd channels and putting + // combined totals into alpha channel. + rgbaData.resize(histogram.size() - CLIP_BINS); + for (uint32_t i = 0; i < histogram.size() - CLIP_BINS; i++) + { + rgbaData[i][0] = histogram[i].r(); + rgbaData[i][1] = (histogram[i].gEven() + histogram[i].gOdd()) / 2; + rgbaData[i][2] = histogram[i].b(); + rgbaData[i][3] = rgbaData[i][0] + rgbaData[i][1] + rgbaData[i][2]; + } + } + else + { + // Read the RGB histogram. + std::vector< RGBTuple > histogram; + const IRGBHistogram* rgbHistogram = + interface_cast(iMetadata->getRGBHistogram()); + if (!rgbHistogram || rgbHistogram->getHistogram(&histogram) != STATUS_OK) + ORIGINATE_ERROR("Failed to get histogram data\n"); + + // Generate RGBA data by appending totals into alpha channel. + rgbaData.resize(histogram.size() - CLIP_BINS); + for (uint32_t i = 0; i < histogram.size() - CLIP_BINS; i++) + { + rgbaData[i][0] = histogram[i].r(); + rgbaData[i][1] = histogram[i].g(); + rgbaData[i][2] = histogram[i].b(); + rgbaData[i][3] = rgbaData[i][0] + rgbaData[i][1] + rgbaData[i][2]; + } + } + + // Push histogram data into the texture. + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32UI, rgbaData.size(), 1, 0, + GL_RGBA_INTEGER, GL_UNSIGNED_INT, &rgbaData[0]); + + // Determine the maximum values, used for graph scaling. + Tuple<4, uint32_t> maxValues(0); + for (uint32_t i = 0; i < rgbaData.size(); i++) + { + maxValues[0] = std::max(rgbaData[i][0], maxValues[0]); + maxValues[1] = std::max(rgbaData[i][1], maxValues[1]); + maxValues[2] = std::max(rgbaData[i][2], maxValues[2]); + maxValues[3] = std::max(rgbaData[i][3], maxValues[3]); + } + uint rgbMax = std::max(maxValues[0], std::max(maxValues[1], maxValues[2])); + + // Render histograms. + renderHistogram(HISTOGRAM_R, "Red", maxValues[0], RGBTuple(1.0f, 0.0f, 0.0f)); + renderHistogram(HISTOGRAM_G, "Green", maxValues[1], RGBTuple(0.0f, 1.0f, 0.0f)); + renderHistogram(HISTOGRAM_B, "Blue", maxValues[2], RGBTuple(0.0f, 0.0f, 1.0f)); + renderHistogram(HISTOGRAM_RGB, "RGB", rgbMax, RGBTuple(1.0f, 1.0f, 1.0f)); + renderHistogram(HISTOGRAM_COMBINED, "Overall", maxValues[3], + RGBTuple(1.0f, 1.0f, 1.0f)); + } + + PROPAGATE_ERROR(m_context.swapBuffers()); + } + CONSUMER_PRINT("No more frames. Cleaning up.\n"); + + PROPAGATE_ERROR(requestShutdown()); + + return true; +} + +void ConsumerThread::renderHistogram(HistogramType type, const char* label, + uint32_t max, RGBTuple colorMask) +{ + const Rectangle &window = m_options.windowRect(); + const Point2D origin( + window.width() / 2 + m_histogramSpacing, + window.height() - (m_histogramSpacing + m_histogramSize.height()) * (type + 1)); + + // Render histogram + glUseProgram(m_histogramProgram); + glUniform1i(m_combinedLoc, type == HISTOGRAM_COMBINED); + glUniform1f(m_binMaxLoc, max); + glUniform4f(m_colorMaskLoc, colorMask.r(), colorMask.g(), colorMask.b(), 0.8f); + glViewport(origin.x(), origin.y(), m_histogramSize.width(), m_histogramSize.height()); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + // Render text. + std::ostringstream stream; + stream << "Max:" << std::setw(7) << max; + m_context.setTextPosition(0.02f, 0.98f); + m_context.renderText(label); + m_context.setTextPosition(0.75f, 0.96f); + m_context.renderText(stream.str().c_str()); +} + +bool ConsumerThread::threadShutdown() +{ + glDeleteProgram(m_textureProgram); + glDeleteProgram(m_histogramProgram); + glDeleteTextures(1, &m_streamTexture); + glDeleteTextures(1, &m_histogramTexture); + m_context.cleanup(); + + CONSUMER_PRINT("Done.\n"); + + return true; +} + +/******************************************************************************* + * Argus Producer thread: + * Opens the Argus camera driver, creates an OutputStream to be consumed by + * the GL consumer, then performs repeating capture requests for CAPTURE_TIME + * seconds before closing the producer and Argus driver. + ******************************************************************************/ +static bool execute(const HistogramSampleOptions& options) +{ + // Initialize the window and EGL display. + Window &window = Window::getInstance(); + window.setWindowRect(options.windowRect()); + PROPAGATE_ERROR(g_display.initialize(window.getEGLNativeDisplay())); + + // Initialize the Argus camera provider. + g_cameraProvider = UniqueObj(CameraProvider::create()); + ICameraProvider *iCameraProvider = interface_cast(g_cameraProvider); + if (!iCameraProvider) + ORIGINATE_ERROR("Failed to get ICameraProvider interface"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Get the selected camera device and sensor mode. + CameraDevice* cameraDevice = ArgusHelpers::getCameraDevice( + g_cameraProvider.get(), options.cameraDeviceIndex()); + if (!cameraDevice) + ORIGINATE_ERROR("Selected camera device is not available"); + SensorMode* sensorMode = ArgusHelpers::getSensorMode(cameraDevice, options.sensorModeIndex()); + ISensorMode *iSensorMode = interface_cast(sensorMode); + if (!iSensorMode) + ORIGINATE_ERROR("Selected sensor mode not available"); + + // Create the capture session using the specified device and get its interfaces. + UniqueObj captureSession(iCameraProvider->createCaptureSession(cameraDevice)); + ICaptureSession *iCaptureSession = interface_cast(captureSession); + IEventProvider *iEventProvider = interface_cast(captureSession); + if (!iCaptureSession || !iEventProvider) + ORIGINATE_ERROR("Failed to create CaptureSession"); + + // Create the OutputStream. + PRODUCER_PRINT("Creating output stream\n"); + UniqueObj streamSettings( + iCaptureSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iEGLStreamSettings = + interface_cast(streamSettings); + if (iEGLStreamSettings) + { + iEGLStreamSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888); + iEGLStreamSettings->setResolution(Size2D(options.windowRect().width(), + options.windowRect().height())); + iEGLStreamSettings->setEGLDisplay(g_display.get()); + iEGLStreamSettings->setMetadataEnable(true); + } + UniqueObj outputStream(iCaptureSession->createOutputStream(streamSettings.get())); + IEGLOutputStream *iEGLOutputStream = interface_cast(outputStream); + if (!iEGLOutputStream) + ORIGINATE_ERROR("Failed to create EGLOutputStream"); + + // Launch the consumer thread to consume frames from the OutputStream's EGLStream. + PRODUCER_PRINT("Launching consumer thread\n"); + ConsumerThread consumerThread(options, iEGLOutputStream->getEGLStream()); + PROPAGATE_ERROR(consumerThread.initialize()); + + // Wait until the consumer is connected to the stream. + PROPAGATE_ERROR(consumerThread.waitRunning()); + + // Create capture request and enable output stream. + UniqueObj request(iCaptureSession->createRequest()); + IRequest *iRequest = interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to create Request"); + iRequest->enableOutputStream(outputStream.get()); + + // Set the sensor mode in the request. + ISourceSettings *iSourceSettings = interface_cast(request); + if (!iSourceSettings) + ORIGINATE_ERROR("Failed to get source settings request interface"); + iSourceSettings->setSensorMode(sensorMode); + + // Submit capture requests. + PRODUCER_PRINT("Starting repeat capture requests.\n"); + if (iCaptureSession->repeat(request.get()) != STATUS_OK) + ORIGINATE_ERROR("Failed to start repeat capture request"); + + // Wait for specified number of seconds. + PROPAGATE_ERROR(window.pollingSleep(options.captureTime())); + + // Stop the repeating request and wait for idle. + iCaptureSession->stopRepeat(); + iCaptureSession->waitForIdle(); + + // Destroy the output stream. This destroys the EGLStream which causes + // the GL consumer acquire to fail and the consumer thread to end. + outputStream.reset(); + + // Wait for the consumer thread to complete. + PROPAGATE_ERROR(consumerThread.shutdown()); + + // Shut down Argus. + g_cameraProvider.reset(); + + // Shut down the window (destroys window's EGLSurface). + window.shutdown(); + + // Cleanup the EGL display + PROPAGATE_ERROR(g_display.cleanup()); + + PRODUCER_PRINT("Done -- exiting.\n"); + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char** argv) +{ + ArgusSamples::HistogramSampleOptions options(basename(argv[0])); + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + if (!ArgusSamples::execute(options)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/multiSensor/CMakeLists.txt b/jetson_multimedia_api/argus/samples/multiSensor/CMakeLists.txt new file mode 100644 index 0000000..db26ab7 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/multiSensor/CMakeLists.txt @@ -0,0 +1,58 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_multisensor) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(Argus REQUIRED) +find_package(OpenGLES REQUIRED) +find_package(EGL REQUIRED) + +set(SOURCES + main.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + ${OPENGLES_LIBRARIES} + argussampleutils + ) + +install(TARGETS ${PROJECT_NAME} DESTINATION bin) + +include(CPack) diff --git a/jetson_multimedia_api/argus/samples/multiSensor/main.cpp b/jetson_multimedia_api/argus/samples/multiSensor/main.cpp new file mode 100644 index 0000000..cf92f2e --- /dev/null +++ b/jetson_multimedia_api/argus/samples/multiSensor/main.cpp @@ -0,0 +1,279 @@ +/* + * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "CommonOptions.h" +#include "Error.h" +#include "EGLGlobal.h" +#include "GLContext.h" +#include "JPEGConsumer.h" +#include "PreviewConsumer.h" +#include "Window.h" +#include "Thread.h" + +#include + +#include +#include +#include +#include + +using namespace Argus; + +/* + * This sample opens two independent camera sessions using 2 sensors it then uses the first sensor + * to display a preview on the screen, while taking jpeg snapshots every second from the second + * sensor. The Jpeg saving and Preview consumption happen on two consumer threads in the + * PreviewConsumerThread and JPEGConsumerThread classes, located in the util folder. + */ + +namespace ArgusSamples +{ + +// Globals and derived constants. +EGLDisplayHolder g_display; + +// Debug print macros. +#define PRODUCER_PRINT(...) printf("PRODUCER: " __VA_ARGS__) + +/******************************************************************************* + * Extended options class to add additional options specific to this sample. + ******************************************************************************/ +class MultiSensorSampleOptions : public CommonOptions +{ +public: + MultiSensorSampleOptions(const char *programName) + : CommonOptions(programName, + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_R_WindowRect | + ArgusSamples::CommonOptions::Option_T_CaptureTime) + , m_jpegDeviceIndex(1) + { + addOption(createValueOption + ("jpeg", 'j', "INDEX", "Camera device index of JPEG stream " + "(use --device to set device index for preview stream).", m_jpegDeviceIndex)); + } + + uint32_t jpegDeviceIndex() const { return m_jpegDeviceIndex.get(); } + +protected: + Value m_jpegDeviceIndex; +}; + +static bool execute(const MultiSensorSampleOptions& options) +{ + // Initialize the window and EGL display. + Window &window = Window::getInstance(); + window.setWindowRect(options.windowRect()); + PROPAGATE_ERROR(g_display.initialize(window.getEGLNativeDisplay())); + + // Initialize the Argus camera provider. + UniqueObj cameraProvider(CameraProvider::create()); + + // Get the ICameraProvider interface from the global CameraProvider. + ICameraProvider *iCameraProvider = interface_cast(cameraProvider); + if (!iCameraProvider) + ORIGINATE_ERROR("Failed to get ICameraProvider interface"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Get the camera devices. + std::vector cameraDevices; + iCameraProvider->getCameraDevices(&cameraDevices); + if (options.cameraDeviceIndex() == options.jpegDeviceIndex()) + { + ORIGINATE_ERROR("Preview and JPEG camera indexes may not be the same"); + } + if (cameraDevices.size() <= options.cameraDeviceIndex()) + { + ORIGINATE_ERROR("Preview Camera index %d not available; there are %d cameras", + options.cameraDeviceIndex(), (unsigned)cameraDevices.size()); + } + if (cameraDevices.size() <= options.jpegDeviceIndex()) + { + ORIGINATE_ERROR("JPEG camera index %d not available; there are %d cameras", + options.jpegDeviceIndex(), (unsigned)cameraDevices.size()); + } + Argus::CameraDevice* previewDevice = cameraDevices[options.cameraDeviceIndex()]; + Argus::CameraDevice* jpegDevice = cameraDevices[options.jpegDeviceIndex()]; + + // Get the default SensorMode from the JPEG device to determine the stream size + // (the window rect size is used for the preview stream size). + ICameraProperties *iJpegDeviceProperties = interface_cast(jpegDevice); + if (!iJpegDeviceProperties) + { + ORIGINATE_ERROR("Failed to get the JPEG camera device properties interface."); + } + std::vector jpegSensorModes; + iJpegDeviceProperties->getBasicSensorModes(&jpegSensorModes); + if (!jpegSensorModes.size()) + { + ORIGINATE_ERROR("Failed to get valid JPEG sensor mode list."); + } + ISensorMode *iJpegSensorMode = interface_cast(jpegSensorModes[0]); + if (!iJpegSensorMode) + ORIGINATE_ERROR("Failed to get the sensor mode."); + + // Create the JPEG capture session. + UniqueObj jpegSession = UniqueObj( + iCameraProvider->createCaptureSession(jpegDevice)); + if (!jpegSession) + ORIGINATE_ERROR( + "Failed to create JPEG session with camera index %d.", options.jpegDeviceIndex()); + ICaptureSession *iJpegCaptureSession = interface_cast(jpegSession); + if (!iJpegCaptureSession) + ORIGINATE_ERROR("Failed to get JPEG capture session interface"); + + // Create the preview capture session. + UniqueObj previewSession = UniqueObj( + iCameraProvider->createCaptureSession(previewDevice)); + if (!previewSession) + ORIGINATE_ERROR( + "Failed to create preview session with camera index %d.", options.cameraDeviceIndex()); + ICaptureSession *iPreviewCaptureSession = interface_cast(previewSession); + if (!iPreviewCaptureSession) + ORIGINATE_ERROR("Failed to get preview capture session interface"); + + // Create preview stream. + PRODUCER_PRINT("Creating the preview stream.\n"); + UniqueObj previewSettings( + iPreviewCaptureSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iPreviewSettings = + interface_cast(previewSettings); + if (iPreviewSettings) + { + iPreviewSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888); + iPreviewSettings->setResolution(Size2D(options.windowRect().width(), + options.windowRect().height())); + iPreviewSettings->setEGLDisplay(g_display.get()); + } + UniqueObj previewStream( + iPreviewCaptureSession->createOutputStream(previewSettings.get())); + IEGLOutputStream *iPreviewStream = interface_cast(previewStream); + if (!iPreviewStream) + ORIGINATE_ERROR("Failed to create preview OutputStream"); + + PRODUCER_PRINT("Launching preview consumer thread\n"); + PreviewConsumerThread previewConsumer(g_display.get(), iPreviewStream->getEGLStream()); + PROPAGATE_ERROR(previewConsumer.initialize()); + PROPAGATE_ERROR(previewConsumer.waitRunning()); + + // Create JPEG stream. + PRODUCER_PRINT("Creating the JPEG stream.\n"); + UniqueObj jpegSettings( + iJpegCaptureSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iJpegSettings = + interface_cast(jpegSettings); + if (iJpegSettings) + { + iJpegSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888); + iJpegSettings->setResolution(iJpegSensorMode->getResolution()); + iJpegSettings->setEGLDisplay(g_display.get()); + iJpegSettings->setMetadataEnable(true); + } + UniqueObj jpegStream( + iJpegCaptureSession->createOutputStream(jpegSettings.get())); + if (!jpegStream.get()) + ORIGINATE_ERROR("Failed to create JPEG OutputStream"); + + JPEGConsumerThread jpegConsumer(jpegStream.get()); + PROPAGATE_ERROR(jpegConsumer.initialize()); + PROPAGATE_ERROR(jpegConsumer.waitRunning()); + + // Create the two requests + UniqueObj previewRequest(iPreviewCaptureSession->createRequest()); + UniqueObj jpegRequest(iJpegCaptureSession->createRequest()); + if (!previewRequest || !jpegRequest) + ORIGINATE_ERROR("Failed to create Request"); + + IRequest *iPreviewRequest = interface_cast(previewRequest); + IRequest *iJpegRequest = interface_cast(jpegRequest); + if (!iPreviewRequest || !iJpegRequest) + ORIGINATE_ERROR("Failed to create Request interface"); + + iPreviewRequest->enableOutputStream(previewStream.get()); + iJpegRequest->enableOutputStream(jpegStream.get()); + + // Argus is now all setup and ready to capture + + // Submit capture requests. + PRODUCER_PRINT("Starting repeat capture requests.\n"); + + // Start the preview + if (iPreviewCaptureSession->repeat(previewRequest.get()) != STATUS_OK) + ORIGINATE_ERROR("Failed to start repeat capture request for preview"); + + // Wait for the specified number of seconds and do a JPEG capture every second. + for (uint32_t i = 0; i < options.captureTime(); i++) + { + if (iJpegCaptureSession->capture(jpegRequest.get()) == 0) + ORIGINATE_ERROR("Failed to submit JPEG capture request"); + PROPAGATE_ERROR(window.pollEvents()); + sleep(1); + } + window.pollEvents(); + + // all done shut down + iJpegCaptureSession->stopRepeat(); + iPreviewCaptureSession->stopRepeat(); + iJpegCaptureSession->waitForIdle(); + iPreviewCaptureSession->waitForIdle(); + + previewStream.reset(); + jpegStream.reset(); + + // Wait for the consumer threads to complete. + PROPAGATE_ERROR(previewConsumer.shutdown()); + PROPAGATE_ERROR(jpegConsumer.shutdown()); + + // Shut down Argus. + cameraProvider.reset(); + + // Shut down the window (destroys window's EGLSurface). + window.shutdown(); + + // Cleanup the EGL display + PROPAGATE_ERROR(g_display.cleanup()); + + PRODUCER_PRINT("Done -- exiting.\n"); + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char** argv) +{ + ArgusSamples::MultiSensorSampleOptions options(basename(argv[0])); + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + if (!ArgusSamples::execute(options)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/multiStream/CMakeLists.txt b/jetson_multimedia_api/argus/samples/multiStream/CMakeLists.txt new file mode 100644 index 0000000..df448c9 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/multiStream/CMakeLists.txt @@ -0,0 +1,58 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_multistream) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(Argus REQUIRED) +find_package(OpenGLES REQUIRED) +find_package(EGL REQUIRED) + +set(SOURCES + main.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + ${OPENGLES_LIBRARIES} + argussampleutils + ) + +install(TARGETS ${PROJECT_NAME} DESTINATION bin) + +include(CPack) diff --git a/jetson_multimedia_api/argus/samples/multiStream/main.cpp b/jetson_multimedia_api/argus/samples/multiStream/main.cpp new file mode 100644 index 0000000..c07bdfd --- /dev/null +++ b/jetson_multimedia_api/argus/samples/multiStream/main.cpp @@ -0,0 +1,244 @@ +/* + * Copyright (c) 2016 - 2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ArgusHelpers.h" +#include "CommonOptions.h" +#include "Error.h" +#include "EGLGlobal.h" +#include "GLContext.h" +#include "JPEGConsumer.h" +#include "PreviewConsumer.h" +#include "Window.h" +#include "Thread.h" + +#include + +#include +#include +#include +#include + +using namespace Argus; + +namespace ArgusSamples +{ + +// Globals. +EGLDisplayHolder g_display; + +// Debug print macros. +#define PRODUCER_PRINT(...) printf("PRODUCER: " __VA_ARGS__) + +/******************************************************************************* + * Extended options class to add additional options specific to this sample. + ******************************************************************************/ +class MultiStreamSampleOptions : public CommonOptions +{ +public: + MultiStreamSampleOptions(const char *programName) + : CommonOptions(programName, + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_M_SensorMode | + ArgusSamples::CommonOptions::Option_R_WindowRect | + ArgusSamples::CommonOptions::Option_T_CaptureTime) + , m_jpegInterval(3) + { + addOption(createValueOption + ("jpegInterval", 'j', "INTERVAL", "Frame interval for JPEG writes.", m_jpegInterval)); + } + + uint32_t jpegInterval() const { return m_jpegInterval.get(); } + +protected: + Value m_jpegInterval; +}; + +/******************************************************************************* + * Argus Producer thread: + * Opens the Argus camera driver, creates two OutputStreams -- one for live + * preview to display and the other to write JPEG files -- and submits capture + * requests. Burst captures are used such that the JPEG stream is only written + * to once using the provided JPEG interval option. + ******************************************************************************/ +static bool execute(const MultiStreamSampleOptions& options) +{ + // Initialize the window and EGL display. + Window &window = Window::getInstance(); + window.setWindowRect(options.windowRect()); + PROPAGATE_ERROR(g_display.initialize(window.getEGLNativeDisplay())); + + // Initialize the Argus camera provider. + UniqueObj cameraProvider(CameraProvider::create()); + ICameraProvider *iCameraProvider = interface_cast(cameraProvider); + if (!iCameraProvider) + ORIGINATE_ERROR("Failed to get ICameraProvider interface"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Get the selected camera device and sensor mode. + CameraDevice* cameraDevice = ArgusHelpers::getCameraDevice( + cameraProvider.get(), options.cameraDeviceIndex()); + if (!cameraDevice) + ORIGINATE_ERROR("Selected camera device is not available"); + SensorMode* sensorMode = ArgusHelpers::getSensorMode(cameraDevice, options.sensorModeIndex()); + ISensorMode *iSensorMode = interface_cast(sensorMode); + if (!iSensorMode) + ORIGINATE_ERROR("Selected sensor mode not available"); + + // Create the capture session. + UniqueObj captureSession(iCameraProvider->createCaptureSession(cameraDevice)); + ICaptureSession *iCaptureSession = interface_cast(captureSession); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to create CaptureSession"); + + // Create the stream settings and set the common properties. + UniqueObj streamSettings( + iCaptureSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iStreamSettings = + interface_cast(streamSettings); + if (!iStreamSettings) + ORIGINATE_ERROR("Failed to create OutputStreamSettings"); + iStreamSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888); + iStreamSettings->setEGLDisplay(g_display.get()); + + // Create window rect sized OutputStream that is consumed by the preview (OpenGL) consumer. + PRODUCER_PRINT("Creating preview output stream\n"); + iStreamSettings->setResolution(Size2D(options.windowRect().width(), + options.windowRect().height())); + UniqueObj previewStream( + iCaptureSession->createOutputStream(streamSettings.get())); + IEGLOutputStream *iPreviewStream = interface_cast(previewStream); + if (!iPreviewStream) + ORIGINATE_ERROR("Failed to create OutputStream"); + + PRODUCER_PRINT("Launching preview consumer thread\n"); + PreviewConsumerThread previewConsumerThread(iPreviewStream->getEGLDisplay(), + iPreviewStream->getEGLStream()); + PROPAGATE_ERROR(previewConsumerThread.initialize()); + PROPAGATE_ERROR(previewConsumerThread.waitRunning()); + + // Create a full-resolution OutputStream that is consumed by the JPEG Consumer. + PRODUCER_PRINT("Creating JPEG output stream\n"); + iStreamSettings->setResolution(iSensorMode->getResolution()); + iStreamSettings->setMetadataEnable(true); + + UniqueObj jpegStream(iCaptureSession->createOutputStream(streamSettings.get())); + if (!jpegStream) + ORIGINATE_ERROR("Failed to create OutputStream"); + + PRODUCER_PRINT("Launching JPEG consumer thread\n"); + JPEGConsumerThread jpegConsumerThread(jpegStream.get()); + PROPAGATE_ERROR(jpegConsumerThread.initialize()); + PROPAGATE_ERROR(jpegConsumerThread.waitRunning()); + + // Create the capture requests. + std::vector requests; + for (uint32_t i = 0; i < options.jpegInterval(); i++) + { + Request *request = iCaptureSession->createRequest(); + IRequest *iRequest = interface_cast(request); + ISourceSettings *iSourceSettings = interface_cast(request); + if (!iRequest || !iSourceSettings) + ORIGINATE_ERROR("Failed to create Request"); + requests.push_back(request); + + // Set the sensor mode in the request. + iSourceSettings->setSensorMode(sensorMode); + + // Enable the preview stream for every capture in the burst. + iRequest->enableOutputStream(previewStream.get()); + + // Enable the JPEG stream for only the first capture in the burst. + if (i == 0) + { + iRequest->enableOutputStream(jpegStream.get()); + + // The internal post-processing pipeline is generated on a per-request basis, + // and is dependent on the full set of enabled output streams that have + // post-processing enabled. In order to prevent these pipeline changes, + // which may cause visual changes in the preview stream, post-processing + // is disabled for the periodic still capture. + IStreamSettings *jpegStreamSettings = + interface_cast(iRequest->getStreamSettings(jpegStream.get())); + jpegStreamSettings->setPostProcessingEnable(false); + } + } + + if (iCaptureSession->repeatBurst(requests) != STATUS_OK) + ORIGINATE_ERROR("Failed to start repeat burst capture request"); + + // Wait for CAPTURE_TIME seconds. + PROPAGATE_ERROR(window.pollingSleep(options.captureTime())); + + // Stop the repeating request and wait for idle. + iCaptureSession->stopRepeat(); + iCaptureSession->waitForIdle(); + + // Destroy the requests. + for (uint32_t i = 0; i < requests.size(); i++) + { + const_cast(requests[i])->destroy(); + } + requests.clear(); + + // Destroy the output streams (stops consumer threads). + previewStream.reset(); + jpegStream.reset(); + + // Wait for the consumer threads to complete. + PROPAGATE_ERROR(previewConsumerThread.shutdown()); + PROPAGATE_ERROR(jpegConsumerThread.shutdown()); + + // Shut down Argus. + cameraProvider.reset(); + + // Shut down the window (destroys window's EGLSurface). + window.shutdown(); + + // Cleanup the EGL display + PROPAGATE_ERROR(g_display.cleanup()); + + PRODUCER_PRINT("Done -- exiting.\n"); + + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char** argv) +{ + ArgusSamples::MultiStreamSampleOptions options(basename(argv[0])); + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + if (!ArgusSamples::execute(options)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/oneShot/CMakeLists.txt b/jetson_multimedia_api/argus/samples/oneShot/CMakeLists.txt new file mode 100644 index 0000000..9eb243b --- /dev/null +++ b/jetson_multimedia_api/argus/samples/oneShot/CMakeLists.txt @@ -0,0 +1,53 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_oneshot) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(Argus REQUIRED) + +set(SOURCES + main.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + argussampleutils + ) + +install(TARGETS ${PROJECT_NAME} DESTINATION bin) + +include(CPack) diff --git a/jetson_multimedia_api/argus/samples/oneShot/main.cpp b/jetson_multimedia_api/argus/samples/oneShot/main.cpp new file mode 100644 index 0000000..3c10a78 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/oneShot/main.cpp @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include "ArgusHelpers.h" +#include "CommonOptions.h" + +#define EXIT_IF_NULL(val,msg) \ + {if (!val) {printf("%s\n",msg); return EXIT_FAILURE;}} +#define EXIT_IF_NOT_OK(val,msg) \ + {if (val!=Argus::STATUS_OK) {printf("%s\n",msg); return EXIT_FAILURE;}} + +#ifdef ANDROID +#define FILE_PREFIX "/sdcard/DCIM/" +#else +#define FILE_PREFIX "" +#endif + +/* + * Program: oneShot + * Function: Capture a single image from a camera device and write to a JPG file + * Purpose: To demonstrate the most simplistic approach to getting the Argus Framework + * running, submitting a capture request, retrieving the resulting image and + * then writing the image as a JPEG formatted file. + */ + +int main(int argc, char** argv) +{ + ArgusSamples::CommonOptions options(basename(argv[0]), + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_M_SensorMode); + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + const uint64_t FIVE_SECONDS_IN_NANOSECONDS = 5000000000; + + /* + * Set up Argus API Framework, identify available camera devices, and create + * a capture session for the first available device + */ + + Argus::UniqueObj cameraProvider(Argus::CameraProvider::create()); + + Argus::ICameraProvider *iCameraProvider = + Argus::interface_cast(cameraProvider); + EXIT_IF_NULL(iCameraProvider, "Cannot get core camera provider interface"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + Argus::CameraDevice *device = ArgusSamples::ArgusHelpers::getCameraDevice( + cameraProvider.get(), options.cameraDeviceIndex()); + Argus::ICameraProperties *iCameraProperties = + Argus::interface_cast(device); + if (!iCameraProperties) + { + REPORT_ERROR("Failed to get ICameraProperties interface"); + return EXIT_FAILURE; + } + + Argus::SensorMode* sensorMode = ArgusSamples::ArgusHelpers::getSensorMode( + device, options.sensorModeIndex()); + Argus::ISensorMode *iSensorMode = + Argus::interface_cast(sensorMode); + if (!iSensorMode) + { + REPORT_ERROR("Failed to get sensor mode interface"); + return EXIT_FAILURE; + } + + printf("Capturing from device %d using sensor mode %d (%dx%d)\n", + options.cameraDeviceIndex(), options.sensorModeIndex(), + iSensorMode->getResolution().width(), iSensorMode->getResolution().height()); + + Argus::Status status; + Argus::UniqueObj captureSession( + iCameraProvider->createCaptureSession(device, &status)); + EXIT_IF_NOT_OK(status, "Failed to create capture session"); + + Argus::ICaptureSession *iSession = + Argus::interface_cast(captureSession); + EXIT_IF_NULL(iSession, "Cannot get Capture Session Interface"); + + /* + * Creates the stream between the Argus camera image capturing + * sub-system (producer) and the image acquisition code (consumer). A consumer object is + * created from the stream to be used to request the image frame. A successfully submitted + * capture request activates the stream's functionality to eventually make a frame available + * for acquisition. + */ + + Argus::UniqueObj streamSettings( + iSession->createOutputStreamSettings(Argus::STREAM_TYPE_EGL)); + + Argus::IEGLOutputStreamSettings *iEGLStreamSettings = + Argus::interface_cast(streamSettings); + EXIT_IF_NULL(iEGLStreamSettings, "Cannot get IEGLOutputStreamSettings Interface"); + iEGLStreamSettings->setPixelFormat(Argus::PIXEL_FMT_YCbCr_420_888); + iEGLStreamSettings->setResolution(iSensorMode->getResolution()); + iEGLStreamSettings->setMetadataEnable(true); + + Argus::UniqueObj stream( + iSession->createOutputStream(streamSettings.get())); + EXIT_IF_NULL(stream, "Failed to create EGLOutputStream"); + + Argus::UniqueObj consumer( + EGLStream::FrameConsumer::create(stream.get())); + + EGLStream::IFrameConsumer *iFrameConsumer = + Argus::interface_cast(consumer); + EXIT_IF_NULL(iFrameConsumer, "Failed to initialize Consumer"); + + Argus::UniqueObj request( + iSession->createRequest(Argus::CAPTURE_INTENT_STILL_CAPTURE)); + + Argus::IRequest *iRequest = Argus::interface_cast(request); + EXIT_IF_NULL(iRequest, "Failed to get capture request interface"); + + status = iRequest->enableOutputStream(stream.get()); + EXIT_IF_NOT_OK(status, "Failed to enable stream in capture request"); + + Argus::ISourceSettings *iSourceSettings = + Argus::interface_cast(request); + EXIT_IF_NULL(iSourceSettings, "Failed to get source settings request interface"); + iSourceSettings->setSensorMode(sensorMode); + + uint32_t requestId = iSession->capture(request.get()); + EXIT_IF_NULL(requestId, "Failed to submit capture request"); + + /* + * Acquire a frame generated by the capture request, get the image from the frame + * and create a .JPG file of the captured image + */ + Argus::UniqueObj frame( + iFrameConsumer->acquireFrame(FIVE_SECONDS_IN_NANOSECONDS, &status)); + + EGLStream::IFrame *iFrame = Argus::interface_cast(frame); + EXIT_IF_NULL(iFrame, "Failed to get IFrame interface"); + + EGLStream::Image *image = iFrame->getImage(); + EXIT_IF_NULL(image, "Failed to get Image from iFrame->getImage()"); + + EGLStream::IImageJPEG *iImageJPEG = Argus::interface_cast(image); + EXIT_IF_NULL(iImageJPEG, "Failed to get ImageJPEG Interface"); + + status = iImageJPEG->writeJPEG(FILE_PREFIX "argus_oneShot.jpg"); + EXIT_IF_NOT_OK(status, "Failed to write JPEG"); + + printf("Wrote file: " FILE_PREFIX "argus_oneShot.jpg\n"); + + // Shut down Argus. + cameraProvider.reset(); + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/openglBox/CMakeLists.txt b/jetson_multimedia_api/argus/samples/openglBox/CMakeLists.txt new file mode 100644 index 0000000..6271a32 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/openglBox/CMakeLists.txt @@ -0,0 +1,60 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_openglbox) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(Argus REQUIRED) +find_package(OpenGLES REQUIRED) +find_package(EGL REQUIRED) + +set(SOURCES + main.cpp + utils/MathUtils.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/utils + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + ${OPENGLES_LIBRARIES} + argussampleutils + ) + +install(TARGETS ${PROJECT_NAME} DESTINATION bin) + +include(CPack) diff --git a/jetson_multimedia_api/argus/samples/openglBox/main.cpp b/jetson_multimedia_api/argus/samples/openglBox/main.cpp new file mode 100644 index 0000000..876870f --- /dev/null +++ b/jetson_multimedia_api/argus/samples/openglBox/main.cpp @@ -0,0 +1,354 @@ +/* + * Copyright (c) 2016 - 2018, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ArgusHelpers.h" +#include "CommonOptions.h" +#include "Error.h" +#include "EGLGlobal.h" +#include "GLContext.h" +#include "Thread.h" +#include "Window.h" +#include "MathUtils.h" + +#include + +#include +#include +#include + +using namespace Argus; + +namespace ArgusSamples +{ + +// Globals. +EGLDisplayHolder g_display; + +// Debug print macros. +#define PRODUCER_PRINT(...) printf("PRODUCER: " __VA_ARGS__) +#define CONSUMER_PRINT(...) printf("CONSUMER: " __VA_ARGS__) + +/******************************************************************************* + * GL Consumer thread: + * Opens an on-screen window, and renders to it a 3D rotating cube where each + * face is textured with the current EGLStream frame. This is done using an + * OpenGL ES context and an EXTERNAL_OES texture binding to the EGLStream. + * Frames will be acquired and rendered by this thread until the stream is + * disconnected by the Argus producer thread once all capture requests have + * been submitted. + ******************************************************************************/ +class ConsumerThread : public Thread +{ +public: + explicit ConsumerThread(EGLStreamKHR stream) + : m_stream(stream) + , m_texture(0) + , m_program(0) + { + } + ~ConsumerThread() + { + } + +private: + /** @name Thread methods */ + /**@{*/ + virtual bool threadInitialize(); + virtual bool threadExecute(); + virtual bool threadShutdown(); + /**@}*/ + + EGLStreamKHR m_stream; + GLContext m_context; + GLuint m_texture; + GLuint m_program; +}; + +bool ConsumerThread::threadInitialize() +{ + Window &window = Window::getInstance(); + + // Create the context and make it current. + CONSUMER_PRINT("Creating context.\n"); + PROPAGATE_ERROR(m_context.initialize(&window)); + PROPAGATE_ERROR(m_context.makeCurrent()); + + // Create the shader program. + static const char vtxSrc[] = + "#version 300 es\n" + "uniform mat4 projMat;\n" + "uniform mat4 rotMat;\n" + "in layout(location = 0) vec4 vertex;\n" + "in layout(location = 1) vec2 texCoord;\n" + "out vec2 vTexCoord;\n" + "void main() {\n" + " vec4 pos = rotMat * vertex;\n" + " pos.z -= 5.0;\n" + " gl_Position = projMat * pos;\n" + " vTexCoord = texCoord;\n" + "}\n"; + static const char frgSrc[] = + "#version 300 es\n" + "#extension GL_OES_EGL_image_external : require\n" + "precision highp float;\n" + "uniform samplerExternalOES texSampler;\n" + "in vec2 vTexCoord;\n" + "out vec4 fragColor;\n" + "void main() {\n" + " if (vTexCoord.x < 0.01 || vTexCoord.x > 0.99 ||\n" + " vTexCoord.y < 0.01 || vTexCoord.y > 0.99) {\n" + " fragColor = vec4(1.0, 0.0, 0.0, 1.0);\n" + " } else {\n" + // Note: Argus frames use a top-left origin and need to be inverted for GL texture use. + " vec2 texCoord = vec2(vTexCoord.x, 1.0 - vTexCoord.y);\n" + " fragColor = texture2D(texSampler, texCoord);\n" + " }\n" + "}\n"; + PROPAGATE_ERROR(m_context.createProgram(vtxSrc, frgSrc, &m_program)); + glUseProgram(m_program); + + // Setup vertex state. + static const GLfloat cubeVertices[] = { + 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f,// Front + -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f,// Back + 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f,// Right + -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f,// Left + 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f,// Top + 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f // Bottom + }; + static const GLfloat cubeTexCoords[] = { + 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f + }; + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, cubeVertices); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, cubeTexCoords); + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + + // Set static rendering state. + glClearColor(0.5f, 0.5f, 0.5f, 1.0f); + glEnable(GL_DEPTH_TEST); + GLfloat projMat[16]; + MathUtils::createPerspectiveMatrix( + 45.0f, (float)window.getWidth()/(float)window.getHeight(), 1.0f, 1000.0f, projMat); + glUniformMatrix4fv(glGetUniformLocation(m_program, "projMat"), 1, GL_FALSE, projMat); + glUniform1i(glGetUniformLocation(m_program, "texSampler"), 0); + + // Create an external texture and connect it to the stream as a the consumer. + CONSUMER_PRINT("Connecting to stream.\n"); + glGenTextures(1, &m_texture); + glBindTexture(GL_TEXTURE_EXTERNAL_OES, m_texture); + if (!eglStreamConsumerGLTextureExternalKHR(g_display.get(), m_stream)) + ORIGINATE_ERROR("Unable to connect GL as consumer"); + CONSUMER_PRINT("Connected to stream.\n"); + + // Set the acquire timeout to infinite. + eglStreamAttribKHR(g_display.get(), m_stream, EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR, -1); + + return true; +} + +bool ConsumerThread::threadExecute() +{ + CONSUMER_PRINT("Waiting until producer is connected...\n"); + while (true) + { + EGLint state = EGL_STREAM_STATE_CONNECTING_KHR; + if (!eglQueryStreamKHR(g_display.get(), m_stream, EGL_STREAM_STATE_KHR, &state)) + ORIGINATE_ERROR("Failed to query stream state (possible producer failure)."); + if (state != EGL_STREAM_STATE_CONNECTING_KHR) + break; + usleep(1000); + } + CONSUMER_PRINT("Producer is connected; continuing.\n"); + + // Render until there are no more frames (the producer has disconnected). + uint32_t frame = 0; + while (eglStreamConsumerAcquireKHR(g_display.get(), m_stream)) + { + frame++; + CONSUMER_PRINT("Acquired frame %d. Rendering.\n", frame); + + GLfloat rotMat[16]; + MathUtils::createRotationMatrix((float)frame, 0.3f, 0.5f, 0.2f, rotMat); + glUniformMatrix4fv(glGetUniformLocation(m_program, "rotMat"), 1, GL_FALSE, rotMat); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + for (uint32_t i = 0; i < 6; i++) + glDrawArrays(GL_TRIANGLE_STRIP, 4*i, 4); + + PROPAGATE_ERROR(m_context.swapBuffers()); + } + CONSUMER_PRINT("No more frames. Cleaning up.\n"); + + PROPAGATE_ERROR(requestShutdown()); + + return true; +} + +bool ConsumerThread::threadShutdown() +{ + glDeleteProgram(m_program); + glDeleteTextures(1, &m_texture); + m_context.cleanup(); + + CONSUMER_PRINT("Done.\n"); + + return true; +} + +/******************************************************************************* + * Argus Producer thread: + * Opens the Argus camera driver, creates an OutputStream to be consumed by + * the GL consumer, then performs repeating capture requests for CAPTURE_TIME + * seconds before closing the producer and Argus driver. + ******************************************************************************/ +static bool execute(const ArgusSamples::CommonOptions& options) +{ + // Initialize the window and EGL display. + Window &window = Window::getInstance(); + window.setWindowRect(options.windowRect()); + PROPAGATE_ERROR(g_display.initialize(window.getEGLNativeDisplay())); + + // Initialize the Argus camera provider. + UniqueObj cameraProvider(CameraProvider::create()); + ICameraProvider *iCameraProvider = interface_cast(cameraProvider); + if (!iCameraProvider) + ORIGINATE_ERROR("Failed to get ICameraProvider interface"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Get the selected camera device and sensor mode. + CameraDevice* cameraDevice = ArgusHelpers::getCameraDevice( + cameraProvider.get(), options.cameraDeviceIndex()); + if (!cameraDevice) + ORIGINATE_ERROR("Selected camera device is not available"); + SensorMode* sensorMode = ArgusHelpers::getSensorMode(cameraDevice, options.sensorModeIndex()); + ISensorMode *iSensorMode = interface_cast(sensorMode); + if (!iSensorMode) + ORIGINATE_ERROR("Selected sensor mode not available"); + + // Create the capture session using the specified device and get its interfaces. + UniqueObj captureSession(iCameraProvider->createCaptureSession(cameraDevice)); + ICaptureSession *iCaptureSession = interface_cast(captureSession); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to create CaptureSession"); + + // Create the OutputStream. + PRODUCER_PRINT("Creating output stream\n"); + UniqueObj streamSettings( + iCaptureSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iStreamSettings = + interface_cast(streamSettings); + if (iStreamSettings) + { + iStreamSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888); + iStreamSettings->setResolution(Size2D(options.windowRect().width(), + options.windowRect().height())); + iStreamSettings->setEGLDisplay(g_display.get()); + } + UniqueObj outputStream(iCaptureSession->createOutputStream(streamSettings.get())); + IEGLOutputStream *iStream = interface_cast(outputStream); + if (!iStream) + ORIGINATE_ERROR("Failed to create OutputStream"); + + // Launch the GL consumer thread to consume frames from the OutputStream's EGLStream. + PRODUCER_PRINT("Launching consumer thread\n"); + ConsumerThread glConsumerThread(iStream->getEGLStream()); + PROPAGATE_ERROR(glConsumerThread.initialize()); + + // Wait until the consumer is connected to the stream. + PROPAGATE_ERROR(glConsumerThread.waitRunning()); + + // Create capture request and enable output stream. + UniqueObj request(iCaptureSession->createRequest()); + IRequest *iRequest = interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to create Request"); + iRequest->enableOutputStream(outputStream.get()); + + // Set the sensor mode in the request. + ISourceSettings *iSourceSettings = interface_cast(request); + if (!iSourceSettings) + ORIGINATE_ERROR("Failed to get source settings request interface"); + iSourceSettings->setSensorMode(sensorMode); + + // Submit capture requests. + PRODUCER_PRINT("Starting repeat capture requests.\n"); + if (iCaptureSession->repeat(request.get()) != STATUS_OK) + ORIGINATE_ERROR("Failed to start repeat capture request"); + + // Wait for specified number of seconds. + PROPAGATE_ERROR(window.pollingSleep(options.captureTime())); + + // Stop the repeating request and wait for idle. + iCaptureSession->stopRepeat(); + iCaptureSession->waitForIdle(); + + // Destroy the output stream. This destroys the EGLStream which causes + // the GL consumer acquire to fail and the consumer thread to end. + outputStream.reset(); + + // Wait for the consumer thread to complete. + PROPAGATE_ERROR(glConsumerThread.shutdown()); + + // Shut down Argus. + cameraProvider.reset(); + + // Shut down the window (destroys window's EGLSurface). + window.shutdown(); + + // Cleanup the EGL display + PROPAGATE_ERROR(g_display.cleanup()); + + PRODUCER_PRINT("Done -- exiting.\n"); + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char **argv) +{ + ArgusSamples::CommonOptions options(basename(argv[0]), + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_M_SensorMode | + ArgusSamples::CommonOptions::Option_R_WindowRect | + ArgusSamples::CommonOptions::Option_T_CaptureTime); + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + if (!ArgusSamples::execute(options)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/openglBox/utils/MathUtils.cpp b/jetson_multimedia_api/argus/samples/openglBox/utils/MathUtils.cpp new file mode 100644 index 0000000..51f469a --- /dev/null +++ b/jetson_multimedia_api/argus/samples/openglBox/utils/MathUtils.cpp @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "MathUtils.h" +#include + +void MathUtils::createFrustumMatrix(float left, float right, float bottom, float top, + float znear, float zfar, float mat[16]) +{ + float temp, temp2, temp3, temp4; + temp = 2.0 * znear; + temp2 = right - left; + temp3 = top - bottom; + temp4 = zfar - znear; + mat[0] = temp / temp2; + mat[1] = 0.0; + mat[2] = 0.0; + mat[3] = 0.0; + mat[4] = 0.0; + mat[5] = temp / temp3; + mat[6] = 0.0; + mat[7] = 0.0; + mat[8] = (right + left) / temp2; + mat[9] = (top + bottom) / temp3; + mat[10] = (-zfar - znear) / temp4; + mat[11] = -1.0; + mat[12] = 0.0; + mat[13] = 0.0; + mat[14] = (-temp * zfar) / temp4; + mat[15] = 0.0; +} + +void MathUtils::createPerspectiveMatrix(float fovyInDegrees, float aspectRatio, + float znear, float zfar, float mat[16]) +{ + float ymax, xmax; + ymax = znear * tanf(fovyInDegrees * M_PI / 360.0); + xmax = ymax * aspectRatio; + createFrustumMatrix(-xmax, xmax, -ymax, ymax, znear, zfar, mat); +} + +void MathUtils::createRotationMatrix(float angle, float x, float y, float z, float mat[16]) +{ + float mag, cosA, sinA, sqX, sqY, sqZ, xY, xZ, yZ; + cosA = cosf(angle * M_PI / 180.0f); + sinA = sinf(angle * M_PI / 180.0f); + mag = sqrtf(x*x+y*y+z*z); + x /= mag; + y /= mag; + z /= mag; + sqX = x*x; + sqY = y*y; + sqZ = z*z; + + xY = x * y; + xZ = x * z; + yZ = y * z; + + mat[0] = sqX + (cosA * (1.0f - sqX)); + mat[1] = xY - (cosA * xY) + (sinA * z); + mat[2] = xZ - (cosA * xZ) - (sinA * y); + mat[3] = 0.0f; + mat[4] = xY - (cosA * xY) - (sinA *z); + mat[5] = sqY + (cosA * (1.0f - sqY)); + mat[6] = yZ - (cosA * yZ) + (sinA * x); + mat[7] = 0.0f; + mat[8] = xZ - (cosA * xZ) + (sinA * y); + mat[9] = yZ - (cosA * yZ) - (sinA * x); + mat[10] = sqZ + (cosA * (1.0f - sqZ)); + mat[11] = 0.0f; + mat[12] = 0.0f; + mat[13] = 0.0f; + mat[14] = 0.0f; + mat[15] = 1.0f; +} diff --git a/jetson_multimedia_api/argus/samples/openglBox/utils/MathUtils.h b/jetson_multimedia_api/argus/samples/openglBox/utils/MathUtils.h new file mode 100644 index 0000000..730e335 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/openglBox/utils/MathUtils.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef MATHUTILS_H +#define MATHUTILS_H + +namespace MathUtils +{ + +void createFrustumMatrix(float left, float right, float bottom, float top, float znear, float zfar, + float mat[16]); + +void createPerspectiveMatrix(float fovyInDegrees, float aspectRatio, float znear, float zfar, + float mat[16]); + +void createRotationMatrix(float angle, float x, float y, float z, float mat[16]); + +} // namespace MathUtils + +#endif // MATHUTILS_H diff --git a/jetson_multimedia_api/argus/samples/rawBayerOutput/CMakeLists.txt b/jetson_multimedia_api/argus/samples/rawBayerOutput/CMakeLists.txt new file mode 100644 index 0000000..5d1ef4e --- /dev/null +++ b/jetson_multimedia_api/argus/samples/rawBayerOutput/CMakeLists.txt @@ -0,0 +1,58 @@ +# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_rawBayerOutput) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(Argus REQUIRED) +find_package(OpenGLES REQUIRED) +find_package(EGL REQUIRED) + +set(SOURCES + main.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${EGL_INCLUDE_DIR} + ${OPENGLES_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + ${OPENGLES_LIBRARIES} + argussampleutils + ) + +install(TARGETS ${PROJECT_NAME} DESTINATION bin) + +include(CPack) diff --git a/jetson_multimedia_api/argus/samples/rawBayerOutput/main.cpp b/jetson_multimedia_api/argus/samples/rawBayerOutput/main.cpp new file mode 100644 index 0000000..38ad1db --- /dev/null +++ b/jetson_multimedia_api/argus/samples/rawBayerOutput/main.cpp @@ -0,0 +1,337 @@ +/* + * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include "ArgusHelpers.h" +#include "CommonOptions.h" + +#include + +#include +#include +#include +#include + +#ifdef ANDROID +#define FILE_PREFIX "/sdcard/DCIM/" +#else +#define FILE_PREFIX "" +#endif + +using namespace Argus; + +/* + * This sample opens two independent camera sessions using 2 sensors it then uses the first sensor + * to display a preview on the screen, while taking jpeg snapshots every second from the second + * sensor. The Jpeg saving and Preview consumption happen on two consumer threads in the + * PreviewConsumerThread and JPEGConsumerThread classes, located in the util folder. + */ + +namespace ArgusSamples +{ + +// Debug print macros. +#define PRODUCER_PRINT(...) printf("PRODUCER: " __VA_ARGS__) + +static const uint32_t BAYER_WITH_ISP_CAMERA_INDEX = 1; +static const uint32_t BAYER_WITHOUT_ISP_CAMERA_INDEX = 0; + +static bool execute(const CommonOptions& options) +{ + const uint64_t FIVE_SECONDS_IN_NANOSECONDS = 5000000000; + char bayerWithIspOutputFileName[] = "argus_bayerWithIsp.raw"; + char bayerWithOutIspOutputFileName[] = "argus_bayerWithOutIsp.raw"; + + // Initialize the Argus camera provider. + UniqueObj cameraProvider(CameraProvider::create()); + + // Get the ICameraProvider interface from the global CameraProvider. + ICameraProvider *iCameraProvider = + interface_cast(cameraProvider); + if (!iCameraProvider) + ORIGINATE_ERROR("Failed to get ICameraProvider interface"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Get the camera devices. + std::vector cameraDevices; + iCameraProvider->getCameraDevices(&cameraDevices); + if (cameraDevices.size() < 2) + { + ORIGINATE_ERROR("Insufficient camera devices."); + } + + /****** Bayer capture with ISP enabled ******/ + Argus::CameraDevice* bayerWithIspDevice = cameraDevices[BAYER_WITH_ISP_CAMERA_INDEX]; + + ICameraProperties *iBayerWithIspProperties = + interface_cast(bayerWithIspDevice); + if (!iBayerWithIspProperties) + { + ORIGINATE_ERROR("Failed to get the JPEG camera device properties interface."); + } + + std::vector bayerWithIspSensorModes; + iBayerWithIspProperties->getBasicSensorModes(&bayerWithIspSensorModes); + if (!bayerWithIspSensorModes.size()) + { + ORIGINATE_ERROR("Failed to get valid JPEG sensor mode list."); + } + ISensorMode *iBayerWithIspSensorMode = interface_cast(bayerWithIspSensorModes[0]); + if (!iBayerWithIspSensorMode) + ORIGINATE_ERROR("Failed to get the sensor mode."); + + // Create the JPEG capture session. + UniqueObj bayerWithIspSession = UniqueObj( + iCameraProvider->createCaptureSession(bayerWithIspDevice)); + if (!bayerWithIspSession) + ORIGINATE_ERROR( + "Failed to create JPEG session with camera index %d.", BAYER_WITH_ISP_CAMERA_INDEX); + ICaptureSession *iBayerWithIspCaptureSession = interface_cast(bayerWithIspSession); + if (!iBayerWithIspCaptureSession) + ORIGINATE_ERROR("Failed to get JPEG capture session interface"); + + // Create JPEG stream. + PRODUCER_PRINT("Creating the JPEG stream.\n"); + UniqueObj bayerWithIspSettings( + iBayerWithIspCaptureSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iBayerWithIspSettings = + interface_cast(bayerWithIspSettings); + if (iBayerWithIspSettings) + { + iBayerWithIspSettings->setPixelFormat(PIXEL_FMT_RAW16); + iBayerWithIspSettings->setResolution(iBayerWithIspSensorMode->getResolution()); + iBayerWithIspSettings->setMetadataEnable(true); + } + UniqueObj bayerWithIspStream( + iBayerWithIspCaptureSession->createOutputStream( + bayerWithIspSettings.get())); + if (!bayerWithIspStream.get()) + ORIGINATE_ERROR("Failed to create JPEG OutputStream"); + + // Create the FrameConsumer to consume the output frames from the stream. + Argus::UniqueObj bayerWithIspConsumer( + EGLStream::FrameConsumer::create(bayerWithIspStream.get())); + EGLStream::IFrameConsumer *iBayerWithIspConsumer = + Argus::interface_cast(bayerWithIspConsumer); + if (!iBayerWithIspConsumer) + ORIGINATE_ERROR("Failed to initialize Consumer"); + + UniqueObj bayerWithIspRequest(iBayerWithIspCaptureSession->createRequest(CAPTURE_INTENT_STILL_CAPTURE)); + if (!bayerWithIspRequest) + ORIGINATE_ERROR("Failed to create Request"); + + IRequest *iBayerWithIspRequest = interface_cast(bayerWithIspRequest); + if (!iBayerWithIspRequest) + ORIGINATE_ERROR("Failed to create Request interface"); + + iBayerWithIspRequest->setEnableIspStage(true); + iBayerWithIspRequest->enableOutputStream(bayerWithIspStream.get()); + + Argus::ISourceSettings *iBayerWithIspSourceSettings = + Argus::interface_cast(bayerWithIspRequest); + if (!iBayerWithIspSourceSettings) + ORIGINATE_ERROR("Failed to get source settings request interface"); + iBayerWithIspSourceSettings->setSensorMode(bayerWithIspSensorModes[0]); + + /****** Bayer capture with ISP disabled ******/ + Argus::CameraDevice* bayerWithOutIspDevice = cameraDevices[BAYER_WITHOUT_ISP_CAMERA_INDEX]; + + ICameraProperties *iBayerWithOutIspProperties = + interface_cast(bayerWithOutIspDevice); + if (!iBayerWithOutIspProperties) + { + ORIGINATE_ERROR("Failed to get the JPEG camera device properties interface."); + } + + Argus::SensorMode* bayerWithOutIspSensorMode = ArgusSamples::ArgusHelpers::getSensorMode( + bayerWithOutIspDevice, options.sensorModeIndex()); + // std::vector bayerWithOutIspSensorModes; + // iBayerWithOutIspProperties->getBasicSensorModes(&bayerWithOutIspSensorModes); + // if (!bayerWithOutIspSensorModes.size()) + // { + // ORIGINATE_ERROR("Failed to get valid JPEG sensor mode list."); + // } + ISensorMode *iBayerWithOutIspSensorMode = interface_cast(bayerWithOutIspSensorMode); + if (!iBayerWithOutIspSensorMode) + ORIGINATE_ERROR("Failed to get the sensor mode."); + + printf("Capturing from Resolution (%dx%d)\n", + iBayerWithOutIspSensorMode->getResolution().width(), iBayerWithOutIspSensorMode->getResolution().height()); + + // Create the preview capture session. + UniqueObj bayerWithOutIspSession = UniqueObj( + iCameraProvider->createCaptureSession(bayerWithOutIspDevice)); + if (!bayerWithOutIspSession) + ORIGINATE_ERROR( + "Failed to create preview session with camera index %d.", BAYER_WITHOUT_ISP_CAMERA_INDEX); + ICaptureSession *iBayerWithOutIspCaptureSession = interface_cast(bayerWithOutIspSession); + if (!iBayerWithOutIspCaptureSession) + ORIGINATE_ERROR("Failed to get preview capture session interface"); + + // Create preview stream. + PRODUCER_PRINT("Creating the preview stream.\n"); + UniqueObj bayerWithOutIspSettings( + iBayerWithOutIspCaptureSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IEGLOutputStreamSettings *iBayerWithOutIspSettings = + interface_cast(bayerWithOutIspSettings); + if (iBayerWithOutIspSettings) + { + iBayerWithOutIspSettings->setPixelFormat(PIXEL_FMT_RAW16); + iBayerWithOutIspSettings->setResolution(iBayerWithOutIspSensorMode->getResolution()); + iBayerWithOutIspSettings->setMetadataEnable(true); + + } + UniqueObj bayerWithOutIspStream( + iBayerWithOutIspCaptureSession->createOutputStream(bayerWithOutIspSettings.get())); + IEGLOutputStream *iBayerWithOutIspStream = interface_cast(bayerWithOutIspStream); + if (!iBayerWithOutIspStream) + ORIGINATE_ERROR("Failed to create preview OutputStream"); + + // Create the FrameConsumer to consume the output frames from the stream. + Argus::UniqueObj bayerWithOutIspConsumer( + EGLStream::FrameConsumer::create(bayerWithOutIspStream.get())); + EGLStream::IFrameConsumer *iBayerWithOutIspConsumer = + Argus::interface_cast(bayerWithOutIspConsumer); + if (!iBayerWithOutIspConsumer) + ORIGINATE_ERROR("Failed to initialize Consumer"); + + // Create the two requests + UniqueObj bayerWithOutIspRequest(iBayerWithOutIspCaptureSession->createRequest()); + if (!bayerWithOutIspRequest) + ORIGINATE_ERROR("Failed to create Request"); + + IRequest *iBayerWithOutIspRequest = interface_cast(bayerWithOutIspRequest); + if (!iBayerWithOutIspRequest) + ORIGINATE_ERROR("Failed to create Request interface"); + + iBayerWithOutIspRequest->setEnableIspStage(false); + iBayerWithOutIspRequest->enableOutputStream(bayerWithOutIspStream.get()); + + Argus::ISourceSettings *iBayerWithOutIspSourceSettings = + Argus::interface_cast(bayerWithOutIspRequest); + if (!iBayerWithOutIspSourceSettings) + ORIGINATE_ERROR("Failed to get source settings request interface"); + iBayerWithOutIspSourceSettings->setSensorMode(bayerWithOutIspSensorMode); + + + // Argus is now all setup and ready to capture + // Submit capture requests. + PRODUCER_PRINT("Starting repeat capture requests.\n"); + + uint32_t bayerWithIspRequestId = iBayerWithIspCaptureSession->capture(bayerWithIspRequest.get()); + if (!bayerWithIspRequestId) + ORIGINATE_ERROR("Failed to submit capture request"); + uint32_t bayerWithOutIspRequestId = iBayerWithOutIspCaptureSession->capture(bayerWithOutIspRequest.get()); + if (!bayerWithOutIspRequestId) + ORIGINATE_ERROR("Failed to submit capture request"); + + Argus::Status status; + Argus::UniqueObj bayerWithIspFrame( + iBayerWithIspConsumer->acquireFrame(FIVE_SECONDS_IN_NANOSECONDS, &status)); + if (status != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to get consumer"); + Argus::UniqueObj bayerWithOutIspFrame( + iBayerWithOutIspConsumer->acquireFrame(FIVE_SECONDS_IN_NANOSECONDS, &status)); + if (status != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to get consumer"); + + EGLStream::IFrame *iBayerWithIspFrame = Argus::interface_cast(bayerWithIspFrame); + if (!iBayerWithIspFrame) + ORIGINATE_ERROR("Failed to get RGBA IFrame interface"); + EGLStream::IFrame *iBayerWithOutIspFrame = Argus::interface_cast(bayerWithOutIspFrame); + if (!iBayerWithOutIspFrame) + ORIGINATE_ERROR("Failed to get RGBA IFrame interface"); + + EGLStream::Image *bayerWithIspImage = iBayerWithIspFrame->getImage(); + if (!bayerWithIspImage) + ORIGINATE_ERROR("Failed to get RGBA Image from iFrame->getImage()"); + EGLStream::Image *bayerWithOutIspImage = iBayerWithOutIspFrame->getImage(); + if (!bayerWithOutIspImage) + ORIGINATE_ERROR("Failed to get RGBA Image from iFrame->getImage()"); + + EGLStream::IImage *iBayerWithIspImage = Argus::interface_cast(bayerWithIspImage); + if (!iBayerWithIspImage) + ORIGINATE_ERROR("Failed to get RGBA IImage"); + EGLStream::IImage *iBayerWithOutIspImage = Argus::interface_cast(bayerWithOutIspImage); + if (!iBayerWithOutIspImage) + ORIGINATE_ERROR("Failed to get RGBA IImage"); + + EGLStream::IImage2D *iBayerWithIspImage2D = Argus::interface_cast(bayerWithIspImage); + if (!iBayerWithIspImage2D) + ORIGINATE_ERROR("Failed to get RGBA iImage2D"); + EGLStream::IImage2D *iBayerWithOutIspImage2D = Argus::interface_cast(bayerWithOutIspImage); + if (!iBayerWithOutIspImage2D) + ORIGINATE_ERROR("Failed to get RGBA iImage2D"); + + EGLStream::IImageHeaderlessFile *iBayerWithIspImageHeadelessFile = + Argus::interface_cast(bayerWithIspImage); + if (!iBayerWithIspImageHeadelessFile) + ORIGINATE_ERROR("Failed to get RGBA IImageHeaderlessFile"); + EGLStream::IImageHeaderlessFile *iBayerWithOutIspImageHeadelessFile = + Argus::interface_cast(bayerWithOutIspImage); + if (!iBayerWithOutIspImageHeadelessFile) + ORIGINATE_ERROR("Failed to get RGBA IImageHeaderlessFile"); + + status = iBayerWithIspImageHeadelessFile->writeHeaderlessFile(bayerWithIspOutputFileName); + if (status != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to write output file"); + printf("Wrote bayerWithIsp file : %s\n", bayerWithIspOutputFileName); + status = iBayerWithOutIspImageHeadelessFile->writeHeaderlessFile(bayerWithOutIspOutputFileName); + if (status != Argus::STATUS_OK) + ORIGINATE_ERROR("Failed to write output file"); + printf("Wrote bayerWithOutIsp file : %s\n", bayerWithOutIspOutputFileName); + + // Shut down Argus. + cameraProvider.reset(); + + PRODUCER_PRINT("Done -- exiting.\n"); + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char** argv) +{ + ArgusSamples::CommonOptions options( + basename(argv[0]), + ArgusSamples::CommonOptions::Option_D_CameraDevice | + ArgusSamples::CommonOptions::Option_M_SensorMode ); + + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + if (!execute(options)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/syncSensor/CMakeLists.txt b/jetson_multimedia_api/argus/samples/syncSensor/CMakeLists.txt new file mode 100644 index 0000000..afbdd9e --- /dev/null +++ b/jetson_multimedia_api/argus/samples/syncSensor/CMakeLists.txt @@ -0,0 +1,66 @@ +# Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_syncsensor) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(CUDA) + +# Fail silently if CUDA is not found +if(CUDA_FOUND) + find_package(Argus REQUIRED) + find_package(OpenGLES REQUIRED) + find_package(EGL REQUIRED) + + set(SOURCES + main.cpp + KLDistance.cu + ${CMAKE_SOURCE_DIR}/samples/cudaHistogram/histogram.cu + ) + + include_directories( + ${ARGUS_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ${CMAKE_SOURCE_DIR}/samples/cudaHistogram + ) + + cuda_add_executable(${PROJECT_NAME} ${SOURCES}) + + target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + argussampleutils + cuda + ) + + install(TARGETS ${PROJECT_NAME} DESTINATION bin) + + include(CPack) +else(CUDA_FOUND) + message(CUDA toolkit not found, skipping ${PROJECT_NAME}) +endif(CUDA_FOUND) \ No newline at end of file diff --git a/jetson_multimedia_api/argus/samples/syncSensor/KLDistance.cu b/jetson_multimedia_api/argus/samples/syncSensor/KLDistance.cu new file mode 100644 index 0000000..9bb2637 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/syncSensor/KLDistance.cu @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _KLDISTANCE_KERNEL_H_ +#define _KLDISTANCE_KERNEL_H_ + +#include +#include "KLDistance.h" + +/** + * CUDA Kernel Device code + * + * Computes the KL ratio from probability ratios. + * + */ +__global__ void +vectorKLRatio(const unsigned int *A, + const unsigned int *B, + float *C, + const int numElements, + const int size) +{ + int i = blockDim.x * blockIdx.x + threadIdx.x; + + if (i < numElements) + { + float a = A[i]; + float b = B[i]; + a = a/(float)size; + b = b/(float)size; + if ( b == 0.0f) b+= .0001; // add sigma + if ( a != 0) + C[i] = a * log(a/b); + else + C[i] = 0.0f; + } +} + +float computeKLDistance(unsigned int *histOne, + unsigned int *histTwo, + const unsigned int bins, + const unsigned int size, + float *distance) +{ + cudaError_t err = cudaSuccess; + int threadsPerBlock = 256; + int blocksPerGrid =(bins + threadsPerBlock - 1) / threadsPerBlock; + + cudaEvent_t start; + cudaEvent_t stop; + + cudaEventCreate(&stop); + cudaEventCreate(&start); + + cudaEventRecord(start, 0); + unsigned int *d_histOne = NULL; + err = cudaMalloc((void **)&d_histOne, bins * sizeof(int)); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to allocate device histOne (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + unsigned int *d_histTwo = NULL; + err = cudaMalloc((void **)&d_histTwo, bins * sizeof(int)); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to allocate device histTwo (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + // Allocate the ratio bins + float *ratio = NULL; + err = cudaMalloc((void **)&ratio, bins * sizeof(float)); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to allocate device vector ratio (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + err = cudaMemcpy(d_histOne, histOne, bins, cudaMemcpyHostToDevice); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to copy into device vector histOne (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + err = cudaMemcpy(d_histTwo, histTwo, bins, cudaMemcpyHostToDevice); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to copy into device vector histTwo (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + vectorKLRatio<<>>(d_histOne, d_histTwo, ratio, bins, size); + err = cudaGetLastError(); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to launch vectorAdd kernel (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + float *dispRatio = (float *)malloc(bins * sizeof(float)); + err = cudaMemcpy(dispRatio, ratio, bins * sizeof(float), cudaMemcpyDeviceToHost); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to copy into device vector dispRatio (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + // just sum up the vector. + *distance = 0.0f; + for (unsigned int i = 0; i < bins; ++i) + { + *distance += dispRatio[i]; + } + + err = cudaFree(d_histOne); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to free device vector histOne (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + err = cudaFree(d_histTwo); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to free device vector histTwo (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + err = cudaFree(ratio); + if (err != cudaSuccess) + { + fprintf(stderr, "Failed to free device vector ratio (error code %s)!\n", + cudaGetErrorString(err)); + exit(EXIT_FAILURE); + } + + free(dispRatio); + cudaEventRecord(stop, 0); + cudaEventSynchronize(stop); + float elapsed_millis; + cudaEventElapsedTime(&elapsed_millis, start, stop); + return elapsed_millis; +} +#endif diff --git a/jetson_multimedia_api/argus/samples/syncSensor/KLDistance.h b/jetson_multimedia_api/argus/samples/syncSensor/KLDistance.h new file mode 100644 index 0000000..66ce10f --- /dev/null +++ b/jetson_multimedia_api/argus/samples/syncSensor/KLDistance.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef KLDISTANCE_H +#define KLDISTANCE_H + +#include + +/* + * Computes the KL divergence of two histograms from each other. + * @param[in] histOne a vector of size bins, containing the not normalized histogram. + * @param[in] histTwo a vector of size bins, containing the not normalized histogram. + * @param[in] bins the number of entrys in both histograms + * @param[in] size the sum of the histograms bins. + * @param[out] distance, the computed kl distance between the two histograms. + */ +extern float computeKLDistance(unsigned int *histOne, + unsigned int *histTwo, + const unsigned int bins, + const unsigned int size, + float *disparity); + +#endif // KLDISTANCE_H diff --git a/jetson_multimedia_api/argus/samples/syncSensor/main.cpp b/jetson_multimedia_api/argus/samples/syncSensor/main.cpp new file mode 100644 index 0000000..aa9b4b5 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/syncSensor/main.cpp @@ -0,0 +1,444 @@ +/* + * Copyright (c) 2016 - 2019, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include + +#include "CommonOptions.h" +#include "CUDAHelper.h" +#include "EGLGlobal.h" +#include "Error.h" +#include "KLDistance.h" +#include "Thread.h" + +// Histogram generation methods borrowed from cudaHistogram sample. +#include "../cudaHistogram/histogram.h" + + +using namespace Argus; + +namespace ArgusSamples +{ + +/* + * This sample opens a session with two sensors, it then using CUDA computes the histogram + * of the sensors and computes a KL distance between the two histograms. A small value near + * 0 indicates that the two images are alike. The processing of the images happens in the worker + * thread of StereoDisparityConsumerThread. While the main app thread is used to drive the captures. + */ + +// Constants. +static const Size2D STREAM_SIZE(640, 480); + +// Globals and derived constants. +EGLDisplayHolder g_display; + +// Debug print macros. +#define PRODUCER_PRINT(...) printf("PRODUCER: " __VA_ARGS__) +#define CONSUMER_PRINT(...) printf("CONSUMER: " __VA_ARGS__) + +/******************************************************************************* + * Argus disparity class + * This class will analyze frames from 2 synchronized sensors and compute the + * KL distance between the two images. Large values of KL indicate a large disparity + * while a value of 0.0 indicates that the images are alike. + ******************************************************************************/ +class StereoDisparityConsumerThread : public Thread +{ +public: + explicit StereoDisparityConsumerThread(IEGLOutputStream *leftStream, + IEGLOutputStream *rightStream) + : m_leftStream(leftStream) + , m_rightStream(rightStream) + , m_cudaContext(0) + , m_cuStreamLeft(NULL) + , m_cuStreamRight(NULL) + { + } + ~StereoDisparityConsumerThread() + { + } + +private: + /** @name Thread methods */ + /**@{*/ + virtual bool threadInitialize(); + virtual bool threadExecute(); + virtual bool threadShutdown(); + /**@}*/ + + IEGLOutputStream *m_leftStream; + IEGLOutputStream *m_rightStream; + CUcontext m_cudaContext; + CUeglStreamConnection m_cuStreamLeft; + CUeglStreamConnection m_cuStreamRight; +}; + +/** + * Utility class to acquire and process an EGLStream frame from a CUDA + * consumer as long as the object is in scope. + */ +class ScopedCudaEGLStreamFrameAcquire +{ +public: + /** + * Constructor blocks until a frame is acquired or an error occurs (ie. stream is + * disconnected). Caller should check which condition was satisfied using hasValidFrame(). + */ + ScopedCudaEGLStreamFrameAcquire(CUeglStreamConnection& connection); + + /** + * Destructor releases frame back to EGLStream. + */ + ~ScopedCudaEGLStreamFrameAcquire(); + + /** + * Returns true if a frame was acquired (and is compatible with this consumer). + */ + bool hasValidFrame() const; + + /** + * Use CUDA to generate a histogram from the acquired frame. + * @param[out] histogramData Output array for the histogram. + * @param[out] time Time to generate histogram, in milliseconds. + */ + bool generateHistogram(unsigned int histogramData[HISTOGRAM_BINS], float *time); + + /** + * Returns the size (resolution) of the frame. + */ + Size2D getSize() const; + +private: + + /** + * Returns whether or not the frame format is supported. + */ + bool checkFormat() const; + + CUeglStreamConnection& m_connection; + CUstream m_stream; + CUgraphicsResource m_resource; + CUeglFrame m_frame; +}; + +bool StereoDisparityConsumerThread::threadInitialize() +{ + // Create CUDA and connect egl streams. + PROPAGATE_ERROR(initCUDA(&m_cudaContext)); + + CONSUMER_PRINT("Connecting CUDA consumer to left stream\n"); + CUresult cuResult = cuEGLStreamConsumerConnect(&m_cuStreamLeft, m_leftStream->getEGLStream()); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to connect CUDA to EGLStream as a consumer (CUresult %s)", + getCudaErrorString(cuResult)); + } + + CONSUMER_PRINT("Connecting CUDA consumer to right stream\n"); + cuResult = cuEGLStreamConsumerConnect(&m_cuStreamRight, m_rightStream->getEGLStream()); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to connect CUDA to EGLStream as a consumer (CUresult %s)", + getCudaErrorString(cuResult)); + } + return true; +} + +bool StereoDisparityConsumerThread::threadExecute() +{ + CONSUMER_PRINT("Waiting for Argus producer to connect to left stream.\n"); + m_leftStream->waitUntilConnected(); + + CONSUMER_PRINT("Waiting for Argus producer to connect to right stream.\n"); + m_rightStream->waitUntilConnected(); + + CONSUMER_PRINT("Streams connected, processing frames.\n"); + unsigned int histogramLeft[HISTOGRAM_BINS]; + unsigned int histogramRight[HISTOGRAM_BINS]; + while (true) + { + EGLint streamState = EGL_STREAM_STATE_CONNECTING_KHR; + + // Check both the streams and proceed only if they are not in DISCONNECTED state. + if (!eglQueryStreamKHR( + m_leftStream->getEGLDisplay(), + m_leftStream->getEGLStream(), + EGL_STREAM_STATE_KHR, + &streamState) || (streamState == EGL_STREAM_STATE_DISCONNECTED_KHR)) + { + CONSUMER_PRINT("left : EGL_STREAM_STATE_DISCONNECTED_KHR received\n"); + break; + } + + if (!eglQueryStreamKHR( + m_rightStream->getEGLDisplay(), + m_rightStream->getEGLStream(), + EGL_STREAM_STATE_KHR, + &streamState) || (streamState == EGL_STREAM_STATE_DISCONNECTED_KHR)) + { + CONSUMER_PRINT("right : EGL_STREAM_STATE_DISCONNECTED_KHR received\n"); + break; + } + + ScopedCudaEGLStreamFrameAcquire left(m_cuStreamLeft); + ScopedCudaEGLStreamFrameAcquire right(m_cuStreamRight); + + if (!left.hasValidFrame() || !right.hasValidFrame()) + break; + + // Calculate histograms. + float time = 0.0f; + if (left.generateHistogram(histogramLeft, &time) && + right.generateHistogram(histogramRight, &time)) + { + // Calculate KL distance. + float distance = 0.0f; + Size2D size = right.getSize(); + float dTime = computeKLDistance(histogramRight, + histogramLeft, + HISTOGRAM_BINS, + size.width() * size.height(), + &distance); + CONSUMER_PRINT("KL distance of %6.3f with %5.2f ms computing histograms and " + "%5.2f ms spent computing distance\n", + distance, time, dTime); + } + } + CONSUMER_PRINT("No more frames. Cleaning up.\n"); + + PROPAGATE_ERROR(requestShutdown()); + + return true; +} + +bool StereoDisparityConsumerThread::threadShutdown() +{ + // Disconnect from the streams. + cuEGLStreamConsumerDisconnect(&m_cuStreamLeft); + cuEGLStreamConsumerDisconnect(&m_cuStreamRight); + + PROPAGATE_ERROR(cleanupCUDA(&m_cudaContext)); + + CONSUMER_PRINT("Done.\n"); + return true; +} + +ScopedCudaEGLStreamFrameAcquire::ScopedCudaEGLStreamFrameAcquire(CUeglStreamConnection& connection) + : m_connection(connection) + , m_stream(NULL) + , m_resource(0) +{ + CUresult r = cuEGLStreamConsumerAcquireFrame(&m_connection, &m_resource, &m_stream, -1); + if (r == CUDA_SUCCESS) + { + cuGraphicsResourceGetMappedEglFrame(&m_frame, m_resource, 0, 0); + } +} + +ScopedCudaEGLStreamFrameAcquire::~ScopedCudaEGLStreamFrameAcquire() +{ + if (m_resource) + { + cuEGLStreamConsumerReleaseFrame(&m_connection, m_resource, &m_stream); + } +} + +bool ScopedCudaEGLStreamFrameAcquire::hasValidFrame() const +{ + return m_resource && checkFormat(); +} + +bool ScopedCudaEGLStreamFrameAcquire::generateHistogram(unsigned int histogramData[HISTOGRAM_BINS], + float *time) +{ + if (!hasValidFrame() || !histogramData || !time) + ORIGINATE_ERROR("Invalid state or output parameters"); + + // Create surface from luminance channel. + CUDA_RESOURCE_DESC cudaResourceDesc; + memset(&cudaResourceDesc, 0, sizeof(cudaResourceDesc)); + cudaResourceDesc.resType = CU_RESOURCE_TYPE_ARRAY; + cudaResourceDesc.res.array.hArray = m_frame.frame.pArray[0]; + CUsurfObject cudaSurfObj = 0; + CUresult cuResult = cuSurfObjectCreate(&cudaSurfObj, &cudaResourceDesc); + if (cuResult != CUDA_SUCCESS) + { + ORIGINATE_ERROR("Unable to create the surface object (CUresult %s)", + getCudaErrorString(cuResult)); + } + + // Generated the histogram. + *time += histogram(cudaSurfObj, m_frame.width, m_frame.height, histogramData); + + // Destroy surface. + cuSurfObjectDestroy(cudaSurfObj); + + return true; +} + +Size2D ScopedCudaEGLStreamFrameAcquire::getSize() const +{ + if (hasValidFrame()) + return Size2D(m_frame.width, m_frame.height); + return Size2D(0, 0); +} + +bool ScopedCudaEGLStreamFrameAcquire::checkFormat() const +{ + if (!isCudaFormatYUV(m_frame.eglColorFormat)) + { + ORIGINATE_ERROR("Only YUV color formats are supported"); + } + if (m_frame.cuFormat != CU_AD_FORMAT_UNSIGNED_INT8) + { + ORIGINATE_ERROR("Only 8-bit unsigned int formats are supported"); + } + return true; +} + +static bool execute(const CommonOptions& options) +{ + // Initialize EGL. + PROPAGATE_ERROR(g_display.initialize()); + + // Initialize the Argus camera provider. + UniqueObj cameraProvider(CameraProvider::create()); + + // Get the ICameraProvider interface from the global CameraProvider. + ICameraProvider *iCameraProvider = interface_cast(cameraProvider); + if (!iCameraProvider) + ORIGINATE_ERROR("Failed to get ICameraProvider interface"); + printf("Argus Version: %s\n", iCameraProvider->getVersion().c_str()); + + // Get the camera devices. + std::vector cameraDevices; + iCameraProvider->getCameraDevices(&cameraDevices); + if (cameraDevices.size() < 2) + ORIGINATE_ERROR("Must have at least 2 sensors available"); + + std::vector lrCameras; + lrCameras.push_back(cameraDevices[0]); // Left Camera (the 1st camera will be used for AC) + lrCameras.push_back(cameraDevices[1]); // Right Camera + + // Create the capture session, AutoControl will be based on what the 1st device sees. + UniqueObj captureSession(iCameraProvider->createCaptureSession(lrCameras)); + ICaptureSession *iCaptureSession = interface_cast(captureSession); + if (!iCaptureSession) + ORIGINATE_ERROR("Failed to get capture session interface"); + + // Create stream settings object and set settings common to both streams. + UniqueObj streamSettings( + iCaptureSession->createOutputStreamSettings(STREAM_TYPE_EGL)); + IOutputStreamSettings *iStreamSettings = interface_cast(streamSettings); + IEGLOutputStreamSettings *iEGLStreamSettings = + interface_cast(streamSettings); + if (!iStreamSettings || !iEGLStreamSettings) + ORIGINATE_ERROR("Failed to create OutputStreamSettings"); + iEGLStreamSettings->setPixelFormat(PIXEL_FMT_YCbCr_420_888); + iEGLStreamSettings->setResolution(STREAM_SIZE); + iEGLStreamSettings->setEGLDisplay(g_display.get()); + + // Create egl streams + PRODUCER_PRINT("Creating left stream.\n"); + iStreamSettings->setCameraDevice(lrCameras[0]); + UniqueObj streamLeft(iCaptureSession->createOutputStream(streamSettings.get())); + IEGLOutputStream *iStreamLeft = interface_cast(streamLeft); + if (!iStreamLeft) + ORIGINATE_ERROR("Failed to create left stream"); + + PRODUCER_PRINT("Creating right stream.\n"); + iStreamSettings->setCameraDevice(lrCameras[1]); + UniqueObj streamRight(iCaptureSession->createOutputStream(streamSettings.get())); + IEGLOutputStream *iStreamRight = interface_cast(streamRight); + if (!iStreamRight) + ORIGINATE_ERROR("Failed to create right stream"); + + PRODUCER_PRINT("Launching disparity checking consumer\n"); + StereoDisparityConsumerThread disparityConsumer(iStreamLeft, iStreamRight); + PROPAGATE_ERROR(disparityConsumer.initialize()); + PROPAGATE_ERROR(disparityConsumer.waitRunning()); + + // Create a request + UniqueObj request(iCaptureSession->createRequest()); + IRequest *iRequest = interface_cast(request); + if (!iRequest) + ORIGINATE_ERROR("Failed to create Request"); + + // Enable both streams in the request. + iRequest->enableOutputStream(streamLeft.get()); + iRequest->enableOutputStream(streamRight.get()); + + // Submit capture for the specified time. + PRODUCER_PRINT("Starting repeat capture requests.\n"); + if (iCaptureSession->repeat(request.get()) != STATUS_OK) + ORIGINATE_ERROR("Failed to start repeat capture request for preview"); + sleep(options.captureTime()); + + // Stop the capture requests and wait until they are complete. + iCaptureSession->stopRepeat(); + iCaptureSession->waitForIdle(); + + // Disconnect Argus producer from the EGLStreams (and unblock consumer acquire). + PRODUCER_PRINT("Captures complete, disconnecting producer.\n"); + iStreamLeft->disconnect(); + iStreamRight->disconnect(); + + // Wait for the consumer thread to complete. + PROPAGATE_ERROR(disparityConsumer.shutdown()); + + // Shut down Argus. + cameraProvider.reset(); + + // Cleanup the EGL display + PROPAGATE_ERROR(g_display.cleanup()); + + PRODUCER_PRINT("Done -- exiting.\n"); + return true; +} + +}; // namespace ArgusSamples + +int main(int argc, char *argv[]) +{ + ArgusSamples::CommonOptions options(basename(argv[0]), + ArgusSamples::CommonOptions::Option_T_CaptureTime); + if (!options.parse(argc, argv)) + return EXIT_FAILURE; + if (options.requestedExit()) + return EXIT_SUCCESS; + + if (!ArgusSamples::execute(options)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; +} diff --git a/jetson_multimedia_api/argus/samples/syncStereo/CMakeLists.txt b/jetson_multimedia_api/argus/samples/syncStereo/CMakeLists.txt new file mode 100644 index 0000000..31a1540 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/syncStereo/CMakeLists.txt @@ -0,0 +1,56 @@ +# Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required (VERSION 2.6) + +project(argus_syncstereo) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + +find_package(Argus REQUIRED) +find_package(OpenGLES REQUIRED) +find_package(EGL REQUIRED) + +set(SOURCES + main.cpp + ) + +include_directories( + ${ARGUS_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/samples/utils + ) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} + ${ARGUS_LIBRARIES} + argussampleutils + ) + +install(TARGETS ${PROJECT_NAME} DESTINATION bin) + +include(CPack) + diff --git a/jetson_multimedia_api/argus/samples/syncStereo/main.cpp b/jetson_multimedia_api/argus/samples/syncStereo/main.cpp new file mode 100644 index 0000000..a626896 --- /dev/null +++ b/jetson_multimedia_api/argus/samples/syncStereo/main.cpp @@ -0,0 +1,514 @@ +/* + * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of NVIDIA CORPORATION nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ArgusHelpers.h" +#include "CommonOptions.h" +#include "EGLGlobal.h" +#include "Error.h" +#include "Thread.h" + +#include +#include + +#include +#include +#include +#include +#include +#include + +using namespace Argus; +using namespace EGLStream; + +namespace ArgusSamples +{ + +/* + * This sample opens sessions based on the number of stereo/sensor modules + * connected. Each module can have 1 sensor or multiple (2) sensors connected. + * The processing of the images happens in the worker thread, while the main + * app thread is used to drive the captures. + */ + +// Constants. +static const Size2D STREAM_SIZE(640, 480); + +// Globals and derived constants. +EGLDisplayHolder g_display; + +// Debug print macros. +#define PRODUCER_PRINT(...) printf("PRODUCER: " __VA_ARGS__) +#define CONSUMER_PRINT(...) printf("CONSUMER: " __VA_ARGS__) + +// forward declaration +class SyncStereoConsumerThread; + +#define MAX_MODULE_STRING 32 +#define MAX_CAM_DEVICE 6 +typedef struct +{ + char moduleName[MAX_MODULE_STRING]; + int camDevice[MAX_CAM_DEVICE]; + UniqueObj stream[MAX_CAM_DEVICE]; + UniqueObj captureSession; + UniqueObj streamSettings; + SyncStereoConsumerThread *syncStereoConsumer; + int sensorCount; + bool initialized; +} ModuleInfo; + + +/******************************************************************************* + * Argus disparity class + * This class will analyze frames from 2 synchronized sensors + ******************************************************************************/ +class SyncStereoConsumerThread : public Thread +{ +public: + explicit SyncStereoConsumerThread(ModuleInfo *modInfo) + { + m_leftStream = modInfo->stream[0].get(); + if (modInfo->sensorCount > 1) + m_rightStream = modInfo->stream[1].get(); + else + m_rightStream = NULL; + + strcpy(m_moduleName, modInfo->moduleName); + } + ~SyncStereoConsumerThread() + { + CONSUMER_PRINT("DESTRUCTOR ... \n"); + } + +private: + /** @name Thread methods */ + /**@{*/ + virtual bool threadInitialize(); + virtual bool threadExecute(); + virtual bool threadShutdown(); + /**@}*/ + + /* Assumption: We only have a Left-Right pair. + * OutputStream and FrameConsumer should be created to a vector of + * MAX_CAM_DEVICE size. + */ + OutputStream *m_leftStream; + OutputStream *m_rightStream; + char m_moduleName[MAX_MODULE_STRING]; + UniqueObj m_leftConsumer; + UniqueObj m_rightConsumer; +}; + +ICaptureSession* g_iCaptureSession[MAX_CAM_DEVICE]; + +bool SyncStereoConsumerThread::threadInitialize() +{ + CONSUMER_PRINT("Creating FrameConsumer for left stream\n"); + m_leftConsumer = UniqueObj(FrameConsumer::create(m_leftStream)); + if (!m_leftConsumer) + ORIGINATE_ERROR("Failed to create FrameConsumer for left stream"); + + if (m_rightStream) + { + CONSUMER_PRINT("Creating FrameConsumer for right stream\n"); + m_rightConsumer = UniqueObj(FrameConsumer::create(m_rightStream)); + if (!m_rightConsumer) + ORIGINATE_ERROR("Failed to create FrameConsumer for right stream"); + } + + return true; +} + +bool SyncStereoConsumerThread::threadExecute() +{ + IEGLOutputStream *iLeftStream = interface_cast(m_leftStream); + IFrameConsumer* iFrameConsumerLeft = interface_cast(m_leftConsumer); + + IFrameConsumer* iFrameConsumerRight = NULL; + if (m_rightStream) + { + IEGLOutputStream *iRightStream = interface_cast(m_rightStream); + iFrameConsumerRight = interface_cast(m_rightConsumer); + + // Wait until the producer has connected to the stream. + CONSUMER_PRINT("Waiting until Argus producer is connected to right stream...\n"); + if (iRightStream->waitUntilConnected() != STATUS_OK) + ORIGINATE_ERROR("Argus producer failed to connect to right stream."); + CONSUMER_PRINT("Argus producer for right stream has connected; continuing.\n"); + } + + // Wait until the producer has connected to the stream. + CONSUMER_PRINT("Waiting until Argus producer is connected to left stream...\n"); + if (iLeftStream->waitUntilConnected() != STATUS_OK) + ORIGINATE_ERROR("Argus producer failed to connect to left stream."); + CONSUMER_PRINT("Argus producer for left stream has connected; continuing.\n"); + + while (true) + { + UniqueObj frameleft(iFrameConsumerLeft->acquireFrame()); + if (!frameleft) + break; + + // Use the IFrame interface to print out the frame number/timestamp, and + // to provide access to the Image in the Frame. + IFrame *iFrameLeft = interface_cast