| 47 | }; |
| 48 | |
| 49 | int avpriv_dca_convert_bitstream(const uint8_t *src, int src_size, uint8_t *dst, |
| 50 | int max_size) |
| 51 | { |
| 52 | uint32_t mrk; |
| 53 | int i, tmp; |
| 54 | PutBitContext pb; |
| 55 | |
| 56 | if ((unsigned) src_size > (unsigned) max_size) |
| 57 | src_size = max_size; |
| 58 | |
| 59 | mrk = AV_RB32(src); |
| 60 | switch (mrk) { |
| 61 | case DCA_SYNCWORD_CORE_BE: |
| 62 | case DCA_SYNCWORD_SUBSTREAM: |
| 63 | memcpy(dst, src, src_size); |
| 64 | return src_size; |
| 65 | case DCA_SYNCWORD_CORE_LE: |
| 66 | for (i = 0; i < (src_size + 1) >> 1; i++) { |
| 67 | AV_WB16(dst, AV_RL16(src)); |
| 68 | src += 2; |
| 69 | dst += 2; |
| 70 | } |
| 71 | return src_size; |
| 72 | case DCA_SYNCWORD_CORE_14B_BE: |
| 73 | case DCA_SYNCWORD_CORE_14B_LE: |
| 74 | init_put_bits(&pb, dst, max_size); |
| 75 | for (i = 0; i < (src_size + 1) >> 1; i++, src += 2) { |
| 76 | tmp = ((mrk == DCA_SYNCWORD_CORE_14B_BE) ? AV_RB16(src) : AV_RL16(src)) & 0x3FFF; |
| 77 | put_bits(&pb, 14, tmp); |
| 78 | } |
| 79 | flush_put_bits(&pb); |
| 80 | return put_bytes_output(&pb); |
| 81 | default: |
| 82 | return AVERROR_INVALIDDATA; |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | int ff_dca_parse_core_frame_header(DCACoreFrameHeader *h, GetBitContext *gb) |
| 87 | { |
no test coverage detected