MLVFS - a FUSE based, "on the fly" MLV to CDNG converter

Started by dmilligan, August 31, 2014, 02:01:24 AM

Previous topic - Next topic

0 Members and 3 Guests are viewing this topic.

reddeercity

Not sure if this a issue use the new dual iso video for 5d2 but i'm have problems with the latest mlvfs for mac.
sometimes when i toggle on dual iso processing with default setting it doesn't always process  the dual iso .
Tried deleting the .idx file re-mounting the file , seems find on a older version i have on my hackintoss .
I'm working off a SSD , i see if there's any log files .
Also Is dual iso processing normally very slow ? I using AMaZe for Interpolation , Alias Map & Fullres Blending enable.
First time working with dual iso , with non dual iso there hardly any delay and can but edited etc.. in realtime in Resolve
but this is not possible with dual iso it seems , i play around with some of the setting and see if i can improve on this .
Just curious , when the web page opens and read the files etc.. shouldn't it say it's "dual iso" ? of give the two iso setting ?
all i see is the lower number e.g. 100 out of 100/800

dmilligan

The dual ISO algorithm is just very complex and slow, there's no way around it. There is a fast preview mode, but it is very low quality. So the usefulness of dual ISO in relation to the MLVFS "on the fly" paradigm is rather limited. Personally, I think dual ISO video is just not worth the effort and drawbacks (aliasing, loss in resolution, etc) and most people want to use simply because it sounds cool and somewhat of a placebo effect.

As for the webgui, there is no dual ISO related metadata in the MLV file (IMO there probably should be). So the only way to figure out if something is dual ISO or not is to actually do some complex analysis on a frame. Doing this would bog down the gui for everyone, not just dual ISO users.

reddeercity


dfort

There seems to be an issue with the timecode on 23.98fps material.

Using exiftool to look at the timecode from a DNG frame numbered 0 and the timecode is 00:00:00.00 as expected. All is fine until you get to frame 24 and the timecode jumps to 00:00:01.01. This +1-frame is cumulative adding a frame to the timecode every second.

I don't know if this is intentional or if it affects any other framerate.

Markus

Still can't get MLVFS to work. (Win10 64bit)
I installed the new version of mlvfs with x64 bit support and dokan 1RC2 (tryed RC1 as vell) Uninstalled before reinstalling with boot in between.
MLVFS version from this post http://www.magiclantern.fm/forum/index.php?topic=13152.msg163041#msg163041
Used the following string to mount: "mlvfs_x64.exe C:\MLV --mlv_dir=F:\DCIM\100EOS5D\"
The MLV-file I tryed to mount was about 4.5 gig in size
This time I can not even enter the mounted catalog and keep getting the following error message when I try to:
mlvfs_wrap_getattr(1746): caught exception 0xC000001D at address 0x5AF8A3F3

even tryed going offline and deactivating avast anti-virus program...
Also uninstalled Pismo mounting.

So now I'm at a loss what more to try.
Anyone got any suggestions?
Any help would be greatly appreciated.

dmilligan

Quote from: dfort on March 16, 2016, 07:24:06 PM
There seems to be an issue with the timecode on 23.98fps material.
Feel free to correct this math, it came from chmee's tool. I suspect it doesn't handle rounding correctly.

    //from raw2cdng, credits: chmee
    int hours = (int)floor((double)frame / framerate / 3600);
    frame = frame - (hours * 60 * 60 * (int)framerate);
    int minutes = (int)floor((double)frame / framerate / 60);
    frame = frame - (minutes * 60 * (int)framerate);
    int seconds = (int)floor((double)frame / framerate) % 60;
    frame = frame - (seconds * (int)framerate);
    int frames = frame % MAX(1,(int)round(framerate));
   
    buffer[*data_offset] = to_tc_byte(frames) & 0x3F;
    if(drop_frame) buffer[*data_offset] = buffer[*data_offset] | (1 << 7); //set the drop frame bit
    buffer[*data_offset + 1] = to_tc_byte(seconds) & 0x7F;
    buffer[*data_offset + 2] = to_tc_byte(minutes) & 0x7F;
    buffer[*data_offset + 3] = to_tc_byte(hours) & 0x3F;


Here's the full output for a 23.976 file

