]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/mpegaudioenc_template.c
avcodec/avcodec: Free frame_thread_encoder on avcodec_open2() error
[ffmpeg] / libavcodec / mpegaudioenc_template.c
index 93363fe1d25f29f3332178ae1981e16105c10b3c..8e6e20c35867989752f820bd5ee8459fd55e1abf 100644 (file)
@@ -701,7 +701,7 @@ static void encode_frame(MpegAudioContext *s,
 
                                 /* normalize to P bits */
                                 if (shift < 0)
-                                    q1 = sample << (-shift);
+                                    q1 = sample * (1 << -shift);
                                 else
                                     q1 = sample >> shift;
                                 q1 = (q1 * mult) >> P;
@@ -736,9 +736,6 @@ static void encode_frame(MpegAudioContext *s,
     /* padding */
     for(i=0;i<padding;i++)
         put_bits(p, 1, 0);
-
-    /* flush */
-    flush_put_bits(p);
 }
 
 static int MPA_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
@@ -770,10 +767,13 @@ static int MPA_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 
     encode_frame(s, bit_alloc, padding);
 
+    /* flush */
+    flush_put_bits(&s->pb);
+    avpkt->size = put_bytes_output(&s->pb);
+
     if (frame->pts != AV_NOPTS_VALUE)
         avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->initial_padding);
 
-    avpkt->size = put_bits_count(&s->pb) / 8;
     *got_packet_ptr = 1;
     return 0;
 }