Log in

View Full Version : SIF1 v1.20 was released


Pages : 1 2 [3]

Selur
9th July 2011, 10:04
Seems like there's a problem with the DirectShowDecoder.

Encoded a small sample with sif v1.2 and when trying to playback it with WMP I get:
---------------------------
Error!
---------------------------
Not supported version of SIF stream!
---------------------------
OK
---------------------------
-> Playback through Virtual Dub (vfw) works fine,...

Cu Selur

Neiromaster
9th July 2011, 13:35
Seems like there's a problem with the DirectShowDecoder.

Encoded a small sample with sif v1.2 and when trying to playback it with WMP I get:
---------------------------
Error!
---------------------------
Not supported version of SIF stream!
---------------------------
OK
---------------------------
-> Playback through Virtual Dub (vfw) works fine,...

Cu Selur

The new version of the SIF1 hasn't been correctly installed on your computer.
The old version of the DirectShow decoder hasn't been replaced.
Try to uninstall the SIF1, to reboot your computer, install SIF1 and again reboot your computer.

CruNcher
12th July 2011, 04:31
Neiro http://mysif.ru/en/demo.html <- @ 2 megabits the grain preservation is crazy good on this demo but wouldn't it be better to show that of in a multiple frame compare so some previous frames and some next frames in a film strip like representation :) just a little criticism skeptics like me will never believe in 1 frame compares especially not if film grain is involved, the example download of course is for those the best way to judge.

Neiromaster
12th July 2011, 07:41
Neiro http://mysif.ru/en/demo.html <- @ 2 megabits the grain preservation is crazy good on this demo but wouldn't it be better to show that of in a multiple frame compare so some previous frames and some next frames in a film strip like representation :) just a little criticism skeptics like me will never believe in 1 frame compares especially not if film grain is involved, the example download of course is for those the best way to judge.

The English version of demonstration page at present is not ready.
You can load actual demonstration video from Russian (http://mysif.ru/SIF1Vid.htm) page.
Translation of this page will be completed in the near future and it will be updated to an actual condition.

vivan
12th July 2011, 21:30
Now it's ready ;) Sorry for delay.
http://mysif.ru/en/demo.html

Selur
22nd July 2011, 13:21
The new version of the SIF1 hasn't been correctly installed on your computer.
The old version of the DirectShow decoder hasn't been replaced.
Try to uninstall the SIF1, to reboot your computer, install SIF1 and again reboot your computer.
didn't help :(
Anything else I can try?

Neiromaster
22nd July 2011, 22:00
didn't help :(
Anything else I can try?

Interesting.
1) Send small size example on the file hosting service and place link here.

2) Find and remove all copies of Sif1Dec.ax from your computer.

