[FFmpeg-cvslog] lavf/avienc: Add xxpc entries to index

Mats Peterson git at videolan.org
Sun Mar 13 16:06:52 CET 2016


ffmpeg | branch: master | Mats Peterson <matsp888 at yahoo.com> | Sat Mar 12 16:18:36 2016 +0100| [77bc3e1944a912d712aa0d6d146b991a3686d618] | committer: Michael Niedermayer

lavf/avienc: Add xxpc entries to index

Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=77bc3e1944a912d712aa0d6d146b991a3686d618
---

 libavformat/avi.h            |    6 +++++-
 libavformat/avienc.c         |   31 ++++++++++++++++++++-----------
 tests/ref/lavf-fate/avi_cram |    4 ++--
 3 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/libavformat/avi.h b/libavformat/avi.h
index 34da76f..af21f2c 100644
--- a/libavformat/avi.h
+++ b/libavformat/avi.h
@@ -32,7 +32,11 @@
 #define AVI_MASTER_INDEX_SIZE   256
 #define AVI_MAX_STREAM_COUNT    100
 
+/* stream header flags */
+#define AVISF_VIDEO_PALCHANGES  0x00010000
+
 /* index flags */
-#define AVIIF_INDEX             0x10
+#define AVIIF_INDEX             0x00000010
+#define AVIIF_NO_TIME           0x00000100
 
 #endif /* AVFORMAT_AVI_H */
diff --git a/libavformat/avienc.c b/libavformat/avienc.c
index 1090f14..dceb2ef 100644
--- a/libavformat/avienc.c
+++ b/libavformat/avienc.c
@@ -52,8 +52,6 @@ typedef struct AVIIentry {
 
 #define AVI_INDEX_CLUSTER_SIZE 16384
 
-#define AVISF_VIDEO_PALCHANGES 0x00010000
-
 typedef struct AVIIndex {
     int64_t     indx_start;
     int64_t     audio_strm_offset;
@@ -652,9 +650,13 @@ static int avi_write_idx1(AVFormatContext *s)
             }
             if (!empty) {
                 avist = s->streams[stream_id]->priv_data;
-                avi_stream2fourcc(tag, stream_id,
+                if (*ie->tag)
+                    ffio_wfourcc(pb, ie->tag);
+                else {
+                    avi_stream2fourcc(tag, stream_id,
                                   s->streams[stream_id]->codec->codec_type);
-                ffio_wfourcc(pb, tag);
+                    ffio_wfourcc(pb, tag);
+                }
                 avio_wl32(pb, ie->flags);
                 avio_wl32(pb, ie->pos);
                 avio_wl32(pb, ie->len);
@@ -749,6 +751,20 @@ static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
                     unsigned char tag[5];
                     avi_stream2fourcc(tag, stream_index, enc->codec_type);
                     tag[2] = 'p'; tag[3] = 'c';
+                    if (s->pb->seekable) {
+                        int ret;
+                        if (avist->strh_flags_offset) {
+                            int64_t cur_offset = avio_tell(pb);
+                            avio_seek(pb, avist->strh_flags_offset, SEEK_SET);
+                            avio_wl32(pb, AVISF_VIDEO_PALCHANGES);
+                            avio_seek(pb, cur_offset, SEEK_SET);
+                            avist->strh_flags_offset = 0;
+                        }
+                        ret = avi_add_ientry(s, stream_index, tag, AVIIF_NO_TIME,
+                                       pal_size * 4 + 4);
+                        if (ret < 0)
+                            return ret;
+                    }
                     pc_tag = ff_start_tag(pb, tag);
                     avio_w8(pb, 0);
                     avio_w8(pb, pal_size & 0xFF);
@@ -759,13 +775,6 @@ static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
                     }
                     ff_end_tag(pb, pc_tag);
                     memcpy(avist->old_palette, avist->palette, pal_size * 4);
-                    if (pb->seekable && avist->strh_flags_offset) {
-                        int64_t cur_offset = avio_tell(pb);
-                        avio_seek(pb, avist->strh_flags_offset, SEEK_SET);
-                        avio_wl32(pb, AVISF_VIDEO_PALCHANGES);
-                        avio_seek(pb, cur_offset, SEEK_SET);
-                        avist->strh_flags_offset = 0;
-                    }
                 }
             }
         }
diff --git a/tests/ref/lavf-fate/avi_cram b/tests/ref/lavf-fate/avi_cram
index 7b4e69c..82882fb 100644
--- a/tests/ref/lavf-fate/avi_cram
+++ b/tests/ref/lavf-fate/avi_cram
@@ -1,3 +1,3 @@
-ba77c5c8bd2b0d1e0478d143346cc3b3 *./tests/data/lavf-fate/lavf.avi
-928228 ./tests/data/lavf-fate/lavf.avi
+6fc88702c23b895c305c5e1f51a0904e *./tests/data/lavf-fate/lavf.avi
+928260 ./tests/data/lavf-fate/lavf.avi
 ./tests/data/lavf-fate/lavf.avi CRC=0xa4770de2



More information about the ffmpeg-cvslog mailing list