View Issue Details

IDProjectCategoryView StatusLast Update
0000331Cinelerra-GG[All Projects] Featurepublic2019-11-13 20:59
ReporterAndrew-R Assigned Togoodguy  
PrioritynormalSeverityminorReproducibilityalways
Status assignedResolutionopen 
Product Version2019-09 
Target VersionFixed in Version 
Summary0000331: Reverse playback (fast rewind backward) is slow even for I-only files like DV
DescriptionTry to load simple-to-decode MJPEG or DV (PAL/NTSC, not HD DV) into CinGG. Playing and fast playing forward works ok. Backward fast rewind uses surprisingly big amount of CPU. If I have 4x3.9Ghz it all smooth, but 4x1.4Ghz actually looses a lot of frames.

Note: cache size in preferences left to its default - 16Mb.
Steps To ReproduceSee above
Additional InformationNot sure if this 'bug' can be fixed in current Cinelerra architecture ..... I looked at cache files, comment there says

// CICache for quickly reading data that is hard to decompress yet used
// over and over.

https://git.cinelerra-gg.org/git/?p=goodguy/cinelerra.git;a=blob;f=cinelerra-5.1/cinelerra/cache.h;h=fde997a50289c41ee76f725681d6d2ad12eddc94;hb=HEAD

But since those lines were written CinGG moved to ffmpeg as its main engine ......
Tagsslowness

Activities

Andrew-R

Andrew-R

2019-11-13 20:59

reporter   ~0002458

Found interesting email in old archives:
https://lists.skolelinux.org/pipermail/cinelerra/2003-August/000409.html
[CinCVS] trackcanvas speedup
from Andraz Tori
--quote--
The cache is only enabled for the track canvas, so the results are seen
when video track has drawing enabled and you work on it left and right.


Actually patch could be enabled everywhere in cinelerra (just change the
initialisation of cache_enabled in file.C to 1). This way it can also
speed up the rendering when you are working on some part of the video
and you watch it again and again and again...

This cache is really basic, it just uses a circular buffer.

Also it takes quite some memory, so it is not recommended to use it on
memory starving machines - or at least decrease the FRAMES_CACHE_SIZE
number in file.h. It is important to know that full sized images are
cached and not thumbnails...
---

and next email from him again:
https://lists.skolelinux.org/pipermail/cinelerra/2003-August/000411.html
[CinCVS] cinelerra - speedup due to pixmap cache

---
By default it is disabled for all resources except for resource pixmaps - which are also used in trackcanvas. I have written additional code in resourcepixmap.C in order to cache lower resolution and already converted RGB images instead of higher resolution ones (due to smaller memory consumption). This greatly improves user experience when working on smaller range of footage for longer time.
Currently for trackcanvas, cache size is 100 pixmaps per video resource. At 80x64 this means cca. 2Mbytes of data per track.

With this cache engine, also rendering can be much more responsive when working within the same time range for longer time. For a test ride: just change cache_enabled = 0 to 1 in line 26 of file.C.

This patch is made against 1.1.6. For production use, graphical interface would be needed, so it would be possible to set trackcanvas and rendering pipeline cachesize parameters separately. Maybe cache size should also be set absolute (approximately in Kbytes) so it will be possible to control it more predictably on slow machines.
---

I wonder if it is enabled in current CinGG or not ....
May be separate on-disk cache can be used, like GIMP for example allows to create some app-specific swap file?
Andrew-R

Andrew-R

2019-10-26 14:01

reporter   ~0002340

Actually, codec_tag was for AVI only, now with more codecs and not only in avi container ...

I still wonder what i broke :}

I-only_files_reverse_play_speedup.diff (1,122 bytes)
diff --git a/cinelerra-5.1/cinelerra/ffmpeg.C b/cinelerra-5.1/cinelerra/ffmpeg.C
index 70098ca..32867de 100644
--- a/cinelerra-5.1/cinelerra/ffmpeg.C
+++ b/cinelerra-5.1/cinelerra/ffmpeg.C
@@ -1192,10 +1192,19 @@ int FFVideoStream::video_seek(int64_t pos)
 	if( pos == curr_pos-1 && !seeked ) return 0;
 // if close enough, just read up to current
 	int gop = avctx->gop_size;
