[-]
[+]
|
Changed |
_service:tar_git:gmp-droid.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:gmp-droid.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,7 +2,7 @@
<service name="tar_git">
<param name="url">https://github.com/sailfishos/gmp-droid.git</param>
<param name="branch">master</param>
- <param name="revision">HEAD</param>
+ <param name="revision">0.1.11</param>
<param name="token"/>
<param name="debian">N</param>
<param name="dumb">N</param>
|
[-]
[+]
|
Changed |
_service:tar_git:gmp-droid-0.1.11.tar.gz/generate-info.cpp
^
|
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (c) 2020-2021 Open Mobile Platform LLC.
+** Copyright (c) 2020 Open Mobile Platform LLC.
**
** This Source Code Form is subject to the terms of the
** Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed
@@ -10,80 +10,45 @@
#include "droidmediacodec.h"
#include <iostream>
-#include <vector>
using namespace std;
-typedef struct {
- std::string androidName;
- std::string gmpName;
-} codec_desc_t;
-
bool
-isSupported (const codec_desc_t& codec, bool isEncoder)
+isSupported (const char *codec)
{
DroidMediaCodecMetaData meta;
- meta.type = codec.androidName.c_str ();
+ meta.type = codec;
meta.flags = static_cast <DroidMediaCodecFlags> (DROID_MEDIA_CODEC_HW_ONLY);
- return droid_media_codec_is_supported (&meta, isEncoder);
+ return droid_media_codec_is_supported (&meta, false);
}
-bool
-isSupportedDecoder (const codec_desc_t& codec)
+int
+main (int argc, char **argv)
{
- return isSupported (codec, false);
-}
-bool
-isSupportedEncoder (const codec_desc_t& codec)
-{
- return isSupported (codec, true);
-}
+ cout << "Name: gmp-droid\n" << "Description: gst-droid GMP plugin for Gecko\n"
+ << "Version: 0.1\n" << "APIs: decode-video[";
-void
-printSupportedApi (std::string api, std::vector<std::string> codecs)
-{
bool first = true;
-
- cout << api << "[";
-
- for (std::string codec : codecs) {
+ if (isSupported ("video/avc")) {
+ cout << "h264";
+ first = false;
+ }
+ if (isSupported ("video/x-vnd.on2.vp8")) {
if (!first)
cout << ":";
else
first = false;
- cout << codec;
+ cout << "vp8";
}
+ if (isSupported ("video/x-vnd.on2.vp9")) {
+ if (!first)
+ cout << ":";
+ else
+ first = false;
- cout << "]";
-}
-
-int
-main (int argc, char **argv)
-{
- std::vector<codec_desc_t> codecs = {
- { "video/avc", "h264" },
- { "video/x-vnd.on2.vp8", "vp8" },
- { "video/x-vnd.on2.vp9", "vp9" }
- };
- std::vector<std::string> supportedDecoders;
- std::vector<std::string> supportedEncoders;
-
- for (codec_desc_t codec : codecs) {
- if (isSupportedDecoder (codec))
- supportedDecoders.push_back (codec.gmpName);
- if (isSupportedEncoder (codec))
- supportedEncoders.push_back (codec.gmpName);
+ cout << "vp9";
}
-
- cout << "Name: gmp-droid\n"
- << "Description: gst-droid GMP plugin for Gecko\n"
- << "Version: 0.1\n";
-
- cout << "APIs: ";
- printSupportedApi ("decode-video", supportedDecoders);
- cout << ", ";
- printSupportedApi ("encode-video", supportedEncoders);
- cout << "\n";
+ cout << "]\n";
}
|
[-]
[+]
|
Changed |
_service:tar_git:gmp-droid-0.1.11.tar.gz/gmp-droid.cpp
^
|
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (c) 2020-2021 Open Mobile Platform LLC.
+** Copyright (c) 2020 Open Mobile Platform LLC.
**
** This Source Code Form is subject to the terms of the
** Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed
@@ -20,7 +20,6 @@
#include "gmp-video-host.h"
#include "gmp-video-decode.h"
-#include "gmp-video-encode.h"
#include "gmp-video-frame-i420.h"
#include "gmp-video-frame-encoded.h"
#include "gmp-droid-conv.h"
@@ -48,6 +47,12 @@
static GMPPlatformAPI *g_platform_api = nullptr;
+// Droidmedia callbacks
+static void DroidError (void *data, int err); // pass error and abord
+static int SizeChanged (void *data, int32_t width, int32_t height); // reconfigure
+static void DataAvailable (void *data, DroidMediaCodecData * decoded);
+static void SignalEOS (void *data);
+
class DroidVideoDecoder : public GMPVideoDecoder
{
public:
@@ -248,11 +253,6 @@
}
m_drain_lock->Release ();
- if (m_resetting) {
- LOG (INFO, "Buffer submitted while resetting");
- return;
- }
-
// This blocks when the input Source is full
droid_media_codec_queue (m_codec, &cdata, &cb);
@@ -271,22 +271,17 @@
m_stop_lock->Release ();
return;
}
-
m_resetting = true;
+ m_stop_lock->Release ();
- if (m_processing) {
- // Reset() will be called from DataAvailable() later
- LOG (INFO, "Reset while m_processing");
- m_stop_lock->Release ();
- return;
- }
-
- if (g_platform_api) {
- // Reset() was called. Execute it on main thread
- g_platform_api->runonmainthread (WrapTask (this,
- &DroidVideoDecoder::Reset_m));
+ if (m_codec) {
+ ResetCodec ();
}
- m_stop_lock->Release ();
+ m_drain_lock->Acquire ();
+ m_draining = false;
+ m_drain_lock->Release ();
+ m_resetting = false;
+ m_callback->ResetComplete ();
}
virtual void Drain ()
@@ -310,13 +305,7 @@
{
m_callback = nullptr;
m_host = nullptr;
- m_resetting = true;
-
- if (g_platform_api) {
- // Reset() was called. Execute it on main thread
- g_platform_api->runonmainthread (WrapTask (this,
- &DroidVideoDecoder::Reset_m));
- }
+ ResetCodec ();
}
bool CreateCodec ()
@@ -334,15 +323,15 @@
{
DroidMediaCodecCallbacks cb;
- cb.error = DroidVideoDecoder::DroidError;
- cb.size_changed = DroidVideoDecoder::SizeChanged;
- cb.signal_eos = DroidVideoDecoder::SignalEOS;
+ cb.error = DroidError;
+ cb.size_changed = SizeChanged;
+ cb.signal_eos = SignalEOS;
droid_media_codec_set_callbacks (m_codec, &cb, this);
}
{
DroidMediaCodecDataCallbacks cb;
- cb.data_available = DroidVideoDecoder::DataAvailable;
+ cb.data_available = DataAvailable;
droid_media_codec_set_data_callbacks (m_codec, &cb, this);
}
// Reset state
@@ -414,10 +403,25 @@
m_codec_lock->Release ();
}
- void ProcessFrame (DroidMediaCodecData * decoded)
+ void ProcessFrameLock (DroidMediaCodecData * decoded)
{
m_stop_lock->Acquire ();
+ if (m_resetting) {
+ LOG (ERROR, "Received decoded frame while resetting codec");
+ m_stop_lock->Release ();
+ return;
+ }
+ if (g_platform_api) {
+ g_platform_api->syncrunonmainthread (WrapTask (this,
+ &DroidVideoDecoder::ProcessFrame, decoded));
+ }
+ m_stop_lock->Release ();
+ }
+
+ // Return the decoded data back to the parent.
+ void ProcessFrame (DroidMediaCodecData * data)
+ {
// Delete the current colour converter if requested
if (m_dropConverter) {
if (m_conv)
@@ -428,32 +432,9 @@
if (m_resetting || !m_callback || !m_host) {
LOG(INFO, "Discarding decoded frame received while resetting");
- m_stop_lock->Release ();
return;
}
- m_processing = true;
- m_stop_lock->Release ();
-
- if (g_platform_api) {
- g_platform_api->syncrunonmainthread (WrapTask (this,
- &DroidVideoDecoder::ProcessFrame_m, decoded));
- }
-
- m_stop_lock->Acquire ();
- m_processing = false;
- if (m_resetting && g_platform_api) {
- // Reset() was called. Execute it on main thread
- g_platform_api->runonmainthread (WrapTask (this,
- &DroidVideoDecoder::Reset_m));
- }
- m_stop_lock->Release ();
-
- }
-
- // Return the decoded data back to the parent.
- void ProcessFrame_m (DroidMediaCodecData * data)
- {
if (!m_conv) {
ConfigureOutput (data);
}
@@ -527,58 +508,6 @@
}
private:
-
- virtual void Reset_m ()
- {
- LOG (DEBUG, "Reset_m");
- if (m_codec) {
- ResetCodec ();
- }
- m_drain_lock->Acquire ();
- m_draining = false;
- m_drain_lock->Release ();
- m_resetting = false;
- if (m_callback) {
- m_callback->ResetComplete ();
- }
- }
-
- /*
- * Droidmedia callbacks
- */
- static void
- DataAvailable (void *data, DroidMediaCodecData * decoded)
- {
- DroidVideoDecoder *decoder = (DroidVideoDecoder *) data;
- decoder->ProcessFrame (decoded);
- }
-
- static int
- SizeChanged (void *data, int32_t width, int32_t height)
- {
|
[-]
[+]
|
Changed |
_service:tar_git:gmp-droid-0.1.11.tar.gz/meson.build
^
|
@@ -10,30 +10,34 @@
root_dir = include_directories('.')
gmp_api = include_directories('gmp-api')
-droidmedia_dep = dependency('droidmedia', required: true)
+droidmedia_h = include_directories('/usr/include/droidmedia')
+hybris_dep = cc.find_library('hybris-common', required: true)
gmpdroid_install_dir = '/'.join([ get_option('libdir'), meson.project_name(), meson.project_version()])
gmp_source = [
'gmp-droid.cpp',
'gmp-droid-conv.cpp',
+ '/usr/share/droidmedia/hybris.c',
'gmp-task-utils.h',
'gmp-task-utils-generated.h'
]
gmpdroid_lib = shared_library('droid',
gmp_source,
- include_directories: [ gmp_api ],
+ include_directories: [ gmp_api, droidmedia_h ],
install: true,
- dependencies: droidmedia_dep,
+ dependencies: hybris_dep,
install_dir: gmpdroid_install_dir )
info_source = [
'generate-info.cpp',
+ '/usr/share/droidmedia/hybris.c'
]
generate_info = executable('generate-info',
info_source,
+ include_directories: [ droidmedia_h ],
install: true,
- dependencies: droidmedia_dep,
+ dependencies: hybris_dep,
install_dir: gmpdroid_install_dir )
|