Re: [FFmpeg-devel] [PATCH 01/35] fftools/ffmpeg_mux: add private muxer context

2022-07-13 Thread Anton Khirnov
Quoting Michael Niedermayer (2022-07-14 00:12:59)
> On Wed, Jul 13, 2022 at 12:58:54PM +0200, Anton Khirnov wrote:
> > Quoting Michael Niedermayer (2022-07-08 18:58:11)
> > > On Fri, Jun 17, 2022 at 12:27:18PM +0200, Anton Khirnov wrote:
> > > > The current version of this set can also be found in my tree
> > > > git://git.khirnov.net/libav
> > > > branch ffmpeg_mt/mux
> > > 
> > > There are really many files changing, its hard to say for sure that all 
> > > are the
> > > same issue, but basically it all seems more or less frames in some streams
> > > including cases where there are hugely more or 0
> > > 
> > > Here are some examples:
> > > 
> > > 
> > > ffmpeg -i matrixbench_mpeg2.mpg -vcodec rawvideo -pix_fmt rgb555 
> > > -allow_raw_vfw 1 -vframes 1 -bitexact file-rgb555.mkv
> > > 
> > > the new file is much bigger (due to the audio track)
> > > 
> > > -rw-r- 1 michael michael 2765813 Jul  8 16:57 file-rgb555.mkv
> > > -rw-r- 1 michael michael  834643 Jul  8 17:02 file-rgb555-ref.mkv
> > 
> > Where can I find this file?
> 
> the 2 file-rgb555.mkv files are the outputs from ffmpeg from the 
> matrixbench_mpeg2
> file and teh command line above. From before and after the change IIRC
> 
> matrixbench_mpeg2.mpg should be here:
> https://samples.ffmpeg.org/benchmark/testsuite1/

The output is ~815kB in the current branch, same as before. So I assume
the problem got fixed by the changes I did for one of the other samples.

Thanks for testing and let me know if you find any other issues.

-- 
Anton Khirnov
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 01/35] fftools/ffmpeg_mux: add private muxer context

2022-07-13 Thread Michael Niedermayer
On Wed, Jul 13, 2022 at 12:58:54PM +0200, Anton Khirnov wrote:
> Quoting Michael Niedermayer (2022-07-08 18:58:11)
> > On Fri, Jun 17, 2022 at 12:27:18PM +0200, Anton Khirnov wrote:
> > > The current version of this set can also be found in my tree
> > > git://git.khirnov.net/libav
> > > branch ffmpeg_mt/mux
> > 
> > There are really many files changing, its hard to say for sure that all are 
> > the
> > same issue, but basically it all seems more or less frames in some streams
> > including cases where there are hugely more or 0
> > 
> > Here are some examples:
> > 
> > 
> > ffmpeg -i matrixbench_mpeg2.mpg -vcodec rawvideo -pix_fmt rgb555 
> > -allow_raw_vfw 1 -vframes 1 -bitexact file-rgb555.mkv
> > 
> > the new file is much bigger (due to the audio track)
> > 
> > -rw-r- 1 michael michael 2765813 Jul  8 16:57 file-rgb555.mkv
> > -rw-r- 1 michael michael  834643 Jul  8 17:02 file-rgb555-ref.mkv
> 
> Where can I find this file?

the 2 file-rgb555.mkv files are the outputs from ffmpeg from the 
matrixbench_mpeg2
file and teh command line above. From before and after the change IIRC

matrixbench_mpeg2.mpg should be here:
https://samples.ffmpeg.org/benchmark/testsuite1/

thx

[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The smallest minority on earth is the individual. Those who deny 
individual rights cannot claim to be defenders of minorities. - Ayn Rand


signature.asc
Description: PGP signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 01/35] fftools/ffmpeg_mux: add private muxer context

