diff -up xbmc-10.1/xbmc/cdrip/EncoderFFmpeg.cpp.ffmpeg xbmc-10.1/xbmc/cdrip/EncoderFFmpeg.cpp --- xbmc-10.1/xbmc/cdrip/EncoderFFmpeg.cpp.ffmpeg 2011-03-05 04:33:37.000000000 +0100 +++ xbmc-10.1/xbmc/cdrip/EncoderFFmpeg.cpp 2011-09-09 16:33:20.000000000 +0200 @@ -98,7 +98,9 @@ bool CEncoderFFmpeg::Init(const char* st memset(¶ms, 0, sizeof(params)); params.channels = iInChannels; params.sample_rate = iInRate; +#if FF_API_PARAMETERS_CODEC_ID params.audio_codec_id = codec->id; +#endif params.channel = 0; if (m_dllAvFormat.av_set_parameters(m_Format, ¶ms) != 0) { @@ -121,7 +123,11 @@ bool CEncoderFFmpeg::Init(const char* st /* set the stream's parameters */ m_CodecCtx = m_Stream->codec; m_CodecCtx->codec_id = codec->id; +#if LIBAVCODEC_VERSION_MAJOR < 53 m_CodecCtx->codec_type = CODEC_TYPE_AUDIO; +#else + m_CodecCtx->codec_type = AVMEDIA_TYPE_AUDIO; +#endif m_CodecCtx->bit_rate = m_Format->bit_rate; m_CodecCtx->sample_rate = iInRate; m_CodecCtx->channels = iInChannels; diff -up xbmc-10.1/xbmc/cores/dvdplayer/Codecs/DllAvCodec.h.ffmpeg xbmc-10.1/xbmc/cores/dvdplayer/Codecs/DllAvCodec.h --- xbmc-10.1/xbmc/cores/dvdplayer/Codecs/DllAvCodec.h.ffmpeg 2011-03-05 04:33:37.000000000 +0100 +++ xbmc-10.1/xbmc/cores/dvdplayer/Codecs/DllAvCodec.h 2011-09-09 17:28:59.000000000 +0200 @@ -48,6 +48,7 @@ extern "C" { #if (defined AVPACKET_IN_AVFORMAT) #include #endif + #include #elif (defined HAVE_FFMPEG_AVCODEC_H) #include #include @@ -105,7 +106,11 @@ public: virtual void avpicture_free(AVPicture *picture)=0; virtual void av_free_packet(AVPacket *pkt)=0; virtual int avpicture_alloc(AVPicture *picture, PixelFormat pix_fmt, int width, int height)=0; +#if FF_API_SET_STRING_OLD virtual AVOption *av_set_string(void *obj, const char *name, const char *val)=0; +#else + virtual const AVOption *av_set_string(void *obj, const char *name, const char *val)=0; +#endif virtual enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat *fmt)=0; virtual int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic)=0; virtual void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic)=0; @@ -157,9 +162,42 @@ public: } virtual AVFrame *avcodec_alloc_frame() { return ::avcodec_alloc_frame(); } virtual int avpicture_fill(AVPicture *picture, uint8_t *ptr, PixelFormat pix_fmt, int width, int height) { return ::avpicture_fill(picture, ptr, pix_fmt, width, height); } +#if FF_API_VIDEO_OLD virtual int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, uint8_t *buf, int buf_size) { return ::avcodec_decode_video(avctx, picture, got_picture_ptr, buf, buf_size); } +#else + virtual int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, uint8_t *buf, int buf_size) + { + AVPacket avpkt; + av_init_packet(&avpkt); + avpkt.data = buf; + avpkt.size = buf_size; + return ::avcodec_decode_video2(avctx, picture, got_picture_ptr, &avpkt); + } +#endif +#if FF_API_AUDIO_OLD virtual int avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples, int *frame_size_ptr, uint8_t *buf, int buf_size) { return ::avcodec_decode_audio2(avctx, samples, frame_size_ptr, buf, buf_size); } +#else + virtual int avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples, int *frame_size_ptr, uint8_t *buf, int buf_size) + { + AVPacket avpkt; + av_init_packet(&avpkt); + avpkt.data = buf; + avpkt.size = buf_size; + return ::avcodec_decode_audio3(avctx, samples, frame_size_ptr, &avpkt); + } +#endif +#if FF_API_SUBTITLE_OLD virtual int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, const uint8_t *buf, int buf_size) { return ::avcodec_decode_subtitle(avctx, sub, got_sub_ptr, buf, buf_size); } +#else + virtual int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, const uint8_t *buf, int buf_size) + { + AVPacket avpkt; + av_init_packet(&avpkt); + avpkt.data = (uint8_t *)buf; + avpkt.size = buf_size; + return ::avcodec_decode_subtitle2(avctx, sub, got_sub_ptr, &avpkt); + } +#endif virtual int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, const short *samples) { return ::avcodec_encode_audio(avctx, buf, buf_size, samples); } virtual int avpicture_get_size(PixelFormat pix_fmt, int width, int height) { return ::avpicture_get_size(pix_fmt, width, height); } virtual AVCodecContext *avcodec_alloc_context() { return ::avcodec_alloc_context(); } @@ -169,13 +207,27 @@ public: virtual AVCodecParserContext *av_parser_init(int codec_id) { return ::av_parser_init(codec_id); } virtual int av_parser_parse(AVCodecParserContext *s,AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size, +#if LIBAVCODEC_VERSION_MAJOR < 53 int64_t pts, int64_t dts) { return ::av_parser_parse(s, avctx, poutbuf, poutbuf_size, buf, buf_size, pts, dts); } +#else + int64_t pts, int64_t dts) { return ::av_parser_parse2(s, avctx, poutbuf, poutbuf_size, buf, buf_size, pts, dts, AV_NOPTS_VALUE); } +#endif virtual void av_parser_close(AVCodecParserContext *s) { ::av_parser_close(s); } virtual void avpicture_free(AVPicture *picture) { ::avpicture_free(picture); } virtual void av_free_packet(AVPacket *pkt) { ::av_free_packet(pkt); } virtual int avpicture_alloc(AVPicture *picture, PixelFormat pix_fmt, int width, int height) { return ::avpicture_alloc(picture, pix_fmt, width, height); } +#if FF_API_SET_STRING_OLD virtual AVOption *av_set_string(void *obj, const char *name, const char *val) { return ::av_set_string(obj, name, val); } +#else + virtual const AVOption *av_set_string(void *obj, const char *name, const char *val) + { + const AVOption *o; + if (av_set_string3(obj, name, val, 0, &o) < 0) + return NULL; + return o; + } +#endif virtual int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic) { return ::avcodec_default_get_buffer(s, pic); } virtual void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic) { ::avcodec_default_release_buffer(s, pic); } virtual enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat *fmt) { return ::avcodec_default_get_format(s, fmt); } diff -up xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp.ffmpeg xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp --- xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp.ffmpeg 2011-03-05 04:33:37.000000000 +0100 +++ xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecFFmpeg.cpp 2011-09-09 16:36:13.000000000 +0200 @@ -98,7 +98,11 @@ bool CDVDAudioCodecFFmpeg::Open(CDVDStre } // set acceleration +#if FF_API_MM_FLAGS m_pCodecContext->dsp_mask = FF_MM_FORCE | FF_MM_MMX | FF_MM_MMXEXT | FF_MM_SSE; +#else + m_pCodecContext->dsp_mask = AV_CPU_FLAG_FORCE | AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMX2 | AV_CPU_FLAG_SSE; +#endif if (m_dllAvCodec.avcodec_open(m_pCodecContext, pCodec) < 0) { diff -up xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.cpp.ffmpeg xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.cpp --- xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.cpp.ffmpeg 2011-03-05 04:33:37.000000000 +0100 +++ xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.cpp 2011-09-09 16:37:53.000000000 +0200 @@ -119,7 +119,9 @@ bool CDVDAudioCodecPassthroughFFmpeg::Se memset(¶ms, 0, sizeof(params)); params.channels = hints.channels; params.sample_rate = hints.samplerate; +#if FF_API_PARAMETERS_CODEC_ID params.audio_codec_id = hints.codec; +#endif params.channel = 0; if (m_dllAvFormat.av_set_parameters(muxer.m_pFormat, ¶ms) != 0) { @@ -146,7 +148,11 @@ bool CDVDAudioCodecPassthroughFFmpeg::Se m_SampleRate = 48000; AVCodecContext *codec = muxer.m_pStream->codec; +#if LIBAVCODEC_VERSION_MAJOR < 53 codec->codec_type = CODEC_TYPE_AUDIO; +#else + codec->codec_type = AVMEDIA_TYPE_AUDIO; +#endif codec->codec_id = hints.codec; codec->sample_rate = m_SampleRate; codec->sample_fmt = SAMPLE_FMT_S16; diff -up xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp.ffmpeg xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp --- xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp.ffmpeg 2011-03-05 04:33:37.000000000 +0100 +++ xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp 2011-09-09 16:41:29.000000000 +0200 @@ -53,7 +53,11 @@ bool CDVDOverlayCodecFFmpeg::Open(CDVDSt m_pCodecContext->debug_mv = 0; m_pCodecContext->debug = 0; m_pCodecContext->workaround_bugs = FF_BUG_AUTODETECT; +#if FF_API_MM_FLAGS m_pCodecContext->dsp_mask = FF_MM_FORCE | FF_MM_MMX | FF_MM_MMXEXT | FF_MM_SSE; +#else + m_pCodecContext->dsp_mask = AV_CPU_FLAG_FORCE | AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMX2 | AV_CPU_FLAG_SSE; +#endif m_pCodecContext->sub_id = hints.identifier; m_pCodecContext->codec_tag = hints.codec_tag; diff -up xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp.ffmpeg xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp --- xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp.ffmpeg 2011-03-05 04:33:37.000000000 +0100 +++ xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecFFmpeg.cpp 2011-09-09 16:45:32.000000000 +0200 @@ -182,7 +182,11 @@ bool CDVDVideoCodecFFmpeg::Open(CDVDStre if(pCodec->id == hints.codec && pCodec->capabilities & CODEC_CAP_HWACCEL_VDPAU) { +#if LIBAVCODEC_VERSION_MAJOR < 53 if ((pCodec->id == CODEC_ID_MPEG4 || pCodec->id == CODEC_ID_XVID) && !g_advancedSettings.m_videoAllowMpeg4VDPAU) +#else + if ((pCodec->id == CODEC_ID_MPEG4) && !g_advancedSettings.m_videoAllowMpeg4VDPAU) +#endif continue; CLog::Log(LOGNOTICE,"CDVDVideoCodecFFmpeg::Open() Creating VDPAU(%ix%i, %d)",hints.width, hints.height, hints.codec); @@ -325,20 +329,23 @@ void CDVDVideoCodecFFmpeg::SetDropState( // 2 seem to be to high.. it causes video to be ruined on following images if( bDrop ) { - // TODO: 'hurry_up' has been deprecated in favor of the skip_* variables - // Use those instead. - +#if FF_API_HURRY_UP m_pCodecContext->hurry_up = 1; - //m_pCodecContext->skip_frame = AVDISCARD_NONREF; - //m_pCodecContext->skip_idct = AVDISCARD_NONREF; - //m_pCodecContext->skip_loop_filter = AVDISCARD_NONREF; +#else + m_pCodecContext->skip_frame = AVDISCARD_NONREF; + m_pCodecContext->skip_idct = AVDISCARD_NONREF; + m_pCodecContext->skip_loop_filter = AVDISCARD_NONREF; +#endif } else { +#if FF_API_HURRY_UP m_pCodecContext->hurry_up = 0; - //m_pCodecContext->skip_frame = AVDISCARD_DEFAULT; - //m_pCodecContext->skip_idct = AVDISCARD_DEFAULT; - //m_pCodecContext->skip_loop_filter = AVDISCARD_DEFAULT; +#else + m_pCodecContext->skip_frame = AVDISCARD_DEFAULT; + m_pCodecContext->skip_idct = AVDISCARD_DEFAULT; + m_pCodecContext->skip_loop_filter = AVDISCARD_DEFAULT; +#endif } } } @@ -404,7 +411,11 @@ int CDVDVideoCodecFFmpeg::Decode(BYTE* p return VC_ERROR; } +#if FF_API_HURRY_UP if (len != iSize && !m_pCodecContext->hurry_up) +#else + if (len != iSize && !(m_pCodecContext->skip_frame || m_pCodecContext->skip_idct || m_pCodecContext->skip_loop_filter)) +#endif CLog::Log(LOGWARNING, "%s - avcodec_decode_video didn't consume the full packet. size: %d, consumed: %d", __FUNCTION__, iSize, len); if (!iGotPicture) diff -up xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp.ffmpeg xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp --- xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp.ffmpeg 2011-03-05 04:33:37.000000000 +0100 +++ xbmc-10.1/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp 2011-09-09 16:47:25.000000000 +0200 @@ -1164,7 +1164,11 @@ int CVDPAU::Decode(AVCodecContext *avctx { if(method == VS_INTERLACEMETHOD_VDPAU_TEMPORAL_HALF || method == VS_INTERLACEMETHOD_VDPAU_TEMPORAL_SPATIAL_HALF +#if FF_API_HURRY_UP || avctx->hurry_up) +#else + || avctx->skip_frame || avctx->skip_idct) +#endif m_mixerstep = 0; else m_mixerstep = 1; @@ -1184,7 +1188,11 @@ int CVDPAU::Decode(AVCodecContext *avctx else if(m_mixerstep == 1) { // no new frame given, output second field of old frame +#if FF_API_HURRY_UP if(avctx->hurry_up) +#else + if(avctx->skip_frame || avctx->skip_idct) +#endif { ClearUsedForRender(&past[1]); return VC_BUFFER; diff -up xbmc-10.1/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp.ffmpeg xbmc-10.1/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp --- xbmc-10.1/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp.ffmpeg 2011-03-05 04:33:37.000000000 +0100 +++ xbmc-10.1/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp 2011-09-09 16:55:18.000000000 +0200 @@ -726,7 +726,11 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() if(pkt.pts == 0) pkt.pts = AV_NOPTS_VALUE; +#if LIBAVCODEC_VERSION_MAJOR < 53 if(m_bMatroska && stream->codec && stream->codec->codec_type == CODEC_TYPE_VIDEO) +#else + if(m_bMatroska && stream->codec && stream->codec->codec_type == AVMEDIA_TYPE_VIDEO) +#endif { // matroska can store different timestamps // for different formats, for native stored // stuff it is pts, but for ms compatibility @@ -743,7 +747,11 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() if(m_bMatroska && stream->codec->codec_id == CODEC_ID_TEXT && pkt.convergence_duration != 0) pkt.duration = pkt.convergence_duration; +#if LIBAVCODEC_VERSION_MAJOR < 53 if(m_bAVI && stream->codec && stream->codec->codec_type == CODEC_TYPE_VIDEO) +#else + if(m_bAVI && stream->codec && stream->codec->codec_type == AVMEDIA_TYPE_VIDEO) +#endif { // AVI's always have borked pts, specially if m_pFormatContext->flags includes // AVFMT_FLAG_GENPTS so always use dts @@ -966,7 +974,11 @@ void CDVDDemuxFFmpeg::AddStream(int iId) switch (pStream->codec->codec_type) { +#if LIBAVCODEC_VERSION_MAJOR < 53 case CODEC_TYPE_AUDIO: +#else + case AVMEDIA_TYPE_AUDIO: +#endif { CDemuxStreamAudioFFmpeg* st = new CDemuxStreamAudioFFmpeg(this, pStream); m_streams[iId] = st; @@ -981,7 +993,11 @@ void CDVDDemuxFFmpeg::AddStream(int iId) break; } +#if LIBAVCODEC_VERSION_MAJOR < 53 case CODEC_TYPE_VIDEO: +#else + case AVMEDIA_TYPE_VIDEO: +#endif { CDemuxStreamVideoFFmpeg* st = new CDemuxStreamVideoFFmpeg(this, pStream); m_streams[iId] = st; @@ -1035,13 +1051,21 @@ void CDVDDemuxFFmpeg::AddStream(int iId) } break; } +#if LIBAVCODEC_VERSION_MAJOR < 53 case CODEC_TYPE_DATA: +#else + case AVMEDIA_TYPE_DATA: +#endif { m_streams[iId] = new CDemuxStream(); m_streams[iId]->type = STREAM_DATA; break; } +#if LIBAVCODEC_VERSION_MAJOR < 53 case CODEC_TYPE_SUBTITLE: +#else + case AVMEDIA_TYPE_SUBTITLE: +#endif { #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52,38,1) if (pStream->codec->codec_id == CODEC_ID_DVB_TELETEXT && g_guiSettings.GetBool("videoplayer.teletextenabled")) @@ -1065,13 +1089,21 @@ void CDVDDemuxFFmpeg::AddStream(int iId) break; } } +#if LIBAVCODEC_VERSION_MAJOR < 53 case CODEC_TYPE_ATTACHMENT: +#else + case AVMEDIA_TYPE_ATTACHMENT: +#endif { //mkv attachments. Only bothering with fonts for now. if(pStream->codec->codec_id == CODEC_ID_TTF) { std::string fileName = "special://temp/fonts/"; XFILE::CDirectory::Create(fileName); +#if FF_API_OLD_METADATA fileName += pStream->filename; +#else + fileName += av_metadata_get(pStream->metadata,"filename",NULL,0)->value; +#endif XFILE::CFile file; if(pStream->codec->extradata && file.OpenForWrite(fileName)) { @@ -1110,7 +1142,11 @@ void CDVDDemuxFFmpeg::AddStream(int iId) m_streams[iId]->pPrivate = pStream; m_streams[iId]->flags = (CDemuxStream::EFlags)pStream->disposition; +#if FF_API_OLD_METADATA strcpy( m_streams[iId]->language, pStream->language ); +#else + strcpy( m_streams[iId]->language, av_metadata_get(pStream->metadata,"filename",NULL,0)->value ); +#endif if( pStream->codec->extradata && pStream->codec->extradata_size > 0 ) { diff -up xbmc-10.1/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h.ffmpeg xbmc-10.1/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h --- xbmc-10.1/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h.ffmpeg 2011-03-05 04:33:37.000000000 +0100 +++ xbmc-10.1/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.h 2011-09-07 20:14:30.000000000 +0200 @@ -123,7 +123,9 @@ protected: void UpdateCurrentPTS(); CRITICAL_SECTION m_critSection; - // #define MAX_STREAMS 42 // from avformat.h +#if !FF_API_MAX_STREAMS +#define MAX_STREAMS 42 // from avformat.h +#endif CDemuxStream* m_streams[MAX_STREAMS]; // maximum number of streams that ffmpeg can handle ByteIOContext* m_ioContext; diff -up xbmc-10.1/xbmc/cores/dvdplayer/DVDFileInfo.cpp.ffmpeg xbmc-10.1/xbmc/cores/dvdplayer/DVDFileInfo.cpp --- xbmc-10.1/xbmc/cores/dvdplayer/DVDFileInfo.cpp.ffmpeg 2011-03-05 04:33:37.000000000 +0100 +++ xbmc-10.1/xbmc/cores/dvdplayer/DVDFileInfo.cpp 2011-09-09 16:27:29.000000000 +0200 @@ -308,6 +308,7 @@ void CDVDFileInfo::GetFileMetaData(const pItem->SetProperty("duration-msec", strDuration); strDuration.Format("%02d:%02d:%02d", nHours, nMinutes, nSec); pItem->SetProperty("duration-str", strDuration); +#if FF_API_OLD_METADATA pItem->SetProperty("title", pContext->title); pItem->SetProperty("author", pContext->author); pItem->SetProperty("copyright", pContext->copyright); @@ -318,6 +319,18 @@ void CDVDFileInfo::GetFileMetaData(const strDuration.Format("%d", pContext->track); pItem->SetProperty("track", strDuration); pItem->SetProperty("genre", pContext->genre); +#else + pItem->SetProperty("title", av_metadata_get(pContext->streams[0]->metadata,"title",NULL,0)->value); + pItem->SetProperty("author", av_metadata_get(pContext->streams[0]->metadata,"author",NULL,0)->value); + pItem->SetProperty("copyright", av_metadata_get(pContext->streams[0]->metadata,"copyright",NULL,0)->value); + pItem->SetProperty("comment", av_metadata_get(pContext->streams[0]->metadata,"comment",NULL,0)->value); + pItem->SetProperty("album", av_metadata_get(pContext->streams[0]->metadata,"album",NULL,0)->value); + strDuration.Format("%d", av_metadata_get(pContext->streams[0]->metadata,"year",NULL,0)->value); + pItem->SetProperty("year", strDuration); + strDuration.Format("%d", av_metadata_get(pContext->streams[0]->metadata,"track",NULL,0)->value); + pItem->SetProperty("track", strDuration); + pItem->SetProperty("genre", av_metadata_get(pContext->streams[0]->metadata,"genre",NULL,0)->value); +#endif } delete pDemuxer;