[Bug 742843] New: ORC compiler is disabled on the iOS devices
GStreamer (bugzilla.gnome.org)
bugzilla at gnome.org
Tue Jan 13 04:41:59 PST 2015
https://bugzilla.gnome.org/show_bug.cgi?id=742843
GStreamer | orc | 1.4.5
Summary: ORC compiler is disabled on the iOS devices
Classification: Platform
Product: GStreamer
Version: 1.4.5
OS/Version: Mac OS
Status: UNCONFIRMED
Severity: normal
Priority: Normal
Component: orc
AssignedTo: gstreamer-bugs at lists.freedesktop.org
ReportedBy: denis.shmyrov at gmail.com
QAContact: gstreamer-bugs at lists.freedesktop.org
CC: ds at schleef.org
GNOME version: ---
Here’s the ORC output in log. Init stage:
ORC: INFO: orcdebug.c(70): void _orc_debug_init()(): orc-0.4.23.1 debug init
ORC: INFO: orcprogram-neon.c(129): void orc_neon_init()(): marking neon backend
non-executable
and then there’s continuous warnings like this one during the pipeline
execution:
ORC: WARNING: orccompiler.c(392): OrcCompileResult
orc_program_compile_full(OrcProgram *, OrcTarget *, unsigned int)(): program
orc_combine4_12xn_u8 failed to compile, reason: Compilation disabled, using
emulation
There’s nothing more specific about why NEON is disabled but tracing with
debugger shows that orc_arm_get_cpu_flags in orccpu-arm.c has practically no
executable code for IOS (one branch is #if'd for linux only and one for
Android-only) and will always return 0 (which means no NEON support).
Verified on iPad 3rd gen and iPad mini 1st gen.
If i apply a hack to orc_arm_get_cpu_flags to return NEON flag support ORC
compiler is enabled and works well on the iPad mini 1st gen. On the iPad 3rd
gen i’m getting segfaults from different gstreamer->orc bridges like
video_orc_chroma_up_v2_u8 (videoscale plugin), video_test_src_orc_splat_u32
(videotestsrc) etc.
per hw info iPad 3rd get uses A5x chip while iPad mini (1st gen) uses A5 so
that’s really strange why orc works ok with 2nd but not with 1st.
Example stack trace for the iPad 3 segfault:
#0 0x02ec8e90 in 0x02ec8e90 ()
#1 0x003d7138 in video_test_src_orc_splat_u32 at
/Users/D/cerbero/sources/ios_universal/armv7/gst-plugins-base-1.0-static-1.5/gst/videotestsrc/tmp-orc.c:215
#2 0x003d71fc in gst_video_test_src_smpte at
/Users/D/cerbero/sources/ios_universal/armv7/gst-plugins-base-1.0-static-1.5/gst/videotestsrc/videotestsrc.c:350
#3 0x003d6c9a in gst_video_test_src_fill at
/Users/D/cerbero/sources/ios_universal/armv7/gst-plugins-base-1.0-static-1.5/gst/videotestsrc/gstvideotestsrc.c:951
#4 0x00a60a80 in gst_base_src_default_create at
/Users/D/cerbero/sources/ios_universal/armv7/gstreamer-1.0-1.5/libs/gst/base/gstbasesrc.c:1482
#5 0x00a5d0ae in gst_base_src_get_range at
/Users/D/cerbero/sources/ios_universal/armv7/gstreamer-1.0-1.5/libs/gst/base/gstbasesrc.c:2455
#6 0x00a5c8de in gst_base_src_loop at
/Users/D/cerbero/sources/ios_universal/armv7/gstreamer-1.0-1.5/libs/gst/base/gstbasesrc.c:2731
#7 0x00acaeec in gst_task_func at
/Users/D/cerbero/sources/ios_universal/armv7/gstreamer-1.0-1.5/gst/gsttask.c:316
#8 0x0093f26c in g_thread_pool_thread_proxy at
/Users/D/cerbero/sources/ios_universal/armv7/glib-2.42.0/glib/gthreadpool.c:307
#9 0x00942156 in g_thread_proxy at
/Users/D/cerbero/sources/ios_universal/armv7/glib-2.42.0/glib/gthread.c:764
#10 0x38502e66 in _pthread_body ()
#11 0x38502dda in _pthread_start ()
Variables for frame 1:
d1 guint8 * "" 0x03181000
p1 int -2139034625 -2139034625
n int 91 91
_ex OrcExecutor
program OrcProgram * NULL 0x00000000
n int 91 91
counter1 int 108279884 108279884
counter2 int 460800 460800
counter3 int 16 16
arrays void *[64]
params int [64]
accumulators int [4]
ex OrcExecutor * NULL 0x00000000
program OrcProgram * NULL
n int
counter1 int
counter2 int
counter3 int
arrays void *[64]
params int [64]
accumulators int [4]
func void (*)(OrcExecutor *) NULL
p OrcProgram * NULL
Code
void
video_test_src_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n)
{
OrcExecutor _ex, *ex = &_ex;
static volatile int p_inited = 0;
static OrcCode *c = 0;
void (*func) (OrcExecutor *);
if (!p_inited) {
orc_once_mutex_lock ();
if (!p_inited) {
OrcProgram *p;
#if 1
static const orc_uint8 bc[] = {
1, 9, 28, 118, 105, 100, 101, 111, 95, 116, 101, 115, 116, 95, 115,
114,
99, 95, 111, 114, 99, 95, 115, 112, 108, 97, 116, 95, 117, 51, 50, 11,
4, 4, 16, 4, 128, 0, 24, 2, 0,
};
p = orc_program_new_from_static_bytecode (bc);
orc_program_set_backup_function (p,
_backup_video_test_src_orc_splat_u32);
#else
p = orc_program_new ();
orc_program_set_name (p, "video_test_src_orc_splat_u32");
orc_program_set_backup_function (p,
_backup_video_test_src_orc_splat_u32);
orc_program_add_destination (p, 4, "d1");
orc_program_add_parameter (p, 4, "p1");
orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
ORC_VAR_D1);
#endif
orc_program_compile (p);
c = orc_program_take_code (p);
orc_program_free (p);
}
p_inited = TRUE;
orc_once_mutex_unlock ();
}
ex->arrays[ORC_VAR_A2] = c;
ex->program = 0;
ex->n = n;
ex->arrays[ORC_VAR_D1] = d1;
ex->params[ORC_VAR_P1] = p1;
func = c->exec;
func (ex); <---------------- SEGFAUL HERE
}
--
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
More information about the gstreamer-bugs
mailing list