Selur
23rd July 2011, 10:44
uploaded file to: http://www.multiupload.com/VYKOH8AZFS
deinstalled SIF1_v_1_20, rebooted, searched for Sif1Dec.ax (found a single occurence in the mplayer codecs folder, which isn't on my system drive)
installed SIF1_v_1_20, tried to playback the file -> still the same problem
deintstalled SIF1_v_1_20 again, and searched for Sif* -> only the installer was found this time,..

Cu Selur

Neiromaster
23rd July 2011, 18:21
uploaded file to: http://www.multiupload.com/VYKOH8AZFS

This file has been decoded by DirectShow decoder v1.20 without errors.


deinstalled SIF1_v_1_20, rebooted, searched for Sif1Dec.ax (found a single occurence in the mplayer codecs folder, which isn't on my system drive)

It is a root of problem. The position on a hard disk for DirectShow decoders is unimportant. Availability of the old version of the decoder somewhere on a hard disk is sole reason of error.


installed SIF1_v_1_20, tried to playback the file -> still the same problem
deintstalled SIF1_v_1_20 again, and searched for Sif* -> only the installer was found this time,..

Cu Selur

Probably it is a problem with mplayer - which uses old version of the DirectShow decoder.

Neiromaster
23rd July 2011, 18:38
Find in regedit.exe CLSID ->

31666973-0000-0010-8000-00AA00389B71

Folder InprocServer32 contain path to the SIF1 DirectShow decoder used at present.

It can help to solve a problem.

Selur
24th July 2011, 19:25
With no SIF installed I checked the registry for "31666973-0000-0010-8000-00AA00389B71" and found no entry. (so far so good)
Then I installed SIF1 v.1.20 (to C:\Program Files (x86)\SIF1) and found InprocServer32 pointing to C:\Windows\SysWow64\Sif1Dec.ax (so far so good)
Then I tried to playback the file with WMPlayer and again got:
---------------------------
Error!
---------------------------
Not supported version of SIF stream!
---------------------------
OK
---------------------------

Here are all the entries from my registry when I search for "31666973-0000-0010-8000-00AA00389B71"

hit1:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{083863F1-70DE-11D0-BD40-00A0C911CE86}\Instance\{31666973-0000-0010-8000-00AA00389B71}]
"FriendlyName"="SIF-1 Decoder Filter v.1.20"
"CLSID"="{31666973-0000-0010-8000-00AA00389B71}"
"FilterData"=hex:02,00,00,00,00,00,80,00,02,00,00,00,00,00,00,00,30,70,69,33,\
00,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,30,74,79,33,00,\
00,00,00,70,00,00,00,80,00,00,00,31,74,79,33,00,00,00,00,70,00,00,00,90,00,\
00,00,31,70,69,33,08,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,\
00,30,74,79,33,00,00,00,00,70,00,00,00,a0,00,00,00,76,69,64,73,00,00,10,00,\
80,00,00,aa,00,38,9b,71,73,69,66,31,00,00,10,00,80,00,00,aa,00,38,9b,71,53,\
49,46,31,00,00,10,00,80,00,00,aa,00,38,9b,71,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00


hit2:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{31666973-0000-0010-8000-00AA00389B71}]
@="SIF-1 Decoder Filter v.1.20"

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{31666973-0000-0010-8000-00AA00389B71}\InprocServer32]
@="C:\\Windows\\SysWow64\\Sif1Dec.ax"
"ThreadingModel"="Both"



Trying to playback the file with MPC-HC I get:
D:\sifQuality.avi::Video

Media Type 0:
--------------------------
Video: SIF1 640x352 25.00fps

AM_MEDIA_TYPE:
majortype: MEDIATYPE_Video {73646976-0000-0010-8000-00AA00389B71}
subtype: Unknown GUID Name {31464953-0000-0010-8000-00AA00389B71}
formattype: FORMAT_VideoInfo {05589F80-C356-11CE-BF01-00AA0055595A}
bFixedSizeSamples: 0
bTemporalCompression: 1
lSampleSize: 1
cbFormat: 92

VIDEOINFOHEADER:
rcSource: (0,0)-(640,352)
rcTarget: (0,0)-(640,352)
dwBitRate: 0
dwBitErrorRate: 0
AvgTimePerFrame: 400000

BITMAPINFOHEADER:
biSize: 44
biWidth: 640
biHeight: 352
biPlanes: 1
biBitCount: 0
biCompression: SIF1
biSizeImage: 0
biXPelsPerMeter: 0
biYPelsPerMeter: 0
biClrUsed: 0
biClrImportant: 0

