![]() |
|
SageTV Github Development Discussion related to SageTV Open Source Development. Use this forum for development topics about the Open Source versions of SageTV, hosted on Github. |
![]() |
|
Thread Tools | Search this Thread | Display Modes |
#1
|
|||
|
|||
VS2015 build environment
The Visual Studio build environment in the repo (for building Windows native code) has been migrated to use VS2015 Community Edition, which is a free download from MS. It's able to build all the exe, dll and ax files.
These binaries have been run on Win7-x64 for over a week. The VS Projects are currently setup to produce XP-compatible binaries and have been reported to run on XP. The version # in SageTv.exe has been rolled to 9.0.0.5. There's currently no mechanism that automates bumping this with subsequent builds. A related discussion about that topic starts here: http://forums.sagetv.com/forums/show...0&postcount=39 The VS Solution is no longer compatible with VS2005 and it's libraries. For those familiar with the original VS2005 environment, this change to VS2015 removes the use of SAGEDEVREL and SAGEDEVDEBUG environment variables. The binaries will now end up in native\Build\Release & Debug. The DirectShow BaseClasses source is now integral to the sagetv tree and gets automatically built as part of the overall Solution. This should simplify things. DirectX SDK and SDK6.1 are still needed. See the HOWTO file (below) for the exact details. VS provides MSBuild to build from the command line. I haven't tried it out. As helpful as the forums are, they can result in a bit too much "Where's Waldo" for my taste, especially when it comes to a topic like this. I find it helpful to have all the toolset & build requirements in one place, preferably as part of the source code tree and under SCCS. Consistent with that philosophy, there's now a file at the root of the tree, "HOWTO-BuildWindowsNativeCode.txt" that gives the exact setup for the tools and environment variables needed to build the Solution. We can tweak that doc as conditions change. Side note: To run Sage9 binaries on top of an existing Sage7 installation, you may need additional MS-provided libraries on the Sage system. In the future, the Sage9 installer will take care of this automatically. 1) Verify the presence of ucrtbase.dll on the Sage system. Search for it throughout the Windows folder & sub-folders. If ucrtbase.dll isn't present, download and install the Visual C++ Redistributable for Visual Studio 2015 on the target system: https://www.microsoft.com/en-us/down....aspx?id=48145 2) Verify the presence of d3dx9_43.dll on the Sage system. On 64-bit systems, it should be in Windows\System32 **and** Windows\SysWOW64. On 32-bit systems, it will only be in the System32 folder. If d3dx9_43.dll isn't present, download and install the DirectX End-User Runtimes (June 2010) at: http://www.microsoft.com/en-us/downl...s.aspx?id=8109 3) To run the Debug version of Sage binaries, the Sage box needs to have several additional libraries: msvcp140D.dll, vcruntime140D.dll and ucrtbaseD.dll. On 64-bit systems, these should be in Windows\System32 **and** Windows\SysWOW64. On 32-bit systems, they need only be in the System32 folder. If these 3 (6) aren't present, copy them from your VS2015 development system into the corresponding System32 & SysWOW64 folders on the Sage box. I'll continue to update this post as needed.
__________________
System #1: Win7-64, I7-920, 8 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HDHR-US (1st gen white) tuners. HD-200. System #2: Win7-64, I7-920, 8 GB mem, 4TB HD. Java 1.8.0_131. Sage v9.1.6.747. ClearQAM: 2x HDHR3-US tuners. HD-200. System #3: Win7-64, I7-920, 12 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HVR2250; Spectrum Cable via HDPVR & USB-UIRT. 3x HD-200. Last edited by JustFred; 10-21-2015 at 07:27 PM. Reason: Additional libraries needed for running a Debug build |
#2
|
|||
|
|||
Hi JustFred,
You mentioned in your above post that you felt that compiled native Windows code should also run on Windows XP, but you hadn't tried it yet. I tried that yesterday and had no luck. Running the new SageTV client on Windows XP 32bit resulted in error. The Sage startup logo rectangle displays as normal, then a dialog pops up with the error: java.lang.UnsatisfiedLinkError ...DShowPlayer.dll Can't find dependant libraries The same client install with the V9 upgrades ran fine on the Windows 7-64 machine that I compiled on, so I feel confident that the setup and code is the same on both computers. And the same WinXP computer only upgraded with Sage.jar v.9.0.2.5, and lucene-core-3.6.0.jar works fine. I read your post, and your detailed instructions for compiling the Windows native code. I compiled in Win32 mode on VS2015, followed your well made instructions exactly, and using JDK 1.8.0_60. The initial setup is SageTV 7.1.9, the new compiled executables, Sage.jar v.9.0.2.5, and lucene-core-3.6.0.jar. This v9 upgrade setup works fine for me in Win7, but not on WinXP. Based on that error message, do you have any idea what the issue might be? And I guess the end question is, do you think it will be possible to run SageTV v9 on WinXP, or will it be Win7 minimum going forward? I have 2 WinXP computers (small Acer Aspire Revos) that have always run SageTV very well, but video playback on these units when running Win7 has never been smooth, so I'm simply trying to avoid new hardware for those TVs. If you have suggestions I can try, and you are interested in seeing if the new native code can be made to run in WinXP, I'd be happy to test it. Thanks for your feedback. |
#3
|
|||
|
|||
I'm disappointed that this doesn't "just run" on XP. I tried hard within VS to be sure that the windows binaries themselves (exe, dll & ax files) were compiled so that they would run under XP, but I didn't touch any of the actual source code itself.
That error msg is probably the key to figuring out the root cause. Unfortunately I'm not familiar enough with the interplay between native code & Java to know where to look to debug it. Hopefully someone will chime in and we can get the issue resolved. BTW, not that it's relevant in this particular case, be aware that the exe/dll/ax files need to be replaced in all 3 folders: SageTv\Common, SageTv\Placeshifter and SageTv\SageTv. I usually just copy my entire Release folder to the top-level SageTv dir. and run a batch file that uses xcopy to do a blanket update/replace of the files in each of the 3 destination folders.
__________________
System #1: Win7-64, I7-920, 8 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HDHR-US (1st gen white) tuners. HD-200. System #2: Win7-64, I7-920, 8 GB mem, 4TB HD. Java 1.8.0_131. Sage v9.1.6.747. ClearQAM: 2x HDHR3-US tuners. HD-200. System #3: Win7-64, I7-920, 12 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HVR2250; Spectrum Cable via HDPVR & USB-UIRT. 3x HD-200. Last edited by JustFred; 10-16-2015 at 02:08 PM. |
#4
|
|||
|
|||
When I look on StackOverflow for that error ( http://stackoverflow.com/questions/4...sfiedlinkerror ) I see a marked correct answer of:
Code:
This message means that Java is looking for a native method that looks like the Java method double[] calibrate(double[], double[], int, int) If you have generated your header files correctly, and built the library, this most likely means you are missing the implementation of that method. Some things that come to mind: Did you rebuild the library after you implemented the method? Did you happen to change the interface of the Java method after you built the library? Another more general question and answer on StackOverflow: http://stackoverflow.com/questions/2...linkerror-mean
__________________
"Keep your goals away from the trolls" Last edited by BobPhoenix; 10-16-2015 at 09:47 AM. |
#5
|
|||
|
|||
BobPhoenix: Thanks for the input. It got me thinking again. Since the exact same code runs on Win7, I don't think it's merely a case of a missing **function**.
Re-reading Carey's post, "...DShowPlayer.dll Can't find dependent libraries", I take it to mean that DShowPlayer.dll (itself) can't find a dependent **library**. in VS2015, MS has refactored the libraries **they** provide (and expect to link to), and I suspect that since the new Sage binaries are built with the new VS, our binaries are looking for a MS-provided library that's already included in Win7 but not natively provided by XP. If my hunch is right, then somehow we need to figure out what the missing MS libraries are and then just copy them to XP's Windows directory.
__________________
System #1: Win7-64, I7-920, 8 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HDHR-US (1st gen white) tuners. HD-200. System #2: Win7-64, I7-920, 8 GB mem, 4TB HD. Java 1.8.0_131. Sage v9.1.6.747. ClearQAM: 2x HDHR3-US tuners. HD-200. System #3: Win7-64, I7-920, 12 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HVR2250; Spectrum Cable via HDPVR & USB-UIRT. 3x HD-200. |
#6
|
||||
|
||||
Quote:
Quote:
__________________
Batch Metadata Tools (User Guides) - SageTV App (Android) - SageTV Plex Channel - My Other Android Apps - sagex-api wrappers - Google+ - Phoenix Renamer Downloads SageTV V9 | Android MiniClient |
#7
|
|||
|
|||
DShowPlayer.dll is something that we build and it should end up in the SageTv\SageTv folder. If it's missing, then that's the problem.
On the other hand... Back to my guess(tm) about a missing MS library. VS2015 now builds & links to 2 new MS-provided libraries, vcruntime.lib & ucrt.lib. If you're interested in the gory details, see (especially sect #3): http://blogs.msdn.com/b/vcblog/archi...ersal-crt.aspx Or, just skip to the chase: As a test, on the XP box, download and install the Visual C++ Redistributable for Visual Studio 2015: https://www.microsoft.com/en-us/down....aspx?id=48145 Let's see if that resolves the issue.
__________________
System #1: Win7-64, I7-920, 8 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HDHR-US (1st gen white) tuners. HD-200. System #2: Win7-64, I7-920, 8 GB mem, 4TB HD. Java 1.8.0_131. Sage v9.1.6.747. ClearQAM: 2x HDHR3-US tuners. HD-200. System #3: Win7-64, I7-920, 12 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HVR2250; Spectrum Cable via HDPVR & USB-UIRT. 3x HD-200. |
#8
|
|||
|
|||
Quote:
I copied over the new v9 files again to my WinXP test system, installed the x86 VS2015 Runtime, and it worked. I wasn't aware of having to replace one DLL and the .AX files into the common folder, but I did that this time as well. However, I never did that on the Win7 system yesterday when v9 did run okay, so I can't see that being part of the solution. In an earlier post, it sounded like you suggested copying all the new native files also into Common folder, but I only found the following original files to have the same name in Common as the new native files: TunerStub.dll MPEG2Dump.ax MpegAudioEnc2.ax MpegDeMux.ax MpegMux.ax MusicVisFilter.ax SageTVFileSrc.ax StrmDeMux.ax TSSplitter.ax So do you feel that replacing only the original files of the same name is sufficient, or should we copy all the new DLL's as well into Common for v9? Thanks for the fix, and all your hard work for getting v9 compiled on Windows! |
#9
|
|||
|
|||
Fantastic! I'll update the beginnng of this thread to make note of it.
We need to replace the already-existing files in all 3 Sage sub-dirs. No need to mindlessly dump ALL the files from Release into each of the 3. I use xcopy to only **update** files that already exist in each of the 3 target dirs. Here's my quick & dirty batch file, Sage9NativePatch.bat, which I put in the Release dir and then run: Code:
@echo off if [%DEBUG%]==[on] ( @echo on ) :: kfischer 2015-10-17 @ 9:48am v1.02 :: :: SageTv patcher for patching an existing v7 installation :: from v9 development binaries. :: :: uses: :: xcopy <source> <destination> /U /Y /L > updatelog.txt :: /U = only files that already exist in destination :: /Y = suppress 'overwrite ?' prompt :: /L = displays files that WOULD be copied :: # run this in the src directory: :: assumes the following dir structure. :: SageTv\Release (source of v9 files), and this bat file :: SageTv\SageTv :: SageTv\Common :: SageTv\Placeshifter :: :: Get the name of this script set thisProgram=%~nx0 :: Strip off the four characters to get an output filename base set basename=%thisProgram:~0,-4% set eventLog=%basename%_log.txt @echo SageTv patcher for patching an existing Sage7 installation @echo with binaries from v9 development builds @echo. @echo You MUST run this patcher from the **Source** directory! @echo old files are NOT preserved.. it's up to YOU to save them @pause :: dont want to replace SageTv.exe, cause of license key issues :: if exist SageTV.exe ( :: ren SageTV.exe SageTv.exe.v9 :: ) :: if set to /L, just log output, no actual copy set DRY_RUN=/L set DRY_RUN= set DEST_DIR=..\SageTv @echo .. copying to %DEST_DIR% dir @echo .. copying to %DEST_DIR% > %eventlog% xcopy . %DEST_DIR% /U /Y %DRY_RUN% >> %eventlog% set DEST_DIR=..\Common @echo .. copying to %DEST_DIR% dir @echo .. copying to %DEST_DIR% >> %eventlog% xcopy . %DEST_DIR% /U /Y %DRY_RUN% >> %eventlog% set DEST_DIR=..\PlaceShifter @echo .. copying to %DEST_DIR% dir @echo .. copying to %DEST_DIR% >> %eventlog% xcopy . %DEST_DIR% /U /Y %DRY_RUN% >> %eventlog% @echo .. Done - you can view the logfile '%eventlog%' @echo.
__________________
System #1: Win7-64, I7-920, 8 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HDHR-US (1st gen white) tuners. HD-200. System #2: Win7-64, I7-920, 8 GB mem, 4TB HD. Java 1.8.0_131. Sage v9.1.6.747. ClearQAM: 2x HDHR3-US tuners. HD-200. System #3: Win7-64, I7-920, 12 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HVR2250; Spectrum Cable via HDPVR & USB-UIRT. 3x HD-200. Last edited by JustFred; 10-17-2015 at 10:56 AM. Reason: replace dest. files regardless of date |
#10
|
|||
|
|||
After installing the VS2015-built binaries on a few more systems, it's become clear that a critical MS-provided library, ucrtbase.dll, may not be present on the target system. Its potentially an issue on any pre-Win10 OS. The first post in this thread has been updated to address the issue and provides a solution.
__________________
System #1: Win7-64, I7-920, 8 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HDHR-US (1st gen white) tuners. HD-200. System #2: Win7-64, I7-920, 8 GB mem, 4TB HD. Java 1.8.0_131. Sage v9.1.6.747. ClearQAM: 2x HDHR3-US tuners. HD-200. System #3: Win7-64, I7-920, 12 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HVR2250; Spectrum Cable via HDPVR & USB-UIRT. 3x HD-200. |
#11
|
|||
|
|||
MPEG2 Audio Playback Issues
Hi Just Fred,
I've been using the new compiled files on my SageTV systems since I posted on this thread last, 2 clients and 1 media server. They have worked fine, but I recently noticed that I no longer have audio playback of MPG2 files. I use 3 tuners, 2 HD-PVR's, and 1 WinTV-HVR-1600. The TS files from the HD-PVR's play fine, both video and audio. The audio from the MPG2 files from the WinTV-HVR-1600 doesn't play with the new filters compiled with VS2015. Most of my recordings are with the HD-PVR's, so I didn't noticed for several days. SageTV details these files as: MPEG2-PS[MPEG2-Video/3.8Mbps 4:3 480i@29.97fps, MP2/384Kbps@48kHz Stereo So I did some trial and error, audio on these video files plays fine on original SageTV install, and with the new compiled EXEs, and with the newest Sage.jar, and with the newest STV, and even with the VS2015 compiled DLLs. But when I add the new VS2015 compiled .ax filters, then the MPEG2 audio no longer plays. It may be obvious that it would be the filters, but just wanted to help eliminate some possible questions. Am I the only one that's noticed this MPEG2 audio playback issue so far? Or did I miss somewhere and this was a known issue with the new compiled filters? I'm also seeing some frame drops using the new compiled filters, that I don't with the original install files. It's easy enough to roll back doing an Install>Repair and updating just the EXE and jars. But wanted to offer my feedback and see if this was already experienced by you or others. Thanks. |
#12
|
|||
|
|||
Could you check and see if it might be an audio channel(track) issue on the player? It might be defaulting to an audio channel that is empty. SageTV7 and 9 has done tricks like that on certain channels/tuners from time to time on my system.
The audio button on your SageTV remote should be able to cycle through any audio sub-channels present. Failing that, the options menu on playback should have a selection available. Last edited by Monedeath; 10-27-2015 at 02:42 PM. |
#13
|
|||
|
|||
Quote:
When I open the options window when the videos in question are playing, there is no option for selecting alternate tracks or languages, only CC options. The original SageTV manual says that this option only appears in the "Video Playback Options Menu" when there are multiple tracks. So I assume that's why I don't have this option to select. Is there a keyboard shortcut for switching audio tracks? If there is I'm not aware of the key combo, and can't find it in the SageTV 7 manual. |
#14
|
|||
|
|||
@Carey - One of my Sage9 test boxes is running Win7-x64 with an HVR-1600. It's using all the vs2015-compiled exe, dll & ax files. It hasn't had any issues w/audio or video.
Looking thru my current recordings, there's none with a single 384Kbps stereo audio stream for me to test. If you can point me to a test file, I can give it a try.
__________________
System #1: Win7-64, I7-920, 8 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HDHR-US (1st gen white) tuners. HD-200. System #2: Win7-64, I7-920, 8 GB mem, 4TB HD. Java 1.8.0_131. Sage v9.1.6.747. ClearQAM: 2x HDHR3-US tuners. HD-200. System #3: Win7-64, I7-920, 12 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HVR2250; Spectrum Cable via HDPVR & USB-UIRT. 3x HD-200. |
#15
|
|||
|
|||
Quote:
https://drive.google.com/file/d/0B1-...ew?usp=sharing For me, this video will have no audio when played with the new SageTV filters I compiled based on the discussion in this thread. If I play this file using the SageTV 7.1.9 filters, the audio is fine. I also have audio in any other video player I use and test it with. Maybe there is some reason that my compiled filters, based on my system setup are different? If you want to zip up your compiled Windows SageTV 9 files, I'll put them on my system and see if I get different results. As a side note, if I use ffmpeg to do a copy of this file, my SageTV v9 filters will play the audio for me, but SageTV details that file as a MPEG1 video, instead of MPEG2. Yet if I look at the codec details in a MediaInfo utility I use, they both show all the same video and audio codec values. I don't know enough about ffmpeg to know what recoding is done when "copy" is specified, but it's altering it enough to eliminate the issue. |
#16
|
||||
|
||||
To help narrow this down, I'm fairly sure SageTV logs which filters are actually in the playback graph when playback starts on Windows. I'm assuming it's only using the SageTV Demux and the SageTV file source filters (those aren't their exact names, but if I see them I'll know them). It's most likely an issue in the demux filter then which is causing the problem. You could fire up GraphEdit and check it out that way too.
You should post your SageTV log from playback on the client though when you reproduce the problem....and then also a log from when it works with the older filters....hopefully we can see a difference between them and that'll help narrow down the issue. If not, then there's more logging that can be turned on for the demux to dig even deeper.
__________________
Jeffrey Kardatzke Founder of SageTV |
#17
|
|||
|
|||
Very interesting. I got the following results with that clip:
1) Sage9 playback on Sage windows client: no audio. 2) Sage9 playback on HD200: no audio. 3) Sage9 system playback on VLC: good 4) Sage7 playback on Sage windows client: good. 5) Sage7 playback on HD200: good. 6) Sage7 system playback on VLC: good (both systems above are Win7-x64) Opening that clip with GSpot (a "codec info appliance") reports the audio codec as "Mpeg-1 Layer 2". In contrast, my HD recordings made by Sage7 all report the codec as "AC3". My HD & SD recordings made by Sage9 all report AC3 for the codec.
__________________
System #1: Win7-64, I7-920, 8 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HDHR-US (1st gen white) tuners. HD-200. System #2: Win7-64, I7-920, 8 GB mem, 4TB HD. Java 1.8.0_131. Sage v9.1.6.747. ClearQAM: 2x HDHR3-US tuners. HD-200. System #3: Win7-64, I7-920, 12 GB mem, 4TB HD. Java-64 1.8.0_141. Sage-64 v9.2.1 ATSC: 2x HVR2250; Spectrum Cable via HDPVR & USB-UIRT. 3x HD-200. Last edited by JustFred; 11-01-2015 at 11:49 AM. |
#18
|
|||
|
|||
Quote:
Thanks. |
#19
|
||||
|
||||
I've found GraphStudio to be far more featured for building and troubleshooting graphs.
http://blog.monogram.sk/janos/tools/...m-graphstudio/
__________________
Buy Fuzzy a beer! (Fuzzy likes beer) unRAID Server: i7-6700, 32GB RAM, Dual 128GB SSD cache and 13TB pool, with SageTVv9, openDCT, Logitech Media Server and Plex Media Server each in Dockers. Sources: HRHR Prime with Charter CableCard. HDHR-US for OTA. Primary Client: HD-300 through XBoxOne in Living Room, Samsung HLT-6189S Other Clients: Mi Box in Master Bedroom, HD-200 in kids room |
#20
|
|||
|
|||
MPEG2 Audio Playback Issues
Here is a quick followup on my issues with no audio with Sage v9 MPEG2 video playback. The MPEG2 files I'm having issues with are recording using either Sage v7 or v9 from a Hauppauge HVR-1600, and it make no difference what Quality setting I set in Sage recording settings.
First off I want to clarify, that I'm new to using GraphStudio, and to tracking down codec, filter, decoding issues. So constructive feedback on this is welcome. It comes down to the v9 "MpegDeMux.ax" filter that I compiled using VS2015. When I'm using the v.7.1.9 filter Sage plays the audio. My v9 filter compiled as per this thread has no audio with my MPEG2 files. When I load the v9 "MpegDeMux.ax" filter named "SageTV MpegDeMux" into Graph Studio, there is no "Audio" pin. There is only "PassThrough" and "Video" pins. When I load the v7.1.9 "MpegDeMux.ax" filter named "SageTV MpegDeMux" into Graph Studio, there are Video, PassThrough and Audio pins. Can anyone else that is compiling the Windows native files using VS2015 confirm this? For what it's worth, these warnings occur while building the filter: HTML Code:
1>NativeCore\ATSCPSIParser.c(530): warning C4018: '<': signed/unsigned mismatch 1>NativeCore\ATSCPSIParser.c(541): warning C4018: '<': signed/unsigned mismatch 3>DeMuxFilter.cpp(872): warning C4267: 'argument': conversion from 'size_t' to 'short', possible loss of data 3>DeMuxFilter.cpp(885): warning C4267: 'argument': conversion from 'size_t' to 'short', possible loss of data |
![]() |
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
VS2005 build environment | ckewinjones | SageTV Github Development | 77 | 10-15-2015 10:48 AM |
Dev Environment | Slugger | SageTV Studio | 10 | 01-28-2010 04:08 PM |
Sage Development Environment | stuckless | SageTV Studio | 4 | 04-05-2008 06:14 AM |
Business Environment | pmolaughlin | SageTV Software | 0 | 02-13-2006 07:58 AM |