From 77277b41368cf6912b230fd882866fc5a5634a3e Mon Sep 17 00:00:00 2001 From: adam Date: Mon, 23 Sep 2024 23:15:13 +0200 Subject: [PATCH 1/5] [prefs] Indexing to file preferences --- avidemux/common/ADM_commonUI/DIA_prefs.cpp | 42 ++++++++++++++++++- .../ADM_coreUtils/include/prefs2_list.h | 3 ++ avidemux_core/ADM_coreUtils/src/prefs2.conf | 6 +++ avidemux_core/ADM_coreUtils/src/prefs2.h | 5 +++ .../ADM_coreUtils/src/prefs2_desc.cpp | 3 ++ .../ADM_coreUtils/src/prefs2_json.cpp | 5 +++ avidemux_core/ADM_coreUtils/src/prefs2_pref.h | 3 ++ 7 files changed, 65 insertions(+), 2 deletions(-) diff --git a/avidemux/common/ADM_commonUI/DIA_prefs.cpp b/avidemux/common/ADM_commonUI/DIA_prefs.cpp index 3ba015dc7..7b15a5fcf 100644 --- a/avidemux/common/ADM_commonUI/DIA_prefs.cpp +++ b/avidemux/common/ADM_commonUI/DIA_prefs.cpp @@ -119,6 +119,10 @@ uint32_t refreshCapValue=100; bool askPortAvisynth=false; uint32_t defaultPortAvisynth = 9999; +uint32_t indexingTSPSfiles=2; +uint32_t indexingMKVfiles=1; +uint32_t indexingMP4files=1; + uint32_t toneMappingHDR = 1; uint32_t outOfGamutHDR = 0; float targetLumHDR = DEFAULT_TARGET_LUMINANCE_HDR; @@ -186,6 +190,20 @@ std::string currentSdlDriver=getSdlDriverName(); defaultPortAvisynth=9999; } ADM_info("Avisynth port: %d\n",defaultPortAvisynth); + + //Indexing + if(!prefs->get(INDEXING_TS_PS_INDEXING, &indexingTSPSfiles)) + { + indexingTSPSfiles = 2; + } + if(!prefs->get(INDEXING_MKV_INDEXING, &indexingMKVfiles)) + { + indexingMKVfiles = 1; + } + if(!prefs->get(INDEXING_MP4_INDEXING, &indexingMP4files)) + { + indexingMP4files = 1; + } // HDR if (!prefs->get(HDR_TONEMAPPING,&toneMappingHDR)) toneMappingHDR=1; @@ -433,6 +451,21 @@ std::string currentSdlDriver=getSdlDriverName(); diaElemUInteger uintDefaultPortAvisynth(&defaultPortAvisynth,QT_TRANSLATE_NOOP("adm","Default port to use"),1024,65535); frameAvisynth.swallow(&togAskAvisynthPort); frameAvisynth.swallow(&uintDefaultPortAvisynth); + + // Indexing + diaElemFrame frameIndexing(QT_TRANSLATE_NOOP("adm","Indexing to file")); + diaMenuEntry indexingEntries[] = { + {0, QT_TRANSLATE_NOOP("adm","Disabled"), NULL }, + {1, QT_TRANSLATE_NOOP("adm","Read only"), NULL }, + {2, QT_TRANSLATE_NOOP("adm","Enabled"), NULL } + }; + diaElemMenu menuIndexingTsPs(&indexingTSPSfiles, QT_TRANSLATE_NOOP("adm","TS and PS files:"), NB_ITEMS(indexingEntries), indexingEntries); + diaElemMenu menuIndexingMKV(&indexingMKVfiles, QT_TRANSLATE_NOOP("adm","MKV files:"), NB_ITEMS(indexingEntries), indexingEntries); + diaElemMenu menuIndexingMP4(&indexingMP4files, QT_TRANSLATE_NOOP("adm","MP4 files:"), NB_ITEMS(indexingEntries), indexingEntries); + + frameIndexing.swallow(&menuIndexingTsPs); + frameIndexing.swallow(&menuIndexingMKV); + frameIndexing.swallow(&menuIndexingMP4); // Editor cache diaElemFrame frameCache(QT_TRANSLATE_NOOP("adm","Caching of decoded pictures")); @@ -571,7 +604,7 @@ std::string currentSdlDriver=getSdlDriverName(); /* Automation */ /* Import */ - diaElem *diaImport[]={&frameMultiLoad, &framePics, &frameAvisynth}; + diaElem *diaImport[]={&frameMultiLoad, &framePics, &frameAvisynth, &frameIndexing}; diaElemTabs tabImport(QT_TRANSLATE_NOOP("adm","Import"),NB_ELEM(diaImport),diaImport); /* Output */ @@ -906,7 +939,12 @@ std::string currentSdlDriver=getSdlDriverName(); // Avisynth prefs->set(AVISYNTH_AVISYNTH_DEFAULTPORT,defaultPortAvisynth); prefs->set(AVISYNTH_AVISYNTH_ALWAYS_ASK, askPortAvisynth); - + + // Indexing + prefs->set(INDEXING_TS_PS_INDEXING, indexingTSPSfiles); + prefs->set(INDEXING_MKV_INDEXING, indexingMKVfiles); + prefs->set(INDEXING_MP4_INDEXING, indexingMP4files); + // HDR prefs->set(HDR_TONEMAPPING, toneMappingHDR); targetLumHDR = dTargetLumHDR; diff --git a/avidemux_core/ADM_coreUtils/include/prefs2_list.h b/avidemux_core/ADM_coreUtils/include/prefs2_list.h index 2e52429f5..00e787e4c 100644 --- a/avidemux_core/ADM_coreUtils/include/prefs2_list.h +++ b/avidemux_core/ADM_coreUtils/include/prefs2_list.h @@ -67,6 +67,9 @@ DEFAULT_DELETE_FIRST_PASS_LOG_FILES, //bool AVISYNTH_AVISYNTH_ALWAYS_ASK, //bool AVISYNTH_AVISYNTH_DEFAULTPORT, //uint32_t AVISYNTH_AVISYNTH_LOCALPORT, //uint32_t +INDEXING_TS_PS_INDEXING, //uint32_t +INDEXING_MKV_INDEXING, //uint32_t +INDEXING_MP4_INDEXING, //uint32_t RESET_ENCODER_ON_VIDEO_LOAD, //bool PICTURES_LOAD_IN_REVERSE_ORDER, //bool PICTURES_FPS_TYPE, //uint32_t diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.conf b/avidemux_core/ADM_coreUtils/src/prefs2.conf index 8d3662e74..871dcd164 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.conf +++ b/avidemux_core/ADM_coreUtils/src/prefs2.conf @@ -113,6 +113,12 @@ uint32_t:avisynth_defaultport, 9999, 1024, 65535 uint32_t:avisynth_localport, 0, 1024, 65535 } # +indexing{ +uint32_t:ts_ps_indexing, 2, 0, 2 +uint32_t:mkv_indexing, 1, 0, 2 +uint32_t:mp4_indexing, 1, 0, 2 +} +# bool:reset_encoder_on_video_load, 0, 0, 1 # pictures{ diff --git a/avidemux_core/ADM_coreUtils/src/prefs2.h b/avidemux_core/ADM_coreUtils/src/prefs2.h index dd0a42edd..20fb8679d 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2.h @@ -91,6 +91,11 @@ struct { uint32_t avisynth_defaultport; uint32_t avisynth_localport; }avisynth; +struct { + uint32_t ts_ps_indexing; + uint32_t mkv_indexing; + uint32_t mp4_indexing; +}indexing; bool reset_encoder_on_video_load; struct { bool load_in_reverse_order; diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp index 661944bac..e36b1713f 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp @@ -69,6 +69,9 @@ extern const ADM_paramList my_prefs_struct_param[]={ {"avisynth.avisynth_always_ask",offsetof(my_prefs_struct,avisynth.avisynth_always_ask),"bool",ADM_param_bool}, {"avisynth.avisynth_defaultport",offsetof(my_prefs_struct,avisynth.avisynth_defaultport),"uint32_t",ADM_param_uint32_t}, {"avisynth.avisynth_localport",offsetof(my_prefs_struct,avisynth.avisynth_localport),"uint32_t",ADM_param_uint32_t}, + {"indexing.ts_ps_indexing",offsetof(my_prefs_struct,indexing.ts_ps_indexing),"uint32_t",ADM_param_uint32_t}, + {"indexing.mkv_indexing",offsetof(my_prefs_struct,indexing.mkv_indexing),"uint32_t",ADM_param_uint32_t}, + {"indexing.mp4_indexing",offsetof(my_prefs_struct,indexing.mp4_indexing),"uint32_t",ADM_param_uint32_t}, {"reset_encoder_on_video_load",offsetof(my_prefs_struct,reset_encoder_on_video_load),"bool",ADM_param_bool}, {"pictures.load_in_reverse_order",offsetof(my_prefs_struct,pictures.load_in_reverse_order),"bool",ADM_param_bool}, {"pictures.fps_type",offsetof(my_prefs_struct,pictures.fps_type),"uint32_t",ADM_param_uint32_t}, diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp index 95f8f72ef..9b43d6b7b 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp +++ b/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp @@ -94,6 +94,11 @@ json.addBool("avisynth_always_ask",key->avisynth.avisynth_always_ask); json.addUint32("avisynth_defaultport",key->avisynth.avisynth_defaultport); json.addUint32("avisynth_localport",key->avisynth.avisynth_localport); json.endNode(); +json.addNode("indexing"); +json.addUint32("ts_ps_indexing",key->indexing.ts_ps_indexing); +json.addUint32("mkv_indexing",key->indexing.mkv_indexing); +json.addUint32("mp4_indexing",key->indexing.mp4_indexing); +json.endNode(); json.addBool("reset_encoder_on_video_load",key->reset_encoder_on_video_load); json.addNode("pictures"); json.addBool("load_in_reverse_order",key->pictures.load_in_reverse_order); diff --git a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h index 6d34eb433..edb9b67c2 100644 --- a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h +++ b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h @@ -80,6 +80,9 @@ static optionDesc myOptions[]={ { AVISYNTH_AVISYNTH_ALWAYS_ASK,"avisynth.avisynth_always_ask" ,ADM_param_bool ,"0", 0, 1}, { AVISYNTH_AVISYNTH_DEFAULTPORT,"avisynth.avisynth_defaultport" ,ADM_param_uint32_t ,"9999", 1024, 65535}, { AVISYNTH_AVISYNTH_LOCALPORT,"avisynth.avisynth_localport" ,ADM_param_uint32_t ,"0", 1024, 65535}, +{ INDEXING_TS_PS_INDEXING,"indexing.ts_ps_indexing" ,ADM_param_uint32_t ,"2", 0, 2}, +{ INDEXING_MKV_INDEXING,"indexing.mkv_indexing" ,ADM_param_uint32_t ,"1", 0, 2}, +{ INDEXING_MP4_INDEXING,"indexing.mp4_indexing" ,ADM_param_uint32_t ,"1", 0, 2}, { RESET_ENCODER_ON_VIDEO_LOAD,"reset_encoder_on_video_load" ,ADM_param_bool ,"0", 0, 1}, { PICTURES_LOAD_IN_REVERSE_ORDER,"pictures.load_in_reverse_order" ,ADM_param_bool ,"0", 0, 1}, { PICTURES_FPS_TYPE,"pictures.fps_type" ,ADM_param_uint32_t ,"1", 0, 6}, From 801197ed381f1e3f74ab3fba5c050cc1713e1bed Mon Sep 17 00:00:00 2001 From: adam Date: Mon, 23 Sep 2024 23:16:13 +0200 Subject: [PATCH 2/5] [Mpeg(x)S] use indexing to file preference --- .../ADM_coreDemuxerMpeg/src/ADM_indexFile.cpp | 14 ++++++++++ .../ADM_demuxers/MpegPS/ADM_ps.cpp | 5 +++- .../ADM_demuxers/MpegPS/ADM_psIndex.cpp | 26 ++++++++++++++++--- .../ADM_demuxers/MpegTS/ADM_ts.cpp | 7 +++-- .../ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp | 25 +++++++++++++++--- .../ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp | 25 +++++++++++++++--- .../ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp | 25 +++++++++++++++--- .../ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp | 26 ++++++++++++++++--- 8 files changed, 130 insertions(+), 23 deletions(-) diff --git a/avidemux_core/ADM_coreDemuxerMpeg/src/ADM_indexFile.cpp b/avidemux_core/ADM_coreDemuxerMpeg/src/ADM_indexFile.cpp index 134167763..120f17861 100644 --- a/avidemux_core/ADM_coreDemuxerMpeg/src/ADM_indexFile.cpp +++ b/avidemux_core/ADM_coreDemuxerMpeg/src/ADM_indexFile.cpp @@ -17,6 +17,7 @@ #include "ADM_default.h" #include "ADM_indexFile.h" #include "ctype.h" +#include "prefs.h" /** */ @@ -120,6 +121,19 @@ dmxToken *indexFile::searchToken(const char *name) bool indexFile::open(const char *name) { + uint32_t indexingPref = 2; + if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; + + if (indexingPref==0) + { + mFile = mfopen(name,"rt"); + if(!mFile) + { + return false; + } + return true; + } + file=ADM_fopen(name,"rt"); if(!file) { diff --git a/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp b/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp index a05f71ad7..7e80029da 100644 --- a/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp @@ -19,6 +19,7 @@ #include "DIA_coreToolkit.h" #include "ADM_indexFile.h" #include "ADM_ps.h" +#include "prefs.h" #include #define MY_CLASS psHeader @@ -36,10 +37,12 @@ uint8_t psHeader::open(const char *name) { char *idxName=(char *)malloc(strlen(name)+6); uint8_t r=1; + uint32_t indexingPref = 2; + if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; sprintf(idxName,"%s.idx2",name); ListOfIndexFiles.push_back(idxName); - if(!ADM_fileExist(idxName)) + if(!ADM_fileExist(idxName) || (indexingPref==0)) r=psIndexer(name); if(r!=ADM_OK) { diff --git a/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psIndex.cpp b/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psIndex.cpp index dfc6e3e76..31ad63167 100644 --- a/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psIndex.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psIndex.cpp @@ -26,6 +26,7 @@ #include "ADM_vidMisc.h" #include "DIA_coreToolkit.h" #include "ADM_coreUtils.h" +#include "prefs.h" static const char Type[5]={'X','I','P','B','P'}; // Frame type static const char Structure[6]={'X','T','B','F','C','S'}; // Invalid, Top, Bottom, Frame, Frame+TFF, Frame+BFF @@ -197,14 +198,31 @@ uint8_t PsIndexer::run(const char *file) char *indexName=(char *)malloc(strlen(file)+6); sprintf(indexName,"%s.idx2",file); - index=qfopen(indexName,"wt",true); - if(!index) + uint32_t indexingPref = 2; + if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; + + if (indexingPref == 2) + { + index=qfopen(indexName,"wt",true); + if(!index) + { + printf("[PsIndex] Cannot create %s\n",indexName); + mFile = mfopen(indexName,"wt"); + if (!mFile) + { + printf("[PsIndex] Cannot create memFile either\n"); + free(indexName); + return 0; + } + } + } + else { - printf("[PsIndex] Cannot create %s\n",indexName); + index = NULL; mFile = mfopen(indexName,"wt"); if (!mFile) { - printf("[PsIndex] Cannot create memFile either\n"); + printf("[PsIndex] Cannot create memFile\n"); free(indexName); return 0; } diff --git a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp index 7aa047cc5..7178c7955 100644 --- a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp @@ -21,6 +21,7 @@ #include "ADM_indexFile.h" #include "ADM_ts.h" #include "ADM_videoInfoExtractor.h" +#include "prefs.h" #define MY_CLASS tsHeader #include "ADM_coreDemuxerMpegTemplate.cpp.h" @@ -36,10 +37,12 @@ uint8_t tsHeader::open(const char *name) { char *idxName=(char *)malloc(strlen(name)+6); uint8_t r=1; - + uint32_t indexingPref = 2; + if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; + sprintf(idxName,"%s.idx2",name); ListOfIndexFiles.push_back(idxName); - if(!ADM_fileExist(idxName)) + if(!ADM_fileExist(idxName) || (indexingPref==0)) r=tsIndexer(name); if(r!=ADM_OK) { diff --git a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp index 38c245909..b01349fb1 100644 --- a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp @@ -14,6 +14,7 @@ #include "ADM_tsIndex.h" #include "DIA_coreToolkit.h" #include +#include "prefs.h" #define ifprintf(...) do { \ @@ -242,15 +243,31 @@ uint8_t TsIndexerH264::run(const char *file, ADM_TS_TRACK *videoTrac) data.picStructure=pictureFrame; string indexName=string(file); indexName=indexName+string(".idx2"); - index=qfopen(indexName,(const char*)"wt",true); + + uint32_t indexingPref = 2; + if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; - if(!index) + if (indexingPref == 2) { - ADM_error("[TsIndexerH264] Cannot create %s\n",indexName.c_str()); + index=qfopen(indexName,(const char*)"wt",true); + if(!index) + { + ADM_error("[TsIndexerH264] Cannot create %s\n",indexName.c_str()); + mFile=mfopen(indexName,"wt"); + if (!mFile) + { + printf("[TsIndexerH264] Cannot create memFile either\n"); + return 0; + } + } + } + else + { + index = NULL; mFile=mfopen(indexName,"wt"); if (!mFile) { - printf("[TsIndexerH264] Cannot create memFile either\n"); + printf("[TsIndexerH264] Cannot create memFile\n"); return 0; } } diff --git a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp index f4473ce0c..804c81faf 100644 --- a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp @@ -16,6 +16,7 @@ #include "ADM_tsIndex.h" #include "ADM_h265_tag.h" #include "ADM_vidMisc.h" +#include "prefs.h" #if 1 #define aprintf(...) {} @@ -313,15 +314,31 @@ uint8_t TsIndexerH265::run(const char *file,ADM_TS_TRACK *videoTrac) data.picStructure=pictureFrame; string indexName=string(file); indexName=indexName+string(".idx2"); - index=qfopen(indexName,(const char*)"wt",true); + + uint32_t indexingPref = 2; + if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; - if(!index) + if (indexingPref == 2) + { + index=qfopen(indexName,(const char*)"wt",true); + if(!index) + { + printf("[TsIndexerH265] Cannot create %s\n",indexName.c_str()); + mFile=mfopen(indexName,"wt"); + if (!mFile) + { + printf("[TsIndexerH265] Cannot create memFile either\n"); + return false; + } + } + } + else { - printf("[TsIndexerH265] Cannot create %s\n",indexName.c_str()); + index = NULL; mFile=mfopen(indexName,"wt"); if (!mFile) { - printf("[TsIndexerH265] Cannot create memFile either\n"); + printf("[TsIndexerH265] Cannot create memFile\n"); return false; } } diff --git a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp index eb209ab9f..f5f168098 100644 --- a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp @@ -13,6 +13,7 @@ ***************************************************************************/ #include "ADM_tsIndex.h" #include "DIA_coreToolkit.h" +#include "prefs.h" static const uint32_t FPS[16]={ 0, // 0 @@ -71,15 +72,31 @@ uint8_t result=1; string indexName=string(file); indexName=indexName+string(".idx2"); - index=qfopen(indexName,"wt",true); + + uint32_t indexingPref = 2; + if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; - if(!index) + if (indexingPref == 2) + { + index=qfopen(indexName,"wt",true); + if(!index) + { + printf("[TsIndexerMpeg2] Cannot create %s\n",indexName.c_str()); + mFile=mfopen(indexName,"wt"); + if (!mFile) + { + printf("[TsIndexerMpeg2] Cannot create memFile either\n"); + return 0; + } + } + } + else { - printf("[TsIndexerMpeg2] Cannot create %s\n",indexName.c_str()); + index = NULL; mFile=mfopen(indexName,"wt"); if (!mFile) { - printf("[TsIndexerMpeg2] Cannot create memFile either\n"); + printf("[TsIndexerMpeg2] Cannot create memFile\n"); return 0; } } diff --git a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp index e15ec4512..36ba2bb10 100644 --- a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp @@ -12,6 +12,7 @@ * * ***************************************************************************/ #include "ADM_tsIndex.h" +#include "prefs.h" static const uint32_t VC1_ar[16][2] = { // From VLC { 0, 0}, { 1, 1}, {12,11}, {10,11}, {16,11}, {40,33}, @@ -52,18 +53,35 @@ dmxPacketInfo info; string indexName=string(file); indexName=indexName+string(".idx2"); - index=qfopen(indexName,"wt",true); + + uint32_t indexingPref = 2; + if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; - if(!index) + if (indexingPref == 2) + { + index=qfopen(indexName,"wt",true); + if(!index) + { + printf("[TsIndex] Cannot create %s\n",indexName.c_str()); + mFile=mfopen(indexName,"wt"); + if (!mFile) + { + printf("[TsIndex] Cannot create memFile either\n"); + return false; + } + } + } + else { - printf("[TsIndex] Cannot create %s\n",indexName.c_str()); + index = NULL; mFile=mfopen(indexName,"wt"); if (!mFile) { - printf("[TsIndex] Cannot create memFile either\n"); + printf("[TsIndex] Cannot create memFile\n"); return false; } } + writeSystem(file,false); pkt=new tsPacketLinearTracker(videoTrac->trackPid, audioTracks); From 71637f9d72566f9f23775a8cd04dbd02a8a7e24e Mon Sep 17 00:00:00 2001 From: adam Date: Mon, 23 Sep 2024 23:17:11 +0200 Subject: [PATCH 3/5] [Matroska] use indexing to file preference --- .../ADM_demuxers/Matroska/ADM_mkvIndexer.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp b/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp index 08c5d2117..f749f1f62 100644 --- a/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp +++ b/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp @@ -26,6 +26,8 @@ #include "ADM_videoInfoExtractor.h" #include "ADM_vidMisc.h" #include "ADM_metaToFile.h" +#include "prefs.h" + #define VIDEO _tracks[0] #if 0 @@ -762,13 +764,13 @@ uint8_t mkvHeader::indexClusters(ADM_ebml_file *parser) const char *ss; uint64_t pos; uint8_t res=1; - bool indexOnDisk = true; bool indexAllowOverwrite = false; - if (NULL != getenv("ADM_NOINDEX_MKV") && !strncmp(getenv("ADM_NOINDEX_MKV"), "1", 1)) - indexOnDisk = false; + uint32_t indexingPref = 1; + if (!prefs->get(INDEXING_MKV_INDEXING, &indexingPref)) indexingPref = 1; + - if (indexOnDisk) + if (indexingPref > 0) { if (NULL != getenv("ADM_MKV_INDEX_ALLOW_OVERWRITE") && !strncmp(getenv("ADM_MKV_INDEX_ALLOW_OVERWRITE"), "1", 1)) indexAllowOverwrite = true; @@ -853,7 +855,7 @@ uint8_t mkvHeader::indexClusters(ADM_ebml_file *parser) _work = NULL; //ADM_info("[MKV] Found %u clusters\n",(int)_clusters.size()); - if (indexOnDisk) + if (indexingPref==2) { if ((res == ADM_OK) && (!!VIDEO.index.size())) { From bb43ea4c3b00424dfba0825a4c5bec49d80bf18e Mon Sep 17 00:00:00 2001 From: adam Date: Mon, 23 Sep 2024 23:17:27 +0200 Subject: [PATCH 4/5] [Mp4] use indexing to file preference --- avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp b/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp index 89ab8b169..f7c11544f 100644 --- a/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp +++ b/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp @@ -73,6 +73,7 @@ version 2 media descriptor : #include "ADM_mp3info.h" #include "ADM_dcainfo.h" #include "ADM_audioXiphUtils.h" +#include "prefs.h" #if 1 #define aprintf(...) {} @@ -382,13 +383,12 @@ uint8_t MP4Header::open(const char *name) _idxName = name; _idxName += ".idxb"; - bool indexOnDisk = true; bool indexAllowOverwrite = false; - if (NULL != getenv("ADM_NOINDEX_MP4") && !strncmp(getenv("ADM_NOINDEX_MP4"), "1", 1)) - indexOnDisk = false; - - if (indexOnDisk) + uint32_t indexingPref = 1; + if (!prefs->get(INDEXING_MP4_INDEXING, &indexingPref)) indexingPref = 1; + + if (indexingPref>0) { if (NULL != getenv("ADM_MP4_INDEX_ALLOW_OVERWRITE") && !strncmp(getenv("ADM_MP4_INDEX_ALLOW_OVERWRITE"), "1", 1)) indexAllowOverwrite = true; @@ -524,7 +524,7 @@ uint8_t MP4Header::open(const char *name) if(extractSPSInfo_mp4Header(VDEO.extraData,VDEO.extraDataSize,&info)) { bool indexLoadedFromDisk = false; - if (indexOnDisk) + if (indexingPref>0) { if (loadIndex(_idxName, fileSize)) { @@ -648,7 +648,7 @@ uint8_t MP4Header::open(const char *name) ADM_info("Field encoded H.264 stream detected, # fields: %u\n",fields); else ADM_info("Probably a frame encoded H.264 stream.\n"); - if (indexOnDisk && !cancelled) + if ((indexingPref==2) && !cancelled) { saveIndex(_idxName, fileSize, indexAllowOverwrite); } @@ -660,7 +660,7 @@ uint8_t MP4Header::open(const char *name) if(extractSPSInfoH265(VDEO.extraData,VDEO.extraDataSize,&info)) { bool indexLoadedFromDisk = false; - if (indexOnDisk) + if (indexingPref>0) { if (loadIndex(_idxName, fileSize)) { @@ -732,7 +732,7 @@ uint8_t MP4Header::open(const char *name) work=NULL; delete [] bfer; bfer=NULL; - if (indexOnDisk && !cancelled) + if ((indexingPref==2) && !cancelled) { saveIndex(_idxName, fileSize, indexAllowOverwrite); } From b3ef6327804fb595e5c30ce8edbae9bf3ab290dd Mon Sep 17 00:00:00 2001 From: adam Date: Sat, 28 Sep 2024 13:25:55 +0200 Subject: [PATCH 5/5] [demuxers] add ADM_FORCE_INDEX_TO_FILE envvar option this could be useful in case of scripted batched index creation --- avidemux_core/ADM_coreDemuxerMpeg/src/ADM_indexFile.cpp | 2 ++ avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp | 2 ++ avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp | 2 ++ avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp | 2 ++ avidemux_plugins/ADM_demuxers/MpegPS/ADM_psIndex.cpp | 2 ++ avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp | 2 ++ avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp | 2 ++ avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp | 2 ++ avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp | 2 ++ avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp | 2 ++ 10 files changed, 20 insertions(+) diff --git a/avidemux_core/ADM_coreDemuxerMpeg/src/ADM_indexFile.cpp b/avidemux_core/ADM_coreDemuxerMpeg/src/ADM_indexFile.cpp index 120f17861..75a48565d 100644 --- a/avidemux_core/ADM_coreDemuxerMpeg/src/ADM_indexFile.cpp +++ b/avidemux_core/ADM_coreDemuxerMpeg/src/ADM_indexFile.cpp @@ -123,6 +123,8 @@ bool indexFile::open(const char *name) { uint32_t indexingPref = 2; if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; + if (NULL != getenv("ADM_FORCE_INDEX_TO_FILE") && !strncmp(getenv("ADM_FORCE_INDEX_TO_FILE"), "1", 1)) + indexingPref = 2; if (indexingPref==0) { diff --git a/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp b/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp index f749f1f62..782980e15 100644 --- a/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp +++ b/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp @@ -768,6 +768,8 @@ uint8_t mkvHeader::indexClusters(ADM_ebml_file *parser) uint32_t indexingPref = 1; if (!prefs->get(INDEXING_MKV_INDEXING, &indexingPref)) indexingPref = 1; + if (NULL != getenv("ADM_FORCE_INDEX_TO_FILE") && !strncmp(getenv("ADM_FORCE_INDEX_TO_FILE"), "1", 1)) + indexingPref = 2; if (indexingPref > 0) diff --git a/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp b/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp index f7c11544f..5fec4623b 100644 --- a/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp +++ b/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp @@ -387,6 +387,8 @@ uint8_t MP4Header::open(const char *name) uint32_t indexingPref = 1; if (!prefs->get(INDEXING_MP4_INDEXING, &indexingPref)) indexingPref = 1; + if (NULL != getenv("ADM_FORCE_INDEX_TO_FILE") && !strncmp(getenv("ADM_FORCE_INDEX_TO_FILE"), "1", 1)) + indexingPref = 2; if (indexingPref>0) { diff --git a/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp b/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp index 7e80029da..631bb4885 100644 --- a/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp @@ -39,6 +39,8 @@ uint8_t psHeader::open(const char *name) uint8_t r=1; uint32_t indexingPref = 2; if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; + if (NULL != getenv("ADM_FORCE_INDEX_TO_FILE") && !strncmp(getenv("ADM_FORCE_INDEX_TO_FILE"), "1", 1)) + indexingPref = 2; sprintf(idxName,"%s.idx2",name); ListOfIndexFiles.push_back(idxName); diff --git a/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psIndex.cpp b/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psIndex.cpp index 31ad63167..51331f56e 100644 --- a/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psIndex.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegPS/ADM_psIndex.cpp @@ -200,6 +200,8 @@ uint8_t PsIndexer::run(const char *file) uint32_t indexingPref = 2; if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; + if (NULL != getenv("ADM_FORCE_INDEX_TO_FILE") && !strncmp(getenv("ADM_FORCE_INDEX_TO_FILE"), "1", 1)) + indexingPref = 2; if (indexingPref == 2) { diff --git a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp index 7178c7955..d1d3fa632 100644 --- a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp @@ -39,6 +39,8 @@ uint8_t tsHeader::open(const char *name) uint8_t r=1; uint32_t indexingPref = 2; if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; + if (NULL != getenv("ADM_FORCE_INDEX_TO_FILE") && !strncmp(getenv("ADM_FORCE_INDEX_TO_FILE"), "1", 1)) + indexingPref = 2; sprintf(idxName,"%s.idx2",name); ListOfIndexFiles.push_back(idxName); diff --git a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp index b01349fb1..b9210a2d1 100644 --- a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp @@ -246,6 +246,8 @@ uint8_t TsIndexerH264::run(const char *file, ADM_TS_TRACK *videoTrac) uint32_t indexingPref = 2; if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; + if (NULL != getenv("ADM_FORCE_INDEX_TO_FILE") && !strncmp(getenv("ADM_FORCE_INDEX_TO_FILE"), "1", 1)) + indexingPref = 2; if (indexingPref == 2) { diff --git a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp index 804c81faf..c8f794c89 100644 --- a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp @@ -317,6 +317,8 @@ uint8_t TsIndexerH265::run(const char *file,ADM_TS_TRACK *videoTrac) uint32_t indexingPref = 2; if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; + if (NULL != getenv("ADM_FORCE_INDEX_TO_FILE") && !strncmp(getenv("ADM_FORCE_INDEX_TO_FILE"), "1", 1)) + indexingPref = 2; if (indexingPref == 2) { diff --git a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp index f5f168098..56981e026 100644 --- a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp @@ -75,6 +75,8 @@ uint8_t result=1; uint32_t indexingPref = 2; if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; + if (NULL != getenv("ADM_FORCE_INDEX_TO_FILE") && !strncmp(getenv("ADM_FORCE_INDEX_TO_FILE"), "1", 1)) + indexingPref = 2; if (indexingPref == 2) { diff --git a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp index 36ba2bb10..fe9572a5e 100644 --- a/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp +++ b/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp @@ -56,6 +56,8 @@ dmxPacketInfo info; uint32_t indexingPref = 2; if (!prefs->get(INDEXING_TS_PS_INDEXING, &indexingPref)) indexingPref = 2; + if (NULL != getenv("ADM_FORCE_INDEX_TO_FILE") && !strncmp(getenv("ADM_FORCE_INDEX_TO_FILE"), "1", 1)) + indexingPref = 2; if (indexingPref == 2) {