pbFormat:
0000: 00 00 00 00 00 00 00 00 80 02 00 00 60 01 00 00 ........€...`...
0010: 00 00 00 00 00 00 00 00 80 02 00 00 60 01 00 00 ........€...`...
0020: 00 00 00 00 00 00 00 00 80 1a 06 00 00 00 00 00 ........€.......
0030: 2c 00 00 00 80 02 00 00 60 01 00 00 01 00 00 00 ,...€...`.......
0040: 53 49 46 31 00 00 00 00 00 00 00 00 00 00 00 00 SIF1............
0050: 00 00 00 00 00 00 00 00|78 f6 92 2c ........xö’,

(tried with LAV Filters and MPC-HCs own .avi Source filter)

Cu Selur

Neiromaster
25th July 2011, 00:38
Here are all the entries from my registry when I search for "31666973-0000-0010-8000-00AA00389B71"

hit2:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{31666973-0000-0010-8000-00AA00389B71}]
@="SIF-1 Decoder Filter v.1.20"

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{31666973-0000-0010-8000-00AA00389B71}\InprocServer32]
@="C:\\Windows\\SysWow64\\Sif1Dec.ax"
"ThreadingModel"="Both"



Trying to playback the file with MPC-HC I get:

BITMAPINFOHEADER:
biSize: 44
biWidth: 640
biHeight: 352
biPlanes: 1
biBitCount: 0
biCompression: SIF1
biSizeImage: 0
biXPelsPerMeter: 0
biYPelsPerMeter: 0
biClrUsed: 0
biClrImportant: 0

pbFormat:
0000: 00 00 00 00 00 00 00 00 80 02 00 00 60 01 00 00 ........€...`...
0010: 00 00 00 00 00 00 00 00 80 02 00 00 60 01 00 00 ........€...`...
0020: 00 00 00 00 00 00 00 00 80 1a 06 00 00 00 00 00 ........€.......
0030: 2c 00 00 00 80 02 00 00 60 01 00 00 01 00 00 00 ,...€...`.......
0040: 53 49 46 31 00 00 00 00 00 00 00 00 00 00 00 00 SIF1............
0050: 00 00 00 00 00 00 00 00|78 f6 92 2c ........xö’,

(tried with LAV Filters and MPC-HCs own .avi Source filter)

Cu Selur

This data means that the DirectShow decoder has been installed correctly, but input data are incorrect.

If biSizeImage = 0 the system doesn't allocate memory for the buffer of the compressed data.

For example, at playback the file with MPC-HC I get:

Filter : F:\Arhiv\sifQuality.avi - CLSID : {CEA8DEFF-0AF7-4DB9-9A38-FB3C3AEFC0DE}

- Connected to:

CLSID: {31666973-0000-0010-8000-00AA00389B71}
Filter: SIF-1 Decoder Filter v.1.20
Pin: XForm In

- Connection media type:

Video: SIF1 640x352 25.00fps 628kbps

AM_MEDIA_TYPE:
majortype: MEDIATYPE_Video {73646976-0000-0010-8000-00AA00389B71}
subtype: Unknown GUID Name {31464953-0000-0010-8000-00AA00389B71}
formattype: FORMAT_VideoInfo {05589F80-C356-11CE-BF01-00AA0055595A}
bFixedSizeSamples: 1
bTemporalCompression: 0
lSampleSize: 27723
cbFormat: 92

VIDEOINFOHEADER:
rcSource: (0,0)-(0,0)
rcTarget: (0,0)-(0,0)
dwBitRate: 628175
dwBitErrorRate: 0
AvgTimePerFrame: 400000

BITMAPINFOHEADER:
biSize: 40
biWidth: 640
biHeight: 352
biPlanes: 1
biBitCount: 0
biCompression: SIF1
biSizeImage: 675840
biXPelsPerMeter: 0
biYPelsPerMeter: 0
biClrUsed: 0
biClrImportant: 0

