ObjReader Community

WIP => WIP => Topic started by: Patrice Terrier on December 15, 2016, 02:07:56 pm

Title: DreamMovie
Post by: Patrice Terrier on December 15, 2016, 02:07:56 pm
Coming soon...

Based on the same concept than DreamScene, but using a video rather than OpenGL visual plugins.

Screen shot:

(http://www.objreader.com/download/images/DreamMovie.png)

DreamMovie playing OBLIVION.
Title: Re: DreamMovie
Post by: Patrice Terrier on December 18, 2016, 03:54:17 pm
I am working on a new version of ZMP that would be based on Media Foundation rather than DirectShow (deprecated since VISTA).

Being written in 64-bit, it will be able to use the same codec than the Windows 10 built-in "Movie and TV" player

...
Title: Re: DreamMovie
Post by: Patrice Terrier on December 25, 2016, 05:52:10 pm
Here is the first WIP of ZMF64, for test purpose.

The small rotary gauge is to zoom in/out when playing video.

To play media, use either drag and drop from the Windows Explorer, of press on the (>) button when there is no media playing.
To check playing from an internet URL, you can use one of your own or the default one that is shown the first time you try it.

Parameters are saved into the temporary folder, under the name ZMFPLAY64.cfg.

Note: Because ZMF64 is using Media Foundation rather than DirectShow, it won't run on OS prior to VISTA.

If you couldn't hear the audio track when playing a MKV movie, this is probably because audio is using DTS, this is something currently not supported by Windows 10.


Playing Video:

(http://www.objreader.com/download/demo/ZMFvideo.png)


Playing Audio:

(http://www.objreader.com/download/demo/ZMFaudio.png)



Feedback wanted please!

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on December 26, 2016, 05:57:38 pm
More info on 64-bit Win 7 Ult Sp1 / GTX 550Ti: (non-localized LCID 1033 installation)

-- Adding http://www.objreader.com to Trusted Zone doesn't help in either Admin or User mode; cannot connect with error # 0x8007007B
-- When in Admin mode, cannot drag and drop any video or audio file from Explorer, but can open them via Open File dialog
-- When in User mode, can both drag and drop audio and video files and load them via Open File
-- Initial character in URL text box, once entered and saved into the config file, always appears different and always comes from non-ASCII part of the font (umlauts, accents, pseudo-gfx glyphs and the like). Connection cannot be established either way. Can't check config file for possible undue localization because can't find it. IMHO it should be put in the same folder at least at this debugging stage.

64-bit Win 7 Ult Sp1 / Radeon R7 240: (non-localized LCID 1033 installation)

Exact same behavior and error codes as above

64-bit Win 10 Pro Anniversary / geForce 8600 GTS: (Russian locale w/ full US English extra language pack)

-- http://www.objreader.com cannot be added to Trusted Zone because Win 10 trusts only https connections, which objreader.com doesn't provide
-- Config file saves URLs correctly but it doesn't help;  cannot connect with error # 0xC00D001A
-- Exact same Admin and User drag and drop/load behavior as under Win 7 above


In all the test cases, the quality of video and audio is superb. Regarding net connection, does the app allow for longer ping delays? The server is probably stationed physically somewhere in your study or bedroom, so you never notice the delay that other, more distant, users may experience in the meantime. :)
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on December 26, 2016, 10:02:07 pm
Apart from revising the skDialogInput() code proper that does seem to be unstable if not buggy, I'd suggest using the following mods everywhere where SETBIN and PROP are typedef'ed:

Code: [Select]
#pragma pack(push,1) // NB!
struct SETBIN {
    DWORD soundvolume; // NB!
    WCHAR URL[MAX_PATH];
};

struct PROP {
    HWND            hMain;
    MFPlayer2*      pPlayer;
    HWND            hGDImage;
    HWND            hVideo;
    HWND            hFrame;
    HWND            hPlay_On;
    HWND            hPlay_Off;
    HWND            hMute;
    //HWND            hMute_Off;
    HWND            hSeekbar;
    HWND            hVolume;
    MFTIME          duration;

    BOOL            bSeeking;
    BOOL            bMediaLoaded;
    HINSTANCE       instance;
    long            mediatype;
    BOOL            updateseekbar;
    BOOL            usewinlift;

    BOOL            animSlider; // To let us know if the MAIN timer must be used to move the slider
    SETBIN          bin;        // To store the preferences

    DWORD ImageTick;
    DWORD UseSpeed;
    WCHAR filename[MAX_PATH];
};
#pragma pack(pop) // NB!

The problem is, it's generally not the best idea to use TCHAR buffers in the middle of structures with C-language default alignment rather than at their ends. Prefer to use explicitly tight-packed structures in such cases if you can't avoid them. For example, if you don't do it, wcscpy_s() wouldn't be able to find the beginning of gP.bin.URL either, if you would try to copy gP.bin.URL to szFile directly rather than via skDialogInput().
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on December 26, 2016, 10:13:12 pm
When downloaded from the net inside a zipped folder rather than directly in a zip, EXEs, DLLs and CHMs don't get flagged and/or blocked as potentially dangerous. Such are the mysteries of NTFS' undocumented features. ;)
Title: Re: DreamMovie
Post by: Patrice Terrier on December 27, 2016, 03:17:55 pm
Mike--

Do you know why this procedure run fine when called in an EXE,
and would fail on MoveMemory when used from inside a DLL

Code: [Select]
void TRIMSPACE(OUT WCHAR* ss) {
    long L = (long) wcslen(ss);
    if (L) {
        long right = L, left = -1, rightdone = 0, leftdone = 0, start = 0, last = L;
        for (long K = 0; K < L; K++) {
            right--;
            if (!rightdone) {
                if (ss[right] == L' ') { ss[right] = L'\0'; last--; } else { rightdone = -1; }
            }
            if (!leftdone) {
                if (ss[K] != L' ') { start = K; leftdone = -1; }
            }
        }
        if (start > -1) {
            WCHAR* ps = ss;
            MoveMemory(ss, ps + start, (last - start) * sizeof(WCHAR));
        }
        right = (last-start);
        if (right > 0) {
            for (long K = right; K < L; K++) { ss[K] = L'\0'; }
        }
    }
}
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on December 27, 2016, 03:58:48 pm
Patrice,

What optimization options have you selected for the EXE and DLL? Are they similar? I noticed ZMF64 favors small size (/O1); this seriously affects code and data structure alignment!

If you're still having difficulties with MoveMemory (or wcscpy_s, for that matter), try to compile your code without optimization (/Od) or with speed optimization (/O2) rather than size optimization.

These settings can be found in your Project Properties...->Configuration Properties->C/C++->Optimization.

Hope this helps... ???
Title: Re: DreamMovie
Post by: Patrice Terrier on December 28, 2016, 10:30:17 am
Mike--

Here is the new build, as usual please remove the attachment once you have it.

New point in this build.

- New UI skin theme.
- Added custom tooltip color in WinLIFT.
- Several new functions inside of Tools.h (including DetectProcess, to work around a mutex problem, and to allow only one instance running).
- Enforced buffer protection for the data shared between the EXE and the WinLIFT skDialogInput.
- Many changes inside of Main.cpp.

I was unable to reproduce the problem you had when using OnFileOpen to select a media file.
However i should shut down the animation when selecting a video from OnFileOpen (not done yet).

And here is the new UI when playing a video.

(http://www.objreader.com/download/demo/ZMF64_UI.png)

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on December 28, 2016, 03:26:17 pm
First off, congrats: net URLs are now working faultlessly everywhere! :)

64-bit Win 10 Pro Anniversary / geForce 8600 GTS: (Russian locale w/ full US English extra language pack)

-- URLs, drag-and-drops (D&D), and Open File are working as expected, except
-- D&D is totally inoperative when the app is run As Admin. Nothing happens on its screen though the cursor changes to NWSE as if it were hovering over the animated torus.

64-bit Win 7 Ult Sp1 / Radeon / nVidia: (non-localized LCID 1033 installation)

-- URLs are working as expected;
-- half of my videos are mute though I do have full 32-/64-bit CCCP installed following your advice. Interestingly, all of them are playing back their sound just fine under Win 10 even though it doesn't have any extra codecs installed. All my other video players (I have 6 of them including one Winmm/mciSendString based implementation written in FBSL) play back sound without problems under both Win 7's;
-- your MX5.mp4 plays back fine from its URL but crashes the app when D&D'ed or loaded via Open File As User, or loaded via Open File As Admin (D&D is impossible at all when As Admin). Other videos run OK when D&D'ed (As User only) and loaded via Open File.


Quote
And here is the new UI when playing a video.

Moi, je like cherry red skinning very much. Can you design a skin that would imitate an old casino/cabaret scene with dim lights, cherry red curtains, royale gold/pale red wallpaper and wooden plank floor? It would be a killer if you could also animate the curtains to slide open before the video or sound animation starts, and slide back close after it's over... :)
Title: Re: DreamMovie
Post by: Patrice Terrier on December 28, 2016, 04:59:53 pm
Mike--

Along the years, i wrote several 32-bit VIDEO player, that were all based on the {deprecated} DirectShow API.

Starting with this new 64-bit version i switched to the same API used by the Windows 8-10 "Movie and TV" player,
aka Media Foundation.
But with that one, all CCCP or other codecs pack are a NoNo (for security reasons).
The main problem is when playing matroska MKV movies, because most of them are using a DTS audio track that is currently not supported by Windows.
(They said they have plans to support DTS in the future, but it is not a high rank priority).

>> D&D is totally inoperative when the app is run As Admin.
I am totaly unable to reproduce this behavior by myself.
Please try to add a zTrace inside of this code section, to see what happens.
Code: [Select]
    case WM_DROPFILES:
        hfInfo = HDROP(wParam);
        nRet = DragQueryFile(hfInfo, 0xFFFFFFFF, NULL, 0);
        if (nRet > 0) {
            nRet = DragQueryFile(hfInfo, 0, szFile, MAX_PATH);
        }
        DragFinish(hfInfo);
        SetForegroundWindow(hWnd);
        if (wcslen(szFile)) {
            gP.mediatype = MediaCheckExtension(szFile);
            if (gP.mediatype) { // MEDIA_VIDEO = 1, MEDIA_AUDIO = 2
                // Open the media file.
                nRet = PlayMediaFile(hWnd, szFile);
            }
        }
        break;

Thank you!


>>Can you design a skin that would imitate an...
I plan to move all the GUI inside of the gP.hGDImage, meaning that everything would be possible.
But they are already built-in WinLIFT features, that would let you change the image background on the fly, by clicking with either the left or right mouse onto the top left icon.

In order to do this, you must unlock the
'"BACKGROUNDPATH,      C:\Users\Public\Pictures\Sample Pictures", inside of the skin .sks file,
or to add a new folder named "background" into the EXE folder.
However, make first a copy of the DreamSkin\CTLBACK.png, because it will be overwritten by the new selected one. :)

