On 02/20/2016 03:40 AM, Michael Niedermayer wrote:
On Sat, Feb 20, 2016 at 12:02:15AM +0100, Mats Peterson wrote:

--
Mats Peterson
http://matsp888.no-ip.org/~mats/

  riffenc.c |   23 +++++++++++++++++++----
  1 file changed, 19 insertions(+), 4 deletions(-)
63ec167e5794087397c65d3a5002e6bbd7a32caf  
0001-lavf-riffenc-Write-space-for-palette.patch
 From 41964552559234f19917a6ea40e71f0753a20ede Mon Sep 17 00:00:00 2001
From: Mats Peterson <matsp...@yahoo.com>
Date: Fri, 19 Feb 2016 23:55:25 +0100
Subject: [PATCH v2 1/4] lavf/riffenc: Write space for palette

---
  libavformat/riffenc.c |   23 +++++++++++++++++++----
  1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/libavformat/riffenc.c b/libavformat/riffenc.c
index ceb27f2..c7bad74 100644
--- a/libavformat/riffenc.c
+++ b/libavformat/riffenc.c
@@ -210,6 +210,9 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext *enc,
                        !memcmp(enc->extradata + enc->extradata_size - 9, 
"BottomUp", 9);
      int extradata_size = enc->extradata_size - 9*keep_height;

+    if (!enc->extradata_size && enc->bits_per_coded_sample >= 1 && 
enc->bits_per_coded_sample <= 8)
+        extradata_size = 4 * (1 << enc->bits_per_coded_sample);

this should probably be limited to the CODEC_ID_RAWVIDEO case
and also to avi and not asf until it is implemented for asf too

OK, I could add a check for that.



+
      /* size */
      avio_wl32(pb, 40 + (ignore_extradata ? 0 :extradata_size));
      avio_wl32(pb, enc->width);
@@ -228,10 +231,22 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext 
*enc,
      avio_wl32(pb, 0);

      if (!ignore_extradata) {
-        avio_write(pb, enc->extradata, extradata_size);
-
-        if (!for_asf && extradata_size & 1)
-            avio_w8(pb, 0);
+        if (enc->extradata_size) {
+            avio_write(pb, enc->extradata, extradata_size);
+            if (!for_asf && extradata_size & 1)
+                avio_w8(pb, 0);
+        } else if (enc->bits_per_coded_sample >= 1 && enc->bits_per_coded_sample 
<= 8) {
+            int i;

+            int64_t *pal_offset = (int64_t *)enc->priv_data;

the codec priv_data must not be accessed from a muxer, its private to
the codec



OK, thanks for the information. Do you have a better way to store the palette offset? There aren't many places accessible from this function.

Mats

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

Reply via email to