Friday, September 1, 2017

tomxplayer: re-written, improved, and re-released.

So, given the restraints of the Raspberry Pi, I decided to re-write 'tomxplayer' in C / GTK+. C# is a good language for me. I can mock-up, explore, experiment, refine and publish very quickly in that language/framework. However the Raspberry Pi has limited memory and I thought that the overhead of the Mono framework would not be advantageous. So, with a little time I was able to reproduce C# work, in pure C / GTK+.

tomxplayer demo on Ubuntu MATE 16.04 LTS

tomxplayer demo on Raspbian Stretch ( 8-16-2017)

These versions run at @ 20-25 MB of memory vs the 80-120 MB in the C# version! I've also created a new home page for tomxplayer here:

and new releases of tomxplayer will posted here  (You can get the intial release now!):

Issues and pull requests can also be posted to the project:

Sunday, July 16, 2017

tomxplayer: The Raspberry Pi Video Player (Comming Soon)

     Recently I got my self a Raspberry Pi 3 Model B. It's a tiny computer... blah blah blah... google it. I purchased it because it was capable of running Ubuntu Mate and I've been running Ubuntu Mate as my primary OS for along while now. For me, there are times when a low power PC would come in handy. It was not long before I noticed that video playback is a little non-standard on the PI. The only player capable of taking advantage of the Pi's hardware acceleration is omxplayer ( a cmdline only application ).

There are a few projects I've seen but they all have the video open outside the window and they feel counter-intuitive. Every one knows what a standard video player should act like. Video applications like mplayer, vlc and "media player" for windows have been around for a long time and they all have the video window inside their window bounds. There is also a project where by you can control omxplayer through a webpage and various other remote control options.

None of these were going to work for me. I wanted a standard video player, like vlc, So I decided to write my own. It's still in the testing phase but things seem pretty stable so far. tomxplayer is not available for download yet but here is a video of me testing it.

  • Video moves with the window.
  • Video disappears when window is minimized (audio still plays).
  • Window stays on top and stays on current work space.
  • Aspect ratio: Letterbox or stretch.
  • Manual overscan offset adjustments.
  • Continuous Playback (build a playlist from directory and loop).
  • Volume controls
  • Fast Forward (10s) / Rewind (10s) / |  Slider for exact position
  • Previous / Next
  • Fullscreen
    • Video controls re-appear on mouse move and re-disappear after 5 seconds of no mouse movement.
  • Keyboard controls
    • Escape = Exit fullscreen
    • F11 = Toggle fullscreen
    • p = Toggle Play /Pause
    • Up = Volume Up
    • Down = Volume Down
    • Right = Fast forward
    • Left = Rewind

Tuesday, March 21, 2017

Paradigm Shift: PAID for WORK on ROMs.

For most of my adult life I have been disillusioned with what I consider to be a "normal" life. I see people, working at some job that they really don't like for a great portion of their lives due to social demands and I have always been determined not to live my life in that fashion. I desire to do something that I enjoy and I do not want to work for "the man" or for anyone else. My dream is to be able to do what I love to do and make a living at it. Not to be rich or anything but to have enough to get by with the bare minimum.

Before I ever bought my first Android device, I was already programmer. I had experimented with BASIC, PHP, PEARL, and was pretty good at C#. So after I bought my first Android device an then I found a forum that had a dedicated section for hacking/modding the very device I had purchased I was thrilled. I was a n00b but, I knew I could not stay that way for long. I had to know what was possible with my new Android device. What other awesome things might it be made capable of, if only I might master it's inner workings!

That was 2011'ish, so it's been awhile and although I still get a rush when I am able to fix something, that, at first seems all but impossible to fix, my view of the community has changed. I thought that the forum I had discovered would be a group of like minded peers with which to collaborate and confer. My experience tells me that is not the way it is really. I continued learning on my own, after all, the vast majority of information needed to learn the skills of the "Developer", can be readily found on the internet. One need only read. There is and was, a steady progression of learning which continues even now, to my work on The Huawei P9 Lite.