...

Added:
See the background.zip attachment
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on December 28, 2016, 07:49:17 pm
Why thanks a lot of course Patrice, :)

But what I had in mind was something a little more elaborate/classy, like this (though still deeper/darker red and with animated curtains, which would clearly require some extra programmatic effort):

(http://il2.picdn.net/shutterstock/videos/811225/thumb/1.jpg)


Re: DD/CCCP/MKV/MF/x64/etc.

Hehe, not only have you deprecated XP and 32 bits entirely, but you also seem to be dropping your support for Vista and especially Win 7 that's going to be around till at least 2025. You're definitely running not only before the cart full of passengers but also ahead of the horse that's pulling that cart forward. :)

Tell you what: Russians have a legend, and actually even a classical opera, telling that in the years of "la Bérésina" I'm sure you're aware of, a squad of French troops summoned a Russian hunter/pathfinder called Ivan Sousanine to show them the way in the local forests to track down a bunch of local guerrillas (not gorillas!) that used to terrorize the aggressor. With his life at stake, he had nothing else but agree. But as it turned out in the long run, it wasn't his life he was after but rather the lives of his French enemies. He circled them round and round the forests till they all froze to death -- it was winter time then.

Now the history seems to be playing similar tricks on us but the other way round: a French master Sousanine is circling a Russian speaking slave around a forest of obvious and evident incompatibilities from which there's no known way out. ;D


Re: zTrace

I'll come back with my results a little later, perhaps even tomorrow. I'm currently under XP with a little work to do. OK?
Title: Re: DreamMovie
Post by: Patrice Terrier on December 28, 2016, 08:11:48 pm
This kind of red curtain was probably from the Soviet time. We also had this kind of movie theater here in France by the fifties.  :D

You know what, i keep using my 32-bit MovieBox.exe that was written in PB, anf if ever i couldn't play a movie with it, then i resort on VLC ;)

However this new project was more a kind of challenge for me, and an easy way to have both audio and video into the same application using only the current OS API. (I started from an horrible example provided with the latest Windows SDK, named  MFPlayer2)

But you know what, Media Foundation has been now superseded by Media Session, go figure !!!  ::)

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on December 28, 2016, 08:25:54 pm
Oh,