$ exiftool -TimeCodes *.dng
======== M14-1233.MLV-C_000000.dng
Time Codes                      : 00:00:00.00
======== M14-1233.MLV-C_000001.dng
Time Codes                      : 00:00:00.01
======== M14-1233.MLV-C_000002.dng
Time Codes                      : 00:00:00.02
======== M14-1233.MLV-C_000003.dng
Time Codes                      : 00:00:00.03
======== M14-1233.MLV-C_000004.dng
Time Codes                      : 00:00:00.04
======== M14-1233.MLV-C_000005.dng
Time Codes                      : 00:00:00.05
======== M14-1233.MLV-C_000006.dng
Time Codes                      : 00:00:00.06
======== M14-1233.MLV-C_000007.dng
Time Codes                      : 00:00:00.07
======== M14-1233.MLV-C_000008.dng
Time Codes                      : 00:00:00.08
======== M14-1233.MLV-C_000009.dng
Time Codes                      : 00:00:00.09
======== M14-1233.MLV-C_000010.dng
Time Codes                      : 00:00:00.10
======== M14-1233.MLV-C_000011.dng
Time Codes                      : 00:00:00.11
======== M14-1233.MLV-C_000012.dng
Time Codes                      : 00:00:00.12
======== M14-1233.MLV-C_000013.dng
Time Codes                      : 00:00:00.13
======== M14-1233.MLV-C_000014.dng
Time Codes                      : 00:00:00.14
======== M14-1233.MLV-C_000015.dng
Time Codes                      : 00:00:00.15
======== M14-1233.MLV-C_000016.dng
Time Codes                      : 00:00:00.16
======== M14-1233.MLV-C_000017.dng
Time Codes                      : 00:00:00.17
======== M14-1233.MLV-C_000018.dng
Time Codes                      : 00:00:00.18
======== M14-1233.MLV-C_000019.dng
Time Codes                      : 00:00:00.19
======== M14-1233.MLV-C_000020.dng
Time Codes                      : 00:00:00.20
======== M14-1233.MLV-C_000021.dng
Time Codes                      : 00:00:00.21
======== M14-1233.MLV-C_000022.dng
Time Codes                      : 00:00:00.22
======== M14-1233.MLV-C_000023.dng
Time Codes                      : 00:00:00.23
======== M14-1233.MLV-C_000024.dng
Time Codes                      : 00:00:01.01
======== M14-1233.MLV-C_000025.dng
Time Codes                      : 00:00:01.02
======== M14-1233.MLV-C_000026.dng
Time Codes                      : 00:00:01.03
======== M14-1233.MLV-C_000027.dng
Time Codes                      : 00:00:01.04
======== M14-1233.MLV-C_000028.dng
Time Codes                      : 00:00:01.05
======== M14-1233.MLV-C_000029.dng
Time Codes                      : 00:00:01.06
======== M14-1233.MLV-C_000030.dng
Time Codes                      : 00:00:01.07
======== M14-1233.MLV-C_000031.dng
Time Codes                      : 00:00:01.08
======== M14-1233.MLV-C_000032.dng
Time Codes                      : 00:00:01.09
======== M14-1233.MLV-C_000033.dng
Time Codes                      : 00:00:01.10
======== M14-1233.MLV-C_000034.dng
Time Codes                      : 00:00:01.11
======== M14-1233.MLV-C_000035.dng
Time Codes                      : 00:00:01.12
======== M14-1233.MLV-C_000036.dng
Time Codes                      : 00:00:01.13
======== M14-1233.MLV-C_000037.dng
Time Codes                      : 00:00:01.14
======== M14-1233.MLV-C_000038.dng
Time Codes                      : 00:00:01.15
======== M14-1233.MLV-C_000039.dng
Time Codes                      : 00:00:01.16
======== M14-1233.MLV-C_000040.dng
Time Codes                      : 00:00:01.17
======== M14-1233.MLV-C_000041.dng
Time Codes                      : 00:00:01.18
======== M14-1233.MLV-C_000042.dng
Time Codes                      : 00:00:01.19
======== M14-1233.MLV-C_000043.dng
Time Codes                      : 00:00:01.20
======== M14-1233.MLV-C_000044.dng
Time Codes                      : 00:00:01.21
======== M14-1233.MLV-C_000045.dng
Time Codes                      : 00:00:01.22
======== M14-1233.MLV-C_000046.dng
Time Codes                      : 00:00:01.23
======== M14-1233.MLV-C_000047.dng
Time Codes                      : 00:00:01.00
======== M14-1233.MLV-C_000048.dng
Time Codes                      : 00:00:02.02
======== M14-1233.MLV-C_000049.dng
Time Codes                      : 00:00:02.03
======== M14-1233.MLV-C_000050.dng
Time Codes                      : 00:00:02.04
======== M14-1233.MLV-C_000051.dng
Time Codes                      : 00:00:02.05
======== M14-1233.MLV-C_000052.dng
Time Codes                      : 00:00:02.06
======== M14-1233.MLV-C_000053.dng
Time Codes                      : 00:00:02.07
======== M14-1233.MLV-C_000054.dng
Time Codes                      : 00:00:02.08
======== M14-1233.MLV-C_000055.dng
Time Codes                      : 00:00:02.09
======== M14-1233.MLV-C_000056.dng
Time Codes                      : 00:00:02.10
======== M14-1233.MLV-C_000057.dng
Time Codes                      : 00:00:02.11
======== M14-1233.MLV-C_000058.dng
Time Codes                      : 00:00:02.12
======== M14-1233.MLV-C_000059.dng
Time Codes                      : 00:00:02.13
======== M14-1233.MLV-C_000060.dng
Time Codes                      : 00:00:02.14
======== M14-1233.MLV-C_000061.dng
Time Codes                      : 00:00:02.15
======== M14-1233.MLV-C_000062.dng
Time Codes                      : 00:00:02.16
======== M14-1233.MLV-C_000063.dng
Time Codes                      : 00:00:02.17
======== M14-1233.MLV-C_000064.dng
Time Codes                      : 00:00:02.18
======== M14-1233.MLV-C_000065.dng
Time Codes                      : 00:00:02.19
======== M14-1233.MLV-C_000066.dng
Time Codes                      : 00:00:02.20
======== M14-1233.MLV-C_000067.dng
Time Codes                      : 00:00:02.21
======== M14-1233.MLV-C_000068.dng
Time Codes                      : 00:00:02.22
======== M14-1233.MLV-C_000069.dng
Time Codes                      : 00:00:02.23
======== M14-1233.MLV-C_000070.dng
Time Codes                      : 00:00:02.00
======== M14-1233.MLV-C_000071.dng
Time Codes                      : 00:00:02.01
======== M14-1233.MLV-C_000072.dng
Time Codes                      : 00:00:03.03
======== M14-1233.MLV-C_000073.dng
Time Codes                      : 00:00:03.04
======== M14-1233.MLV-C_000074.dng
Time Codes                      : 00:00:03.05
======== M14-1233.MLV-C_000075.dng
Time Codes                      : 00:00:03.06
======== M14-1233.MLV-C_000076.dng
Time Codes                      : 00:00:03.07
======== M14-1233.MLV-C_000077.dng
Time Codes                      : 00:00:03.08
======== M14-1233.MLV-C_000078.dng
Time Codes                      : 00:00:03.09
======== M14-1233.MLV-C_000079.dng
Time Codes                      : 00:00:03.10
======== M14-1233.MLV-C_000080.dng
Time Codes                      : 00:00:03.11
======== M14-1233.MLV-C_000081.dng
Time Codes                      : 00:00:03.12
======== M14-1233.MLV-C_000082.dng
Time Codes                      : 00:00:03.13
======== M14-1233.MLV-C_000083.dng
Time Codes                      : 00:00:03.14
======== M14-1233.MLV-C_000084.dng
Time Codes                      : 00:00:03.15
======== M14-1233.MLV-C_000085.dng
Time Codes                      : 00:00:03.16
======== M14-1233.MLV-C_000086.dng
Time Codes                      : 00:00:03.17
======== M14-1233.MLV-C_000087.dng
Time Codes                      : 00:00:03.18
======== M14-1233.MLV-C_000088.dng
Time Codes                      : 00:00:03.19
======== M14-1233.MLV-C_000089.dng
Time Codes                      : 00:00:03.20
======== M14-1233.MLV-C_000090.dng
Time Codes                      : 00:00:03.21
======== M14-1233.MLV-C_000091.dng
Time Codes                      : 00:00:03.22
======== M14-1233.MLV-C_000092.dng
Time Codes                      : 00:00:03.23
======== M14-1233.MLV-C_000093.dng
Time Codes                      : 00:00:03.00
======== M14-1233.MLV-C_000094.dng
Time Codes                      : 00:00:03.01
======== M14-1233.MLV-C_000095.dng
Time Codes                      : 00:00:03.02
======== M14-1233.MLV-C_000096.dng
Time Codes                      : 00:00:04.04
======== M14-1233.MLV-C_000097.dng
Time Codes                      : 00:00:04.05
======== M14-1233.MLV-C_000098.dng
Time Codes                      : 00:00:04.06
======== M14-1233.MLV-C_000099.dng
Time Codes                      : 00:00:04.07
======== M14-1233.MLV-C_000100.dng
Time Codes                      : 00:00:04.08
======== M14-1233.MLV-C_000101.dng
Time Codes                      : 00:00:04.09
======== M14-1233.MLV-C_000102.dng
Time Codes                      : 00:00:04.10
======== M14-1233.MLV-C_000103.dng
Time Codes                      : 00:00:04.11
======== M14-1233.MLV-C_000104.dng
Time Codes                      : 00:00:04.12
======== M14-1233.MLV-C_000105.dng
Time Codes                      : 00:00:04.13
======== M14-1233.MLV-C_000106.dng
Time Codes                      : 00:00:04.14
======== M14-1233.MLV-C_000107.dng
Time Codes                      : 00:00:04.15
======== M14-1233.MLV-C_000108.dng
Time Codes                      : 00:00:04.16
======== M14-1233.MLV-C_000109.dng
Time Codes                      : 00:00:04.17
======== M14-1233.MLV-C_000110.dng
Time Codes                      : 00:00:04.18
======== M14-1233.MLV-C_000111.dng
Time Codes                      : 00:00:04.19
======== M14-1233.MLV-C_000112.dng
Time Codes                      : 00:00:04.20
======== M14-1233.MLV-C_000113.dng
Time Codes                      : 00:00:04.21
======== M14-1233.MLV-C_000114.dng
Time Codes                      : 00:00:04.22
======== M14-1233.MLV-C_000115.dng
Time Codes                      : 00:00:04.23
======== M14-1233.MLV-C_000116.dng
Time Codes                      : 00:00:04.00
======== M14-1233.MLV-C_000117.dng
Time Codes                      : 00:00:04.01
======== M14-1233.MLV-C_000118.dng
Time Codes                      : 00:00:04.02
======== M14-1233.MLV-C_000119.dng
Time Codes                      : 00:00:04.03
======== M14-1233.MLV-C_000120.dng
Time Codes                      : 00:00:05.05
======== M14-1233.MLV-C_000121.dng
Time Codes                      : 00:00:05.06
======== M14-1233.MLV-C_000122.dng
Time Codes                      : 00:00:05.07
======== M14-1233.MLV-C_000123.dng
Time Codes                      : 00:00:05.08
======== M14-1233.MLV-C_000124.dng
Time Codes                      : 00:00:05.09
======== M14-1233.MLV-C_000125.dng
Time Codes                      : 00:00:05.10
======== M14-1233.MLV-C_000126.dng
Time Codes                      : 00:00:05.11
======== M14-1233.MLV-C_000127.dng
Time Codes                      : 00:00:05.12
======== M14-1233.MLV-C_000128.dng
Time Codes                      : 00:00:05.13
======== M14-1233.MLV-C_000129.dng
Time Codes                      : 00:00:05.14
======== M14-1233.MLV-C_000130.dng
Time Codes                      : 00:00:05.15
======== M14-1233.MLV-C_000131.dng
Time Codes                      : 00:00:05.16
======== M14-1233.MLV-C_000132.dng
Time Codes                      : 00:00:05.17
======== M14-1233.MLV-C_000133.dng
Time Codes                      : 00:00:05.18
======== M14-1233.MLV-C_000134.dng
Time Codes                      : 00:00:05.19
======== M14-1233.MLV-C_000135.dng
Time Codes                      : 00:00:05.20
======== M14-1233.MLV-C_000136.dng
Time Codes                      : 00:00:05.21
======== M14-1233.MLV-C_000137.dng
Time Codes                      : 00:00:05.22
======== M14-1233.MLV-C_000138.dng
Time Codes                      : 00:00:05.23
======== M14-1233.MLV-C_000139.dng
Time Codes                      : 00:00:05.00
======== M14-1233.MLV-C_000140.dng
Time Codes                      : 00:00:05.01
======== M14-1233.MLV-C_000141.dng
Time Codes                      : 00:00:05.02
======== M14-1233.MLV-C_000142.dng
Time Codes                      : 00:00:05.03
======== M14-1233.MLV-C_000143.dng
Time Codes                      : 00:00:05.04
======== M14-1233.MLV-C_000144.dng
Time Codes                      : 00:00:06.06
======== M14-1233.MLV-C_000145.dng
Time Codes                      : 00:00:06.07