-	if( gop < 4 ) gop = 4;
+	if( gop < 4 && gop != 0) gop = 4;
 	if( gop > 64 ) gop = 64;
+	if( gop == 0 ) gop = 1;
+	//fprintf(stderr, "GOP: %i \n", gop);
 	int read_limit = curr_pos + 3*gop;
 	if( pos >= curr_pos && pos <= read_limit ) return 0;
+	// fixup for I-only codecs, not sure why it needed with ffmpeg 4.2
+	if (st->codecpar->codec_id == AV_CODEC_ID_DVVIDEO || st->codecpar->codec_id == AV_CODEC_ID_MJPEG || 
+	st->codecpar->codec_id == AV_CODEC_ID_FFVHUFF || st->codecpar->codec_id == AV_CODEC_ID_DNXHD ||
+	st->codecpar->codec_id ==AV_CODEC_ID_HUFFYUV ) {
+	gop = 1;
+	if( seek(pos - 2*gop, frame_rate) < 0 ) return -1;
+	}
 // guarentee preload more than 2*gop frames
 	if( seek(pos - 3*gop, frame_rate) < 0 ) return -1;
 	return 1;
Andrew-R

Andrew-R

2019-10-26 13:30

reporter   ~0002339

Patch

dv_reverse_play_speedup.diff (848 bytes)
diff --git a/cinelerra-5.1/cinelerra/ffmpeg.C b/cinelerra-5.1/cinelerra/ffmpeg.C
index 70098ca..36342e5 100644
--- a/cinelerra-5.1/cinelerra/ffmpeg.C
+++ b/cinelerra-5.1/cinelerra/ffmpeg.C
@@ -1192,10 +1192,16 @@ int FFVideoStream::video_seek(int64_t pos)
 	if( pos == curr_pos-1 && !seeked ) return 0;
 // if close enough, just read up to current
 	int gop = avctx->gop_size;
-	if( gop < 4 ) gop = 4;
+	if( gop < 4 && gop != 0) gop = 4;
 	if( gop > 64 ) gop = 64;
+	if( gop == 0 ) gop = 1;
+	//fprintf(stderr, "GOP: %i \n", gop);
 	int read_limit = curr_pos + 3*gop;
 	if( pos >= curr_pos && pos <= read_limit ) return 0;
+	if (st->codecpar->codec_tag == 1685288548) {
+	gop = 1;
+	if( seek(pos - 2*gop, frame_rate) < 0 ) return -1;
+	}
 // guarentee preload more than 2*gop frames
 	if( seek(pos - 3*gop, frame_rate) < 0 ) return -1;
 	return 1;
Andrew-R

Andrew-R

2019-10-26 13:22

reporter   ~0002338

so, something like this improves DV _reverse_ playback (one track), without impacting forward x2 speed too much ...

int FFVideoStream::video_seek(int64_t pos)
{
 if( decode_activate() <= 0 ) return -1;
 if( !st->codecpar ) return -1;
 if( pos == curr_pos-1 && !seeked ) return 0;
// if close enough, just read up to current
 int gop = avctx->gop_size;
 if( gop < 4 && gop != 0) gop = 4;
 if( gop > 64 ) gop = 64;
 if( gop == 0 ) gop = 1;
 //fprintf(stderr, "GOP: %i \n", gop);
 int read_limit = curr_pos + 3*gop;
 if( pos >= curr_pos && pos <= read_limit ) return 0;
 if (st->codecpar->codec_tag == 1685288548) {
 gop = 1;
 if( seek(pos - 2*gop, frame_rate) < 0 ) return -1;
 }
// guarentee preload more than 2*gop frames
 if( seek(pos - 3*gop, frame_rate) < 0 ) return -1;
 return 1;
}


codec_tag == 1685288548 - DV.

original file was making just 6-7 fps on reverse playback - this - up to 16.
Andrew-R

Andrew-R

2019-10-26 12:38

reporter   ~0002337

so, I modified function

int FFVideoStream::video_seek(int64_t pos)
{
 if( decode_activate() <= 0 ) return -1;
 if( !st->codecpar ) return -1;
 if( pos == curr_pos-1 && !seeked ) return 0;
// if close enough, just read up to current
 int gop = avctx->gop_size;
 if( gop < 4 && gop != 0) gop = 4;
 if( gop > 64 ) gop = 64;
 if( gop == 0 ) gop = 1;
 fprintf(stderr, "GOP: %i \n", gop);
 int read_limit = curr_pos + 3*gop;
 if (gop == 1) read_limit = curr_pos + 1*gop;
 if( pos >= curr_pos && pos <= read_limit ) return 0;
// guarentee preload more than 2*gop frames
 if (gop == 1) {
 if( seek(pos - 1*gop, frame_rate) < 0 ) return -1;
 }
 if( seek(pos - 3*gop, frame_rate) < 0 ) return -1;
 return 1;
}

and it printed:

root@slax:/dev/shm/tmp/cinelerra-goodguy-20191025/cinelerra-5.1/bin# ./cin
Cinelerra Infinity - built: Oct 25 2019 10:52:55
git://git.cinelerra-gg.org/goodguy/cinelerra.git
(c) 2006-2019 Heroine Virtual Ltd. by Adam Williams
(c) 2007-2019 cin5 derivative by W.P. Morrow aka goodguy
Cinelerra is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions. There is absolutely no warranty for Cinelerra.

FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
GOP: 12
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
GOP: 12
GOP: 12
seeked pos = 304, 0
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
GOP: 12
GOP: 12
seeked pos = 645, 0
GOP: 12
seeked pos = 987, 0
GOP: 12
seeked pos = 1328, 0
GOP: 12
seeked pos = 0, 0
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'defaults.pcm.dmix.channels'
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: Нет такого файла или каталога
ALSA lib conf.c:5036:(snd_config_expand) Args evaluate error: Нет такого файла или каталога
ALSA lib pcm.c:2564:(snd_pcm_open_noupdate) Unknown PCM dmix:SB
AudioALSA::open_output default: Нет такого файла или каталога
GOP: 12
seeked pos = 1633, 0
GOP: 12
seeked pos = 1630, 0
GOP: 12
seeked pos = 1625, 0
GOP: 12
seeked pos = 1621, 0
GOP: 12
seeked pos = 1616, 0
GOP: 12
seeked pos = 1612, 0
GOP: 12
seeked pos = 1607, 0
GOP: 12
seeked pos = 1603, 0
GOP: 12
seeked pos = 1598, 0
GOP: 12
seeked pos = 1595, 0
GOP: 12
seeked pos = 1590, 0
GOP: 12
seeked pos = 1586, 0
GOP: 12
seeked pos = 1581, 0
GOP: 12
seeked pos = 1577, 0
GOP: 12
seeked pos = 1572, 0
GOP: 12
seeked pos = 1567, 0
GOP: 12
seeked pos = 1563, 0
GOP: 12
seeked pos = 1559, 0
GOP: 12
seeked pos = 1555, 0
GOP: 12
seeked pos = 1550, 0
GOP: 12
seeked pos = 1545, 0
GOP: 12
seeked pos = 1541, 0
GOP: 12
seeked pos = 1537, 0
GOP: 12
seeked pos = 1532, 0
GOP: 12
seeked pos = 1528, 0
Session time: 0:00:27
Cpu time: user: 0:00:15.236 sys: 0:00:01.376

GOP = 12 for DV?!!!

Ok, I'll try to special-case it for specific codec .....
Andrew-R

Andrew-R

2019-10-26 12:20

reporter   ~0002336

Hm ....
./cin
Cinelerra Infinity - built: Oct 25 2019 10:52:55
git://git.cinelerra-gg.org/goodguy/cinelerra.git
(c) 2006-2019 Heroine Virtual Ltd. by Adam Williams
(c) 2007-2019 cin5 derivative by W.P. Morrow aka goodguy
Cinelerra is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions. There is absolutely no warranty for Cinelerra.

FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
seeked pos = 0, 0
seeked pos = 328, 0
seeked pos = 669, 0
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
seeked pos = 1011, 0
seeked pos = 1352, 0
seeked pos = 0, 0
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'defaults.pcm.dmix.channels'
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: Нет такого файла или каталога
ALSA lib conf.c:5036:(snd_config_expand) Args evaluate error: Нет такого файла или каталога
ALSA lib pcm.c:2564:(snd_pcm_open_noupdate) Unknown PCM dmix:SB
AudioALSA::open_output default: Нет такого файла или каталога
seeked pos = 1657, 0
seeked pos = 1655, 0
seeked pos = 1651, 0
seeked pos = 1647, 0
seeked pos = 1642, 0
seeked pos = 1638, 0
seeked pos = 1634, 0
seeked pos = 1629, 0
seeked pos = 1625, 0
seeked pos = 1621, 0
seeked pos = 1616, 0
seeked pos = 1611, 0
seeked pos = 1606, 0
seeked pos = 1602, 0
seeked pos = 1599, 0
seeked pos = 1595, 0
seeked pos = 1590, 0
seeked pos = 1586, 0
seeked pos = 1581, 0
seeked pos = 1576, 0
seeked pos = 1572, 0
seeked pos = 1567, 0
seeked pos = 1563, 0
seeked pos = 1557, 0
seeked pos = 1554, 0
seeked pos = 1550, 0
seeked pos = 1546, 0


and this after i set

// guarentee preload more than 2*gop frames
    if( seek(pos - 1*gop, frame_rate) < 0 ) return -1;

(it was 3*gop).

Now, backward playback is faster (up to 14 fps) but i wonder what I broke :}
Andrew-R

Andrew-R

2019-10-26 12:02

reporter   ~0002335

So, I uncommented seek_position printf, and got this (for normal and reverse playback):

./cin
Cinelerra Infinity - built: Oct 25 2019 10:52:55
git://git.cinelerra-gg.org/goodguy/cinelerra.git
(c) 2006-2019 Heroine Virtual Ltd. by Adam Williams
(c) 2007-2019 cin5 derivative by W.P. Morrow aka goodguy
Cinelerra is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions. There is absolutely no warranty for Cinelerra.

FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
seeked pos = 1442, 0
seeked pos = 0, 0
seeked pos = 304, 0
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
seeked pos = 645, 0
seeked pos = 987, 0
seeked pos = 1328, 0
seeked pos = 0, 0
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'defaults.pcm.dmix.channels'
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: Нет такого файла или каталога
ALSA lib conf.c:5036:(snd_config_expand) Args evaluate error: Нет такого файла или каталога
ALSA lib pcm.c:2564:(snd_pcm_open_noupdate) Unknown PCM dmix:SB
AudioALSA::open_output default: Нет такого файла или каталога
ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'defaults.pcm.dmix.channels'
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: Нет такого файла или каталога
ALSA lib conf.c:5036:(snd_config_expand) Args evaluate error: Нет такого файла или каталога
ALSA lib pcm.c:2564:(snd_pcm_open_noupdate) Unknown PCM dmix:SB
AudioALSA::open_output default: Нет такого файла или каталога
seeked pos = 1632, 0
seeked pos = 1631, 0
seeked pos = 1627, 0
seeked pos = 1623, 0
seeked pos = 1619, 0
seeked pos = 1615, 0
seeked pos = 1611, 0
seeked pos = 1607, 0
seeked pos = 1602, 0
seeked pos = 1598, 0
seeked pos = 1595, 0
seeked pos = 1590, 0
seeked pos = 1586, 0
seeked pos = 1583, 0
seeked pos = 1579, 0
seeked pos = 1575, 0
seeked pos = 1571, 0
seeked pos = 1568, 0
seeked pos = 1564, 0
seeked pos = 1560, 0
seeked pos = 1556, 0
seeked pos = 1552, 0
seeked pos = 1548, 0
seeked pos = 1544, 0
seeked pos = 1540, 0
seeked pos = 1534, 0
seeked pos = 1531, 0
seeked pos = 1527, 0
seeked pos = 1523, 0
seeked pos = 1517, 0
seeked pos = 1513, 0
seeked pos = 1509, 0
seeked pos = 1505, 0
[a lot more of this until file ends]

so, CinGG seeks few frames backward (4-6) and then decode them all, and then display? But where is cache then?
Andrew-R

Andrew-R

2019-10-26 11:43

reporter   ~0002334

no, modifying FileFFMPEG::get_memory_usage() to return something (like width * height * bytes per pixel * num_cpu) not improved reverse playback/fast reverse playback.....
Andrew-R

Andrew-R

2019-10-26 11:22

reporter   ~0002333

Hm ... looking at
https://git.cinelerra-gg.org/git/?p=goodguy/cinelerra.git;a=blob;f=cinelerra-5.1/cinelerra/fileffmpeg.C;h=bfd7ed69b839a38568918c41c7852d65c607a171;hb=HEAD

  int64_t FileFFMPEG::get_memory_usage()
  {
          return 0;
 }
====

Also, i tried to set gop_size to 1 in case it was 0 (in ffmpeg.C), but this resulted in no change, as far as fast reverse playback is concerned ....

int FFVideoStream::video_seek(int64_t pos)
{
   if( decode_activate() <= 0 ) return -1;
   if( !st->codecpar ) return -1;
   if( pos == curr_pos-1 && !seeked ) return 0;
// if close enough, just read up to current
   int gop = avctx->gop_size;
   if( gop < 4 && gop != 0) gop = 4;
   if( gop > 64 ) gop = 64;
   if( gop == 0 ) gop = 1;
   int read_limit = curr_pos + 3*gop;
   if( pos >= curr_pos && pos <= read_limit ) return 0;
// guarentee preload more than 2*gop frames
   if( seek(pos - 3*gop, frame_rate) < 0 ) return -1;
   return 1;
}

because I was thinking gop_size will be 0 for intra-only formats:
https://www.ffmpeg.org/doxygen/4.0/structAVCodecContext.html#a9b6b3f1fcbdcc2ad9f4dbb4370496e38

int AVCodecContext::gop_size
the number of pictures in a group of pictures, or 0 for intra_only
encoding: Set by user.
decoding: unused
Andrew-R

Andrew-R

2019-10-26 04:16

reporter   ~0002332

I tried to run prof2, it failed for me not finding symbol 'main', I tried oprofile, it sorta worked but without symbol names, so I looked up Internet and found this:

https://sourceforge.net/p/oprofile/mailman/message/24400007/
For a binary 'foo' that initially contains debug info . . .
$ objcopy --only-keep-debug foo foo.debuginfo
$ objcopy --strip-debug foo
$ objcopy --add-gnu-debuglink=foo.debuginfo foo

Note "objcopy --add-gnu-debuglink=" step! I think CinGG's makefile not uses this ..... Anyway, after manually performing this step ....

CPU: AMD64 family15h, speed 3800 MHz (estimated)
Counted CPU_CLK_UNHALTED events (CPU Clocks not Halted) with a unit mask of 0x00 (No unit mask) count 100000
Samples on CPU 0
Samples on CPU 1
Samples on CPU 2
Samples on CPU 3
samples % samples % samples % samples % image name app name symbol name
124008 46.5391 129245 48.6868 132005 48.3202 121272 43.9199 cin cin dv_decode_video_segment
70917 26.6145 75109 28.2937 75469 27.6253 69599 25.2060 cin cin ff_simple_idct_put_sse2
26211 9.8367 26709 10.0613 28037 10.2629 27192 9.8479 cin cin dv_decode_ac
2930 1.0996 2459 0.9263 2691 0.9850 1966 0.7120 kallsyms cin copy_user_generic_string
2850 1.0696 19 0.0072 12 0.0044 22 0.0080 kallsyms cin ioread32
1666 0.6252 1207 0.4547 893 0.3269 3391 1.2281 libz.so.1.2.11 cin /lib/libz.so.1.2.11
1634 0.6132 3229 1.2164 2271 0.8313 117 0.0424 libfontconfig.so.1.12.0 cin /usr/lib/libfontconfig.so.1.12.0
1532 0.5749 1478 0.5568 1321 0.4835 1471 0.5327 libc-2.23.so cin memcpy
1469 0.5513 91 0.0343 82 0.0300 135 0.0489 nouveau cin /nouveau
1158 0.4346 852 0.3209 1174 0.4297 906 0.3281 cin cin yuv420_bgr32_mmx
896 0.3363 469 0.1767 483 0.1768 443 0.1604 kallsyms cin atomic_try_cmpxchg
874 0.3280 839 0.3161 545 0.1995 610 0.2209 libGL.so.1.2.0 cin /usr/X11R7/lib/libGL.so.1.2.0
865 0.3246 641 0.2415 714 0.2614 589 0.2133 kallsyms cin read_hpet
833 0.3126 0 0 0 0 0 0 cin cin YUV::init(double, double, int)
714 0.2680 795 0.2995 627 0.2295 635 0.2300 nouveau_dri.so cin /usr/X11R7/lib/dri/nouveau_dri.so
709 0.2661 628 0.2366 689 0.2522 553 0.2003 kallsyms cin entry_INT80_compat
655 0.2458 671 0.2528 643 0.2354 436 0.1579 libX11.so.6.3.0 cin /usr/X11R7/lib/libX11.so.6.3.0
653 0.2451 955 0.3598 828 0.3031 422 0.1528 cin cin BC_Xfer::xfer_rgba8888_to_bgr8888(unsigned int, unsigned int)
504 0.1891 230 0.0866 210 0.0769 183 0.0663 kallsyms cin __x86_indirect_thunk_rax
495 0.1858 448 0.1688 449 0.1644 351 0.1271 libpthread-2.23.so cin pthread_mutex_lock
459 0.1723 378 0.1424 434 0.1589 477 0.1728 libc-2.23.so cin _int_malloc
436 0.1636 394 0.1484 499 0.1827 394 0.1427 libc-2.23.so cin _int_free
435 0.1633 266 0.1002 223 0.0816 987 0.3575 libpng16.so.16.35.0 cin /usr/lib/libpng16.so.16.35.0
429 0.1610 371 0.1398 399 0.1461 258 0.0934 libpthread-2.23.so cin pthread_mutex_unlock
400 0.1501 251 0.0946 314 0.1149 232 0.0840 kallsyms cin wrmsrl
393 0.1475 463 0.1744 268 0.0981 375 0.1358 libexpat.so.1.6.4 cin /usr/lib/libexpat.so.1.6.4
390 0.1464 476 0.1793 316 0.1157 499 0.1807 kallsyms cin find_next_iomem_res
366 0.1374 206 0.0776 231 0.0846 218 0.0790 kallsyms cin check_preemption_disabled
364 0.1366 0 0 14 0.0051 0 0 kallsyms cin irq_entries_start
351 0.1317 415 0.1563 288 0.1054 496 0.1796 kallsyms cin dma_direct_alloc_pages
344 0.1291 0 0 0 0 0 0 kallsyms cin pci_conf1_write
332 0.1246 271 0.1021 1390 0.5088 473 0.1713 libc-2.23.so cin strcmp
257 0.0964 309 0.1164 321 0.1175 201 0.0728 libxcb.so.1.1.0 cin /usr/X11R7/lib/libxcb.so.1.1.0
249 0.0934 105 0.0396 114 0.0417 102 0.0369 kallsyms cin _raw_spin_unlock_irqrestore
244 0.0916 209 0.0787 243 0.0889 219 0.0793 libc-2.23.so cin malloc_consolidate
230 0.0863 69 0.0260 56 0.0205 66 0.0239 kallsyms cin _raw_spin_lock_irqsave
205 0.0769 213 0.0802 163 0.0597 332 0.1202 kallsyms cin page_fault
202 0.0758 136 0.0512 146 0.0534 114 0.0413 kallsyms cin native_read_msr
195 0.0732 125 0.0471 148 0.0542 124 0.0449 kallsyms cin swapgs_restore_regs_and_return_to_usermode
192 0.0721 182 0.0686 181 0.0663 163 0.0590 cin cin avcodec_default_execute
179 0.0672 117 0.0441 164 0.0600 101 0.0366 cin cin av_opt_find2.constprop.13
178 0.0668 194 0.0731 130 0.0476 207 0.0750 ttm cin /ttm
176 0.0661 93 0.0350 88 0.0322 95 0.0344 kallsyms cin preempt_count_sub
175 0.0657 93 0.0350 120 0.0439 82 0.0297 kallsyms cin select_task_rq_fair
164 0.0615 110 0.0414 142 0.0520 109 0.0395 kallsyms cin compound_head
164 0.0615 110 0.0414 133 0.0487 110 0.0398 kallsyms cin sched_clock
159 0.0597 48 0.0181 18 0.0066 21 0.0076 cin cin BC_Xfer::xfer_rgb888_to_bgr8888(unsigned int, unsigned int)
157 0.0589 222 0.0836 158 0.0578 1035 0.3748 kallsyms cin clear_page_rep

