On 28/11/14 13:16, Anton Khirnov wrote:
It will not be set if the stream codec context is not the encoding
context. Use av_get_audio_frame_duration() instead, it should work for
all audio codecs supported by the muxer.
---
  libavformat/rmenc.c | 7 +++++--
  1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libavformat/rmenc.c b/libavformat/rmenc.c
index 9ff9f31..d218769 100644
--- a/libavformat/rmenc.c
+++ b/libavformat/rmenc.c
@@ -181,9 +181,10 @@ static int rv10_write_header(AVFormatContext *ctx,

          if (stream->enc->codec_type == AVMEDIA_TYPE_AUDIO) {
              int coded_frame_size, fscode, sample_rate;
+            int frame_size = av_get_audio_frame_duration(stream->enc, 0);
              sample_rate = stream->enc->sample_rate;
              coded_frame_size = (stream->enc->bit_rate *
-                                stream->enc->frame_size) / (8 * sample_rate);
+                                frame_size) / (8 * sample_rate);
              /* audio codec info */
              avio_write(s, ".ra", 3);
              avio_w8(s, 0xfd);
@@ -311,6 +312,7 @@ static int rm_write_header(AVFormatContext *s)

      for(n=0;n<s->nb_streams;n++) {
          AVStream *st = s->streams[n];
+        int frame_size;

          s->streams[n]->id = n;
          codec = s->streams[n]->codec;
@@ -323,7 +325,8 @@ static int rm_write_header(AVFormatContext *s)
          switch(codec->codec_type) {
          case AVMEDIA_TYPE_AUDIO:
              rm->audio_stream = stream;
-            stream->frame_rate = (float)codec->sample_rate / 
(float)codec->frame_size;
+            frame_size = av_get_audio_frame_duration(codec, 0);
+            stream->frame_rate = (float)codec->sample_rate / (float)frame_size;
              /* XXX: dummy values */
              stream->packet_max_size = 1024;
              stream->nb_packets = 0;


Ok if tested.
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to