This disclosure relates generally to systems for image capture devices, and specifically to camera initialization for a multiple camera module.
Many devices include or are coupled to a multiple camera module for capturing images and video. For example, smartphones may have a dual camera module with a primary camera and an auxiliary camera. A device typically initializes all cameras of a multiple camera module before using one camera to capture images and videos. The amount of time required for initializing all cameras of a multiple camera module before capturing an image or video may negatively impact a user experience. For example, a person wishing to use a smartphone to quickly capture a scene may press the camera app on the display and wait for the multiple camera module to initialize. As the person waits for the multiple camera module to initialize, the scene may change, the person may become impatient, or the person may attempt to press a camera shutter button to capture an image before the multiple camera module is initialized. What is needed is an improved camera initialization for multiple camera modules.
This Summary is provided to introduce in a simplified form a selection of concepts that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to limit the scope of the claimed subject matter.
Aspects of the present disclosure relate to systems and methods for camera initialization for a multiple camera module. In some example implementations, a device may include one or more processors, and a memory including instructions that, when executed by the one or more processors, cause the device to receive a first command for initializing a first camera of a multiple camera module, receive a second command, after receiving the first command, for initializing a second camera of the multiple camera module, receive a third command, after receiving the second command, for initializing the first camera, and execute the first command and the third command before executing the second command.
In another example, a method for initializing a multiple camera module including at least a first camera and a second camera is disclosed. The example method may include receiving a first command for initializing the first camera, receiving a second command, after receiving the first command, for initializing the second camera, receiving a third command, after receiving the second command, for initializing the first camera, and executing the first command and the third command before executing the second command.
In another example, a non-transitory computer-readable medium is disclosed. The non-transitory computer-readable medium may store instructions that, when executed by one or more processors of a device, cause the device to perform operations including receiving a first command for initializing a first camera of a multiple camera module, receiving a second command, after receiving the first command, for initializing a second camera of the multiple camera module, receiving a third command, after receiving the second command, for initializing the first camera, and executing the first command and the third command before executing the second command.
In another example, a device includes means for receiving a first command for initializing a first camera of a multiple camera module, means for receiving a second command, after receiving the first command, for initializing a second camera of the multiple camera module, means for receiving a third command, after receiving the second command, for initializing the first camera, and means for executing the first command and the third command before executing the second command.
Aspects of this disclosure are illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings and in which like reference numerals refer to similar elements.
Aspects of the present disclosure may be used for initializing a camera of a multiple camera module. In some example implementations, a device may initialize and operate one camera of a multiple camera module before initializing all of the cameras of the multiple camera module. In this manner, the device may more quickly capture an image or video than waiting to initialize all cameras of a multiple camera module before capturing an image or video. For example, a device may initialize and begin using a primary camera of a dual camera module in order to generate a preview stream or capture images and video before the auxiliary camera of the dual camera module is initialized.
In some example implementations, devices may include or be coupled to a multiple camera module. For example, a smartphone or tablet may include a dual camera module. In some other example implementations, devices may control a separate multiple camera module. For example, a security system may control a multiple security camera module. The multiple camera module includes two or more cameras that may be oriented in a similar direction. Many devices include a dual camera module with a primary camera and an auxiliary camera. In some example implementations, the primary camera and the auxiliary camera have the same image capture capabilities (such as the same field of view, same type of camera sensor, and so on). In some other example implementations, the capabilities of the primary camera may be different than the capabilities of the auxiliary camera. In one example, the primary camera may have a larger field of view than the auxiliary camera (such as the primary camera including a wide view camera lens and the auxiliary camera including a telephoto camera lens). In another example, the primary camera sensor may capture color information while the auxiliary camera sensor captures only black and white information (e.g., the auxiliary camera may assist in capturing detail for the primary camera in low light scenes). In a further example, the primary camera sensor may capture more fidelity than the auxiliary camera sensor (e.g., the auxiliary camera may be used in determining the focus setting for the primary camera). The example camera configurations also apply for multiple camera modules with more than two cameras.
Example devices include digital cameras, smartphones, tablets, laptop computers, desktop computers, security systems, and so on. Many devices including or coupled to a multiple camera module, or to otherwise control a multiple camera module, include an operating system for operation. For example, a smartphone, a tablet, or a computer may include an operating system for a user to interact with the device and for the device to perform requested operations (such as word processing applications, texting, internet browsing, and so on). One or more applications included in or installed for the operating system may be a camera application for operating the multiple camera module. For example, a smartphone may include a camera application, which may be launched in response to a user tapping a camera app icon on a display of the smartphone. An operating system may be a layer of abstraction where general commands are translated into one or more specific commands for a device. For example, a camera application may provide a general “start camera” command for initializing a multiple camera module, which may be translated by the operating system into one or more general commands for initializing multiple cameras (such as commands for initializing a first camera and commands for initializing a second camera).
Different types of multiple camera modules exist, and different manufacturers may produce multiple camera modules. As a result, the command format, structure, and sequence may differ between different multiple camera modules. One or more camera applications may be used by the device in initializing and operating the multiple camera module. For example, opening a camera application may cause a command for initializing the multiple camera module (e.g., the “start camera” command). The operating system may include a hardware abstraction layer (HAL) to allow programmers to define basic commands that are then translated by the HAL into general commands for the device. However, commands from an operating system may not be hardware specific. For example, an operating system may be installed on different types of devices from different manufacturers (and with different types of multiple camera modules). As a result, the commands from the operating system may be generic commands that are to be translated by one or more processors of a device into hardware or module specific commands.
The multiple camera module 106 may provide messages that are specific to the multiple camera module 106. For example, the messages may be in a format, structure, and sequence that is specific and different from other camera modules. In this manner, the bridgeware 104 may be used by the one or more processors to translate the camera module specific messages to operating system messages.
Before a multiple camera module is used for capturing images or video, the multiple camera module is initialized. For example, initializing the multiple camera module may include providing power to the cameras, initializing a data buffer for each camera, determining initial capture settings for each camera, and enabling a camera sensor with the initial capture settings for each camera. Initial capture settings for a camera may include a shutter speed, an aperture size, a camera sensor sensitivity, a focus setting (such as a focal length of the camera lens), and so on. Conventional devices typically perform all of the initialization steps for each and every camera of the multiple camera module before allowing one of the cameras to be used for image or video capture. For example, all cameras are initialized before a preview stream is provided to the user, which may impact the user experience in capturing images or video. In some example implementations, a device may initialize a camera of the multiple camera module so that the camera may be used to capture images or video (such as providing a preview stream) before performing all steps for initializing one or more of the other cameras of the multiple camera module. In this manner, one or more cameras of the multiple camera module may be initialized after one of the cameras begins operation.
In the following description, numerous specific details are set forth, such as examples of specific components, circuits, and processes to provide a thorough understanding of the present disclosure. The term “coupled” as used herein means connected directly to or connected through one or more intervening components or circuits. Also, in the following description and for purposes of explanation, specific nomenclature is set forth to provide a thorough understanding of the present disclosure. However, it will be apparent to one skilled in the art that these specific details may not be required to practice the teachings disclosed herein. In other instances, well-known circuits and devices are shown in block diagram form to avoid obscuring teachings of the present disclosure. Some portions of the detailed descriptions which follow are presented in terms of procedures, logic blocks, processing and other symbolic representations of operations on data bits within a computer memory. These descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. In the present disclosure, a procedure, logic block, process, or the like, is conceived to be a self-consistent sequence of steps or instructions leading to a desired result. The steps are those requiring physical manipulations of physical quantities. Usually, although not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated in a computer system.
It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the following discussions, it is appreciated that throughout the present application, discussions utilizing the terms such as “accessing,” “receiving,” “sending,” “using,” “selecting,” “determining,” “normalizing,” “multiplying,” “averaging,” “monitoring,” “comparing,” “applying,” “updating,” “measuring,” “deriving,” “settling,” or the like, refer to the actions and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (electronic) quantities within the computer system's registers and memories into other data similarly represented as physical quantities within the computer system memories or registers or other such information storage, transmission or display devices.
In the figures, a single block may be described as performing a function or functions; however, in actual practice, the function or functions performed by that block may be performed in a single component or across multiple components, and/or may be performed using hardware, using software, or using a combination of hardware and software. To clearly illustrate this interchangeability of hardware and software, various illustrative components, blocks, modules, circuits, and steps are described below generally in terms of their functionality. Whether such functionality is implemented as hardware or software depends upon the particular application and design constraints imposed on the overall system. Skilled artisans may implement the described functionality in varying ways for each particular application, but such implementation decisions should not be interpreted as causing a departure from the scope of the present disclosure. Also, the example devices may include components other than those shown, including well-known components such as a processor, memory and the like.
Aspects of the present disclosure are applicable to any suitable electronic device configured to or capable of capturing images or video (such as a security system with two or more cameras, smartphones, tablets, laptop computers, digital video and/or still cameras, web cameras, and so on). While described below with respect to a device having or coupled to two cameras, aspects of the present disclosure are applicable to devices having any number of cameras greater than two, and are therefore not limited to devices having two cameras.
The term “device” is not limited to one or a specific number of physical objects (such as one camera controller, one processing system, and so on). As used herein, a device may be any electronic device with one or more parts that may implement at least some portions of this disclosure. While the below description and examples use the term “device” to describe various aspects of this disclosure, the term “device” is not limited to a specific configuration, type, or number of objects.
The multiple camera module 202 may be a dual camera module or any other suitable module with multiple camera sensors (such as a first camera sensor for the first camera 204 and a second camera sensor for the second camera 206). The multiple camera module 202 may also include separate shutters, aperture openings, power rails, control circuits, and so on for each of the cameras. While the multiple camera module 202 is shown to include the first camera 204 and the second camera 206, the multiple camera module may include three or more cameras.
The memory 210 may be a non-transient or non-transitory computer readable medium storing computer-executable instructions 212 to perform all or a portion of one or more operations described in this disclosure. The memory 210 may also include an operating system 224 including instructions or commands that may be executed by the processor 208 (or by the image signal processor 216) to control operation of the device 200. For example, the operating system 224 may include a camera application (not shown for simplicity) to provide commands to be executed by the processor 208 or by the image signal processor 216 for controlling the multiple camera module 202. The memory 210 may also include a bridgeware 226 to be used for translating one or more commands from the operating system 224 to hardware or module specific commands for the device 200. In some other example implementations, the operating system 224 and/or the bridgeware 226 may be stored in a different memory of the device, such as a memory coupled to the image signal processor 216 or a separate memory for startup of the device 200. The device 200 may also include a power supply 222, which may be coupled to or integrated into the device 200.
The processor 208 may be one or more suitable processors capable of executing scripts or instructions of one or more software programs stored within the memory 210. In some aspects, the processor 208 may be one or more general purpose processors that execute instructions 212 to cause the device 200 to perform any number of functions or operations. For example, the processor 208 may execute an operating system 224 and/or bridgeware 226 (which may be examples of the operating system 102 and the bridgeware 104 of
The display 218 may be any suitable display or screen allowing for user interaction and/or to present items (such as captured images, video, or a preview image) for viewing by a user. In some aspects, the display 218 may be a touch-sensitive display. The I/O components 220 may be or include any suitable mechanism, interface, or device to receive input (such as commands) from the user and to provide output to the user. For example, the I/O components 220 may include (but are not limited to) a graphical user interface, keyboard, mouse, microphone and speakers, and so on. The display 218 and/or the I/O components 220 may provide a preview image to a user and/or receive a user input for adjusting one or more settings of multiple camera module 202 or for capturing an image or video using the multiple camera module 202.
The camera controller 214 may include an image signal processor 216, which may be one or more image signal processors to process captured image frames provided by the multiple camera module 202. In some example implementations, the camera controller 214 (such as the image signal processor 216) may also control operation of the multiple camera module 202. For example, the camera controller 214 may control initializing the first camera 204 and the second camera 206 of the multiple camera module 202. In some aspects, the image signal processor 216 may execute instructions from a memory (such as instructions 212 from the memory 210 or instructions stored in a separate memory coupled to the image signal processor 216) to control operation of the multiple camera module 202 and to process image frames or video captured by the multiple camera module 202. For example, the image signal processor 216 may execute the bridgeware 226 for converting or translating camera module independent commands from the operating system 224 to camera module specific commands. In other aspects, the image signal processor 216 may include specific hardware to control operation of the multiple camera module 202 and/or to process image frames captured by the multiple camera module 202. The image signal processor 216 may alternatively or additionally include a combination of specific hardware and the ability to execute software instructions.
The device 200 may receive a general command from the operating system 224 (such as from the camera application) for initializing the multiple camera module 202. The hardware abstraction layer (HAL) of the operating system 224 may be used by the processor 208 or image signal processor 216 to convert or translate the general command into one or more commands for initializing the multiple camera module 202. The commands may include, for example, opening the first camera 204 (which may include providing power to the first camera 204), opening the second camera 206 (which may include providing power to the second camera 206), configuring the first camera 204 (which may include configuring the exposure value, white balance, and so on for the first camera 204), configuring the second camera 206 (which may include configuring the exposure value, white balance, and so on for the second camera 206), initializing a buffer or queue for the first camera 204 (which may be used to store capture information from the first camera 204 before being processed by the camera controller 214), initializing a buffer or queue for the second camera 206 (which may be used to store capture information from the second camera 206 before being processed by the camera controller 214), enabling a camera sensor for the first camera 204, and enabling a camera sensor for the second camera 206. While the commands may be more detailed than the general command from the camera application, the commands may not be module or hardware specific, and the bridgeware may be used to convert such commands to hardware or module specific commands.
A device may include and/or control hardware components from any of a plurality of manufacturers. For example, a first camera 204 and a second camera 206 may be part of a dual camera module that is provide by one of a plurality of manufacturers or vendors. The hardware from one manufacturer or vendor may require commands or command structures that are different than for another manufacturer or vendor. Different versions of hardware from the same vendor may also have different commands or command structures. In contrast, an operating system may be installed on a variety of devices with different hardware, and may be configured to support as many different devices as possible. Therefore, the operating system may need to be compatible with various types of hardware, which may require different commands or command structures. The operating system may also need to be compatible with future hardware and device configurations. If an operating system may provide general commands that may occur for all devices (such as configuring a first camera, configuring a second camera, and so on), the operating system may be compatible with current and future device configurations. However, the general commands may still be required to be converted to specific hardware or module commands or command structures.
If an operating system is hardcoded or otherwise always updated to provide module or hardware specific commands, the operating system may become power or resource intensive. For example, loading or processing libraries or scripts in the operating system may take longer as more are loaded for supporting more and more configurations and hardware, and storing more and more different command structures and loading scripts may require more memory than desired. Further, a manufacturer introducing a new device or hardware may require the company that provides the operating system to alter the operating system to process specific commands for the hardware. Changes to the operating system may require an undesirable delay, and some hardware manufacturers may ultimately be denied from being supported if no updates to the operating system are made. To prevent barriers of entry for hardware manufacturers and vendors, and to make an operating system more compatible with various devices without undue delay, bridgeware that couples to the operating system or receives and sends information from and to the operating system may be used to convert between the general commands of the operating system and the specific commands from the hardware module. For example, the operating system may include one or more software ports, or provide and receive the general commands in known data structures, for device manufacturers, device vendors, or others to create the bridgeware that can translate between the hardware specific commands and the operating system general commands without requiring additional updates for the operating system. In some example implementations, bridgeware may be one or more drivers executed by a device to receive commands from the operating system, convert the commands to hardware specific commands, and provide the hardware specific commands to the hardware. For example, a hardware component manufacturer (such as for a dual camera module) may develop the driver and provide to a device manufacturer when providing the hardware module. In this manner, the device manufacturer when building the device may include the operating system, the driver, and the hardware component, and insure compatibility without requiring changes in the operating system or requiring the company providing the operating system to make changes to support the specific hardware. As a result, the operating system may be a higher abstraction layer than bridgeware.
Referring again to
When conventionally initializing a multiple camera module, a first camera and a second camera are both initialized before either camera is enabled for capturing an image. In one example, when a command is provided to the multiple camera module for the first camera, the next command is not provided to the multiple camera module until a response is received that the provided command is executed. As a result, a camera sensor is not activated and a preview from at least one of the cameras is not provided on a display of an associated device until all cameras of the multiple camera module are verified as initialized.
The operating system layer 102 may provide an open first camera command 302 to the bridgeware layer 104. The bridgeware 104 may then be used (such as by the processor 208 or the image signal processor 216) to convert the open first camera command 302 to one or more open first camera commands 304 specific to the multiple camera module 106. For example, the open first camera command 302 may be converted to an apply power command (such as providing power on one or more power rails), enabling commands for one or more controllers of a first camera 204, and so on. The one or more camera module specific commands for opening the first camera (such as the open first camera commands 304) may then be provided to the multiple camera module 106.
In some example implementations, if no error is received from the multiple camera module 106, a success message 306 is provided from the bridgeware layer 104 to the operating system layer 102. In some other example implementations, a success message is received from the multiple camera module 106 that indicates that the one or more open first camera commands 304 were successfully executed, and a success message 306 is provided from the bridgeware layer 104 to the operating system layer 102 in response to receiving the success message from the multiple camera module 106.
After providing the success message 306 that indicates a successful execution of the open first camera command 302, a next command for initializing the multiple camera module 106 may be received from the operating system layer 102. For example, an open second camera command 308 may be received from the operating system layer 102, and converted to one or more open second camera commands 310 using the bridgeware 104. The one or more open second camera commands 310 may then be provided to the multiple camera module 106. A success command 312 may be provided from the bridgeware layer 104 to the operating system layer 102 if the one or more open second camera commands 310 are successfully executed (such as by receiving a success message from the multiple camera controller or not receiving an error message from the multiple camera module 106).
The example operation for initializing the multiple camera module 106 may continue with one or more configure first camera commands 314 being received from the operating system layer 102 after the success message 312 is provided to the operating system layer 102. One or more example configure first camera commands 314 may include an exposure value, ISO, white balance, focal length, and target brightness for capturing images by a first camera (such as the first camera 204 in
The processor 208 or the image signal processor 216 may use the bridgeware 104 to convert the user specified camera settings or the default camera settings for the first camera (such as the configure first camera command 314) to one or more camera module specific commands (such as the configure first camera command 316). For example, the bridgeware 104 may be used by the processor 208 or the image signal processor 216 to convert a default exposure value command from the operating system layer 102 to a camera shutter speed command, an aperture size command, and/or a camera sensitivity command for the first camera of the multiple camera module 106. The process may continue with a success message 318, a camera module independent configure second camera command 320, a camera module specific command 322, and a success message 324.
After providing the success message 324 in response to configuring the second camera of the multiple camera module 106, an initialize buffer for the first camera command 326 may be received from the operating system layer 102. The buffer may be used to temporarily queue information from the first camera 204 before being processed by the camera controller 214 (such as image signal processor 216). The buffer may be in or coupled to the multiple camera module 202. Alternatively, the buffer may be in or coupled to the camera controller 214 (such as a buffer coupled to the image signal processor 216). The one or more first camera buffer initialization commands 328 may be provided from the bridgeware layer 104 to the multiple camera module 106.
After the success message 330 is provided to the operating system layer 102, the second camera buffer may be initialized (such as by using the initialize buffer for the second camera commands 332 and 334, and the success message 336). After initializing the second camera buffer, the first camera sensor may be enabled (such as by using the enable first camera sensor commands 338 and 340, and the success message 342). After enabling the first camera sensor, the second camera sensor may be enabled (such as by using the enable second camera sensor commands 344 and 346, and providing the success message 348).
As shown in the initialization process 300, conventional initialization of the multiple camera module 106 (such as the multiple camera module 202 of the device 200) includes successful execution of a command before execution of a subsequent command. For example, the second camera 206 is successfully configured before the first camera buffer may be initialized. As a result, none of the cameras of the multiple camera module may be used (such as to generate a preview, to capture an image, and so on) until all of the cameras of the multiple camera module are initialized.
In some example implementations, a device may initialize and use a camera of a multiple camera module before all of the cameras of the multiple camera module are initialized. For example, the device 200 may initialize and begin using the first camera 204 to generate a preview and/or capture an image before initializing the second camera 206 of the multiple camera module 202. In this manner, the device 200 may not execute one or more commands for initializing the second camera 206 before executing subsequent commands for initializing the first camera 204. However, the operating system layer 102 may wait for a success message from the bridgeware layer 104 regarding execution of a previous command for initializing the second camera 206 before a subsequent command to initialize the first camera 204 is provided to the bridgeware layer 104.
In some aspects, the device 200 may provide a success message without executing the corresponding command. For example, the processor 208 or the image signal processor 216 may use the bridgeware 104 to provide the success message 312 indicating that the second camera 206 is successfully opened without providing the one or more open second camera commands 310 to the multiple camera module 202. In some example implementations, one or more commands for initializing the second camera 206 of the multiple camera module 202 may be stored and executed at a later time. In one example, one or more commands from an operating system 102 for initializing the second camera 206 may be placed into a buffer and executed after initialization of the first camera 204. In another example, the one or more buffered commands for initializing the second camera 206 may be executed when no command for initializing the first camera 204 is to be executed (such as the processor 208 or the image signal processor 216 is idle and has time to execute one or more commands before receiving another command for initializing the first camera 204).
After receiving the first command (402), a second command for initializing a second camera may be received (404). For example, a camera module independent instruction of initializing the second camera 206 (
After receiving the second command (404), a third command for initializing the first camera 204 may be received (406), and the first command and the third command for initializing the first camera may be executed before executing the second command for initializing the second camera (408). For example, if open first camera command 302 in
After translating the received first command (504), the one or more commands specific to the multiple camera module 202 may be provided to the multiple camera module 202 for implementation (506). Additionally or alternatively, one or more of the camera module specific commands may be intended for the camera controller 214 (such as the image signal processor 216). For example, one or more of the commands may be for configuring one or more filters of the image signal processor 216. In this manner, the primary camera 204 of the multiple camera module 202 and the camera controller 214 may be configured using the one or more camera module specific commands.
After providing the one or more camera module specific commands for initializing the primary camera 204 (506), the one or more camera module specific commands are determined to be successfully executed (508). In one example, a success message or other indication may be received from the multiple camera module 202 to indicate that the one or more commands were successfully executed. In another example, the camera controller 214 may verify that the commands are successfully executed. In a further example, the camera controller does not receive an error message from the multiple camera module 202 after providing the camera module specific commands.
After determining successful execution of the one or more commands, a success message or other indication may be provided to the operating system layer 102 indicating that the first command from the operating system layer 102 for initializing the primary camera 204 was successfully executed (510). In response to providing a success message (510), a second camera module independent command for initializing an auxiliary camera (such as the second camera 206 of the multiple camera module 202) may be received from the operating system layer 102 (512). The second command may be buffered (514) for later execution (such as translation and execution of the one or more camera module specific commands).
The operating system 102 may not provide a subsequent command until receiving a success command or indication that the previous command was executed. Even though the second command is buffered for later execution (514), a success message indicating that the second command was successfully executed may be provided to the operating system layer 102 (516). In this manner, a third camera module independent command for initializing the primary camera 204 may be received from the operating system layer 102 before the second command is executed (518). The third command may then be translated into one or more camera module specific commands for initializing the primary camera 202 of the multiple camera module 202 (520), and the one or more camera module specific commands translated from the third command may be provided to the multiple camera module (522), while the second command is still buffered and not executed. Additional commands for initializing the auxiliary camera 206 may be buffered, and the subsequent commands for initializing the primary camera 204 may be executed. In this manner, the primary camera 204 may be initialized before the auxiliary camera 206.
The camera module independent commands 602, 608, 614, 620, 626, 632, 638, and 644 of
While all of the commands 608, 620, 632, and 642 are shown as being buffered before being executed, a subset of the commands may be buffered before execution. For example, one command may be buffered before executing the commands for enabling the auxiliary camera. The present disclosure should not be limited to a specific number of commands to be buffered. Additionally, while the timing diagrams show the commands being buffered before translation, one or more commands may first be translated into camera module specific commands, and the camera module specific commands are buffered for later execution. The present disclosure should not be limited to buffering the camera module independent commands. Furthermore, the present disclosure should not be limited to the described commands, as the commands are provided only for the purposes of describing the present disclosure.
When deferring execution of one or more commands for initializing a second camera 206, a success message or other indication may be provided for each of the deferred commands to pretend that execution of the corresponding command was successful. The deferred commands are then later executed to initialize the second camera 206. However, an error may occur when executing one of the deferred commands, even though a success message was previously provided for the deferred command. In some example embodiments, the multiple camera module 202 may be disabled (thus disabling the first camera 204) and the process for initializing the first camera 204 being repeated in initializing the multiple camera module 202.
For example, a buffer may have one or more commands queued for initializing the second camera 206. After initializing the first camera 204, the one or more queued commands may be executed in order to initialize the second camera 206. However, if one of the commands fails to execute, the multiple camera module 202 may provide an error message indicating the execution failure. In some example implementations, the bridgeware 104 may be used to indicate a hardware error for the multiple camera module 202 to the operating system layer 102. For example, the operating system layer 102 error message may be converted to an application specific error message for the camera application of the operating system 102 (such as by the HAL of the operating system 102). The camera application may thus be used to provide a close camera command for disabling the multiple camera module 202 in response to the error message, the HAL of the operating system 102 may be used to convert the command to a camera module independent command for disabling the multiple camera module, and the bridgeware 104 may be used to translate the camera module independent command to one or more camera module specific commands for disabling the multiple camera module 202. Disabling the multiple camera module 202 may include clearing or flushing the buffer of deferred commands for initializing the second camera 206.
Once the multiple camera module 202 is disabled (including disabling the first camera 204 and disabling the second camera 206), the operating system 102 may be provided a success message for disabling the multiple camera module. In response, the device 200 may attempt to again initialize the multiple camera module 202. In one example, initialization of the first camera 204 before initialization of the second camera 206 is repeated. In another example, the device 200 may revert to initializing all of the cameras of the multiple camera module 202 concurrently.
The techniques described herein may be implemented in hardware, software, firmware, or any combination thereof, unless specifically described as being implemented in a specific manner. Any features described as modules or components may also be implemented together in an integrated logic device or separately as discrete but interoperable logic devices. If implemented in software, the techniques may be realized at least in part by a non-transitory processor-readable storage medium (such as the memory 210 in the example device 200 of
The non-transitory processor-readable storage medium may comprise random access memory (RAM) such as synchronous dynamic random access memory (SDRAM), read only memory (ROM), non-volatile random access memory (NVRAM), electrically erasable programmable read-only memory (EEPROM), FLASH memory, other known storage media, and the like. The techniques additionally, or alternatively, may be realized at least in part by a processor-readable communication medium that carries or communicates code in the form of instructions or data structures and that can be accessed, read, and/or executed by a computer or other processor.
The various illustrative logical blocks, modules, circuits and instructions described in connection with the embodiments disclosed herein may be executed by one or more processors, such as the processor 208 or the image signal processor 216 in the example device 200 of
While the present disclosure shows illustrative aspects, it should be noted that various changes and modifications could be made herein without departing from the scope of the appended claims. For example, while the first camera 204 is described as being a primary camera and the second camera 206 is being an auxiliary camera in some example implementations, the first camera 204 and the second camera 206 may both be auxiliary cameras or the second camera 206 may be the primary camera. Additionally, the functions, steps or actions of the method claims in accordance with aspects described herein need not be performed in any particular order unless expressly stated otherwise. For example, the steps of the example operations and timing diagrams illustrated in