Mercurial > mplayer.hg
comparison libmpdemux/demux_mov.c @ 17858:996e419c1671
in24/in32/fl32 little/big-endian QuickTime PCM audio support
approved by rxt
author | rathann |
---|---|
date | Mon, 13 Mar 2006 23:32:36 +0000 |
parents | 9c1656872e96 |
children | d11c23749503 |
comparison
equal
deleted
inserted
replaced
17857:115a8e901106 | 17858:996e419c1671 |
---|---|
722 int fcc=char2int(trak->stdata,48); | 722 int fcc=char2int(trak->stdata,48); |
723 // we have extra audio headers!!! | 723 // we have extra audio headers!!! |
724 mp_msg(MSGT_DEMUX,MSGL_V,"Audio extra header: len=%d fcc=0x%X\n",len,fcc); | 724 mp_msg(MSGT_DEMUX,MSGL_V,"Audio extra header: len=%d fcc=0x%X\n",len,fcc); |
725 if((len >= 4) && | 725 if((len >= 4) && |
726 (char2int(trak->stdata,52) >= 12) && | 726 (char2int(trak->stdata,52) >= 12) && |
727 (char2int(trak->stdata,52+4) == MOV_FOURCC('f','r','m','a')) && | 727 (char2int(trak->stdata,52+4) == MOV_FOURCC('f','r','m','a'))) { |
728 (char2int(trak->stdata,52+8) == MOV_FOURCC('a','l','a','c')) && | 728 switch(char2int(trak->stdata,52+8)) { |
729 (len >= 36 + char2int(trak->stdata,52))) { | 729 case MOV_FOURCC('a','l','a','c'): |
730 if (len >= 36 + char2int(trak->stdata,52)) { | |
730 sh->codecdata_len = char2int(trak->stdata,52+char2int(trak->stdata,52)); | 731 sh->codecdata_len = char2int(trak->stdata,52+char2int(trak->stdata,52)); |
731 mp_msg(MSGT_DEMUX, MSGL_V, "MOV: Found alac atom (%d)!\n", sh->codecdata_len); | 732 mp_msg(MSGT_DEMUX, MSGL_V, "MOV: Found alac atom (%d)!\n", sh->codecdata_len); |
732 sh->codecdata = (unsigned char *)malloc(sh->codecdata_len); | 733 sh->codecdata = (unsigned char *)malloc(sh->codecdata_len); |
733 memcpy(sh->codecdata, &trak->stdata[52+char2int(trak->stdata,52)], sh->codecdata_len); | 734 memcpy(sh->codecdata, &trak->stdata[52+char2int(trak->stdata,52)], sh->codecdata_len); |
735 } | |
736 break; | |
737 case MOV_FOURCC('i','n','2','4'): | |
738 case MOV_FOURCC('i','n','3','2'): | |
739 case MOV_FOURCC('f','l','3','2'): | |
740 case MOV_FOURCC('f','l','6','4'): | |
741 if ((len >= 22) && | |
742 (char2int(trak->stdata,52+16)==MOV_FOURCC('e','n','d','a')) && | |
743 (char2short(trak->stdata,52+20))) { | |
744 sh->format=le2me_32(char2int(trak->stdata,52+8)); | |
745 mp_msg(MSGT_DEMUX, MSGL_V, "MOV: Found little endian PCM data, reversed fourcc:%04x\n", sh->format); | |
746 } | |
747 break; | |
748 default: break; | |
749 } | |
734 } else { | 750 } else { |
735 if (len > 8 && len + 44 <= trak->stdata_len) { | 751 if (len > 8 && len + 44 <= trak->stdata_len) { |
736 sh->codecdata_len = len-8; | 752 sh->codecdata_len = len-8; |
737 sh->codecdata = trak->stdata+44+8; | 753 sh->codecdata = trak->stdata+44+8; |
738 } | 754 } |