pbFormat:
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0020: cf 95 09 00 00 00 00 00 80 1a 06 00 00 00 00 00 П•......Ђ.......
0030: 28 00 00 00 80 02 00 00 60 01 00 00 01 00 00 00 (...Ђ...`.......
0040: 53 49 46 31 00 50 0a 00 00 00 00 00 00 00 00 00 SIF1.P..........
0050: 00 00 00 00 00 00 00 00|78 f6 92 2c ........xц’,

- Enumerated media type 0:

Set as the current media type


biSizeImage = 675840 = 640 * 352 * 3

I can't obtain similar error on the my computer.
Probably incorrect DirectShow filter installed in the your system.

Selur
25th July 2011, 06:19
Aside from the Decoders that come with Win 7, I only installed ffdshow (3861), ffdshow 64bit (3861), LAV CUVID 0.9, LAV Filters 0.3 and SIF 1.2, I'll uninstall everything, install SIF anew and report.
DOH,... I know why it's not working in MPC-HC: I use a 64bit version of MPC-HC. (but I use the 32bit Version of WMPlayer)

uninstalled LAV Filters
-> tried Playback with WMPLayer (32bit)
=> Playback works!!! :D

(Strange think is this problem also occurs if I install LAV Filters and disable the .avi Support for the x86 Splitter, if I leave the Splitter out everything works,...)

Cu Selur

Neiromaster
25th July 2011, 15:54
Aside from the Decoders that come with Win 7, I only installed ffdshow (3861), ffdshow 64bit (3861), LAV CUVID 0.9, LAV Filters 0.3 and SIF 1.2, I'll uninstall everything, install SIF anew and report.
DOH,... I know why it's not working in MPC-HC: I use a 64bit version of MPC-HC. (but I use the 32bit Version of WMPlayer)

uninstalled LAV Filters
-> tried Playback with WMPLayer (32bit)
=> Playback works!!! :D

(Strange think is this problem also occurs if I install LAV Filters and disable the .avi Support for the x86 Splitter, if I leave the Splitter out everything works,...)

Cu Selur

Yes. It is error in the LAV Filters.
I have loaded it, installed it and obtained the same error.
Also i loaded LAV Filters source code, and immediately find error in LAVFVideoHelper.cpp.


VIDEOINFOHEADER *CLAVFVideoHelper::CreateVIH(const AVStream* avstream, ULONG *size)
{
VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER*)CoTaskMemAlloc(ULONG(sizeof(VIDEOINFOHEADER) + avstream->codec->extradata_size));
memset(pvi, 0, sizeof(VIDEOINFOHEADER));
// Get the frame rate
REFERENCE_TIME r_avg = av_rescale(DSHOW_TIME_BASE, avstream->r_frame_rate.den, avstream->r_frame_rate.num);
if (avstream->r_frame_rate.den > 0 && avstream->r_frame_rate.num > 0 && (r_avg > MIN_TIME_PER_FRAME)) {
pvi->AvgTimePerFrame = r_avg;
} else if (avstream->avg_frame_rate.den > 0 && avstream->avg_frame_rate.num > 0) {
pvi->AvgTimePerFrame = av_rescale(DSHOW_TIME_BASE, avstream->avg_frame_rate.den, avstream->avg_frame_rate.num);
}
pvi->dwBitErrorRate = 0;
pvi->dwBitRate = avstream->codec->bit_rate;
RECT empty_tagrect = {0,0,0,0};
pvi->rcSource = empty_tagrect;//Some codecs like wmv are setting that value to the video current value
pvi->rcTarget = empty_tagrect;
pvi->rcTarget.right = pvi->rcSource.right = avstream->codec->width;
pvi->rcTarget.bottom = pvi->rcSource.bottom = avstream->codec->height;

memcpy((BYTE*)&pvi->bmiHeader + sizeof(BITMAPINFOHEADER), avstream->codec->extradata, avstream->codec->extradata_size);
pvi->bmiHeader.biSize = ULONG(sizeof(BITMAPINFOHEADER) + avstream->codec->extradata_size);

pvi->bmiHeader.biWidth = avstream->codec->width;
pvi->bmiHeader.biHeight = avstream->codec->height;
pvi->bmiHeader.biBitCount = avstream->codec->bits_per_coded_sample;
pvi->bmiHeader.biSizeImage = 0; // Calculating any value doesn't make sense, as we're dealing with compressed data, without constant frame sizes
pvi->bmiHeader.biCompression = avstream->codec->codec_tag;
//TOFIX The bitplanes is depending on the subtype
pvi->bmiHeader.biPlanes = 1;
pvi->bmiHeader.biClrUsed = 0;
pvi->bmiHeader.biClrImportant = 0;
pvi->bmiHeader.biYPelsPerMeter = 0;
pvi->bmiHeader.biXPelsPerMeter = 0;

if (avstream->codec->codec_id == CODEC_ID_RAWVIDEO) {
pvi->bmiHeader.biBitCount = av_get_bits_per_pixel2(avstream->codec->pix_fmt);
}

*size = sizeof(VIDEOINFOHEADER) + avstream->codec->extradata_size;
return pvi;
}


Here error:
pvi->bmiHeader.biSizeImage = 0; // Calculating any value doesn't make sense, as we're dealing with compressed data, without constant frame sizes

Correctly so:
pvi->bmiHeader.biSizeImage = avstream->codec->width * avstream->codec->height * 3;

Likely it's not sole error in the LAV Filters.
This error badly influences not only on the SIF decoder.
I don't recommend to use the LAV Filters while errors aren't corrected by the author.

nevcairiel
25th July 2011, 17:49
SIF1 is a compressed format, isn't it? Probably even variable frame size?
If it is, why would the image size be the same as a full uncompressed 24-bit RGB image, 3-byte per pixel?
Did you even read the comment that explaind why that value is being set to 0?

biSizeImage is *not* defined for compressed formats. 0 is a perfectly valid format. A decoder should not rely on that value in any way.
In fact, your decoder is the only one that fails with it set to 0. Alot of other splitters set this to 0. Not necessarily for AVI files, but do you want to be limited to that?

mikinho
25th July 2011, 18:06
biSizeImage should only be 0 for uncompressed RGB bitmaps.

I agree it shouldn't be relied on but it should be set

nevcairiel
25th July 2011, 18:07
biSizeImage should only be 0 for uncompressed RGB bitmaps.

I agree it shouldn't be relied on but it should be set

On a variable-size compressed format, to what exactly? :p

mikinho
25th July 2011, 18:20
On a variable-size compressed format, to what exactly? :p

The implied size of the uncompressed image

pvi->bmiHeader.biSizeImage = DIBSIZE(pvi->bmiHeader);

nevcairiel
25th July 2011, 18:34
I changed it to that, i however still do not see how a decoder can rely on that value. I would never trust it on a compressed format - i don't know which pixel format he wants to decode to, how many bits his destination has. Heck i don't even know what to make of this codec, how am i supposed to know how what colorspace was encoded here. :)

mikinho
25th July 2011, 19:22
I changed it to that, i however still do not see how a decoder can rely on that value. I would never trust it on a compressed format - i don't know which pixel format he wants to decode to, how many bits his destination has. Heck i don't even know what to make of this codec, how am i supposed to know how what colorspace was encoded here. :)

It is an area where the MSDN documentation should be updated and be more clear.

And while using a larger buffer than needed is a little wasteful it is generally faster than calculating the proper size and allocating it.

In MF the documentation is more clear that for compressed formats you should IMFMediaType->IsCompressedFormat and then use MFCalculateBitmapImageSize if needed. But then again there are still a few hacks you need to do for ASF and other headers.

Neiromaster
25th July 2011, 20:36
I changed it to that, i however still do not see how a decoder can rely on that value. I would never trust it on a compressed format - i don't know which pixel format he wants to decode to, how many bits his destination has. Heck i don't even know what to make of this codec, how am i supposed to know how what colorspace was encoded here. :)

The SIF1 decoder doesn't use this value, but it influences on buffer memory allocation for data packet.

Also probably the LAV Filters doesn't reset SyncPoint after seeking.
SIF1 DirectShow decoder can't work correctly if IsSyncPoint() return wrong status.

nevcairiel
25th July 2011, 20:42
All samples with a valid timestamp and a valid duration are sync points to LAV Splitter. It cannot detect key-frames for every of the hundreds of video formats out there, its the decoders responsibility to properly recover after a seek.

Neiromaster
25th July 2011, 21:18
All samples with a valid timestamp and a valid duration are sync points to LAV Splitter. It cannot detect key-frames for every of the hundreds of video formats out there, its the decoders responsibility to properly recover after a seek.

The SIF1 data format doesn't contain key frames information as this information doubles the data containing in the container.

SIF1 decoder can't work if the splitter discards information containing in the exterior container.

Many other decoders too won't work with the LAV Splitter.

It is probably fundamental reason of incompatibility of SIF1 decoder and LAV Splitter.

nevcairiel
25th July 2011, 21:28
Many other decoders too won't work with the LAV Splitter.


Apparently you're the only one with that wisdom. I have had no reports of any decoder not working, short of yours.

Neiromaster
25th July 2011, 21:30
All samples with a valid timestamp and a valid duration are sync points to LAV Splitter. It cannot detect key-frames for every of the hundreds of video formats out there, its the decoders responsibility to properly recover after a seek.

To know information on hundreds formats is not necessary - enough to process correctly information containing in the AVI container.

Neiromaster
25th July 2011, 21:40
Apparently you're the only one with that wisdom.

I doubt. Inter alia it is your choice - to write the correct or incorrect code.

CruNcher
27th July 2011, 12:06
Apparently you're the only one with that wisdom. I have had no reports of any decoder not working, short of yours.

I wouldn't see that as a fact that lav splitter is doing it correct seeing the margin of AVI based codecs and numbers of vendors that somehow use AVI for sure you gonna find both ways ;). With Neiro their might be a chance that he adepts to you or you to his way of doing it but with all the other vendors their might be only the way to adept to them or don't support them @ all :)

khagaroth
27th July 2011, 19:39
^^
THERE not their. I know you are not a native English speaker, but I'm neither and it's still bugging me, LOL.

Selur
29th July 2011, 15:42
btw. any news/progress on a command line version ?

Neiromaster
1st August 2011, 21:11
btw. any news/progress on a command line version ?

My opportunities of codec development are limited. That's why my development plan is optimized for maximum speed of codec development with the available resources.
Now I have two priorities:
First is the completion of main algorithms to be used in the codec.
Second is integration into the existing streaming video systems.

In each of the last codec versions code structure was modified with improvement of each block of code. The purpose of this changes is the possibility of further easy porting of all the codec code to pure C and removing of all assembler code.

Now only one code block left, where such restructuring was not done - the engine of direct SIF-transform.
Thus plan is such:
1) Restructurization and improvement of SIF transform engine.
2) Adding support for quarter-pixel motion compensation.
3) Porting codec code to the pure C and removal of assembler functions. Achieving code compilation with GCC + Yasm. And writing a portable SIF1 encoding-decoding library for Linux.
4) SSE2 code optimization and writing in C analogues of the functions which are written only in assembler.
5) ARM NEON optimization and writing decoder with GPU acceleration support.

Upon reaching stage 3, I plan to integrate codec library with existing console code. This can either be part of the WebM code, or part of project TEORA code. I hope that by that time the process of obtaining U.S. patents will be completed, and I would be able to change current decoder license. I plan to use freeBSD license together with a separate license for a patent, such as Google did with WebM.
Thus, compatibility with GPL and code portability will be achieved at the same time, together with its integration into the existing streaming systems.

Of course I can not get SIF1 embedded into existing browsers (like Google did) - it is up to you.

Before reaching stage 3 I do not plan to make the console versions of the codec, since it will require extra resources which I do not have. In addition this can greatly slow the development of the codec.
With the opportunities I have now I plan to reach stage 3 in 1.5 - 2 years.

All development os SIF1 is an initiative of one person. I have no personal wealth and no one is funding the development. Therefore, I'm developing SIF in my own free time while earning money to support my family. Unfortunately, obtaining financial support of such project in Russia is almost impossible.

That's why the development of SIF1 lasts so long and it's not possible to say exact dates - because all depends on my free time and opportunities of further project development.

Thanks for Valiulin Ivan for the help over translation it into English.

Selur
2nd August 2011, 08:22
Thanks for explaining. :)