Nový iPhone nabídne nejspíš hlavně lepší foťák

1. 6. 2021

Sdílet

Autor: Apple
Největším tahákem nových iPhonů by měl být hlavně lepší fotoaparát.

Sotva půl roku je venku iPhone 12, fanoušci už se však těší na příští model. Ať už se bude jmenovat iPhone 13, nebo iPhone 12s, už teď se tuší, jaký bude. Pojďme si shrnout, co zatím víme.

 

Lepší fotoaparát

Čerstvé právy serveru DigiTimes hovoří o tom, že velkou proměnou tentokrát projde fotoaparát. Telefony s Androidem by měl bezkonkurenčně předčit zejména díky technologii stabilizace obrazu, která stabilizaci uplatňuje na všech čtyřech čočkách fotoaparátu, tzv. sensor-shift optical image stabilization nebo též IBIS (In-Body Image Stabilization), a která byla dosud dostupná jen na modelech iPhone 12 Max Pro.

Apple zároveň nadále zmenšuje výřez telefonu, tentokrát díky novému typu VCSEL diod použitých v TrueDepth kameře, které mají být až o polovinu menší než ty dosud používané a navíc levnější. Menší výřez by teoreticky mohl znamenat více prostoru pro stavový řádek telefonu. Dle některých nepotvrzených zpráv by zároveň součástí všech modelů nové řady měl být též LiDAR senzor, byť jiné zdroje hovoří o tom, že stále zůstane vyhrazen jen pro modely Pro.

 

Velikosti, vzhled a barvy

Velikostí by se nový iPhone neměl lišit od iPhonů 12, šeptá se však o tom, že umístění fotoaparátu bude vystouplejší než dosud. Stejně tak je zatím jen spekulací rozšíření barevné palety o matně černou, ještě tmavší než nedávno představená grafitová. A ač se iPhone 12 mini neprodával tak dobře, jak tvůrci doufali, čerstvé zvěsti hovoří o tom, že nový model by měl i přesto mít svou 5,4 palcovou mini verzi, stejně jako tu větší s uhlopříčkou 6,7 palce.

 

Displej

Dlouhé roky byl iPad Pro jediným applovským zařízením s obnovovací frekvencí displeje vyšší než 60 Hz, letošní iPhony by se však konečně mohly dočkat ProMotion displeje s obnovovací frekvencí 120 Hz.

Dle Maxe Weinbacha z YouTube kanálu EverythingApplePro budou mít nové iPhony také AOD displeje zobrazující v uzamčeném stavu informace o čase, stavu baterie a notifikace. Aby taková funkcionalita zbytečně neplýtvala energií telefonu, mohl by Apple využít LPTO technologii s nízkoteplotním polykrystalickým oxidem, jaká je využita například v Apple Watch.

 

A15 procesor

Tak jako každý rok, také tentokrát se od Applu očekává použití nejnovější procesní síly, s možným názvem A15, vyrobené 5nm technologií. Očekávejme malá, ovšem významná zlepšení CPU i GPU, rychlejší Neural Engine a efektivnější spotřebu energie. Některé zdroje navíc uvádějí, že letos poprvé Apple vydá iPhone s 1 TB úložného prostoru.

Co se týče bezdrátové technologie, počítá se s tím, že všechny modely řady budou podporovat 5G s využitím Snapdragon X60 modemu od Qualcommu. S ohledem na vyšší energetickou náročnost displeje se spekuluje také o tom, že telefony budou mít nejspíš o něco větší baterii.

 

hacking_tip

Cena a datum vydání

Nová řada iPhonů by měla být ohlášena v září, s tím, že předobjednávky jako vždy začnou pár dní na to. V prodeji by první modely měly být dva až tři týdny po ohlášení. O ceně se zatím žádné zvěsti neobjevily.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }