CAMERA ROTATION FOR MULTI-POSTURE COMPUTING DEVICES

The techniques disclosed herein enable systems to perform automatic camera rotation for multi-posture devices (e.g., tablet devices, foldable devices, external displays with built-in webcams) irrespective of a current posture of the computing device. This is accomplished by reformatting an image captured by an image sensor using an image signal processer prior to encoding for output. To reformat the image, the computing device determines an angle of rotation for the computing device relative to a default posture. The image is then rotated based on the angle of rotation such that the image appears right side up for the current posture. Subsequently, the image is cropped from its original aspect ratio to a predetermined aspect ratio. Finally, the image is encoded to generate an output stream that can be received by an application. In this way, the system maintains visual consistency even as a user rotates the device.

BACKGROUND

In recent years, communication applications and platforms have experienced significant proliferation as more users utilize text and video features to communicate for professional and personal purposes. As remote work grows in popularity, individual users and large organizations alike demand smooth experiences to maintain efficiency and facilitate effective communication. To improve the flexibility of their applications, many communication platforms have expanded compatibility to include a wide variety of device types. For example, most major applications support desktop devices, smartphone devices, laptop devices, tablet devices, and foldable devices.

An important feature of these communications platforms is video calling which enables users of various device types to see and speak to each other. For example, a user of a desktop device places a camera on their desk and broadcasts a video stream to a communication session. However, interacting with communication platforms using other device types may involve different camera placements and setups. For instance, a user of a tablet device may use either a front-facing or rear-facing camera in a video call. In addition, the user may hold the tablet in different postures, such as a horizontal “landscape” posture or a vertical “portrait” posture. Because the cameras of the tablet device are typically fixed to the device, the application must consider how these postures affect the output of an image. In addition, camera placement is not identical across all models of tablet devices, smartphone devices, foldable devices, and so forth.

For example, while the user holds a tablet device in a first posture (e.g., landscape posture), the user's image appears in a video call right side up. However, if the user rotates the tablet device ninety degrees to another posture (e.g., portrait posture), the communication application must detect the changed posture and rotate the user's image accordingly. Otherwise, the user may appear upside down, sideways, or in any number of unwanted positions. Naturally, inconsistencies in the video call experience can oftentimes lead to frustration, decreased productivity, and other detrimental factors that can cause a user to stop using the communication platform, or the computing device altogether.

SUMMARY

The techniques described herein provide systems for enhancing the functionality of multi-posture computing devices by introducing automatic rotation and/or cropping of camera images to maintain a consistent output stream irrespective of the posture of an associated computing device (e.g., a tablet device, a foldable device, an external display with a built-in webcam). This is accomplished by reformatting an input image received from an image sensor prior to outputting the image to an application for display and/or transmission. In various examples, reformatting the image involves rotating the image based on a current rotation of the computing device from a default posture and/or cropping the image to a predetermined output resolution and/or aspect ratio. Furthermore, image reformatting can be performed using a variety of methods. In one example, an image signal processor (ISP) is configured to reformat images and generate an output stream. In an alternative example, a camera module is configured with a software driver to enable the camera module to reformat images.

The techniques discussed herein are implemented in association with any computing device that includes a “fixed” camera. A camera is fixed if the image sensor rotates when the computing device rotates. Moreover, for the sake of discussion, a “posture” includes any physical orientation (e.g., a horizontal orientation or a vertical orientation) that can be measured by a position sensor to inform a fixed camera on image reformatting. In addition, a “posture” includes any software defined orientations that can cause a change in the user interface of the computing device such as screen auto-rotate and/or rotation lock.

In this way, the disclosed system addresses several technical challenges associated with image processing for video capture (e.g., video calling, video recording, livestreaming) in multi-posture computing devices. For instance, typical solutions for video capture on multi-posture devices rely upon individual applications to determine the current posture of the device and rotate the output image accordingly. However, not all applications are designed with every computing form factor in mind. In one example, a desktop device, a tablet device, and a laptop device all utilize the same operating system to enable broad application compatibility. Unfortunately, a communication application for the operating system may have been designed with only desktop devices in mind. Consequently, a user of a tablet device may experience inconsistencies during a video call while holding the tablet device in various postures. Such situations also apply to other handheld devices such as smartphones and foldable devices. As mentioned above, this can lead to a degraded and frustrating user experience.

