1
/***************************************************************************
2
copyright : (C) 2006 by mean
3
email : fixounet@free.fr
4
***************************************************************************/
6
/***************************************************************************
8
* This program is free software; you can redistribute it and/or modify *
9
* it under the terms of the GNU General Public License as published by *
10
* the Free Software Foundation; either version 2 of the License, or *
11
* (at your option) any later version. *
13
***************************************************************************/
23
#include "ADM_library/default.h"
24
#include "ADM_editor/ADM_Video.h"
25
#include <ADM_assert.h>
27
#include "ADM_library/fourcc.h"
28
#include "ADM_toolkit/toolkit.hxx"
34
#include "ADM_lavcodec/avcodec.h"
35
#include "ADM_lavformat/avformat.h"
38
#define CONTEXT ((AVFormatContext* )_context)
41
__________________________________________________________
46
printf("[MkvAudio] Destroying track\n");
49
av_close_input_file(CONTEXT);
54
__________________________________________________________
57
mkvAudio::mkvAudio(char *name,mkvAudioTrak *track)
59
printf("[MkvAudio] Creating track\n");
60
_trackIndex=track->streamIndex;
61
_wavheader=&(track->wavHeader);
62
_extraDataLen=track->extraDataLen;
63
_extraData=track->extraData;
64
_length=track->length;
67
AVInputFormat *format;
69
printf("[Matroska] Open\n");
70
format= av_find_input_format("matroska");
72
ADM_assert(0<= av_open_input_file((AVFormatContext **)&_context, name, format, 0, NULL));
73
av_find_stream_info(CONTEXT);
76
__________________________________________________________
79
uint32_t mkvAudio::read(uint32_t len,uint8_t *buffer)
82
if(!getPacket( buffer, &lan, &samples)) return 0;
86
__________________________________________________________
89
uint8_t mkvAudio::goTo(uint32_t newoffset)
94
__________________________________________________________
97
uint8_t mkvAudio::goToTime(uint32_t newoffset)
102
__________________________________________________________
105
uint8_t mkvAudio::extraData(uint32_t *l,uint8_t **d)
120
__________________________________________________________
123
uint8_t mkvAudio::getPacket(uint8_t *dest, uint32_t *len, uint32_t *samples)
126
AVPacket pkt1, *pkt = &pkt1;
130
ret = av_read_frame(CONTEXT, pkt);
133
printf("[MKV] Error reading audio frame %d\n");
136
if(pkt->stream_index!=_trackIndex)
138
//printf("[MKV] Wrong stream %u %u\n",pkt->stream_index,_videoIndex);
141
memcpy(dest,pkt->data,pkt->size);
143
*samples=1024; // FIXME