[SCM] libav/experimental: Add the transfer of the new parameters from ffmpeg to ffserver and vice-versa This adds functions to send and receive doubles and also null terminated strings.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:33:15 UTC 2013


The following commit has been merged in the experimental branch:
commit 75bdb984c7f422232d963facaf4f96887d40530a
Author: Philip Gladstone <philipjsg at users.sourceforge.net>
Date:   Thu Sep 12 02:26:58 2002 +0000

    Add the transfer of the new parameters from ffmpeg to ffserver and vice-versa
    This adds functions to send and receive doubles and also null terminated strings.
    
    Originally committed as revision 919 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libav/avio.h b/libav/avio.h
index 2c13c03..be4189b 100644
--- a/libav/avio.h
+++ b/libav/avio.h
@@ -78,7 +78,7 @@ int init_put_byte(ByteIOContext *s,
                   int (*seek)(void *opaque, offset_t offset, int whence));
 
 void put_byte(ByteIOContext *s, int b);
-void put_buffer(ByteIOContext *s, unsigned char *buf, int size);
+void put_buffer(ByteIOContext *s, const unsigned char *buf, int size);
 void put_le64(ByteIOContext *s, UINT64 val);
 void put_be64(ByteIOContext *s, UINT64 val);
 void put_le32(ByteIOContext *s, unsigned int val);
@@ -87,6 +87,9 @@ void put_le16(ByteIOContext *s, unsigned int val);
 void put_be16(ByteIOContext *s, unsigned int val);
 void put_tag(ByteIOContext *s, char *tag);
 
+void put_native_double(ByteIOContext *s, double val);
+void put_native_string(ByteIOContext *s, const char *buf);
+
 offset_t url_fseek(ByteIOContext *s, offset_t offset, int whence);
 void url_fskip(ByteIOContext *s, offset_t offset);
 offset_t url_ftell(ByteIOContext *s);
@@ -105,6 +108,8 @@ unsigned int get_le32(ByteIOContext *s);
 UINT64 get_le64(ByteIOContext *s);
 unsigned int get_le16(ByteIOContext *s);
 
+double get_native_double(ByteIOContext *s);
+char *get_native_string(ByteIOContext *s, char *buf, int maxlen);
 unsigned int get_be16(ByteIOContext *s);
 unsigned int get_be32(ByteIOContext *s);
 UINT64 get_be64(ByteIOContext *s);
diff --git a/libav/aviobuf.c b/libav/aviobuf.c
index 6c23088..3f01083 100644
--- a/libav/aviobuf.c
+++ b/libav/aviobuf.c
@@ -68,7 +68,7 @@ void put_byte(ByteIOContext *s, int b)
         flush_buffer(s);
 }
 
-void put_buffer(ByteIOContext *s, unsigned char *buf, int size)
+void put_buffer(ByteIOContext *s, const unsigned char *buf, int size)
 {
     int len;
 
@@ -176,6 +176,19 @@ void put_be32(ByteIOContext *s, unsigned int val)
     put_byte(s, val);
 }
 
+void put_native_double(ByteIOContext *s, double val)
+{
+    put_buffer(s, (const unsigned char *) &val, sizeof(val));
+}
+
+void put_native_string(ByteIOContext *s, const char *str)
+{
+    if (str)
+        put_buffer(s, (const unsigned char *) str, strlen(str) + 1);
+    else
+        put_byte(s, 0);
+}
+
 void put_le64(ByteIOContext *s, UINT64 val)
 {
     put_le32(s, (UINT32)(val & 0xffffffff));
@@ -326,6 +339,30 @@ unsigned int get_be32(ByteIOContext *s)
     return val;
 }
 
+double get_native_double(ByteIOContext *s)
+{
+    double val;
+
+    get_buffer(s, (unsigned char *) &val, sizeof(val));
+
+    return val;
+}
+
+char *get_native_string(ByteIOContext *s, char *buf, int maxlen)
+{
+    int i = 0;
+    char c;
+
+    while ((c = get_byte(s))) {
+        if (i < maxlen-1)
+            buf[i++] = c;
+    }
+    
+    buf[i] = 0; /* Ensure null terminated, but may be truncated */
+
+    return buf;
+}
+
 UINT64 get_be64(ByteIOContext *s)
 {
     UINT64 val;
diff --git a/libav/ffm.c b/libav/ffm.c
index 205626f..45bfbcb 100644
--- a/libav/ffm.c
+++ b/libav/ffm.c
@@ -166,6 +166,15 @@ static int ffm_write_header(AVFormatContext *s)
             put_be16(pb, (int) (codec->qcompress * 10000.0));
             put_be16(pb, (int) (codec->qblur * 10000.0));
             put_be32(pb, codec->bit_rate_tolerance);
+            put_native_string(pb, codec->rc_eq);
+            put_be32(pb, codec->rc_max_rate);
+            put_be32(pb, codec->rc_min_rate);
+            put_be32(pb, codec->rc_buffer_size);
+            put_native_double(pb, codec->i_quant_factor);
+            put_native_double(pb, codec->b_quant_factor);
+            put_native_double(pb, codec->i_quant_offset);
+            put_native_double(pb, codec->b_quant_offset);
+            put_be32(pb, codec->dct_algo);
             break;
         case CODEC_TYPE_AUDIO:
             put_be32(pb, codec->sample_rate);
@@ -380,6 +389,8 @@ static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
     get_be32(pb); /* total bitrate */
     /* read each stream */
     for(i=0;i<s->nb_streams;i++) {
+        char rc_eq_buf[128];
+
         st = av_mallocz(sizeof(AVStream));
         if (!st)
             goto fail;
@@ -409,6 +420,15 @@ static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
             codec->qcompress = get_be16(pb) / 10000.0;
             codec->qblur = get_be16(pb) / 10000.0;
             codec->bit_rate_tolerance = get_be32(pb);
+            codec->rc_eq = strdup(get_native_string(pb, rc_eq_buf, sizeof(rc_eq_buf)));
+            codec->rc_max_rate = get_be32(pb);
+            codec->rc_min_rate = get_be32(pb);
+            codec->rc_buffer_size = get_be32(pb);
+            codec->i_quant_factor = get_native_double(pb);
+            codec->b_quant_factor = get_native_double(pb);
+            codec->i_quant_offset = get_native_double(pb);
+            codec->b_quant_offset = get_native_double(pb);
+            codec->dct_algo = get_be32(pb);
             break;
         case CODEC_TYPE_AUDIO:
             codec->sample_rate = get_be32(pb);
@@ -416,7 +436,7 @@ static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
             codec->frame_size = get_le16(pb);
             break;
         default:
-            av_abort();
+            goto fail;
         }
 
     }

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list