Moreover, by relying upon applications to produce correct camera behaviors, the applications must also anticipate dynamically changing aspect ratios at runtime. In an illustrative example, a tablet device is equipped with a front-facing camera with a 16:9 aspect ratio that is aligned with the aspect ratio of the display of the tablet device. Stated another way, the camera is mounted on the long edge of the tablet device. When a user is holding the tablet device in a landscape posture, the output image from the camera appears in a communication application as an image with a 16:9 aspect ratio. If the user rotates the tablet device to hold the tablet device in a portrait posture, the tablet device can detect the changed posture and rotate the output image accordingly. However, the output image from the camera suddenly changes to a 9:16 aspect ratio. This further adds to the inconsistency and awkwardness of the user experience in typical video calling solutions.

In contrast, by reformatting the image using the camera ISP, the disclosed system provides a consistent output stream to various applications. That is, the output image remains in a fixed orientation and aspect ratio regardless of the device posture, which can constantly change. As such, the camera can be configured by the operating system to appear, to applications, as an external device despite being integrated into the computing device. Consequently, the disclosed system enables a smooth and consistent user experience in video calls irrespective of device type and/or device posture. Furthermore, the techniques discussed herein remove the burden from individual applications to correctly rotate output images and account for dynamically changing aspect ratios. In this way, the disclosed system improves the efficiency of communications applications by requiring the application to simply display and/or transmit the formatted output stream thereby reducing resource usage.

DETAILED DESCRIPTION

The techniques described herein improve the functionality of multi-posture computing devices in the context of video communications by introducing camera rotation that enables consistent output images regardless of device type and/or device posture. An example of a multi-posture computing device is a tablet device which a user can hold in various postures (e.g., right side up landscape posture, upside down landscape posture, portrait posture). Unlike traditional computing form factors, such as desktop devices and laptop devices which are not typically rotated, multi-posture devices are intended to be rotated to enable a user to comfortably work and/or consume media among other activities. However, this dynamic rotation introduces several peculiarities when the user is utilizing the camera for video calling or other video use scenarios.

For instance, traditional computing devices follow desktop or laptop clamshell form factors. In these form factors, there is no concept of dynamic rotation based on the current posture of the device. Stated another way, a laptop device is intended for use strictly in an upright laptop posture while a desktop device typically has external displays configured in a landscape or portrait format. When a user attaches a camera to one of these form factors, the camera is typically placed such that the camera (e.g., a webcam) is aligned with the upper edge of the display. As such, communication applications are typically designed with this assumption in mind.

As tablet and other multi-posture form factors gain popularity, similar assumptions generally still hold true as users tend to hold tablet devices in a landscape posture for video calling despite having the capability to freely rotate the table devices. Nonetheless, various operating systems for tablet devices provide mechanisms such as application programming interfaces (APIs) that enable support for applications to perform image rotation based on the current posture of the device. This accommodates a situation where a user wishes to participate in a video call while the device is in a portrait posture. As such, the burden of correctly rotating camera images falls to individual communication applications. Unfortunately, implementing camera rotation behavior is inconsistent on a per application basis leading to a frustrating user experience. For instance, the image of a user may be incorrectly rotated when presented in a video call causing the user to appear upside down, sideways, or any number of undesirable positions. This is illustrated in examples provided below.

To deliver a more natural camera experience in multi-posture computing devices, the disclosed system instead places the responsibility for image rotation on components (e.g., an image signal processor (ISP), a driver) of the camera. That is, the ISP or the driver is aided by various operating system modules and/or on-device sensors. The ISP or driver first receives an image from an image sensor that is fixed to the multi-posture computing device. Because this is a raw image from the image sensor, the image is configured in the full aspect ratio of the camera. In various examples, integrated cameras have a natural aspect ratio of 4:3. For reference, a typical widescreen display such as a computer monitor has a 16:9 aspect ratio.

After receiving the image from the image sensor, an angle of rotation is determined for the computing device. For instance, the operating system can poll various sensors such as an accelerometer to determine the current posture and/or angle of the computing device. In various examples, the angle of rotation is expressed relative to a default posture of the computing device. For instance, a tablet device may be configured with a default landscape posture. Consequently, a portrait posture of the tablet will be interpreted by the operating system as a ninety-degree (90°) angle of rotation.

The ISP or driver then rotates the image based on the angle of rotation of the computing device. In this way, an upper edge of the image is correctly aligned with the current upper edge of the computing device. Consequently, the resultant image appears right side up regardless of the current angle of rotation of the computing device. For example, if a user is in a video call while holding their tablet in the default landscape posture, no rotation is necessary, and the user appears right side up to other users in the video call. However, if the user changes posture and rotates the tablet ninety degrees to a portrait posture, the image is rotated in kind to maintain the right side up appearance for the user's video feed.