You don't really have to go that far in space and time, Patrice. That's how your Moulin Rouge scene is currently looking just a few blocks away from you:  ;D

(https://s-media-cache-ak0.pinimg.com/originals/f1/9e/77/f19e771e8e7bfcca4f66e69b65dcbe8d.png)
Title: Re: DreamMovie
Post by: Patrice Terrier on December 28, 2016, 08:39:39 pm
The Bollywood kitch style :o

See the red curtain i provide with my PhotoComposer application.
Very easy to add the open/close curtain effect to that one.

(http://www.zapsolution.com/DW/preview/pc_us.jpg)
Title: Re: DreamMovie
Post by: Patrice Terrier on December 29, 2016, 09:34:14 am
Mike--

For curtain effect, look at the Tron demo here:
http://www.objreader.com/index.php?topic=14.0 (http://www.objreader.com/index.php?topic=14.0)
or at the "Accordion" here:
http://www.objreader.com/index.php?topic=16.0 (http://www.objreader.com/index.php?topic=16.0)
this kind of animation would be very easy to add, once i have turned all the CreateWindowEx controls, into GDImage widget.
We could also have a marquee effect to display .srt subtitle while playing video.

Indeed, i would like to have all my media players into one single application.
"MovieBox", "BassBox", "BB64", "BassBox radio", and "Media settings".

About playing videos, many of the new players are based on the latest Mircosoft API, for example:
"Movie and TV", "Netflix", "Molotov".

And several are build upon VLClib, like "Popcorn Time"...

While VLClib works great, it requires a huge Framework.
When using the Microsoft API, there is nothing to install, because everything is already provided by the OS itself.

The main reason why i would like to switch to 64-bit, is because many of the new movies i have, couldn't be played with a 32-bit player, due to their very large size (above 4 Gb).

Did you read what i said about "Media Foundation" vs "Media Session" ?

Title: Re: DreamMovie
Post by: Patrice Terrier on December 29, 2016, 09:04:23 pm
I have completed the audio metadata with
- MEDIA_ALBUM
- MEDIA_GENRE
- MEDIA_COVERART

and the result is

(http://www.objreader.com/download/demo/CoverArt.png)
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on December 30, 2016, 01:20:53 am
Is this what you'd call "Variété Française"?! That's what I'd call "Bollywood kitch"!!

This is what a French chanteuse véritable should sound like dans le genre variété:

https://www.youtube.com/watch?v=ObeDLFcceJ0&list=RD3XRNegs6FdA&index=22 (https://www.youtube.com/watch?v=ObeDLFcceJ0&list=RD3XRNegs6FdA&index=22)

or this:

https://www.youtube.com/watch?v=xxKzzLK4G3k (https://www.youtube.com/watch?v=xxKzzLK4G3k)

or this:

https://www.youtube.com/watch?v=EiiW6fHwS9g (https://www.youtube.com/watch?v=EiiW6fHwS9g)

Zaz isn't much of a singer; there are (surprisingly) almost no great French voices except perhaps a few you can count by fingers on one hand. But she's so 100% genuine sterling French that she is forgiven in advance for all the notes she's gonna sing flat or sharp now or in the future. :)

Variété is cabaret music, in the sense of Moulin Rouge and Lido. Indila is naked showbiz "pop" with a distinct outre-mer sound. She tries to imitate Shakira while Zaz is pure and original.
Title: Re: DreamMovie
Post by: Patrice Terrier on December 30, 2016, 09:39:25 am
Quote
Variété is cabaret music, in the sense of Moulin Rouge and Lido. Indila is naked showbiz "pop" with a distinct outre-mer sound. She tries to imitate Shakira while Zaz is pure and original.
The purpose of the screenshot was {only} to show some of the extra TAG parameters, that could be displayed with the help of the AudioGenie.dll. 8)

...
Title: Re: DreamMovie
Post by: Patrice Terrier on December 30, 2016, 02:58:11 pm
Mike--

On Windows 10, do you know of a reliable way to retrieve the correct size of a video for MKV and MP4.

In order to get the correct size in the function below, i had first to install a 64-bit codec pack.  :-[

Code: [Select]
#include <Dshow.h>
HRESULT GetVideoSize(IN WCHAR* pszVideoFile) {
    long nW = 0, nH = 0;
    IGraphBuilder *pGraph = NULL;
    IBasicVideo *pVideo = NULL;

    HRESULT hr = CoCreateInstance(CLSID_FilgraphManager, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pGraph));
    if (SUCCEEDED(hr))  {
        hr = pGraph->RenderFile(pszVideoFile, NULL);
        if (SUCCEEDED(hr)) {
            pGraph->QueryInterface(IID_IBasicVideo, (LPVOID *)&pVideo);
            hr = pVideo->GetVideoSize(&nW, &nH);
            pVideo->Release();
        }
    }
zTrace(STRL(nW)); zTrace(STRL(nH));
    SafeRelease(&pGraph);
    return hr;
};

Added:
I made good progress, i shall post a new build by tomorrow with quite a lot of changes.
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 01, 2017, 12:36:22 pm
Season's greets, Patrice! :)

My Windows 10 standard Windows Media Player runs MPEG4 and MKV videos out of the box, and so should yours.

There's not a single 3rd party codec installed on my Windows 10 machine, which means that the both video formats have their respective codecs supplied as part of WMP's standard equipment.

You seem to be using DirectShow to retrieve your data. But according to the MF bible (https://msdn.microsoft.com/en-us/library/windows/desktop/ff819508(v=vs.85).aspx), it is a legacy technique. From the Win 10 perspective, any codec that you're downloading today from elsewhere is a legacy codec. Conversely, using DirectShow implies you must have a legacy codec to communicate with, hence the necessity to install one (or multiple) extra(s).

OTOH IMFTransform is a modern technique, and it is the recommended interface to be used to poll modern codecs that WMP is equipped with.
Title: Re: DreamMovie
Post by: Patrice Terrier on January 01, 2017, 03:55:44 pm
Mike--

I had to resort on DirectShow just to retrieve the correct size, so far i didn't find anything in the Media Foundation IMFPMediaPlayer that would do it. Anyway DirectShow is still there, and may be i will give it a try in 64-bit mode, because the 32-bit nVidia driver do not work well in composited mode, while 64-bit is perfrect.

Are you ready for the new build ?

>>Season's greets, Patrice!
Yes, and almost one year older in february ::)

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 01, 2017, 07:47:20 pm
... and almost one year older in february ::)

Myself, I'm going to get a year older chronologically this March 3rd, pretty close to your date. :) Keep your chin up! It isn't becoming to be sad at this age, my friend. Praise the Lord because I'm sure you used to know a lot of people who couldn't make it even this far. :)