The seconds are always correct, but the frame numbers are off.

DeafEyeJedi

@dfort -- I wonder if your Genius Brother can help solve this formula for the TimeCode bug?
5D3.113 | 5D3.123 | EOSM.203 | 7D.203 | 70D.112 | 100D.101 | EOSM2.* | 50D.109

dmilligan

So this gets close:

    double time = frame / framerate;
    int hours = (int)floor(time / 3600);
    int minutes = ((int)floor(time / 60)) % 60;
    int seconds = ((int)floor(time)) % 60;
    int frames = (int)floor((time - floor(time)) * framerate);
   
    buffer[*data_offset] = to_tc_byte(frames) & 0x3F;
    if(drop_frame) buffer[*data_offset] = buffer[*data_offset] | (1 << 7); //set the drop frame bit
    buffer[*data_offset + 1] = to_tc_byte(seconds) & 0x7F;
    buffer[*data_offset + 2] = to_tc_byte(minutes) & 0x7F;
    buffer[*data_offset + 3] = to_tc_byte(hours) & 0x3F;


But it doesn't "drop" frames at the standardized amount for NTSC (30/1.001 fps) which is: two frames every minute except each tenth minute. It just rounds the exact time to the nearest frame.

I don't know if the same convention applies for 23.976.

dfort

I thought it was because of these lines:

    frame = frame - (seconds * (int)framerate);
    int frames = frame % MAX(1,(int)round(framerate));


The first line isn't rounding the framerate so it is changing 23.976 to 23. I tried changing it but ran into compiling problems that I didn't have before.

As for NTSC drop frame timecode, it only applies to 29.97 and 59.94 frame rates. As far as I know there is no drop frame timecode for 23.976 video, at least I've never encountered it. Someone can do a fact check on that. In any case, the only times I had to deal with drop-frame timecode was on NTSC master tapes that had to be delivered for broadcast. All the editing and VFX workflows that I've encountered used non-drop timecode. In addition, the math is so much easier with non-drop frame timecode when converting from frame numbers to timecode and back.

In other words, if you strip out all the drop-frame code nobody should miss it.

Here's that compiling issue I mentioned. The build script finishes and I get a binary but it won't create a mounted volume or webpage.

./build_installer.sh
rm -f mlvfs dng.o index.o wav.o stripes.o cs.o amaze_demosaic_RT.o hdr.o histogram.o mongoose/mongoose.o webgui.o resource_manager.o lj92.o gif.o patternnoise.o LZMA/7zAlloc.o LZMA/7zBuf.o LZMA/7zBuf2.o LZMA/7zCrc.o LZMA/7zCrcOpt.o LZMA/7zDec.o LZMA/7zFile.o LZMA/7zIn.o LZMA/7zStream.o LZMA/Alloc.o LZMA/Bcj2.o LZMA/Bra.o LZMA/Bra86.o LZMA/BraIA64.o LZMA/CpuArch.o LZMA/Delta.o LZMA/LzFind.o LZMA/Lzma2Dec.o LZMA/Lzma2Enc.o LZMA/Lzma86Dec.o LZMA/Lzma86Enc.o LZMA/LzmaDec.o LZMA/LzmaEnc.o LZMA/LzmaLib.o LZMA/Ppmd7.o LZMA/Ppmd7Dec.o LZMA/Ppmd7Enc.o LZMA/Sha256.o LZMA/Xz.o LZMA/XzCrc64.o
gcc -c -Wall -D__DARWIN_64_BIT_INO_T=1 -D__FreeBSD__=10 -D_FILE_OFFSET_BITS=64 -I/usr/local/include/osxfuse -std=gnu99 -DVERSION="\"30aea14\"" -DBUILD_DATE="\"2016-03-17 01:18:13\"" -DFUSE_USE_VERSION=26 dng.c -o dng.o
In file included from dng.h:27:0,
                 from dng.c:28:
mlvfs.h:107:22: error: unknown type name '__always_inline'
#define FORCE_INLINE __always_inline
                      ^
dng.c:793:8: note: in expansion of macro 'FORCE_INLINE'
static FORCE_INLINE size_t dng_get_image_data_inline(struct frame_headers * frame_headers, uint16_t * packed_bits, uint8_t * output_buffer, off_t offset, size_t max_size, int32_t bpp)
        ^
dng.c:793:28: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'dng_get_image_data_inline'
static FORCE_INLINE size_t dng_get_image_data_inline(struct frame_headers * frame_headers, uint16_t * packed_bits, uint8_t * output_buffer, off_t offset, size_t max_size, int32_t bpp)
                            ^
dng.c: In function 'dng_get_image_data':
dng.c:841:20: warning: implicit declaration of function 'dng_get_image_data_inline' [-Wimplicit-function-declaration]
             return dng_get_image_data_inline(frame_headers, packed_bits, output_buffer, offset, max_size, 8);
                    ^
make: *** [dng.o] Error 1
cp: mlvfs/mlvfs: No such file or directory
...
...
created: /Users/rosiefort/mlvfs/pack.temp.dmg
chmod: /Volumes/MLVFS/.Trashes: Permission denied
"disk7" unmounted.
"disk7" ejected.
Preparing imaging engine...
Reading Protective Master Boot Record (MBR : 0)...
   (CRC32 $9A1DC65A: Protective Master Boot Record (MBR : 0))
Reading GPT Header (Primary GPT Header : 1)...
   (CRC32 $9598AAEB: GPT Header (Primary GPT Header : 1))
Reading GPT Partition Data (Primary GPT Table : 2)...
   (CRC32 $7D08CF8A: GPT Partition Data (Primary GPT Table : 2))
Reading  (Apple_Free : 3)...
   (CRC32 $00000000:  (Apple_Free : 3))
Reading disk image (Apple_HFS : 4)...
...
   (CRC32 $C1163E58: disk image (Apple_HFS : 4))
Reading  (Apple_Free : 5)...
...
   (CRC32 $00000000:  (Apple_Free : 5))
Reading GPT Partition Data (Backup GPT Table : 6)...
...
   (CRC32 $7D08CF8A: GPT Partition Data (Backup GPT Table : 6))
Reading GPT Header (Backup GPT Header : 7)...
...
   (CRC32 $B05F628B: GPT Header (Backup GPT Header : 7))
Adding resources...
...
Elapsed Time:  2.070s
File size: 1500593 bytes, Checksum: CRC32 $B1F95B1F
Sectors processed: 16384, 13964 compressed
Speed: 3.3Mbytes/sec
Savings: 82.1%
created: /Users/rosiefort/mlvfs/MLVFS.dmg

dmilligan

try using clang to compile instead of gcc, I'll try and fix the issue soon

how about this:

    //use drop frame if the framerate is close to 30 / 1.001
    int drop_frame = round((1.0 - framerate / ceil(framerate)) * 1000) == 1 && ceil(framerate) == 30;
    int hours, minutes, seconds, frames;
   
    if (drop_frame)
    {
        int d = frame / 17982;
        int m = frame % 17982;
        int f = frame + 18 * d + 2 * (MAX(0, m - 2) / 1798);
       
        hours = ((f / 30) / 60) / 60;
        minutes = ((f / 30) / 60) % 60;
        seconds = (f / 30) % 60;
        frames = f % 30;
    }
    else
    {
        //round the framerate to the next largest integral framerate
        //tc will not match real world time if framerate is not an integer
        double time = framerate == 0 ? 0 : frame / (framerate > 1 ? round(framerate) : framerate);
        hours = (int)floor(time / 3600);
        minutes = ((int)floor(time / 60)) % 60;
        seconds = ((int)floor(time)) % 60;
        frames = framerate > 1 ? (frame % ((int)round(framerate))) : 0;
    }
   
    buffer[*data_offset] = to_tc_byte(frames) & 0x3F;
    if(drop_frame) buffer[*data_offset] = buffer[*data_offset] | (1 << 7); //set the drop frame bit
    buffer[*data_offset + 1] = to_tc_byte(seconds) & 0x7F;
    buffer[*data_offset + 2] = to_tc_byte(minutes) & 0x7F;
    buffer[*data_offset + 3] = to_tc_byte(hours) & 0x3F;

Ottoga

@MARKUS

QuoteUsed the following string to mount: "mlvfs_x64.exe C:\MLV --mlv_dir=F:\DCIM\100EOS5D\"

It looks like the format of your MLVFS launch command is incorrect. 'C:\MLV' is a path to a folder not a drive letter. Try the following:

launch a command prompt (in administrator mode) then:

cd /d [path_to_your_mlvfs_x64_rc.exe]

mlvfs_x64.exe X: --mlv-dir=[path_to_your_MLV_dir]

