1/* MiniDLNA media server 2 * Copyright (C) 2013 NETGEAR 3 * 4 * This file is part of MiniDLNA. 5 * 6 * MiniDLNA is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * MiniDLNA is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with MiniDLNA. If not, see <http://www.gnu.org/licenses/>. 17 */ 18#if defined HAVE_FFMPEG_LIBAVUTIL_AVUTIL_H 19#include <ffmpeg/libavutil/avutil.h> 20#elif defined HAVE_LIBAV_LIBAVUTIL_AVUTIL_H 21#include <libav/libavutil/avutil.h> 22#elif defined HAVE_LIBAVUTIL_AVUTIL_H 23#include <libavutil/avutil.h> 24#elif defined HAVE_FFMPEG_AVUTIL_H 25#include <ffmpeg/avutil.h> 26#elif defined HAVE_LIBAV_AVUTIL_H 27#include <libav/avutil.h> 28#elif defined HAVE_AVUTIL_H 29#include <avutil.h> 30#endif 31 32#if defined HAVE_FFMPEG_LIBAVCODEC_AVCODEC_H 33#include <ffmpeg/libavcodec/avcodec.h> 34#elif defined HAVE_LIBAV_LIBAVCODEC_AVCODEC_H 35#include <libav/libavcodec/avcodec.h> 36#elif defined HAVE_LIBAVCODEC_AVCODEC_H 37#include <libavcodec/avcodec.h> 38#elif defined HAVE_FFMPEG_AVCODEC_H 39#include <ffmpeg/avcodec.h> 40#elif defined HAVE_LIBAV_AVCODEC_H 41#include <libav/avcodec.h> 42#elif defined HAVE_AVCODEC_H 43#include <avcodec.h> 44#endif 45 46#if defined HAVE_FFMPEG_LIBAVFORMAT_AVFORMAT_H 47#include <ffmpeg/libavformat/avformat.h> 48#elif defined HAVE_LIBAV_LIBAVFORMAT_AVFORMAT_H 49#include <libav/libavformat/avformat.h> 50#elif defined HAVE_LIBAVFORMAT_AVFORMAT_H 51#include <libavformat/avformat.h> 52#elif defined HAVE_FFMPEG_AVFORMAT_H 53#include <ffmpeg/avformat.h> 54#elif defined HAVE_LIBAV_LIBAVFORMAT_H 55#include <libav/avformat.h> 56#elif defined HAVE_AVFORMAT_H 57#include <avformat.h> 58#endif 59 60#ifndef FF_PROFILE_H264_BASELINE 61#define FF_PROFILE_H264_BASELINE 66 62#endif 63#ifndef FF_PROFILE_H264_CONSTRAINED_BASELINE 64#define FF_PROFILE_H264_CONSTRAINED_BASELINE 578 65#endif 66#ifndef FF_PROFILE_H264_MAIN 67#define FF_PROFILE_H264_MAIN 77 68#endif 69#ifndef FF_PROFILE_H264_HIGH 70#define FF_PROFILE_H264_HIGH 100 71#endif 72#ifndef FF_PROFILE_SKIP 73#define FF_PROFILE_SKIP -100 74#endif 75 76#if LIBAVCODEC_VERSION_MAJOR < 53 77#define AVMEDIA_TYPE_AUDIO CODEC_TYPE_AUDIO 78#define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO 79#endif 80 81#if LIBAVCODEC_VERSION_INT <= ((51<<16)+(50<<8)+1) 82#define CODEC_ID_WMAPRO CODEC_ID_NONE 83#endif 84 85#if LIBAVCODEC_VERSION_MAJOR < 55 86#define AV_CODEC_ID_AAC CODEC_ID_AAC 87#define AV_CODEC_ID_AC3 CODEC_ID_AC3 88#define AV_CODEC_ID_ADPCM_IMA_QT CODEC_ID_ADPCM_IMA_QT 89#define AV_CODEC_ID_AMR_NB CODEC_ID_AMR_NB 90#define AV_CODEC_ID_DTS CODEC_ID_DTS 91#define AV_CODEC_ID_H264 CODEC_ID_H264 92#define AV_CODEC_ID_MP2 CODEC_ID_MP2 93#define AV_CODEC_ID_MP3 CODEC_ID_MP3 94#define AV_CODEC_ID_MPEG1VIDEO CODEC_ID_MPEG1VIDEO 95#define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO 96#define AV_CODEC_ID_MPEG4 CODEC_ID_MPEG4 97#define AV_CODEC_ID_MSMPEG4V3 CODEC_ID_MSMPEG4V3 98#define AV_CODEC_ID_PCM_S16LE CODEC_ID_PCM_S16LE 99#define AV_CODEC_ID_VC1 CODEC_ID_VC1 100#define AV_CODEC_ID_WMAPRO CODEC_ID_WMAPRO 101#define AV_CODEC_ID_WMAV1 CODEC_ID_WMAV1 102#define AV_CODEC_ID_WMAV2 CODEC_ID_WMAV2 103#define AV_CODEC_ID_WMV3 CODEC_ID_WMV3 104#endif 105 106#if LIBAVUTIL_VERSION_INT < ((50<<16)+(13<<8)+0) 107#define av_strerror(x, y, z) snprintf(y, z, "%d", x) 108#endif 109 110#if LIBAVFORMAT_VERSION_INT >= ((52<<16)+(31<<8)+0) 111# if LIBAVUTIL_VERSION_INT < ((51<<16)+(5<<8)+0) && !defined(FF_API_OLD_METADATA2) 112#define AV_DICT_IGNORE_SUFFIX AV_METADATA_IGNORE_SUFFIX 113#define av_dict_get av_metadata_get 114typedef AVMetadataTag AVDictionaryEntry; 115# endif 116#endif 117 118static inline int 119lav_open(AVFormatContext **ctx, const char *filename) 120{ 121 int ret; 122#if LIBAVFORMAT_VERSION_INT >= ((53<<16)+(17<<8)+0) 123 ret = avformat_open_input(ctx, filename, NULL, NULL); 124 if (ret == 0) 125 avformat_find_stream_info(*ctx, NULL); 126#else 127 ret = av_open_input_file(ctx, filename, NULL, 0, NULL); 128 if (ret == 0) 129 av_find_stream_info(*ctx); 130#endif 131 return ret; 132} 133 134static inline void 135lav_close(AVFormatContext *ctx) 136{ 137#if LIBAVFORMAT_VERSION_INT >= ((53<<16)+(17<<8)+0) 138 avformat_close_input(&ctx); 139#else 140 av_close_input_file(ctx); 141#endif 142} 143 144static inline int 145lav_get_fps(AVStream *s) 146{ 147#if LIBAVCODEC_VERSION_MAJOR < 54 148 if (s->r_frame_rate.den) 149 return s->r_frame_rate.num / s->r_frame_rate.den; 150#else 151 if (s->avg_frame_rate.den) 152 return s->avg_frame_rate.num / s->avg_frame_rate.den; 153#endif 154 return 0; 155} 156 157static inline int 158lav_get_interlaced(AVCodecContext *vc, AVStream *s) 159{ 160#if LIBAVCODEC_VERSION_MAJOR < 54 161 return (vc->time_base.den ? (s->r_frame_rate.num / vc->time_base.den) : 0); 162#else 163 return (vc->time_base.den ? (s->avg_frame_rate.num / vc->time_base.den) : 0); 164#endif 165} 166 167static inline int 168lav_is_thumbnail_stream(AVStream *s, uint8_t **data, int *size) 169{ 170#if LIBAVFORMAT_VERSION_INT >= ((54<<16)+(6<<8)) 171 if (s->disposition & AV_DISPOSITION_ATTACHED_PIC && 172 s->codec->codec_id == AV_CODEC_ID_MJPEG) 173 { 174 if (data) 175 *data = s->attached_pic.data; 176 if (size) 177 *size = s->attached_pic.size; 178 return 1; 179 } 180#endif 181 return 0; 182} 183