In addition to rotation, the image can subsequently be cropped to fit a predefined output aspect ratio. As mentioned above, many cameras have a default aspect ratio of 4:3 while many computer displays have an aspect ratio of 16:9. To suit the format of these displays, the ISP or the driver can be configured with an output aspect ratio which is then applied to images from the image sensor. In this way, the ISP or driver generates an output stream with a consistent posture and aspect ratio to streamline the user experience. The rotated and/or cropped image is then encoded to generate an output stream that is provided to an application that is utilizing the camera. As mentioned above, an example includes a video calling application that displays and/or transmits video images.

Various examples, scenarios, and aspects that enable automatic camera rotation and/or cropping on multi-posture computing devices are described below with respect toFIGS.1A-6.

FIG.1Aillustrates an example environment100in which a tablet device102is oriented in a landscape posture. That is, the tablet device102is positioned such that a longer side of the tablet device102is an upper edge104. In this landscape posture, an image sensor106that is fixed to the tablet device102lies on the upper edge104. The image sensor106captures an image108which itself comprises an upper edge110and a lower edge112. The upper edge110is shown using the diagonal shading while the lower edge112is shown using the dotted shading. In various examples, the landscape posture of the tablet device102shown inFIG.1, in which the image sensor106is located at the upper edge104, is considered a default posture as the aspect ratio of the image sensor106is aligned with an intended output aspect ratio. Moreover, a user often uses the landscape posture when interacting with a video call application114.

Accordingly, no rotation needs to be applied to the image108to generate the output image116as the upper edge110of the image108already aligns with the upper edge104of the tablet device102. However, as mentioned above, the image108received from the image sensor106is in a default aspect ratio (e.g., 4:3). To suit the application114, the image108is cropped to a 16:9 aspect ratio to generate the output image116. As shown in the upper middle ofFIG.1A, the upper edge110and lower edge112of the image correspond to the upper edge118and lower edge120of the output image116(e.g., the upper and lower edges remain unchanged). However, the output image116is cropped from the original image108as shown by the visible shading for the upper edge118and the lower edge120. The output image116is subsequently provided to the application114for use in the video call. As shown inFIG.1A, an output preview122comprising the output image116is displayed in the application concurrently with other participants of the video call to provide the user a video preview as they appear to the other users (e.g., a “Me” or a “Self” view).

Proceeding toFIG.1B, a tablet device124in an alternative landscape posture is shown in which the image sensor106is now located on a lower edge126of the tablet device124in response to a user rotating the tablet device 180 degrees from the default posture inFIG.1A. While still in a landscape posture, the image sensor106is now physically upside down. This posture is detected by the tablet device124and/or various operating system components of the tablet device124which can be used to determine an angle of rotation. In this example, the angle of rotation is one hundred and eighty degrees (180°). Furthermore, the image sensor106, having been rotated upside down, now captures an image128that is different from the image108shown inFIG.1A. As shown, inFIG.1B, the upper edge110and the lower edge112of the image128are reversed due to the rotation of the image sensor106. Accordingly, in addition to the cropping discussed above, the image128is also rotated to generate an output image130that appears identical to the output image116shown inFIG.1A, despite the change in device posture based on the rotation. As such, the upper edge118of the output image130(after the rotation) aligns with the upper edge104of the tablet device124. Intuitively, without adequately rotating the image128, the resultant output image130would have appeared upside down when encoded and rendered by the application114at the tablet device124.

Turning now toFIG.2, a tablet device202is positioned in a portrait posture rather than the different landscape postures discussed above with respect toFIGS.1A and1B. As shown inFIG.2, rotating the tablet device202to the portrait posture changes the current upper edge204of the tablet device202to a shorter side of the tablet device202. As such, the image sensor106is no longer aligned with the upper edge204of the tablet device202. In addition, the video calling application114is also rotated to fit the altered dimensions of the screen of the tablet device202. In contrast to the example discussed above with respect toFIG.1A, additional processing must be carried out to ensure an output image206remains consistent with the output image116of the default landscape posture.

As discussed above, the image108ofFIG.1Ais already right side up and thus requires no rotation to generate an output image116that appears right side up when rendered by the application114. In contrast, the image208captured by the image sensor106inFIG.2appears sideways if left unaltered due to the changed posture of the image sensor106. Accordingly, the upper edge110and the lower edge112fromFIG.1Aare redefined in this portrait posture context as a left edge210and a right edge212respectively. As shown inFIG.2, the left edge210is denoted by the diagonal line shading while the right edge212is denoted by the dotted shading. While the portrait posture of the tablet device202illustrated inFIG.2places the image sensor106on the left side of the tablet device202, a portrait posture in which the image sensor106is located on the right side is also considered and handled in a similar manner.

