]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/aac_ac3_parser.c
libopenh264: Log debug messages to a non-null context
[ffmpeg] / libavcodec / aac_ac3_parser.c
index 58f30a4180ec9908e54fefac85e9c605d3ec5681..d3da9b7696442ed32b8f8fe8562baeabcfbb08c3 100644 (file)
@@ -20,6 +20,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/channel_layout.h"
+#include "libavutil/common.h"
 #include "parser.h"
 #include "aac_ac3_parser.h"
 
@@ -78,22 +80,31 @@ get_next:
        and total number of samples found in an AAC ADTS header are not
        reliable. Bit rate is still accurate because the total frame duration in
        seconds is still correct (as is the number of bits in the frame). */
-    if (avctx->codec_id != CODEC_ID_AAC) {
+    if (avctx->codec_id != AV_CODEC_ID_AAC) {
         avctx->sample_rate = s->sample_rate;
 
-        /* allow downmixing to stereo (or mono for AC-3) */
-        if(avctx->request_channels > 0 &&
-                avctx->request_channels < s->channels &&
-                (avctx->request_channels <= 2 ||
-                (avctx->request_channels == 1 &&
-                (avctx->codec_id == CODEC_ID_AC3 ||
-                 avctx->codec_id == CODEC_ID_EAC3)))) {
-            avctx->channels = avctx->request_channels;
+        /* (E-)AC-3: allow downmixing to stereo or mono */
+#if FF_API_REQUEST_CHANNELS
+FF_DISABLE_DEPRECATION_WARNINGS
+        if (avctx->request_channels == 1)
+            avctx->request_channel_layout = AV_CH_LAYOUT_MONO;
+        else if (avctx->request_channels == 2)
+            avctx->request_channel_layout = AV_CH_LAYOUT_STEREO;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
+        if (s->channels > 1 &&
+            avctx->request_channel_layout == AV_CH_LAYOUT_MONO) {
+            avctx->channels       = 1;
+            avctx->channel_layout = AV_CH_LAYOUT_MONO;
+        } else if (s->channels > 2 &&
+                   avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
+            avctx->channels       = 2;
+            avctx->channel_layout = AV_CH_LAYOUT_STEREO;
         } else {
             avctx->channels = s->channels;
             avctx->channel_layout = s->channel_layout;
         }
-        avctx->frame_size = s->samples;
+        s1->duration = s->samples;
         avctx->audio_service_type = s->service_type;
     }