The time came however, when users became too demanding, too pushy, and they pushed me too far. I was going to stop doing this altogether because I was not enjoying it at all but I considered those who had contributed a donation to support me. It did not seem fair to them. Most people contributed nothing and I didn't care about them but my "Sponsors" had contributed, either to get the project started or simply because they where pleased with the work. They didn't have to, they wanted to. I decided to honor them and continue the work just for them.

I did not anticipate what followed. I began to receive countless donations. Day after day they keep coming in. You see, it was my intention simply to continue for those select few who had already donated. I guess I did not anticipate that people would want to, now, donate to become a "Sponsor", just so they could get these new builds or perhaps I underestimated the "sleeper" users who quietly downloaded an used the ROMs. There is, of course, nothing wrong with that. I just forgot about them.

There are some who say that "Android is an opensource project and therefore, you should be opensource." To that I say yes, Android is an opensource project but the code which I have written is mine and I may do with it as I like. The Linux Kernel is under the GPL and I have promptly posted all of my kernel source in my Github account. I have also released my entire source for LineageOS 13. I personally would like to see someone duplicate my work on LineageOS 14.1 on their own, just to spite me but alas, no one has risen to the challenge but at least there seems to be a few who are doing some new kernel work.

Where opensource is concerned it seems that "money" is a bad word. People associate "open" with "free" and everybody loves to get something of great value for free if they can. Honestly, I was content to do it for free, until, n00bs started making demands as if they were entitled. When I am getting something of great value for free, I know enough not to rock to boat. It's one thing to work on a ROM for free for the benefit of all but quite another to give a gift to all and have indignant users complain and harass you for it. So, now I will only do it for those who show they will appreciate it, by becoming a Sponsor. It was either that, or quit altogether.

There are, as of this date of this post, 100+ Sponsors of Meticulus Development. I take that as indication that I made the correct decision. Another indication is that I have not had to deal with panicky n00bs who have bricked their device because they can't read ( there is nothing more annoying to me than a "HELP PLEASE!!!" post ) , ridiculous requests, or complaints. The members of the Sponsors group are vested in the project and has even worked on the ROM by contributing translations to the "Parts" app. All in all, I am pleased with the new direction my work has taken and that makes me that much more productive.

So, if you'd like "Sponsor" Meticulus Development, you need only be a good host, offer me a coffee from the download page and have some maturity, patience, and respect. Otherwise there are still plenty of ROMs here that do not require sponsorship.


Thursday, January 26, 2017

NEW BUILD! Alpha 1 LineageOS 14.1 for Huawei P9 Lite | hi6250 variants

Since my previous post I was able to fix quite a few things very quickly so, I decided to do an initial release. This is the first alpha build but its very usable dispite having some obvious issues. Do not expect to use this as a daily driver. A list of the "Known Issues" is available on the download page.

I have not had a chance to test extensively and so if you have issues other than the noted ones please let me know. The installation quirks of this ROM are very similar to CM13 and you can expect the same compatibility.


Tuesday, January 24, 2017

LineageOS 14.1: Booting on Huawei P9 Lite...

As I stated in a previous post, I was having trouble getting through a build of LineageOS 14.1. I am usually quite good a getting around build issues but this one was giving me a lot of trouble. So, I said that I would wait awhile, watch the LineageOS repos and see if anyone else had the issue or it was mentioned again anywhere. In the mean time, I got a new laptop... Well, not exactly new but it is at least 4x times faster than my old laptop. It's nice, I can get through a build in a reasonable amount of time. I got it all setup, ran a build, BOOM same build error. It had also not been mentioned anywhere on the internet afaict. New laptop, fresh setup; same error!

As it turns out, the three files givin' for OpenJDK 8 on Google's "Establishing a Build Environment" page are out of date. I believe that most builders out there have updated to Ubuntu 16.04 or later, in which, this issue would not come into play. This post refers specifically to the build error and the solution for Ubuntu 14.04.

So, now with that build error corrected, I pressed on and got through a build. Of course, the build would not boot. It rebooted almost immediately to recovery, so I check the LAST_KMSG and found it was an issue with selinux/sepolicy. As it turns out disabling selinux is no longer a supported configuration in Android. It's permissive or enforcing. Once I figured out how to get selinux "disabled" it was on and booting. If, I am making it sound like it was easy, let me assure you it took considerable effort!

So, that's the "good" news. It boots.

Now, for that bad news. Nothing else works. RIL, Audio, Wifi, BT and almost all the other hardware is not working. Additionally there are a few other odd things that do not work like the brightness slider and reboot. Yeah, rebooting does not work... Its odd.

I don't see any reason to publish what I have now. Like I said, nothing works so there really is no reason to install it unless you've got some development skill and can "really" help with the bring up.

Sunday, January 8, 2017

NEW BUILD! Beta 4 CyanogenMod 13 for Huawei/Honor HI6250 Variants

Most of you are probably already aware but since Beta 2, I've been experimenting with trying to support more of the Huawei/Honor Hi6250 variants such as the Honor 5c. A few people from the Honor 5c community had tried my ROM and had said that it worked except for the camera. I was already so familiar with the way the stock ROM worked that I was certain that fixing the camera would be easy and it was. From Beta 2 on to Beta 4 new models kept showing up and working and supporting these new models is fairly simple. All I have to do is set some properties in the system at the correct time to configure for a specific model. Since I don't own these other models I can't really test things but as long as it's as simple as setting these properties, then these models will be supported. Currently the list of supported models, which includes the Huawei P9 Lite | Huawei GT3, Honor 7 lite | Honor 5c | Huawei GR5 mini looks like this:

  • VNS-L21
  • VNS-L22
  • VNS-L23
  • VNS-L31
  • NEM-L21
  • NEM-L22
  • NEM-L51
  • NMO-L21
  • NMO-L31

Ah Bluetooth you pain in my ***. Bluetooth pairing has been an issue for quite awhile and I had almost given up on it. I couldn't seem to find any new ways to approach the problem. I knew that a command was "timing out" (optcode 0x40f) to be exact. I checked the logs from the two android phones and I could see that a connection was being established but, when this optcode was send, there was simply no response ever. In that case the bt hci_layer causes bluetooth to be reset. I tried to find some information about what optcode 0x40f did but I couldn't find anything. I tried serveral other small experiments to see what effect they would have; like increasing the length of the timeout, trying different build configs for the BT HAL. Nothing seemed to do anything. I gave up on it but I never forgot about it. Recently, enzo24754 @ XDA, re-mentioned that he had a work around that allowed him to pair to his device. He had mentioned it before but it was at a time when I had less information about the issues and so, in the confusion, i disregarded it but now, I thought that perhaps I could learn something new about the problem from this workaround and asked him to explain it. I could not get it to work. Perhaps it was just my scenario that didn't work but when another user at XDA said that they had gotten it to work and described in more detail the method that he used it got me thinking. The procedure that was described made me think that perhaps this "optcode" was being issued to early; that maybe it was being send before the connection was established and therefor it was never received and ipso facto, a response was never received and boom "timeout".

So with that in mind I decided to play around with the BT hal and see if I could delay sending the 0x40f optcode until the connection was established. After I got my code all set up and rebuilt the BT hal, it didn't work. The problem was still the same so I thought well, what if I just block the 0x40f optcode. After all you can't timeout on a request that you did not send right? RIGHT! Blocking the 0x40f optcode allowed normal pairing. I just hope that it's not needed....

I know that many of you are wondering about a custom nougat ROM and whether or not I will develop one. It was my intention to build CyanogenMod 14.1 but most of you know that CyanogenMod is  a dead project and the devs have created a fork to continue the work called LineageOS. I have already tried to get through a build of LineageOS 14.1 a few times and I just couldn't get throught it; build errors. I pretty sure they were not related to my code but could have had something to do with my build environment or could have just been a few poorly timed repo syncs ( I did try a few times ). So, I think I'm just going to wait awhile and then sync a couple of nougat ROMs
and if one fails I'll just try the other... might be awhile though, I'm trying to get the money together to get a faster, more powerful laptop so I can do builds more quickly...