Where X: - the logical drive letter that will be assigned by the system for mounting the MLV file/s. Note that it doesn't have to be X: but it needs to be a drive letter that is not already in use on your computer.

Then type the url http://localhost:8000/ into your default browser that will bring up the GUI and let you configure the MLVFS correction/adjustment parameters.

Also, once you have done the above, if you launch Windows File Explorer you should see your chosen drive letter listed and the individual MLV files listed as sub-directories.

A small tip: set your preferred correction/adjustment setting in the GUI before accessing a mounted mlv folder in your logical drive or the settings won't be applied.

The MLVFS process will automatically build index files for each of the MLV files in your --mlv-dir location.  I see from your mount string that you are going directly to the CF card. under this scenario the index files will be created on your CF card. There might be a performance hit from this approach. Also, this is where your original footage is. If there is a hiccup with your PC that causes the card to corrupt then you have potentially lost everything.

It would be safer and I dare say faster if you copied your MLVs to a directory on your local hard drive.
EOS 7D.203, EFS 55-250mm, EF 75-300 III, Tamron 16-300 DiII VC PZD Macro, SpeedLite 580EX II.

dfort

Quote from: dmilligan on March 17, 2016, 03:33:54 AM
try using clang to compile instead of gcc, I'll try and fix the issue soon

That fixed the compiling issue--looks like I got to fix that hack in the compiling tutorial I posted a while back. Been procrastinating busy!

Anyway, at first I got this error:

dng.c:545:9: error: redefinition of 'drop_frame'
    int drop_frame = round((1.0 - framerate / ceil(framerate)) * 1000) == 1 && ceil(framerate) == 30;
        ^
dng.c:539:52: note: previous definition is here
static uint32_t add_timecode(double framerate, int drop_frame, uint64_t frame, uint8_t * buffer, uint32_t * data_offset)


and it wouldn't create a dng.o so I did this to your code:

-    int drop_frame = round((1.0 - framerate / ceil(framerate)) * 1000) == 1 && ceil(framerate) == 30;
+    drop_frame = round((1.0 - framerate / ceil(framerate)) * 1000) == 1 && ceil(framerate) == 30;


But as you can see there's still issues.

======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000000.dng
Time Codes                      : 00:00:00.00
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000001.dng
Time Codes                      : 00:00:00.00
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000002.dng
Time Codes                      : 00:00:00.01
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000003.dng
Time Codes                      : 00:00:00.02
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000004.dng
Time Codes                      : 00:00:00.03
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000005.dng
Time Codes                      : 00:00:00.04
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000006.dng
Time Codes                      : 00:00:00.05
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000007.dng
Time Codes                      : 00:00:00.06
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000008.dng
Time Codes                      : 00:00:00.07
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000009.dng
Time Codes                      : 00:00:00.08
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000010.dng
Time Codes                      : 00:00:00.09
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000011.dng
Time Codes                      : 00:00:00.10
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000012.dng
Time Codes                      : 00:00:00.11
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000013.dng
Time Codes                      : 00:00:00.12
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000014.dng
Time Codes                      : 00:00:00.13
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000015.dng
Time Codes                      : 00:00:00.14
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000016.dng
Time Codes                      : 00:00:00.15
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000017.dng
Time Codes                      : 00:00:00.16
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000018.dng
Time Codes                      : 00:00:00.17
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000019.dng
Time Codes                      : 00:00:00.18
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000020.dng
Time Codes                      : 00:00:00.19
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000021.dng
Time Codes                      : 00:00:00.20
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000022.dng
Time Codes                      : 00:00:00.21
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000023.dng
Time Codes                      : 00:00:00.22
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000024.dng
Time Codes                      : 00:00:01.00
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000025.dng
Time Codes                      : 00:00:01.00
======== /Users/rosiefort/Desktop/mount/M27-1302.MLV/M27-1302_000026.dng
Time Codes                      : 00:00:01.01


I'm a rank beginner in C so I'm a bit lost with what's going on here.

dmilligan

Sorry, I've made other changes elsewhere. Easiest way to test is to just put that in a function in separate program, call it from a loop, and print out the time code.

Markus

@Ottoga This is as far as I get. Everyting seems fine in browser but I cant access X:\. If I type sub-paths in --mlv_dir command I can't see them in browser.
Had the same problem trying it out on win 7...

mindfull


dmilligan

There's a folder selection dialog waiting for you to select a folder

dfort