this is output of opreport -p /dev/shm/tmp/cinelerra-goodguy-20191025/cinelerra-5.1/cinelerra/i686/ -l | less
after

operf -c /dev/shm/tmp/cinelerra-goodguy-20191025/cinelerra-5.1/bin/cin
operf: Profiler started
Cinelerra Infinity - built: Oct 25 2019 10:52:55
git://git.cinelerra-gg.org/goodguy/cinelerra.git
(c) 2006-2019 Heroine Virtual Ltd. by Adam Williams
(c) 2007-2019 cin5 derivative by W.P. Morrow aka goodguy
Cinelerra is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions. There is absolutely no warranty for Cinelerra.

FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
FFMPEG::open_decoder: some stream times estimated: /dev/shm/dv.avi
ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'defaults.pcm.dmix.channels'
ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: Нет такого файла или каталога
ALSA lib conf.c:5036:(snd_config_expand) Args evaluate error: Нет такого файла или каталога
ALSA lib pcm.c:2564:(snd_pcm_open_noupdate) Unknown PCM dmix:SB
AudioALSA::open_output default: Нет такого файла или каталога
Session time: 0:00:57
Cpu time: user: 0:01:13.637 sys: 0:00:04.523

Profiling done.
------------

Session was simply by loading dv file and reverse 2x playing it after setting cursor to very end (1min).
So, it seems a lot of time spend in decoding DV - may be because CinGG tries to decode from "cur_pos - 20" all frames up to "cur_pos - 1" ?
This makes sense for highly-compressed files with I/P/B type of frames, but for I-only tracks it can be simplified, I think?
Pierre

Pierre

2019-10-25 16:23

updater   ~0002325

Here, I have no difficulty in making your sequences play backwards, at all the different speeds offered by CinGG or ShuttlePROv2.

However, rapid reversing requires much more CPU work (80%) than the power used for the same normal direction travel (max 35%). The ram memory does not indicate any increase in usage.

Issue History

Date Modified Username Field Change
2019-10-25 15:42 Andrew-R New Issue
2019-10-25 15:42 Andrew-R Tag Attached: slowness
2019-10-25 16:23 Pierre Note Added: 0002325
2019-10-26 04:16 Andrew-R Note Added: 0002332
2019-10-26 11:22 Andrew-R Note Added: 0002333
2019-10-26 11:43 Andrew-R Note Added: 0002334
2019-10-26 12:02 Andrew-R Note Added: 0002335
2019-10-26 12:20 Andrew-R Note Added: 0002336
2019-10-26 12:38 Andrew-R Note Added: 0002337
2019-10-26 13:22 Andrew-R Note Added: 0002338
2019-10-26 13:30 Andrew-R File Added: dv_reverse_play_speedup.diff
2019-10-26 13:30 Andrew-R Note Added: 0002339
2019-10-26 14:01 Andrew-R File Added: I-only_files_reverse_play_speedup.diff
2019-10-26 14:01 Andrew-R Note Added: 0002340
2019-10-31 02:10 PhyllisSmith Assigned To => goodguy
2019-10-31 02:10 PhyllisSmith Status new => assigned
2019-11-13 20:59 Andrew-R Note Added: 0002458