//20150514
//#include "StdAfx.h"
//#include
#include
#include
#include
#include "libavutil/opt.h"
//#include
#include "avfilter.h"
#include "avformat.h"
#include "avcodec.h"
#include "buffersink.h"
#include "frame.h"
#include "buffersrc.h"
#include "avutil.h"
#define LOG_ERR(var,...)\
do{ \
fprintf(stderr,"\033[31m[ERROR:%s->%s:%d] " var "\033[0m", __FILE__, \
__func__,__LINE__, ##__VA_ARGS__); \
}while(0);
const char *filter_descr = "amix=inputs=2,asetnsamples=n=1024";
typedef void* LPVOID;
void getMixAudio();
FILE * f;
//FILE* f1;
//ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex amix=inputs=2:duration=longest:dropout_transition=2 a.mp3
//ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f mp3 a.mp3
static AVFormatContext *fmt_ctx1;
static AVFormatContext *fmt_ctx2;
static AVFormatContext *fmt_ctx3;
static AVCodecContext *dec_ctx1;
static AVCodecContext *dec_ctx2;
static AVCodecContext *dec_ctx3;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx1;
AVFilterContext *buffersrc_ctx2;
AVFilterContext *buffersrc_ctx3;
AVFilterGraph *filter_graph;
static int audio_stream_index = -1;
AVFrame* frame1;
AVFrame* frame2;
AVFrame* frame3;
//CRITICAL_SECTION crt;
//CRITICAL_SECTION crt_mix;
pthread_mutex_t crt;
pthread_mutex_t crt_mix;
static int open_input_file(const char *filename, AVFormatContext* fmt_ctx, AVCodecContext* dec_ctx)
{
int ret;
AVCodec *dec;
LOG_ERR("TTTTTTTTTTTT\n");
if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
return ret;
}
LOG_ERR("TTTTTTTTTTTT\n");
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
return ret;
}
LOG_ERR("TTTTTTTTTTTT\n");
/* select the audio stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LO