To maintain visual consistency within the video call application114, the image208is formatted such that the output image206and the resulting output preview214appear identical to the output image116and output preview122in the default landscape posture. Stated alternatively, an image208captured by the image sensor106is formatted to a predetermined posture and a predetermined aspect ratio and/or resolution to generate an output image206. In the example ofFIG.2, the angle of rotation is determined to be two hundred and seventy degrees (270°), e.g., in a clockwise direction. Accordingly, the image208is rotated two hundred and seventy degrees (270°) to align the left edge210of the image208with the upper edge204of the tablet device202. In this way, the image208appears right side up by aligning what is visually the upper edge of the image208(e.g., the top of the user's head) with the upper edge204of the tablet device202.

In various examples, a predefined rotation posture for the image is selected using the angle of rotation and applied to the image. For instance, the angle of rotation is determined using a three-hundred-and-sixty-degree perspective that is divided into ninety-degree increments. That is, a first rotation to the right (i.e., in the clockwise direction) constitutes a ninety-degree (90°) rotation while a second rotation is a one-hundred-eighty-degree (180°) rotation, and a third rotation is a two-hundred-seventy-degree (270°) rotation. An actual angle of rotation can be associated with the closest predefined rotation posture (e.g., one of the ninety-degree increments—zero degrees (0°), ninety degrees (90°), one hundred and eighty degrees (180°), two hundred and seventy degrees (270°)). For example, if a user rotates the tablet device202to a one-hundred-and-five-degree (105°) angle, it is interpreted as being a predefined rotation posture of ninety degrees (90°). Accordingly, the image208is rotated ninety degrees (90°) resulting in an output image206, where the user may still be slightly skewed. However, if a user rotates the tablet device202to a one-hundred-forty-five-degree (145°) angle, it is interpreted as being a predefined rotation posture of one hundred eighty degrees (180°). Accordingly, the image208is rotated one hundred and eighty degrees (180°) resulting in an output image206, where the user may still appear slightly skewed.

In an alternative example, the angle of rotation is applied to the image precisely. For instance, if the user rotates the tablet device202to a forty-five-degree (45°) angle, a forty-five-degree (45°) rotation is applied to the image208to maintain a right-side-up appearance with no skew. In still another example, the tablet device202is configured such that angle of rotation is determined as a left or right rotation. For instance, rotating the tablet device202from a default landscape posture to the right constitutes a ninety-degree (90°) rotation. Conversely, rotating the tablet device202from a default landscape posture to the left constitutes a negative ninety-degree (−90°) rotation. Irrespective of how the angle of rotation is calculated, the image208is rotated based on the angle of rotation.

After applying the angle of rotation, the image208is cropped to a predetermined output aspect ratio and/or output resolution. For example, the image208is cropped down from the native 4:3 aspect ratio of the image sensor to a predefined output aspect ratio of 16:9. In another example, the image208is cropped form a native resolution of five megapixels or 2592×1944 to a predefined output resolution of 1080p or 1920×1080. The image208is now ready to be encoded by the tablet device202to generate an output image206, e.g., for display and transmission by the video calling application114.

Turning now toFIG.3A, aspects of a system300for enabling camera rotation and reformatting features for multi-posture devices are shown and described. As discussed above, an image sensor106that is fixed to a computing device302captures an image304. The image304contains a subject306which is usually a person in the context of video capture (e.g., video calling, video capture, livestreaming). In addition, the image304is formatted in an original resolution308and original aspect ratio310. As shown inFIG.3A, the image sensor106is a five-megapixel device resulting in an original resolution308of 2592×1944 and an original aspect ratio310of 4:3. The image304is then provided to an image signal processor312for reformatting. In various examples, the image sensor106and the image signal processor312are components of a camera module that is fixed to the computing device302. Moreover, the computing device302is any multi-posture computing device that can be freely rotated by a user such as a tablet device, a foldable device, a smartphone device, and so forth.

When the image304is captured, the computing device302proceeds to determine a rotation angle314defining the current posture of the computing device302. As shown by the posture of the computing device302, the computing device302is currently in the default landscape posture shown inFIG.1A. Accordingly, the image sensor106is aligned with the computing device302resulting in a rotation angle314of zero degrees (0°). Consequently, the computing device302determines that there is no need to rotate the image304. In various examples, the rotation angle314is determined by a sensor onboard the computing device302such as an accelerometer, a geomagnetic field sensor, and the like.

In addition, the computing device302is configured with an output aspect ratio316and/or an output resolution318. The output aspect ratio316and the output resolution318define the expected dimensions of an output image320. Regardless of the original resolution308and the original aspect ratio310of the image304, the output image320is formatted using the output aspect ratio316and/or the output resolution318. Accordingly, the image signal processor312crops the previously rotated image304from the original aspect ratio310to the output aspect ratio316. Alternatively, the rotated image304is cropped from the original resolution308to the output resolution318. Finally, to generate the output image320, the image signal processor312encodes the image304which has been reformatted to the output aspect ratio316and/or the output resolution318.

In various examples, the output aspect ratio316and the output resolution318are configured on a per application basis. Accordingly, the video calling application114discussed above may have a first output aspect ratio316and output resolution318while a different application defines a different output aspect ratio and output resolution. In an alternative example, the output aspect ratio316and the output resolution318are defined device-wide as part of the operating system and are thus applied regardless of the application. Moreover, the device-wide output aspect ratio316and the output resolution318can be manually adjusted on a per application basis using corresponding settings to suit user preferences.

In addition, the rotation and cropping processing of the image304can be suspended in response to a still image capture command322. For example, if a user wishes to use the computing device302to take a picture rather than make a video call, automatically rotating and cropping the image304as discussed can lead to a frustrating user experience as the user receives an output image320that is very different from the image304shown in a camera viewfinder. Consequently, the rotation and cropping operations may be configured to be called upon only when desired.

Turning now toFIG.3B, the computing device302is physically rotated to a portrait posture such that the image sensor106is not aligned with the current upper edge of the computing device302. Consequently, an image324captured by the image sensor106is also rotated and is now formatted in a different original aspect ratio326. Similarly, the rotation results in a different original resolution328for the image324. In this example, the subject306is shown on its side due to the rotated posture of the computing device302. Accordingly, the computing device302determines a different rotation angle330. As shown inFIG.3B, the rotation angle is two hundred and seventy degrees (270°). Alternatively, the rotation angle330can be expressed as a negative ninety degrees (−90°) to express a rotation to a portrait posture in the opposite direction.

To generate the same output image320as the example ofFIG.3A, the image signal processor312applies the rotation angle330to the image324. As discussed above, the upper edge of the image324(as shown by the horizontal line shading) is aligned with the upper edge204of the computing device302. In this way, the rotation of the computing device302is removed from the image324and ensures the subject306appears right side up in the output image320. Once properly rotated, the image324is cropped by the image signal processor312to conform to the output aspect ratio316and/or the output resolution318to generate a processed image that can be encoded to generate the output image320.

Turning toFIG.3C, another example situation is shown in which the computing device302is rotated such that the image sensor106is placed on the current bottom edge of the computing device302. As such, the subject306appears upside down when an image332is captured by the image sensor106and provided to the image signal processor312. Since the computing device302is once again in a horizontal landscape posture, albeit an alternative landscape posture when compared to the default baseline posture, the original resolution308and the original aspect ratio310are the same as the image304shown inFIG.3A. In addition, based on the current posture of the computing device302, the rotation angle334is determined to be one hundred and eighty degrees (180°). Accordingly, the rotation angle334is applied to the image332by the image signal processer312so that the subject306appears right side up. Similar to the prior examples, the image signal processer312crops the rotated image to the dimensions defined by the output aspect ratio316and the output resolution318. Finally, the output image320is generated by the image signal processer312by encoding the processed (i.e., rotated and/or cropped) image.

In the examples discussed herein with respect toFIGS.3A-3C, the output aspect ratio316is 16:9 and the output resolution318is 1920×1080. By formatting content for dimensions for common widescreen displays, the system300creates a visually consistent and aesthetically pleasing user experience.

Proceeding now toFIG.4, additional aspects of an example system400for enabling camera rotation and reformatting features for multi-posture devices are shown and described. In this example, a computing device402is oriented in a landscape posture. As such, an image sensor106is aligned with an upper edge404of the computing device402. A user of the computing device402interacts with a display406of the computing device402to use an application408and participate in a communication session410. For example, the communication session410is a video call with a plurality of other users. To participate in the communication session410, the image sensor106captures image(s)412for transmission in the application408. As discussed above, the image(s)412captured by the image sensor106are formatted in a first resolution414and aspect ratio416. For instance, the image sensor106is a five-megapixel sensor which produces an image412with a native resolution414of 2592×1944 in an aspect ratio416of 4:3. The image412is then provided to an image signal processor312for to generate an output stream418.

As mentioned above, by reformatting the image412using the image signal processer312(or alternatively a driver), the burden of correctly formatting the image412is removed from the application408. Consequently, the image sensor106can be configured to appear to the operating system424and/or the application408as an external device. In this way, the system400simplifies the image processing demands for the application408by enabling the image sensor106to prevent the application408from further formatting (e.g., rotating, cropping) the image. Stated another way, by formatting the image412using the image signal processer312, the application408merely needs to receive and display the image412thereby streamlining the logic of the application408and improving performance.

To maintain visual consistency, the image signal processer312is configured to align the image412with the upper edge404of the computing device402(e.g., upper edge110). This is achieved by utilizing a position sensor420to calculate a rotation angle422. The position sensor420is any hardware and/or software component that enables an operating system424to determine the current position of the computing device402. In one example, the position sensor420includes an accelerometer, a geomagnetic field sensor, and the like. As shown and discussed above, the rotation angle422enables the image signal processer312to maintain a right side up appearance for the image412by rotating the image412based on the current rotation of the device402.

In addition, the operating system424is configured with output dimensions426that define an output aspect ratio428and/or an output resolution430for the output stream418. The output dimensions426are provided to the image signal processor312along with the rotation angle422for reformatting the image412. Once configured, the image signal processer312rotates the image412based on the rotation angle422. In addition, the image412is subsequently cropped to the output dimensions426. After reformatting the image412, the image signal processer312encodes the image412to generate the output stream418. The output stream is then provided to the application408for rendering and/or transmission in the communication session410. In various examples, that the output dimensions426are applied to the image412independent of the current posture of the computing device402as defined by the rotation angle422. In this way, the image signal processer312generates an output stream418that is visually consistent thereby streamlining the user experience.

Turning now toFIG.5, aspects of a routine500for enabling camera rotation for multi-posture computing devices is shown and described. With reference toFIG.5, the routine500begins at operation502, where a device and/or camera module that is fixed to a computing device captures an image that is formatted in a first aspect ratio.

Next, at operation504, the device and/or camera module determines and/or receives an angle of rotation of the computing device based on the current posture of the device relative to a default posture of the device.

Then, at operation506, the device and/or camera module generates a rotated image by rotating the image based on the angle of rotation such that an upper edge of the image aligns with the upper edge of the device in the current posture.

Subsequently, at operation508, the device and/or camera module generates a processed image by cropping the image from the first aspect ratio to a second aspect ratio defined by the computing device, irrespective of the angle of rotation.

Next, at operation510, the device generates an output stream using the processed image.

Finally, at operation512, the output stream is provided to an application for rendering at the computing device.

For ease of understanding, the processes discussed in this disclosure are delineated as separate operations represented as independent blocks. However, these separately delineated operations should not be construed as necessarily order dependent in their performance. The order in which the process is described is not intended to be construed as a limitation, and any number of the described process blocks may be combined in any order to implement the process or an alternate process. Moreover, it is also possible that one or more of the provided operations is modified or omitted.

The particular implementation of the technologies disclosed herein is a matter of choice dependent on the performance and other requirements of a computing device. Accordingly, the logical operations described herein are referred to variously as states, operations, structural devices, acts, or modules. These states, operations, structural devices, acts, and modules can be implemented in hardware, software, firmware, in special-purpose digital logic, and any combination thereof. It should be appreciated that more or fewer operations can be performed than shown in the figures and described herein. These operations can also be performed in a different order than those described herein.

For example, the operations of the routine500can be implemented, at least in part, by modules running the features disclosed herein can be a dynamically linked library (DLL), a statically linked library, functionality produced by an application programing interface (API), a compiled program, an interpreted program, a script, or any other executable set of instructions. Data can be stored in a data structure in one or more memory components. Data can be retrieved from the data structure by addressing links or references to the data structure.

Although the illustration may refer to the components of the figures, it should be appreciated that the operations of the routine500may be also implemented in other ways. In addition, one or more of the operations of the routine500may alternatively or additionally be implemented, at least in part, by a chipset working alone or in conjunction with other software modules. In the example described below, one or more modules of a computing system can receive and/or process the data disclosed herein. Any service, circuit, or application suitable for providing the techniques disclosed herein can be used in operations described herein.

FIG.6shows additional details of an example computer architecture600for a device, such as a computer or a server configured as part of the cloud-based platform or system100, capable of executing computer instructions (e.g., a module or a program component described herein). The computer architecture600illustrated inFIG.6includes processing system602, a system memory604, including a random-access memory606(RAM) and a read-only memory (ROM)608, and a system bus610that couples the memory604to the processing system602. The processing system602comprises processing unit(s). In various examples, the processing unit(s) of the processing system602are distributed. Stated another way, one processing unit of the processing system602may be located in a first location (e.g., a rack within a datacenter) while another processing unit of the processing system602is located in a second location separate from the first location.

Processing unit(s), such as processing unit(s) of processing system602, can represent, for example, a CPU-type processing unit, a GPU-type processing unit, a field-programmable gate array (FPGA), another class of digital signal processor (DSP), or other hardware logic components that may, in some instances, be driven by a CPU. For example, illustrative types of hardware logic components that can be used include Application-Specific Integrated Circuits (ASICs), Application-Specific Standard Products (ASSPs), System-on-a-Chip Systems (SOCs), Complex Programmable Logic Devices (CPLDs), and the like.

A basic input/output system containing the basic routines that help to transfer information between elements within the computer architecture600, such as during startup, is stored in the ROM608. The computer architecture600further includes a mass storage device612for storing an operating system614, application(s)616, modules618, and other data described herein.

The mass storage device612is connected to processing system602through a mass storage controller connected to the bus610. The mass storage device612and its associated computer-readable media provide non-volatile storage for the computer architecture600. Although the description of computer-readable media contained herein refers to a mass storage device, the computer-readable media can be any available computer-readable storage media or communication media that can be accessed by the computer architecture600.

Computer-readable media includes computer-readable storage media and/or communication media. Computer-readable storage media includes one or more of volatile memory, nonvolatile memory, and/or other persistent and/or auxiliary computer storage media, removable and non-removable computer storage media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules, or other data. Thus, computer storage media includes tangible and/or physical forms of media included in a device and/or hardware component that is part of a device or external to a device, including RAM, static RAM (SRAM), dynamic RAM (DRAM), phase change memory (PCM), ROM, erasable programmable ROM (EPROM), electrically EPROM (EEPROM), flash memory, compact disc read-only memory (CD-ROM), digital versatile disks (DVDs), optical cards or other optical storage media, magnetic cassettes, magnetic tape, magnetic disk storage, magnetic cards or other magnetic storage devices or media, solid-state memory devices, storage arrays, network attached storage, storage area networks, hosted computer storage or any other storage memory, storage device, and/or storage medium that can be used to store and maintain information for access by a computing device.

In contrast to computer-readable storage media, communication media can embody computer-readable instructions, data structures, program modules, or other data in a modulated data signal, such as a carrier wave, or other transmission mechanism. As defined herein, computer storage media does not include communication media. That is, computer-readable storage media does not include communications media consisting solely of a modulated data signal, a carrier wave, or a propagated signal, per se.

According to various configurations, the computer architecture600may operate in a networked environment using logical connections to remote computers through the network620. The computer architecture600may connect to the network620through a network interface unit622connected to the bus610. The computer architecture600also may include an input/output controller624for receiving and processing input from a number of other devices, including a keyboard, mouse, touch, or electronic stylus or pen. Similarly, the input/output controller624may provide output to a display screen, a printer, or other type of output device.

The software components described herein may, when loaded into the processing system602and executed, transform the processing system602and the overall computer architecture600from a general-purpose computing system into a special-purpose computing system customized to facilitate the functionality presented herein. The processing system602may be constructed from any number of transistors or other discrete circuit elements, which may individually or collectively assume any number of states. More specifically, the processing system602may operate as a finite-state machine, in response to executable instructions contained within the software modules disclosed herein. These computer-executable instructions may transform the processing system602by specifying how the processing system602transition between states, thereby transforming the transistors or other discrete hardware elements constituting the processing system602.

Example Clause A, a method comprising: capturing, by an image sensor fixed to a computing device, an image formatted in a first aspect ratio; determining an angle of rotation of the computing device based on a current posture of the computing device and a default posture of the computing device, wherein the current posture of the computing device has an upper edge; generating a rotated image by rotating the image based on the angle of rotation of the computing device such that an upper edge of the image aligns with the upper edge of the current posture of the computing device; generating a processed image by cropping the rotated image from the first aspect ratio to a second aspect ratio defined by the computing device; generating an output stream using the processed image; and providing the output stream to an application for rendering at the computing device.

Example Clause B, the method of Example Clause A, wherein rotating the image comprises: selecting a predefined rotation posture for the image using the angle of rotation; and applying the predefined rotation posture to the image.

Example Clause C, the method of Example Clause B, wherein the predefined rotation posture comprises one of a ninety-degree rotation posture, a one-hundred-eighty-degree rotation posture, and a two-hundred-seventy-degree rotation posture.

Example Clause D, the method of any one of Example Clause A through C, wherein the angle of rotation of the computing device is determined by a position sensor of the computing device.

Example Clause E, the method of any one of Example Clause A through D, wherein the application is prevented from rotating the image.

Example Clause F, the method of any one of Example Clause A through E, wherein the application is a communications application for video conferencing.

Example Clause G, the method of any one of Example Clause A through F, wherein cropping the image further comprises: receiving a predetermined resolution for the output stream defined by the computing device; and cropping the image from the first aspect ratio to the second aspect ratio while maintaining the predetermined resolution for the output stream.

Example Clause H, a computing device, comprising: a processing system; and a computer-readable storage medium having encoded thereon computer-readable instructions that, when executed by the processing system, cause the system to: capture an image using an image sensor fixed to the computing device; determine an angle of rotation of the computing device based on a current posture of the computing device and a default posture of the computing device, wherein the current posture of the computing device has an upper edge; generating a rotated image by rotating the image based on the angle of rotation of the computing device such that an upper edge of the image aligns with the upper edge of the current posture of the computing device; generate an output stream using the rotated image; and provide the output stream to an application for rendering.

Example Clause I, the computing device of Example Clause H, wherein the image is rotated by a driver that is associated with the image sensor.

Example Clause J, the computing device of Example Clause H, wherein the image is rotated by an image signal processor that is associated with the image sensor.

Example Clause K, the computing device of any one of Example Clause H through J, wherein the angle of rotation of the computing device is determined by a position sensor of the computing device.

Example Clause L, the computing device of any one of Example Clause H through K, wherein the image sensor is configured to prevent the application from rotating the image.

Example Clause M, the computing device of any one of Example Clause H through L, wherein the rotated image is formatted in a first aspect ratio and the computer-readable instructions further cause the computing device to generate a processed image by cropping the rotated image from the first aspect ratio to a second aspect ratio defined by the computing device.

Example Clause N, the computing device of Example Clause M, wherein: the computer-readable instructions further cause the computing device to receive a predetermined resolution for the output stream defined by the computing device; and the predetermined resolution is maintained while the rotated image is cropped from the first aspect ratio to the second aspect ratio.

Example Clause O, a device, comprising: an image sensor fixed to a computing device; an image signal processor; and a computer-readable storage medium having encoded thereon computer-readable that when executed by the image signal processor, causes the device to: receive, from the image sensor, an image; receive an angle of rotation of the computing device based on a current posture of the computing device and a default posture of the computing device, wherein the current posture of the computing device has an upper edge; generate a rotated image by rotating the image based on the angle of rotation of the computing device such that an upper edge of the image aligns with the upper edge of the computing device; generate an output stream using the rotated image; and provide the output stream to an application for rendering at the computing device.

Example Clause P, the device of Example Clause O, wherein the current angle of rotation of the computing device is determined by a position sensor and received from an operating system.

Example Clause Q, the device of Example Clause O or Example Clause P, wherein rotating the image comprises: selecting a predefined rotation posture for the image using the angle of rotation; and applying the predefined rotation posture to the image.

Example Clause R, the device of Example Clause Q, wherein the predefined rotation posture comprises one of a ninety-degree rotation posture, a one-hundred-eighty-degree rotation posture, and a two-hundred-seventy-degree rotation posture.

Example Clause S, the device of any one of Example Clause O through R, wherein the rotated image is formatted in a first aspect ratio and the computer-readable instructions further cause the device to generate a processed image by cropping the rotated image from the first aspect ratio to a second aspect ratio defined by the computing device.

Example Clause T, the device of Example Clause S, wherein: the computer-readable instructions further cause the device to receive a predetermined resolution for the output stream defined by the computing device; and the predetermined resolution is maintained while the rotated image is cropped from the first aspect ratio to the second aspect ratio.

The terms “a,” “an,” “the” and similar referents used in the context of describing the invention (especially in the context of the following claims) are to be construed to cover both the singular and the plural unless otherwise indicated herein or clearly contradicted by context. The terms “based on,” “based upon,” and similar referents are to be construed as meaning “based at least in part” which includes being “based in part” and “based in whole” unless otherwise indicated or clearly contradicted by context.

In addition, any reference to “first,” “second,” etc. elements within the Summary and/or Detailed Description is not intended to and should not be construed to necessarily correspond to any reference of “first,” “second,” etc. elements of the claims. Rather, any use of “first” and “second” within the Summary, Detailed Description, and/or claims may be used to distinguish between two different instances of the same element (e.g., two different postures).