Quote from: dmilligan on March 17, 2016, 11:49:48 AM
Sorry, I've made other changes elsewhere. Easiest way to test is to just put that in a function in separate program, call it from a loop, and print out the time code.

Uh, yeah. That's a bit beyond my current C coding abilities. However, I do have lots of experience in post production (IMDB link) and am wondering if there's a reason why so much effort is going into drop frame timecode? Is someone asking for it? I see no point in automatically forcing drop-frame timecode on 29.97fps DNG files. The productions that I have worked on have specified not to use drop-frame timecode on anything with a few exceptions for NTSC videotapes that were delivered to a broadcasting facility.

In any case, something is broken with the timecode and I'd like to help so I guess I need to hit the C programing tutorials.

Ottoga

@Markus

QuoteYour mlvfs launch command:

c:\mlvfs_x64\mlvfs_x64.exe X:\ --mlv-dir=c:\

The '\' in your X:\ parameter is not required.

The parameter --mlv-dir=c:\  as per your launch command will result in MLVFS (or more likely the background dokan service) passing through, trying to map and interpret all files and sub-directories under the root of C: to drive X:

I'd suggest that under this scenario it is probably hitting a file that it can't deal with elegantly and as such causing the error. It also looks like it is trying to process the same MLV file twice which may be causing a conflict.

the --mlv-dir= parameter should contain the path to the folder where the MLV files that you want to process actually reside.

So, based on your screen shots I suggest that your mlvfs launch command should be:

c:\mlvfs_x64\mlvfs_x64.exe X: --mlv-dir=c:\HEj

MLVFS as a process appears to be working as it has successfully analysed M17-1143.mlv given that it is listed with all details in your localhost view. So hopefully with a corrected launch command you will be successful.

If you are still getting the error after that, then I'm at a loss and will need to hand your issue up to DMilligan. just provide fresh screen shots including some from File manager showing drive X: and any of its sub directories as well as one with a sub-directory contents showing.
EOS 7D.203, EFS 55-250mm, EF 75-300 III, Tamron 16-300 DiII VC PZD Macro, SpeedLite 580EX II.

reddeercity

Testing MLVFS for Windows7 , everything when as per instructions for x86 .
Web GUI work without any problems , did have same crashes  with dual ISO from the
5d2 , when I try to copy the dng's from the DOKAN\Z: fold to a real folder it will crash after
about 500 frame out of 1500 , stop responding etc... then lost the mounted folder
tried to remount but had problems , rebooted Windows everything back to normal
but I haven't tried to copy the file . Will try a different mount drive .
besides that works just like the Mac version .

kgv5

@reddeercity - could you please make a video tutorial how to get the newest method of MLVFS on PC working? I am still using the old version, it is a little bit hard to follow some new developments in this area though, i really enjoyed your previous tutorials. I bet it would be great for many people here if someone could sum it up to this point. Thanks.
www.pilotmovies.pl   5D Mark III, 6D, 550D

Markus

After trying anything and everything. I got an idea to try the x86 version of mlvfs instead and got it working right away. So it seems x64 version will not run on win 10 (at least not for me). Something goes wrong when it tries to mount the files to X:

I noticed that Pismo is much faster so I'll be sticking with that for a while. I mount my files from the card directly and then use slimraw to copy/compress them to harddrive. In that way I only get compressed footage on the harddrive. With Pismo and Slimraw this is just a little bit slower than copying the mlvs to the harddrive directly.


reddeercity

Quote from: kgv5 on March 18, 2016, 06:11:25 AM
@reddeercity - could you please make a video tutorial how to get the newest method of MLVFS on PC working? I am still using the old version, it is a little bit hard to follow some new developments in this area though, i really enjoyed your previous tutorials. I bet it would be great for many people here if someone could sum it up to this point. Thanks.

Sure , I was thinking that myself the other day  ;)

reddeercity

@kgv5 here you go as requested ,  Video Tutorial for MLVFS for Windows .
I mainly talk about windows7 but the same will hold true for Win8 & Win10


kgv5

@reddeercity
Great, thank you very much. Very informative and helpful tutorial, as usual :) I needed such an explanation, it was little bit hard to follow this thread, now everything is clear!
www.pilotmovies.pl   5D Mark III, 6D, 550D

axelcine

@reddeercity - Thank you very much. This was exactly what I needed.
EOS RP, 5dIII.113/Batt.grip, 5dIII.123, 700d/Batt.Grip/VF4 viewfinder + a truckload of new and older Canon L, Sigma and Tamron glass