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 }