Quote
Are you ready?

LOL Seems I'm always ready to get, but not always, to give. ;D

Go ahead as ready, Patrice!
Title: Re: DreamMovie
Post by: Patrice Terrier on January 01, 2017, 08:50:18 pm
Small change

Code: [Select]
void ShowVideo() {
    if (gP.mediatype == MEDIA_VIDEO) {

        GetVideoSize(gP.bin.lastmedia);
        SetWindowText(gP.hMain, MEDIAcaption(gP.bin.lastmedia));
        ResizeVideoWindow();

        if (!IsWindowVisible(gP.hVideo)) {
            ShowWindow(gP.hVideo, SW_SHOW);
        }
        HWND hCtrl = GetDlgItem(gP.hMain, IDC_VIDEO_ZOOM);
        EnableWindow(hCtrl, TRUE);
        ShowWindow(hCtrl, TRUE);
        if (gP.videoW > 0) {
            WCHAR szText[32];
            HRESULT hr = StringCchPrintf(szText, ARRAYSIZE(szText), L"Video size %dx%d", gP.videoW, gP.videoH);
            if (SUCCEEDED(hr)) { SendMessage(GetDlgItem(gP.hMain, IDC_VIDEO_SIZE), WM_SETTEXT, 0, (LPARAM) szText); }
        }
    } else {
        SetWindowText(gP.hMain, EXEcaption());
    }
    CloseSpinner();
}

} else {
    SetWindowText(gP.hMain, EXEcaption());

was missing...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 02, 2017, 01:34:05 pm
Hi Patrice,

Here comes my usual report:

1. MKV falls out of the Media Files mask and requires All Files to be selected to gain access to. Otherwise Open File is fine except for item 5 below.

2. URLs are fine everywhere and in all modes.

3. DirectShow is fine with MP4 and MKV under my Win 10 even though there are no legacy codecs installed there.

4. You can't reproduce the D&D problem because you're evidently having your UAC disabled. All my Windows OSes have their UAC and DEP controls set at their "factory" defaults, and D&D is inoperative everywhere if ZMF64 is launched As Admin. This is however a known MS Windows "feature": a program running at a normal priority privilege level (Explorer together with its desktop facility) cannot send messages (D&D included) to an elevated priority privilege application (ZMF64 launched As Admin). Please google for something like "can't drag and drop as admin" to read up more on this phenomenon.

5. DirectShow doesn't work for Matroska MKVs under both of my Win 7's even though I have full 32- and 64-bit CCCP codec packs installed there, and all other 32- and 64-bit video players play back these files just fine. (see the attached screenshot)

6. When I close the error message box as per item 5 above, the spinner stays running on my screen forever making any further use of this instance of ZMF64 ineffective.


So far I wasn't able to spot any visible Easter eggs in this version except:
-- there's no visualizer plugin any more;
-- the intro ("interlude") uses your custom animated PNG format.

Was I supposed to spot anything else? :)
Title: Re: DreamMovie
Post by: Patrice Terrier on January 02, 2017, 04:51:13 pm
Mike--

Thank you very much for the report.

>>MKV falls out of the Media Files mask and requires All Files to be selected to gain access to.
Yes, MKV was missing as well as these:
;*.mpeg;*.mpg;*.mov;*.qt;*.mkv;*.flv

>>DirectShow doesn't work for Matroska MKVs under both of my Win 7's even though I have full 32- and 64-bit CCCP codec packs installed there
I remember i had it working with DirectShow on Windows 7, with the PowerBASIC 32-bit MovieBox version.

>>When I close the error message box as per item 5 above, the spinner stays running on my screen forever making any further use of this instance of ZMF64 ineffective.
Shall be fixed in the next build.

>> there's no visualizer plugin any more
I never had OpenGL visual plugin in any of my Video player, but this is on my todo list for this new {universal} player.
But that means i shall have to switch back to DirectAudio (Bass.dll) when playing audio files, and by the way bringing .OGG support back too.

Added:
By the way the D&D problem when running in administrator is not a problem specific to this application, GOOGLE is very prolix on this, but no real solution.
Thus there is nothing i can do to change the Microsoft UAC rules ;)

...
Title: D&D and elevated UAC privilege
Post by: Patrice Terrier on January 03, 2017, 09:44:10 am
Mike--

Please try with the ChangeWindowMessageFilterEx API, to see if it could help to solve the UAC privilege problem with D&D