2022-07-13 Thread Anton Khirnov
Quoting Michael Niedermayer (2022-07-08 18:58:11)
> On Fri, Jun 17, 2022 at 12:27:18PM +0200, Anton Khirnov wrote:
> > The current version of this set can also be found in my tree
> > git://git.khirnov.net/libav
> > branch ffmpeg_mt/mux
> 
> There are really many files changing, its hard to say for sure that all are 
> the
> same issue, but basically it all seems more or less frames in some streams
> including cases where there are hugely more or 0
> 
> Here are some examples:
> 
> 
> ffmpeg -i matrixbench_mpeg2.mpg -vcodec rawvideo -pix_fmt rgb555 
> -allow_raw_vfw 1 -vframes 1 -bitexact file-rgb555.mkv
> 
> the new file is much bigger (due to the audio track)
> 
> -rw-r- 1 michael michael 2765813 Jul  8 16:57 file-rgb555.mkv
> -rw-r- 1 michael michael  834643 Jul  8 17:02 file-rgb555-ref.mkv

Where can I find this file?

> another one:
> ./ffmpeg -y -i vlcticket/8344/DVR_NVR_IP\ 
> Camera01_20130321162325_20130321162358_576877.mp4 -vframes 1 -aframes 1 
> -bitexact -f framecrc -
> 
> This appears to loose the video stream
> 
>  #channel_layout_name 1: mono
> -0,  0,  0,1,  288, 0x4136bc92
>  1,112,112,  320,  640, 0x2cd73b36
> 
> sample in https://samples.ffmpeg.org/camera-dvr/hikvision/

The sync queue got confused by stale frame durations, which are now
overwritten in the updated version of 22/35.

But do note that there may be valid situations where a stream will
"disappear" when you specify -frames constraints on multiple streams,
because -frames is supposed to cut the whole file once the constraint is
reached, not just the stream it applies to. If you want a specific
number of frames in each stream, you should rather use the trim/atrim
filters.

See also my discussion with Andreas under 24/35 in this thread.

> This one fails a bit worse than before (ffmpeg succeeds before besides 
> producing errors as well)
> my notes say this worked better only before 
> 04aa09c4bcf2d5a634a35da3a3ae3fc1abe30ef8
> the file is a little big and i havnt found it anywhere online, i will try to
> send it privately to you
>  
> ffmpeg -i 2014-10-17\ 11.31\ i95Dev\ -\ Carlo\ Pazolini\ _\ KWI\ -\ 
> Meeting.g2m -bitexact -max_muxing_queue_size 8000 -vframes 2 file-g2m5.avi
> 
>   Metadata:
> DeviceConformanceTemplate: L2
> WMFSDKNeeded: 0.0.0.
> WMFSDKVersion   : 12.0.7601.17514
> IsVBR   : 1
> WM/ToolVersion  : 6.4.3 Build 1767
> WM/ToolName : GoToMeeting
> BitRateFrom the writer: 97087
> Audio samples   : 34341
> Video samples   : 3740
> recording time  : Fri, 17 Oct 2014 12:28:16 Eastern Daylight Time
>   Duration: 00:57:13.86, start: 0.00, bitrate: 100 kb/s
>   Stream #0:0: Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, mono, fltp, 48 
> kb/s
>   Stream #0:1: Data: none, 2 kb/s
>   Stream #0:2: Video: g2m (G2M5 / 0x354D3247), rgb24, 1440x900, 49 kb/s, 1k 
> tbr, 1k tbn
> Stream mapping:
>   Stream #0:2 -> #0:0 (g2m (native) -> mpeg4 (native))
>   Stream #0:0 -> #0:1 (wmav2 (native) -> mp3 (libmp3lame))
> Press [q] to stop, [?] for help
> [libmp3lame @ 0x55c17cf03140] Queue input is backward in time
> Output #0, avi, to 'file-g2m5.avi':
>   Metadata:
> DeviceConformanceTemplate: L2
> WMFSDKNeeded: 0.0.0.
> WMFSDKVersion   : 12.0.7601.17514
> IsVBR   : 1
> WM/ToolVersion  : 6.4.3 Build 1767
> WM/ToolName : GoToMeeting
> BitRateFrom the writer: 97087
> Audio samples   : 34341
> Video samples   : 3740
> recording time  : Fri, 17 Oct 2014 12:28:16 Eastern Daylight Time
>   Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p(tv, progressive), 
> 1440x900, q=2-31, 200 kb/s, 1k fps, 1k tbn
> Metadata:
>   encoder : Lavc mpeg4
> Side data:
>   cpb: bitrate max/min/avg: 0/0/20 buffer size: 0 vbv_delay: N/A
>   Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, mono, fltp
> Metadata:
>   encoder : Lavc libmp3lame
> [avi @ 0x55c17cf31340] Too large number of skipped frames 194184 > 
> 60kbits/s speed= 140x
> av_interleaved_write_frame(): Invalid argument
> Error muxing a packet for output file #0
> [avi @ 0x55c17cf31340] Too large number of skipped frames 194085 > 6
> frame=2 fps=1.3 q=2.0 Lsize=1855kB time=00:03:14.18 bitrate=  
> 78.3kbits/s speed= 129x
> video:149kB audio:1517kB subtitle:0kB other streams:0kB global headers:0kB 
> muxing overhead: 11.381945%
> Conversion failed!

