Jump to content

Yaron

Members
  • Content Count

    275
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by Yaron


  1. 2 hours ago, Lajos Juhász said:

     

    An issue could be also that a newer version of Delphi could require source code changes to be able to work with newer version of Android. Please do remember that nor platform support (due to changes at platform level) and fmx are not solid. From version to version there are required changes in order to get a correct output.

    Yes, I'm aware, but Delphi is so slow under android that I wrote most of the UI code myself using bitmaps (and optimized the bitmap code too).

     

     


  2. I previously discussed the issue of not being able to upgrade my app to support the latest Android SDK because I haven't been making enough money on Android development to justify upgrading Delphi beyond v10.3.

     

    My app is very simple, so I was thinking I may find a "compilation" partner that would just compile the source code for me on the latest version of Delphi.

     

    Does that pose any licensing issues? I mean you're not expected to just develop for yourself, right?

     


  3. I require some advice from the sages of this forum,

    In 2019 I wanted to learn cross-platform development so I purchased the latest version of Delphi at the time and I wrote an companion Android app for my main Windows based software.

     

    The Android app did not justify paying continued version renewals (making less than $400/year) so I stopped updating to new versions of Delphi, stopping at v10.3.

     

    Even though my Android application is very basic, I don't think I can submit an app created in Delphi 10.3 to the google play store due to the old SDK version Google no longer accepts.

     

    My question is, what is be the best path forward to allow me to submit new versions of the app to the google play store?

    Use the community version?

    Rewrite the app in a free alternative to Delphi (any recommendations)?

    Something else I haven't considered?


  4. 1 hour ago, Dalija Prasnikar said:

    Like @Remy Lebeau said, start by using UTF8String for strings that hold UTF-8 data. It exists in Delphi 7, too. And doing that will make your transition to Unicode Delphi smoother. You will also be able to more easily verify that you haven't broken anything while doing changes in Delphi 7. This should be your starting point.

     

    Another thing you can do is make a short demo application where you will use the most common string handling patterns from your code and then you can transform and move that code to Unicode Delphi. If something goes wrong in that small demo you will be able to more easily understand what you need to do and how.

    From what you're writing, it seems that I'm in more of a mess than I initially considered.

     

    Most of the strings I use are WideString in order to support Unicode text in Delphi 7, not only that, all of my base visual components are based on the TNT Unicode library (e.g. TTNTForm, TTNTListBox, TTNTStringList, etc), so I can't even load the project without getting lots of error messages and I'm not even sure if the TNT Unicode library is compatible with Delphi 10.3, which means I have to revert 1000's of work-arounds for unicode text that I've implemented over the years.

     

    My code also uses quite a bit of ASM optimized code for Audio DSP, graphic processing, etc.

     


  5. I hope this is the right spot & apologize if it isn't.

     

    I am the developer of Zoom Player, a windows media playback software developed in Delphi and initially released early 2000.

     

    Since then, Zoom Player has grown to over 500,000 lines of code and code-base wise, Zoom Player is stuck at Delphi 7.

    Over the years I got around most of Delphi 7's shortcoming using custom code, but now I've reached a point where converting Zoom Player to 64bit is becoming a greater necessity.

     

    I own a license to Delphi 10.3 so that is the 64bit target code-base I'm aiming for.

     

    Do you have any advice for me on ways to automate the jump from Delphi 7 32bit to Delphi 10.3 64bit without breaking the code in 1000's of places? Is there an AI agent or some other tool that could help me in this context?

     

    Right now this feels like a pain-staking months long project, am I wrong?


  6. 6 hours ago, DelphiUdIT said:

    ImageEn https://www.imageen.com/info/ support AVIF format.

     

    But is not free.

     

    Bye

     

    Edit: also you can extract c headers form there https://github.com/AOMediaCodec/libavif and convert to pascal wrappers.

    ImageEn is overkill and I can't pay for it.

     

    I couldn't find the actual compiled DLL for the GitHub project, otherwise I'd do the headers myself. I simply can't compile the DLLs as I don't have the infrastructure for this.

    I am aware that there is a section in the readme file that points to a windows library, but it doesn't link to a DLL (the only file there is "avif_x64_Release.lib"), so I'm not sure how I can use that in Delphi.

     

     

    4 hours ago, programmerdelphi2k said:

    maybe a simple search in Github you'll find some:  google search -->    site:github.com AVIF  "Delphi"  "Decode"

    Nope, nothing came up (and I did search both Google and Github before posting here).

     

    4 hours ago, dwrbudr said:

    Probably you could use TWICImage to load AV1 files if this is installed: https://apps.microsoft.com/store/detail/av1-video-extension/9MVZQVXJBQ9V

    Thank you, but that's a video component, which interestingly enough is not an issue as there are AV1 video decoders out there that can be used in Delphi through DirectShow.


  7. I think this issue has to do with the integrated debugger an some form of optimization microsoft changed in Windows 10.

    More info from Marco.

    If I disable the integrated debugger then running from inside Delphi works at the same speed as if I run it externally, so I don't think that having D7 installed under the program files folder is the cause of this issue.

    I tried setting "delphi32.exe" in Win7 compatibility mode, but it didn't help.

     

    I even tried running externally and then connecting the debugger, but as soon as new DLLs are loaded (playing a media file using directshow), everything is the same slowness.

     

    My problem running in a VM is that I'm developing a media player and as such, it uses a lot of hardware acceleration features and running under a VM will be a headache.

    And a media player needs internet access for streaming and opening a Win7 machine to the internet is a bit dangerous nowadays when security patches are no longer released.

     

    Any other ideas?


  8. @FPiette My application has over 100 keyboard macros, many dynamically created UI elements (skinned buttons) and even a TCP/IP control API (used for remote control) that can trigger events that should not be activated while a new media is in the process of loading, I can't simply disable one button, I have to disable 100's of elements and several event triggers that may execute unwanted functionality while waiting for the javascript callback event to trigger. Sure, I can do that, but it would take a lot more work than just having WebView2 return a result synchronously like TWebBrowser is able to do.

     

    @Edwin Yip I considered CEF4Delphi, but from my initial investigation, there were several show-stoppers, including the possible illegality of including audio/video codecs required by YouTube in the compiled binary, something I'm not willing to do. With regards to the 120+ MB WebView2 download, it won't be a thing in Windows 11 as WebView2 comes pre-installed on Win11.  For Win10, I offer my users a quick setup option to download and install the evergreen version of WebView2 without much hassle.

     

    • Like 1

  9. I'm not sure how event driven would help me here, I have to wait until specific data is returned from a javascript function before allowing the code to proceed.

     

    Here's a real life example:

    1. A user presses "play" in my app to play content.

    2. I execute a javascript function to return data on the content (e.g. duration in seconds).

    3. I now need to display the a position bar on a timeline to the user, which uses a combination of duration and the current position (which isn't always "0" when starting playback of live feeds).

     

    As soon as the user presses "play", I want to block all UI interaction until I get my data back from the javascript function.

    Sure, I can artificially block UI interaction by disabling every UI entry point, but that would be a messy workaround when all I need is the javascript function to return the result synchronously.

     


  10. I am using the microsoft's WebView2 API to embed the chromium based edge browser inside my Delphi 7 application (using Winsoft's WebView2 wrapper component).

     

    My problem is that WebView2's ExecuteScript function returns results asynchronously through a call-back function, which is a problem because my app needs to setup a few things based on the javascript function's result and can't proceed until the data is available.

    I couldn't find any way in Delphi to process the results synchronously without calling "Application.ProcessMessages" in a loop until the result function is triggered (I can't use "Sleep" because then the result function will never be triggered).

     

    Of course calling "Application.ProcessMessages" in a loop is not very desirable, so I'm wondering if there's a better approach?

     


  11. 5 hours ago, Fr0sT.Brutal said:

    How a browser component could be non-valid? They must be limiting all browsers then which doesn't happen obviously. Maybe server expects some headers to distinguish standalone browser from an embedded component, try to mimic them

    Sorry if I wasn't clear, I was referring to DirectShow which does not use a browser component. It does use http transport and you can specify the user-agent, but it makes no difference, somehow YouTube identifies it and limits the bandwidth to unusable levels.


  12.  

    On 10/26/2021 at 10:44 AM, Fr0sT.Brutal said:

    Hmm, https://www.ffmpeg.org/index.html#news seems pretty fresh and it's used by youtube-dl for decoding YT videos so it should work.

    From what I can tell, the problem is that YouTube is now detecting non-valid clients and then putting a bandwidth limiter on the connection, making playback unpractical.

    At least that's I experience when trying to use the D3YD YouTube Directshow filter.

     

     

    On 10/21/2021 at 12:11 AM, Kevin Koehne said:

    We use this component with D2007. It appears to support most versions of Delphi.

    https://winsoft.sk/webview.htm

    I am experimenting with it now, I can get it to load the video, but I'm still not sure how to capture javascript event and send the event's data back to Delphi.

     


  13. On 10/21/2021 at 10:37 AM, Fr0sT.Brutal said:

    I have no idea about legality and pretty sure you considered that but doesn't playback via ffdshow solve the problem?

    If you mean using DirectShow, there was a filter for that, but it's no longer functioning correctly after youtube changed something server-side and the developer is no longer responsive.

     


  14. This is a tough one, I need advice.

     

    I currently offer the option to play YouTube video content in my Delphi 7 app by using YouTube's IFRAME player and Javascript API inside a TWebBrowser component.

     

    Unfortunately, the TWebBrowser component is limited to the Edge Legacy engine (Edge v11) and is dropping frames like crazy, which is why I would like to move the code to use the Edge Chromium engine.

     

    Previously, Microsoft let you choose the engine by specifying a registry key (HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION), but it seems that with the Chromium version, they dumped the old IWebBrowser interface for a new WebView2 interface.

     

    Unfortunately, I haven't found any WebView2 support for Delphi 7. It seems WebView2 support was only introduced in Delphi 10.4 and I only own Delphi 10.3 and can't afford paying $1000+ just for this feature.

     

    I'm aware of Delphi Chromium Embeded 3 project, but it may have legal issues with the decoders required to play YouTube content, so it's not an option.

     

    So the questions are:

    1. Can I hire someone to write a DLL I can then use in Delphi 7, giving me the functionality I need (video position within my window handle and a Javascript bridge to the YouTube API data/events)?
    2. Is there a WebView2 implementation that I missed and is compatible with Delphi 7 or at least would allow me to generate a DLL I can use in Delphi 7, but write in Delphi 10.3?
    3. Is there an option I haven't considered?
×