For most of my applications (including ObjReader) i need to allow these two
Code: [Select]
ChangeWindowMessageFilterEx (hwnd, WM_DROPFILES, MSGFLT_ALLOW, nullptr);
ChangeWindowMessageFilterEx (hwnd, WM_COPYDATA, MSGFLT_ALLOW, nullptr);

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 03, 2017, 08:57:57 pm
Hehe, nice find, Patrice! :)

I'm currently reading up on it in MSDN -- just seen your message on Jose's forum... :)

But does your message mean that you still can't reproduce the D&D issue on your own PC? Or can you? Have you tried to readjust your UAC settings?
Title: Re: DreamMovie
Post by: Patrice Terrier on January 03, 2017, 09:24:02 pm
>>But does your message mean that you still can't reproduce the D&D issue on your own PC? Or can you? Have you tried to readjust your UAC settings?
I have added the code into the attached version for you to test.

However i have not checked it myself because i am not comfortable with UAC settings.

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 03, 2017, 10:00:26 pm
While I'm checking out your latest zip (you can delete it now), please follow the two pictures below: these are Windows 10 Professional factory settings for DEP (untitled1.png) and UAC (untitled2.png) services.


[UPD] Nah, your mods don't seem to help...  :(  My Spy++ (Visual Studio tool) shows that privileged gP.hMain still doesn't receive the WM_DROPFILES message it gets when launched with a usual double click.
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 04, 2017, 12:57:24 am
If in the end we are still not able to cope with the WM_DROPFILES issue, I think it will be reasonable to at least add a small notification for the user who might be attempting to launch it As Admin, with the help of this simple check function suggested by MSDN:

Code: [Select]
/*++
Routine Description: This routine returns TRUE if the caller's
process is a member of the Administrators local group. Caller is NOT
expected to be impersonating anyone and is expected to be able to
open its own process and process token.
Arguments: None.
Return Value:
TRUE - Caller has Administrators local group.
FALSE - Caller does not have Administrators local group. --
*/
BOOL IsUserAdmin(VOID)
{
    BOOL b;
    SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
    PSID AdministratorsGroup;
    b = AllocateAndInitializeSid(
        &NtAuthority,
        2,
        SECURITY_BUILTIN_DOMAIN_RID,
        DOMAIN_ALIAS_RID_ADMINS,
        0, 0, 0, 0, 0, 0,
        &AdministratorsGroup);
    if (b) {
        if (!CheckTokenMembership(NULL, AdministratorsGroup, &b)) {
            b = FALSE;
        }
        FreeSid(AdministratorsGroup);
    }

    return b;
}

used somewhere at the app initialization stage e.g. like this:

Code: [Select]
    if (IsUserAdmin())
        MessageBox(NULL, L"As Administrator mode disables drag-and-drop.",
        L"Functionality Reduced:", MB_ICONASTERISK);
Title: Re: DreamMovie
Post by: Patrice Terrier on January 04, 2017, 10:21:00 am
Mike--

I do not have the same results on Windows 10  :o

Could you try to use D&D on the bottom of the window (gP.hMain), rather than in the center (gP.hGDImage), to see if it makes any difference.

Do you have the same problem when using D&D with ObjReader ?

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 04, 2017, 01:30:45 pm
Do you have the same problem when using D&D with ObjReader ?

Absolutely, Patrice. And not only with ObjReader64, but also with ObjReader PB, and with Objector, and with Eclecta, and with everything else including Notepad. And not only under Windows 7 but also under Windows 10. I just never cared to run them As Administrator until you asked me to extensively test the ZMF64 thingy.


Quote
Could you try to use D&D on the bottom of the window (gP.hMain), rather than in the center (gP.hGDImage), to see if it makes any difference

I am aware of the difference between gP.hMain and gP.hGDImage, Patrice. And all your sources you're sending me also get immediately recompiled in my VS Ultimate 2013 so that I'm testing two executables where you're testing only one. And my own personal home-based NASA Mission Control Center comprises three distinctly different ASUS MB + GenuineIntel CPU desktop computers plus two minor laptops to develop and test my applications on. Otherwise how would I dare claim FBSL's compatibility with everything from Windows 95 to Windows 10, Ubuntu Wine, Mac OS X Wine, and ReactOS?

No, it doesn't make any difference whether the files to be played back are dragged-and-dropped on either the header or the footer part of gP.hMain, nor, as it happens, whether gP.hGDImage is also made aware of D&D and equipped to handle the WM_DROPFILES message all on its own.
Title: Re: DreamMovie
Post by: Patrice Terrier on January 04, 2017, 01:49:08 pm
Thus, as you suggested, i will just display a popup to inform the user that they can't use D&D while in admin mode.  >:(

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 04, 2017, 02:18:44 pm
(https://sc.mogicons.com/l/thumbs-up-192.png)

If your UAC settings are similar to mine and you actually can D&D the files onto ZMF64 when As Admin while I can't, my only suggestion would be to change the notification to something like:

Code: [Select]
    if (IsUserAdmin())
        MessageBox(NULL, L"\"As Administrator\" mode may compromise drag-and-drop.",
        L"Reduced Functionality Alert", MB_ICONASTERISK);

Don't be angry with me, Patrice. The fault is neither yours nor mine. It's an MS Windows glitch conventionally called a "feature". :)
Title: Re: DreamMovie
Post by: Patrice Terrier on January 05, 2017, 08:13:37 pm
I am almost done converting the Windows controls into GDImage widgets, to have all the GUI working in HUD mode with everything.  8)

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 05, 2017, 09:33:54 pm
Are you planning to publish a sample HUD demo with all the widgets in one place?
Title: Re: DreamMovie
Post by: Patrice Terrier on January 05, 2017, 10:04:54 pm
Yes, i hope to be able to post something tomorrow.

The HUD mode is a mandatory when playing HD movie in full screen, it allows to show/hide the widget controls just like in Oblivion or Avatar. ;)

