--- /dev/null
+diff -ur freerdp-1.0.2/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c freerdp-1.0.2.ffmpeg/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c
+--- freerdp-1.0.2/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c 2016-04-04 21:17:22.515023232 +0900
++++ freerdp-1.0.2.ffmpeg/channels/drdynvc/tsmf/ffmpeg/tsmf_ffmpeg.c 2016-04-04 21:16:59.521188035 +0900
+@@ -193,28 +193,28 @@
+ switch (media_type->SubType)
+ {
+ case TSMF_SUB_TYPE_WVC1:
+- mdecoder->codec_id = CODEC_ID_VC1;
++ mdecoder->codec_id = AV_CODEC_ID_VC1;
+ break;
+ case TSMF_SUB_TYPE_WMA2:
+- mdecoder->codec_id = CODEC_ID_WMAV2;
++ mdecoder->codec_id = AV_CODEC_ID_WMAV2;
+ break;
+ case TSMF_SUB_TYPE_WMA9:
+- mdecoder->codec_id = CODEC_ID_WMAPRO;
++ mdecoder->codec_id = AV_CODEC_ID_WMAPRO;
+ break;
+ case TSMF_SUB_TYPE_MP3:
+- mdecoder->codec_id = CODEC_ID_MP3;
++ mdecoder->codec_id = AV_CODEC_ID_MP3;
+ break;
+ case TSMF_SUB_TYPE_MP2A:
+- mdecoder->codec_id = CODEC_ID_MP2;
++ mdecoder->codec_id = AV_CODEC_ID_MP2;
+ break;
+ case TSMF_SUB_TYPE_MP2V:
+- mdecoder->codec_id = CODEC_ID_MPEG2VIDEO;
++ mdecoder->codec_id = AV_CODEC_ID_MPEG2VIDEO;
+ break;
+ case TSMF_SUB_TYPE_WMV3:
+- mdecoder->codec_id = CODEC_ID_WMV3;
++ mdecoder->codec_id = AV_CODEC_ID_WMV3;
+ break;
+ case TSMF_SUB_TYPE_AAC:
+- mdecoder->codec_id = CODEC_ID_AAC;
++ mdecoder->codec_id = AV_CODEC_ID_AAC;
+ /* For AAC the pFormat is a HEAACWAVEINFO struct, and the codec data
+ is at the end of it. See
+ http://msdn.microsoft.com/en-us/library/dd757806.aspx */
+@@ -226,10 +226,10 @@
+ break;
+ case TSMF_SUB_TYPE_H264:
+ case TSMF_SUB_TYPE_AVC1:
+- mdecoder->codec_id = CODEC_ID_H264;
++ mdecoder->codec_id = AV_CODEC_ID_H264;
+ break;
+ case TSMF_SUB_TYPE_AC3:
+- mdecoder->codec_id = CODEC_ID_AC3;
++ mdecoder->codec_id = AV_CODEC_ID_AC3;
+ break;
+ default:
+ return false;
+@@ -351,19 +351,29 @@
+ }
+ dst += mdecoder->decoded_size;
+ }
++
+ frame_size = mdecoder->decoded_size_max - mdecoder->decoded_size;
+ #if LIBAVCODEC_VERSION_MAJOR < 52 || (LIBAVCODEC_VERSION_MAJOR == 52 && LIBAVCODEC_VERSION_MINOR <= 20)
+ len = avcodec_decode_audio2(mdecoder->codec_context,
+- (int16_t*) dst, &frame_size,
+- src, src_size);
++ (int16_t*) dst, &frame_size, src, src_size);
+ #else
+ {
++ AVFrame* decoded_frame = avcodec_alloc_frame();
++ int got_frame = 0;
+ AVPacket pkt;
+ av_init_packet(&pkt);
+ pkt.data = (uint8*) src;
+ pkt.size = src_size;
+- len = avcodec_decode_audio3(mdecoder->codec_context,
+- (int16_t*) dst, &frame_size, &pkt);
++ len = avcodec_decode_audio4(mdecoder->codec_context, decoded_frame, &got_frame, &pkt);
++
++ if (len >= 0 && got_frame)
++ {
++ frame_size = av_samples_get_buffer_size(NULL, mdecoder->codec_context->channels,
++ decoded_frame->nb_samples, mdecoder->codec_context->sample_fmt, 1);
++ memcpy(dst, decoded_frame->data[0], frame_size);
++ }
++
++ av_free(decoded_frame);
+ }
+ #endif
+ if (len <= 0 || frame_size <= 0)
+@@ -435,7 +445,7 @@
+
+ switch (mdecoder->codec_context->pix_fmt)
+ {
+- case PIX_FMT_YUV420P:
++ case AV_PIX_FMT_YUV420P:
+ return RDP_PIXFMT_I420;
+
+ default: