Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer
@ 2022-08-24  8:43 Anton Khirnov
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 02/18] lavf/dv: remove DVMuxContext declaration from dv.h Anton Khirnov
                   ` (17 more replies)
  0 siblings, 18 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

---
 tests/fate/mov.mak         |  3 +++
 tests/ref/fate/mov-dvaudio | 31 +++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+)
 create mode 100644 tests/ref/fate/mov-dvaudio

diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
index 8a7218a215..9e8bb729a6 100644
--- a/tests/fate/mov.mak
+++ b/tests/fate/mov.mak
@@ -17,6 +17,7 @@ FATE_MOV = fate-mov-3elist \
            fate-mov-bbi-elst-starts-b \
            fate-mov-neg-firstpts-discard-frames \
            fate-mov-stream-shorter-than-movie \
+           fate-mov-dvaudio \
 # FIXME: Uncomment these two lines once the test files are uploaded to the fate
 # server.
 #           fate-mov-avif-demux-still-image-1-item \
@@ -104,6 +105,8 @@ fate-mov-neg-firstpts-discard-frames: CMD = framemd5 -flags +bitexact -i $(TARGE
 # Makes sure that no frame is dropped/duplicated with fps filter due to start_time / duration miscalculations.
 fate-mov-stream-shorter-than-movie: CMD = framemd5 -flags +bitexact -i $(TARGET_SAMPLES)/mov/mov_stream_shorter_than_movie.mov -vf fps=fps=24 -an
 
+fate-mov-dvaudio: CMD = framecrc -i $(TARGET_SAMPLES)/mov/qt_dv_pal_test_cut.mov -c copy -map 0:a
+
 fate-mov-aac-2048-priming: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_packets -print_format compact $(TARGET_SAMPLES)/mov/aac-2048-priming.mov
 
 fate-mov-zombie: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_streams -show_packets -show_frames -bitexact -print_format compact $(TARGET_SAMPLES)/mov/white_zombie_scrunch-part.mov
diff --git a/tests/ref/fate/mov-dvaudio b/tests/ref/fate/mov-dvaudio
new file mode 100644
index 0000000000..13e551c722
--- /dev/null
+++ b/tests/ref/fate/mov-dvaudio
@@ -0,0 +1,31 @@
+#tb 0: 1/48000
+#media_type 0: audio
+#codec_id 0: pcm_s16le
+#sample_rate 0: 48000
+#channel_layout_name 0: stereo
+0,       -720,       -720,     1920,     7680, 0xdb43ddfd, S=1,       10
+0,       1200,       1200,     1920,     7680, 0xcd872ca8
+0,       3120,       3120,     1920,     7680, 0xa1800c21
+0,       5040,       5040,     1920,     7680, 0x87fee57a
+0,       6960,       6960,     1920,     7680, 0x2e926842
+0,       8880,       8880,     1920,     7680, 0xaf141f81
+0,      10800,      10800,     1920,     7680, 0xf0bc6ad8
+0,      12720,      12720,     1920,     7680, 0x18139585
+0,      14640,      14640,     1920,     7680, 0xadf3e99e
+0,      16560,      16560,     1920,     7680, 0xb18e02e3
+0,      18480,      18480,     1920,     7680, 0x4d8e9e72
+0,      20400,      20400,     1920,     7680, 0x27f3fd22
+0,      22320,      22320,     1920,     7680, 0xf896b2c0
+0,      24240,      24240,     1920,     7680, 0xf707d734
+0,      26160,      26160,     1920,     7680, 0xc3d4bf6a
+0,      28080,      28080,     1920,     7680, 0xaf4f92f0
+0,      30000,      30000,     1920,     7680, 0xf72ea49d
+0,      31920,      31920,     1920,     7680, 0xbd975338
+0,      33840,      33840,     1920,     7680, 0x50ab26db
+0,      35760,      35760,     1920,     7680, 0x2a70b14f
+0,      37680,      37680,     1920,     7680, 0x32e3ce37
+0,      39600,      39600,     1920,     7680, 0x7f5b54ec
+0,      41520,      41520,     1920,     7680, 0x2cd5478f
+0,      43440,      43440,     1920,     7680, 0x7dda4151
+0,      45360,      45360,     1920,     7680, 0x09b4886d
+0,      47280,      47280,     1920,     7680, 0x4824062e
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 02/18] lavf/dv: remove DVMuxContext declaration from dv.h
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 11:55   ` Andreas Rheinhardt
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 03/18] lavf/dv: always provide avpriv_dv_* symbols Anton Khirnov
                   ` (16 subsequent siblings)
  17 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

DVMuxContext is only used inside dvenc.c, there is no reason for it to
be visible outside of that file.
---
 libavformat/dv.h    | 4 +---
 libavformat/dvenc.c | 4 ++--
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/libavformat/dv.h b/libavformat/dv.h
index 160c6ab873..efced6ccf0 100644
--- a/libavformat/dv.h
+++ b/libavformat/dv.h
@@ -1,5 +1,5 @@
 /*
- * General DV muxer/demuxer
+ * General DV demuxer
  * Copyright (c) 2003 Roman Shaposhnik
  *
  * Many thanks to Dan Dennedy <dan@dennedy.org> for providing wealth
@@ -36,6 +36,4 @@ int avpriv_dv_get_packet(DVDemuxContext*, AVPacket *);
 int avpriv_dv_produce_packet(DVDemuxContext*, AVPacket*, uint8_t*, int, int64_t);
 void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset);
 
-typedef struct DVMuxContext DVMuxContext;
-
 #endif /* AVFORMAT_DV_H */
diff --git a/libavformat/dvenc.c b/libavformat/dvenc.c
index 7ef9692302..429ddcb96c 100644
--- a/libavformat/dvenc.c
+++ b/libavformat/dvenc.c
@@ -43,7 +43,7 @@
 
 #define MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32-bit audio
 
-struct DVMuxContext {
+typedef struct DVMuxContext {
     AVClass          *av_class;
     const AVDVProfile*  sys;           /* current DV profile, e.g.: 525/60, 625/50 */
     int               n_ast;         /* number of stereo audio streams (up to 2) */
@@ -55,7 +55,7 @@ struct DVMuxContext {
     int               has_video;     /* frame under construction has video */
     uint8_t           frame_buf[DV_MAX_FRAME_SIZE]; /* frame under construction */
     AVTimecode        tc;            /* timecode context */
-};
+} DVMuxContext;
 
 static const int dv_aaux_packs_dist[12][9] = {
     { 0xff, 0xff, 0xff, 0x50, 0x51, 0x52, 0x53, 0xff, 0xff },
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 03/18] lavf/dv: always provide avpriv_dv_* symbols
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 02/18] lavf/dv: remove DVMuxContext declaration from dv.h Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 16:25   ` Andreas Rheinhardt
  2022-08-25  9:47   ` Anton Khirnov
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 04/18] lavc/dvdec: drop the only use of DVVideoContext.avctx Anton Khirnov
                   ` (15 subsequent siblings)
  17 siblings, 2 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

They are used from libavdevice.
---
 configure            |  1 +
 libavformat/Makefile |  3 +--
 libavformat/dv.c     | 23 +++++++++++++++++++++++
 3 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index ea50c94002..f4c4ab0484 100755
--- a/configure
+++ b/configure
@@ -3530,6 +3530,7 @@ gdigrab_indev_deps="CreateDIBSection"
 gdigrab_indev_extralibs="-lgdi32"
 gdigrab_indev_select="bmp_decoder"
 iec61883_indev_deps="libiec61883"
+iec61883_indev_select="dv_demuxer"
 jack_indev_deps="libjack"
 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
 kmsgrab_indev_deps="libdrm"
diff --git a/libavformat/Makefile b/libavformat/Makefile
index f67a99f839..684bad0eb4 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -13,6 +13,7 @@ OBJS = allformats.o         \
        demux.o              \
        demux_utils.o        \
        dump.o               \
+       dv.o                 \
        format.o             \
        id3v1.o              \
        id3v2.o              \
@@ -184,7 +185,6 @@ OBJS-$(CONFIG_DSS_DEMUXER)               += dss.o
 OBJS-$(CONFIG_DTSHD_DEMUXER)             += dtshddec.o
 OBJS-$(CONFIG_DTS_DEMUXER)               += dtsdec.o rawdec.o
 OBJS-$(CONFIG_DTS_MUXER)                 += rawenc.o
-OBJS-$(CONFIG_DV_DEMUXER)                += dv.o
 OBJS-$(CONFIG_DV_MUXER)                  += dvenc.o
 OBJS-$(CONFIG_DVBSUB_DEMUXER)            += dvbsub.o rawdec.o
 OBJS-$(CONFIG_DVBTXT_DEMUXER)            += dvbtxt.o rawdec.o
@@ -711,7 +711,6 @@ SHLIBOBJS-$(CONFIG_RTP_MUXER)            += golomb_tab.o jpegtables.o \
 SHLIBOBJS-$(CONFIG_SPDIF_MUXER)          += dca_sample_rate_tab.o
 
 # libavdevice dependencies
-OBJS-$(CONFIG_IEC61883_INDEV)            += dv.o
 
 # Windows resource file
 SHLIBOBJS-$(HAVE_GNU_WINDRES)            += avformatres.o
diff --git a/libavformat/dv.c b/libavformat/dv.c
index 1dadaf6e62..24bacd5c53 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -28,6 +28,9 @@
  * License along with FFmpeg; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
+
+#include "config_components.h"
+
 #include <time.h>
 #include "avformat.h"
 #include "internal.h"
@@ -40,6 +43,8 @@
 #include "dv.h"
 #include "libavutil/avassert.h"
 
+#if CONFIG_DV_DEMUXER
+
 // Must be kept in sync with AVPacket
 struct DVPacket {
     int64_t  pts;
@@ -647,3 +652,21 @@ const AVInputFormat ff_dv_demuxer = {
     .read_seek      = dv_read_seek,
     .extensions     = "dv,dif",
 };
+
+#else // CONFIG_DV_DEMUXER
+DVDemuxContext *avpriv_dv_init_demux(AVFormatContext *s)
+{
+    return NULL;
+}
+
+int avpriv_dv_get_packet(DVDemuxContext *c, AVPacket *pkt)
+{
+    return AVERROR(ENOSYS);
+}
+
+int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
+                             uint8_t *buf, int buf_size, int64_t pos)
+{
+    return AVERROR(ENOSYS);
+}
+#endif // CONFIG_DV_DEMUXER
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 04/18] lavc/dvdec: drop the only use of DVVideoContext.avctx
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 02/18] lavf/dv: remove DVMuxContext declaration from dv.h Anton Khirnov
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 03/18] lavf/dv: always provide avpriv_dv_* symbols Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 12:24   ` Andreas Rheinhardt
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 05/18] lavc/dv: remove ff_dvvideo_init() Anton Khirnov
                   ` (14 subsequent siblings)
  17 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

The function gets the codec context parameter directly.
---
 libavcodec/dvdec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
index f7423580aa..bad8419925 100644
--- a/libavcodec/dvdec.c
+++ b/libavcodec/dvdec.c
@@ -393,7 +393,7 @@ static int dv_decode_video_segment(AVCodecContext *avctx, void *arg)
     LOCAL_ALIGNED_16(int16_t, sblock, [5 * DV_MAX_BPM], [64]);
     LOCAL_ALIGNED_16(uint8_t, mb_bit_buffer, [80     + AV_INPUT_BUFFER_PADDING_SIZE]); /* allow some slack */
     LOCAL_ALIGNED_16(uint8_t, vs_bit_buffer, [80 * 5 + AV_INPUT_BUFFER_PADDING_SIZE]); /* allow some slack */
-    const int log2_blocksize = 3-s->avctx->lowres;
+    const int log2_blocksize = 3 - avctx->lowres;
     int is_field_mode[5];
     int vs_bit_buffer_damaged = 0;
     int mb_bit_buffer_damaged[5] = {0};
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 05/18] lavc/dv: remove ff_dvvideo_init()
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (2 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 04/18] lavc/dvdec: drop the only use of DVVideoContext.avctx Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 12:27   ` Andreas Rheinhardt
  2022-08-25  9:48   ` [FFmpeg-devel] [PATCH 05/18] " Anton Khirnov
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 06/18] lavc/dv: do not pass DVVideoContext to ff_dv_init_dynamic_tables() Anton Khirnov
                   ` (13 subsequent siblings)
  17 siblings, 2 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

The function contains only two assignments, which are simpler to
duplicate into decoder and encoder. Additionally, dvdec does not use
DVVideoContext.avctx at all.
---
 libavcodec/dv.c    | 10 ----------
 libavcodec/dv.h    |  2 --
 libavcodec/dvdec.c |  4 +++-
 libavcodec/dvenc.c |  5 ++++-
 4 files changed, 7 insertions(+), 14 deletions(-)

diff --git a/libavcodec/dv.c b/libavcodec/dv.c
index e2550c4cc1..9e05aa8927 100644
--- a/libavcodec/dv.c
+++ b/libavcodec/dv.c
@@ -184,13 +184,3 @@ int ff_dv_init_dynamic_tables(DVVideoContext *ctx, const AVDVProfile *d)
 
     return 0;
 }
-
-av_cold int ff_dvvideo_init(AVCodecContext *avctx)
-{
-    DVVideoContext *s = avctx->priv_data;
-
-    s->avctx = avctx;
-    avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
-
-    return 0;
-}
diff --git a/libavcodec/dv.h b/libavcodec/dv.h
index 331b8e846a..2b082d0140 100644
--- a/libavcodec/dv.h
+++ b/libavcodec/dv.h
@@ -97,8 +97,6 @@ enum dv_pack_type {
 
 int ff_dv_init_dynamic_tables(DVVideoContext *s, const AVDVProfile *d);
 
-int ff_dvvideo_init(AVCodecContext *avctx);
-
 static inline int dv_work_pool_size(const AVDVProfile *d)
 {
     int size = d->n_difchan * d->difseg_size * 27;
diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
index bad8419925..daee2347e6 100644
--- a/libavcodec/dvdec.c
+++ b/libavcodec/dvdec.c
@@ -240,6 +240,8 @@ static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
     DVVideoContext *s = avctx->priv_data;
     int i;
 
+    avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
+
     ff_idctdsp_init(&s->idsp, avctx);
 
     for (i = 0; i < 64; i++)
@@ -258,7 +260,7 @@ static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
 
     ff_thread_once(&init_static_once, dv_init_static);
 
-    return ff_dvvideo_init(avctx);
+    return 0;
 }
 
 /* decode AC coefficients */
diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
index 5ba4de3213..8027feb9b3 100644
--- a/libavcodec/dvenc.c
+++ b/libavcodec/dvenc.c
@@ -55,6 +55,9 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
     PixblockDSPContext pdsp;
     int ret;
 
+    s->avctx = avctx;
+    avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
+
     s->sys = av_dv_codec_profile2(avctx->width, avctx->height, avctx->pix_fmt, avctx->time_base);
     if (!s->sys) {
         av_log(avctx, AV_LOG_ERROR, "Found no DV profile for %ix%i %s video. "
@@ -91,7 +94,7 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
     }
 #endif
 
-    return ff_dvvideo_init(avctx);
+    return 0;
 }
 
 /* bit budget for AC only in 5 MBs */
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 06/18] lavc/dv: do not pass DVVideoContext to ff_dv_init_dynamic_tables()
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (3 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 05/18] lavc/dv: remove ff_dvvideo_init() Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 12:28   ` Andreas Rheinhardt
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 07/18] lavc/dv: do not pass DVVideoContext to dv_calculate_mb_xy() Anton Khirnov
                   ` (12 subsequent siblings)
  17 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

It only needs work_chunks from it, so pass that directly.

This is done in preparation to splitting DVVideoContext.
---
 libavcodec/dv.c    | 6 +++---
 libavcodec/dv.h    | 2 +-
 libavcodec/dvdec.c | 2 +-
 libavcodec/dvenc.c | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/libavcodec/dv.c b/libavcodec/dv.c
index 9e05aa8927..b5e54de5dd 100644
--- a/libavcodec/dv.c
+++ b/libavcodec/dv.c
@@ -162,7 +162,7 @@ static inline void dv_calc_mb_coordinates(const AVDVProfile *d, int chan,
     }
 }
 
-int ff_dv_init_dynamic_tables(DVVideoContext *ctx, const AVDVProfile *d)
+int ff_dv_init_dynamic_tables(DVwork_chunk *work_chunks, const AVDVProfile *d)
 {
     int j, i, c, s, p;
 
@@ -174,8 +174,8 @@ int ff_dv_init_dynamic_tables(DVVideoContext *ctx, const AVDVProfile *d)
                 p += !(j % 3);
                 if (!(DV_PROFILE_IS_1080i50(d) && c != 0 && s == 11) &&
                     !(DV_PROFILE_IS_720p50(d) && s > 9)) {
-                    dv_calc_mb_coordinates(d, c, s, j, &ctx->work_chunks[i].mb_coordinates[0]);
-                    ctx->work_chunks[i++].buf_offset = p;
+                    dv_calc_mb_coordinates(d, c, s, j, &work_chunks[i].mb_coordinates[0]);
+                    work_chunks[i++].buf_offset = p;
                 }
                 p += 5;
             }
diff --git a/libavcodec/dv.h b/libavcodec/dv.h
index 2b082d0140..286b267de2 100644
--- a/libavcodec/dv.h
+++ b/libavcodec/dv.h
@@ -95,7 +95,7 @@ enum dv_pack_type {
  */
 #define DV_MAX_BPM 8
 
-int ff_dv_init_dynamic_tables(DVVideoContext *s, const AVDVProfile *d);
+int ff_dv_init_dynamic_tables(DVwork_chunk *work_chunks, const AVDVProfile *d);
 
 static inline int dv_work_pool_size(const AVDVProfile *d)
 {
diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
index daee2347e6..1e2c097ed0 100644
--- a/libavcodec/dvdec.c
+++ b/libavcodec/dvdec.c
@@ -626,7 +626,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     }
 
     if (sys != s->sys) {
-        ret = ff_dv_init_dynamic_tables(s, sys);
+        ret = ff_dv_init_dynamic_tables(s->work_chunks, sys);
         if (ret < 0) {
             av_log(avctx, AV_LOG_ERROR, "Error initializing the work tables.\n");
             return ret;
diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
index 8027feb9b3..712ca325de 100644
--- a/libavcodec/dvenc.c
+++ b/libavcodec/dvenc.c
@@ -67,7 +67,7 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
         return AVERROR(EINVAL);
     }
 
-    ret = ff_dv_init_dynamic_tables(s, s->sys);
+    ret = ff_dv_init_dynamic_tables(s->work_chunks, s->sys);
     if (ret < 0) {
         av_log(avctx, AV_LOG_ERROR, "Error initializing work tables.\n");
         return ret;
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 07/18] lavc/dv: do not pass DVVideoContext to dv_calculate_mb_xy()
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (4 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 06/18] lavc/dv: do not pass DVVideoContext to ff_dv_init_dynamic_tables() Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 12:57   ` Andreas Rheinhardt
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 08/18] lavc/dvdec: stop using DVVideoContext Anton Khirnov
                   ` (11 subsequent siblings)
  17 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

Pass the two variables needed from it directly.

This is done in preparation to splitting DVVideoContext.
---
 libavcodec/dv.h    | 5 +++--
 libavcodec/dvdec.c | 2 +-
 libavcodec/dvenc.c | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/libavcodec/dv.h b/libavcodec/dv.h
index 286b267de2..6430688795 100644
--- a/libavcodec/dv.h
+++ b/libavcodec/dv.h
@@ -107,7 +107,8 @@ static inline int dv_work_pool_size(const AVDVProfile *d)
     return size;
 }
 
-static inline void dv_calculate_mb_xy(const DVVideoContext *s,
+static inline void dv_calculate_mb_xy(const AVDVProfile *sys,
+                                      const uint8_t *buf,
                                       const DVwork_chunk *work_chunk,
                                       int m, int *mb_x, int *mb_y)
 {
@@ -116,7 +117,7 @@ static inline void dv_calculate_mb_xy(const DVVideoContext *s,
 
     /* We work with 720p frames split in half.
      * The odd half-frame (chan == 2,3) is displaced :-( */
-    if (s->sys->height == 720 && !(s->buf[1] & 0x0C))
+    if (sys->height == 720 && !(buf[1] & 0x0C))
         /* shifting the Y coordinate down by 72/2 macro blocks */
         *mb_y -= (*mb_y > 17) ? 18 : -72;
 }
diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
index 1e2c097ed0..7f9e4eb0c0 100644
--- a/libavcodec/dvdec.c
+++ b/libavcodec/dvdec.c
@@ -535,7 +535,7 @@ retry:
     block = &sblock[0][0];
     mb    = mb_data;
     for (mb_index = 0; mb_index < 5; mb_index++) {
-        dv_calculate_mb_xy(s, work_chunk, mb_index, &mb_x, &mb_y);
+        dv_calculate_mb_xy(s->sys, s->buf, work_chunk, mb_index, &mb_x, &mb_y);
 
         /* idct_put'ting luminance */
         if ((s->sys->pix_fmt == AV_PIX_FMT_YUV420P)                      ||
diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
index 712ca325de..c12fce9e8b 100644
--- a/libavcodec/dvenc.c
+++ b/libavcodec/dvenc.c
@@ -866,7 +866,7 @@ static int dv_encode_video_segment(AVCodecContext *avctx, void *arg)
     p = dif = &s->buf[work_chunk->buf_offset * 80];
     enc_blk = &enc_blks[0];
     for (mb_index = 0; mb_index < 5; mb_index++) {
-        dv_calculate_mb_xy(s, work_chunk, mb_index, &mb_x, &mb_y);
+        dv_calculate_mb_xy(s->sys, s->buf, work_chunk, mb_index, &mb_x, &mb_y);
 
         qnos[mb_index] = DV_PROFILE_IS_HD(s->sys) ? 1 : 15;
 
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 08/18] lavc/dvdec: stop using DVVideoContext
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (5 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 07/18] lavc/dv: do not pass DVVideoContext to dv_calculate_mb_xy() Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 12:33   ` Andreas Rheinhardt
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 09/18] lavc/dvenc: " Anton Khirnov
                   ` (10 subsequent siblings)
  17 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

The struct is quite small and the decoder and the encoder use different
fields from it, so benefits from reusing it are small.

This allows making the buf field const.
---
 libavcodec/dvdec.c | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)

diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
index 7f9e4eb0c0..444b137488 100644
--- a/libavcodec/dvdec.c
+++ b/libavcodec/dvdec.c
@@ -48,6 +48,7 @@
 #include "dv_profile_internal.h"
 #include "dvdata.h"
 #include "get_bits.h"
+#include "idctdsp.h"
 #include "internal.h"
 #include "put_bits.h"
 #include "simple_idct.h"
@@ -63,6 +64,19 @@ typedef struct BlockInfo {
     int shift_offset;
 } BlockInfo;
 
+typedef struct DVDecContext {
+    const AVDVProfile *sys;
+    const AVFrame     *frame;
+    const uint8_t     *buf;
+
+    uint8_t      dv_zigzag[2][64];
+    DVwork_chunk work_chunks[4 * 12 * 27];
+    uint32_t     idct_factor[2 * 4 * 16 * 64];
+    void       (*idct_put[2])(uint8_t *dest, ptrdiff_t stride, int16_t *block);
+
+    IDCTDSPContext idsp;
+} DVDecContext;
+
 static const int dv_iweight_bits = 14;
 
 static const uint16_t dv_iweight_88[64] = {
@@ -188,7 +202,7 @@ static void dv_init_static(void)
     }
 }
 
-static void dv_init_weight_tables(DVVideoContext *ctx, const AVDVProfile *d)
+static void dv_init_weight_tables(DVDecContext *ctx, const AVDVProfile *d)
 {
     int j, i, c, s;
     uint32_t *factor1 = &ctx->idct_factor[0],
@@ -237,7 +251,7 @@ static void dv_init_weight_tables(DVVideoContext *ctx, const AVDVProfile *d)
 static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
 {
     static AVOnce init_static_once = AV_ONCE_INIT;
-    DVVideoContext *s = avctx->priv_data;
+    DVDecContext *s = avctx->priv_data;
     int i;
 
     avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
@@ -347,7 +361,7 @@ static av_always_inline void put_block_8x4(int16_t *block, uint8_t *av_restrict
     }
 }
 
-static void dv100_idct_put_last_row_field_chroma(const DVVideoContext *s, uint8_t *data,
+static void dv100_idct_put_last_row_field_chroma(const DVDecContext *s, uint8_t *data,
                                                  int stride, int16_t *blocks)
 {
     s->idsp.idct(blocks + 0*64);
@@ -359,7 +373,7 @@ static void dv100_idct_put_last_row_field_chroma(const DVVideoContext *s, uint8_
     put_block_8x4(blocks+1*64 + 4*8, data + 8 + stride, stride<<1);
 }
 
-static void dv100_idct_put_last_row_field_luma(const DVVideoContext *s, uint8_t *data,
+static void dv100_idct_put_last_row_field_luma(const DVDecContext *s, uint8_t *data,
                                                int stride, int16_t *blocks)
 {
     s->idsp.idct(blocks + 0*64);
@@ -380,7 +394,7 @@ static void dv100_idct_put_last_row_field_luma(const DVVideoContext *s, uint8_t
 /* mb_x and mb_y are in units of 8 pixels */
 static int dv_decode_video_segment(AVCodecContext *avctx, void *arg)
 {
-    const DVVideoContext *s = avctx->priv_data;
+    const DVDecContext *s = avctx->priv_data;
     DVwork_chunk *work_chunk = arg;
     int quant, dc, dct_mode, class1, j;
     int mb_index, mb_x, mb_y, last_index;
@@ -614,7 +628,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, AVFrame *frame,
 {
     uint8_t *buf = avpkt->data;
     int buf_size = avpkt->size;
-    DVVideoContext *s = avctx->priv_data;
+    DVDecContext *s = avctx->priv_data;
     const uint8_t *vsc_pack;
     int apt, is16_9, ret;
     const AVDVProfile *sys;
@@ -688,7 +702,7 @@ const FFCodec ff_dvvideo_decoder = {
     .p.long_name    = NULL_IF_CONFIG_SMALL("DV (Digital Video)"),
     .p.type         = AVMEDIA_TYPE_VIDEO,
     .p.id           = AV_CODEC_ID_DVVIDEO,
-    .priv_data_size = sizeof(DVVideoContext),
+    .priv_data_size = sizeof(DVDecContext),
     .init           = dvvideo_decode_init,
     FF_CODEC_DECODE_CB(dvvideo_decode_frame),
     .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_SLICE_THREADS,
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 09/18] lavc/dvenc: stop using DVVideoContext
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (6 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 08/18] lavc/dvdec: stop using DVVideoContext Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 12:36   ` Andreas Rheinhardt
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 10/18] lavc/dv.h: move encoder/decoder-specific code to a new header Anton Khirnov
                   ` (9 subsequent siblings)
  17 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

Move the parts of it used by the encoder into a new DVEncContext and
remove DVVideoContext.
---
 libavcodec/dv.h    | 23 -----------------------
 libavcodec/dvenc.c | 39 ++++++++++++++++++++++++++++-----------
 2 files changed, 28 insertions(+), 34 deletions(-)

diff --git a/libavcodec/dv.h b/libavcodec/dv.h
index 6430688795..859a4e6545 100644
--- a/libavcodec/dv.h
+++ b/libavcodec/dv.h
@@ -27,36 +27,13 @@
 #ifndef AVCODEC_DV_H
 #define AVCODEC_DV_H
 
-#include "avcodec.h"
 #include "dv_profile.h"
-#include "me_cmp.h"
-#include "idctdsp.h"
 
 typedef struct DVwork_chunk {
     uint16_t buf_offset;
     uint16_t mb_coordinates[5];
 } DVwork_chunk;
 
-typedef struct DVVideoContext {
-    AVClass *avclass;
-    const AVDVProfile *sys;
-    const AVFrame   *frame;
-    AVCodecContext  *avctx;
-    uint8_t         *buf;
-
-    uint8_t dv_zigzag[2][64];
-
-    void (*get_pixels)(int16_t *block, const uint8_t *pixels, ptrdiff_t linesize);
-    void (*fdct[2])(int16_t *block);
-    void (*idct_put[2])(uint8_t *dest, ptrdiff_t stride, int16_t *block);
-    me_cmp_func ildct_cmp;
-    DVwork_chunk work_chunks[4 * 12 * 27];
-    uint32_t idct_factor[2 * 4 * 16 * 64];
-    IDCTDSPContext idsp;
-
-    int quant_deadzone;
-} DVVideoContext;
-
 enum dv_section_type {
     dv_sect_header  = 0x1f,
     dv_sect_subcode = 0x3f,
diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
index c12fce9e8b..19291724e0 100644
--- a/libavcodec/dvenc.c
+++ b/libavcodec/dvenc.c
@@ -47,9 +47,26 @@
 #include "pixblockdsp.h"
 #include "put_bits.h"
 
+typedef struct DVEncContext {
+    AVClass           *class;
+    const AVDVProfile *sys;
+    const AVFrame     *frame;
+    AVCodecContext    *avctx;
+    uint8_t           *buf;
+
+    void (*get_pixels)(int16_t *block, const uint8_t *pixels, ptrdiff_t linesize);
+    void (*fdct[2])(int16_t *block);
+
+    me_cmp_func  ildct_cmp;
+    DVwork_chunk work_chunks[4 * 12 * 27];
+
+    int quant_deadzone;
+} DVEncContext;
+
+
 static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
 {
-    DVVideoContext *s = avctx->priv_data;
+    DVEncContext *s = avctx->priv_data;
     FDCTDSPContext fdsp;
     MECmpContext mecc;
     PixblockDSPContext pdsp;
@@ -220,7 +237,7 @@ static av_always_inline PutBitContext *dv_encode_ac(EncBlockInfo *bi,
     return pb;
 }
 
-static av_always_inline int dv_guess_dct_mode(DVVideoContext *s, const uint8_t *data,
+static av_always_inline int dv_guess_dct_mode(DVEncContext *s, const uint8_t *data,
                                               ptrdiff_t linesize)
 {
     if (s->avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) {
@@ -368,7 +385,7 @@ static const int dv_weight_720[2][64] = {
       2661, 2583, 2509, 2394, 2509, 2260, 2260, 2131, }
 };
 
-static av_always_inline int dv_set_class_number_sd(DVVideoContext *s,
+static av_always_inline int dv_set_class_number_sd(DVEncContext *s,
                                                    int16_t *blk, EncBlockInfo *bi,
                                                    const uint8_t *zigzag_scan,
                                                    const int *weight, int bias)
@@ -452,7 +469,7 @@ static av_always_inline int dv_set_class_number_sd(DVVideoContext *s,
 
 /* this function just copies the DCT coefficients and performs
    the initial (non-)quantization. */
-static inline void dv_set_class_number_hd(DVVideoContext *s,
+static inline void dv_set_class_number_hd(DVEncContext *s,
                                           int16_t *blk, EncBlockInfo *bi,
                                           const uint8_t *zigzag_scan,
                                           const int *weight, int bias)
@@ -510,7 +527,7 @@ static inline void dv_set_class_number_hd(DVVideoContext *s,
 }
 
 static av_always_inline int dv_init_enc_block(EncBlockInfo* bi, const uint8_t *data, int linesize,
-                                              DVVideoContext *s, int chroma)
+                                              DVEncContext *s, int chroma)
 {
     LOCAL_ALIGNED_16(int16_t, blk, [64]);
 
@@ -847,7 +864,7 @@ static inline void dv_revise_cnos(uint8_t *dif, EncBlockInfo *blk, const AVDVPro
 
 static int dv_encode_video_segment(AVCodecContext *avctx, void *arg)
 {
-    DVVideoContext *s = avctx->priv_data;
+    DVEncContext *s = avctx->priv_data;
     DVwork_chunk *work_chunk = arg;
     int mb_index, i, j;
     int mb_x, mb_y, c_offset;
@@ -995,7 +1012,7 @@ static int dv_encode_video_segment(AVCodecContext *avctx, void *arg)
     return 0;
 }
 
-static inline int dv_write_pack(enum dv_pack_type pack_id, DVVideoContext *c,
+static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
                                 uint8_t *buf)
 {
     /*
@@ -1115,7 +1132,7 @@ static inline int dv_write_ssyb_id(uint8_t syb_num, uint8_t fr, uint8_t *buf)
     return 3;
 }
 
-static void dv_format_frame(DVVideoContext *c, uint8_t *buf)
+static void dv_format_frame(DVEncContext *c, uint8_t *buf)
 {
     int chan, i, j, k;
     /* We work with 720p frames split in half. The odd half-frame is chan 2,3 */
@@ -1170,7 +1187,7 @@ static void dv_format_frame(DVVideoContext *c, uint8_t *buf)
 static int dvvideo_encode_frame(AVCodecContext *c, AVPacket *pkt,
                                 const AVFrame *frame, int *got_packet)
 {
-    DVVideoContext *s = c->priv_data;
+    DVEncContext *s = c->priv_data;
     int ret;
 
     if ((ret = ff_get_encode_buffer(c, pkt, s->sys->frame_size, 0)) < 0)
@@ -1195,7 +1212,7 @@ static int dvvideo_encode_frame(AVCodecContext *c, AVPacket *pkt,
 }
 
 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
-#define OFFSET(x) offsetof(DVVideoContext, x)
+#define OFFSET(x) offsetof(DVEncContext, x)
 static const AVOption dv_options[] = {
     { "quant_deadzone",        "Quantizer dead zone",    OFFSET(quant_deadzone),       AV_OPT_TYPE_INT, { .i64 = 7 }, 0, 1024, VE },
     { NULL },
@@ -1215,7 +1232,7 @@ const FFCodec ff_dvvideo_encoder = {
     .p.id           = AV_CODEC_ID_DVVIDEO,
     .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS |
                       AV_CODEC_CAP_SLICE_THREADS,
-    .priv_data_size = sizeof(DVVideoContext),
+    .priv_data_size = sizeof(DVEncContext),
     .init           = dvvideo_encode_init,
     FF_CODEC_ENCODE_CB(dvvideo_encode_frame),
     .p.pix_fmts     = (const enum AVPixelFormat[]) {
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 10/18] lavc/dv.h: move encoder/decoder-specific code to a new header
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (7 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 09/18] lavc/dvenc: " Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 12:52   ` Andreas Rheinhardt
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 11/18] lavc/dv: rename constants to follow our naming conventions Anton Khirnov
                   ` (8 subsequent siblings)
  17 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

dv.h is also used by libavformat, so avoid exposing encoder/decoder code
to it.
---
 libavcodec/dv.c          |  8 ++++--
 libavcodec/dv.h          | 34 ----------------------
 libavcodec/dv_internal.h | 62 ++++++++++++++++++++++++++++++++++++++++
 libavcodec/dvdec.c       |  1 +
 libavcodec/dvenc.c       |  1 +
 5 files changed, 70 insertions(+), 36 deletions(-)
 create mode 100644 libavcodec/dv_internal.h

diff --git a/libavcodec/dv.c b/libavcodec/dv.c
index b5e54de5dd..eb49978ad8 100644
--- a/libavcodec/dv.c
+++ b/libavcodec/dv.c
@@ -38,8 +38,12 @@
  * DV codec.
  */
 
-#include "avcodec.h"
-#include "dv.h"
+#include <stdint.h>
+
+#include "libavutil/pixfmt.h"
+
+#include "dv_internal.h"
+#include "dv_profile.h"
 
 static inline void dv_calc_mb_coordinates(const AVDVProfile *d, int chan,
                                           int seq, int slot, uint16_t *tbl)
diff --git a/libavcodec/dv.h b/libavcodec/dv.h
index 859a4e6545..535f01cf0b 100644
--- a/libavcodec/dv.h
+++ b/libavcodec/dv.h
@@ -27,13 +27,6 @@
 #ifndef AVCODEC_DV_H
 #define AVCODEC_DV_H
 
-#include "dv_profile.h"
-
-typedef struct DVwork_chunk {
-    uint16_t buf_offset;
-    uint16_t mb_coordinates[5];
-} DVwork_chunk;
-
 enum dv_section_type {
     dv_sect_header  = 0x1f,
     dv_sect_subcode = 0x3f,
@@ -72,31 +65,4 @@ enum dv_pack_type {
  */
 #define DV_MAX_BPM 8
 
-int ff_dv_init_dynamic_tables(DVwork_chunk *work_chunks, const AVDVProfile *d);
-
-static inline int dv_work_pool_size(const AVDVProfile *d)
-{
-    int size = d->n_difchan * d->difseg_size * 27;
-    if (DV_PROFILE_IS_1080i50(d))
-        size -= 3 * 27;
-    if (DV_PROFILE_IS_720p50(d))
-        size -= 4 * 27;
-    return size;
-}
-
-static inline void dv_calculate_mb_xy(const AVDVProfile *sys,
-                                      const uint8_t *buf,
-                                      const DVwork_chunk *work_chunk,
-                                      int m, int *mb_x, int *mb_y)
-{
-    *mb_x = work_chunk->mb_coordinates[m] & 0xff;
-    *mb_y = work_chunk->mb_coordinates[m] >> 8;
-
-    /* We work with 720p frames split in half.
-     * The odd half-frame (chan == 2,3) is displaced :-( */
-    if (sys->height == 720 && !(buf[1] & 0x0C))
-        /* shifting the Y coordinate down by 72/2 macro blocks */
-        *mb_y -= (*mb_y > 17) ? 18 : -72;
-}
-
 #endif /* AVCODEC_DV_H */
diff --git a/libavcodec/dv_internal.h b/libavcodec/dv_internal.h
new file mode 100644
index 0000000000..4b4151c88d
--- /dev/null
+++ b/libavcodec/dv_internal.h
@@ -0,0 +1,62 @@
+/*
+ * DV encoder/decoder shared code
+ * Copyright (c) 2002 Fabrice Bellard
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_DV_INTERNAL_H
+#define AVCODEC_DV_INTERNAL_H
+
+#include <stdint.h>
+
+#include "dv.h"
+#include "dv_profile.h"
+
+typedef struct DVwork_chunk {
+    uint16_t buf_offset;
+    uint16_t mb_coordinates[5];
+} DVwork_chunk;
+
+int ff_dv_init_dynamic_tables(DVwork_chunk *work_chunks, const AVDVProfile *d);
+
+static inline int dv_work_pool_size(const AVDVProfile *d)
+{
+    int size = d->n_difchan * d->difseg_size * 27;
+    if (DV_PROFILE_IS_1080i50(d))
+        size -= 3 * 27;
+    if (DV_PROFILE_IS_720p50(d))
+        size -= 4 * 27;
+    return size;
+}
+
+static inline void dv_calculate_mb_xy(const AVDVProfile *sys,
+                                      const uint8_t *buf,
+                                      const DVwork_chunk *work_chunk,
+                                      int m, int *mb_x, int *mb_y)
+{
+    *mb_x = work_chunk->mb_coordinates[m] & 0xff;
+    *mb_y = work_chunk->mb_coordinates[m] >> 8;
+
+    /* We work with 720p frames split in half.
+     * The odd half-frame (chan == 2,3) is displaced :-( */
+    if (sys->height == 720 && !(buf[1] & 0x0C))
+        /* shifting the Y coordinate down by 72/2 macro blocks */
+        *mb_y -= (*mb_y > 17) ? 18 : -72;
+}
+
+#endif // AVCODEC_DV_INTERNAL_H
diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
index 444b137488..297bf7f2fb 100644
--- a/libavcodec/dvdec.c
+++ b/libavcodec/dvdec.c
@@ -45,6 +45,7 @@
 #include "avcodec.h"
 #include "codec_internal.h"
 #include "dv.h"
+#include "dv_internal.h"
 #include "dv_profile_internal.h"
 #include "dvdata.h"
 #include "get_bits.h"
diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
index 19291724e0..1f0374b865 100644
--- a/libavcodec/dvenc.c
+++ b/libavcodec/dvenc.c
@@ -38,6 +38,7 @@
 #include "avcodec.h"
 #include "codec_internal.h"
 #include "dv.h"
+#include "dv_internal.h"
 #include "dv_profile_internal.h"
 #include "dv_tablegen.h"
 #include "encode.h"
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 11/18] lavc/dv: rename constants to follow our naming conventions
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (8 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 10/18] lavc/dv.h: move encoder/decoder-specific code to a new header Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 12:38   ` Andreas Rheinhardt
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 12/18] lavf/dv: make returning the video packet optional Anton Khirnov
                   ` (7 subsequent siblings)
  17 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

CamelCase for enum tags, ALL_CAPS for enum values.
---
 libavcodec/dv.h     | 38 +++++++++++++++++++-------------------
 libavcodec/dvdec.c  |  4 ++--
 libavcodec/dvenc.c  | 32 ++++++++++++++++----------------
 libavformat/dv.c    | 18 +++++++++---------
 libavformat/dvenc.c | 34 +++++++++++++++++-----------------
 5 files changed, 63 insertions(+), 63 deletions(-)

diff --git a/libavcodec/dv.h b/libavcodec/dv.h
index 535f01cf0b..29f97b6089 100644
--- a/libavcodec/dv.h
+++ b/libavcodec/dv.h
@@ -27,27 +27,27 @@
 #ifndef AVCODEC_DV_H
 #define AVCODEC_DV_H
 
-enum dv_section_type {
-    dv_sect_header  = 0x1f,
-    dv_sect_subcode = 0x3f,
-    dv_sect_vaux    = 0x56,
-    dv_sect_audio   = 0x76,
-    dv_sect_video   = 0x96,
+enum DVSectionType {
+    DV_SECT_HEADER  = 0x1f,
+    DV_SECT_SUBCODE = 0x3f,
+    DV_SECT_VAUX    = 0x56,
+    DV_SECT_AUDIO   = 0x76,
+    DV_SECT_VIDEO   = 0x96,
 };
 
-enum dv_pack_type {
-    dv_header525     = 0x3f,  /* see dv_write_pack for important details on */
-    dv_header625     = 0xbf,  /* these two packs */
-    dv_timecode      = 0x13,
-    dv_audio_source  = 0x50,
-    dv_audio_control = 0x51,
-    dv_audio_recdate = 0x52,
-    dv_audio_rectime = 0x53,
-    dv_video_source  = 0x60,
-    dv_video_control = 0x61,
-    dv_video_recdate = 0x62,
-    dv_video_rectime = 0x63,
-    dv_unknown_pack  = 0xff,
+enum DVPackType {
+    DV_HEADER525     = 0x3f,  /* see dv_write_pack for important details on */
+    DV_HEADER625     = 0xbf,  /* these two packs */
+    DV_TIMECODE      = 0x13,
+    DV_AUDIO_SOURCE  = 0x50,
+    DV_AUDIO_CONTROL = 0x51,
+    DV_AUDIO_RECDATE = 0x52,
+    DV_AUDIO_RECTIME = 0x53,
+    DV_VIDEO_SOURCE  = 0x60,
+    DV_VIDEO_CONTROL = 0x61,
+    DV_VIDEO_RECDATE = 0x62,
+    DV_VIDEO_RECTIME = 0x63,
+    DV_UNKNOWN_PACK  = 0xff,
 };
 
 #define DV_PROFILE_IS_HD(p) ((p)->video_stype & 0x10)
diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
index 297bf7f2fb..424aa79f35 100644
--- a/libavcodec/dvdec.c
+++ b/libavcodec/dvdec.c
@@ -662,7 +662,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, AVFrame *frame,
 
     /* Determine the codec's sample_aspect ratio from the packet */
     vsc_pack = buf + 80 * 5 + 48 + 5;
-    if (*vsc_pack == dv_video_control) {
+    if (*vsc_pack == DV_VIDEO_CONTROL) {
         apt    = buf[4] & 0x07;
         is16_9 = (vsc_pack[2] & 0x07) == 0x02 ||
                  (!apt && (vsc_pack[2] & 0x07) == 0x07);
@@ -673,7 +673,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, AVFrame *frame,
         return ret;
 
     /* Determine the codec's field order from the packet */
-    if ( *vsc_pack == dv_video_control ) {
+    if ( *vsc_pack == DV_VIDEO_CONTROL ) {
         if (avctx->height == 720) {
             frame->interlaced_frame = 0;
             frame->top_field_first = 0;
diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
index 1f0374b865..c0ae4c040a 100644
--- a/libavcodec/dvenc.c
+++ b/libavcodec/dvenc.c
@@ -1013,7 +1013,7 @@ static int dv_encode_video_segment(AVCodecContext *avctx, void *arg)
     return 0;
 }
 
-static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
+static inline int dv_write_pack(enum DVPackType pack_id, DVEncContext *c,
                                 uint8_t *buf)
 {
     /*
@@ -1051,8 +1051,8 @@ static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
 
     buf[0] = (uint8_t) pack_id;
     switch (pack_id) {
-    case dv_header525: /* I can't imagine why these two weren't defined as real */
-    case dv_header625: /* packs in SMPTE314M -- they definitely look like ones */
+    case DV_HEADER525: /* I can't imagine why these two weren't defined as real */
+    case DV_HEADER625: /* packs in SMPTE314M -- they definitely look like ones */
         buf[1] =  0xf8       | /* reserved -- always 1 */
                  (apt & 0x07); /* APT: Track application ID */
         buf[2] = (0    << 7) | /* TF1: audio data is 0 - valid; 1 - invalid */
@@ -1065,7 +1065,7 @@ static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
                  (0x0f << 3) | /* reserved -- always 1 */
                  (apt & 0x07); /* AP3: Subcode application ID */
         break;
-    case dv_video_source:
+    case DV_VIDEO_SOURCE:
         buf[1] = 0xff;         /* reserved -- always 1 */
         buf[2] = (1 << 7) |    /* B/W: 0 - b/w, 1 - color */
                  (1 << 6) |    /* following CLF is valid - 0, invalid - 1 */
@@ -1076,7 +1076,7 @@ static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
                  c->sys->video_stype; /* signal type video compression */
         buf[4] = 0xff;         /* VISC: 0xff -- no information */
         break;
-    case dv_video_control:
+    case DV_VIDEO_CONTROL:
         buf[1] = (0 << 6) |    /* Copy generation management (CGMS) 0 -- free */
                  0x3f;         /* reserved -- always 1 */
         buf[2] = 0xc8 |        /* reserved -- always b11001xxx */
@@ -1097,7 +1097,7 @@ static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
     return 5;
 }
 
-static inline int dv_write_dif_id(enum dv_section_type t, uint8_t chan_num,
+static inline int dv_write_dif_id(enum DVSectionType t, uint8_t chan_num,
                                   uint8_t seq_num, uint8_t dif_num,
                                   uint8_t *buf)
 {
@@ -1144,14 +1144,14 @@ static void dv_format_frame(DVEncContext *c, uint8_t *buf)
             memset(buf, 0xff, 80 * 6); /* first 6 DIF blocks are for control data */
 
             /* DV header: 1DIF */
-            buf += dv_write_dif_id(dv_sect_header, chan+chan_offset, i, 0, buf);
-            buf += dv_write_pack((c->sys->dsf ? dv_header625 : dv_header525),
+            buf += dv_write_dif_id(DV_SECT_HEADER, chan+chan_offset, i, 0, buf);
+            buf += dv_write_pack((c->sys->dsf ? DV_HEADER625 : DV_HEADER525),
                                  c, buf);
             buf += 72; /* unused bytes */
 
             /* DV subcode: 2DIFs */
             for (j = 0; j < 2; j++) {
-                buf += dv_write_dif_id(dv_sect_subcode, chan+chan_offset, i, j, buf);
+                buf += dv_write_dif_id(DV_SECT_SUBCODE, chan+chan_offset, i, j, buf);
                 for (k = 0; k < 6; k++)
                     buf += dv_write_ssyb_id(k, (i < c->sys->difseg_size / 2), buf) + 5;
                 buf += 29; /* unused bytes */
@@ -1159,12 +1159,12 @@ static void dv_format_frame(DVEncContext *c, uint8_t *buf)
 
             /* DV VAUX: 3DIFS */
             for (j = 0; j < 3; j++) {
-                buf += dv_write_dif_id(dv_sect_vaux, chan+chan_offset, i, j, buf);
-                buf += dv_write_pack(dv_video_source,  c, buf);
-                buf += dv_write_pack(dv_video_control, c, buf);
+                buf += dv_write_dif_id(DV_SECT_VAUX, chan+chan_offset, i, j, buf);
+                buf += dv_write_pack(DV_VIDEO_SOURCE,  c, buf);
+                buf += dv_write_pack(DV_VIDEO_CONTROL, c, buf);
                 buf += 7 * 5;
-                buf += dv_write_pack(dv_video_source,  c, buf);
-                buf += dv_write_pack(dv_video_control, c, buf);
+                buf += dv_write_pack(DV_VIDEO_SOURCE,  c, buf);
+                buf += dv_write_pack(DV_VIDEO_CONTROL, c, buf);
                 buf += 4 * 5 + 2; /* unused bytes */
             }
 
@@ -1172,10 +1172,10 @@ static void dv_format_frame(DVEncContext *c, uint8_t *buf)
             for (j = 0; j < 135; j++) {
                 if (j % 15 == 0) {
                     memset(buf, 0xff, 80);
-                    buf += dv_write_dif_id(dv_sect_audio, chan+chan_offset, i, j/15, buf);
+                    buf += dv_write_dif_id(DV_SECT_AUDIO, chan+chan_offset, i, j/15, buf);
                     buf += 77; /* audio control & shuffled PCM audio */
                 }
-                buf += dv_write_dif_id(dv_sect_video, chan+chan_offset, i, j, buf);
+                buf += dv_write_dif_id(DV_SECT_VIDEO, chan+chan_offset, i, j, buf);
                 buf += 77; /* 1 video macroblock: 1 bytes control
                             * 4 * 14 bytes Y 8x8 data
                             * 10 bytes Cr 8x8 data
diff --git a/libavformat/dv.c b/libavformat/dv.c
index 24bacd5c53..303cecf9bb 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -87,26 +87,26 @@ static inline uint16_t dv_audio_12to16(uint16_t sample)
     return result;
 }
 
-static const uint8_t *dv_extract_pack(const uint8_t *frame, enum dv_pack_type t)
+static const uint8_t *dv_extract_pack(const uint8_t *frame, enum DVPackType t)
 {
     int offs;
     int c;
 
     for (c = 0; c < 10; c++) {
         switch (t) {
-        case dv_audio_source:
+        case DV_AUDIO_SOURCE:
             if (c&1)    offs = (80 * 6 + 80 * 16 * 0 + 3 + c*12000);
             else        offs = (80 * 6 + 80 * 16 * 3 + 3 + c*12000);
             break;
-        case dv_audio_control:
+        case DV_AUDIO_CONTROL:
             if (c&1)    offs = (80 * 6 + 80 * 16 * 1 + 3 + c*12000);
             else        offs = (80 * 6 + 80 * 16 * 4 + 3 + c*12000);
             break;
-        case dv_video_control:
+        case DV_VIDEO_CONTROL:
             if (c&1)    offs = (80 * 3 + 8      + c*12000);
             else        offs = (80 * 5 + 48 + 5 + c*12000);
             break;
-        case dv_timecode:
+        case DV_TIMECODE:
             offs = (80*1 + 3 + 3);
             break;
         default:
@@ -139,7 +139,7 @@ static int dv_extract_audio(const uint8_t *frame, uint8_t **ppcm,
     const uint8_t *as_pack;
     uint8_t *pcm, ipcm;
 
-    as_pack = dv_extract_pack(frame, dv_audio_source);
+    as_pack = dv_extract_pack(frame, DV_AUDIO_SOURCE);
     if (!as_pack)    /* No audio ? */
         return 0;
 
@@ -239,7 +239,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
     const uint8_t *as_pack;
     int freq, stype, smpls, quant, i, ach;
 
-    as_pack = dv_extract_pack(frame, dv_audio_source);
+    as_pack = dv_extract_pack(frame, DV_AUDIO_SOURCE);
     if (!as_pack || !c->sys) {    /* No audio ? */
         c->ach = 0;
         return 0;
@@ -308,7 +308,7 @@ static int dv_extract_video_info(DVDemuxContext *c, const uint8_t *frame)
     c->vst->avg_frame_rate = av_inv_q(c->vst->time_base);
 
     /* finding out SAR is a little bit messy */
-    vsc_pack = dv_extract_pack(frame, dv_video_control);
+    vsc_pack = dv_extract_pack(frame, DV_VIDEO_CONTROL);
     apt      = frame[4] & 0x07;
     is16_9   = (vsc_pack && ((vsc_pack[2] & 0x07) == 0x02 ||
                              (!apt && (vsc_pack[2] & 0x07) == 0x07)));
@@ -328,7 +328,7 @@ static int dv_extract_timecode(DVDemuxContext* c, const uint8_t* frame, char *tc
     // is only relevant for NTSC systems.
     int prevent_df = c->sys->ltc_divisor == 25 || c->sys->ltc_divisor == 50;
 
-    tc_pack = dv_extract_pack(frame, dv_timecode);
+    tc_pack = dv_extract_pack(frame, DV_TIMECODE);
     if (!tc_pack)
         return 0;
     av_timecode_make_smpte_tc_string2(tc, av_inv_q(c->sys->time_base), AV_RB32(tc_pack + 1), prevent_df, 1);
diff --git a/libavformat/dvenc.c b/libavformat/dvenc.c
index 429ddcb96c..11947aa493 100644
--- a/libavformat/dvenc.c
+++ b/libavformat/dvenc.c
@@ -94,7 +94,7 @@ static int dv_audio_frame_size(const AVDVProfile* sys, int frame, int sample_rat
                                             sizeof(sys->audio_samples_dist[0]))];
 }
 
-static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* buf, int channel, int seq)
+static int dv_write_pack(enum DVPackType pack_id, DVMuxContext *c, uint8_t* buf, int channel, int seq)
 {
     struct tm tc;
     time_t ct;
@@ -103,12 +103,12 @@ static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* bu
 
     buf[0] = (uint8_t)pack_id;
     switch (pack_id) {
-    case dv_timecode:
+    case DV_TIMECODE:
         timecode  = av_timecode_get_smpte_from_framenum(&c->tc, c->frames);
         timecode |= 1<<23 | 1<<15 | 1<<7 | 1<<6; // biphase and binary group flags
         AV_WB32(buf + 1, timecode);
         break;
-    case dv_audio_source:  /* AAUX source pack */
+    case DV_AUDIO_SOURCE:  /* AAUX source pack */
         if (c->ast[channel]->codecpar->sample_rate == 44100) {
             audio_type = 1;
         } else if (c->ast[channel]->codecpar->sample_rate == 32000)
@@ -132,7 +132,7 @@ static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* bu
                   0;        /* quantization: 0 -- 16-bit linear, 1 -- 12-bit nonlinear */
 
         break;
-    case dv_audio_control:
+    case DV_AUDIO_CONTROL:
         buf[1] = (0 << 6) | /* copy protection: 0 -- unrestricted */
                  (1 << 4) | /* input source: 1 -- digital input */
                  (3 << 2) | /* compression: 3 -- no information */
@@ -147,8 +147,8 @@ static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* bu
         buf[4] = (1 << 7) | /* reserved -- always 1 */
                   0x7f;     /* genre category */
         break;
-    case dv_audio_recdate:
-    case dv_video_recdate:  /* VAUX recording date */
+    case DV_AUDIO_RECDATE:
+    case DV_VIDEO_RECDATE:  /* VAUX recording date */
         ct = c->start_time + av_rescale_rnd(c->frames, c->sys->time_base.num,
                                             c->sys->time_base.den, AV_ROUND_DOWN);
         brktimegm(ct, &tc);
@@ -163,8 +163,8 @@ static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* bu
         buf[4] = (((tc.tm_year % 100) / 10) << 4) | /* Tens of year */
                  (tc.tm_year % 10);                 /* Units of year */
         break;
-    case dv_audio_rectime:  /* AAUX recording time */
-    case dv_video_rectime:  /* VAUX recording time */
+    case DV_AUDIO_RECTIME:  /* AAUX recording time */
+    case DV_VIDEO_RECTIME:  /* VAUX recording time */
         ct = c->start_time + av_rescale_rnd(c->frames, c->sys->time_base.num,
                                                        c->sys->time_base.den, AV_ROUND_DOWN);
         brktimegm(ct, &tc);
@@ -219,22 +219,22 @@ static void dv_inject_metadata(DVMuxContext *c, uint8_t* frame)
         /* DV subcode: 2nd and 3d DIFs */
         for (j = 80; j < 80 * 3; j += 80) {
             for (k = 6; k < 6 * 8; k += 8)
-                dv_write_pack(dv_timecode, c, &buf[j+k], 0, seq);
+                dv_write_pack(DV_TIMECODE, c, &buf[j+k], 0, seq);
 
             if (((long)(buf-frame)/(c->sys->frame_size/(c->sys->difseg_size*c->sys->n_difchan))%c->sys->difseg_size) > 5) { /* FIXME: is this really needed ? */
-                dv_write_pack(dv_video_recdate, c, &buf[j+14], 0, seq);
-                dv_write_pack(dv_video_rectime, c, &buf[j+22], 0, seq);
-                dv_write_pack(dv_video_recdate, c, &buf[j+38], 0, seq);
-                dv_write_pack(dv_video_rectime, c, &buf[j+46], 0, seq);
+                dv_write_pack(DV_VIDEO_RECDATE, c, &buf[j+14], 0, seq);
+                dv_write_pack(DV_VIDEO_RECTIME, c, &buf[j+22], 0, seq);
+                dv_write_pack(DV_VIDEO_RECDATE, c, &buf[j+38], 0, seq);
+                dv_write_pack(DV_VIDEO_RECTIME, c, &buf[j+46], 0, seq);
             }
         }
 
         /* DV VAUX: 4th, 5th and 6th 3DIFs */
         for (j = 80*3 + 3; j < 80*6; j += 80) {
-            dv_write_pack(dv_video_recdate, c, &buf[j+5* 2], 0, seq);
-            dv_write_pack(dv_video_rectime, c, &buf[j+5* 3], 0, seq);
-            dv_write_pack(dv_video_recdate, c, &buf[j+5*11], 0, seq);
-            dv_write_pack(dv_video_rectime, c, &buf[j+5*12], 0, seq);
+            dv_write_pack(DV_VIDEO_RECDATE, c, &buf[j+5* 2], 0, seq);
+            dv_write_pack(DV_VIDEO_RECTIME, c, &buf[j+5* 3], 0, seq);
+            dv_write_pack(DV_VIDEO_RECDATE, c, &buf[j+5*11], 0, seq);
+            dv_write_pack(DV_VIDEO_RECTIME, c, &buf[j+5*12], 0, seq);
         }
     }
 }
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 12/18] lavf/dv: make returning the video packet optional
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (9 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 11/18] lavc/dv: rename constants to follow our naming conventions Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 16:03   ` Andreas Rheinhardt
  2022-08-31  2:39   ` Anton Khirnov
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 13/18] lavf/dv: return a meaningful error code from avpriv_dv_produce_packet() Anton Khirnov
                   ` (6 subsequent siblings)
  17 siblings, 2 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

The mov demuxer only returns DV audio, video packets are discarded.

It first reads the data to be parsed into a packet. Then both this
packet and the pointer to its data are passed together to
avpriv_dv_produce_packet(), which parses the data and partially
overwrites the packet. This is confusing and potentially dangerous, so
just pass NULL and avoid pointless packet modification.
---
 libavformat/dv.c  | 19 +++++++++++--------
 libavformat/mov.c |  2 +-
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/libavformat/dv.c b/libavformat/dv.c
index 303cecf9bb..f88fe62349 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -430,14 +430,17 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
         }
     }
 
-    /* Now it's time to return video packet */
-    size = dv_extract_video_info(c, buf);
-    pkt->data         = buf;
-    pkt->pos          = pos;
-    pkt->size         = size;
-    pkt->flags       |= AV_PKT_FLAG_KEY;
-    pkt->stream_index = c->vst->index;
-    pkt->pts          = c->frames;
+    /* return the video packet, if the caller wants it */
+    if (pkt) {
+        size = dv_extract_video_info(c, buf);
+
+        pkt->data         = buf;
+        pkt->pos          = pos;
+        pkt->size         = size;
+        pkt->flags       |= AV_PKT_FLAG_KEY;
+        pkt->stream_index = c->vst->index;
+        pkt->pts          = c->frames;
+    }
 
     c->frames++;
 
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 1d8c5b2904..a2b429e52f 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -8768,7 +8768,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
         }
 #if CONFIG_DV_DEMUXER
         if (mov->dv_demux && sc->dv_audio_container) {
-            ret = avpriv_dv_produce_packet(mov->dv_demux, pkt, pkt->data, pkt->size, pkt->pos);
+            ret = avpriv_dv_produce_packet(mov->dv_demux, NULL, pkt->data, pkt->size, pkt->pos);
             av_packet_unref(pkt);
             if (ret < 0)
                 return ret;
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 13/18] lavf/dv: return a meaningful error code from avpriv_dv_produce_packet()
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (10 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 12/18] lavf/dv: make returning the video packet optional Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 13:07   ` Andreas Rheinhardt
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 14/18] lavf/dv: forward errors from avformat_new_stream() Anton Khirnov
                   ` (5 subsequent siblings)
  17 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

---
 libavdevice/iec61883.c | 2 +-
 libavformat/dv.c       | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavdevice/iec61883.c b/libavdevice/iec61883.c
index 7223ba2e64..a4b4ce2ef8 100644
--- a/libavdevice/iec61883.c
+++ b/libavdevice/iec61883.c
@@ -209,7 +209,7 @@ static int iec61883_parse_queue_dv(struct iec61883_data *dv, AVPacket *pkt)
     dv->packets--;
 
     if (size < 0)
-        return -1;
+        return size;
 
     if (av_packet_from_data(pkt, pkt->data, pkt->size) < 0) {
         av_freep(&pkt->data);
diff --git a/libavformat/dv.c b/libavformat/dv.c
index f88fe62349..c888111789 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -404,7 +404,7 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
     if (buf_size < DV_PROFILE_BYTES ||
         !(c->sys = av_dv_frame_profile(c->sys, buf, buf_size)) ||
         buf_size < c->sys->frame_size) {
-        return -1;   /* Broken frame, or not enough data */
+        return AVERROR_INVALIDDATA;
     }
 
     /* Queueing audio packet */
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 14/18] lavf/dv: forward errors from avformat_new_stream()
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (11 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 13/18] lavf/dv: return a meaningful error code from avpriv_dv_produce_packet() Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 15/18] lavf/dv: set non-changing AVStream fields only once Anton Khirnov
                   ` (4 subsequent siblings)
  17 siblings, 0 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

---
 libavformat/dv.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/libavformat/dv.c b/libavformat/dv.c
index c888111789..24d6897da5 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -268,11 +268,13 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
         ach = 2;
 
     /* Dynamic handling of the audio streams in DV */
+    c->ach = 0;
     for (i = 0; i < ach; i++) {
         if (!c->ast[i]) {
             c->ast[i] = avformat_new_stream(c->fctx, NULL);
             if (!c->ast[i])
-                break;
+                return AVERROR(ENOMEM);
+
             avpriv_set_pts_info(c->ast[i], 64, c->sys->time_base.num, c->sys->time_base.den);
             c->ast[i]->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
             c->ast[i]->codecpar->codec_id   = AV_CODEC_ID_PCM_S16LE;
@@ -290,7 +292,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
         c->ast[i]->codecpar->bit_rate       = 2 * dv_audio_frequency[freq] * 16;
         c->ast[i]->start_time            = 0;
     }
-    c->ach = i;
+    c->ach = ach;
 
     return (c->sys->audio_min_samples[freq] + smpls) * 4; /* 2ch, 2bytes */
 }
@@ -410,6 +412,9 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
     /* Queueing audio packet */
     /* FIXME: in case of no audio/bad audio we have to do something */
     size = dv_extract_audio_info(c, buf);
+    if (size < 0)
+        return size;
+
     for (i = 0; i < c->ach; i++) {
         c->audio_pkt[i].pos  = pos;
         c->audio_pkt[i].size = size;
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 15/18] lavf/dv: set non-changing AVStream fields only once
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (12 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 14/18] lavf/dv: forward errors from avformat_new_stream() Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 13:13   ` Andreas Rheinhardt
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 16/18] lavf/dv: set audio bitrate only at stream creation Anton Khirnov
                   ` (3 subsequent siblings)
  17 siblings, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

---
 libavformat/dv.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavformat/dv.c b/libavformat/dv.c
index 24d6897da5..f65c2d596f 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -278,6 +278,8 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
             avpriv_set_pts_info(c->ast[i], 64, c->sys->time_base.num, c->sys->time_base.den);
             c->ast[i]->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
             c->ast[i]->codecpar->codec_id   = AV_CODEC_ID_PCM_S16LE;
+            c->ast[i]->codecpar->ch_layout  = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
+            c->ast[i]->start_time           = 0;
 
             c->audio_pkt[i].size         = 0;
             c->audio_pkt[i].data         = c->audio_buf[i];
@@ -288,9 +290,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
             c->audio_pkt[i].pos          = -1;
         }
         c->ast[i]->codecpar->sample_rate    = dv_audio_frequency[freq];
-        c->ast[i]->codecpar->ch_layout      = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
         c->ast[i]->codecpar->bit_rate       = 2 * dv_audio_frequency[freq] * 16;
-        c->ast[i]->start_time            = 0;
     }
     c->ach = ach;
 
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 16/18] lavf/dv: set audio bitrate only at stream creation
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (13 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 15/18] lavf/dv: set non-changing AVStream fields only once Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 13:13   ` Andreas Rheinhardt
                     ` (2 more replies)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 17/18] lavf/dv: do not update AVCodecParameters.sample_rate while demuxing Anton Khirnov
                   ` (2 subsequent siblings)
  17 siblings, 3 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

Demuxers are not supposed to update AVCodecParameters after the stream
was seen by the caller. This value is not important enough to support
dynamic updates for.
---
 libavformat/dv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavformat/dv.c b/libavformat/dv.c
index f65c2d596f..9c8b0a262c 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -280,6 +280,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
             c->ast[i]->codecpar->codec_id   = AV_CODEC_ID_PCM_S16LE;
             c->ast[i]->codecpar->ch_layout  = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
             c->ast[i]->start_time           = 0;
+            c->ast[i]->codecpar->bit_rate   = 2 * dv_audio_frequency[freq] * 16;
 
             c->audio_pkt[i].size         = 0;
             c->audio_pkt[i].data         = c->audio_buf[i];
@@ -290,7 +291,6 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
             c->audio_pkt[i].pos          = -1;
         }
         c->ast[i]->codecpar->sample_rate    = dv_audio_frequency[freq];