On the attached screen shot the GDImage widgets are floating directly above the movie itself, while the standard controls are still shown on the bottom.
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 06, 2017, 02:41:04 am
Aha! So, the widgets aren't really parts, or children, of the movie rendering surface? Each of them is just an own transparent overlay window floating above, and within the clipping region of, the DirectShow/MF/whatever 2D render target the movie is streamed on?
Title: Re: DreamMovie
Post by: Patrice Terrier on January 06, 2017, 09:42:36 am
This is the same concept that i have used in other demos, however this time everything is inside of the same container (no external popup dependencies).
And the controls, rather than skinned CreateWindowEx, are all GDImage widgets, this gives me full control on their behavior, including the hability to create new specifics like these:

(http://www.zapsolution.com/pictures/Widget01.jpg)

You will understand more once you see the source code being used to create a slider or a gauge.
Using a GDImage callback you can monitor mouse events, and all user interactions (indeed that works just the same that for all the windows that are child of the OS Desktop, or in a MDI form).
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 06, 2017, 11:44:10 am
OK,

So, there's a "SideBar_AppBarWindow"-like transparent container window covering the app main window's visible areas, and a number of "BasicWindow"-like transparent widget windows (or regions) that it hosts similar to Vista Sidebar?
Title: Re: DreamMovie
Post by: Patrice Terrier on January 06, 2017, 02:08:43 pm
Yes, except that the widgets sprites are all anchored inside of the same GDImage container, making thing easy to create smooth effect to hide them when looking a video full screen, they will be shown back as soon as there is a mouse activity.

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 08, 2017, 10:35:56 pm
Am I supposed to still see the gray "metal" plate under the video render when in full screen?
Title: Re: DreamMovie
Post by: Patrice Terrier on January 08, 2017, 11:30:07 pm
Currently, yes, but that would be done in the next round...

As i said, this build introduces much changes, and my first goal was to ensure that everything is working the same than with Windows controls. By the way, the widgets should work smoother, especially when moving sliders, and updating the status texts.
There is only one single paint, instead of individuals, when using standard controls.

...

Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 08, 2017, 11:33:44 pm
How would you comment on the application's memory footprint, Patrice?
Title: Re: DreamMovie
Post by: Patrice Terrier on January 09, 2017, 08:34:21 am
Mike

If you unload the gem stone animation, then the memory footprint should be much lower.

The gem stone animation is one of the biggest i have, 30000×500 pixels in 32-bit, go figure.
It is used for stress test purpose, but in the final version you will be able to select another animation, or even none.
I could also load/unload animation while playing a media.

I plan also to add D&D to browse for image collection.

I have not found yet how to unload Media Foundation from memory, next on my todo list.
Title: Re: DreamMovie
Post by: Patrice Terrier on January 09, 2017, 08:02:42 pm
Mike--

Could you check this new build running Video full screen, to see the auto/fade of the widget controls, when there is no mouse activity.

There is a delay of 3 secondes before the effect starts.

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 10, 2017, 01:59:39 am
Sure Patrice,

Sorry for being out for a while due to some problems with my primary monitor's power on/off micro switch button. The times when you could take a transistor in your hand and look at it as if it were a Martian tripod are long gone. Again, senile hand tremor is hard to fight. :)


[UPD] Hehe the transition is cool! :)  However if you maximize the window right after you launch the app while there's nothing loaded in it yet, the progress track is expanded but the thumb button stands still where it is as if about 25% of the track were already played back.
Title: Re: DreamMovie
Post by: Patrice Terrier on January 10, 2017, 08:59:50 am
Thanks for the UDP, i was not aware of it. I have found also another one, and i shall post a new build once fixed.

Rather than fading the alpha channel, i could have moved down the widgets, but fading was my choice because it couldn't be done with {standard} Windows controls.  ;)

...
Title: Re: DreamMovie
Post by: Patrice Terrier on January 12, 2017, 11:46:17 am
Mike--

Here is a new build.

(http://www.objreader.com/download/demo/ZMF64_01.png)

- New background set, to select from.
- Image D&D
- Loop mode
- New png components in the resource folder, to change the pannel widgets.


...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 12, 2017, 07:04:01 pm
Got it!

(The woofer is a killer! :D )
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 12, 2017, 09:51:29 pm
Can we change the animation to be played in the gP.hGDImage window on the fly yet? I see the ani-PNGs can be D&D'ed there but, unlike the original "interlude", they don't seem to be animated.
Title: Re: DreamMovie
Post by: Patrice Terrier on January 12, 2017, 10:27:55 pm
that would come in a next build, as well as recursive D&D of an image folder.
Title: Re: DreamMovie
Post by: Patrice Terrier on January 15, 2017, 07:58:33 pm
Mike--

Here is the pre-release version.

You can change/select the interlude animation using the auto-hide edge arrow(s).
It can also be used to move from one media to another, when using folder D&D (recursive search).
(not done yet with images).

...
Title: Re: DreamMovie
Post by: Patrice Terrier on January 16, 2017, 07:49:10 pm
Mike

I made a last minute change, please download again  8)
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 18, 2017, 02:07:02 am
Done,

But when dragged-and-dropped, ani-PNGs seem to fail to replace the interlude: they aren't animated nor are they saved as a preferred interlude to be launched next time the app starts. Is this the expected behavior?

Otherwise the app is beautiful, as always. :)


[UPD] Oh no Patrice,

That tumbler is OK only against the metallic background, otherwise it's entirely out of place here! I'm feeling like I'm back in Red Russia again... ;)
Title: Re: DreamMovie
Post by: Patrice Terrier on January 18, 2017, 05:39:10 pm
Quote
But when dragged-and-dropped, ani-PNGs seem to fail to replace the interlude
While i could do it, so far i didn't meant to use ani-PNG's by D&D.
They could be copied on the fly into the resource folder, and added to the ANIM_LISBOX, but then i should also provide a way to remove those you do not want to keep, or perhaps ask the user what to do with it.
Have to think of it...

Quote
That tumbler is OK only against the metallic background
I do not understand, what do you call the tumbler ?
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 18, 2017, 07:36:32 pm
Got it!


I do not understand, what do you call the tumbler ?

Sorry for that inadvertent confusion.

