#include "TizenExtensibleAPI.h"
#endif
-#if ENABLE(TIZEN_DEVICE_ROTATION)
-#include <vconf.h>
-#endif
-
using namespace std;
namespace WebCore {
static const char* mediaSourceURLProtocol = "x-media-source";
#endif
-#if ENABLE(TIZEN_DEVICE_ROTATION)
-#define RADIAN_VALUE (57.2957)
-
-enum {
- ROTATE_0,
- ROTATE_90,
- ROTATE_180,
- ROTATE_270,
- ROTATE_ERROR
-};
-#endif
-
using namespace HTMLNames;
using namespace std;
setHasCustomCallbacks();
addElementToDocumentMap(this, document);
-#if ENABLE(TIZEN_DEVICE_ROTATION)
- registerRotationCallback();
-#endif
}
HTMLMediaElement::~HTMLMediaElement()
m_mediaController->removeMediaElement(this);
removeElementFromDocumentMap(this, document());
-#if ENABLE(TIZEN_DEVICE_ROTATION)
- unregisterRotationCallback();
-#endif
-}
-
-#if ENABLE(TIZEN_DEVICE_ROTATION)
-bool HTMLMediaElement::isHorizontal()
-{
- return (m_rotation == ROTATE_90 || m_rotation == ROTATE_270) ? true : false;
-}
-
-bool HTMLMediaElement::isVertical()
-{
- return (m_rotation == ROTATE_0 || m_rotation == ROTATE_180) ? true : false;
}
-void HTMLMediaElement::registerRotationCallback()
-{
- sensor_create(&m_handle);
- sensor_accelerometer_set_cb(m_handle, 0, onRotationChanged, this);
- sensor_start(m_handle, SENSOR_ACCELEROMETER);
-
- return;
-}
-
-void HTMLMediaElement::unregisterRotationCallback()
-{
- sensor_accelerometer_unset_cb(m_handle);
- sensor_stop(m_handle, SENSOR_ACCELEROMETER);
- sensor_destroy(m_handle);
-
- return;
-}
-
-int HTMLMediaElement::calcRotation(float x, float y, float z)
-{
- double atanV, normZ, rawZ;
- int accTheta, accPitch;
- int rotation;
-
- atanV = atan2(y, x);
- accTheta = (int)(atanV * (RADIAN_VALUE) + 270) % 360;
- rawZ = (double)(z / (0.004 * 9.81));
-
- if (rawZ > 250)
- normZ = 1.0;
- else if (rawZ < -250)
- normZ = -1.0;
- else
- normZ = ((double)rawZ) / 250;
-
- accPitch = (int)(acos(normZ) * (RADIAN_VALUE));
-
- if ((accPitch > 35) && (accPitch < 145)) {
- if ((accTheta >= 315 && accTheta <= 359) || (accTheta >= 0 && accTheta < 45))
- rotation = ROTATE_0;
- else if (accTheta >= 45 && accTheta < 135)
- rotation = ROTATE_90;
- else if (accTheta >= 135 && accTheta < 225)
- rotation = ROTATE_180;
- else if (accTheta >= 225 && accTheta < 315)
- rotation = ROTATE_270;
- else
- rotation = ROTATE_ERROR;
- } else
- rotation = ROTATE_ERROR;
-
- return rotation;
-}
-
-void HTMLMediaElement::onRotationChanged(uint64_t timeStamp, sensor_data_accuracy_e accuracy, float x, float y, float z, void* userData)
-{
- HTMLMediaElement* that = static_cast<HTMLMediaElement*>(userData);
-
- int autoRotation = 0;
- vconf_get_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, &autoRotation);
- if (!autoRotation)
- return;
-
- int rotation = that->calcRotation(x, y, z);
- if (rotation == ROTATE_ERROR || rotation == that->m_rotation)
- return;
-
- that->m_rotation = rotation;
-}
-#endif
-
void HTMLMediaElement::didMoveToNewDocument(Document* oldDocument)
{
if (m_isWaitingUntilMediaCanStart) {
#include "TextTrackCue.h"
#endif
-#if ENABLE(TIZEN_DEVICE_ROTATION)
-#include <sensors.h>
-#endif
-
namespace WebCore {
#if ENABLE(WEB_AUDIO)
bool suspended() { return m_suspended; }
#endif
-#if ENABLE(TIZEN_DEVICE_ROTATION)
- bool isHorizontal();
- bool isVertical();
-
- int rotation() { return m_rotation; }
-#endif
-
protected:
HTMLMediaElement(const QualifiedName&, Document*, bool);
virtual ~HTMLMediaElement();
bool shouldSuspendMedia();
#endif
-#if ENABLE(TIZEN_DEVICE_ROTATION)
- static void onRotationChanged(uint64_t timeStamp, sensor_data_accuracy_e accuracy, float x, float y, float z, void* userData);
-
- void registerRotationCallback();
- void unregisterRotationCallback();
-
- int calcRotation(float x, float y, float z);
-
- sensor_h m_handle;
- int m_rotation;
-#endif
-
Timer<HTMLMediaElement> m_loadTimer;
Timer<HTMLMediaElement> m_progressEventTimer;
Timer<HTMLMediaElement> m_playbackProgressTimer;