Hardcoded pinephone torch

The current code use gstreamer to toggle flashlight, however gstreamer doesn't work in pinephone for now. this MR hardcode pinephone sysfs path for flashlight as a temporary workaround
This commit is contained in:
Han Young 2020-11-11 15:51:25 +08:00 committed by Nicolas Fella
parent 6097c084f5
commit 407ffc0f4c

View file

@ -21,6 +21,9 @@
#include "phonepanel.h" #include "phonepanel.h"
#include <qplatformdefs.h> #include <qplatformdefs.h>
#include <fcntl.h>
#include <unistd.h>
#include <QDateTime> #include <QDateTime>
#include <QDBusPendingReply> #include <QDBusPendingReply>
#include <QFile> #include <QFile>
@ -92,35 +95,17 @@ void PhonePanel::executeCommand(const QString &command)
void PhonePanel::toggleTorch() void PhonePanel::toggleTorch()
{ {
if (!m_running) { static auto FLASH_SYSFS_PATH = "/sys/devices/platform/led-controller/leds/white:flash/brightness";
gst_init(nullptr, nullptr); int fd = open(FLASH_SYSFS_PATH, O_WRONLY);
// create elements
m_source = gst_element_factory_make("droidcamsrc", "source"); if (fd < 0) {
m_sink = gst_element_factory_make("fakesink", "sink"); qWarning() << "Unable to open file %s" << FLASH_SYSFS_PATH;
m_pipeline = gst_pipeline_new("torch-pipeline"); return;
if (!m_pipeline || !m_source || !m_sink) {
qDebug() << "Failed to turn on torch: failed to create elements";
return;
}
gst_bin_add_many(GST_BIN(m_pipeline), m_source, m_sink, NULL);
if (gst_element_link(m_source, m_sink) != TRUE) {
qDebug() << "Failed to turn on torch: failed to link source and sink";
g_object_unref(m_pipeline);
return;
}
g_object_set(m_source, "mode", 2, NULL);
g_object_set(m_source, "video-torch", TRUE, NULL);
if (gst_element_set_state(m_pipeline, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) {
qDebug() << "Failed to turn on torch: failed to start pipeline";
g_object_unref(m_pipeline);
return;
}
m_running = true;
} else {
gst_element_set_state(m_pipeline, GST_STATE_NULL);
gst_object_unref(m_pipeline);
m_running = false;
} }
write(fd, m_running ? "0" : "1", 1);
close(fd);
m_running = !m_running;
} }
bool PhonePanel::autoRotate() bool PhonePanel::autoRotate()