Oxford Dictionary (https://en.oxforddictionaries.com/definition/tumbler), item 4: "A pivoted piece in a lock that holds the bolt until lifted by a key."; and

Merriam-Webster Dictionary (https://www.merriam-webster.com/dictionary/tumbler), item 3a: "A movable obstruction in a lock (such as a lever, latch, wheel, slide, or pin) that must be adjusted to a particular position (as by a key) before the bolt can be thrown.":

(http://vorota-servis-mariupol.narod.ru/_pu/8/77362330.jpg)

Picasso's girl was also a tumbler:

(http://www.pravmir.ru/wp-content/uploads/2012/05/470423831.jpg)

and IIRC the Batmobile was called Tumbler too:

(http://img.hexus.net/v2/lifestyle/misc/real-tumbler.jpg)

but what I actually meant was a heavy-duty army-style electrical toggle switch:

(http://www.elkos.com.ua/img/catalog/4939.jpg)


:)
Title: Re: DreamMovie
Post by: Patrice Terrier on January 18, 2017, 10:00:23 pm
you could use the attached one if you prefer, or one of you own :)

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on January 18, 2017, 11:05:28 pm
PERFECT!!!

But Patrice, please please make it switch ON to the right, and OFF, to the left...
Title: Re: DreamMovie
Post by: Patrice Terrier on January 21, 2017, 11:38:44 am
Mike

The switch has been fixed and put into the resource folder, however i have used another one for the official version.

I have also fixed several small issues when switching between the different media modes, and solved one z-order problem.
Added a couple of new backgrounds, and reworked some of the interlude animations.

I have attached the latest source code there. (http://www.objreader.com/index.php?topic=80.msg346#msg346)
Title: Re: DreamMovie
Post by: Patrice Terrier on January 24, 2017, 03:42:27 pm

Mike--

I have updated the project to support D&D of ani_png.

Note: While they can be used as "Interlude", they are not saved into the "Resource" folder, meaning you can use them only during the current session.

Try with the attached ani.

Title: Oscilloscope
Post by: Patrice Terrier on January 30, 2017, 07:37:03 pm
Mike--

I am starting to work on the next version (the one with 64-bit OpenGL plugins).

First thing i have added recording sound capture to display a FFT of the audio flow.
There are some latencies, because WIM data generally arrive from the recording device in blocks rather than in a continuous stream,
while this seems acceptable on my computer, i have no idea of what it could give on yours.

Thus i am looking forward for your feedback, thank you!

Note: while the Oscilloscope would work also with a movie sound track, it is enabled only with regular audio files.

In full screen mode the Oscilloscope widget stay always visible (no vanishing).

The 64-bit plugins will give us the opportunity to check new effects functions, that we could use also in ObjReader (to achieve post-processing).

...

Title: Re: DreamMovie
Post by: Patrice Terrier on February 01, 2017, 02:04:30 pm
Adding audio support for
.ogg, .aif, .cda, .mo3, .it, .xm, .s3m, .mtm, .mod, .umx.
altogether with extra DirectSound capabilities.

...
Title: Re: DreamMovie
Post by: Patrice Terrier on February 05, 2017, 05:23:13 pm
Big update done to the project.

Learn more here. (http://www.objreader.com/index.php?topic=80.msg482#msg482)

...
Title: Re: Oscilloscope
Post by: Michael Lobko-Lobanovsky on February 08, 2017, 10:13:24 pm
Thus i am looking forward for your feedback, thank you!

Sorry for my prolonged silence, Patrice. You probably wouldn't believe me but I'm still in the process of refurbishing my workstation and it is only temporarily and for short time periods that this or that one of its constituent PCs is in full working order. One of the major upgrades will be a brand new 27" full HD monitor to ease up the stress my older 22" monitors are causing to my aging eyesight; but that one is going to arrive by the end of the month only. In the meantime, I'm replacing my older hard disks with new ones and also rearranging the overall disposition of numerous pieces of HW and furniture the workstation is composed of.

Nonetheless I'm going to DL your latest binaries right away and I'll come back with my feedback if I see anything unusual about their intended behavior. Thanks for your patience! :)
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on February 09, 2017, 03:49:52 am
Big update done to the project.
Learn more here. (http://www.objreader.com/index.php?topic=80.msg482#msg482)

OK here are my observations:

1. x64 Win 7 Ult Sp1/ASUS MB/i5 quadcore @3.6GHz/2 x nVidia GTX 550Ti/wireless mouse and keyboard

-- Audio files sound OK, woofer and spectrum alive;
-- Video files windowed mode OK, full screen KO: when video comes to an end, both cursor and HUD remain invisible and the app needs a restart to get access to its controls again. (I refuse to debug this glitch myself because your sources available on the site do not match the latest public binaries ;) )

2. x64 Win 10 Pro AE/ASUS MB/i5 quadcore @3.1GHz/2 x nVidia geForce 8600 GTS/USB mouse and keyboard

-- Audio files sound OK, woofer dead, spectrum invisible;
-- Video files all modes OK.

3. x64 Win 7 Ult Sp1/ASUS MB/AMD Sempron single core @2GHz/AMD ATi Saphire Radeon R7 240/USB mouse and keyboard

-- Audio files sound OK, woofer dead, spectrum invisible;
-- Video files all modes OK.

4. Ani-PNG D&D is OK everywhere.

5. Static image D&D leads to the spinner staying permanently visible/unkillable everywhere.
Title: Re: DreamMovie
Post by: Patrice Terrier on February 09, 2017, 10:10:09 am
Mike--

Thank you for your detailed feedback much appreciated !

Here is the latest source code + binaries i am working on, to make sure that we are dealing with the same version.

Currently i am working on the plugin code section, however this part of the code is disabled until i have converted at least one plugin to 64-bit.

Looking forward to your feedback to see if this version works better than the one you have (in video mode, cursor and hud should now restore properly).

Added:
In the HideVideo procedure, please remove
if (IsWindowVisible(gP.hVideo)) {
this is a mistake.

Here is the good one
Code: [Select]
void HideVideo() {
    if (ZD_GetObjectAngle(ID_VIDEO_ZOOM) > 0) { gP.pPlayer->SetZoom(1.0f); }
    ZD_ShowGauge(ID_VIDEO_ZOOM, FALSE);

    //ZD_DeleteObject(ID_VIDEO_SIZE);
    ZD_SetObjectVisibility(ID_VIDEO_SIZE, FALSE);
    SetWindowText(gP.hMain, EXEcaption());
    if (IsWindowVisible(gP.hVideo)) {

        ShowWindow(gP.hVideo, SW_HIDE);

        //EnableWindow(gP.hMute, gP.bMediaLoaded); SendMessage(gP.hMute, BM_SETCHECK, gP.bMediaLoaded, 0);
        ZD_SetObjectHidden(ID_BTN_MUTE, ZS_INACTIVE); // 2 = Transparent, its ID won't be detected and it couldn't be moved.
        ZD_SetObjectFrameToUse(ID_BTN_MUTE, 2, FALSE);

        ZD_SetObjectHidden(ID_BTN_LOOP, ZS_INACTIVE); // 2 = Transparent, its ID won't be detected and it couldn't be moved.
        ZD_SetObjectVisibility(ID_BTN_LOOPING, FALSE);
        ZD_SetObjectFrameToUse(ID_BTN_LOOPING, 1, FALSE);
        ZD_SetObjectFrameToUse(ID_BTN_LOOP, 2, TRUE);

    }
}

Quote
5. Static image D&D leads to the spinner staying permanently visible/unkillable everywhere
This one has not been solved yet, i am working on it.
...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on February 09, 2017, 05:33:36 pm
No Patrice,

In config #1, the HUD still remains invisible when the video ends and the viewport jumps from its full screen mode back to the default window size. The cursor is visible only as long as it stays outside the window and disappears when entering it. The hidden HUD controls however seem to be responsive to this invisible cursor, and I can pop up the File Open dialog if I click intuitively someplace where the Run triangle should've been. I can also close the app clicking the [X] button that lights up red when the invisible cursor "hovers" over it.

This HideVideo() routine doesn't seem to have any means to show anything. It hides everything all right, but where's the code that actually brings it all back on screen when the video ends? Is it explicit or hidden somewhere in the libraries?

Again, configs #2 and #3 still don't exhibit this weird behavior...
Title: Re: DreamMovie
Post by: Patrice Terrier on February 09, 2017, 06:43:26 pm
Argh!

The problem is with Media Foundation that works in assynchrone mode, while DirectX works in synchrone mode.
And the way to hide show the cursor is a true nightmare.

This is the code that is responsible to restore the cursor visibility as well as the widget controls.

Code: [Select]
       
        // Make sure to restore the alpha channel of the widget control panel content
        gP.AlphaEffect = 0;
        if (ZD_GetObjectAlpha(gP.controlID[0]) < 255) {
            Show_Cursor(); ChangeCtrlAlpha(255);
        }
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on February 10, 2017, 05:58:51 am
The problem is with Media Foundation that works in assynchrone mode ...

Patrice,

I think that regardless of synchronicity, the HUD and cursor should simply be forced visible unconditionally every time the window changes its size. It would look like a programmatic crutch because it doesn't fight the very cause of the glitch but it is perfectly logical functionally and it would produce the exact effect we desire on all the HW configurations in question.

8)
Title: Re: DreamMovie
Post by: Patrice Terrier on February 10, 2017, 10:02:31 am
I am fighting with another problem when there is a mixing of several media type within a single playlist D&D.

MEDIA_IMAGE
MEDIA_VIDEO
MEDIA_AUDIO
MEDIA_AUDIO_BASS

I had to write this, to wait for full completion of asynchronous MF process

Code: [Select]
void STOP_MFP() { // Have to do this because MFP is asynchronous
    MSG msg = { 0 };
    if ((gP.media == MEDIA_VIDEO) || (gP.media == MEDIA_AUDIO)) {
        gP.stopmfp = 1; (void)gP.pPlayer->SetPosition(gP.duration);
        while (GetMessage(&msg, NULL, 0, 0)) {
            if (gP.stopmfp == 0) { break; }
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        if (msg.message == WM_QUIT) { gP.stopmfp = BAIL_OUT; }
    }
}
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on February 10, 2017, 10:21:38 am
I had to write this, to wait for full completion of asynchronous MF process

Ha yes,

It is high time to write a DOEVENTS procedure or macro into you BASIC Tools include file.  :D
Title: Re: DreamMovie
Post by: Patrice Terrier on February 11, 2017, 03:55:53 pm
Mike--

Here is a new build, i hope all issues have been fixed in it.

In this version i have added also my first 64-bit "LaserBeam" visual plugin for test purpose.

I shall provide soon the 64-bit plugin source code, in case you want to write one ;)

...
Title: Re: DreamMovie
Post by: Michael Lobko-Lobanovsky on February 12, 2017, 01:37:53 pm
Hi Patrice,

Well done! The config #1 issue seems to be gone now. :)
Title: Re: DreamMovie
Post by: Patrice Terrier on February 12, 2017, 03:39:56 pm
Mike--

I have attached the source code of the LaserBeam plugin to this post
http://www.objreader.com/index.php?topic=77.msg494#msg494
Title: Re: DreamMovie
Post by: Patrice Terrier on March 11, 2017, 10:20:35 am
TCLib plugins:
The latest TCLib 64-bit OpenGL visual plugins VS 2015 projects have been attached to the MediaBox thread (in the Eye candies section).
Each of the the binary DLL, must be copied into the BBplugin folder and replace the previous one. 

The size reduction over the classic VS projects is absolutly amazing, between 4 or 7 times smaller without using any compressor.

bbp_Bubble
bbp_Fahrenheit
bbp_Hal
bbp_Helios
bbp_Laserbeam
bbp_Matrix
bbp_Oscillo

Title: MBox64 on codeproject
Post by: Patrice Terrier on July 04, 2017, 10:43:45 am
MediaBox (MBox64) has been posted on codeproject here. (https://www.codeproject.com/Articles/1194399/MediaBox-MBox)

I did it, to see if i can find some contributors for new OpenGL visual plugins ;)