The new code ends up sending a few more audio packets to the muxer, so
av_interleaved_write_frame() returns an error, which results in a
non-zero exit status.

In the current code, the same error appears during flushing the muxing
queue in av_write_trailer() and is actually returned from
av_write_trailer(), but ffmpeg for some reason does not treat
av_write_trailer() errors the same way. I do not know why that is, seems
like a bug to me.

In any case, conversion is quite broken both before and 

Re: [FFmpeg-devel] [PATCH 01/35] fftools/ffmpeg_mux: add private muxer context

2022-07-08 Thread Michael Niedermayer
On Fri, Jun 17, 2022 at 12:27:18PM +0200, Anton Khirnov wrote:
> The current version of this set can also be found in my tree
> git://git.khirnov.net/libav
> branch ffmpeg_mt/mux

There are really many files changing, its hard to say for sure that all are the
same issue, but basically it all seems more or less frames in some streams
including cases where there are hugely more or 0

Here are some examples:


ffmpeg -i matrixbench_mpeg2.mpg -vcodec rawvideo -pix_fmt rgb555 -allow_raw_vfw 
1 -vframes 1 -bitexact file-rgb555.mkv

the new file is much bigger (due to the audio track)

-rw-r- 1 michael michael 2765813 Jul  8 16:57 file-rgb555.mkv
-rw-r- 1 michael michael  834643 Jul  8 17:02 file-rgb555-ref.mkv


another one:
./ffmpeg -y -i vlcticket/8344/DVR_NVR_IP\ 
Camera01_20130321162325_20130321162358_576877.mp4 -vframes 1 -aframes 1 
-bitexact -f framecrc -

This appears to loose the video stream

 #channel_layout_name 1: mono
-0,  0,  0,1,  288, 0x4136bc92
 1,112,112,  320,  640, 0x2cd73b36

sample in https://samples.ffmpeg.org/camera-dvr/hikvision/
 
 
 
This one fails a bit worse than before (ffmpeg succeeds before besides 
producing errors as well)
my notes say this worked better only before 
04aa09c4bcf2d5a634a35da3a3ae3fc1abe30ef8
the file is a little big and i havnt found it anywhere online, i will try to
send it privately to you
 
ffmpeg -i 2014-10-17\ 11.31\ i95Dev\ -\ Carlo\ Pazolini\ _\ KWI\ -\ Meeting.g2m 
-bitexact -max_muxing_queue_size 8000 -vframes 2 file-g2m5.avi

  Metadata:
DeviceConformanceTemplate: L2
WMFSDKNeeded: 0.0.0.
WMFSDKVersion   : 12.0.7601.17514
IsVBR   : 1
WM/ToolVersion  : 6.4.3 Build 1767
WM/ToolName : GoToMeeting
BitRateFrom the writer: 97087
Audio samples   : 34341
Video samples   : 3740
recording time  : Fri, 17 Oct 2014 12:28:16 Eastern Daylight Time
  Duration: 00:57:13.86, start: 0.00, bitrate: 100 kb/s
  Stream #0:0: Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, mono, fltp, 48 kb/s
  Stream #0:1: Data: none, 2 kb/s
  Stream #0:2: Video: g2m (G2M5 / 0x354D3247), rgb24, 1440x900, 49 kb/s, 1k 
tbr, 1k tbn
Stream mapping:
  Stream #0:2 -> #0:0 (g2m (native) -> mpeg4 (native))
  Stream #0:0 -> #0:1 (wmav2 (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
[libmp3lame @ 0x55c17cf03140] Queue input is backward in time
Output #0, avi, to 'file-g2m5.avi':
  Metadata:
DeviceConformanceTemplate: L2
WMFSDKNeeded: 0.0.0.
WMFSDKVersion   : 12.0.7601.17514
IsVBR   : 1
WM/ToolVersion  : 6.4.3 Build 1767
WM/ToolName : GoToMeeting
BitRateFrom the writer: 97087
Audio samples   : 34341
Video samples   : 3740
recording time  : Fri, 17 Oct 2014 12:28:16 Eastern Daylight Time
  Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p(tv, progressive), 
1440x900, q=2-31, 200 kb/s, 1k fps, 1k tbn
Metadata:
  encoder : Lavc mpeg4
Side data:
  cpb: bitrate max/min/avg: 0/0/20 buffer size: 0 vbv_delay: N/A
  Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, mono, fltp
Metadata:
  encoder : Lavc libmp3lame
[avi @ 0x55c17cf31340] Too large number of skipped frames 194184 > 
60kbits/s speed= 140x
av_interleaved_write_frame(): Invalid argument
Error muxing a packet for output file #0
[avi @ 0x55c17cf31340] Too large number of skipped frames 194085 > 6
frame=2 fps=1.3 q=2.0 Lsize=1855kB time=00:03:14.18 bitrate=  
78.3kbits/s speed= 129x
video:149kB audio:1517kB subtitle:0kB other streams:0kB global headers:0kB 
muxing overhead: 11.381945%
Conversion failed!



./ffmpeg -i tickets/1666/avc-intra-panasonic-AG-HPX301E.mov -vframes 3 
-aframes 2 -bitexact -f framecrc -
duplicate behavior of the a/vframe issue above, one stream disappears

sample in https://samples.ffmpeg.org/ffmpeg-bugs/trac/ticket1666/



[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Any man who breaks a law that conscience tells him is unjust and willingly 
accepts the penalty by staying in jail in order to arouse the conscience of 
the community on the injustice of the law is at that moment expressing the 
very highest respect for law. - Martin Luther King Jr


signature.asc
Description: PGP signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 01/35] fftools/ffmpeg_mux: add private muxer context

2022-06-17 Thread Anton Khirnov
The current version of this set can also be found in my tree
git://git.khirnov.net/libav
branch ffmpeg_mt/mux

-- 
Anton Khirnov
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 01/35] fftools/ffmpeg_mux: add private muxer context

2022-06-16 Thread Anton Khirnov
Move header_written into it, which is not (and should not be) used by
any code outside of ffmpeg_mux.

In the future this context will contain more muxer-private state that
should not be visible to other code.
---
 fftools/ffmpeg.h |  6 --
 fftools/ffmpeg_mux.c | 26 ++
 fftools/ffmpeg_opt.c |  6 ++
 3 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
index 69a368b8d1..c6ffe9fdf6 100644
--- a/fftools/ffmpeg.h
+++ b/fftools/ffmpeg.h
@@ -581,9 +581,12 @@ typedef struct OutputStream {
 int64_t error[4];
 } OutputStream;
 
+typedef struct Muxer Muxer;
+
 typedef struct OutputFile {
 int index;
 
+Muxer*mux;
 const AVOutputFormat *format;
 
 AVFormatContext *ctx;
@@ -594,8 +597,6 @@ typedef struct OutputFile {
 uint64_t limit_filesize; /* filesize limit expressed in bytes */
 
 int shortest;
-
-int header_written;
 } OutputFile;
 
 extern InputStream **input_streams;
@@ -694,6 +695,7 @@ int hw_device_setup_for_filter(FilterGraph *fg);
 
 int hwaccel_decode_init(AVCodecContext *avctx);
 
+int of_muxer_init(OutputFile *of);
 /* open the muxer when all the streams are initialized */
 int of_check_init(OutputFile *of);
 int of_write_trailer(OutputFile *of);
diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c
index a55fd18f8f..e47a55c4e9 100644
--- a/fftools/ffmpeg_mux.c
+++ b/fftools/ffmpeg_mux.c
@@ -32,6 +32,10 @@
 #include "libavformat/avformat.h"
 #include "libavformat/avio.h"
 
+struct Muxer {
+int header_written;
+};
+
 static void close_all_output_streams(OutputStream *ost, OSTFinished 
this_stream, OSTFinished others)
 {
 int i;
@@ -64,7 +68,7 @@ void of_write_packet(OutputFile *of, AVPacket *pkt, 
OutputStream *ost,
 ost->frame_number++;
 }
 
-if (!of->header_written) {
+if (!of->mux->header_written) {
 AVPacket *tmp_pkt;
 /* the muxer is not initialized yet, buffer the packet */
 if (!av_fifo_can_write(ost->muxing_queue)) {
@@ -182,7 +186,7 @@ static int print_sdp(void)
 AVFormatContext **avc;
 
 for (i = 0; i < nb_output_files; i++) {
-if (!output_files[i]->header_written)
+if (!output_files[i]->mux->header_written)
 return 0;
 }
 
@@ -246,7 +250,7 @@ int of_check_init(OutputFile *of)
 return ret;
 }
 //assert_avoptions(of->opts);
-of->header_written = 1;
+of->mux->header_written = 1;
 
 av_dump_format(of->ctx, of->index, of->ctx->url, 1);
 nb_output_dumped++;
@@ -282,7 +286,7 @@ int of_write_trailer(OutputFile *of)
 {
 int ret;
 
-if (!of->header_written) {
+if (!of->mux->header_written) {
 av_log(NULL, AV_LOG_ERROR,
"Nothing was written into output file %d (%s), because "
"at least one of its streams received no packets.\n",
@@ -313,5 +317,19 @@ void of_close(OutputFile **pof)
 avformat_free_context(s);
 av_dict_free(>opts);
 
+av_freep(>mux);
+
 av_freep(pof);
 }
+
+int of_muxer_init(OutputFile *of)
+{
+Muxer *mux = av_mallocz(sizeof(*mux));
+
+if (!mux)
+return AVERROR(ENOMEM);
+
+of->mux  = mux;
+
+return 0;
+}
diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
index 398067da96..ab8d307c3c 100644
--- a/fftools/ffmpeg_opt.c
+++ b/fftools/ffmpeg_opt.c
@@ -2947,6 +2947,12 @@ loop_end:
 exit_program(1);
 }
 
+err = of_muxer_init(of);
+if (err < 0) {
+av_log(NULL, AV_LOG_FATAL, "Error initializing internal muxing 
state\n");
+exit_program(1);
+}
+
 return 0;
 }
 
-- 
2.34.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".