-        c->ast[i]->codecpar->bit_rate       = 2 * dv_audio_frequency[freq] * 16;
     }
     c->ach = ach;
 
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 17/18] lavf/dv: do not update AVCodecParameters.sample_rate while demuxing
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (14 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 16/18] lavf/dv: set audio bitrate only at stream creation Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 14:20   ` Andreas Rheinhardt
  2022-08-31  3:11   ` Anton Khirnov
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 18/18] lavf/dv: do not continuously set stream timebase Anton Khirnov
  2022-08-24  8:50 ` [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
  17 siblings, 2 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

Demuxers are not allowed to do this and few callers, if any, will handle
this correctly. Send the AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE side data
instead.
---
 libavformat/dv.c | 49 +++++++++++++++++++++++++++++++++---------------
 1 file changed, 34 insertions(+), 15 deletions(-)

diff --git a/libavformat/dv.c b/libavformat/dv.c
index 9c8b0a262c..ffed1a7a90 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -33,6 +33,7 @@
 
 #include <time.h>
 #include "avformat.h"
+#include "demux.h"
 #include "internal.h"
 #include "libavcodec/dv_profile.h"
 #include "libavcodec/dv.h"
@@ -46,7 +47,7 @@
 #if CONFIG_DV_DEMUXER
 
 // Must be kept in sync with AVPacket
-struct DVPacket {
+typedef struct DVPacket {
     int64_t  pts;
     uint8_t *data;
     int      size;
@@ -54,7 +55,10 @@ struct DVPacket {
     int      flags;
     int64_t  pos;
     int64_t  duration;
-};
+
+    int sample_rate;
+    int last_sample_rate;
+} DVPacket;
 
 struct DVDemuxContext {
     const AVDVProfile*  sys;    /* Current DV profile. E.g.: 525/60, 625/50 */
@@ -237,7 +241,7 @@ static int dv_extract_audio(const uint8_t *frame, uint8_t **ppcm,
 static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
 {
     const uint8_t *as_pack;
-    int freq, stype, smpls, quant, i, ach;
+    int freq, stype, smpls, quant, i, ach, sr;
 
     as_pack = dv_extract_pack(frame, DV_AUDIO_SOURCE);
     if (!as_pack || !c->sys) {    /* No audio ? */
@@ -255,6 +259,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
                "Unrecognized audio sample rate index (%d)\n", freq);
         return 0;
     }
+    sr = dv_audio_frequency[freq];
 
     if (stype > 3) {
         av_log(c->fctx, AV_LOG_ERROR, "stype %d is invalid\n", stype);
@@ -280,7 +285,10 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
             c->ast[i]->codecpar->codec_id   = AV_CODEC_ID_PCM_S16LE;
             c->ast[i]->codecpar->ch_layout  = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
             c->ast[i]->start_time           = 0;
-            c->ast[i]->codecpar->bit_rate   = 2 * dv_audio_frequency[freq] * 16;
+            c->ast[i]->codecpar->bit_rate   = 2 * sr * 16;
+
+            c->ast[i]->codecpar->sample_rate = sr;
+            c->audio_pkt[i].last_sample_rate = sr;
 
             c->audio_pkt[i].size         = 0;
             c->audio_pkt[i].data         = c->audio_buf[i];
@@ -290,7 +298,8 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
             c->audio_pkt[i].duration     = 0;
             c->audio_pkt[i].pos          = -1;
         }
-        c->ast[i]->codecpar->sample_rate    = dv_audio_frequency[freq];
+
+        c->audio_pkt[i].sample_rate = sr;
     }
     c->ach = ach;
 
@@ -380,16 +389,26 @@ int avpriv_dv_get_packet(DVDemuxContext *c, AVPacket *pkt)
 
     for (i = 0; i < c->ach; i++) {
         if (c->ast[i] && c->audio_pkt[i].size) {
-            pkt->size         = c->audio_pkt[i].size;
-            pkt->data         = c->audio_pkt[i].data;
-            pkt->stream_index = c->audio_pkt[i].stream_index;
-            pkt->flags        = c->audio_pkt[i].flags;
-            pkt->pts          = c->audio_pkt[i].pts;
-            pkt->duration     = c->audio_pkt[i].duration;
-            pkt->pos          = c->audio_pkt[i].pos;
-
-            c->audio_pkt[i].size = 0;
-            size                 = pkt->size;
+            DVPacket *dpkt = &c->audio_pkt[i];
+
+            pkt->size         = dpkt->size;
+            pkt->data         = dpkt->data;
+            pkt->stream_index = dpkt->stream_index;
+            pkt->flags        = dpkt->flags;
+            pkt->pts          = dpkt->pts;
+            pkt->duration     = dpkt->duration;
+            pkt->pos          = dpkt->pos;
+
+            dpkt->size = 0;
+            size       = pkt->size;
+
+            if (dpkt->last_sample_rate != dpkt->sample_rate) {
+                int ret = ff_add_param_change(pkt, 0, 0, dpkt->sample_rate, 0, 0);
+                if (ret < 0)
+                    return ret;
+                dpkt->last_sample_rate = dpkt->sample_rate;
+            }
+
             break;
         }
     }
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH 18/18] lavf/dv: do not continuously set stream timebase
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (15 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 17/18] lavf/dv: do not update AVCodecParameters.sample_rate while demuxing Anton Khirnov
@ 2022-08-24  8:43 ` Anton Khirnov
  2022-08-24 14:42   ` Andreas Rheinhardt
  2022-08-25 19:04   ` Marton Balint
  2022-08-24  8:50 ` [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
  17 siblings, 2 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:43 UTC (permalink / raw)
  To: ffmpeg-devel

The code will call avpriv_set_pts_info() for each video frame, possibly
setting a different timebase if the stream framerate changes. This
violates API conventions, as the timebase is supposed to stay constant
after stream creation.

Change the demuxer to set a single timebase that is granular enough to
handle all supported DV framerates.

The seek tests change slightly because the new timebase is more
granular.
---
 libavformat/dv.c                  | 16 ++++++++++++----
 tests/ref/seek/lavf-dv            | 30 +++++++++++++++---------------
 tests/ref/seek/vsynth_lena-dv     | 24 ++++++++++++------------
 tests/ref/seek/vsynth_lena-dv-411 | 24 ++++++++++++------------
 tests/ref/seek/vsynth_lena-dv-50  | 24 ++++++++++++------------
 5 files changed, 63 insertions(+), 55 deletions(-)

diff --git a/libavformat/dv.c b/libavformat/dv.c
index ffed1a7a90..e2f7a6d313 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -69,6 +69,8 @@ struct DVDemuxContext {
     uint8_t           audio_buf[4][8192];
     int               ach;
     int               frames;
+
+    int64_t           next_pts;
 };
 
 static inline uint16_t dv_audio_12to16(uint16_t sample)
@@ -314,8 +316,6 @@ static int dv_extract_video_info(DVDemuxContext *c, const uint8_t *frame)
 
     par = c->vst->codecpar;
 
-    avpriv_set_pts_info(c->vst, 64, c->sys->time_base.num,
-                        c->sys->time_base.den);
     c->vst->avg_frame_rate = av_inv_q(c->vst->time_base);
 
     /* finding out SAR is a little bit messy */
@@ -360,6 +360,8 @@ static int dv_init_demux(AVFormatContext *s, DVDemuxContext *c)
     c->vst->codecpar->bit_rate   = 25000000;
     c->vst->start_time        = 0;
 
+    avpriv_set_pts_info(c->vst, 64, 1, 60000);
+
     /* Audio streams are added later as they are encountered. */
     s->ctx_flags |= AVFMTCTX_NOHEADER;
 
@@ -463,7 +465,10 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
         pkt->size         = size;
         pkt->flags       |= AV_PKT_FLAG_KEY;
         pkt->stream_index = c->vst->index;
-        pkt->pts          = c->frames;
+        pkt->pts          = c->next_pts;
+        pkt->duration     = av_rescale_q(1, c->sys->time_base, c->vst->time_base);
+
+        c->next_pts += pkt->duration;
     }
 
     c->frames++;
@@ -477,11 +482,12 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
     // FIXME: sys may be wrong if last dv_read_packet() failed (buffer is junk)
     FFFormatContext *const si = ffformatcontext(s);
     const int frame_size = c->sys->frame_size;
+    int64_t  frame_count = av_rescale_q(timestamp, c->vst->time_base, c->sys->time_base);
     int64_t offset;
     int64_t size       = avio_size(s->pb) - si->data_offset;
     int64_t max_offset = ((size - 1) / frame_size) * frame_size;
 
-    offset = frame_size * timestamp;
+    offset = frame_size * frame_count;
 
     if (size >= 0 && offset > max_offset)
         offset = max_offset;
@@ -494,6 +500,8 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
 void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset)
 {
     c->frames = frame_offset;
+    if (c->sys)
+        c->next_pts = av_rescale_q(frame_offset, c->sys->time_base, c->vst->time_base);
     c->audio_pkt[0].size = c->audio_pkt[1].size = 0;
     c->audio_pkt[2].size = c->audio_pkt[3].size = 0;
 }
diff --git a/tests/ref/seek/lavf-dv b/tests/ref/seek/lavf-dv
index f63e4460be..356f05546b 100644
--- a/tests/ref/seek/lavf-dv
+++ b/tests/ref/seek/lavf-dv
@@ -3,50 +3,50 @@ ret: 0         st:-1 flags:0  ts:-1.000000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:1  ts: 1.894167
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.800000
+ret: 0         st: 0 flags:0  ts: 0.788333
 ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.320000
+ret: 0         st: 0 flags:1  ts:-0.317500
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:0  ts: 2.560000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:1  ts: 1.480000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 0.365002
 ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
 ret: 0         st:-1 flags:1  ts:-0.740831
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:0  ts: 2.160000
+ret: 0         st: 0 flags:0  ts: 2.153333
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
-ret: 0         st: 0 flags:1  ts: 1.040000
+ret: 0         st: 0 flags:1  ts: 1.047500
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
 ret: 0         st: 1 flags:0  ts:-0.040000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:1  ts: 2.840000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 1.730004
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
 ret: 0         st:-1 flags:1  ts: 0.624171
 ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.480000
+ret: 0         st: 0 flags:0  ts:-0.481667
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.400000
+ret: 0         st: 0 flags:1  ts: 2.412500
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
 ret: 0         st: 1 flags:0  ts: 1.320000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:1  ts: 0.200000
-ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts:-0.904994
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:1  ts: 1.989173
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.880000
+ret: 0         st: 0 flags:0  ts: 0.883333
 ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.240000
+ret: 0         st: 0 flags:1  ts:-0.222500
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:0  ts: 2.680000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:1  ts: 1.560000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 0.460008
 ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
 ret: 0         st:-1 flags:1  ts:-0.645825
diff --git a/tests/ref/seek/vsynth_lena-dv b/tests/ref/seek/vsynth_lena-dv
index d318794157..afed1fbe72 100644
--- a/tests/ref/seek/vsynth_lena-dv
+++ b/tests/ref/seek/vsynth_lena-dv
@@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:1  ts: 1.894167
 ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.800000
+ret: 0         st: 0 flags:0  ts: 0.788333
 ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.320000
+ret: 0         st: 0 flags:1  ts:-0.317500
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 2.576668
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:1  ts: 1.470835
 ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.360000
+ret: 0         st: 0 flags:0  ts: 0.365000
 ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.760000
+ret: 0         st: 0 flags:1  ts:-0.740833
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 2.153336
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:1  ts: 1.047503
 ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.040000
+ret: 0         st: 0 flags:0  ts:-0.058333
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.840000
+ret: 0         st: 0 flags:1  ts: 2.835833
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 1.730004
 ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
 ret: 0         st:-1 flags:1  ts: 0.624171
 ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.480000
+ret: 0         st: 0 flags:0  ts:-0.481667
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.400000
+ret: 0         st: 0 flags:1  ts: 2.412500
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 1.306672
 ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
 ret: 0         st:-1 flags:1  ts: 0.200839
 ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.920000
+ret: 0         st: 0 flags:0  ts:-0.905000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.000000
+ret: 0         st: 0 flags:1  ts: 1.989167
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 0.883340
 ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
 ret: 0         st:-1 flags:1  ts:-0.222493
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:0  ts: 2.680000
+ret: 0         st: 0 flags:0  ts: 2.671667
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
-ret: 0         st: 0 flags:1  ts: 1.560000
+ret: 0         st: 0 flags:1  ts: 1.565833
 ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
 ret: 0         st:-1 flags:0  ts: 0.460008
 ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
diff --git a/tests/ref/seek/vsynth_lena-dv-411 b/tests/ref/seek/vsynth_lena-dv-411
index d318794157..afed1fbe72 100644
--- a/tests/ref/seek/vsynth_lena-dv-411
+++ b/tests/ref/seek/vsynth_lena-dv-411
@@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:1  ts: 1.894167
 ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.800000
+ret: 0         st: 0 flags:0  ts: 0.788333
 ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.320000
+ret: 0         st: 0 flags:1  ts:-0.317500
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 2.576668
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:1  ts: 1.470835
 ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.360000
+ret: 0         st: 0 flags:0  ts: 0.365000
 ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.760000
+ret: 0         st: 0 flags:1  ts:-0.740833
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 2.153336
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:1  ts: 1.047503
 ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.040000
+ret: 0         st: 0 flags:0  ts:-0.058333
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.840000
+ret: 0         st: 0 flags:1  ts: 2.835833
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 1.730004
 ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
 ret: 0         st:-1 flags:1  ts: 0.624171
 ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.480000
+ret: 0         st: 0 flags:0  ts:-0.481667
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.400000
+ret: 0         st: 0 flags:1  ts: 2.412500
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 1.306672
 ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
 ret: 0         st:-1 flags:1  ts: 0.200839
 ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.920000
+ret: 0         st: 0 flags:0  ts:-0.905000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.000000
+ret: 0         st: 0 flags:1  ts: 1.989167
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 0.883340
 ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
 ret: 0         st:-1 flags:1  ts:-0.222493
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:0  ts: 2.680000
+ret: 0         st: 0 flags:0  ts: 2.671667
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
-ret: 0         st: 0 flags:1  ts: 1.560000
+ret: 0         st: 0 flags:1  ts: 1.565833
 ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
 ret: 0         st:-1 flags:0  ts: 0.460008
 ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
diff --git a/tests/ref/seek/vsynth_lena-dv-50 b/tests/ref/seek/vsynth_lena-dv-50
index fae6d1b225..3b1d69ffa6 100644
--- a/tests/ref/seek/vsynth_lena-dv-50
+++ b/tests/ref/seek/vsynth_lena-dv-50
@@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
 ret: 0         st:-1 flags:1  ts: 1.894167
 ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:13536000 size:288000
-ret: 0         st: 0 flags:0  ts: 0.800000
+ret: 0         st: 0 flags:0  ts: 0.788333
 ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:5760000 size:288000
-ret: 0         st: 0 flags:1  ts:-0.320000
+ret: 0         st: 0 flags:1  ts:-0.317500
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
 ret: 0         st:-1 flags:0  ts: 2.576668
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
 ret: 0         st:-1 flags:1  ts: 1.470835
 ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:10656000 size:288000
-ret: 0         st: 0 flags:0  ts: 0.360000
+ret: 0         st: 0 flags:0  ts: 0.365000
 ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:2592000 size:288000
-ret: 0         st: 0 flags:1  ts:-0.760000
+ret: 0         st: 0 flags:1  ts:-0.740833
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
 ret: 0         st:-1 flags:0  ts: 2.153336
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
 ret: 0         st:-1 flags:1  ts: 1.047503
 ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:7488000 size:288000
-ret: 0         st: 0 flags:0  ts:-0.040000
+ret: 0         st: 0 flags:0  ts:-0.058333
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
-ret: 0         st: 0 flags:1  ts: 2.840000
+ret: 0         st: 0 flags:1  ts: 2.835833
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
 ret: 0         st:-1 flags:0  ts: 1.730004
 ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:12384000 size:288000
 ret: 0         st:-1 flags:1  ts: 0.624171
 ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:4608000 size:288000
-ret: 0         st: 0 flags:0  ts:-0.480000
+ret: 0         st: 0 flags:0  ts:-0.481667
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
-ret: 0         st: 0 flags:1  ts: 2.400000
+ret: 0         st: 0 flags:1  ts: 2.412500
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
 ret: 0         st:-1 flags:0  ts: 1.306672
 ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:9504000 size:288000
 ret: 0         st:-1 flags:1  ts: 0.200839
 ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos:1440000 size:288000
-ret: 0         st: 0 flags:0  ts:-0.920000
+ret: 0         st: 0 flags:0  ts:-0.905000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
-ret: 0         st: 0 flags:1  ts: 2.000000
+ret: 0         st: 0 flags:1  ts: 1.989167
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
 ret: 0         st:-1 flags:0  ts: 0.883340
 ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:6336000 size:288000
 ret: 0         st:-1 flags:1  ts:-0.222493
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
-ret: 0         st: 0 flags:0  ts: 2.680000
+ret: 0         st: 0 flags:0  ts: 2.671667
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
-ret: 0         st: 0 flags:1  ts: 1.560000
+ret: 0         st: 0 flags:1  ts: 1.565833
 ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:11232000 size:288000
 ret: 0         st:-1 flags:0  ts: 0.460008
 ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:3456000 size:288000
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer
  2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
                   ` (16 preceding siblings ...)
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 18/18] lavf/dv: do not continuously set stream timebase Anton Khirnov
@ 2022-08-24  8:50 ` Anton Khirnov
  17 siblings, 0 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-24  8:50 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Unfortunately the smallest sample I could come up with for this is 4MB,
it can be downloaded from [1] and is a cut version of [2]. Smaller
samples for this feature are very much welcome.

[1] https://ups.khirnov.net/9c5dbaa0847185b81c62d48608eec60440b2cb016899a7d6214f5c30efc81934/qt_dv_pal_test_cut.mov
[2] https://samples.ffmpeg.org/V-codecs/DVSD/qt_dv_pal_test.mov

-- 
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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 02/18] lavf/dv: remove DVMuxContext declaration from dv.h
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 02/18] lavf/dv: remove DVMuxContext declaration from dv.h Anton Khirnov
@ 2022-08-24 11:55   ` Andreas Rheinhardt
  0 siblings, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 11:55 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> DVMuxContext is only used inside dvenc.c, there is no reason for it to
> be visible outside of that file.
> ---
>  libavformat/dv.h    | 4 +---
>  libavformat/dvenc.c | 4 ++--
>  2 files changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/libavformat/dv.h b/libavformat/dv.h
> index 160c6ab873..efced6ccf0 100644
> --- a/libavformat/dv.h
> +++ b/libavformat/dv.h
> @@ -1,5 +1,5 @@
>  /*
> - * General DV muxer/demuxer
> + * General DV demuxer
>   * Copyright (c) 2003 Roman Shaposhnik
>   *
>   * Many thanks to Dan Dennedy <dan@dennedy.org> for providing wealth
> @@ -36,6 +36,4 @@ int avpriv_dv_get_packet(DVDemuxContext*, AVPacket *);
>  int avpriv_dv_produce_packet(DVDemuxContext*, AVPacket*, uint8_t*, int, int64_t);
>  void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset);
>  
> -typedef struct DVMuxContext DVMuxContext;
> -
>  #endif /* AVFORMAT_DV_H */
> diff --git a/libavformat/dvenc.c b/libavformat/dvenc.c
> index 7ef9692302..429ddcb96c 100644
> --- a/libavformat/dvenc.c
> +++ b/libavformat/dvenc.c
> @@ -43,7 +43,7 @@
>  
>  #define MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32-bit audio
>  
> -struct DVMuxContext {
> +typedef struct DVMuxContext {
>      AVClass          *av_class;
>      const AVDVProfile*  sys;           /* current DV profile, e.g.: 525/60, 625/50 */
>      int               n_ast;         /* number of stereo audio streams (up to 2) */
> @@ -55,7 +55,7 @@ struct DVMuxContext {
>      int               has_video;     /* frame under construction has video */
>      uint8_t           frame_buf[DV_MAX_FRAME_SIZE]; /* frame under construction */
>      AVTimecode        tc;            /* timecode context */
> -};
> +} DVMuxContext;
>  
>  static const int dv_aaux_packs_dist[12][9] = {
>      { 0xff, 0xff, 0xff, 0x50, 0x51, 0x52, 0x53, 0xff, 0xff },

LGTM.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 04/18] lavc/dvdec: drop the only use of DVVideoContext.avctx
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 04/18] lavc/dvdec: drop the only use of DVVideoContext.avctx Anton Khirnov
@ 2022-08-24 12:24   ` Andreas Rheinhardt
  0 siblings, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 12:24 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> The function gets the codec context parameter directly.
> ---
>  libavcodec/dvdec.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
> index f7423580aa..bad8419925 100644
> --- a/libavcodec/dvdec.c
> +++ b/libavcodec/dvdec.c
> @@ -393,7 +393,7 @@ static int dv_decode_video_segment(AVCodecContext *avctx, void *arg)
>      LOCAL_ALIGNED_16(int16_t, sblock, [5 * DV_MAX_BPM], [64]);
>      LOCAL_ALIGNED_16(uint8_t, mb_bit_buffer, [80     + AV_INPUT_BUFFER_PADDING_SIZE]); /* allow some slack */
>      LOCAL_ALIGNED_16(uint8_t, vs_bit_buffer, [80 * 5 + AV_INPUT_BUFFER_PADDING_SIZE]); /* allow some slack */
> -    const int log2_blocksize = 3-s->avctx->lowres;
> +    const int log2_blocksize = 3 - avctx->lowres;
>      int is_field_mode[5];
>      int vs_bit_buffer_damaged = 0;
>      int mb_bit_buffer_damaged[5] = {0};

LGTM.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 05/18] lavc/dv: remove ff_dvvideo_init()
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 05/18] lavc/dv: remove ff_dvvideo_init() Anton Khirnov
@ 2022-08-24 12:27   ` Andreas Rheinhardt
  2022-08-25 10:10     ` [FFmpeg-devel] [PATCH] " Anton Khirnov
  2022-08-25  9:48   ` [FFmpeg-devel] [PATCH 05/18] " Anton Khirnov
  1 sibling, 1 reply; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 12:27 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> The function contains only two assignments, which are simpler to
> duplicate into decoder and encoder. Additionally, dvdec does not use
> DVVideoContext.avctx at all.
> ---
>  libavcodec/dv.c    | 10 ----------
>  libavcodec/dv.h    |  2 --
>  libavcodec/dvdec.c |  4 +++-
>  libavcodec/dvenc.c |  5 ++++-
>  4 files changed, 7 insertions(+), 14 deletions(-)
> 
> diff --git a/libavcodec/dv.c b/libavcodec/dv.c
> index e2550c4cc1..9e05aa8927 100644
> --- a/libavcodec/dv.c
> +++ b/libavcodec/dv.c
> @@ -184,13 +184,3 @@ int ff_dv_init_dynamic_tables(DVVideoContext *ctx, const AVDVProfile *d)
>  
>      return 0;
>  }
> -
> -av_cold int ff_dvvideo_init(AVCodecContext *avctx)
> -{
> -    DVVideoContext *s = avctx->priv_data;
> -
> -    s->avctx = avctx;
> -    avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
> -
> -    return 0;
> -}
> diff --git a/libavcodec/dv.h b/libavcodec/dv.h
> index 331b8e846a..2b082d0140 100644
> --- a/libavcodec/dv.h
> +++ b/libavcodec/dv.h
> @@ -97,8 +97,6 @@ enum dv_pack_type {
>  
>  int ff_dv_init_dynamic_tables(DVVideoContext *s, const AVDVProfile *d);
>  
> -int ff_dvvideo_init(AVCodecContext *avctx);
> -
>  static inline int dv_work_pool_size(const AVDVProfile *d)
>  {
>      int size = d->n_difchan * d->difseg_size * 27;
> diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
> index bad8419925..daee2347e6 100644
> --- a/libavcodec/dvdec.c
> +++ b/libavcodec/dvdec.c
> @@ -240,6 +240,8 @@ static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
>      DVVideoContext *s = avctx->priv_data;
>      int i;
>  
> +    avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
> +
>      ff_idctdsp_init(&s->idsp, avctx);
>  
>      for (i = 0; i < 64; i++)
> @@ -258,7 +260,7 @@ static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
>  
>      ff_thread_once(&init_static_once, dv_init_static);
>  
> -    return ff_dvvideo_init(avctx);
> +    return 0;
>  }
>  
>  /* decode AC coefficients */
> diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
> index 5ba4de3213..8027feb9b3 100644
> --- a/libavcodec/dvenc.c
> +++ b/libavcodec/dvenc.c
> @@ -55,6 +55,9 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
>      PixblockDSPContext pdsp;
>      int ret;
>  
> +    s->avctx = avctx;
> +    avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
> +
>      s->sys = av_dv_codec_profile2(avctx->width, avctx->height, avctx->pix_fmt, avctx->time_base);
>      if (!s->sys) {
>          av_log(avctx, AV_LOG_ERROR, "Found no DV profile for %ix%i %s video. "
> @@ -91,7 +94,7 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
>      }
>  #endif
>  
> -    return ff_dvvideo_init(avctx);
> +    return 0;
>  }
>  
>  /* bit budget for AC only in 5 MBs */

There is actually another issue here: Encoders are not supposed to set
chroma_sample_location at all according to the documentation. I sent a
patch to implement this
(https://ffmpeg.org/pipermail/ffmpeg-devel/2022-July/298518.html -- it
also inlines and removes ff_dvvideo_init()), but I am unsure whether it
is not the documentation that needs to be updated.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 06/18] lavc/dv: do not pass DVVideoContext to ff_dv_init_dynamic_tables()
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 06/18] lavc/dv: do not pass DVVideoContext to ff_dv_init_dynamic_tables() Anton Khirnov
@ 2022-08-24 12:28   ` Andreas Rheinhardt
  0 siblings, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 12:28 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> It only needs work_chunks from it, so pass that directly.
> 
> This is done in preparation to splitting DVVideoContext.
> ---
>  libavcodec/dv.c    | 6 +++---
>  libavcodec/dv.h    | 2 +-
>  libavcodec/dvdec.c | 2 +-
>  libavcodec/dvenc.c | 2 +-
>  4 files changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/libavcodec/dv.c b/libavcodec/dv.c
> index 9e05aa8927..b5e54de5dd 100644
> --- a/libavcodec/dv.c
> +++ b/libavcodec/dv.c
> @@ -162,7 +162,7 @@ static inline void dv_calc_mb_coordinates(const AVDVProfile *d, int chan,
>      }
>  }
>  
> -int ff_dv_init_dynamic_tables(DVVideoContext *ctx, const AVDVProfile *d)
> +int ff_dv_init_dynamic_tables(DVwork_chunk *work_chunks, const AVDVProfile *d)
>  {
>      int j, i, c, s, p;
>  
> @@ -174,8 +174,8 @@ int ff_dv_init_dynamic_tables(DVVideoContext *ctx, const AVDVProfile *d)
>                  p += !(j % 3);
>                  if (!(DV_PROFILE_IS_1080i50(d) && c != 0 && s == 11) &&
>                      !(DV_PROFILE_IS_720p50(d) && s > 9)) {
> -                    dv_calc_mb_coordinates(d, c, s, j, &ctx->work_chunks[i].mb_coordinates[0]);
> -                    ctx->work_chunks[i++].buf_offset = p;
> +                    dv_calc_mb_coordinates(d, c, s, j, &work_chunks[i].mb_coordinates[0]);
> +                    work_chunks[i++].buf_offset = p;
>                  }
>                  p += 5;
>              }
> diff --git a/libavcodec/dv.h b/libavcodec/dv.h
> index 2b082d0140..286b267de2 100644
> --- a/libavcodec/dv.h
> +++ b/libavcodec/dv.h
> @@ -95,7 +95,7 @@ enum dv_pack_type {
>   */
>  #define DV_MAX_BPM 8
>  
> -int ff_dv_init_dynamic_tables(DVVideoContext *s, const AVDVProfile *d);
> +int ff_dv_init_dynamic_tables(DVwork_chunk *work_chunks, const AVDVProfile *d);
>  
>  static inline int dv_work_pool_size(const AVDVProfile *d)
>  {
> diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
> index daee2347e6..1e2c097ed0 100644
> --- a/libavcodec/dvdec.c
> +++ b/libavcodec/dvdec.c
> @@ -626,7 +626,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, AVFrame *frame,
>      }
>  
>      if (sys != s->sys) {
> -        ret = ff_dv_init_dynamic_tables(s, sys);
> +        ret = ff_dv_init_dynamic_tables(s->work_chunks, sys);
>          if (ret < 0) {
>              av_log(avctx, AV_LOG_ERROR, "Error initializing the work tables.\n");
>              return ret;
> diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
> index 8027feb9b3..712ca325de 100644
> --- a/libavcodec/dvenc.c
> +++ b/libavcodec/dvenc.c
> @@ -67,7 +67,7 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
>          return AVERROR(EINVAL);
>      }
>  
> -    ret = ff_dv_init_dynamic_tables(s, s->sys);
> +    ret = ff_dv_init_dynamic_tables(s->work_chunks, s->sys);
>      if (ret < 0) {
>          av_log(avctx, AV_LOG_ERROR, "Error initializing work tables.\n");
>          return ret;

LGTM.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 08/18] lavc/dvdec: stop using DVVideoContext
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 08/18] lavc/dvdec: stop using DVVideoContext Anton Khirnov
@ 2022-08-24 12:33   ` Andreas Rheinhardt
  0 siblings, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 12:33 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> The struct is quite small and the decoder and the encoder use different
