Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 476536 | Differences between
and this patch

Collapse All | Expand All

(-)file_not_specified_in_diff (-336 / +376 lines)
Line  Link Here
0
-- HomerMultimedia/include/Header_Ffmpeg.h
0
++ HomerMultimedia/include/Header_Ffmpeg.h
Lines 62-67 Link Here
62
#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53, 61, 100))
62
#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53, 61, 100))
63
#include <libswresample/swresample.h>
63
#include <libswresample/swresample.h>
64
#endif
64
#endif
65
#if (LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(54, 5, 2))
66
#include <libavutil/time.h>
67
#endif
68
65
}
69
}
66
70
67
#ifndef AV_NUM_DATA_POINTERS
71
#ifndef AV_NUM_DATA_POINTERS
Lines 162-167 Link Here
162
    #define AVMEDIA_TYPE_UNKNOWN CODEC_TYPE_UNKNOWN
166
    #define AVMEDIA_TYPE_UNKNOWN CODEC_TYPE_UNKNOWN
163
#endif
167
#endif
164
168
169
#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53, 25, 0))
170
    #define AVCODEC_MAX_AUDIO_FRAME_SIZE   192000
171
#endif
172
 
173
#if (LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(54, 51, 100))
174
    #define AVCodecID CodecID
175
    #define AV_CODEC_ID_AAC CODEC_ID_AAC
176
    #define AV_CODEC_ID_AC3 CODEC_ID_AC3
177
    #define AV_CODEC_ID_ADPCM CODEC_ID_ADPCM
178
    #define AV_CODEC_ID_ADPCM_G722 CODEC_ID_ADPCM_G722
179
    #define AV_CODEC_ID_AMR CODEC_ID_AMR
180
    #define AV_CODEC_ID_AMR_NB CODEC_ID_AMR_NB
181
    #define AV_CODEC_ID_GSM CODEC_ID_GSM
182
    #define AV_CODEC_ID_H261 CODEC_ID_H261
183
    #define AV_CODEC_ID_H263 CODEC_ID_H263
184
    #define AV_CODEC_ID_H263P CODEC_ID_H263P
185
    #define AV_CODEC_ID_H264 CODEC_ID_H264
186
    #define AV_CODEC_ID_MJPEG CODEC_ID_MJPEG
187
    #define AV_CODEC_ID_MP3 CODEC_ID_MP3
188
    #define AV_CODEC_ID_MPEG1VIDEO CODEC_ID_MPEG1VIDEO
189
    #define AV_CODEC_ID_MPEG2TS CODEC_ID_MPEG2TS
190
    #define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO
191
    #define AV_CODEC_ID_MPEG4 CODEC_ID_MPEG4
192
    #define AV_CODEC_ID_NONE CODEC_ID_NONE
193
    #define AV_CODEC_ID_PCM CODEC_ID_PCM
194
    #define AV_CODEC_ID_PCM_ALAW CODEC_ID_PCM_ALAW
195
    #define AV_CODEC_ID_PCM_MULAW CODEC_ID_PCM_MULAW
196
    #define AV_CODEC_ID_PCM_S16BE CODEC_ID_PCM_S16BE
197
    #define AV_CODEC_ID_PCM_S16LE CODEC_ID_PCM_S16LE
198
    #define AV_CODEC_ID_THEORA CODEC_ID_THEORA
199
    #define AV_CODEC_ID_VORBIS CODEC_ID_VORBIS
200
    #define AV_CODEC_ID_VP8 CODEC_ID_VP8
201
    #define AV_CODEC_ID_WMAV2 CODEC_ID_WMAV2
202
    #define AV_CODEC_ID_WMV3 CODEC_ID_WMV3
203
#endif
204
165
inline int HM_av_samples_fill_arrays(uint8_t **audio_data, int *linesize, uint8_t *buf, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align)
205
inline int HM_av_samples_fill_arrays(uint8_t **audio_data, int *linesize, uint8_t *buf, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align)
166
{
206
{
167
    #if (LIBAVUTIL_VERSION_INT < AV_VERSION_INT(51, 54, 100))
207
    #if (LIBAVUTIL_VERSION_INT < AV_VERSION_INT(51, 54, 100))
168
-- HomerMultimedia/include/MediaSinkMem.h
208
++ HomerMultimedia/include/MediaSinkMem.h
Lines 82-88 Link Here
82
    int64_t             mIncomingAVStreamStartPts;
82
    int64_t             mIncomingAVStreamStartPts;
83
    int64_t				mIncomingAVStreamLastPts;
83
    int64_t				mIncomingAVStreamLastPts;
84
    bool                mIncomingFirstPacket;
84
    bool                mIncomingFirstPacket;
85
    enum CodecID        mIncomingAVStreamCodecID;
85
    enum AVCodecID      mIncomingAVStreamCodecID;
86
    AVStream*			mIncomingAVStream;
86
    AVStream*			mIncomingAVStream;
87
    AVCodecContext*	 	mIncomingAVStreamCodecContext;
87
    AVCodecContext*	 	mIncomingAVStreamCodecContext;
88
    /* general stream handling */
88
    /* general stream handling */
89
-- HomerMultimedia/include/MediaSource.h
89
++ HomerMultimedia/include/MediaSource.h
Lines 215-223 Link Here
215
    virtual MediaSource* GetMediaSource();
215
    virtual MediaSource* GetMediaSource();
216
216
217
    /* codec identifier translation */
217
    /* codec identifier translation */
218
    enum CodecID GetCodecIDFromGuiName(std::string pName);
218
    enum AVCodecID GetCodecIDFromGuiName(std::string pName);
219
    static std::string GetGuiNameFromCodecID(enum CodecID pCodecId);
219
    static std::string GetGuiNameFromCodecID(enum AVCodecID pCodecId);
220
    std::string GetFormatName(enum CodecID pCodecId);
220
    std::string GetFormatName(enum AVCodecID pCodecId);
221
221
222
    /* audio */
222
    /* audio */
223
    static int AudioQuality2BitRate(int pQuality);
223
    static int AudioQuality2BitRate(int pQuality);
Lines 269-275 Link Here
269
    /* grabbing control */
269
    /* grabbing control */
270
    virtual void StopGrabbing();
270
    virtual void StopGrabbing();
271
    virtual bool Reset(enum MediaType = MEDIA_UNKNOWN);
271
    virtual bool Reset(enum MediaType = MEDIA_UNKNOWN);
272
    virtual enum CodecID GetSourceCodec();
272
    virtual enum AVCodecID GetSourceCodec();
273
    virtual std::string GetSourceCodecStr();
273
    virtual std::string GetSourceCodecStr();
274
    virtual std::string GetSourceCodecDescription();
274
    virtual std::string GetSourceCodecDescription();
275
    virtual bool SetInputStreamPreferences(std::string pStreamCodec, bool pRtpActivated = false, bool pDoReset = false);
275
    virtual bool SetInputStreamPreferences(std::string pStreamCodec, bool pRtpActivated = false, bool pDoReset = false);
Lines 408-414 Link Here
408
    void EventGrabChunkFailed(std::string pSource, int pLine, std::string pReason);
408
    void EventGrabChunkFailed(std::string pSource, int pLine, std::string pReason);
409
409
410
    /* FFMPEG helpers */
410
    /* FFMPEG helpers */
411
    bool FfmpegDescribeInput(string pSource/* caller source */, int pLine /* caller line */, CodecID pCodecId, AVInputFormat **pFormat);
411
    bool FfmpegDescribeInput(string pSource/* caller source */, int pLine /* caller line */, AVCodecID pCodecId, AVInputFormat **pFormat);
412
412
413
public:
413
public:
414
    static bool FfmpegCreateIOContext(string pSource/* caller source */, int pLine /* caller line */, char *pPacketBuffer, int pPacketBufferSize, IOFunction pReadFunction, IOFunction pWriteFunction, void *pOpaque, AVIOContext **pIoContext);
414
    static bool FfmpegCreateIOContext(string pSource/* caller source */, int pLine /* caller line */, char *pPacketBuffer, int pPacketBufferSize, IOFunction pReadFunction, IOFunction pWriteFunction, void *pOpaque, AVIOContext **pIoContext);
Lines 442-448 Link Here
442
    double              mSourceTimeShiftForRTGrabbing;
442
    double              mSourceTimeShiftForRTGrabbing;
443
    double              mInputStartPts;
443
    double              mInputStartPts;
444
    double              mNumberOfFrames;
444
    double              mNumberOfFrames;
445
    enum CodecID        mSourceCodecId;
445
    enum AVCodecID      mSourceCodecId;
446
    bool                mEOFReached;
446
    bool                mEOFReached;
447
    /* RT grabbing */
447
    /* RT grabbing */
448
    std::list<int64_t>  mRTGrabbingFrameTimestamps;
448
    std::list<int64_t>  mRTGrabbingFrameTimestamps;
449
-- HomerMultimedia/include/MediaSourceMem.h
449
++ HomerMultimedia/include/MediaSourceMem.h
Lines 179-185 Link Here
179
    bool                mOpenInputStream;
179
    bool                mOpenInputStream;
180
    int                 mWrappingHeaderSize;
180
    int                 mWrappingHeaderSize;
181
    int                 mPacketStatAdditionalFragmentSize; // used to adapt packet statistic to additional fragment header, which is used for TCP transmission
181
    int                 mPacketStatAdditionalFragmentSize; // used to adapt packet statistic to additional fragment header, which is used for TCP transmission
182
    enum CodecID        mRtpSourceCodecIdHint;
182
    enum AVCodecID      mRtpSourceCodecIdHint;
183
    /* grabber */
183
    /* grabber */
184
    double              mCurrentOutputFrameIndex; // we have to determine this manually during grabbing because cur_dts and everything else in AVStream is buggy for some video/audio files
184
    double              mCurrentOutputFrameIndex; // we have to determine this manually during grabbing because cur_dts and everything else in AVStream is buggy for some video/audio files
185
    double              mLastBufferedOutputFrameIndex; // we use this for calibrating RT grabbing
185
    double              mLastBufferedOutputFrameIndex; // we use this for calibrating RT grabbing
186
-- HomerMultimedia/include/MediaSourceMuxer.h
186
++ HomerMultimedia/include/MediaSourceMuxer.h
Lines 108-114 Link Here
108
108
109
    /* streaming control */
109
    /* streaming control */
110
    bool SetOutputStreamPreferences(std::string pStreamCodec, int pMediaStreamQuality, int pBitRate, int pMaxPacketSize = 1300 /* works only with RTP packetizing */, bool pDoReset = false, int pResX = 352, int pResY = 288, bool pRtpActivated = true, int pMaxFps = 0);
110
    bool SetOutputStreamPreferences(std::string pStreamCodec, int pMediaStreamQuality, int pBitRate, int pMaxPacketSize = 1300 /* works only with RTP packetizing */, bool pDoReset = false, int pResX = 352, int pResY = 288, bool pRtpActivated = true, int pMaxFps = 0);
111
    enum CodecID GetStreamCodecId() { return mStreamCodecId; } // used in RTSPListenerMediaSession
111
    enum AVCodecID GetStreamCodecId() { return mStreamCodecId; } // used in RTSPListenerMediaSession
112
112
113
    /* frame stats */
113
    /* frame stats */
114
    virtual bool SupportsDecoderFrameStatistics();
114
    virtual bool SupportsDecoderFrameStatistics();
Lines 135-141 Link Here
135
    /* grabbing control */
135
    /* grabbing control */
136
    virtual void StopGrabbing();
136
    virtual void StopGrabbing();
137
    virtual bool Reset(enum MediaType = MEDIA_UNKNOWN);
137
    virtual bool Reset(enum MediaType = MEDIA_UNKNOWN);
138
    virtual enum CodecID GetSourceCodec();
138
    virtual enum AVCodecID GetSourceCodec();
139
    virtual std::string GetSourceCodecStr();
139
    virtual std::string GetSourceCodecStr();
140
    virtual std::string GetSourceCodecDescription();
140
    virtual std::string GetSourceCodecDescription();
141
    virtual bool SetInputStreamPreferences(std::string pStreamCodec, bool pRtpActivated = false, bool pDoReset = false);
141
    virtual bool SetInputStreamPreferences(std::string pStreamCodec, bool pRtpActivated = false, bool pDoReset = false);
Lines 197-203 Link Here
197
197
198
private:
198
private:
199
    /* video resolution limitation depending on video codec capabilities */
199
    /* video resolution limitation depending on video codec capabilities */
200
    void ApplyVideoResolutionToEncoderCodec(int &pResX, int &pResY, enum CodecID pCodec);
200
    void ApplyVideoResolutionToEncoderCodec(int &pResX, int &pResY, enum AVCodecID pCodec);
201
201
202
    bool OpenVideoMuxer(int pResX = 352, int pResY = 288, float pFps = 29.97);
202
    bool OpenVideoMuxer(int pResX = 352, int pResY = 288, float pFps = 29.97);
203
    bool OpenAudioMuxer(int pSampleRate = 44100, int pChannels = 2);
203
    bool OpenAudioMuxer(int pSampleRate = 44100, int pChannels = 2);
Lines 217-223 Link Here
217
    static int DistributePacket(void *pOpaque, uint8_t *pBuffer, int pBufferSize);
217
    static int DistributePacket(void *pOpaque, uint8_t *pBuffer, int pBufferSize);
218
218
219
    MediaSource         *mMediaSource;
219
    MediaSource         *mMediaSource;
220
    enum CodecID        mStreamCodecId;
220
    enum AVCodecID      mStreamCodecId;
221
    int                 mStreamMaxPacketSize;
221
    int                 mStreamMaxPacketSize;
222
    int                 mStreamQuality;
222
    int                 mStreamQuality;
223
    int                 mStreamBitRate;
223
    int                 mStreamBitRate;
224
-- HomerMultimedia/include/RTP.h
224
++ HomerMultimedia/include/RTP.h
Lines 135-143 Link Here
135
    static unsigned int CodecToPayloadId(std::string pName);
135
    static unsigned int CodecToPayloadId(std::string pName);
136
    static std::string PayloadIdToCodec(int pId);
136
    static std::string PayloadIdToCodec(int pId);
137
    static std::string PayloadType(int pId);
137
    static std::string PayloadType(int pId);
138
    static bool IsPayloadSupported(enum CodecID pId);
138
    static bool IsPayloadSupported(enum AVCodecID pId);
139
    static int GetPayloadHeaderSizeMax(enum CodecID pCodec);// calculate the maximum header size of the RTP payload (not the RTP header!)
139
    static int GetPayloadHeaderSizeMax(enum AVCodecID pCodec);// calculate the maximum header size of the RTP payload (not the RTP header!)
140
    static int GetHeaderSizeMax(enum CodecID pCodec);
140
    static int GetHeaderSizeMax(enum AVCodecID pCodec);
141
    static void SetH261PayloadSizeMax(unsigned int pMaxSize);
141
    static void SetH261PayloadSizeMax(unsigned int pMaxSize);
142
    static unsigned int GetH261PayloadSizeMax();
142
    static unsigned int GetH261PayloadSizeMax();
143
143
Lines 154-160 Link Here
154
154
155
    static void LogRtpHeader(RtpHeader *pRtpHeader);
155
    static void LogRtpHeader(RtpHeader *pRtpHeader);
156
    bool ReceivedCorrectPayload(unsigned int pType);
156
    bool ReceivedCorrectPayload(unsigned int pType);
157
    bool RtpParse(char *&pData, int &pDataSize, bool &pIsLastFragment, enum RtcpType &pRtcpType, enum CodecID pCodecId, bool pLoggingOnly);
157
    bool RtpParse(char *&pData, int &pDataSize, bool &pIsLastFragment, enum RtcpType &pRtcpType, enum AVCodecID pCodecId, bool pLoggingOnly);
158
    bool ResetRrtpParser();
158
    bool ResetRrtpParser();
159
    bool OpenRtpEncoder(std::string pTargetHost, unsigned int pTargetPort, AVStream *pInnerStream);
159
    bool OpenRtpEncoder(std::string pTargetHost, unsigned int pTargetPort, AVStream *pInnerStream);
160
    bool CloseRtpEncoder();
160
    bool CloseRtpEncoder();
Lines 206-212 Link Here
206
    uint64_t	        mLostPackets;
206
    uint64_t	        mLostPackets;
207
    float               mRelativeLostPackets;
207
    float               mRelativeLostPackets;
208
    unsigned int        mLocalSourceIdentifier;
208
    unsigned int        mLocalSourceIdentifier;
209
    enum CodecID        mStreamCodecID;
209
    enum AVCodecID      mStreamCodecID;
210
    uint64_t			mRemoteSequenceNumber; // without overflows
210
    uint64_t			mRemoteSequenceNumber; // without overflows
211
    unsigned short int	mLastSequenceNumberFromRTPHeader; // for overflow check
211
    unsigned short int	mLastSequenceNumberFromRTPHeader; // for overflow check
212
    uint64_t			mRemoteSequenceNumberOverflowShift; // offset for shifting the value range
212
    uint64_t			mRemoteSequenceNumberOverflowShift; // offset for shifting the value range
213
-- HomerMultimedia/src/MediaSinkMem.cpp
213
++ HomerMultimedia/src/MediaSinkMem.cpp
Lines 55-61 Link Here
55
    mLastPacketPts = 0;
55
    mLastPacketPts = 0;
56
    mMediaId = pMediaId;
56
    mMediaId = pMediaId;
57
	mIncomingAVStream = NULL;
57
	mIncomingAVStream = NULL;
58
	mIncomingAVStreamCodecID = CODEC_ID_NONE;
58
	mIncomingAVStreamCodecID = AV_CODEC_ID_NONE;
59
	mTargetHost = "";
59
	mTargetHost = "";
60
	mTargetPort = 0;
60
	mTargetPort = 0;
61
    mRtpStreamOpened = false;
61
    mRtpStreamOpened = false;
62
-- HomerMultimedia/src/MediaSinkNet.cpp
62
++ HomerMultimedia/src/MediaSinkNet.cpp
Lines 201-207 Link Here
201
    if (pStream != NULL)
201
    if (pStream != NULL)
202
    {
202
    {
203
        // save maximum network packet size to use it later within SendPacket() function
203
        // save maximum network packet size to use it later within SendPacket() function
204
        if (pStream->codec->codec_id == CODEC_ID_H261)
204
        if (pStream->codec->codec_id == AV_CODEC_ID_H261)
205
            tNewMaxNetworkPacketSize = RTP::GetH261PayloadSizeMax() + RTP_HEADER_SIZE + 4 /* H.261 rtp payload header */;
205
            tNewMaxNetworkPacketSize = RTP::GetH261PayloadSizeMax() + RTP_HEADER_SIZE + 4 /* H.261 rtp payload header */;
206
        else
206
        else
207
            tNewMaxNetworkPacketSize = pStream->codec->rtp_payload_size;
207
            tNewMaxNetworkPacketSize = pStream->codec->rtp_payload_size;
208
-- HomerMultimedia/src/MediaSource.cpp
208
++ HomerMultimedia/src/MediaSource.cpp
Lines 522-642 Link Here
522
 *        AMR							CODEC_ID_AMR_NB
522
 *        AMR							CODEC_ID_AMR_NB
523
 *
523
 *
524
 ****************************************************/
524
 ****************************************************/
525
enum CodecID MediaSource::GetCodecIDFromGuiName(std::string pName)
525
enum AVCodecID MediaSource::GetCodecIDFromGuiName(std::string pName)
526
{
526
{
527
    enum CodecID tResult = (GetMediaType() == MEDIA_AUDIO) ? CODEC_ID_MP3 : CODEC_ID_H261;
527
    enum AVCodecID tResult = (GetMediaType() == MEDIA_AUDIO) ? AV_CODEC_ID_MP3 : AV_CODEC_ID_H261;
528
528
529
    /* video */
529
    /* video */
530
    if (pName == "H.261")
530
    if (pName == "H.261")
531
        tResult = CODEC_ID_H261;
531
        tResult = AV_CODEC_ID_H261;
532
    if (pName == "H.263")
532
    if (pName == "H.263")
533
        tResult = CODEC_ID_H263;
533
        tResult = AV_CODEC_ID_H263;
534
    if (pName == "MPEG1")
534
    if (pName == "MPEG1")
535
        tResult = CODEC_ID_MPEG1VIDEO;
535
        tResult = AV_CODEC_ID_MPEG1VIDEO;
536
    if (pName == "MPEG2")
536
    if (pName == "MPEG2")
537
        tResult = CODEC_ID_MPEG2VIDEO;
537
        tResult = AV_CODEC_ID_MPEG2VIDEO;
538
    if (pName == "H.263+")
538
    if (pName == "H.263+")
539
        tResult = CODEC_ID_H263P;
539
        tResult = AV_CODEC_ID_H263P;
540
    if (pName == "H.264")
540
    if (pName == "H.264")
541
        tResult = CODEC_ID_H264;
541
        tResult = AV_CODEC_ID_H264;
542
    if (pName == "MPEG4")
542
    if (pName == "MPEG4")
543
        tResult = CODEC_ID_MPEG4;
543
        tResult = AV_CODEC_ID_MPEG4;
544
    if (pName == "MJPEG")
544
    if (pName == "MJPEG")
545
        tResult = CODEC_ID_MJPEG;
545
        tResult = AV_CODEC_ID_MJPEG;
546
    if (pName == "THEORA")
546
    if (pName == "THEORA")
547
        tResult = CODEC_ID_THEORA;
547
        tResult = AV_CODEC_ID_THEORA;
548
    if (pName == "VP8")
548
    if (pName == "VP8")
549
        tResult = CODEC_ID_VP8;
549
        tResult = AV_CODEC_ID_VP8;
550
550
551
    /* audio */
551
    /* audio */
552
    if ((pName == "G711 µ-law") || (pName == "G711 µ-law (PCMU)" /*historic*/))
552
    if ((pName == "G711 µ-law") || (pName == "G711 µ-law (PCMU)" /*historic*/))
553
        tResult = CODEC_ID_PCM_MULAW;
553
        tResult = AV_CODEC_ID_PCM_MULAW;
554
    if (pName == "GSM")
554
    if (pName == "GSM")
555
        tResult = CODEC_ID_GSM;
555
        tResult = AV_CODEC_ID_GSM;
556
    if ((pName == "G711 A-law") || (pName == "G711 A-law (PCMA)" /*historic*/))
556
    if ((pName == "G711 A-law") || (pName == "G711 A-law (PCMA)" /*historic*/))
557
        tResult = CODEC_ID_PCM_ALAW;
557
        tResult = AV_CODEC_ID_PCM_ALAW;
558
    if (pName == "G722 adpcm")
558
    if (pName == "G722 adpcm")
559
        tResult = CODEC_ID_ADPCM_G722;
559
        tResult = AV_CODEC_ID_ADPCM_G722;
560
    if ((pName == "PCM16") || (pName == "PCM_S16_LE" /*historic*/))
560
    if ((pName == "PCM16") || (pName == "PCM_S16_LE" /*historic*/))
561
        tResult = CODEC_ID_PCM_S16BE;
561
        tResult = AV_CODEC_ID_PCM_S16BE;
562
    if ((pName == "MP3") || (pName == "MP3 (MPA)" /*historic*/))
562
    if ((pName == "MP3") || (pName == "MP3 (MPA)" /*historic*/))
563
        tResult = CODEC_ID_MP3;
563
        tResult = AV_CODEC_ID_MP3;
564
    if (pName == "AAC")
564
    if (pName == "AAC")
565
        tResult = CODEC_ID_AAC;
565
        tResult = AV_CODEC_ID_AAC;
566
    if (pName == "AMR")
566
    if (pName == "AMR")
567
        tResult = CODEC_ID_AMR_NB;
567
        tResult = AV_CODEC_ID_AMR_NB;
568
    if (pName == "AC3")
568
    if (pName == "AC3")
569
        tResult = CODEC_ID_AC3;
569
        tResult = AV_CODEC_ID_AC3;
570
570
571
    //LOG(LOG_VERBOSE, "Translated %s to %d", pName.c_str(), tResult);
571
    //LOG(LOG_VERBOSE, "Translated %s to %d", pName.c_str(), tResult);
572
572
573
    return tResult;
573
    return tResult;
574
}
574
}
575
575
576
string MediaSource::GetGuiNameFromCodecID(enum CodecID pCodecId)
576
string MediaSource::GetGuiNameFromCodecID(enum AVCodecID pCodecId)
577
{
577
{
578
    string tResult = "";
578
    string tResult = "";
579
579
580
    switch(pCodecId)
580
    switch(pCodecId)
581
    {
581
    {
582
    	/* video */
582
    	/* video */
583
    	case CODEC_ID_H261:
583
    	case AV_CODEC_ID_H261:
584
    			tResult = "H.261";
584
    			tResult = "H.261";
585
    			break;
585
    			break;
586
    	case CODEC_ID_H263:
586
    	case AV_CODEC_ID_H263:
587
    			tResult = "H.263";
587
    			tResult = "H.263";
588
    			break;
588
    			break;
589
    	case CODEC_ID_MPEG1VIDEO:
589
    	case AV_CODEC_ID_MPEG1VIDEO:
590
    			tResult = "MPEG1";
590
    			tResult = "MPEG1";
591
    			break;
591
    			break;
592
        case CODEC_ID_MPEG2VIDEO:
592
        case AV_CODEC_ID_MPEG2VIDEO:
593
    			tResult = "MPEG2";
593
    			tResult = "MPEG2";
594
    			break;
594
    			break;
595
        case CODEC_ID_H263P:
595
        case AV_CODEC_ID_H263P:
596
    			tResult = "H.263+";
596
    			tResult = "H.263+";
597
    			break;
597
    			break;
598
        case CODEC_ID_H264:
598
        case AV_CODEC_ID_H264:
599
    			tResult = "H.264";
599
    			tResult = "H.264";
600
    			break;
600
    			break;
601
        case CODEC_ID_MPEG4:
601
        case AV_CODEC_ID_MPEG4:
602
    			tResult = "MPEG4";
602
    			tResult = "MPEG4";
603
    			break;
603
    			break;
604
        case CODEC_ID_MJPEG:
604
        case AV_CODEC_ID_MJPEG:
605
    			tResult = "MJPEG";
605
    			tResult = "MJPEG";
606
    			break;
606
    			break;
607
        case CODEC_ID_THEORA:
607
        case AV_CODEC_ID_THEORA:
608
    			tResult = "THEORA";
608
    			tResult = "THEORA";
609
    			break;
609
    			break;
610
        case CODEC_ID_VP8:
610
        case AV_CODEC_ID_VP8:
611
    			tResult = "VP8";
611
    			tResult = "VP8";
612
    			break;
612
    			break;
613
613
614
		/* audio */
614
		/* audio */
615
        case CODEC_ID_PCM_MULAW:
615
        case AV_CODEC_ID_PCM_MULAW:
616
    			tResult = "G711 µ-law";
616
    			tResult = "G711 µ-law";
617
    			break;
617
    			break;
618
        case CODEC_ID_GSM:
618
        case AV_CODEC_ID_GSM:
619
    			tResult = "GSM";
619
    			tResult = "GSM";
620
    			break;
620
    			break;
621
        case CODEC_ID_PCM_ALAW:
621
        case AV_CODEC_ID_PCM_ALAW:
622
    			tResult = "G711 A-law";
622
    			tResult = "G711 A-law";
623
    			break;
623
    			break;
624
        case CODEC_ID_ADPCM_G722:
624
        case AV_CODEC_ID_ADPCM_G722:
625
    			tResult = "G722 adpcm";
625
    			tResult = "G722 adpcm";
626
    			break;
626
    			break;
627
        case CODEC_ID_PCM_S16BE:
627
        case AV_CODEC_ID_PCM_S16BE:
628
    			tResult = "PCM16";
628
    			tResult = "PCM16";
629
    			break;
629
    			break;
630
        case CODEC_ID_MP3:
630
        case AV_CODEC_ID_MP3:
631
    			tResult = "MP3";
631
    			tResult = "MP3";
632
    			break;
632
    			break;
633
        case CODEC_ID_AAC:
633
        case AV_CODEC_ID_AAC:
634
    			tResult = "AAC";
634
    			tResult = "AAC";
635
    			break;
635
    			break;
636
        case CODEC_ID_AMR_NB:
636
        case AV_CODEC_ID_AMR_NB:
637
    			tResult = "AMR";
637
    			tResult = "AMR";
638
    			break;
638
    			break;
639
        case CODEC_ID_AC3:
639
        case AV_CODEC_ID_AC3:
640
    			tResult = "AC3";
640
    			tResult = "AC3";
641
    			break;
641
    			break;
642
642
Lines 653-746 Link Here
653
/*************************************************
653
/*************************************************
654
 *  video codec ID to format mapping:
654
 *  video codec ID to format mapping:
655
 *  ================================
655
 *  ================================
656
 *        CODEC_ID_H261					h261
656
 *        AV_CODEC_ID_H261					h261
657
 *        CODEC_ID_H263					h263
657
 *        AV_CODEC_ID_H263					h263
658
 *        CODEC_ID_MPEG1VIDEO			mpeg1video
658
 *        AV_CODEC_ID_MPEG1VIDEO			mpeg1video
659
 *        CODEC_ID_MPEG2VIDEO			mpeg2video
659
 *        AV_CODEC_ID_MPEG2VIDEO			mpeg2video
660
 *        CODEC_ID_H263P+				h263 // same like H263
660
 *        AV_CODEC_ID_H263P+				h263 // same like H263
661
 *        CODEC_ID_H264					h264
661
 *        AV_CODEC_ID_H264					h264
662
 *        CODEC_ID_MPEG4				m4v
662
 *        AV_CODEC_ID_MPEG4				m4v
663
 *        CODEC_ID_MJPEG				mjpeg
663
 *        AV_CODEC_ID_MJPEG				mjpeg
664
 *        CODEC_ID_THEORA				ogg
664
 *        AV_CODEC_ID_THEORA				ogg
665
 *        CODEC_ID_VP8					webm
665
 *        AV_CODEC_ID_VP8					webm
666
 *
666
 *
667
 *
667
 *
668
 *  audio codec ID to format mapping:
668
 *  audio codec ID to format mapping:
669
 *  ================================
669
 *  ================================
670
 *        CODEC_ID_PCM_MULAW			mulaw
670
 *        AV_CODEC_ID_PCM_MULAW			mulaw
671
 *        CODEC_ID_GSM					libgsm
671
 *        AV_CODEC_ID_GSM					libgsm
672
 *        CODEC_ID_PCM_ALAW				alaw
672
 *        AV_CODEC_ID_PCM_ALAW				alaw
673
 *        CODEC_ID_ADPCM_G722			g722
673
 *        AV_CODEC_ID_ADPCM_G722			g722
674
 *        CODEC_ID_PCM_S16BE			s16be
674
 *        AV_CODEC_ID_PCM_S16BE			s16be
675
 *        CODEC_ID_MP3					mp3
675
 *        AV_CODEC_ID_MP3					mp3
676
 *        CODEC_ID_AAC					aac
676
 *        AV_CODEC_ID_AAC					aac
677
 *        CODEC_ID_AMR_NB				amr
677
 *        AV_CODEC_ID_AMR_NB				amr
678
 *
678
 *
679
 ****************************************************/
679
 ****************************************************/
680
string MediaSource::GetFormatName(enum CodecID pCodecId)
680
string MediaSource::GetFormatName(enum AVCodecID pCodecId)
681
{
681
{
682
    string tResult = "";
682
    string tResult = "";
683
683
684
    switch(pCodecId)
684
    switch(pCodecId)
685
    {
685
    {
686
    	/* video */
686
    	/* video */
687
    	case CODEC_ID_H261:
687
    	case AV_CODEC_ID_H261:
688
    			tResult = "h261";
688
    			tResult = "h261";
689
    			break;
689
    			break;
690
    	case CODEC_ID_H263:
690
    	case AV_CODEC_ID_H263:
691
    			tResult = "h263";
691
    			tResult = "h263";
692
    			break;
692
    			break;
693
    	case CODEC_ID_MPEG1VIDEO:
693
    	case AV_CODEC_ID_MPEG1VIDEO:
694
    			tResult = "mpeg1video";
694
    			tResult = "mpeg1video";
695
    			break;
695
    			break;
696
        case CODEC_ID_MPEG2VIDEO:
696
        case AV_CODEC_ID_MPEG2VIDEO:
697
    			tResult = "mpeg2video";
697
    			tResult = "mpeg2video";
698
    			break;
698
    			break;
699
        case CODEC_ID_H263P:
699
        case AV_CODEC_ID_H263P:
700
    			tResult = "h263"; // ffmpeg has no separate h263+ format
700
    			tResult = "h263"; // ffmpeg has no separate h263+ format
701
    			break;
701
    			break;
702
        case CODEC_ID_H264:
702
        case AV_CODEC_ID_H264:
703
    			tResult = "h264";
703
    			tResult = "h264";
704
    			break;
704
    			break;
705
        case CODEC_ID_MPEG4:
705
        case AV_CODEC_ID_MPEG4:
706
    			tResult = "m4v";
706
    			tResult = "m4v";
707
    			break;
707
    			break;
708
        case CODEC_ID_MJPEG:
708
        case AV_CODEC_ID_MJPEG:
709
    			tResult = "mjpeg";
709
    			tResult = "mjpeg";
710
    			break;
710
    			break;
711
        case CODEC_ID_THEORA:
711
        case AV_CODEC_ID_THEORA:
712
    			tResult = "ogg";
712
    			tResult = "ogg";
713
    			break;
713
    			break;
714
        case CODEC_ID_VP8:
714
        case AV_CODEC_ID_VP8:
715
    			tResult = "webm";
715
    			tResult = "webm";
716
    			break;
716
    			break;
717
717
718
		/* audio */
718
		/* audio */
719
        case CODEC_ID_PCM_MULAW:
719
        case AV_CODEC_ID_PCM_MULAW:
720
    			tResult = "mulaw";
720
    			tResult = "mulaw";
721
    			break;
721
    			break;
722
        case CODEC_ID_GSM:
722
        case AV_CODEC_ID_GSM:
723
    			tResult = "gsm";
723
    			tResult = "gsm";
724
    			break;
724
    			break;
725
        case CODEC_ID_PCM_ALAW:
725
        case AV_CODEC_ID_PCM_ALAW:
726
    			tResult = "alaw";
726
    			tResult = "alaw";
727
    			break;
727
    			break;
728
        case CODEC_ID_ADPCM_G722:
728
        case AV_CODEC_ID_ADPCM_G722:
729
    			tResult = "g722";
729
    			tResult = "g722";
730
    			break;
730
    			break;
731
        case CODEC_ID_PCM_S16BE:
731
        case AV_CODEC_ID_PCM_S16BE:
732
    			tResult = "s16be";
732
    			tResult = "s16be";
733
    			break;
733
    			break;
734
        case CODEC_ID_MP3:
734
        case AV_CODEC_ID_MP3:
735
    			tResult = "mp3";
735
    			tResult = "mp3";
736
    			break;
736
    			break;
737
        case CODEC_ID_AAC:
737
        case AV_CODEC_ID_AAC:
738
    			tResult = "aac";
738
    			tResult = "aac";
739
    			break;
739
    			break;
740
        case CODEC_ID_AMR_NB:
740
        case AV_CODEC_ID_AMR_NB:
741
    			tResult = "amr";
741
    			tResult = "amr";
742
    			break;
742
    			break;
743
        case CODEC_ID_AC3:
743
        case AV_CODEC_ID_AC3:
744
    			tResult = "ac3";
744
    			tResult = "ac3";
745
    			break;
745
    			break;
746
746
Lines 1205-1211 Link Here
1205
    return tResult;
1205
    return tResult;
1206
}
1206
}
1207
1207
1208
enum CodecID MediaSource::GetSourceCodec()
1208
enum AVCodecID MediaSource::GetSourceCodec()
1209
{
1209
{
1210
    return mSourceCodecId;
1210
    return mSourceCodecId;
1211
}
1211
}
Lines 1753-1759 Link Here
1753
    AVOutputFormat      *tFormat;
1753
    AVOutputFormat      *tFormat;
1754
    AVCodec             *tCodec;
1754
    AVCodec             *tCodec;
1755
    AVDictionary        *tOptions = NULL;
1755
    AVDictionary        *tOptions = NULL;
1756
    CodecID             tSaveFileCodec = CODEC_ID_NONE;
1756
    AVCodecID           tSaveFileCodec = AV_CODEC_ID_NONE;
1757
1757
1758
    LOG(LOG_VERBOSE, "Going to open recorder, media type is \"%s\"", GetMediaTypeStr().c_str());
1758
    LOG(LOG_VERBOSE, "Going to open recorder, media type is \"%s\"", GetMediaTypeStr().c_str());
1759
1759
Lines 1851-1857 Link Here
1851
                    // add some extra parameters depending on the selected codec
1851
                    // add some extra parameters depending on the selected codec
1852
                    switch(tFormat->video_codec)
1852
                    switch(tFormat->video_codec)
1853
                    {
1853
                    {
1854
                        case CODEC_ID_MPEG4:
1854
                        case AV_CODEC_ID_MPEG4:
1855
                                        mRecorderCodecContext->flags |= CODEC_FLAG_4MV | CODEC_FLAG_AC_PRED;
1855
                                        mRecorderCodecContext->flags |= CODEC_FLAG_4MV | CODEC_FLAG_AC_PRED;
1856
                                        break;
1856
                                        break;
1857
                    }
1857
                    }
Lines 1910-1916 Link Here
1910
1910
1911
                    // define audio format for recording
1911
                    // define audio format for recording
1912
                    mRecorderAudioChannels = 2;
1912
                    mRecorderAudioChannels = 2;
1913
                    if (mRecorderCodecContext->codec_id == CODEC_ID_MP3)
1913
                    if (mRecorderCodecContext->codec_id == AV_CODEC_ID_MP3)
1914
                        mRecorderAudioFormat = AV_SAMPLE_FMT_S16P;
1914
                        mRecorderAudioFormat = AV_SAMPLE_FMT_S16P;
1915
                    else
1915
                    else
1916
                        mRecorderAudioFormat = AV_SAMPLE_FMT_S16;
1916
                        mRecorderAudioFormat = AV_SAMPLE_FMT_S16;
Lines 3079-3085 Link Here
3079
// ####################################################################################
3079
// ####################################################################################
3080
// ### FFMPEG helpers
3080
// ### FFMPEG helpers
3081
// ####################################################################################
3081
// ####################################################################################
3082
bool MediaSource::FfmpegDescribeInput(string pSource, int pLine, CodecID pCodecId, AVInputFormat **pFormat)
3082
bool MediaSource::FfmpegDescribeInput(string pSource, int pLine, AVCodecID pCodecId, AVInputFormat **pFormat)
3083
{
3083
{
3084
	AVInputFormat *tResult = NULL;
3084
	AVInputFormat *tResult = NULL;
3085
3085
Lines 3212-3221 Link Here
3212
        }else{
3212
        }else{
3213
        	switch(mSourceCodecId)
3213
        	switch(mSourceCodecId)
3214
        	{
3214
        	{
3215
                case CODEC_ID_MPEG1VIDEO:
3215
                case AV_CODEC_ID_MPEG1VIDEO:
3216
                case CODEC_ID_MPEG2VIDEO:
3216
                case AV_CODEC_ID_MPEG2VIDEO:
3217
                case CODEC_ID_MPEG4:
3217
                case AV_CODEC_ID_MPEG4:
3218
                case CODEC_ID_H264:
3218
                case AV_CODEC_ID_H264:
3219
                    // we shouldn't limit the analyzing time because the analyzer needs the entire time period to deliver a reliable result
3219
                    // we shouldn't limit the analyzing time because the analyzer needs the entire time period to deliver a reliable result
3220
                    break;
3220
                    break;
3221
                default:
3221
                default:
Lines 3411-3429 Link Here
3411
        // try to find a vdpau decoder
3411
        // try to find a vdpau decoder
3412
        switch(mCodecContext->codec_id)
3412
        switch(mCodecContext->codec_id)
3413
        {
3413
        {
3414
            case CODEC_ID_H264:
3414
            case AV_CODEC_ID_H264:
3415
                tCodec = avcodec_find_decoder_by_name("h264_vdpau");
3415
                tCodec = avcodec_find_decoder_by_name("h264_vdpau");
3416
                break;
3416
                break;
3417
            case CODEC_ID_MPEG1VIDEO:
3417
            case AV_CODEC_ID_MPEG1VIDEO:
3418
                tCodec = avcodec_find_decoder_by_name("mpeg1video_vdpau");
3418
                tCodec = avcodec_find_decoder_by_name("mpeg1video_vdpau");
3419
                break;
3419
                break;
3420
            case CODEC_ID_MPEG2VIDEO:
3420
            case AV_CODEC_ID_MPEG2VIDEO:
3421
                tCodec = avcodec_find_decoder_by_name("mpegvideo_vdpau");
3421
                tCodec = avcodec_find_decoder_by_name("mpegvideo_vdpau");
3422
                break;
3422
                break;
3423
            case CODEC_ID_MPEG4:
3423
            case AV_CODEC_ID_MPEG4:
3424
                tCodec = avcodec_find_decoder_by_name("mpeg4_vdpau");
3424
                tCodec = avcodec_find_decoder_by_name("mpeg4_vdpau");
3425
                break;
3425
                break;
3426
            case CODEC_ID_WMV3:
3426
            case AV_CODEC_ID_WMV3:
3427
                tCodec = avcodec_find_decoder_by_name("wmv3_vdpau");
3427
                tCodec = avcodec_find_decoder_by_name("wmv3_vdpau");
3428
                break;
3428
                break;
3429
            default:
3429
            default:
Lines 3449-3455 Link Here
3449
    LOG_REMOTE(LOG_VERBOSE, pSource, pLine, "..successfully found %s decoder", GetMediaTypeStr().c_str());
3449
    LOG_REMOTE(LOG_VERBOSE, pSource, pLine, "..successfully found %s decoder", GetMediaTypeStr().c_str());
3450
3450
3451
    //H.264: force thread count to 1 since the h264 decoder will not extract SPS and PPS to extradata during multi-threaded decoding
3451
    //H.264: force thread count to 1 since the h264 decoder will not extract SPS and PPS to extradata during multi-threaded decoding
3452
    if (mCodecContext->codec_id == CODEC_ID_H264)
3452
    if (mCodecContext->codec_id == AV_CODEC_ID_H264)
3453
    {
3453
    {
3454
            if (strcmp(mFormatContext->filename, "") == 0)
3454
            if (strcmp(mFormatContext->filename, "") == 0)
3455
            {// we have a net/mem based media source
3455
            {// we have a net/mem based media source
3456
-- HomerMultimedia/src/MediaSourceFile.cpp
3456
++ HomerMultimedia/src/MediaSourceFile.cpp
Lines 300-306 Link Here
300
	}
300
	}
301
301
302
	// avoid frame dropping during decoding (mDecoderExpectedMaxOutputPerInputFrame might be wrong otherwise), assume 64 kB as max. input per read cycle
302
	// avoid frame dropping during decoding (mDecoderExpectedMaxOutputPerInputFrame might be wrong otherwise), assume 64 kB as max. input per read cycle
303
    if ((tIsNetworkStream) && (mCodecContext->codec_id == CODEC_ID_WMAV2))
303
    if ((tIsNetworkStream) && (mCodecContext->codec_id == AV_CODEC_ID_WMAV2))
304
    {
304
    {
305
    	LOG(LOG_VERBOSE, "Detected WMAV2 codec in hidden network stream, will assume a default frame size of 64kB to prevent frame dropping");
305
    	LOG(LOG_VERBOSE, "Detected WMAV2 codec in hidden network stream, will assume a default frame size of 64kB to prevent frame dropping");
306
    	mCodecContext->frame_size = 64 * 1024;
306
    	mCodecContext->frame_size = 64 * 1024;
307
-- HomerMultimedia/src/MediaSourceMem.cpp
307
++ HomerMultimedia/src/MediaSourceMem.cpp
Lines 103-110 Link Here
103
    mOpenInputStream = false;
103
    mOpenInputStream = false;
104
    RTPRegisterPacketStatistic(this);
104
    RTPRegisterPacketStatistic(this);
105
105
106
    mRtpSourceCodecIdHint = CODEC_ID_NONE;
106
    mRtpSourceCodecIdHint = AV_CODEC_ID_NONE;
107
    mSourceCodecId = CODEC_ID_NONE;
107
    mSourceCodecId = AV_CODEC_ID_NONE;
108
108
109
    mDecoderFragmentFifo = new MediaFifo(MEDIA_SOURCE_MEM_FRAGMENT_INPUT_QUEUE_SIZE_LIMIT, MEDIA_SOURCE_MEM_FRAGMENT_BUFFER_SIZE, "MediaSourceMem");
109
    mDecoderFragmentFifo = new MediaFifo(MEDIA_SOURCE_MEM_FRAGMENT_INPUT_QUEUE_SIZE_LIMIT, MEDIA_SOURCE_MEM_FRAGMENT_BUFFER_SIZE, "MediaSourceMem");
110
	LOG(LOG_VERBOSE, "Listen for video/audio frames with queue of %d bytes", MEDIA_SOURCE_MEM_FRAGMENT_INPUT_QUEUE_SIZE_LIMIT * MEDIA_SOURCE_MEM_FRAGMENT_BUFFER_SIZE);
110
	LOG(LOG_VERBOSE, "Listen for video/audio frames with queue of %d bytes", MEDIA_SOURCE_MEM_FRAGMENT_INPUT_QUEUE_SIZE_LIMIT * MEDIA_SOURCE_MEM_FRAGMENT_BUFFER_SIZE);
Lines 475-481 Link Here
475
bool MediaSourceMem::HasInputStreamChanged()
475
bool MediaSourceMem::HasInputStreamChanged()
476
{
476
{
477
    bool tResult = HasSourceChangedFromRTP();
477
    bool tResult = HasSourceChangedFromRTP();
478
    enum CodecID tNewCodecId = CODEC_ID_NONE;
478
    enum AVCodecID tNewCodecId = AV_CODEC_ID_NONE;
479
479
480
    // try to detect the right source codec based on RTP data
480
    // try to detect the right source codec based on RTP data
481
    if ((tResult) && (mRtpActivated))
481
    if ((tResult) && (mRtpActivated))
Lines 484-546 Link Here
484
        {
484
        {
485
            //video
485
            //video
486
            case 31:
486
            case 31:
487
                    tNewCodecId = CODEC_ID_H261;
487
                    tNewCodecId = AV_CODEC_ID_H261;
488
                    break;
488
                    break;
489
            case 32:
489
            case 32:
490
                    tNewCodecId = CODEC_ID_MPEG2VIDEO;
490
                    tNewCodecId = AV_CODEC_ID_MPEG2VIDEO;
491
                    break;
491
                    break;
492
            case 34:
492
            case 34:
493
            case 118:
493
            case 118:
494
                    tNewCodecId = CODEC_ID_H263;
494
                    tNewCodecId = AV_CODEC_ID_H263;
495
                    break;
495
                    break;
496
            case 119:
496
            case 119:
497
                    tNewCodecId = CODEC_ID_H263P;
497
                    tNewCodecId = AV_CODEC_ID_H263P;
498
                    break;
498
                    break;
499
            case 120:
499
            case 120:
500
                    tNewCodecId = CODEC_ID_H264;
500
                    tNewCodecId = AV_CODEC_ID_H264;
501
                    break;
501
                    break;
502
            case 121:
502
            case 121:
503
                    tNewCodecId = CODEC_ID_MPEG4;
503
                    tNewCodecId = AV_CODEC_ID_MPEG4;
504
                    break;
504
                    break;
505
            case 122:
505
            case 122:
506
                    tNewCodecId = CODEC_ID_THEORA;
506
                    tNewCodecId = AV_CODEC_ID_THEORA;
507
                    break;
507
                    break;
508
            case 123:
508
            case 123:
509
                    tNewCodecId = CODEC_ID_VP8;
509
                    tNewCodecId = AV_CODEC_ID_VP8;
510
                    break;
510
                    break;
511
511
512
            //audio
512
            //audio
513
            case 0:
513
            case 0:
514
                    tNewCodecId = CODEC_ID_PCM_MULAW;
514
                    tNewCodecId = AV_CODEC_ID_PCM_MULAW;
515
                    break;
515
                    break;
516
            case 3:
516
            case 3:
517
                    tNewCodecId = CODEC_ID_GSM;
517
                    tNewCodecId = AV_CODEC_ID_GSM;
518
                    break;
518
                    break;
519
            case 8:
519
            case 8:
520
                    tNewCodecId = CODEC_ID_PCM_ALAW;
520
                    tNewCodecId = AV_CODEC_ID_PCM_ALAW;
521
                    break;
521
                    break;
522
            case 9:
522
            case 9:
523
                    tNewCodecId = CODEC_ID_ADPCM_G722;
523
                    tNewCodecId = AV_CODEC_ID_ADPCM_G722;
524
                    break;
524
                    break;
525
            case 10:
525
            case 10:
526
                    tNewCodecId = CODEC_ID_PCM_S16BE;
526
                    tNewCodecId = AV_CODEC_ID_PCM_S16BE;
527
                    break;
527
                    break;
528
            case 11:
528
            case 11:
529
                    tNewCodecId = CODEC_ID_PCM_S16BE;
529
                    tNewCodecId = AV_CODEC_ID_PCM_S16BE;
530
                    break;
530
                    break;
531
            case 14:
531
            case 14:
532
                    tNewCodecId = CODEC_ID_MP3;
532
                    tNewCodecId = AV_CODEC_ID_MP3;
533
                    break;
533
                    break;
534
            case 100:
534
            case 100:
535
                    tNewCodecId = CODEC_ID_AAC;
535
                    tNewCodecId = AV_CODEC_ID_AAC;
536
                    break;
536
                    break;
537
            case 101:
537
            case 101:
538
                    tNewCodecId = CODEC_ID_AMR_NB;
538
                    tNewCodecId = AV_CODEC_ID_AMR_NB;
539
                    break;
539
                    break;
540
            default:
540
            default:
541
                    break;
541
                    break;
542
        }
542
        }
543
        if ((tNewCodecId != CODEC_ID_NONE) && (tNewCodecId != mSourceCodecId))
543
        if ((tNewCodecId != AV_CODEC_ID_NONE) && (tNewCodecId != mSourceCodecId))
544
        {
544
        {
545
            LOG(LOG_VERBOSE, "Suggesting codec change from %d(%s) to %d(%s)", mSourceCodecId, avcodec_get_name(mSourceCodecId), tNewCodecId, avcodec_get_name(tNewCodecId));
545
            LOG(LOG_VERBOSE, "Suggesting codec change from %d(%s) to %d(%s)", mSourceCodecId, avcodec_get_name(mSourceCodecId), tNewCodecId, avcodec_get_name(tNewCodecId));
546
            mRtpSourceCodecIdHint = tNewCodecId;
546
            mRtpSourceCodecIdHint = tNewCodecId;
Lines 657-663 Link Here
657
bool MediaSourceMem::SetInputStreamPreferences(std::string pStreamCodec, bool pRtpActivated, bool pDoReset)
657
bool MediaSourceMem::SetInputStreamPreferences(std::string pStreamCodec, bool pRtpActivated, bool pDoReset)
658
{
658
{
659
    bool tResult = false;
659
    bool tResult = false;
660
    enum CodecID tStreamCodecId = GetCodecIDFromGuiName(pStreamCodec);
660
    enum AVCodecID tStreamCodecId = GetCodecIDFromGuiName(pStreamCodec);
661
661
662
    if ((mSourceCodecId != tStreamCodecId) || (mRtpActivated != pRtpActivated))
662
    if ((mSourceCodecId != tStreamCodecId) || (mRtpActivated != pRtpActivated))
663
    {
663
    {
Lines 727-738 Link Here
727
    ClassifyStream(DATA_TYPE_VIDEO, SOCKET_RAW);
727
    ClassifyStream(DATA_TYPE_VIDEO, SOCKET_RAW);
728
728
729
    // check if we have a suggestion from RTP parser
729
    // check if we have a suggestion from RTP parser
730
    if (mRtpSourceCodecIdHint != CODEC_ID_NONE)
730
    if (mRtpSourceCodecIdHint != AV_CODEC_ID_NONE)
731
        mSourceCodecId = mRtpSourceCodecIdHint;
731
        mSourceCodecId = mRtpSourceCodecIdHint;
732
732
733
    // there is no differentiation between H.263+ and H.263 when decoding an incoming video stream
733
    // there is no differentiation between H.263+ and H.263 when decoding an incoming video stream
734
    if (mSourceCodecId == CODEC_ID_H263P)
734
    if (mSourceCodecId == AV_CODEC_ID_H263P)
735
        mSourceCodecId = CODEC_ID_H263;
735
        mSourceCodecId = AV_CODEC_ID_H263;
736
736
737
    // get a format description
737
    // get a format description
738
    if (!DescribeInput(mSourceCodecId, &tFormat))
738
    if (!DescribeInput(mSourceCodecId, &tFormat))
Lines 801-807 Link Here
801
    ClassifyStream(DATA_TYPE_AUDIO, SOCKET_RAW);
801
    ClassifyStream(DATA_TYPE_AUDIO, SOCKET_RAW);
802
802
803
    // check if we have a suggestion from RTP parser
803
    // check if we have a suggestion from RTP parser
804
    if (mRtpSourceCodecIdHint != CODEC_ID_NONE)
804
    if (mRtpSourceCodecIdHint != AV_CODEC_ID_NONE)
805
        mSourceCodecId = mRtpSourceCodecIdHint;
805
        mSourceCodecId = mRtpSourceCodecIdHint;
806
806
807
    // get a format description
807
    // get a format description
Lines 839-872 Link Here
839
    AVCodecContext *tCodec = mFormatContext->streams[mMediaStreamIndex]->codec;
839
    AVCodecContext *tCodec = mFormatContext->streams[mMediaStreamIndex]->codec;
840
    switch(mSourceCodecId)
840
    switch(mSourceCodecId)
841
    {
841
    {
842
		case CODEC_ID_AMR_NB:
842
		case AV_CODEC_ID_AMR_NB:
843
			tCodec->channels = 1;
843
			tCodec->channels = 1;
844
			tCodec->bit_rate = 7950;
844
			tCodec->bit_rate = 7950;
845
			tCodec->sample_rate = 8000;
845
			tCodec->sample_rate = 8000;
846
		    mFormatContext->streams[mMediaStreamIndex]->time_base.den = tCodec->sample_rate;
846
		    mFormatContext->streams[mMediaStreamIndex]->time_base.den = tCodec->sample_rate;
847
			mFormatContext->streams[mMediaStreamIndex]->time_base.num = 1;
847
			mFormatContext->streams[mMediaStreamIndex]->time_base.num = 1;
848
			break;
848
			break;
849
    	case CODEC_ID_ADPCM_G722:
849
    	case AV_CODEC_ID_ADPCM_G722:
850
    		tCodec->channels = 1;
850
    		tCodec->channels = 1;
851
    		tCodec->sample_rate = 16000;
851
    		tCodec->sample_rate = 16000;
852
    	    mFormatContext->streams[mMediaStreamIndex]->time_base.den = 8000; // different time base as defined in RFC
852
    	    mFormatContext->streams[mMediaStreamIndex]->time_base.den = 8000; // different time base as defined in RFC
853
    		mFormatContext->streams[mMediaStreamIndex]->time_base.num = 1;
853
    		mFormatContext->streams[mMediaStreamIndex]->time_base.num = 1;
854
			break;
854
			break;
855
    	case CODEC_ID_GSM:
855
    	case AV_CODEC_ID_GSM:
856
    	case CODEC_ID_PCM_ALAW:
856
    	case AV_CODEC_ID_PCM_ALAW:
857
		case CODEC_ID_PCM_MULAW:
857
		case AV_CODEC_ID_PCM_MULAW:
858
			tCodec->channels = 1;
858
			tCodec->channels = 1;
859
			tCodec->sample_rate = 8000;
859
			tCodec->sample_rate = 8000;
860
		    mFormatContext->streams[mMediaStreamIndex]->time_base.den = tCodec->sample_rate;
860
		    mFormatContext->streams[mMediaStreamIndex]->time_base.den = tCodec->sample_rate;
861
			mFormatContext->streams[mMediaStreamIndex]->time_base.num = 1;
861
			mFormatContext->streams[mMediaStreamIndex]->time_base.num = 1;
862
			break;
862
			break;
863
    	case CODEC_ID_PCM_S16BE:
863
    	case AV_CODEC_ID_PCM_S16BE:
864
    		tCodec->channels = 2;
864
    		tCodec->channels = 2;
865
    		tCodec->sample_rate = 44100;
865
    		tCodec->sample_rate = 44100;
866
    	    mFormatContext->streams[mMediaStreamIndex]->time_base.den = tCodec->sample_rate;
866
    	    mFormatContext->streams[mMediaStreamIndex]->time_base.den = tCodec->sample_rate;
867
    		mFormatContext->streams[mMediaStreamIndex]->time_base.num = 1;
867
    		mFormatContext->streams[mMediaStreamIndex]->time_base.num = 1;
868
			break;
868
			break;
869
    	case CODEC_ID_MP3:
869
    	case AV_CODEC_ID_MP3:
870
    	    mFormatContext->streams[mMediaStreamIndex]->time_base.den = tCodec->sample_rate;
870
    	    mFormatContext->streams[mMediaStreamIndex]->time_base.den = tCodec->sample_rate;
871
    		mFormatContext->streams[mMediaStreamIndex]->time_base.num = 1;
871
    		mFormatContext->streams[mMediaStreamIndex]->time_base.num = 1;
872
    		break;
872
    		break;
873
-- HomerMultimedia/src/MediaSourceMuxer.cpp
873
++ HomerMultimedia/src/MediaSourceMuxer.cpp
Lines 66-72 Link Here
66
    mSourceType = SOURCE_MUXER;
66
    mSourceType = SOURCE_MUXER;
67
    mStreamPacketBuffer = (char*)av_malloc(MEDIA_SOURCE_MUX_STREAM_PACKET_BUFFER_SIZE);
67
    mStreamPacketBuffer = (char*)av_malloc(MEDIA_SOURCE_MUX_STREAM_PACKET_BUFFER_SIZE);
68
    SetOutgoingStream();
68
    SetOutgoingStream();
69
    mStreamCodecId = CODEC_ID_NONE;
69
    mStreamCodecId = AV_CODEC_ID_NONE;
70
    mStreamMaxPacketSize = 500;
70
    mStreamMaxPacketSize = 500;
71
    mStreamQuality = 20;
71
    mStreamQuality = 20;
72
    mStreamBitRate = -1;
72
    mStreamBitRate = -1;
Lines 195-201 Link Here
195
{
195
{
196
    // HINT: returns if something has changed
196
    // HINT: returns if something has changed
197
    bool tResult = false;
197
    bool tResult = false;
198
    enum CodecID tStreamCodecId = GetCodecIDFromGuiName(pStreamCodec);
198
    enum AVCodecID tStreamCodecId = GetCodecIDFromGuiName(pStreamCodec);
199
199
200
    pMaxPacketSize -= IP6_HEADER_SIZE; // IPv6 overhead is bigger than IPv4
200
    pMaxPacketSize -= IP6_HEADER_SIZE; // IPv6 overhead is bigger than IPv4
201
    pMaxPacketSize -= IP_OPTIONS_SIZE; // IP options size: used for QoS signaling
201
    pMaxPacketSize -= IP_OPTIONS_SIZE; // IP options size: used for QoS signaling
Lines 285-295 Link Here
285
    return tResult;
285
    return tResult;
286
}
286
}
287
287
288
void MediaSourceMuxer::ApplyVideoResolutionToEncoderCodec(int &pResX, int &pResY, enum CodecID pCodec)
288
void MediaSourceMuxer::ApplyVideoResolutionToEncoderCodec(int &pResX, int &pResY, enum AVCodecID pCodec)
289
{
289
{
290
    switch(pCodec)
290
    switch(pCodec)
291
    {
291
    {
292
        case CODEC_ID_H261: // supports QCIF, CIF
292
        case AV_CODEC_ID_H261: // supports QCIF, CIF
293
                if (pResX > 176)
293
                if (pResX > 176)
294
                {// CIF
294
                {// CIF
295
                	pResX = 352;
295
                	pResX = 352;
Lines 301-307 Link Here
301
                }
301
                }
302
                LOG(LOG_VERBOSE, "Resolution %d*%d for codec H.261 automatically selected", pResX, pResY);
302
                LOG(LOG_VERBOSE, "Resolution %d*%d for codec H.261 automatically selected", pResX, pResY);
303
                break;
303
                break;
304
        case CODEC_ID_H263:  // supports SQCIF, QCIF, CIF, CIF4,CIF16
304
        case AV_CODEC_ID_H263:  // supports SQCIF, QCIF, CIF, CIF4,CIF16
305
                if(pResX > 704)
305
                if(pResX > 704)
306
                {// CIF16
306
                {// CIF16
307
                	pResX = 1408;
307
                	pResX = 1408;
Lines 325-331 Link Here
325
                }
325
                }
326
                LOG(LOG_VERBOSE, "Resolution %d*%d for codec H.263 automatically selected", pResX, pResY);
326
                LOG(LOG_VERBOSE, "Resolution %d*%d for codec H.263 automatically selected", pResX, pResY);
327
                break;
327
                break;
328
        case CODEC_ID_H263P:
328
        case AV_CODEC_ID_H263P:
329
                if ((pResX > 2048) || (pResY > 1152))
329
                if ((pResX > 2048) || (pResY > 1152))
330
                {// max. video resolution is 2048x1152
330
                {// max. video resolution is 2048x1152
331
                    pResX = 2048;
331
                    pResX = 2048;
Lines 334-340 Link Here
334
                {// everythin is fine, use the source resolution
334
                {// everythin is fine, use the source resolution
335
                }
335
                }
336
                break;
336
                break;
337
        case CODEC_ID_THEORA:
337
        case AV_CODEC_ID_THEORA:
338
        		pResX = 352;
338
        		pResX = 352;
339
        		pResY = 288;
339
        		pResY = 288;
340
                break;
340
                break;
Lines 429-438 Link Here
429
    LOG(LOG_VERBOSE, "Using format \"%s\" for VIDEO codec %d", tFormat->name, mStreamCodecId);
429
    LOG(LOG_VERBOSE, "Using format \"%s\" for VIDEO codec %d", tFormat->name, mStreamCodecId);
430
430
431
    // explicit codec selection for H263, otherwise ffmpeg would use the last H263-selection
431
    // explicit codec selection for H263, otherwise ffmpeg would use the last H263-selection
432
    if (mStreamCodecId == CODEC_ID_H263P)
432
    if (mStreamCodecId == AV_CODEC_ID_H263P)
433
        tFormat->video_codec = CODEC_ID_H263P;
433
        tFormat->video_codec = AV_CODEC_ID_H263P;
434
    if (mStreamCodecId == CODEC_ID_H263)
434
    if (mStreamCodecId == AV_CODEC_ID_H263)
435
        tFormat->video_codec = CODEC_ID_H263;
435
        tFormat->video_codec = AV_CODEC_ID_H263;
436
436
437
    // set correct output format
437
    // set correct output format
438
    mFormatContext->oformat = tFormat;
438
    mFormatContext->oformat = tFormat;
Lines 456-475 Link Here
456
    // add some extra parameters depending on the selected codec
456
    // add some extra parameters depending on the selected codec
457
    switch(tFormat->video_codec)
457
    switch(tFormat->video_codec)
458
    {
458
    {
459
        case CODEC_ID_MPEG2VIDEO:
459
        case AV_CODEC_ID_MPEG2VIDEO:
460
                        // force low delay
460
                        // force low delay
461
                        if (tCodec->capabilities & CODEC_CAP_DELAY)
461
                        if (tCodec->capabilities & CODEC_CAP_DELAY)
462
                            mCodecContext->flags |= CODEC_FLAG_LOW_DELAY;
462
                            mCodecContext->flags |= CODEC_FLAG_LOW_DELAY;
463
                        break;
463
                        break;
464
        case CODEC_ID_H263P:
464
        case AV_CODEC_ID_H263P:
465
                        // old codec codext flag CODEC_FLAG_H263P_SLICE_STRUCT
465
                        // old codec codext flag CODEC_FLAG_H263P_SLICE_STRUCT
466
                        av_dict_set(&tOptions, "structured_slices", "1", 0);
466
                        av_dict_set(&tOptions, "structured_slices", "1", 0);
467
                        // old codec codext flag CODEC_FLAG_H263P_UMV
467
                        // old codec codext flag CODEC_FLAG_H263P_UMV
468
                        av_dict_set(&tOptions, "umv", "1", 0);
468
                        av_dict_set(&tOptions, "umv", "1", 0);
469
                        // old codec codext flag CODEC_FLAG_H263P_AIV
469
                        // old codec codext flag CODEC_FLAG_H263P_AIV
470
                        av_dict_set(&tOptions, "aiv", "1", 0);
470
                        av_dict_set(&tOptions, "aiv", "1", 0);
471
        case CODEC_ID_H263:
471
        case AV_CODEC_ID_H263:
472
        case CODEC_ID_MPEG4:
472
        case AV_CODEC_ID_MPEG4:
473
                        mCodecContext->flags |= CODEC_FLAG_4MV | CODEC_FLAG_AC_PRED;
473
                        mCodecContext->flags |= CODEC_FLAG_4MV | CODEC_FLAG_AC_PRED;
474
                        break;
474
                        break;
475
    }
475
    }
Lines 490-496 Link Here
490
    }
490
    }
491
491
492
    // for H.263+ both width and height must be multiples of 4
492
    // for H.263+ both width and height must be multiples of 4
493
    if (mStreamCodecId == CODEC_ID_H263P)
493
    if (mStreamCodecId == AV_CODEC_ID_H263P)
494
    {
494
    {
495
    	mCurrentStreamingResX += 3;
495
    	mCurrentStreamingResX += 3;
496
    	mCurrentStreamingResX /= 4;
496
    	mCurrentStreamingResX /= 4;
Lines 502-508 Link Here
502
    }
502
    }
503
503
504
    // for H.2634 both width and height must be multiples of 2
504
    // for H.2634 both width and height must be multiples of 2
505
    if (mStreamCodecId == CODEC_ID_H264)
505
    if (mStreamCodecId == AV_CODEC_ID_H264)
506
    {
506
    {
507
        mCurrentStreamingResX += 1;
507
        mCurrentStreamingResX += 1;
508
        mCurrentStreamingResX /= 2;
508
        mCurrentStreamingResX /= 2;
Lines 523-529 Link Here
523
     * identically to 1.
523
     * identically to 1.
524
     */
524
     */
525
    // mpeg1/2 codecs support only non-rational frame rates
525
    // mpeg1/2 codecs support only non-rational frame rates
526
    if (((tFormat->video_codec == CODEC_ID_MPEG1VIDEO) || (tFormat->video_codec == CODEC_ID_MPEG2VIDEO)) && (mInputFrameRate = 29.97))
526
    if (((tFormat->video_codec == AV_CODEC_ID_MPEG1VIDEO) || (tFormat->video_codec == AV_CODEC_ID_MPEG2VIDEO)) && (mInputFrameRate = 29.97))
527
    {
527
    {
528
        //HACK: pretend a frame rate of 30 fps, the actual frame rate corresponds to the frame rate from the base media source
528
        //HACK: pretend a frame rate of 30 fps, the actual frame rate corresponds to the frame rate from the base media source
529
        mCodecContext->time_base = (AVRational){100, (int)(30 * 100)};
529
        mCodecContext->time_base = (AVRational){100, (int)(30 * 100)};
Lines 534-540 Link Here
534
        mEncoderStream->time_base = (AVRational){100, (int)(mInputFrameRate * 100)};
534
        mEncoderStream->time_base = (AVRational){100, (int)(mInputFrameRate * 100)};
535
    }
535
    }
536
    // set i frame distance: GOP = group of pictures
536
    // set i frame distance: GOP = group of pictures
537
    if (mStreamCodecId != CODEC_ID_THEORA)
537
    if (mStreamCodecId != AV_CODEC_ID_THEORA)
538
        mCodecContext->gop_size = (100 - mStreamQuality) / 5; // default is 12
538
        mCodecContext->gop_size = (100 - mStreamQuality) / 5; // default is 12
539
    else
539
    else
540
        mCodecContext->gop_size = 0; // force GOP size of 0 for THEORA
540
        mCodecContext->gop_size = 0; // force GOP size of 0 for THEORA
Lines 545-557 Link Here
545
    // set max. packet size for RTP based packets
545
    // set max. packet size for RTP based packets
546
    //HINT: don't set if we use H261, otherwise ffmpeg internal functions in mpegvideo_enc.c (MPV_*) would get confused because H261 support is missing in ffmpeg's RTP support
546
    //HINT: don't set if we use H261, otherwise ffmpeg internal functions in mpegvideo_enc.c (MPV_*) would get confused because H261 support is missing in ffmpeg's RTP support
547
    //TODO: fix packet size limitation here, ffmpegs lacks support for RTP encaps. for H.261 based video streams
547
    //TODO: fix packet size limitation here, ffmpegs lacks support for RTP encaps. for H.261 based video streams
548
    if (tFormat->video_codec != CODEC_ID_H261)
548
    if (tFormat->video_codec != AV_CODEC_ID_H261)
549
        mCodecContext->rtp_payload_size = mStreamMaxPacketSize;
549
        mCodecContext->rtp_payload_size = mStreamMaxPacketSize;
550
    else
550
    else
551
        RTP::SetH261PayloadSizeMax(mStreamMaxPacketSize);
551
        RTP::SetH261PayloadSizeMax(mStreamMaxPacketSize);
552
552
553
    // set pixel format
553
    // set pixel format
554
    if (tFormat->video_codec == CODEC_ID_MJPEG)
554
    if (tFormat->video_codec == AV_CODEC_ID_MJPEG)
555
        mCodecContext->pix_fmt = PIX_FMT_YUVJ420P;
555
        mCodecContext->pix_fmt = PIX_FMT_YUVJ420P;
556
    else
556
    else
557
        mCodecContext->pix_fmt = PIX_FMT_YUV420P;
557
        mCodecContext->pix_fmt = PIX_FMT_YUV420P;
Lines 763-792 Link Here
763
    mCodecContext->codec_type = AVMEDIA_TYPE_AUDIO;
763
    mCodecContext->codec_type = AVMEDIA_TYPE_AUDIO;
764
    switch(mCodecContext->codec_id)
764
    switch(mCodecContext->codec_id)
765
    {
765
    {
766
		case CODEC_ID_ADPCM_G722:
766
		case AV_CODEC_ID_ADPCM_G722:
767
			mOutputAudioChannels = 1;
767
			mOutputAudioChannels = 1;
768
			mOutputAudioSampleRate = 16000;
768
			mOutputAudioSampleRate = 16000;
769
			mCodecContext->sample_fmt = AV_SAMPLE_FMT_S16; // packed
769
			mCodecContext->sample_fmt = AV_SAMPLE_FMT_S16; // packed
770
			break;
770
			break;
771
		case CODEC_ID_AMR_NB:
771
		case AV_CODEC_ID_AMR_NB:
772
			mOutputAudioChannels = 1;
772
			mOutputAudioChannels = 1;
773
			mCodecContext->bit_rate = 7950; // force to 7.95kHz , limit is given by libopencore_amrnb
773
			mCodecContext->bit_rate = 7950; // force to 7.95kHz , limit is given by libopencore_amrnb
774
			mOutputAudioSampleRate = 8000; //force 8 kHz for AMR-NB
774
			mOutputAudioSampleRate = 8000; //force 8 kHz for AMR-NB
775
			mCodecContext->sample_fmt = AV_SAMPLE_FMT_S16; // packed
775
			mCodecContext->sample_fmt = AV_SAMPLE_FMT_S16; // packed
776
			break;
776
			break;
777
		case CODEC_ID_GSM:
777
		case AV_CODEC_ID_GSM:
778
		case CODEC_ID_PCM_ALAW:
778
		case AV_CODEC_ID_PCM_ALAW:
779
		case CODEC_ID_PCM_MULAW:
779
		case AV_CODEC_ID_PCM_MULAW:
780
			mOutputAudioChannels = 1;
780
			mOutputAudioChannels = 1;
781
			mOutputAudioSampleRate = 8000;
781
			mOutputAudioSampleRate = 8000;
782
			mCodecContext->sample_fmt = AV_SAMPLE_FMT_S16; // packed
782
			mCodecContext->sample_fmt = AV_SAMPLE_FMT_S16; // packed
783
			break;
783
			break;
784
    	case CODEC_ID_PCM_S16BE:
784
    	case AV_CODEC_ID_PCM_S16BE:
785
			mOutputAudioChannels = 2;
785
			mOutputAudioChannels = 2;
786
			mOutputAudioSampleRate = 44100;
786
			mOutputAudioSampleRate = 44100;
787
			mCodecContext->sample_fmt = AV_SAMPLE_FMT_S16; // packed
787
			mCodecContext->sample_fmt = AV_SAMPLE_FMT_S16; // packed
788
			break;
788
			break;
789
        case CODEC_ID_MP3:
789
        case AV_CODEC_ID_MP3:
790
			mOutputAudioChannels = pChannels;
790
			mOutputAudioChannels = pChannels;
791
			mOutputAudioSampleRate = pSampleRate;
791
			mOutputAudioSampleRate = pSampleRate;
792
			mCodecContext->sample_fmt = AV_SAMPLE_FMT_S16P; // planar
792
			mCodecContext->sample_fmt = AV_SAMPLE_FMT_S16P; // planar
Lines 1995-2001 Link Here
1995
        int tResY = pResY;
1995
        int tResY = pResY;
1996
        switch(mStreamCodecId)
1996
        switch(mStreamCodecId)
1997
        {
1997
        {
1998
            case CODEC_ID_H261: // supports QCIF, CIF
1998
            case AV_CODEC_ID_H261: // supports QCIF, CIF
1999
                    if (((pResX == 176) && (pResY == 144)) || ((pResX == 352) && (pResY == 288)))
1999
                    if (((pResX == 176) && (pResY == 144)) || ((pResX == 352) && (pResY == 288)))
2000
                    {
2000
                    {
2001
                        LOG(LOG_VERBOSE, "Resolution %d*%d supported by H.261", pResX, pResY);
2001
                        LOG(LOG_VERBOSE, "Resolution %d*%d supported by H.261", pResX, pResY);
Lines 2015-2021 Link Here
2015
                    if (pResY < 144)
2015
                    if (pResY < 144)
2016
                        tResY = 144;
2016
                        tResY = 144;
2017
                    break;
2017
                    break;
2018
            case CODEC_ID_H263:  // supports QCIF, CIF, CIF4
2018
            case AV_CODEC_ID_H263:  // supports QCIF, CIF, CIF4
2019
                    if (((pResX == 128) && (pResY == 96)) || ((pResX == 176) && (pResY == 144)) || ((pResX == 352) && (pResY == 288)) || ((pResX == 704) && (pResY == 576)) || ((pResX == 1408) && (pResY == 1152)))
2019
                    if (((pResX == 128) && (pResY == 96)) || ((pResX == 176) && (pResY == 144)) || ((pResX == 352) && (pResY == 288)) || ((pResX == 704) && (pResY == 576)) || ((pResX == 1408) && (pResY == 1152)))
2020
                    {
2020
                    {
2021
                        LOG(LOG_VERBOSE, "Resolution %d*%d supported by H.263", pResX, pResY);
2021
                        LOG(LOG_VERBOSE, "Resolution %d*%d supported by H.263", pResX, pResY);
Lines 2035-2041 Link Here
2035
                    if (pResY < 144)
2035
                    if (pResY < 144)
2036
                        tResY = 144;
2036
                        tResY = 144;
2037
                    break;
2037
                    break;
2038
            case CODEC_ID_H263P:
2038
            case AV_CODEC_ID_H263P:
2039
            default:
2039
            default:
2040
                    break;
2040
                    break;
2041
        }
2041
        }
Lines 2177-2188 Link Here
2177
    return tResult;
2177
    return tResult;
2178
}
2178
}
2179
2179
2180
enum CodecID MediaSourceMuxer::GetSourceCodec()
2180
enum AVCodecID MediaSourceMuxer::GetSourceCodec()
2181
{
2181
{
2182
    if (mMediaSource != NULL)
2182
    if (mMediaSource != NULL)
2183
        return mMediaSource->GetSourceCodec();
2183
        return mMediaSource->GetSourceCodec();
2184
    else
2184
    else
2185
        return CODEC_ID_NONE;
2185
        return AV_CODEC_ID_NONE;
2186
}
2186
}
2187
2187
2188
string MediaSourceMuxer::GetSourceCodecStr()
2188
string MediaSourceMuxer::GetSourceCodecStr()
2189
-- HomerMultimedia/src/MediaSourceNet.cpp
2189
++ HomerMultimedia/src/MediaSourceNet.cpp
Lines 595-601 Link Here
595
    mSourceType = SOURCE_NETWORK;
595
    mSourceType = SOURCE_NETWORK;
596
    mOpenInputStream = false;
596
    mOpenInputStream = false;
597
597
598
    mSourceCodecId = CODEC_ID_NONE;
598
    mSourceCodecId = AV_CODEC_ID_NONE;
599
}
599
}
600
600
601
MediaSourceNet::MediaSourceNet(Socket *pDataSocket):
601
MediaSourceNet::MediaSourceNet(Socket *pDataSocket):
602
-- HomerMultimedia/src/MediaSourceOss.cpp
602
++ HomerMultimedia/src/MediaSourceOss.cpp
Lines 150-156 Link Here
150
    tFormatParams.channels = mOutputAudioChannels;
150
    tFormatParams.channels = mOutputAudioChannels;
151
    tFormatParams.initial_pause = 0;
151
    tFormatParams.initial_pause = 0;
152
    tFormatParams.prealloced_context = 0;
152
    tFormatParams.prealloced_context = 0;
153
    //deprecated: tFormatParams.audio_codec_id = CODEC_ID_PCM_S16LE;
153
    //deprecated: tFormatParams.audio_codec_id = AV_CODEC_ID_PCM_S16LE;
154
    tFormat = av_find_input_format("oss");
154
    tFormat = av_find_input_format("oss");
155
    if (tFormat == NULL)
155
    if (tFormat == NULL)
156
    {
156
    {
157
-- HomerMultimedia/src/RTP.cpp
157
++ HomerMultimedia/src/RTP.cpp
Lines 421-427 Link Here
421
    mRtpPacketBuffer = NULL;
421
    mRtpPacketBuffer = NULL;
422
    mTargetHost = "";
422
    mTargetHost = "";
423
    mTargetPort = 0;
423
    mTargetPort = 0;
424
    mStreamCodecID = CODEC_ID_NONE;
424
    mStreamCodecID = AV_CODEC_ID_NONE;
425
    mLocalSourceIdentifier = 0;
425
    mLocalSourceIdentifier = 0;
426
    Init();
426
    Init();
427
}
427
}
Lines 562-568 Link Here
562
    // set SRC ID
562
    // set SRC ID
563
    mLocalSourceIdentifier = av_get_random_seed();
563
    mLocalSourceIdentifier = av_get_random_seed();
564
564
565
    if (mStreamCodecID == CODEC_ID_H261)
565
    if (mStreamCodecID == AV_CODEC_ID_H261)
566
    	return OpenRtpEncoderH261(pTargetHost, pTargetPort, pInnerStream);
566
    	return OpenRtpEncoderH261(pTargetHost, pTargetPort, pInnerStream);
567
567
568
    int                 tResult;
568
    int                 tResult;
Lines 630-636 Link Here
630
630
631
    switch(mStreamCodecID)
631
    switch(mStreamCodecID)
632
    {
632
    {
633
        case CODEC_ID_H263:
633
        case AV_CODEC_ID_H263:
634
                // use older rfc2190 for RTP packetizing
634
                // use older rfc2190 for RTP packetizing
635
                if ((tRes = av_opt_set(mRtpFormatContext->priv_data, "rtpflags", "rfc2190", 0)) < 0)
635
                if ((tRes = av_opt_set(mRtpFormatContext->priv_data, "rtpflags", "rfc2190", 0)) < 0)
636
                	LOG(LOG_ERROR, "Failed to set A/V option \"rtpflags\" because %s(0x%x)", strerror(AVUNERROR(tRes)), tRes);
636
                	LOG(LOG_ERROR, "Failed to set A/V option \"rtpflags\" because %s(0x%x)", strerror(AVUNERROR(tRes)), tRes);
Lines 737-743 Link Here
737
    return mPayloadId;
737
    return mPayloadId;
738
}
738
}
739
739
740
bool RTP::IsPayloadSupported(enum CodecID pId)
740
bool RTP::IsPayloadSupported(enum AVCodecID pId)
741
{
741
{
742
    bool tResult = false;
742
    bool tResult = false;
743
743
Lines 745-768 Link Here
745
    switch(pId)
745
    switch(pId)
746
    {
746
    {
747
            // list from "libavformat::rtpenc.c::is_supported"
747
            // list from "libavformat::rtpenc.c::is_supported"
748
            case CODEC_ID_H261:
748
            case AV_CODEC_ID_H261:
749
            case CODEC_ID_H263:
749
            case AV_CODEC_ID_H263:
750
            case CODEC_ID_H263P:
750
            case AV_CODEC_ID_H263P:
751
            case CODEC_ID_H264:
751
            case AV_CODEC_ID_H264:
752
            case CODEC_ID_MPEG1VIDEO:
752
            case AV_CODEC_ID_MPEG1VIDEO:
753
            case CODEC_ID_MPEG2VIDEO:
753
            case AV_CODEC_ID_MPEG2VIDEO:
754
            case CODEC_ID_MPEG4:
754
            case AV_CODEC_ID_MPEG4:
755
            case CODEC_ID_MP3:
755
            case AV_CODEC_ID_MP3:
756
            case CODEC_ID_AMR_NB:
756
            case AV_CODEC_ID_AMR_NB:
757
            case CODEC_ID_PCM_ALAW:
757
            case AV_CODEC_ID_PCM_ALAW:
758
            case CODEC_ID_PCM_MULAW:
758
            case AV_CODEC_ID_PCM_MULAW:
759
            case CODEC_ID_PCM_S16BE:
759
            case AV_CODEC_ID_PCM_S16BE:
760
//            case CODEC_ID_MPEG2TS:
760
//            case AV_CODEC_ID_MPEG2TS:
761
//            case CODEC_ID_VORBIS:
761
//            case AV_CODEC_ID_VORBIS:
762
            case CODEC_ID_THEORA:
762
            case AV_CODEC_ID_THEORA:
763
            case CODEC_ID_VP8:
763
            case AV_CODEC_ID_VP8:
764
            case CODEC_ID_ADPCM_G722:
764
            case AV_CODEC_ID_ADPCM_G722:
765
//            case CODEC_ID_ADPCM_G726:
765
//            case AV_CODEC_ID_ADPCM_G726:
766
                            tResult = true;
766
                            tResult = true;
767
                            break;
767
                            break;
768
            default:
768
            default:
Lines 772-778 Link Here
772
    return tResult;
772
    return tResult;
773
}
773
}
774
774
775
int RTP::GetPayloadHeaderSizeMax(enum CodecID pCodec)
775
int RTP::GetPayloadHeaderSizeMax(enum AVCodecID pCodec)
776
{
776
{
777
    int tResult = 0;
777
    int tResult = 0;
778
778
Lines 782-833 Link Here
782
    switch(pCodec)
782
    switch(pCodec)
783
    {
783
    {
784
            // list from "libavformat::rtpenc.c::is_supported"
784
            // list from "libavformat::rtpenc.c::is_supported"
785
            case CODEC_ID_H261:
785
            case AV_CODEC_ID_H261:
786
                tResult = sizeof(H261Header);
786
                tResult = sizeof(H261Header);
787
                break;
787
                break;
788
            case CODEC_ID_H263:
788
            case AV_CODEC_ID_H263:
789
                tResult = sizeof(H263Header);
789
                tResult = sizeof(H263Header);
790
                break;
790
                break;
791
            case CODEC_ID_H263P:
791
            case AV_CODEC_ID_H263P:
792
                tResult = sizeof(H263PHeader);
792
                tResult = sizeof(H263PHeader);
793
                break;
793
                break;
794
            case CODEC_ID_H264:
794
            case AV_CODEC_ID_H264:
795
                tResult = sizeof(H264Header);
795
                tResult = sizeof(H264Header);
796
                break;
796
                break;
797
            case CODEC_ID_MPEG1VIDEO:
797
            case AV_CODEC_ID_MPEG1VIDEO:
798
            case CODEC_ID_MPEG2VIDEO:
798
            case AV_CODEC_ID_MPEG2VIDEO:
799
                tResult = sizeof(MPVHeader); //HINT: we neglect the MPEG2 add-on header
799
                tResult = sizeof(MPVHeader); //HINT: we neglect the MPEG2 add-on header
800
                break;
800
                break;
801
            case CODEC_ID_MPEG4:
801
            case AV_CODEC_ID_MPEG4:
802
                tResult = 0;
802
                tResult = 0;
803
                break;
803
                break;
804
            case CODEC_ID_AMR_NB:
804
            case AV_CODEC_ID_AMR_NB:
805
            	tResult = sizeof(AMRNBHeader);
805
            	tResult = sizeof(AMRNBHeader);
806
            	break;
806
            	break;
807
            case CODEC_ID_PCM_ALAW:
807
            case AV_CODEC_ID_PCM_ALAW:
808
                tResult = 0;
808
                tResult = 0;
809
                break;
809
                break;
810
            case CODEC_ID_PCM_MULAW:
810
            case AV_CODEC_ID_PCM_MULAW:
811
                tResult = 0;
811
                tResult = 0;
812
                break;
812
                break;
813
            case CODEC_ID_ADPCM_G722:
813
            case AV_CODEC_ID_ADPCM_G722:
814
            	tResult = 0;
814
            	tResult = 0;
815
            	break;
815
            	break;
816
            case CODEC_ID_PCM_S16BE:
816
            case AV_CODEC_ID_PCM_S16BE:
817
                tResult = 0;
817
                tResult = 0;
818
                break;
818
                break;
819
            case CODEC_ID_MP3:
819
            case AV_CODEC_ID_MP3:
820
                tResult = sizeof(MPAHeader);
820
                tResult = sizeof(MPAHeader);
821
                break;
821
                break;
822
//            case CODEC_ID_MPEG2TS:
822
//            case AV_CODEC_ID_MPEG2TS:
823
//            case CODEC_ID_VORBIS:
823
//            case AV_CODEC_ID_VORBIS:
824
            case CODEC_ID_THEORA:
824
            case AV_CODEC_ID_THEORA:
825
                tResult = sizeof(THEORAHeader);
825
                tResult = sizeof(THEORAHeader);
826
                break;
826
                break;
827
            case CODEC_ID_VP8:
827
            case AV_CODEC_ID_VP8:
828
                tResult = sizeof(VP8Header); // we neglect the extended header and the 3 other optional header bytes
828
                tResult = sizeof(VP8Header); // we neglect the extended header and the 3 other optional header bytes
829
                break;
829
                break;
830
//            case CODEC_ID_ADPCM_G726:
830
//            case AV_CODEC_ID_ADPCM_G726:
831
            default:
831
            default:
832
                tResult = 0;
832
                tResult = 0;
833
                break;
833
                break;
Lines 836-842 Link Here
836
    return tResult;
836
    return tResult;
837
}
837
}
838
838
839
int RTP::GetHeaderSizeMax(enum CodecID pCodec)
839
int RTP::GetHeaderSizeMax(enum AVCodecID pCodec)
840
{
840
{
841
    return RTP_HEADER_SIZE + GetPayloadHeaderSizeMax(pCodec);
841
    return RTP_HEADER_SIZE + GetPayloadHeaderSizeMax(pCodec);
842
}
842
}
Lines 963-969 Link Here
963
    tMp3Hack_EntireBufferSize = pDataSize;
963
    tMp3Hack_EntireBufferSize = pDataSize;
964
964
965
    // adapt clock rate for G.722
965
    // adapt clock rate for G.722
966
	if (mStreamCodecID == CODEC_ID_ADPCM_G722)
966
	if (mStreamCodecID == AV_CODEC_ID_ADPCM_G722)
967
		pPacketPts /= 2; // transform from 16 kHz to 8kHz
967
		pPacketPts /= 2; // transform from 16 kHz to 8kHz
968
968
969
    av_init_packet(&tPacket);
969
    av_init_packet(&tPacket);
Lines 1098-1117 Link Here
1098
                //       -> don't know for what reason, but they should be kept as they are
1098
                //       -> don't know for what reason, but they should be kept as they are
1099
                switch(mStreamCodecID)
1099
                switch(mStreamCodecID)
1100
                {
1100
                {
1101
                            case CODEC_ID_PCM_MULAW:
1101
                            case AV_CODEC_ID_PCM_MULAW:
1102
                                            tRtpHeader->PayloadType = 0;
1102
                                            tRtpHeader->PayloadType = 0;
1103
                                            break;
1103
                                            break;
1104
                            case CODEC_ID_PCM_ALAW:
1104
                            case AV_CODEC_ID_PCM_ALAW:
1105
                                            tRtpHeader->PayloadType = 8;
1105
                                            tRtpHeader->PayloadType = 8;
1106
                                            break;
1106
                                            break;
1107
                            case CODEC_ID_ADPCM_G722:
1107
                            case AV_CODEC_ID_ADPCM_G722:
1108
                                            tRtpHeader->PayloadType = 9;
1108
                                            tRtpHeader->PayloadType = 9;
1109
                                            break;
1109
                                            break;
1110
				//            case CODEC_ID_ADPCM_G726:
1110
				//            case AV_CODEC_ID_ADPCM_G726:
1111
                            case CODEC_ID_PCM_S16BE:
1111
                            case AV_CODEC_ID_PCM_S16BE:
1112
                                            tRtpHeader->PayloadType = 10;
1112
                                            tRtpHeader->PayloadType = 10;
1113
                                            break;
1113
                                            break;
1114
                            case CODEC_ID_MP3:
1114
                            case AV_CODEC_ID_MP3:
1115
                                            // HACK: some modification of the standard MPA payload header: use MBZ to signalize the size of the original audio packet
1115
                                            // HACK: some modification of the standard MPA payload header: use MBZ to signalize the size of the original audio packet
1116
                                            tMPAHeader = (MPAHeader*)(tRtpPacket + RTP_HEADER_SIZE);
1116
                                            tMPAHeader = (MPAHeader*)(tRtpPacket + RTP_HEADER_SIZE);
1117
1117
Lines 1128-1166 Link Here
1128
1128
1129
                                            tRtpHeader->PayloadType = 14;
1129
                                            tRtpHeader->PayloadType = 14;
1130
                                            break;
1130
                                            break;
1131
                            case CODEC_ID_H261:
1131
                            case AV_CODEC_ID_H261:
1132
                                            tRtpHeader->PayloadType = 31;
1132
                                            tRtpHeader->PayloadType = 31;
1133
                                            break;
1133
                                            break;
1134
                            case CODEC_ID_MPEG1VIDEO:
1134
                            case AV_CODEC_ID_MPEG1VIDEO:
1135
                            case CODEC_ID_MPEG2VIDEO:
1135
                            case AV_CODEC_ID_MPEG2VIDEO:
1136
                                            tRtpHeader->PayloadType = 32;
1136
                                            tRtpHeader->PayloadType = 32;
1137
                                            break;
1137
                                            break;
1138
                            case CODEC_ID_H263:
1138
                            case AV_CODEC_ID_H263:
1139
                                            tRtpHeader->PayloadType = 34;
1139
                                            tRtpHeader->PayloadType = 34;
1140
                                            break;
1140
                                            break;
1141
                            case CODEC_ID_AAC:
1141
                            case AV_CODEC_ID_AAC:
1142
                                            tRtpHeader->PayloadType = 100;
1142
                                            tRtpHeader->PayloadType = 100;
1143
                                            break;
1143
                                            break;
1144
                            case CODEC_ID_AMR_NB:
1144
                            case AV_CODEC_ID_AMR_NB:
1145
                                            tRtpHeader->PayloadType = 101;
1145
                                            tRtpHeader->PayloadType = 101;
1146
                                            break;
1146
                                            break;
1147
                            case CODEC_ID_H263P:
1147
                            case AV_CODEC_ID_H263P:
1148
                                            tRtpHeader->PayloadType = 119;
1148
                                            tRtpHeader->PayloadType = 119;
1149
                                            break;
1149
                                            break;
1150
                            case CODEC_ID_H264:
1150
                            case AV_CODEC_ID_H264:
1151
                                            tRtpHeader->PayloadType = 120;
1151
                                            tRtpHeader->PayloadType = 120;
1152
                                            break;
1152
                                            break;
1153
                            case CODEC_ID_MPEG4:
1153
                            case AV_CODEC_ID_MPEG4:
1154
                                            tRtpHeader->PayloadType = 121;
1154
                                            tRtpHeader->PayloadType = 121;
1155
                                            break;
1155
                                            break;
1156
                            case CODEC_ID_THEORA:
1156
                            case AV_CODEC_ID_THEORA:
1157
                                            tRtpHeader->PayloadType = 122;
1157
                                            tRtpHeader->PayloadType = 122;
1158
                                            break;
1158
                                            break;
1159
                            case CODEC_ID_VP8:
1159
                            case AV_CODEC_ID_VP8:
1160
                                            tRtpHeader->PayloadType = 123;
1160
                                            tRtpHeader->PayloadType = 123;
1161
                                            break;
1161
                                            break;
1162
				//            case CODEC_ID_MPEG2TS:
1162
				//            case AV_CODEC_ID_MPEG2TS:
1163
				//            case CODEC_ID_VORBIS:
1163
				//            case AV_CODEC_ID_VORBIS:
1164
                }
1164
                }
1165
1165
1166
                //#################################################################################
1166
                //#################################################################################
Lines 1421-1427 Link Here
1421
1421
1422
    // clock rate adaption
1422
    // clock rate adaption
1423
    tResult = mRemoteTimestamp / CalculateClockRateFactor();
1423
    tResult = mRemoteTimestamp / CalculateClockRateFactor();
1424
    if (mStreamCodecID == CODEC_ID_ADPCM_G722)
1424
    if (mStreamCodecID == AV_CODEC_ID_ADPCM_G722)
1425
    	tResult *= 2; // transform from 8 kHz to 16kHz
1425
    	tResult *= 2; // transform from 8 kHz to 16kHz
1426
1426
1427
    return tResult;
1427
    return tResult;
Lines 1435-1441 Link Here
1435
1435
1436
    // clock rate adaption
1436
    // clock rate adaption
1437
    pReferencePts = mRtcpLastRemoteTimestamp / CalculateClockRateFactor();
1437
    pReferencePts = mRtcpLastRemoteTimestamp / CalculateClockRateFactor();
1438
    if (mStreamCodecID == CODEC_ID_ADPCM_G722)
1438
    if (mStreamCodecID == AV_CODEC_ID_ADPCM_G722)
1439
    	pReferencePts *= 2; // transform from 8 kHz to 16kHz
1439
    	pReferencePts *= 2; // transform from 8 kHz to 16kHz
1440
1440
1441
    mSynchDataMutex.unlock();
1441
    mSynchDataMutex.unlock();
Lines 1462-1490 Link Here
1462
1462
1463
    switch(mStreamCodecID)
1463
    switch(mStreamCodecID)
1464
    {
1464
    {
1465
        case CODEC_ID_PCM_MULAW:
1465
        case AV_CODEC_ID_PCM_MULAW:
1466
        case CODEC_ID_PCM_ALAW:
1466
        case AV_CODEC_ID_PCM_ALAW:
1467
        case CODEC_ID_PCM_S16BE:
1467
        case AV_CODEC_ID_PCM_S16BE:
1468
        case CODEC_ID_MP3:
1468
        case AV_CODEC_ID_MP3:
1469
        case CODEC_ID_ADPCM_G722:
1469
        case AV_CODEC_ID_ADPCM_G722:
1470
//            case CODEC_ID_ADPCM_G726:
1470
//            case AV_CODEC_ID_ADPCM_G726:
1471
        case CODEC_ID_THEORA:
1471
        case AV_CODEC_ID_THEORA:
1472
            tResult = 1;
1472
            tResult = 1;
1473
            break;
1473
            break;
1474
        case CODEC_ID_H261:
1474
        case AV_CODEC_ID_H261:
1475
        case CODEC_ID_H263:
1475
        case AV_CODEC_ID_H263:
1476
        case CODEC_ID_H263P:
1476
        case AV_CODEC_ID_H263P:
1477
        case CODEC_ID_H264:
1477
        case AV_CODEC_ID_H264:
1478
        case CODEC_ID_MPEG1VIDEO:
1478
        case AV_CODEC_ID_MPEG1VIDEO:
1479
        case CODEC_ID_MPEG2VIDEO:
1479
        case AV_CODEC_ID_MPEG2VIDEO:
1480
        case CODEC_ID_MPEG4: //TODO: mpeg 4 is buggy?
1480
        case AV_CODEC_ID_MPEG4: //TODO: mpeg 4 is buggy?
1481
            tResult = 90;
1481
            tResult = 90;
1482
            break;
1482
            break;
1483
        case CODEC_ID_VP8:
1483
        case AV_CODEC_ID_VP8:
1484
            tResult = 1; //TODO
1484
            tResult = 1; //TODO
1485
            break;
1485
            break;
1486
//            case CODEC_ID_MPEG2TS:
1486
//            case AV_CODEC_ID_MPEG2TS:
1487
//            case CODEC_ID_VORBIS:
1487
//            case AV_CODEC_ID_VORBIS:
1488
        default:
1488
        default:
1489
            break;
1489
            break;
1490
    }
1490
    }
Lines 1498-1546 Link Here
1498
1498
1499
    switch(mStreamCodecID)
1499
    switch(mStreamCodecID)
1500
    {
1500
    {
1501
                case CODEC_ID_PCM_MULAW:
1501
                case AV_CODEC_ID_PCM_MULAW:
1502
                                if (pType == 0)
1502
                                if (pType == 0)
1503
                                	tResult = true;
1503
                                	tResult = true;
1504
                                break;
1504
                                break;
1505
                case CODEC_ID_PCM_ALAW:
1505
                case AV_CODEC_ID_PCM_ALAW:
1506
								if (pType == 8)
1506
								if (pType == 8)
1507
									tResult = true;
1507
									tResult = true;
1508
                                break;
1508
                                break;
1509
                case CODEC_ID_ADPCM_G722:
1509
                case AV_CODEC_ID_ADPCM_G722:
1510
								if (pType == 9)
1510
								if (pType == 9)
1511
									tResult = true;
1511
									tResult = true;
1512
                                break;
1512
                                break;
1513
	//            case CODEC_ID_ADPCM_G726:
1513
	//            case AV_CODEC_ID_ADPCM_G726:
1514
                case CODEC_ID_PCM_S16BE:
1514
                case AV_CODEC_ID_PCM_S16BE:
1515
								if (pType == 10)
1515
								if (pType == 10)
1516
									tResult = true;
1516
									tResult = true;
1517
                                break;
1517
                                break;
1518
                case CODEC_ID_MP3:
1518
                case AV_CODEC_ID_MP3:
1519
								if (pType == 14)
1519
								if (pType == 14)
1520
									tResult = true;
1520
									tResult = true;
1521
                                break;
1521
                                break;
1522
                case CODEC_ID_H261:
1522
                case AV_CODEC_ID_H261:
1523
								if (pType == 31)
1523
								if (pType == 31)
1524
									tResult = true;
1524
									tResult = true;
1525
                                break;
1525
                                break;
1526
                case CODEC_ID_MPEG1VIDEO:
1526
                case AV_CODEC_ID_MPEG1VIDEO:
1527
                case CODEC_ID_MPEG2VIDEO:
1527
                case AV_CODEC_ID_MPEG2VIDEO:
1528
								if (pType == 32)
1528
								if (pType == 32)
1529
									tResult = true;
1529
									tResult = true;
1530
                                break;
1530
                                break;
1531
                case CODEC_ID_H263:
1531
                case AV_CODEC_ID_H263:
1532
								if ((pType == 34) || (pType >= 96))
1532
								if ((pType == 34) || (pType >= 96))
1533
									tResult = true;
1533
									tResult = true;
1534
                                break;
1534
                                break;
1535
                case CODEC_ID_AAC:
1535
                case AV_CODEC_ID_AAC:
1536
                case CODEC_ID_AMR_NB:
1536
                case AV_CODEC_ID_AMR_NB:
1537
                case CODEC_ID_H263P:
1537
                case AV_CODEC_ID_H263P:
1538
                case CODEC_ID_H264:
1538
                case AV_CODEC_ID_H264:
1539
                case CODEC_ID_MPEG4:
1539
                case AV_CODEC_ID_MPEG4:
1540
                case CODEC_ID_THEORA:
1540
                case AV_CODEC_ID_THEORA:
1541
                case CODEC_ID_VP8:
1541
                case AV_CODEC_ID_VP8:
1542
	//            case CODEC_ID_MPEG2TS:
1542
	//            case AV_CODEC_ID_MPEG2TS:
1543
	//            case CODEC_ID_VORBIS:
1543
	//            case AV_CODEC_ID_VORBIS:
1544
								if (pType >= 96)
1544
								if (pType >= 96)
1545
									tResult = true;
1545
									tResult = true;
1546
								break;
1546
								break;
Lines 1552-1558 Link Here
1552
}
1552
}
1553
1553
1554
// assumption: we are getting one single RTP encapsulated packet, not auto detection of following additional packets included
1554
// assumption: we are getting one single RTP encapsulated packet, not auto detection of following additional packets included
1555
bool RTP::RtpParse(char *&pData, int &pDataSize, bool &pIsLastFragment, enum RtcpType &pRtcpType, enum CodecID pCodecId, bool pLoggingOnly)
1555
bool RTP::RtpParse(char *&pData, int &pDataSize, bool &pIsLastFragment, enum RtcpType &pRtcpType, enum AVCodecID pCodecId, bool pLoggingOnly)
1556
{
1556
{
1557
    pIsLastFragment = false;
1557
    pIsLastFragment = false;
1558
1558
Lines 1563-1569 Link Here
1563
    bool tOldH263PayloadDetected = false;
1563
    bool tOldH263PayloadDetected = false;
1564
    char *tRtpPacketStart = pData;
1564
    char *tRtpPacketStart = pData;
1565
1565
1566
    if ((mStreamCodecID != CODEC_ID_NONE) && (mStreamCodecID != pCodecId))
1566
    if ((mStreamCodecID != AV_CODEC_ID_NONE) && (mStreamCodecID != pCodecId))
1567
        LOG(LOG_WARN, "Codec change from %d(%s) to %d(%s) in inout stream detected", mStreamCodecID, avcodec_get_name(mStreamCodecID), pCodecId, avcodec_get_name(pCodecId));
1567
        LOG(LOG_WARN, "Codec change from %d(%s) to %d(%s) in inout stream detected", mStreamCodecID, avcodec_get_name(mStreamCodecID), pCodecId, avcodec_get_name(pCodecId));
1568
1568
1569
    mStreamCodecID = pCodecId;
1569
    mStreamCodecID = pCodecId;
Lines 1572-1596 Link Here
1572
    switch(mStreamCodecID)
1572
    switch(mStreamCodecID)
1573
    {
1573
    {
1574
            //supported audio codecs
1574
            //supported audio codecs
1575
    		case CODEC_ID_AMR_NB:
1575
    		case AV_CODEC_ID_AMR_NB:
1576
            case CODEC_ID_PCM_MULAW:
1576
            case AV_CODEC_ID_PCM_MULAW:
1577
            case CODEC_ID_PCM_ALAW:
1577
            case AV_CODEC_ID_PCM_ALAW:
1578
            case CODEC_ID_PCM_S16BE:
1578
            case AV_CODEC_ID_PCM_S16BE:
1579
            case CODEC_ID_MP3:
1579
            case AV_CODEC_ID_MP3:
1580
            case CODEC_ID_ADPCM_G722:
1580
            case AV_CODEC_ID_ADPCM_G722:
1581
//            case CODEC_ID_ADPCM_G726:
1581
//            case AV_CODEC_ID_ADPCM_G726:
1582
            //supported video codecs
1582
            //supported video codecs
1583
            case CODEC_ID_H261:
1583
            case AV_CODEC_ID_H261:
1584
            case CODEC_ID_H263:
1584
            case AV_CODEC_ID_H263:
1585
            case CODEC_ID_H263P:
1585
            case AV_CODEC_ID_H263P:
1586
            case CODEC_ID_H264:
1586
            case AV_CODEC_ID_H264:
1587
            case CODEC_ID_MPEG1VIDEO:
1587
            case AV_CODEC_ID_MPEG1VIDEO:
1588
            case CODEC_ID_MPEG2VIDEO:
1588
            case AV_CODEC_ID_MPEG2VIDEO:
1589
            case CODEC_ID_MPEG4:
1589
            case AV_CODEC_ID_MPEG4:
1590
            case CODEC_ID_THEORA:
1590
            case AV_CODEC_ID_THEORA:
1591
            case CODEC_ID_VP8:
1591
            case AV_CODEC_ID_VP8:
1592
//            case CODEC_ID_MPEG2TS:
1592
//            case AV_CODEC_ID_MPEG2TS:
1593
//            case CODEC_ID_VORBIS:
1593
//            case AV_CODEC_ID_VORBIS:
1594
                    break;
1594
                    break;
1595
            default:
1595
            default:
1596
                    LOG(LOG_ERROR, "Codec %d is unsupported by internal RTP parser", mStreamCodecID);
1596
                    LOG(LOG_ERROR, "Codec %d is unsupported by internal RTP parser", mStreamCodecID);
Lines 1921-1934 Link Here
1921
    switch(mStreamCodecID)
1921
    switch(mStreamCodecID)
1922
    {
1922
    {
1923
            // audio
1923
            // audio
1924
    		case CODEC_ID_AMR_NB:
1924
    		case AV_CODEC_ID_AMR_NB:
1925
							#ifdef RTP_DEBUG_PACKET_DECODER
1925
							#ifdef RTP_DEBUG_PACKET_DECODER
1926
								LOG(LOG_VERBOSE, "#################### AMR-NB header #######################");
1926
								LOG(LOG_VERBOSE, "#################### AMR-NB header #######################");
1927
								LOG(LOG_VERBOSE, "No additional information");//TODO
1927
								LOG(LOG_VERBOSE, "No additional information");//TODO
1928
							#endif
1928
							#endif
1929
							mIntermediateFragment = false;//TODO
1929
							mIntermediateFragment = false;//TODO
1930
							break;
1930
							break;
1931
            case CODEC_ID_PCM_ALAW:
1931
            case AV_CODEC_ID_PCM_ALAW:
1932
                            #ifdef RTP_DEBUG_PACKET_DECODER
1932
                            #ifdef RTP_DEBUG_PACKET_DECODER
1933
                                LOG(LOG_VERBOSE, "#################### PCMA header #######################");
1933
                                LOG(LOG_VERBOSE, "#################### PCMA header #######################");
1934
                                LOG(LOG_VERBOSE, "No additional information");
1934
                                LOG(LOG_VERBOSE, "No additional information");
Lines 1936-1942 Link Here
1936
                            // no fragmentation because our encoder sends raw data
1936
                            // no fragmentation because our encoder sends raw data
1937
                            mIntermediateFragment = false;
1937
                            mIntermediateFragment = false;
1938
                            break;
1938
                            break;
1939
            case CODEC_ID_PCM_MULAW:
1939
            case AV_CODEC_ID_PCM_MULAW:
1940
                            #ifdef RTP_DEBUG_PACKET_DECODER
1940
                            #ifdef RTP_DEBUG_PACKET_DECODER
1941
                                LOG(LOG_VERBOSE, "#################### PCMU header #######################");
1941
                                LOG(LOG_VERBOSE, "#################### PCMU header #######################");
1942
                                LOG(LOG_VERBOSE, "No additional information");
1942
                                LOG(LOG_VERBOSE, "No additional information");
Lines 1944-1950 Link Here
1944
                            // no fragmentation because our encoder sends raw data
1944
                            // no fragmentation because our encoder sends raw data
1945
                            mIntermediateFragment = false;
1945
                            mIntermediateFragment = false;
1946
                            break;
1946
                            break;
1947
            case CODEC_ID_PCM_S16BE:
1947
            case AV_CODEC_ID_PCM_S16BE:
1948
                            #ifdef RTP_DEBUG_PACKET_DECODER
1948
                            #ifdef RTP_DEBUG_PACKET_DECODER
1949
                                LOG(LOG_VERBOSE, "#################### PCM_S16BE header #######################");
1949
                                LOG(LOG_VERBOSE, "#################### PCM_S16BE header #######################");
1950
                                LOG(LOG_VERBOSE, "No additional information");
1950
                                LOG(LOG_VERBOSE, "No additional information");
Lines 1952-1958 Link Here
1952
                            // no fragmentation because our encoder sends raw data
1952
                            // no fragmentation because our encoder sends raw data
1953
                            mIntermediateFragment = false;
1953
                            mIntermediateFragment = false;
1954
                            break;
1954
                            break;
1955
            case CODEC_ID_ADPCM_G722:
1955
            case AV_CODEC_ID_ADPCM_G722:
1956
							#ifdef RTP_DEBUG_PACKET_DECODER
1956
							#ifdef RTP_DEBUG_PACKET_DECODER
1957
								LOG(LOG_VERBOSE, "#################### G.722 header #######################");
1957
								LOG(LOG_VERBOSE, "#################### G.722 header #######################");
1958
								LOG(LOG_VERBOSE, "No additional information");
1958
								LOG(LOG_VERBOSE, "No additional information");
Lines 1960-1967 Link Here
1960
							// no fragmentation because our encoder sends raw data
1960
							// no fragmentation because our encoder sends raw data
1961
							mIntermediateFragment = false;
1961
							mIntermediateFragment = false;
1962
            				break;
1962
            				break;
1963
//            case CODEC_ID_ADPCM_G726:
1963
//            case AV_CODEC_ID_ADPCM_G726:
1964
            case CODEC_ID_MP3:
1964
            case AV_CODEC_ID_MP3:
1965
                            // convert from network to host byte order
1965
                            // convert from network to host byte order
1966
                            tMPAHeader->Data[0] = ntohl(tMPAHeader->Data[0]);
1966
                            tMPAHeader->Data[0] = ntohl(tMPAHeader->Data[0]);
1967
1967
Lines 2022-2028 Link Here
2022
2022
2023
                            break;
2023
                            break;
2024
            // video
2024
            // video
2025
            case CODEC_ID_H261:
2025
            case AV_CODEC_ID_H261:
2026
                            #ifdef RTP_DEBUG_PACKET_DECODER
2026
                            #ifdef RTP_DEBUG_PACKET_DECODER
2027
                                // convert from network to host byte order
2027
                                // convert from network to host byte order
2028
                                tH261Header->Data[0] = ntohl(tH261Header->Data[0]);
2028
                                tH261Header->Data[0] = ntohl(tH261Header->Data[0]);
Lines 2051-2058 Link Here
2051
                            // go to the start of the h261 payload
2051
                            // go to the start of the h261 payload
2052
                            pData += H261_HEADER_SIZE;
2052
                            pData += H261_HEADER_SIZE;
2053
                            break;
2053
                            break;
2054
            case CODEC_ID_H263:
2054
            case AV_CODEC_ID_H263:
2055
            case CODEC_ID_H263P:
2055
            case AV_CODEC_ID_H263P:
2056
                            // HINT: do we have RTP packets with payload id 34?
2056
                            // HINT: do we have RTP packets with payload id 34?
2057
                            //       => yes: parse rtp packet according to RFC2190
2057
                            //       => yes: parse rtp packet according to RFC2190
2058
                            //       => no: parse rtp packet according to RFC4629
2058
                            //       => no: parse rtp packet according to RFC4629
Lines 2165-2171 Link Here
2165
								}
2165
								}
2166
                            }
2166
                            }
2167
                            break;
2167
                            break;
2168
            case CODEC_ID_H264:
2168
            case AV_CODEC_ID_H264:
2169
                            // convert from network to host byte order
2169
                            // convert from network to host byte order
2170
                            tH264Header->Data[0] = ntohl(tH264Header->Data[0]);
2170
                            tH264Header->Data[0] = ntohl(tH264Header->Data[0]);
2171
2171
Lines 2269-2276 Link Here
2269
                            }
2269
                            }
2270
2270
2271
                            break;
2271
                            break;
2272
            case CODEC_ID_MPEG1VIDEO:
2272
            case AV_CODEC_ID_MPEG1VIDEO:
2273
            case CODEC_ID_MPEG2VIDEO:
2273
            case AV_CODEC_ID_MPEG2VIDEO:
2274
                            // convert from network to host byte order
2274
                            // convert from network to host byte order
2275
                            tMPVHeader->Data[0] = ntohl(tMPVHeader->Data[0]);
2275
                            tMPVHeader->Data[0] = ntohl(tMPVHeader->Data[0]);
2276
2276
Lines 2312-2324 Link Here
2312
                            // convert from host to network byte order
2312
                            // convert from host to network byte order
2313
                            tMPVHeader->Data[0] = htonl(tMPVHeader->Data[0]);
2313
                            tMPVHeader->Data[0] = htonl(tMPVHeader->Data[0]);
2314
                            break;
2314
                            break;
2315
            case CODEC_ID_MPEG4:
2315
            case AV_CODEC_ID_MPEG4:
2316
                            #ifdef RTP_DEBUG_PACKET_DECODER
2316
                            #ifdef RTP_DEBUG_PACKET_DECODER
2317
                                LOG(LOG_VERBOSE, "#################### MPEG4 header #######################");
2317
                                LOG(LOG_VERBOSE, "#################### MPEG4 header #######################");
2318
                                LOG(LOG_VERBOSE, "No additional information");
2318
                                LOG(LOG_VERBOSE, "No additional information");
2319
                            #endif
2319
                            #endif
2320
                            break;
2320
                            break;
2321
            case CODEC_ID_THEORA:
2321
            case AV_CODEC_ID_THEORA:
2322
                            // convert from network to host byte order
2322
                            // convert from network to host byte order
2323
                            tTHEORAHeader->Data[0] = ntohl(tTHEORAHeader->Data[0]);
2323
                            tTHEORAHeader->Data[0] = ntohl(tTHEORAHeader->Data[0]);
2324
                            pData += sizeof(THEORAHeader);
2324
                            pData += sizeof(THEORAHeader);
Lines 2350-2356 Link Here
2350
                            // convert from host to network byte order
2350
                            // convert from host to network byte order
2351
                            tTHEORAHeader->Data[0] = htonl(tTHEORAHeader->Data[0]);
2351
                            tTHEORAHeader->Data[0] = htonl(tTHEORAHeader->Data[0]);
2352
                            break;
2352
                            break;
2353
            case CODEC_ID_VP8:
2353
            case AV_CODEC_ID_VP8:
2354
                            pData++; // default VP 8 header = 1 byte
2354
                            pData++; // default VP 8 header = 1 byte
2355
2355
2356
                            // do we have extended control bits?
2356
                            // do we have extended control bits?
Lines 2379-2386 Link Here
2379
                                LOG(LOG_VERBOSE, "Start of partition: %d", tVP8Header->S);
2379
                                LOG(LOG_VERBOSE, "Start of partition: %d", tVP8Header->S);
2380
                            #endif
2380
                            #endif
2381
                            break;
2381
                            break;
2382
//            case CODEC_ID_MPEG2TS:
2382
//            case AV_CODEC_ID_MPEG2TS:
2383
//            case CODEC_ID_VORBIS:
2383
//            case AV_CODEC_ID_VORBIS:
2384
            default:
2384
            default:
2385
                            LOG(LOG_ERROR, "Unsupported codec %d dropped by internal RTP parser", mStreamCodecID);
2385
                            LOG(LOG_ERROR, "Unsupported codec %d dropped by internal RTP parser", mStreamCodecID);
2386
                            break;
2386
                            break;
Lines 2793-2799 Link Here
2793
    	LOG(LOG_VERBOSE, "New synchronization for %d codec: %u, clock: %.2f, RTP timestamp: %.2f, timestamp offset: %lu", mStreamCodecID, pReferencePts, CalculateClockRateFactor(), (float)pReferencePts * CalculateClockRateFactor(), mLocalTimestampOffset);
2793
    	LOG(LOG_VERBOSE, "New synchronization for %d codec: %u, clock: %.2f, RTP timestamp: %.2f, timestamp offset: %lu", mStreamCodecID, pReferencePts, CalculateClockRateFactor(), (float)pReferencePts * CalculateClockRateFactor(), mLocalTimestampOffset);
2794
	#endif
2794
	#endif
2795
2795
2796
	if (mStreamCodecID == CODEC_ID_ADPCM_G722)
2796
	if (mStreamCodecID == AV_CODEC_ID_ADPCM_G722)
2797
		pReferencePts /= 2; // transform from 16 kHz to 8kHz
2797
		pReferencePts /= 2; // transform from 16 kHz to 8kHz
2798
2798
2799
	mSyncDataMutex.lock();
2799
	mSyncDataMutex.lock();

Return to bug 476536