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/* Foxconn modify start, Bernie 06/01/2016 */ 19#include "../ffmpeg-2.3.4/libavutil/avutil.h" 20#include "../ffmpeg-2.3.4/libavcodec/avcodec.h" 21#include "../ffmpeg-2.3.4/libavformat/avformat.h" 22/* Foxconn modify end, Bernie 06/01/2016 */ 23 24#ifndef FF_PROFILE_H264_BASELINE 25#define FF_PROFILE_H264_BASELINE 66 26#endif 27#ifndef FF_PROFILE_H264_CONSTRAINED_BASELINE 28#define FF_PROFILE_H264_CONSTRAINED_BASELINE 578 29#endif 30#ifndef FF_PROFILE_H264_MAIN 31#define FF_PROFILE_H264_MAIN 77 32#endif 33#ifndef FF_PROFILE_H264_HIGH 34#define FF_PROFILE_H264_HIGH 100 35#endif 36/* Foxconn modify start, Bernie 06/01/2016 */ 37//#ifndef FF_PROFILE_SKIP 38#define FF_PROFILE_SKIP -100 39//#endif 40/* Foxconn modify end, Bernie 06/01/2016 */ 41 42#if LIBAVCODEC_VERSION_MAJOR < 53 43#define AVMEDIA_TYPE_AUDIO CODEC_TYPE_AUDIO 44#define AVMEDIA_TYPE_VIDEO CODEC_TYPE_VIDEO 45#endif 46 47#if LIBAVCODEC_VERSION_INT <= ((51<<16)+(50<<8)+1) 48#define CODEC_ID_WMAPRO CODEC_ID_NONE 49#endif 50 51#if LIBAVCODEC_VERSION_MAJOR < 55 52#define AV_CODEC_ID_AAC CODEC_ID_AAC 53#define AV_CODEC_ID_AC3 CODEC_ID_AC3 54#define AV_CODEC_ID_ADPCM_IMA_QT CODEC_ID_ADPCM_IMA_QT 55#define AV_CODEC_ID_AMR_NB CODEC_ID_AMR_NB 56#define AV_CODEC_ID_DTS CODEC_ID_DTS 57#define AV_CODEC_ID_H264 CODEC_ID_H264 58#define AV_CODEC_ID_MP2 CODEC_ID_MP2 59#define AV_CODEC_ID_MP3 CODEC_ID_MP3 60#define AV_CODEC_ID_MPEG1VIDEO CODEC_ID_MPEG1VIDEO 61#define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO 62#define AV_CODEC_ID_MPEG4 CODEC_ID_MPEG4 63#define AV_CODEC_ID_MSMPEG4V3 CODEC_ID_MSMPEG4V3 64#define AV_CODEC_ID_PCM_S16LE CODEC_ID_PCM_S16LE 65#define AV_CODEC_ID_VC1 CODEC_ID_VC1 66#define AV_CODEC_ID_WMAPRO CODEC_ID_WMAPRO 67#define AV_CODEC_ID_WMAV1 CODEC_ID_WMAV1 68#define AV_CODEC_ID_WMAV2 CODEC_ID_WMAV2 69#define AV_CODEC_ID_WMV3 CODEC_ID_WMV3 70#endif 71 72#if LIBAVUTIL_VERSION_INT < ((50<<16)+(13<<8)+0) 73#define av_strerror(x, y, z) snprintf(y, z, "%d", x) 74#endif 75 76#if LIBAVFORMAT_VERSION_INT >= ((52<<16)+(31<<8)+0) 77# if LIBAVUTIL_VERSION_INT < ((51<<16)+(5<<8)+0) && !defined(FF_API_OLD_METADATA2) 78#define AV_DICT_IGNORE_SUFFIX AV_METADATA_IGNORE_SUFFIX 79#define av_dict_get av_metadata_get 80typedef AVMetadataTag AVDictionaryEntry; 81# endif 82#endif 83 84static inline int 85lav_open(AVFormatContext **ctx, const char *filename) 86{ 87 int ret; 88#if LIBAVFORMAT_VERSION_INT >= ((53<<16)+(17<<8)+0) 89 ret = avformat_open_input(ctx, filename, NULL, NULL); 90 if (ret == 0) 91 avformat_find_stream_info(*ctx, NULL); 92#else 93 ret = av_open_input_file(ctx, filename, NULL, 0, NULL); 94 if (ret == 0) 95 av_find_stream_info(*ctx); 96#endif 97 return ret; 98} 99 100static inline void 101lav_close(AVFormatContext *ctx) 102{ 103#if LIBAVFORMAT_VERSION_INT >= ((53<<16)+(17<<8)+0) 104 avformat_close_input(&ctx); 105#else 106 av_close_input_file(ctx); 107#endif 108} 109 110static inline int 111lav_get_fps(AVStream *s) 112{ 113#if LIBAVCODEC_VERSION_MAJOR < 54 114 if (s->r_frame_rate.den) 115 return s->r_frame_rate.num / s->r_frame_rate.den; 116#else 117 if (s->avg_frame_rate.den) 118 return s->avg_frame_rate.num / s->avg_frame_rate.den; 119#endif 120 return 0; 121} 122 123static inline int 124lav_get_interlaced(AVCodecContext *vc, AVStream *s) 125{ 126#if LIBAVCODEC_VERSION_MAJOR < 54 127 return (vc->time_base.den ? (s->r_frame_rate.num / vc->time_base.den) : 0); 128#else 129 return (vc->time_base.den ? (s->avg_frame_rate.num / vc->time_base.den) : 0); 130#endif 131} 132 133static inline int 134lav_is_thumbnail_stream(AVStream *s, uint8_t **data, int *size) 135{ 136#if LIBAVFORMAT_VERSION_INT >= ((54<<16)+(6<<8)) 137 if (s->disposition & AV_DISPOSITION_ATTACHED_PIC && 138 s->codec->codec_id == AV_CODEC_ID_MJPEG) 139 { 140 if (data) 141 *data = s->attached_pic.data; 142 if (size) 143 *size = s->attached_pic.size; 144 return 1; 145 } 146#endif 147 return 0; 148} 149