diff ac3_parser.c @ 6565:013def14c931 libavcodec

change of aac_ac3_parser, so it is able to send complete portion of data to decoder
author bwolowiec
date Sat, 05 Apr 2008 20:09:36 +0000
parents b0d44aec1ec0
children 9b8a881e871c
line wrap: on
line diff
--- a/ac3_parser.c	Fri Apr 04 00:43:34 2008 +0000
+++ b/ac3_parser.c	Sat Apr 05 20:09:36 2008 +0000
@@ -123,12 +123,14 @@
     return 0;
 }
 
-static int ac3_sync(AACAC3ParseContext *hdr_info, AACAC3FrameFlag *flag)
+static int ac3_sync(uint64_t state, AACAC3ParseContext *hdr_info,
+        int *need_next_header, int *new_frame_start)
 {
     int err;
+    uint64_t tmp = be2me_64(state);
     AC3HeaderInfo hdr;
 
-    err = ff_ac3_parse_header(hdr_info->inbuf, &hdr);
+    err = ff_ac3_parse_header((uint8_t *)&tmp, &hdr);
 
     if(err < 0)
         return 0;
@@ -138,24 +140,14 @@
     hdr_info->channels = hdr.channels;
     hdr_info->samples = AC3_FRAME_SIZE;
 
-    switch(hdr.frame_type){
-        case EAC3_FRAME_TYPE_INDEPENDENT:
-            *flag = FRAME_START;
-            break;
-        case EAC3_FRAME_TYPE_DEPENDENT:
-            *flag = FRAME_CONTINUATION;
-            break;
-        case EAC3_FRAME_TYPE_AC3_CONVERT:
-            *flag = FRAME_COMPLETE;
-            break;
-    }
+    *need_next_header = (hdr.frame_type != EAC3_FRAME_TYPE_AC3_CONVERT);
+    *new_frame_start = (hdr.frame_type != EAC3_FRAME_TYPE_DEPENDENT);
     return hdr.frame_size;
 }
 
 static av_cold int ac3_parse_init(AVCodecParserContext *s1)
 {
     AACAC3ParseContext *s = s1->priv_data;
-    s->inbuf_ptr = s->inbuf;
     s->header_size = AC3_HEADER_SIZE;
     s->sync = ac3_sync;
     return 0;