mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-28 10:22:10 +00:00
Add support for parsing and decoding DCA-HD streams.
Originally committed as revision 15951 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
d33ee3f2b1
commit
d041a59897
@ -1175,8 +1175,9 @@ static int dca_convert_bitstream(const uint8_t * src, int src_size, uint8_t * ds
|
||||
PutBitContext pb;
|
||||
|
||||
if((unsigned)src_size > (unsigned)max_size) {
|
||||
av_log(NULL, AV_LOG_ERROR, "Input frame size larger then DCA_MAX_FRAME_SIZE!\n");
|
||||
return -1;
|
||||
// av_log(NULL, AV_LOG_ERROR, "Input frame size larger then DCA_MAX_FRAME_SIZE!\n");
|
||||
// return -1;
|
||||
src_size = max_size;
|
||||
}
|
||||
|
||||
mrk = AV_RB32(src);
|
||||
|
@ -31,4 +31,7 @@
|
||||
#define DCA_MARKER_14B_BE 0x1FFFE800
|
||||
#define DCA_MARKER_14B_LE 0xFF1F00E8
|
||||
|
||||
/** DCA-HD specific block starts with this marker. */
|
||||
#define DCA_HD_MARKER 0x64582025
|
||||
|
||||
#endif /* AVCODEC_DCA_H */
|
||||
|
@ -34,6 +34,7 @@ typedef struct DCAParseContext {
|
||||
uint32_t lastmarker;
|
||||
int size;
|
||||
int framesize;
|
||||
int hd_pos;
|
||||
} DCAParseContext;
|
||||
|
||||
#define IS_MARKER(state, i, buf, buf_size) \
|
||||
@ -75,10 +76,16 @@ static int dca_find_frame_end(DCAParseContext * pc1, const uint8_t * buf,
|
||||
for (; i < buf_size; i++) {
|
||||
pc1->size++;
|
||||
state = (state << 8) | buf[i];
|
||||
if (state == pc1->lastmarker && IS_MARKER(state, i, buf, buf_size) && (!pc1->framesize || pc1->framesize == pc1->size)) {
|
||||
if (state == DCA_HD_MARKER && !pc1->hd_pos)
|
||||
pc1->hd_pos = pc1->size;
|
||||
if (state == pc1->lastmarker && IS_MARKER(state, i, buf, buf_size)) {
|
||||
if(pc1->framesize > pc1->size)
|
||||
continue;
|
||||
if(!pc1->framesize){
|
||||
pc1->framesize = pc1->hd_pos ? pc1->hd_pos : pc1->size;
|
||||
}
|
||||
pc->frame_start_found = 0;
|
||||
pc->state = -1;
|
||||
pc1->framesize = pc1->size;
|
||||
pc1->size = 0;
|
||||
return i - 3;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user