> fields from it, so benefits from reusing it are small.
> 
> This allows making the buf field const.
> ---
>  libavcodec/dvdec.c | 28 +++++++++++++++++++++-------
>  1 file changed, 21 insertions(+), 7 deletions(-)
> 
> diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
> index 7f9e4eb0c0..444b137488 100644
> --- a/libavcodec/dvdec.c
> +++ b/libavcodec/dvdec.c
> @@ -48,6 +48,7 @@
>  #include "dv_profile_internal.h"
>  #include "dvdata.h"
>  #include "get_bits.h"
> +#include "idctdsp.h"
>  #include "internal.h"
>  #include "put_bits.h"
>  #include "simple_idct.h"
> @@ -63,6 +64,19 @@ typedef struct BlockInfo {
>      int shift_offset;
>  } BlockInfo;
>  
> +typedef struct DVDecContext {
> +    const AVDVProfile *sys;
> +    const AVFrame     *frame;
> +    const uint8_t     *buf;
> +
> +    uint8_t      dv_zigzag[2][64];
> +    DVwork_chunk work_chunks[4 * 12 * 27];
> +    uint32_t     idct_factor[2 * 4 * 16 * 64];
> +    void       (*idct_put[2])(uint8_t *dest, ptrdiff_t stride, int16_t *block);
> +
> +    IDCTDSPContext idsp;
> +} DVDecContext;
> +
>  static const int dv_iweight_bits = 14;
>  
>  static const uint16_t dv_iweight_88[64] = {
> @@ -188,7 +202,7 @@ static void dv_init_static(void)
>      }
>  }
>  
> -static void dv_init_weight_tables(DVVideoContext *ctx, const AVDVProfile *d)
> +static void dv_init_weight_tables(DVDecContext *ctx, const AVDVProfile *d)
>  {
>      int j, i, c, s;
>      uint32_t *factor1 = &ctx->idct_factor[0],
> @@ -237,7 +251,7 @@ static void dv_init_weight_tables(DVVideoContext *ctx, const AVDVProfile *d)
>  static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
>  {
>      static AVOnce init_static_once = AV_ONCE_INIT;
> -    DVVideoContext *s = avctx->priv_data;
> +    DVDecContext *s = avctx->priv_data;
>      int i;
>  
>      avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
> @@ -347,7 +361,7 @@ static av_always_inline void put_block_8x4(int16_t *block, uint8_t *av_restrict
>      }
>  }
>  
> -static void dv100_idct_put_last_row_field_chroma(const DVVideoContext *s, uint8_t *data,
> +static void dv100_idct_put_last_row_field_chroma(const DVDecContext *s, uint8_t *data,
>                                                   int stride, int16_t *blocks)
>  {
>      s->idsp.idct(blocks + 0*64);
> @@ -359,7 +373,7 @@ static void dv100_idct_put_last_row_field_chroma(const DVVideoContext *s, uint8_
>      put_block_8x4(blocks+1*64 + 4*8, data + 8 + stride, stride<<1);
>  }
>  
> -static void dv100_idct_put_last_row_field_luma(const DVVideoContext *s, uint8_t *data,
> +static void dv100_idct_put_last_row_field_luma(const DVDecContext *s, uint8_t *data,
>                                                 int stride, int16_t *blocks)
>  {
>      s->idsp.idct(blocks + 0*64);
> @@ -380,7 +394,7 @@ static void dv100_idct_put_last_row_field_luma(const DVVideoContext *s, uint8_t
>  /* mb_x and mb_y are in units of 8 pixels */
>  static int dv_decode_video_segment(AVCodecContext *avctx, void *arg)
>  {
> -    const DVVideoContext *s = avctx->priv_data;
> +    const DVDecContext *s = avctx->priv_data;
>      DVwork_chunk *work_chunk = arg;
>      int quant, dc, dct_mode, class1, j;
>      int mb_index, mb_x, mb_y, last_index;
> @@ -614,7 +628,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, AVFrame *frame,
>  {
>      uint8_t *buf = avpkt->data;
>      int buf_size = avpkt->size;
> -    DVVideoContext *s = avctx->priv_data;
> +    DVDecContext *s = avctx->priv_data;
>      const uint8_t *vsc_pack;
>      int apt, is16_9, ret;
>      const AVDVProfile *sys;
> @@ -688,7 +702,7 @@ const FFCodec ff_dvvideo_decoder = {
>      .p.long_name    = NULL_IF_CONFIG_SMALL("DV (Digital Video)"),
>      .p.type         = AVMEDIA_TYPE_VIDEO,
>      .p.id           = AV_CODEC_ID_DVVIDEO,
> -    .priv_data_size = sizeof(DVVideoContext),
> +    .priv_data_size = sizeof(DVDecContext),
>      .init           = dvvideo_decode_init,
>      FF_CODEC_DECODE_CB(dvvideo_decode_frame),
>      .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_SLICE_THREADS,

LGTM.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 09/18] lavc/dvenc: stop using DVVideoContext
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 09/18] lavc/dvenc: " Anton Khirnov
@ 2022-08-24 12:36   ` Andreas Rheinhardt
  0 siblings, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 12:36 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> Move the parts of it used by the encoder into a new DVEncContext and
> remove DVVideoContext.
> ---
>  libavcodec/dv.h    | 23 -----------------------
>  libavcodec/dvenc.c | 39 ++++++++++++++++++++++++++++-----------
>  2 files changed, 28 insertions(+), 34 deletions(-)
> 
> diff --git a/libavcodec/dv.h b/libavcodec/dv.h
> index 6430688795..859a4e6545 100644
> --- a/libavcodec/dv.h
> +++ b/libavcodec/dv.h
> @@ -27,36 +27,13 @@
>  #ifndef AVCODEC_DV_H
>  #define AVCODEC_DV_H
>  
> -#include "avcodec.h"
>  #include "dv_profile.h"
> -#include "me_cmp.h"
> -#include "idctdsp.h"
>  
>  typedef struct DVwork_chunk {
>      uint16_t buf_offset;
>      uint16_t mb_coordinates[5];
>  } DVwork_chunk;
>  
> -typedef struct DVVideoContext {
> -    AVClass *avclass;
> -    const AVDVProfile *sys;
> -    const AVFrame   *frame;
> -    AVCodecContext  *avctx;
> -    uint8_t         *buf;
> -
> -    uint8_t dv_zigzag[2][64];
> -
> -    void (*get_pixels)(int16_t *block, const uint8_t *pixels, ptrdiff_t linesize);
> -    void (*fdct[2])(int16_t *block);
> -    void (*idct_put[2])(uint8_t *dest, ptrdiff_t stride, int16_t *block);
> -    me_cmp_func ildct_cmp;
> -    DVwork_chunk work_chunks[4 * 12 * 27];
> -    uint32_t idct_factor[2 * 4 * 16 * 64];
> -    IDCTDSPContext idsp;
> -
> -    int quant_deadzone;
> -} DVVideoContext;
> -
>  enum dv_section_type {
>      dv_sect_header  = 0x1f,
>      dv_sect_subcode = 0x3f,
> diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
> index c12fce9e8b..19291724e0 100644
> --- a/libavcodec/dvenc.c
> +++ b/libavcodec/dvenc.c
> @@ -47,9 +47,26 @@
>  #include "pixblockdsp.h"
>  #include "put_bits.h"
>  
> +typedef struct DVEncContext {
> +    AVClass           *class;

Please constify AVClass while at it. LGTM apart from that.

- Andreas

> +    const AVDVProfile *sys;
> +    const AVFrame     *frame;
> +    AVCodecContext    *avctx;
> +    uint8_t           *buf;
> +
> +    void (*get_pixels)(int16_t *block, const uint8_t *pixels, ptrdiff_t linesize);
> +    void (*fdct[2])(int16_t *block);
> +
> +    me_cmp_func  ildct_cmp;
> +    DVwork_chunk work_chunks[4 * 12 * 27];
> +
> +    int quant_deadzone;
> +} DVEncContext;
> +
> +
>  static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
>  {
> -    DVVideoContext *s = avctx->priv_data;
> +    DVEncContext *s = avctx->priv_data;
>      FDCTDSPContext fdsp;
>      MECmpContext mecc;
>      PixblockDSPContext pdsp;
> @@ -220,7 +237,7 @@ static av_always_inline PutBitContext *dv_encode_ac(EncBlockInfo *bi,
>      return pb;
>  }
>  
> -static av_always_inline int dv_guess_dct_mode(DVVideoContext *s, const uint8_t *data,
> +static av_always_inline int dv_guess_dct_mode(DVEncContext *s, const uint8_t *data,
>                                                ptrdiff_t linesize)
>  {
>      if (s->avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) {
> @@ -368,7 +385,7 @@ static const int dv_weight_720[2][64] = {
>        2661, 2583, 2509, 2394, 2509, 2260, 2260, 2131, }
>  };
>  
> -static av_always_inline int dv_set_class_number_sd(DVVideoContext *s,
> +static av_always_inline int dv_set_class_number_sd(DVEncContext *s,
>                                                     int16_t *blk, EncBlockInfo *bi,
>                                                     const uint8_t *zigzag_scan,
>                                                     const int *weight, int bias)
> @@ -452,7 +469,7 @@ static av_always_inline int dv_set_class_number_sd(DVVideoContext *s,
>  
>  /* this function just copies the DCT coefficients and performs
>     the initial (non-)quantization. */
> -static inline void dv_set_class_number_hd(DVVideoContext *s,
> +static inline void dv_set_class_number_hd(DVEncContext *s,
>                                            int16_t *blk, EncBlockInfo *bi,
>                                            const uint8_t *zigzag_scan,
>                                            const int *weight, int bias)
> @@ -510,7 +527,7 @@ static inline void dv_set_class_number_hd(DVVideoContext *s,
>  }
>  
>  static av_always_inline int dv_init_enc_block(EncBlockInfo* bi, const uint8_t *data, int linesize,
> -                                              DVVideoContext *s, int chroma)
> +                                              DVEncContext *s, int chroma)
>  {
>      LOCAL_ALIGNED_16(int16_t, blk, [64]);
>  
> @@ -847,7 +864,7 @@ static inline void dv_revise_cnos(uint8_t *dif, EncBlockInfo *blk, const AVDVPro
>  
>  static int dv_encode_video_segment(AVCodecContext *avctx, void *arg)
>  {
> -    DVVideoContext *s = avctx->priv_data;
> +    DVEncContext *s = avctx->priv_data;
>      DVwork_chunk *work_chunk = arg;
>      int mb_index, i, j;
>      int mb_x, mb_y, c_offset;
> @@ -995,7 +1012,7 @@ static int dv_encode_video_segment(AVCodecContext *avctx, void *arg)
>      return 0;
>  }
>  
> -static inline int dv_write_pack(enum dv_pack_type pack_id, DVVideoContext *c,
> +static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
>                                  uint8_t *buf)
>  {
>      /*
> @@ -1115,7 +1132,7 @@ static inline int dv_write_ssyb_id(uint8_t syb_num, uint8_t fr, uint8_t *buf)
>      return 3;
>  }
>  
> -static void dv_format_frame(DVVideoContext *c, uint8_t *buf)
> +static void dv_format_frame(DVEncContext *c, uint8_t *buf)
>  {
>      int chan, i, j, k;
>      /* We work with 720p frames split in half. The odd half-frame is chan 2,3 */
> @@ -1170,7 +1187,7 @@ static void dv_format_frame(DVVideoContext *c, uint8_t *buf)
>  static int dvvideo_encode_frame(AVCodecContext *c, AVPacket *pkt,
>                                  const AVFrame *frame, int *got_packet)
>  {
> -    DVVideoContext *s = c->priv_data;
> +    DVEncContext *s = c->priv_data;
>      int ret;
>  
>      if ((ret = ff_get_encode_buffer(c, pkt, s->sys->frame_size, 0)) < 0)
> @@ -1195,7 +1212,7 @@ static int dvvideo_encode_frame(AVCodecContext *c, AVPacket *pkt,
>  }
>  
>  #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
> -#define OFFSET(x) offsetof(DVVideoContext, x)
> +#define OFFSET(x) offsetof(DVEncContext, x)
>  static const AVOption dv_options[] = {
>      { "quant_deadzone",        "Quantizer dead zone",    OFFSET(quant_deadzone),       AV_OPT_TYPE_INT, { .i64 = 7 }, 0, 1024, VE },
>      { NULL },
> @@ -1215,7 +1232,7 @@ const FFCodec ff_dvvideo_encoder = {
>      .p.id           = AV_CODEC_ID_DVVIDEO,
>      .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS |
>                        AV_CODEC_CAP_SLICE_THREADS,
> -    .priv_data_size = sizeof(DVVideoContext),
> +    .priv_data_size = sizeof(DVEncContext),
>      .init           = dvvideo_encode_init,
>      FF_CODEC_ENCODE_CB(dvvideo_encode_frame),
>      .p.pix_fmts     = (const enum AVPixelFormat[]) {

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 11/18] lavc/dv: rename constants to follow our naming conventions
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 11/18] lavc/dv: rename constants to follow our naming conventions Anton Khirnov
@ 2022-08-24 12:38   ` Andreas Rheinhardt
  0 siblings, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 12:38 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> CamelCase for enum tags, ALL_CAPS for enum values.
> ---
>  libavcodec/dv.h     | 38 +++++++++++++++++++-------------------
>  libavcodec/dvdec.c  |  4 ++--
>  libavcodec/dvenc.c  | 32 ++++++++++++++++----------------
>  libavformat/dv.c    | 18 +++++++++---------
>  libavformat/dvenc.c | 34 +++++++++++++++++-----------------
>  5 files changed, 63 insertions(+), 63 deletions(-)
> 
> diff --git a/libavcodec/dv.h b/libavcodec/dv.h
> index 535f01cf0b..29f97b6089 100644
> --- a/libavcodec/dv.h
> +++ b/libavcodec/dv.h
> @@ -27,27 +27,27 @@
>  #ifndef AVCODEC_DV_H
>  #define AVCODEC_DV_H
>  
> -enum dv_section_type {
> -    dv_sect_header  = 0x1f,
> -    dv_sect_subcode = 0x3f,
> -    dv_sect_vaux    = 0x56,
> -    dv_sect_audio   = 0x76,
> -    dv_sect_video   = 0x96,
> +enum DVSectionType {
> +    DV_SECT_HEADER  = 0x1f,
> +    DV_SECT_SUBCODE = 0x3f,
> +    DV_SECT_VAUX    = 0x56,
> +    DV_SECT_AUDIO   = 0x76,
> +    DV_SECT_VIDEO   = 0x96,
>  };
>  
> -enum dv_pack_type {
> -    dv_header525     = 0x3f,  /* see dv_write_pack for important details on */
> -    dv_header625     = 0xbf,  /* these two packs */
> -    dv_timecode      = 0x13,
> -    dv_audio_source  = 0x50,
> -    dv_audio_control = 0x51,
> -    dv_audio_recdate = 0x52,
> -    dv_audio_rectime = 0x53,
> -    dv_video_source  = 0x60,
> -    dv_video_control = 0x61,
> -    dv_video_recdate = 0x62,
> -    dv_video_rectime = 0x63,
> -    dv_unknown_pack  = 0xff,
> +enum DVPackType {
> +    DV_HEADER525     = 0x3f,  /* see dv_write_pack for important details on */
> +    DV_HEADER625     = 0xbf,  /* these two packs */
> +    DV_TIMECODE      = 0x13,
> +    DV_AUDIO_SOURCE  = 0x50,
> +    DV_AUDIO_CONTROL = 0x51,
> +    DV_AUDIO_RECDATE = 0x52,
> +    DV_AUDIO_RECTIME = 0x53,
> +    DV_VIDEO_SOURCE  = 0x60,
> +    DV_VIDEO_CONTROL = 0x61,
> +    DV_VIDEO_RECDATE = 0x62,
> +    DV_VIDEO_RECTIME = 0x63,
> +    DV_UNKNOWN_PACK  = 0xff,
>  };
>  
>  #define DV_PROFILE_IS_HD(p) ((p)->video_stype & 0x10)
> diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
> index 297bf7f2fb..424aa79f35 100644
> --- a/libavcodec/dvdec.c
> +++ b/libavcodec/dvdec.c
> @@ -662,7 +662,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, AVFrame *frame,
>  
>      /* Determine the codec's sample_aspect ratio from the packet */
>      vsc_pack = buf + 80 * 5 + 48 + 5;
> -    if (*vsc_pack == dv_video_control) {
> +    if (*vsc_pack == DV_VIDEO_CONTROL) {
>          apt    = buf[4] & 0x07;
>          is16_9 = (vsc_pack[2] & 0x07) == 0x02 ||
>                   (!apt && (vsc_pack[2] & 0x07) == 0x07);
> @@ -673,7 +673,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, AVFrame *frame,
>          return ret;
>  
>      /* Determine the codec's field order from the packet */
> -    if ( *vsc_pack == dv_video_control ) {
> +    if ( *vsc_pack == DV_VIDEO_CONTROL ) {
>          if (avctx->height == 720) {
>              frame->interlaced_frame = 0;
>              frame->top_field_first = 0;
> diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
> index 1f0374b865..c0ae4c040a 100644
> --- a/libavcodec/dvenc.c
> +++ b/libavcodec/dvenc.c
> @@ -1013,7 +1013,7 @@ static int dv_encode_video_segment(AVCodecContext *avctx, void *arg)
>      return 0;
>  }
>  
> -static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
> +static inline int dv_write_pack(enum DVPackType pack_id, DVEncContext *c,
>                                  uint8_t *buf)
>  {
>      /*
> @@ -1051,8 +1051,8 @@ static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
>  
>      buf[0] = (uint8_t) pack_id;
>      switch (pack_id) {
> -    case dv_header525: /* I can't imagine why these two weren't defined as real */
> -    case dv_header625: /* packs in SMPTE314M -- they definitely look like ones */
> +    case DV_HEADER525: /* I can't imagine why these two weren't defined as real */
> +    case DV_HEADER625: /* packs in SMPTE314M -- they definitely look like ones */
>          buf[1] =  0xf8       | /* reserved -- always 1 */
>                   (apt & 0x07); /* APT: Track application ID */
>          buf[2] = (0    << 7) | /* TF1: audio data is 0 - valid; 1 - invalid */
> @@ -1065,7 +1065,7 @@ static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
>                   (0x0f << 3) | /* reserved -- always 1 */
>                   (apt & 0x07); /* AP3: Subcode application ID */
>          break;
> -    case dv_video_source:
> +    case DV_VIDEO_SOURCE:
>          buf[1] = 0xff;         /* reserved -- always 1 */
>          buf[2] = (1 << 7) |    /* B/W: 0 - b/w, 1 - color */
>                   (1 << 6) |    /* following CLF is valid - 0, invalid - 1 */
> @@ -1076,7 +1076,7 @@ static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
>                   c->sys->video_stype; /* signal type video compression */
>          buf[4] = 0xff;         /* VISC: 0xff -- no information */
>          break;
> -    case dv_video_control:
> +    case DV_VIDEO_CONTROL:
>          buf[1] = (0 << 6) |    /* Copy generation management (CGMS) 0 -- free */
>                   0x3f;         /* reserved -- always 1 */
>          buf[2] = 0xc8 |        /* reserved -- always b11001xxx */
> @@ -1097,7 +1097,7 @@ static inline int dv_write_pack(enum dv_pack_type pack_id, DVEncContext *c,
>      return 5;
>  }
>  
> -static inline int dv_write_dif_id(enum dv_section_type t, uint8_t chan_num,
> +static inline int dv_write_dif_id(enum DVSectionType t, uint8_t chan_num,
>                                    uint8_t seq_num, uint8_t dif_num,
>                                    uint8_t *buf)
>  {
> @@ -1144,14 +1144,14 @@ static void dv_format_frame(DVEncContext *c, uint8_t *buf)
>              memset(buf, 0xff, 80 * 6); /* first 6 DIF blocks are for control data */
>  
>              /* DV header: 1DIF */
> -            buf += dv_write_dif_id(dv_sect_header, chan+chan_offset, i, 0, buf);
> -            buf += dv_write_pack((c->sys->dsf ? dv_header625 : dv_header525),
> +            buf += dv_write_dif_id(DV_SECT_HEADER, chan+chan_offset, i, 0, buf);
> +            buf += dv_write_pack((c->sys->dsf ? DV_HEADER625 : DV_HEADER525),
>                                   c, buf);
>              buf += 72; /* unused bytes */
>  
>              /* DV subcode: 2DIFs */
>              for (j = 0; j < 2; j++) {
> -                buf += dv_write_dif_id(dv_sect_subcode, chan+chan_offset, i, j, buf);
> +                buf += dv_write_dif_id(DV_SECT_SUBCODE, chan+chan_offset, i, j, buf);
>                  for (k = 0; k < 6; k++)
>                      buf += dv_write_ssyb_id(k, (i < c->sys->difseg_size / 2), buf) + 5;
>                  buf += 29; /* unused bytes */
> @@ -1159,12 +1159,12 @@ static void dv_format_frame(DVEncContext *c, uint8_t *buf)
>  
>              /* DV VAUX: 3DIFS */
>              for (j = 0; j < 3; j++) {
> -                buf += dv_write_dif_id(dv_sect_vaux, chan+chan_offset, i, j, buf);
> -                buf += dv_write_pack(dv_video_source,  c, buf);
> -                buf += dv_write_pack(dv_video_control, c, buf);
> +                buf += dv_write_dif_id(DV_SECT_VAUX, chan+chan_offset, i, j, buf);
> +                buf += dv_write_pack(DV_VIDEO_SOURCE,  c, buf);
> +                buf += dv_write_pack(DV_VIDEO_CONTROL, c, buf);
>                  buf += 7 * 5;
> -                buf += dv_write_pack(dv_video_source,  c, buf);
> -                buf += dv_write_pack(dv_video_control, c, buf);
> +                buf += dv_write_pack(DV_VIDEO_SOURCE,  c, buf);
> +                buf += dv_write_pack(DV_VIDEO_CONTROL, c, buf);
>                  buf += 4 * 5 + 2; /* unused bytes */
>              }
>  
> @@ -1172,10 +1172,10 @@ static void dv_format_frame(DVEncContext *c, uint8_t *buf)
>              for (j = 0; j < 135; j++) {
>                  if (j % 15 == 0) {
>                      memset(buf, 0xff, 80);
> -                    buf += dv_write_dif_id(dv_sect_audio, chan+chan_offset, i, j/15, buf);
> +                    buf += dv_write_dif_id(DV_SECT_AUDIO, chan+chan_offset, i, j/15, buf);
>                      buf += 77; /* audio control & shuffled PCM audio */
>                  }
> -                buf += dv_write_dif_id(dv_sect_video, chan+chan_offset, i, j, buf);
> +                buf += dv_write_dif_id(DV_SECT_VIDEO, chan+chan_offset, i, j, buf);
>                  buf += 77; /* 1 video macroblock: 1 bytes control
>                              * 4 * 14 bytes Y 8x8 data
>                              * 10 bytes Cr 8x8 data
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index 24bacd5c53..303cecf9bb 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -87,26 +87,26 @@ static inline uint16_t dv_audio_12to16(uint16_t sample)
>      return result;
>  }
>  
> -static const uint8_t *dv_extract_pack(const uint8_t *frame, enum dv_pack_type t)
> +static const uint8_t *dv_extract_pack(const uint8_t *frame, enum DVPackType t)
>  {
>      int offs;
>      int c;
>  
>      for (c = 0; c < 10; c++) {
>          switch (t) {
> -        case dv_audio_source:
> +        case DV_AUDIO_SOURCE:
>              if (c&1)    offs = (80 * 6 + 80 * 16 * 0 + 3 + c*12000);
>              else        offs = (80 * 6 + 80 * 16 * 3 + 3 + c*12000);
>              break;
> -        case dv_audio_control:
> +        case DV_AUDIO_CONTROL:
>              if (c&1)    offs = (80 * 6 + 80 * 16 * 1 + 3 + c*12000);
>              else        offs = (80 * 6 + 80 * 16 * 4 + 3 + c*12000);
>              break;
> -        case dv_video_control:
> +        case DV_VIDEO_CONTROL:
>              if (c&1)    offs = (80 * 3 + 8      + c*12000);
>              else        offs = (80 * 5 + 48 + 5 + c*12000);
>              break;
> -        case dv_timecode:
> +        case DV_TIMECODE:
>              offs = (80*1 + 3 + 3);
>              break;
>          default:
> @@ -139,7 +139,7 @@ static int dv_extract_audio(const uint8_t *frame, uint8_t **ppcm,
>      const uint8_t *as_pack;
>      uint8_t *pcm, ipcm;
>  
> -    as_pack = dv_extract_pack(frame, dv_audio_source);
> +    as_pack = dv_extract_pack(frame, DV_AUDIO_SOURCE);
>      if (!as_pack)    /* No audio ? */
>          return 0;
>  
> @@ -239,7 +239,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
>      const uint8_t *as_pack;
>      int freq, stype, smpls, quant, i, ach;
>  
> -    as_pack = dv_extract_pack(frame, dv_audio_source);
> +    as_pack = dv_extract_pack(frame, DV_AUDIO_SOURCE);
>      if (!as_pack || !c->sys) {    /* No audio ? */
>          c->ach = 0;
>          return 0;
> @@ -308,7 +308,7 @@ static int dv_extract_video_info(DVDemuxContext *c, const uint8_t *frame)
>      c->vst->avg_frame_rate = av_inv_q(c->vst->time_base);
>  
>      /* finding out SAR is a little bit messy */
> -    vsc_pack = dv_extract_pack(frame, dv_video_control);
> +    vsc_pack = dv_extract_pack(frame, DV_VIDEO_CONTROL);
>      apt      = frame[4] & 0x07;
>      is16_9   = (vsc_pack && ((vsc_pack[2] & 0x07) == 0x02 ||
>                               (!apt && (vsc_pack[2] & 0x07) == 0x07)));
> @@ -328,7 +328,7 @@ static int dv_extract_timecode(DVDemuxContext* c, const uint8_t* frame, char *tc
>      // is only relevant for NTSC systems.
>      int prevent_df = c->sys->ltc_divisor == 25 || c->sys->ltc_divisor == 50;
>  
> -    tc_pack = dv_extract_pack(frame, dv_timecode);
> +    tc_pack = dv_extract_pack(frame, DV_TIMECODE);
>      if (!tc_pack)
>          return 0;
>      av_timecode_make_smpte_tc_string2(tc, av_inv_q(c->sys->time_base), AV_RB32(tc_pack + 1), prevent_df, 1);
> diff --git a/libavformat/dvenc.c b/libavformat/dvenc.c
> index 429ddcb96c..11947aa493 100644
> --- a/libavformat/dvenc.c
> +++ b/libavformat/dvenc.c
> @@ -94,7 +94,7 @@ static int dv_audio_frame_size(const AVDVProfile* sys, int frame, int sample_rat
>                                              sizeof(sys->audio_samples_dist[0]))];
>  }
>  
> -static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* buf, int channel, int seq)
> +static int dv_write_pack(enum DVPackType pack_id, DVMuxContext *c, uint8_t* buf, int channel, int seq)
>  {
>      struct tm tc;
>      time_t ct;
> @@ -103,12 +103,12 @@ static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* bu
>  
>      buf[0] = (uint8_t)pack_id;
>      switch (pack_id) {
> -    case dv_timecode:
> +    case DV_TIMECODE:
>          timecode  = av_timecode_get_smpte_from_framenum(&c->tc, c->frames);
>          timecode |= 1<<23 | 1<<15 | 1<<7 | 1<<6; // biphase and binary group flags
>          AV_WB32(buf + 1, timecode);
>          break;
> -    case dv_audio_source:  /* AAUX source pack */
> +    case DV_AUDIO_SOURCE:  /* AAUX source pack */
>          if (c->ast[channel]->codecpar->sample_rate == 44100) {
>              audio_type = 1;
>          } else if (c->ast[channel]->codecpar->sample_rate == 32000)
> @@ -132,7 +132,7 @@ static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* bu
>                    0;        /* quantization: 0 -- 16-bit linear, 1 -- 12-bit nonlinear */
>  
>          break;
> -    case dv_audio_control:
> +    case DV_AUDIO_CONTROL:
>          buf[1] = (0 << 6) | /* copy protection: 0 -- unrestricted */
>                   (1 << 4) | /* input source: 1 -- digital input */
>                   (3 << 2) | /* compression: 3 -- no information */
> @@ -147,8 +147,8 @@ static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* bu
>          buf[4] = (1 << 7) | /* reserved -- always 1 */
>                    0x7f;     /* genre category */
>          break;
> -    case dv_audio_recdate:
> -    case dv_video_recdate:  /* VAUX recording date */
> +    case DV_AUDIO_RECDATE:
> +    case DV_VIDEO_RECDATE:  /* VAUX recording date */
>          ct = c->start_time + av_rescale_rnd(c->frames, c->sys->time_base.num,
>                                              c->sys->time_base.den, AV_ROUND_DOWN);
>          brktimegm(ct, &tc);
> @@ -163,8 +163,8 @@ static int dv_write_pack(enum dv_pack_type pack_id, DVMuxContext *c, uint8_t* bu
>          buf[4] = (((tc.tm_year % 100) / 10) << 4) | /* Tens of year */
>                   (tc.tm_year % 10);                 /* Units of year */
>          break;
> -    case dv_audio_rectime:  /* AAUX recording time */
> -    case dv_video_rectime:  /* VAUX recording time */
> +    case DV_AUDIO_RECTIME:  /* AAUX recording time */
> +    case DV_VIDEO_RECTIME:  /* VAUX recording time */
>          ct = c->start_time + av_rescale_rnd(c->frames, c->sys->time_base.num,
>                                                         c->sys->time_base.den, AV_ROUND_DOWN);
>          brktimegm(ct, &tc);
> @@ -219,22 +219,22 @@ static void dv_inject_metadata(DVMuxContext *c, uint8_t* frame)
>          /* DV subcode: 2nd and 3d DIFs */
>          for (j = 80; j < 80 * 3; j += 80) {
>              for (k = 6; k < 6 * 8; k += 8)
> -                dv_write_pack(dv_timecode, c, &buf[j+k], 0, seq);
> +                dv_write_pack(DV_TIMECODE, c, &buf[j+k], 0, seq);
>  
>              if (((long)(buf-frame)/(c->sys->frame_size/(c->sys->difseg_size*c->sys->n_difchan))%c->sys->difseg_size) > 5) { /* FIXME: is this really needed ? */
> -                dv_write_pack(dv_video_recdate, c, &buf[j+14], 0, seq);
> -                dv_write_pack(dv_video_rectime, c, &buf[j+22], 0, seq);
> -                dv_write_pack(dv_video_recdate, c, &buf[j+38], 0, seq);
> -                dv_write_pack(dv_video_rectime, c, &buf[j+46], 0, seq);
> +                dv_write_pack(DV_VIDEO_RECDATE, c, &buf[j+14], 0, seq);
> +                dv_write_pack(DV_VIDEO_RECTIME, c, &buf[j+22], 0, seq);
> +                dv_write_pack(DV_VIDEO_RECDATE, c, &buf[j+38], 0, seq);
> +                dv_write_pack(DV_VIDEO_RECTIME, c, &buf[j+46], 0, seq);
>              }
>          }
>  
>          /* DV VAUX: 4th, 5th and 6th 3DIFs */
>          for (j = 80*3 + 3; j < 80*6; j += 80) {
> -            dv_write_pack(dv_video_recdate, c, &buf[j+5* 2], 0, seq);
> -            dv_write_pack(dv_video_rectime, c, &buf[j+5* 3], 0, seq);
> -            dv_write_pack(dv_video_recdate, c, &buf[j+5*11], 0, seq);
> -            dv_write_pack(dv_video_rectime, c, &buf[j+5*12], 0, seq);
> +            dv_write_pack(DV_VIDEO_RECDATE, c, &buf[j+5* 2], 0, seq);
> +            dv_write_pack(DV_VIDEO_RECTIME, c, &buf[j+5* 3], 0, seq);
> +            dv_write_pack(DV_VIDEO_RECDATE, c, &buf[j+5*11], 0, seq);
> +            dv_write_pack(DV_VIDEO_RECTIME, c, &buf[j+5*12], 0, seq);
>          }
>      }
>  }

LGTM.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 10/18] lavc/dv.h: move encoder/decoder-specific code to a new header
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 10/18] lavc/dv.h: move encoder/decoder-specific code to a new header Anton Khirnov
@ 2022-08-24 12:52   ` Andreas Rheinhardt
  0 siblings, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 12:52 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> dv.h is also used by libavformat, so avoid exposing encoder/decoder code
> to it.
> ---
>  libavcodec/dv.c          |  8 ++++--
>  libavcodec/dv.h          | 34 ----------------------
>  libavcodec/dv_internal.h | 62 ++++++++++++++++++++++++++++++++++++++++
>  libavcodec/dvdec.c       |  1 +
>  libavcodec/dvenc.c       |  1 +
>  5 files changed, 70 insertions(+), 36 deletions(-)
>  create mode 100644 libavcodec/dv_internal.h
> 
> diff --git a/libavcodec/dv.c b/libavcodec/dv.c
> index b5e54de5dd..eb49978ad8 100644
> --- a/libavcodec/dv.c
> +++ b/libavcodec/dv.c
> @@ -38,8 +38,12 @@
>   * DV codec.
>   */
>  
> -#include "avcodec.h"
> -#include "dv.h"
> +#include <stdint.h>
> +
> +#include "libavutil/pixfmt.h"
> +
> +#include "dv_internal.h"
> +#include "dv_profile.h"
>  
>  static inline void dv_calc_mb_coordinates(const AVDVProfile *d, int chan,
>                                            int seq, int slot, uint16_t *tbl)
> diff --git a/libavcodec/dv.h b/libavcodec/dv.h
> index 859a4e6545..535f01cf0b 100644
> --- a/libavcodec/dv.h
> +++ b/libavcodec/dv.h
> @@ -27,13 +27,6 @@
>  #ifndef AVCODEC_DV_H
>  #define AVCODEC_DV_H
>  
> -#include "dv_profile.h"
> -
> -typedef struct DVwork_chunk {
> -    uint16_t buf_offset;
> -    uint16_t mb_coordinates[5];
> -} DVwork_chunk;
> -
>  enum dv_section_type {
>      dv_sect_header  = 0x1f,
>      dv_sect_subcode = 0x3f,
> @@ -72,31 +65,4 @@ enum dv_pack_type {
>   */
>  #define DV_MAX_BPM 8
>  
> -int ff_dv_init_dynamic_tables(DVwork_chunk *work_chunks, const AVDVProfile *d);
> -
> -static inline int dv_work_pool_size(const AVDVProfile *d)
> -{
> -    int size = d->n_difchan * d->difseg_size * 27;
> -    if (DV_PROFILE_IS_1080i50(d))
> -        size -= 3 * 27;
> -    if (DV_PROFILE_IS_720p50(d))
> -        size -= 4 * 27;
> -    return size;
> -}
> -
> -static inline void dv_calculate_mb_xy(const AVDVProfile *sys,
> -                                      const uint8_t *buf,
> -                                      const DVwork_chunk *work_chunk,
> -                                      int m, int *mb_x, int *mb_y)
> -{
> -    *mb_x = work_chunk->mb_coordinates[m] & 0xff;
> -    *mb_y = work_chunk->mb_coordinates[m] >> 8;
> -
> -    /* We work with 720p frames split in half.
> -     * The odd half-frame (chan == 2,3) is displaced :-( */
> -    if (sys->height == 720 && !(buf[1] & 0x0C))
> -        /* shifting the Y coordinate down by 72/2 macro blocks */
> -        *mb_y -= (*mb_y > 17) ? 18 : -72;
> -}
> -
>  #endif /* AVCODEC_DV_H */
> diff --git a/libavcodec/dv_internal.h b/libavcodec/dv_internal.h
> new file mode 100644
> index 0000000000..4b4151c88d
> --- /dev/null
> +++ b/libavcodec/dv_internal.h
> @@ -0,0 +1,62 @@
> +/*
> + * DV encoder/decoder shared code
> + * Copyright (c) 2002 Fabrice Bellard
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#ifndef AVCODEC_DV_INTERNAL_H
> +#define AVCODEC_DV_INTERNAL_H
> +
> +#include <stdint.h>
> +
> +#include "dv.h"
> +#include "dv_profile.h"
> +
> +typedef struct DVwork_chunk {
> +    uint16_t buf_offset;
> +    uint16_t mb_coordinates[5];
> +} DVwork_chunk;
> +
> +int ff_dv_init_dynamic_tables(DVwork_chunk *work_chunks, const AVDVProfile *d);
> +
> +static inline int dv_work_pool_size(const AVDVProfile *d)
> +{
> +    int size = d->n_difchan * d->difseg_size * 27;
> +    if (DV_PROFILE_IS_1080i50(d))
> +        size -= 3 * 27;
> +    if (DV_PROFILE_IS_720p50(d))
> +        size -= 4 * 27;
> +    return size;
> +}
> +
> +static inline void dv_calculate_mb_xy(const AVDVProfile *sys,
> +                                      const uint8_t *buf,
> +                                      const DVwork_chunk *work_chunk,
> +                                      int m, int *mb_x, int *mb_y)
> +{
> +    *mb_x = work_chunk->mb_coordinates[m] & 0xff;
> +    *mb_y = work_chunk->mb_coordinates[m] >> 8;
> +
> +    /* We work with 720p frames split in half.
> +     * The odd half-frame (chan == 2,3) is displaced :-( */
> +    if (sys->height == 720 && !(buf[1] & 0x0C))
> +        /* shifting the Y coordinate down by 72/2 macro blocks */
> +        *mb_y -= (*mb_y > 17) ? 18 : -72;
> +}
> +
> +#endif // AVCODEC_DV_INTERNAL_H
> diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
> index 444b137488..297bf7f2fb 100644
> --- a/libavcodec/dvdec.c
> +++ b/libavcodec/dvdec.c
> @@ -45,6 +45,7 @@
>  #include "avcodec.h"
>  #include "codec_internal.h"
>  #include "dv.h"
> +#include "dv_internal.h"
>  #include "dv_profile_internal.h"
>  #include "dvdata.h"
>  #include "get_bits.h"
> diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
> index 19291724e0..1f0374b865 100644
> --- a/libavcodec/dvenc.c
> +++ b/libavcodec/dvenc.c
> @@ -38,6 +38,7 @@
>  #include "avcodec.h"
>  #include "codec_internal.h"
>  #include "dv.h"
> +#include "dv_internal.h"
>  #include "dv_profile_internal.h"
>  #include "dv_tablegen.h"
>  #include "encode.h"

LGTM (I pondered doing something like this, but couldn't come up with a
good name for the header. I was fixated on "dv_codecs.h" given that this
would be the common code for the codecs, but that sounded strange.)

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 07/18] lavc/dv: do not pass DVVideoContext to dv_calculate_mb_xy()
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 07/18] lavc/dv: do not pass DVVideoContext to dv_calculate_mb_xy() Anton Khirnov
@ 2022-08-24 12:57   ` Andreas Rheinhardt
  0 siblings, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 12:57 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> Pass the two variables needed from it directly.
> 
> This is done in preparation to splitting DVVideoContext.
> ---
>  libavcodec/dv.h    | 5 +++--
>  libavcodec/dvdec.c | 2 +-
>  libavcodec/dvenc.c | 2 +-
>  3 files changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/libavcodec/dv.h b/libavcodec/dv.h
> index 286b267de2..6430688795 100644
> --- a/libavcodec/dv.h
> +++ b/libavcodec/dv.h
> @@ -107,7 +107,8 @@ static inline int dv_work_pool_size(const AVDVProfile *d)
>      return size;
>  }
>  
> -static inline void dv_calculate_mb_xy(const DVVideoContext *s,
> +static inline void dv_calculate_mb_xy(const AVDVProfile *sys,
> +                                      const uint8_t *buf,
>                                        const DVwork_chunk *work_chunk,
>                                        int m, int *mb_x, int *mb_y)
>  {
> @@ -116,7 +117,7 @@ static inline void dv_calculate_mb_xy(const DVVideoContext *s,
>  
>      /* We work with 720p frames split in half.
>       * The odd half-frame (chan == 2,3) is displaced :-( */
> -    if (s->sys->height == 720 && !(s->buf[1] & 0x0C))
> +    if (sys->height == 720 && !(buf[1] & 0x0C))
>          /* shifting the Y coordinate down by 72/2 macro blocks */
>          *mb_y -= (*mb_y > 17) ? 18 : -72;
>  }
> diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
> index 1e2c097ed0..7f9e4eb0c0 100644
> --- a/libavcodec/dvdec.c
> +++ b/libavcodec/dvdec.c
> @@ -535,7 +535,7 @@ retry:
>      block = &sblock[0][0];
>      mb    = mb_data;
>      for (mb_index = 0; mb_index < 5; mb_index++) {
> -        dv_calculate_mb_xy(s, work_chunk, mb_index, &mb_x, &mb_y);
> +        dv_calculate_mb_xy(s->sys, s->buf, work_chunk, mb_index, &mb_x, &mb_y);
>  
>          /* idct_put'ting luminance */
>          if ((s->sys->pix_fmt == AV_PIX_FMT_YUV420P)                      ||
> diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
> index 712ca325de..c12fce9e8b 100644
> --- a/libavcodec/dvenc.c
> +++ b/libavcodec/dvenc.c
> @@ -866,7 +866,7 @@ static int dv_encode_video_segment(AVCodecContext *avctx, void *arg)
>      p = dif = &s->buf[work_chunk->buf_offset * 80];
>      enc_blk = &enc_blks[0];
>      for (mb_index = 0; mb_index < 5; mb_index++) {
> -        dv_calculate_mb_xy(s, work_chunk, mb_index, &mb_x, &mb_y);
> +        dv_calculate_mb_xy(s->sys, s->buf, work_chunk, mb_index, &mb_x, &mb_y);
>  
>          qnos[mb_index] = DV_PROFILE_IS_HD(s->sys) ? 1 : 15;
>  

LGTM.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 13/18] lavf/dv: return a meaningful error code from avpriv_dv_produce_packet()
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 13/18] lavf/dv: return a meaningful error code from avpriv_dv_produce_packet() Anton Khirnov
@ 2022-08-24 13:07   ` Andreas Rheinhardt
  2022-08-31  2:48     ` [FFmpeg-devel] [PATCH] " Anton Khirnov
  0 siblings, 1 reply; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 13:07 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> ---
>  libavdevice/iec61883.c | 2 +-
>  libavformat/dv.c       | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/libavdevice/iec61883.c b/libavdevice/iec61883.c
> index 7223ba2e64..a4b4ce2ef8 100644
> --- a/libavdevice/iec61883.c
> +++ b/libavdevice/iec61883.c
> @@ -209,7 +209,7 @@ static int iec61883_parse_queue_dv(struct iec61883_data *dv, AVPacket *pkt)
>      dv->packets--;
>  
>      if (size < 0)
> -        return -1;
> +        return size;

Did you test this? iec61883_read_packet() explicitly checks for -1 and
not for < 0 for failure. It should work if you also modify
iec61883_read_packet(), but I never changed this because I don't like to
change code that I can't test.

- Andreas

>  
>      if (av_packet_from_data(pkt, pkt->data, pkt->size) < 0) {
>          av_freep(&pkt->data);
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index f88fe62349..c888111789 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -404,7 +404,7 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
>      if (buf_size < DV_PROFILE_BYTES ||
>          !(c->sys = av_dv_frame_profile(c->sys, buf, buf_size)) ||
>          buf_size < c->sys->frame_size) {
> -        return -1;   /* Broken frame, or not enough data */
> +        return AVERROR_INVALIDDATA;
>      }
>  
>      /* Queueing audio packet */

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 15/18] lavf/dv: set non-changing AVStream fields only once
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 15/18] lavf/dv: set non-changing AVStream fields only once Anton Khirnov
@ 2022-08-24 13:13   ` Andreas Rheinhardt
  0 siblings, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 13:13 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> ---
>  libavformat/dv.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index 24d6897da5..f65c2d596f 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -278,6 +278,8 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
>              avpriv_set_pts_info(c->ast[i], 64, c->sys->time_base.num, c->sys->time_base.den);
>              c->ast[i]->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
>              c->ast[i]->codecpar->codec_id   = AV_CODEC_ID_PCM_S16LE;
> +            c->ast[i]->codecpar->ch_layout  = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
> +            c->ast[i]->start_time           = 0;
>  
>              c->audio_pkt[i].size         = 0;
>              c->audio_pkt[i].data         = c->audio_buf[i];
> @@ -288,9 +290,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
>              c->audio_pkt[i].pos          = -1;
>          }
>          c->ast[i]->codecpar->sample_rate    = dv_audio_frequency[freq];
> -        c->ast[i]->codecpar->ch_layout      = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
>          c->ast[i]->codecpar->bit_rate       = 2 * dv_audio_frequency[freq] * 16;
> -        c->ast[i]->start_time            = 0;
>      }
>      c->ach = ach;
>  

LGTM.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 16/18] lavf/dv: set audio bitrate only at stream creation
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 16/18] lavf/dv: set audio bitrate only at stream creation Anton Khirnov
@ 2022-08-24 13:13   ` Andreas Rheinhardt
  2022-08-24 14:33   ` Andreas Rheinhardt
  2022-08-25 10:23   ` Anton Khirnov
  2 siblings, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 13:13 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> Demuxers are not supposed to update AVCodecParameters after the stream
> was seen by the caller. This value is not important enough to support
> dynamic updates for.
> ---
>  libavformat/dv.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index f65c2d596f..9c8b0a262c 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -280,6 +280,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
>              c->ast[i]->codecpar->codec_id   = AV_CODEC_ID_PCM_S16LE;
>              c->ast[i]->codecpar->ch_layout  = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
>              c->ast[i]->start_time           = 0;
> +            c->ast[i]->codecpar->bit_rate   = 2 * dv_audio_frequency[freq] * 16;
>  
>              c->audio_pkt[i].size         = 0;
>              c->audio_pkt[i].data         = c->audio_buf[i];
> @@ -290,7 +291,6 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
>              c->audio_pkt[i].pos          = -1;
>          }
>          c->ast[i]->codecpar->sample_rate    = dv_audio_frequency[freq];
> -        c->ast[i]->codecpar->bit_rate       = 2 * dv_audio_frequency[freq] * 16;
>      }
>      c->ach = ach;
>  

LGTM.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 17/18] lavf/dv: do not update AVCodecParameters.sample_rate while demuxing
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 17/18] lavf/dv: do not update AVCodecParameters.sample_rate while demuxing Anton Khirnov
@ 2022-08-24 14:20   ` Andreas Rheinhardt
  2022-08-31  3:11   ` Anton Khirnov
  1 sibling, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 14:20 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> Demuxers are not allowed to do this and few callers, if any, will handle
> this correctly. Send the AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE side data
> instead.
> ---
>  libavformat/dv.c | 49 +++++++++++++++++++++++++++++++++---------------
>  1 file changed, 34 insertions(+), 15 deletions(-)
> 
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index 9c8b0a262c..ffed1a7a90 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -33,6 +33,7 @@
>  
>  #include <time.h>
>  #include "avformat.h"
> +#include "demux.h"
>  #include "internal.h"
>  #include "libavcodec/dv_profile.h"
>  #include "libavcodec/dv.h"
> @@ -46,7 +47,7 @@
>  #if CONFIG_DV_DEMUXER
>  
>  // Must be kept in sync with AVPacket
> -struct DVPacket {
> +typedef struct DVPacket {
>      int64_t  pts;
>      uint8_t *data;
>      int      size;
> @@ -54,7 +55,10 @@ struct DVPacket {
>      int      flags;
>      int64_t  pos;
>      int64_t  duration;
> -};
> +
> +    int sample_rate;
> +    int last_sample_rate;
> +} DVPacket;
>  
>  struct DVDemuxContext {
>      const AVDVProfile*  sys;    /* Current DV profile. E.g.: 525/60, 625/50 */
> @@ -237,7 +241,7 @@ static int dv_extract_audio(const uint8_t *frame, uint8_t **ppcm,
>  static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
>  {
>      const uint8_t *as_pack;
> -    int freq, stype, smpls, quant, i, ach;
> +    int freq, stype, smpls, quant, i, ach, sr;
>  
>      as_pack = dv_extract_pack(frame, DV_AUDIO_SOURCE);
>      if (!as_pack || !c->sys) {    /* No audio ? */
> @@ -255,6 +259,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
>                 "Unrecognized audio sample rate index (%d)\n", freq);
>          return 0;
>      }
> +    sr = dv_audio_frequency[freq];
>  
>      if (stype > 3) {
>          av_log(c->fctx, AV_LOG_ERROR, "stype %d is invalid\n", stype);
> @@ -280,7 +285,10 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
>              c->ast[i]->codecpar->codec_id   = AV_CODEC_ID_PCM_S16LE;
>              c->ast[i]->codecpar->ch_layout  = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
>              c->ast[i]->start_time           = 0;
> -            c->ast[i]->codecpar->bit_rate   = 2 * dv_audio_frequency[freq] * 16;
> +            c->ast[i]->codecpar->bit_rate   = 2 * sr * 16;
> +
> +            c->ast[i]->codecpar->sample_rate = sr;
> +            c->audio_pkt[i].last_sample_rate = sr;
>  
>              c->audio_pkt[i].size         = 0;
>              c->audio_pkt[i].data         = c->audio_buf[i];
> @@ -290,7 +298,8 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
>              c->audio_pkt[i].duration     = 0;
>              c->audio_pkt[i].pos          = -1;
>          }
> -        c->ast[i]->codecpar->sample_rate    = dv_audio_frequency[freq];
> +
> +        c->audio_pkt[i].sample_rate = sr;
>      }
>      c->ach = ach;
>  
> @@ -380,16 +389,26 @@ int avpriv_dv_get_packet(DVDemuxContext *c, AVPacket *pkt)
>  
>      for (i = 0; i < c->ach; i++) {
>          if (c->ast[i] && c->audio_pkt[i].size) {
> -            pkt->size         = c->audio_pkt[i].size;
> -            pkt->data         = c->audio_pkt[i].data;
> -            pkt->stream_index = c->audio_pkt[i].stream_index;
> -            pkt->flags        = c->audio_pkt[i].flags;
> -            pkt->pts          = c->audio_pkt[i].pts;
> -            pkt->duration     = c->audio_pkt[i].duration;
> -            pkt->pos          = c->audio_pkt[i].pos;
> -
> -            c->audio_pkt[i].size = 0;
> -            size                 = pkt->size;
> +            DVPacket *dpkt = &c->audio_pkt[i];
> +
> +            pkt->size         = dpkt->size;
> +            pkt->data         = dpkt->data;
> +            pkt->stream_index = dpkt->stream_index;
> +            pkt->flags        = dpkt->flags;
> +            pkt->pts          = dpkt->pts;
> +            pkt->duration     = dpkt->duration;
> +            pkt->pos          = dpkt->pos;
> +
> +            dpkt->size = 0;
> +            size       = pkt->size;
> +
> +            if (dpkt->last_sample_rate != dpkt->sample_rate) {
> +                int ret = ff_add_param_change(pkt, 0, 0, dpkt->sample_rate, 0, 0);
> +                if (ret < 0)
> +                    return ret;
> +                dpkt->last_sample_rate = dpkt->sample_rate;
> +            }
> +
>              break;
>          }
>      }

1. One of the callers which did not handle this correctly is the mov
demuxer: A sample rate update would not propagate to the user, because
it uses a separate AVFormatContext for it. This should be mentioned in
the commit message. (Btw: I don't see anything that guarantees that the
samplerate and timebase of the inner demuxer and the sample rate and
time base reported to the user (presumably taken from mov structures)
coincide. Given that dv_fctx and dv_demux are part of MOVContext, they
would also leak if it would be attempted to allocate them multiple
times. Do you see anything that guarantees that they will not be
allocated multiple times?)
2. In case of ff_add_param_change() failure, users will just interpret
that as "no more packets available", won't they? This might be wrong,
but it is not problematic.
3. Have you tested this with a sample with actual parameter changes?

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 16/18] lavf/dv: set audio bitrate only at stream creation
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 16/18] lavf/dv: set audio bitrate only at stream creation Anton Khirnov
  2022-08-24 13:13   ` Andreas Rheinhardt
@ 2022-08-24 14:33   ` Andreas Rheinhardt
  2022-08-25 10:23   ` Anton Khirnov
  2 siblings, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 14:33 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> Demuxers are not supposed to update AVCodecParameters after the stream
> was seen by the caller. This value is not important enough to support
> dynamic updates for.
> ---
>  libavformat/dv.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index f65c2d596f..9c8b0a262c 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -280,6 +280,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
>              c->ast[i]->codecpar->codec_id   = AV_CODEC_ID_PCM_S16LE;
>              c->ast[i]->codecpar->ch_layout  = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
>              c->ast[i]->start_time           = 0;
> +            c->ast[i]->codecpar->bit_rate   = 2 * dv_audio_frequency[freq] * 16;
>  
>              c->audio_pkt[i].size         = 0;
>              c->audio_pkt[i].data         = c->audio_buf[i];
> @@ -290,7 +291,6 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
>              c->audio_pkt[i].pos          = -1;
>          }
>          c->ast[i]->codecpar->sample_rate    = dv_audio_frequency[freq];
> -        c->ast[i]->codecpar->bit_rate       = 2 * dv_audio_frequency[freq] * 16;
>      }
>      c->ach = ach;
>  

FYI: dv_extract_video_info() also sets bit_rate (and avg_frame_rate and
sample_aspect_ratio) on every packet.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 18/18] lavf/dv: do not continuously set stream timebase
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 18/18] lavf/dv: do not continuously set stream timebase Anton Khirnov
@ 2022-08-24 14:42   ` Andreas Rheinhardt
  2022-08-25 19:04   ` Marton Balint
  1 sibling, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 14:42 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> The code will call avpriv_set_pts_info() for each video frame, possibly
> setting a different timebase if the stream framerate changes. This
> violates API conventions, as the timebase is supposed to stay constant
> after stream creation.
> 
> Change the demuxer to set a single timebase that is granular enough to
> handle all supported DV framerates.
> 
> The seek tests change slightly because the new timebase is more
> granular.
> ---
>  libavformat/dv.c                  | 16 ++++++++++++----
>  tests/ref/seek/lavf-dv            | 30 +++++++++++++++---------------
>  tests/ref/seek/vsynth_lena-dv     | 24 ++++++++++++------------
>  tests/ref/seek/vsynth_lena-dv-411 | 24 ++++++++++++------------
>  tests/ref/seek/vsynth_lena-dv-50  | 24 ++++++++++++------------
>  5 files changed, 63 insertions(+), 55 deletions(-)
> 
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index ffed1a7a90..e2f7a6d313 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -69,6 +69,8 @@ struct DVDemuxContext {
>      uint8_t           audio_buf[4][8192];
>      int               ach;
>      int               frames;
> +
> +    int64_t           next_pts;
>  };
>  
>  static inline uint16_t dv_audio_12to16(uint16_t sample)
> @@ -314,8 +316,6 @@ static int dv_extract_video_info(DVDemuxContext *c, const uint8_t *frame)
>  
>      par = c->vst->codecpar;
>  
> -    avpriv_set_pts_info(c->vst, 64, c->sys->time_base.num,
> -                        c->sys->time_base.den);
>      c->vst->avg_frame_rate = av_inv_q(c->vst->time_base);

This will now set the avg_frame_rate to 60000fps. Obviously wrong.
Anyway, this field should probably not be set for every frame.

>  
>      /* finding out SAR is a little bit messy */
> @@ -360,6 +360,8 @@ static int dv_init_demux(AVFormatContext *s, DVDemuxContext *c)
>      c->vst->codecpar->bit_rate   = 25000000;
>      c->vst->start_time        = 0;
>  
> +    avpriv_set_pts_info(c->vst, 64, 1, 60000);
> +
>      /* Audio streams are added later as they are encountered. */
>      s->ctx_flags |= AVFMTCTX_NOHEADER;
>  
> @@ -463,7 +465,10 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
>          pkt->size         = size;
>          pkt->flags       |= AV_PKT_FLAG_KEY;
>          pkt->stream_index = c->vst->index;
> -        pkt->pts          = c->frames;
> +        pkt->pts          = c->next_pts;
> +        pkt->duration     = av_rescale_q(1, c->sys->time_base, c->vst->time_base);
> +
> +        c->next_pts += pkt->duration;
>      }
>  
>      c->frames++;
> @@ -477,11 +482,12 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
>      // FIXME: sys may be wrong if last dv_read_packet() failed (buffer is junk)
>      FFFormatContext *const si = ffformatcontext(s);
>      const int frame_size = c->sys->frame_size;
> +    int64_t  frame_count = av_rescale_q(timestamp, c->vst->time_base, c->sys->time_base);
>      int64_t offset;
>      int64_t size       = avio_size(s->pb) - si->data_offset;
>      int64_t max_offset = ((size - 1) / frame_size) * frame_size;
>  
> -    offset = frame_size * timestamp;
> +    offset = frame_size * frame_count;
>  
>      if (size >= 0 && offset > max_offset)
>          offset = max_offset;
> @@ -494,6 +500,8 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
>  void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset)
>  {
>      c->frames = frame_offset;
> +    if (c->sys)
> +        c->next_pts = av_rescale_q(frame_offset, c->sys->time_base, c->vst->time_base);
>      c->audio_pkt[0].size = c->audio_pkt[1].size = 0;
>      c->audio_pkt[2].size = c->audio_pkt[3].size = 0;
>  }
> diff --git a/tests/ref/seek/lavf-dv b/tests/ref/seek/lavf-dv
> index f63e4460be..356f05546b 100644
> --- a/tests/ref/seek/lavf-dv
> +++ b/tests/ref/seek/lavf-dv
> @@ -3,50 +3,50 @@ ret: 0         st:-1 flags:0  ts:-1.000000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.894167
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
>  ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st: 1 flags:0  ts: 2.560000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000

This is IMO more than "slightly".

>  ret: 0         st: 1 flags:1  ts: 1.480000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.365002
>  ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
>  ret: 0         st:-1 flags:1  ts:-0.740831
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.160000
> +ret: 0         st: 0 flags:0  ts: 2.153333
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.040000
> +ret: 0         st: 0 flags:1  ts: 1.047500
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
>  ret: 0         st: 1 flags:0  ts:-0.040000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st: 1 flags:1  ts: 2.840000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 1.730004
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
>  ret: 0         st:-1 flags:1  ts: 0.624171
>  ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
>  ret: 0         st: 1 flags:0  ts: 1.320000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st: 1 flags:1  ts: 0.200000
> -ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts:-0.904994
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.989173
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.880000
> +ret: 0         st: 0 flags:0  ts: 0.883333
>  ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.240000
> +ret: 0         st: 0 flags:1  ts:-0.222500
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st: 1 flags:0  ts: 2.680000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st: 1 flags:1  ts: 1.560000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.460008
>  ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
>  ret: 0         st:-1 flags:1  ts:-0.645825
> diff --git a/tests/ref/seek/vsynth_lena-dv b/tests/ref/seek/vsynth_lena-dv
> index d318794157..afed1fbe72 100644
> --- a/tests/ref/seek/vsynth_lena-dv
> +++ b/tests/ref/seek/vsynth_lena-dv
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.894167
>  ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
>  ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 2.576668
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.470835
>  ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
>  ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 2.153336
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.047503
>  ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 1.730004
>  ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
>  ret: 0         st:-1 flags:1  ts: 0.624171
>  ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 1.306672
>  ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
>  ret: 0         st:-1 flags:1  ts: 0.200839
>  ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.883340
>  ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
>  ret: 0         st:-1 flags:1  ts:-0.222493
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
>  ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.460008
>  ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
> diff --git a/tests/ref/seek/vsynth_lena-dv-411 b/tests/ref/seek/vsynth_lena-dv-411
> index d318794157..afed1fbe72 100644
> --- a/tests/ref/seek/vsynth_lena-dv-411
> +++ b/tests/ref/seek/vsynth_lena-dv-411
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.894167
>  ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
>  ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 2.576668
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.470835
>  ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
>  ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 2.153336
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.047503
>  ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 1.730004
>  ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
>  ret: 0         st:-1 flags:1  ts: 0.624171
>  ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 1.306672
>  ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
>  ret: 0         st:-1 flags:1  ts: 0.200839
>  ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.883340
>  ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
>  ret: 0         st:-1 flags:1  ts:-0.222493
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
>  ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.460008
>  ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
> diff --git a/tests/ref/seek/vsynth_lena-dv-50 b/tests/ref/seek/vsynth_lena-dv-50
> index fae6d1b225..3b1d69ffa6 100644
> --- a/tests/ref/seek/vsynth_lena-dv-50
> +++ b/tests/ref/seek/vsynth_lena-dv-50
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
>  ret: 0         st:-1 flags:1  ts: 1.894167
>  ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:13536000 size:288000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
>  ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:5760000 size:288000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
>  ret: 0         st:-1 flags:0  ts: 2.576668
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
>  ret: 0         st:-1 flags:1  ts: 1.470835
>  ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:10656000 size:288000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
>  ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:2592000 size:288000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
>  ret: 0         st:-1 flags:0  ts: 2.153336
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
>  ret: 0         st:-1 flags:1  ts: 1.047503
>  ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:7488000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
>  ret: 0         st:-1 flags:0  ts: 1.730004
>  ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:12384000 size:288000
>  ret: 0         st:-1 flags:1  ts: 0.624171
>  ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:4608000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
>  ret: 0         st:-1 flags:0  ts: 1.306672
>  ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:9504000 size:288000
>  ret: 0         st:-1 flags:1  ts: 0.200839
>  ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos:1440000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
>  ret: 0         st:-1 flags:0  ts: 0.883340
>  ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:6336000 size:288000
>  ret: 0         st:-1 flags:1  ts:-0.222493
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
>  ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:11232000 size:288000
>  ret: 0         st:-1 flags:0  ts: 0.460008
>  ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:3456000 size:288000

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 12/18] lavf/dv: make returning the video packet optional
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 12/18] lavf/dv: make returning the video packet optional Anton Khirnov
@ 2022-08-24 16:03   ` Andreas Rheinhardt
  2022-08-31  2:39   ` Anton Khirnov
  1 sibling, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 16:03 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> The mov demuxer only returns DV audio, video packets are discarded.
> 
> It first reads the data to be parsed into a packet. Then both this
> packet and the pointer to its data are passed together to
> avpriv_dv_produce_packet(), which parses the data and partially
> overwrites the packet. This is confusing and potentially dangerous, so
> just pass NULL and avoid pointless packet modification.
> ---
>  libavformat/dv.c  | 19 +++++++++++--------
>  libavformat/mov.c |  2 +-
>  2 files changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index 303cecf9bb..f88fe62349 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -430,14 +430,17 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
>          }
>      }
>  
> -    /* Now it's time to return video packet */
> -    size = dv_extract_video_info(c, buf);
> -    pkt->data         = buf;
> -    pkt->pos          = pos;
> -    pkt->size         = size;
> -    pkt->flags       |= AV_PKT_FLAG_KEY;
> -    pkt->stream_index = c->vst->index;
> -    pkt->pts          = c->frames;
> +    /* return the video packet, if the caller wants it */
> +    if (pkt) {
> +        size = dv_extract_video_info(c, buf);
> +
> +        pkt->data         = buf;
> +        pkt->pos          = pos;
> +        pkt->size         = size;
> +        pkt->flags       |= AV_PKT_FLAG_KEY;
> +        pkt->stream_index = c->vst->index;
> +        pkt->pts          = c->frames;
> +    }
>  
>      c->frames++;
>  
> diff --git a/libavformat/mov.c b/libavformat/mov.c
> index 1d8c5b2904..a2b429e52f 100644
> --- a/libavformat/mov.c
> +++ b/libavformat/mov.c
> @@ -8768,7 +8768,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
>          }
>  #if CONFIG_DV_DEMUXER
>          if (mov->dv_demux && sc->dv_audio_container) {
> -            ret = avpriv_dv_produce_packet(mov->dv_demux, pkt, pkt->data, pkt->size, pkt->pos);
> +            ret = avpriv_dv_produce_packet(mov->dv_demux, NULL, pkt->data, pkt->size, pkt->pos);
>              av_packet_unref(pkt);
>              if (ret < 0)
>                  return ret;

1. LGTM.
2. The way mov handles dv audio is very broken:
a) I don't see anything that guarantees that the
samplerate of the inner demuxer and the sample rate reported to the user
(presumably taken from mov structures) coincide.
b) dv_fctx and dv_demux are part of MOVContext, not MOVStreamContext. If
there were multiple MOVStreams with dv-audio, the older dv_fctx and
dv_demux would leak. Do you see anything that guarantees that they will
 only be at most one MOVStream for dv-audio?
c) The former would be easily fixable by moving the fields to
MOVStreamContext. But there is actually another bug: The underlying dv
stream can contain multiple audio streams in this one MOVStream and only
the first of these is forwarded.
https://samples.ffmpeg.org/ffmpeg-bugs/trac/ticket4671/dir1.tar.bz2
contains a sample where this actually occurs: The DV stream has two
stereo tracks, only the first of which is forwarded (use -enable_drefs 1
to be able to play it; the non-forwarded seems to be silent in this
case). Are these actually independent audios or are these stereo pairs
part of a single streams with more than two channels?

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 03/18] lavf/dv: always provide avpriv_dv_* symbols
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 03/18] lavf/dv: always provide avpriv_dv_* symbols Anton Khirnov
@ 2022-08-24 16:25   ` Andreas Rheinhardt
  2022-08-25  9:47   ` Anton Khirnov
  1 sibling, 0 replies; 45+ messages in thread
From: Andreas Rheinhardt @ 2022-08-24 16:25 UTC (permalink / raw)
  To: ffmpeg-devel

Anton Khirnov:
> They are used from libavdevice.
> ---
>  configure            |  1 +
>  libavformat/Makefile |  3 +--
>  libavformat/dv.c     | 23 +++++++++++++++++++++++
>  3 files changed, 25 insertions(+), 2 deletions(-)
> 
> diff --git a/configure b/configure
> index ea50c94002..f4c4ab0484 100755
> --- a/configure
> +++ b/configure
> @@ -3530,6 +3530,7 @@ gdigrab_indev_deps="CreateDIBSection"
>  gdigrab_indev_extralibs="-lgdi32"
>  gdigrab_indev_select="bmp_decoder"
>  iec61883_indev_deps="libiec61883"
> +iec61883_indev_select="dv_demuxer"
>  jack_indev_deps="libjack"
>  jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
>  kmsgrab_indev_deps="libdrm"
> diff --git a/libavformat/Makefile b/libavformat/Makefile
> index f67a99f839..684bad0eb4 100644
> --- a/libavformat/Makefile
> +++ b/libavformat/Makefile
> @@ -13,6 +13,7 @@ OBJS = allformats.o         \
>         demux.o              \
>         demux_utils.o        \
>         dump.o               \
> +       dv.o                 \
>         format.o             \
>         id3v1.o              \
>         id3v2.o              \
> @@ -184,7 +185,6 @@ OBJS-$(CONFIG_DSS_DEMUXER)               += dss.o
>  OBJS-$(CONFIG_DTSHD_DEMUXER)             += dtshddec.o
>  OBJS-$(CONFIG_DTS_DEMUXER)               += dtsdec.o rawdec.o
>  OBJS-$(CONFIG_DTS_MUXER)                 += rawenc.o
> -OBJS-$(CONFIG_DV_DEMUXER)                += dv.o
>  OBJS-$(CONFIG_DV_MUXER)                  += dvenc.o
>  OBJS-$(CONFIG_DVBSUB_DEMUXER)            += dvbsub.o rawdec.o
>  OBJS-$(CONFIG_DVBTXT_DEMUXER)            += dvbtxt.o rawdec.o
> @@ -711,7 +711,6 @@ SHLIBOBJS-$(CONFIG_RTP_MUXER)            += golomb_tab.o jpegtables.o \
>  SHLIBOBJS-$(CONFIG_SPDIF_MUXER)          += dca_sample_rate_tab.o
>  
>  # libavdevice dependencies
> -OBJS-$(CONFIG_IEC61883_INDEV)            += dv.o
>  
>  # Windows resource file
>  SHLIBOBJS-$(HAVE_GNU_WINDRES)            += avformatres.o
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index 1dadaf6e62..24bacd5c53 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -28,6 +28,9 @@
>   * License along with FFmpeg; if not, write to the Free Software
>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>   */
> +
> +#include "config_components.h"
> +
>  #include <time.h>
>  #include "avformat.h"
>  #include "internal.h"
> @@ -40,6 +43,8 @@
>  #include "dv.h"
>  #include "libavutil/avassert.h"
>  
> +#if CONFIG_DV_DEMUXER
> +
>  // Must be kept in sync with AVPacket
>  struct DVPacket {
>      int64_t  pts;
> @@ -647,3 +652,21 @@ const AVInputFormat ff_dv_demuxer = {
>      .read_seek      = dv_read_seek,
>      .extensions     = "dv,dif",
>  };
> +
> +#else // CONFIG_DV_DEMUXER
> +DVDemuxContext *avpriv_dv_init_demux(AVFormatContext *s)
> +{
> +    return NULL;
> +}
> +
> +int avpriv_dv_get_packet(DVDemuxContext *c, AVPacket *pkt)
> +{
> +    return AVERROR(ENOSYS);
> +}
> +
> +int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
> +                             uint8_t *buf, int buf_size, int64_t pos)
> +{
> +    return AVERROR(ENOSYS);
> +}
> +#endif // CONFIG_DV_DEMUXER

This is unnecessary as the Makefile above ensures that dv.o is built
when iec61883 is built.

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

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 03/18] lavf/dv: always provide avpriv_dv_* symbols
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 03/18] lavf/dv: always provide avpriv_dv_* symbols Anton Khirnov
  2022-08-24 16:25   ` Andreas Rheinhardt
@ 2022-08-25  9:47   ` Anton Khirnov
  1 sibling, 0 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-25  9:47 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting Andreas Rheinhardt (2022-08-24 18:25:48)
> 
> This is unnecessary as the Makefile above ensures that dv.o is built
> when iec61883 is built.

For a given build, yes. But it is perfectly legal to swap out SOs with
different sets of enabled components. E.g. Debian has libav* and
libav*-extra packages that can be used interchangeably.

-- 
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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 05/18] lavc/dv: remove ff_dvvideo_init()
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 05/18] lavc/dv: remove ff_dvvideo_init() Anton Khirnov
  2022-08-24 12:27   ` Andreas Rheinhardt
@ 2022-08-25  9:48   ` Anton Khirnov
  2022-08-25  9:55     ` Anton Khirnov
  1 sibling, 1 reply; 45+ messages in thread
From: Anton Khirnov @ 2022-08-25  9:48 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting Andreas Rheinhardt (2022-08-24 14:27:43)
> There is actually another issue here: Encoders are not supposed to set
> chroma_sample_location at all according to the documentation. I sent a
> patch to implement this
> (https://ffmpeg.org/pipermail/ffmpeg-devel/2022-July/298518.html -- it
> also inlines and removes ff_dvvideo_init()), but I am unsure whether it
> is not the documentation that needs to be updated.

I would say update the documentation. It does make sense for encoders to
set this field.

-- 
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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 05/18] lavc/dv: remove ff_dvvideo_init()
  2022-08-25  9:48   ` [FFmpeg-devel] [PATCH 05/18] " Anton Khirnov
@ 2022-08-25  9:55     ` Anton Khirnov
  0 siblings, 0 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-25  9:55 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting Anton Khirnov (2022-08-25 11:48:27)
> Quoting Andreas Rheinhardt (2022-08-24 14:27:43)
> > There is actually another issue here: Encoders are not supposed to set
> > chroma_sample_location at all according to the documentation. I sent a
> > patch to implement this
> > (https://ffmpeg.org/pipermail/ffmpeg-devel/2022-July/298518.html -- it
> > also inlines and removes ff_dvvideo_init()), but I am unsure whether it
> > is not the documentation that needs to be updated.
> 
> I would say update the documentation. It does make sense for encoders to
> set this field.

Or on second thought, maybe no. Apparently no other encoders set it.
Though we might want to check whether the value matches and warn/error
out otherwise.

-- 
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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH] lavc/dv: remove ff_dvvideo_init()
  2022-08-24 12:27   ` Andreas Rheinhardt
@ 2022-08-25 10:10     ` Anton Khirnov
  0 siblings, 0 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-25 10:10 UTC (permalink / raw)
  To: ffmpeg-devel

The function contains only two assignments, setting DVVideoContext.avctx
and AVCodecContext.chroma_sample_location. However, the decoder does not
use the former, and the encoder should not be setting the latter.

Therefore move the first assignment to dvenc and the second to dvdec.
Make the encoder warn if the user-signalled chroma sample location does
not match the supported one, and return an error on higher compliance
levels.
---
 libavcodec/dv.c         | 10 ----------
 libavcodec/dv.h         |  2 --
 libavcodec/dvdec.c      |  4 +++-
 libavcodec/dvenc.c      | 12 +++++++++++-
 tests/ref/lavf/mxf_dv25 |  2 +-
 5 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/libavcodec/dv.c b/libavcodec/dv.c
index e2550c4cc1..9e05aa8927 100644
--- a/libavcodec/dv.c
+++ b/libavcodec/dv.c
@@ -184,13 +184,3 @@ int ff_dv_init_dynamic_tables(DVVideoContext *ctx, const AVDVProfile *d)
 
     return 0;
 }
-
-av_cold int ff_dvvideo_init(AVCodecContext *avctx)
-{
-    DVVideoContext *s = avctx->priv_data;
-
-    s->avctx = avctx;
-    avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
-
-    return 0;
-}
diff --git a/libavcodec/dv.h b/libavcodec/dv.h
index 331b8e846a..2b082d0140 100644
--- a/libavcodec/dv.h
+++ b/libavcodec/dv.h
@@ -97,8 +97,6 @@ enum dv_pack_type {
 
 int ff_dv_init_dynamic_tables(DVVideoContext *s, const AVDVProfile *d);
 
-int ff_dvvideo_init(AVCodecContext *avctx);
-
 static inline int dv_work_pool_size(const AVDVProfile *d)
 {
     int size = d->n_difchan * d->difseg_size * 27;
diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
index bad8419925..daee2347e6 100644
--- a/libavcodec/dvdec.c
+++ b/libavcodec/dvdec.c
@@ -240,6 +240,8 @@ static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
     DVVideoContext *s = avctx->priv_data;
     int i;
 
+    avctx->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
+
     ff_idctdsp_init(&s->idsp, avctx);
 
     for (i = 0; i < 64; i++)
@@ -258,7 +260,7 @@ static av_cold int dvvideo_decode_init(AVCodecContext *avctx)
 
     ff_thread_once(&init_static_once, dv_init_static);
 
-    return ff_dvvideo_init(avctx);
+    return 0;
 }
 
 /* decode AC coefficients */
diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
index 5ba4de3213..b2df976a26 100644
--- a/libavcodec/dvenc.c
+++ b/libavcodec/dvenc.c
@@ -55,6 +55,16 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
     PixblockDSPContext pdsp;
     int ret;
 
+    s->avctx = avctx;
+
+    if (avctx->chroma_sample_location != AVCHROMA_LOC_TOPLEFT) {
+        const char *name = av_chroma_location_name(avctx->chroma_sample_location);
+        av_log(avctx, AV_LOG_WARNING, "Only top-left chroma location is supported "
+               "in DV, input value is: %s\n", name ? name : "unknown");
+        if (avctx->strict_std_compliance > FF_COMPLIANCE_NORMAL)
+            return AVERROR(EINVAL);
+    }
+
     s->sys = av_dv_codec_profile2(avctx->width, avctx->height, avctx->pix_fmt, avctx->time_base);
     if (!s->sys) {
         av_log(avctx, AV_LOG_ERROR, "Found no DV profile for %ix%i %s video. "
@@ -91,7 +101,7 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
     }
 #endif
 
-    return ff_dvvideo_init(avctx);
+    return 0;
 }
 
 /* bit budget for AC only in 5 MBs */
diff --git a/tests/ref/lavf/mxf_dv25 b/tests/ref/lavf/mxf_dv25
index 5022f1f62d..95a58906a0 100644
--- a/tests/ref/lavf/mxf_dv25
+++ b/tests/ref/lavf/mxf_dv25
@@ -1,3 +1,3 @@
-3339def72599c79ad5860c6860cc3123 *tests/data/lavf/lavf.mxf_dv25
+59d632e097e6f45c28445b2ab862ffe8 *tests/data/lavf/lavf.mxf_dv25
 3834413 tests/data/lavf/lavf.mxf_dv25
 tests/data/lavf/lavf.mxf_dv25 CRC=0xbdaf7f52
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 16/18] lavf/dv: set audio bitrate only at stream creation
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 16/18] lavf/dv: set audio bitrate only at stream creation Anton Khirnov
  2022-08-24 13:13   ` Andreas Rheinhardt
  2022-08-24 14:33   ` Andreas Rheinhardt
@ 2022-08-25 10:23   ` Anton Khirnov
  2 siblings, 0 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-25 10:23 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting Andreas Rheinhardt (2022-08-24 16:33:22)
> Anton Khirnov:
> > Demuxers are not supposed to update AVCodecParameters after the stream
> > was seen by the caller. This value is not important enough to support
> > dynamic updates for.
> > ---
> >  libavformat/dv.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/libavformat/dv.c b/libavformat/dv.c
> > index f65c2d596f..9c8b0a262c 100644
> > --- a/libavformat/dv.c
> > +++ b/libavformat/dv.c
> > @@ -280,6 +280,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
> >              c->ast[i]->codecpar->codec_id   = AV_CODEC_ID_PCM_S16LE;
> >              c->ast[i]->codecpar->ch_layout  = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
> >              c->ast[i]->start_time           = 0;
> > +            c->ast[i]->codecpar->bit_rate   = 2 * dv_audio_frequency[freq] * 16;
> >  
> >              c->audio_pkt[i].size         = 0;
> >              c->audio_pkt[i].data         = c->audio_buf[i];
> > @@ -290,7 +291,6 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
> >              c->audio_pkt[i].pos          = -1;
> >          }
> >          c->ast[i]->codecpar->sample_rate    = dv_audio_frequency[freq];
> > -        c->ast[i]->codecpar->bit_rate       = 2 * dv_audio_frequency[freq] * 16;
> >      }
> >      c->ach = ach;
> >  
> 
> FYI: dv_extract_video_info() also sets bit_rate (and avg_frame_rate and
> sample_aspect_ratio) on every packet.

I know, it's just that I already spent way more time on this than I
intended, given how nobody really cares about DV (so much of the code is
blamed directly to original commits from 2003).

And while dropping bitrate is rather uncontroversial, since it's
informational only, the framerate and SAR might actually be used for
presentation, so handling them requires more care. I've considered using
AVStream.event_flags for signalling updated values to the user, but then
it might become tricky to synchronize the values seen by the user with
the packets returned from the demuxer (given the presence of parsers).

-- 
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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 18/18] lavf/dv: do not continuously set stream timebase
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 18/18] lavf/dv: do not continuously set stream timebase Anton Khirnov
  2022-08-24 14:42   ` Andreas Rheinhardt
@ 2022-08-25 19:04   ` Marton Balint
  1 sibling, 0 replies; 45+ messages in thread
From: Marton Balint @ 2022-08-25 19:04 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



On Wed, 24 Aug 2022, Anton Khirnov wrote:

> The code will call avpriv_set_pts_info() for each video frame, possibly
> setting a different timebase if the stream framerate changes. This
> violates API conventions, as the timebase is supposed to stay constant
> after stream creation.
>
> Change the demuxer to set a single timebase that is granular enough to
> handle all supported DV framerates.
>
> The seek tests change slightly because the new timebase is more
> granular.

Just because the timebase is more granular the packet timestamps should 
not change.

Regards,
Marton

> ---
> libavformat/dv.c                  | 16 ++++++++++++----
> tests/ref/seek/lavf-dv            | 30 +++++++++++++++---------------
> tests/ref/seek/vsynth_lena-dv     | 24 ++++++++++++------------
> tests/ref/seek/vsynth_lena-dv-411 | 24 ++++++++++++------------
> tests/ref/seek/vsynth_lena-dv-50  | 24 ++++++++++++------------
> 5 files changed, 63 insertions(+), 55 deletions(-)
>
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index ffed1a7a90..e2f7a6d313 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -69,6 +69,8 @@ struct DVDemuxContext {
>     uint8_t           audio_buf[4][8192];
>     int               ach;
>     int               frames;
> +
> +    int64_t           next_pts;
> };
>
> static inline uint16_t dv_audio_12to16(uint16_t sample)
> @@ -314,8 +316,6 @@ static int dv_extract_video_info(DVDemuxContext *c, const uint8_t *frame)
>
>     par = c->vst->codecpar;
>
> -    avpriv_set_pts_info(c->vst, 64, c->sys->time_base.num,
> -                        c->sys->time_base.den);
>     c->vst->avg_frame_rate = av_inv_q(c->vst->time_base);
>
>     /* finding out SAR is a little bit messy */
> @@ -360,6 +360,8 @@ static int dv_init_demux(AVFormatContext *s, DVDemuxContext *c)
>     c->vst->codecpar->bit_rate   = 25000000;
>     c->vst->start_time        = 0;
>
> +    avpriv_set_pts_info(c->vst, 64, 1, 60000);
> +
>     /* Audio streams are added later as they are encountered. */
>     s->ctx_flags |= AVFMTCTX_NOHEADER;
>
> @@ -463,7 +465,10 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
>         pkt->size         = size;
>         pkt->flags       |= AV_PKT_FLAG_KEY;
>         pkt->stream_index = c->vst->index;
> -        pkt->pts          = c->frames;
> +        pkt->pts          = c->next_pts;
> +        pkt->duration     = av_rescale_q(1, c->sys->time_base, c->vst->time_base);
> +
> +        c->next_pts += pkt->duration;
>     }
>
>     c->frames++;
> @@ -477,11 +482,12 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
>     // FIXME: sys may be wrong if last dv_read_packet() failed (buffer is junk)
>     FFFormatContext *const si = ffformatcontext(s);
>     const int frame_size = c->sys->frame_size;
> +    int64_t  frame_count = av_rescale_q(timestamp, c->vst->time_base, c->sys->time_base);
>     int64_t offset;
>     int64_t size       = avio_size(s->pb) - si->data_offset;
>     int64_t max_offset = ((size - 1) / frame_size) * frame_size;
>
> -    offset = frame_size * timestamp;
> +    offset = frame_size * frame_count;
>
>     if (size >= 0 && offset > max_offset)
>         offset = max_offset;
> @@ -494,6 +500,8 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
> void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset)
> {
>     c->frames = frame_offset;
> +    if (c->sys)
> +        c->next_pts = av_rescale_q(frame_offset, c->sys->time_base, c->vst->time_base);
>     c->audio_pkt[0].size = c->audio_pkt[1].size = 0;
>     c->audio_pkt[2].size = c->audio_pkt[3].size = 0;
> }
> diff --git a/tests/ref/seek/lavf-dv b/tests/ref/seek/lavf-dv
> index f63e4460be..356f05546b 100644
> --- a/tests/ref/seek/lavf-dv
> +++ b/tests/ref/seek/lavf-dv
> @@ -3,50 +3,50 @@ ret: 0         st:-1 flags:0  ts:-1.000000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:1  ts: 1.894167
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
> ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:0  ts: 2.560000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:1  ts: 1.480000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 0.365002
> ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
> ret: 0         st:-1 flags:1  ts:-0.740831
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.160000
> +ret: 0         st: 0 flags:0  ts: 2.153333
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.040000
> +ret: 0         st: 0 flags:1  ts: 1.047500
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> ret: 0         st: 1 flags:0  ts:-0.040000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:1  ts: 2.840000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 1.730004
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> ret: 0         st:-1 flags:1  ts: 0.624171
> ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> ret: 0         st: 1 flags:0  ts: 1.320000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:1  ts: 0.200000
> -ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts:-0.904994
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:1  ts: 1.989173
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.880000
> +ret: 0         st: 0 flags:0  ts: 0.883333
> ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.240000
> +ret: 0         st: 0 flags:1  ts:-0.222500
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:0  ts: 2.680000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:1  ts: 1.560000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 0.460008
> ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
> ret: 0         st:-1 flags:1  ts:-0.645825
> diff --git a/tests/ref/seek/vsynth_lena-dv b/tests/ref/seek/vsynth_lena-dv
> index d318794157..afed1fbe72 100644
> --- a/tests/ref/seek/vsynth_lena-dv
> +++ b/tests/ref/seek/vsynth_lena-dv
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:1  ts: 1.894167
> ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
> ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 2.576668
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:1  ts: 1.470835
> ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
> ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 2.153336
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:1  ts: 1.047503
> ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 1.730004
> ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
> ret: 0         st:-1 flags:1  ts: 0.624171
> ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 1.306672
> ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
> ret: 0         st:-1 flags:1  ts: 0.200839
> ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 0.883340
> ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
> ret: 0         st:-1 flags:1  ts:-0.222493
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
> ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
> ret: 0         st:-1 flags:0  ts: 0.460008
> ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
> diff --git a/tests/ref/seek/vsynth_lena-dv-411 b/tests/ref/seek/vsynth_lena-dv-411
> index d318794157..afed1fbe72 100644
> --- a/tests/ref/seek/vsynth_lena-dv-411
> +++ b/tests/ref/seek/vsynth_lena-dv-411
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:1  ts: 1.894167
> ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
> ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 2.576668
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:1  ts: 1.470835
> ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
> ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 2.153336
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:1  ts: 1.047503
> ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 1.730004
> ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
> ret: 0         st:-1 flags:1  ts: 0.624171
> ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 1.306672
> ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
> ret: 0         st:-1 flags:1  ts: 0.200839
> ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 0.883340
> ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
> ret: 0         st:-1 flags:1  ts:-0.222493
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
> ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
> ret: 0         st:-1 flags:0  ts: 0.460008
> ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
> diff --git a/tests/ref/seek/vsynth_lena-dv-50 b/tests/ref/seek/vsynth_lena-dv-50
> index fae6d1b225..3b1d69ffa6 100644
> --- a/tests/ref/seek/vsynth_lena-dv-50
> +++ b/tests/ref/seek/vsynth_lena-dv-50
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> ret: 0         st:-1 flags:1  ts: 1.894167
> ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:13536000 size:288000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
> ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:5760000 size:288000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> ret: 0         st:-1 flags:0  ts: 2.576668
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> ret: 0         st:-1 flags:1  ts: 1.470835
> ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:10656000 size:288000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
> ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:2592000 size:288000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> ret: 0         st:-1 flags:0  ts: 2.153336
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> ret: 0         st:-1 flags:1  ts: 1.047503
> ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:7488000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> ret: 0         st:-1 flags:0  ts: 1.730004
> ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:12384000 size:288000
> ret: 0         st:-1 flags:1  ts: 0.624171
> ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:4608000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> ret: 0         st:-1 flags:0  ts: 1.306672
> ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:9504000 size:288000
> ret: 0         st:-1 flags:1  ts: 0.200839
> ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos:1440000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> ret: 0         st:-1 flags:0  ts: 0.883340
> ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:6336000 size:288000
> ret: 0         st:-1 flags:1  ts:-0.222493
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
> ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:11232000 size:288000
> ret: 0         st:-1 flags:0  ts: 0.460008
> ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:3456000 size:288000
> -- 
> 2.35.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-request@ffmpeg.org with subject "unsubscribe".
>
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

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

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 12/18] lavf/dv: make returning the video packet optional
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 12/18] lavf/dv: make returning the video packet optional Anton Khirnov
  2022-08-24 16:03   ` Andreas Rheinhardt
@ 2022-08-31  2:39   ` Anton Khirnov
  1 sibling, 0 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-31  2:39 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting Andreas Rheinhardt (2022-08-24 18:03:05)
> Anton Khirnov:
> > The mov demuxer only returns DV audio, video packets are discarded.
> > 
> > It first reads the data to be parsed into a packet. Then both this
> > packet and the pointer to its data are passed together to
> > avpriv_dv_produce_packet(), which parses the data and partially
> > overwrites the packet. This is confusing and potentially dangerous, so
> > just pass NULL and avoid pointless packet modification.
> > ---
> >  libavformat/dv.c  | 19 +++++++++++--------
> >  libavformat/mov.c |  2 +-
> >  2 files changed, 12 insertions(+), 9 deletions(-)
> > 
> > diff --git a/libavformat/dv.c b/libavformat/dv.c
> > index 303cecf9bb..f88fe62349 100644
> > --- a/libavformat/dv.c
> > +++ b/libavformat/dv.c
> > @@ -430,14 +430,17 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
> >          }
> >      }
> >  
> > -    /* Now it's time to return video packet */
> > -    size = dv_extract_video_info(c, buf);
> > -    pkt->data         = buf;
> > -    pkt->pos          = pos;
> > -    pkt->size         = size;
> > -    pkt->flags       |= AV_PKT_FLAG_KEY;
> > -    pkt->stream_index = c->vst->index;
> > -    pkt->pts          = c->frames;
> > +    /* return the video packet, if the caller wants it */
> > +    if (pkt) {
> > +        size = dv_extract_video_info(c, buf);
> > +
> > +        pkt->data         = buf;
> > +        pkt->pos          = pos;
> > +        pkt->size         = size;
> > +        pkt->flags       |= AV_PKT_FLAG_KEY;
> > +        pkt->stream_index = c->vst->index;
> > +        pkt->pts          = c->frames;
> > +    }
> >  
> >      c->frames++;
> >  
> > diff --git a/libavformat/mov.c b/libavformat/mov.c
> > index 1d8c5b2904..a2b429e52f 100644
> > --- a/libavformat/mov.c
> > +++ b/libavformat/mov.c
> > @@ -8768,7 +8768,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
> >          }
> >  #if CONFIG_DV_DEMUXER
> >          if (mov->dv_demux && sc->dv_audio_container) {
> > -            ret = avpriv_dv_produce_packet(mov->dv_demux, pkt, pkt->data, pkt->size, pkt->pos);
> > +            ret = avpriv_dv_produce_packet(mov->dv_demux, NULL, pkt->data, pkt->size, pkt->pos);
> >              av_packet_unref(pkt);
> >              if (ret < 0)
> >                  return ret;
> 
> 1. LGTM.
> 2. The way mov handles dv audio is very broken:
> a) I don't see anything that guarantees that the
> samplerate of the inner demuxer and the sample rate reported to the user
> (presumably taken from mov structures) coincide.
> b) dv_fctx and dv_demux are part of MOVContext, not MOVStreamContext. If
> there were multiple MOVStreams with dv-audio, the older dv_fctx and
> dv_demux would leak. Do you see anything that guarantees that they will
>  only be at most one MOVStream for dv-audio?

Not that I can see. I'd say the best thing to do here is fail when a
dvaudio stream already exists - trying to support it without having any
valid samples seems pointless. I'll send a patch.

> c) The former would be easily fixable by moving the fields to
> MOVStreamContext. But there is actually another bug: The underlying dv
> stream can contain multiple audio streams in this one MOVStream and only
> the first of these is forwarded.
> https://samples.ffmpeg.org/ffmpeg-bugs/trac/ticket4671/dir1.tar.bz2
> contains a sample where this actually occurs: The DV stream has two
> stereo tracks, only the first of which is forwarded (use -enable_drefs 1
> to be able to play it; the non-forwarded seems to be silent in this
> case). Are these actually independent audios or are these stereo pairs
> part of a single streams with more than two channels?

Cannot answer this. I would ignore this until and unless someone
actually comes complaining about this.

-- 
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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* [FFmpeg-devel] [PATCH] lavf/dv: return a meaningful error code from avpriv_dv_produce_packet()
  2022-08-24 13:07   ` Andreas Rheinhardt
@ 2022-08-31  2:48     ` Anton Khirnov
  0 siblings, 0 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-31  2:48 UTC (permalink / raw)
  To: ffmpeg-devel

---
 libavformat/dv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavformat/dv.c b/libavformat/dv.c
index f88fe62349..c888111789 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -404,7 +404,7 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
     if (buf_size < DV_PROFILE_BYTES ||
         !(c->sys = av_dv_frame_profile(c->sys, buf, buf_size)) ||
         buf_size < c->sys->frame_size) {
-        return -1;   /* Broken frame, or not enough data */
+        return AVERROR_INVALIDDATA;
     }
 
     /* Queueing audio packet */
-- 
2.35.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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

* Re: [FFmpeg-devel] [PATCH 17/18] lavf/dv: do not update AVCodecParameters.sample_rate while demuxing
  2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 17/18] lavf/dv: do not update AVCodecParameters.sample_rate while demuxing Anton Khirnov
  2022-08-24 14:20   ` Andreas Rheinhardt
@ 2022-08-31  3:11   ` Anton Khirnov
  1 sibling, 0 replies; 45+ messages in thread
From: Anton Khirnov @ 2022-08-31  3:11 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting Andreas Rheinhardt (2022-08-24 16:20:35)
> Anton Khirnov:
> > Demuxers are not allowed to do this and few callers, if any, will handle
> > this correctly. Send the AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE side data
> > instead.
> 
> 1. One of the callers which did not handle this correctly is the mov
> demuxer: A sample rate update would not propagate to the user, because
> it uses a separate AVFormatContext for it. This should be mentioned in
> the commit message. (Btw: I don't see anything that guarantees that the
> samplerate and timebase of the inner demuxer and the sample rate and
> time base reported to the user (presumably taken from mov structures)
> coincide. Given that dv_fctx and dv_demux are part of MOVContext, they
> would also leak if it would be attempted to allocate them multiple
> times. Do you see anything that guarantees that they will not be
> allocated multiple times?)
> 2. In case of ff_add_param_change() failure, users will just interpret
> that as "no more packets available", won't they?

yes, I think so

> This might be wrong, but it is not problematic.

I agree

> 3. Have you tested this with a sample with actual parameter changes?

Yes, I made a sample by concatenating two dv files. The side data is
exported correctly, but the PCM decoder fails because it is not marked
with AV_CODEC_CAP_PARAM_CHANGE. Patches welcome.

-- 
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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 45+ messages in thread

end of thread, other threads:[~2022-08-31  3:11 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-24  8:43 [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 02/18] lavf/dv: remove DVMuxContext declaration from dv.h Anton Khirnov
2022-08-24 11:55   ` Andreas Rheinhardt
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 03/18] lavf/dv: always provide avpriv_dv_* symbols Anton Khirnov
2022-08-24 16:25   ` Andreas Rheinhardt
2022-08-25  9:47   ` Anton Khirnov
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 04/18] lavc/dvdec: drop the only use of DVVideoContext.avctx Anton Khirnov
2022-08-24 12:24   ` Andreas Rheinhardt
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 05/18] lavc/dv: remove ff_dvvideo_init() Anton Khirnov
2022-08-24 12:27   ` Andreas Rheinhardt
2022-08-25 10:10     ` [FFmpeg-devel] [PATCH] " Anton Khirnov
2022-08-25  9:48   ` [FFmpeg-devel] [PATCH 05/18] " Anton Khirnov
2022-08-25  9:55     ` Anton Khirnov
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 06/18] lavc/dv: do not pass DVVideoContext to ff_dv_init_dynamic_tables() Anton Khirnov
2022-08-24 12:28   ` Andreas Rheinhardt
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 07/18] lavc/dv: do not pass DVVideoContext to dv_calculate_mb_xy() Anton Khirnov
2022-08-24 12:57   ` Andreas Rheinhardt
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 08/18] lavc/dvdec: stop using DVVideoContext Anton Khirnov
2022-08-24 12:33   ` Andreas Rheinhardt
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 09/18] lavc/dvenc: " Anton Khirnov
2022-08-24 12:36   ` Andreas Rheinhardt
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 10/18] lavc/dv.h: move encoder/decoder-specific code to a new header Anton Khirnov
2022-08-24 12:52   ` Andreas Rheinhardt
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 11/18] lavc/dv: rename constants to follow our naming conventions Anton Khirnov
2022-08-24 12:38   ` Andreas Rheinhardt
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 12/18] lavf/dv: make returning the video packet optional Anton Khirnov
2022-08-24 16:03   ` Andreas Rheinhardt
2022-08-31  2:39   ` Anton Khirnov
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 13/18] lavf/dv: return a meaningful error code from avpriv_dv_produce_packet() Anton Khirnov
2022-08-24 13:07   ` Andreas Rheinhardt
2022-08-31  2:48     ` [FFmpeg-devel] [PATCH] " Anton Khirnov
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 14/18] lavf/dv: forward errors from avformat_new_stream() Anton Khirnov
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 15/18] lavf/dv: set non-changing AVStream fields only once Anton Khirnov
2022-08-24 13:13   ` Andreas Rheinhardt
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 16/18] lavf/dv: set audio bitrate only at stream creation Anton Khirnov
2022-08-24 13:13   ` Andreas Rheinhardt
2022-08-24 14:33   ` Andreas Rheinhardt
2022-08-25 10:23   ` Anton Khirnov
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 17/18] lavf/dv: do not update AVCodecParameters.sample_rate while demuxing Anton Khirnov
2022-08-24 14:20   ` Andreas Rheinhardt
2022-08-31  3:11   ` Anton Khirnov
2022-08-24  8:43 ` [FFmpeg-devel] [PATCH 18/18] lavf/dv: do not continuously set stream timebase Anton Khirnov
2022-08-24 14:42   ` Andreas Rheinhardt
2022-08-25 19:04   ` Marton Balint
2022-08-24  8:50 ` [FFmpeg-devel] [PATCH 01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer Anton Khirnov

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git