more avcodec files
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6466 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -4,6 +4,8 @@ UsePrivateHeaders media ;
|
||||
|
||||
Addon avcodec : media plugins :
|
||||
avcodec.cpp
|
||||
codectbl.cpp
|
||||
video_util.cpp
|
||||
:
|
||||
false
|
||||
:
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
/******************************************************************************
|
||||
/
|
||||
/ File: avCodec.h
|
||||
/
|
||||
/ Description: FFMpeg based Decoder for BeOS Release 5.
|
||||
/
|
||||
/ Disclaimer: This decoder is based on undocumented APIs.
|
||||
/ Therefore it is likely, if not certain, to break in future
|
||||
/ versions of BeOS. This piece of software is in no way
|
||||
/ connected to or even supported by Be, Inc.
|
||||
/
|
||||
/ Copyright (C) 2001 François Revol. All Rights Reserved.
|
||||
/ Some code from MPEG I Decoder from Carlos Hasan.
|
||||
/ Had some help from Axeld
|
||||
/
|
||||
******************************************************************************/
|
||||
|
||||
|
||||
#ifndef __FF_DECODER_H__
|
||||
#define __FF_DECODER_H__
|
||||
|
||||
#include <MediaFormats.h>
|
||||
#include "ReaderPlugin.h"
|
||||
#include "DecoderPlugin.h"
|
||||
|
||||
//#define DO_PROFILING
|
||||
|
||||
#include "video_util.h"
|
||||
|
||||
struct codec_table { CodecID id; media_type type; media_format_family family; uint32 fourcc; const char *prettyname;};
|
||||
|
||||
extern const struct codec_table gCodecTable[];
|
||||
extern const int num_codecs;
|
||||
extern media_format avcodec_formats[];
|
||||
|
||||
class avCodec : public Decoder
|
||||
{
|
||||
public:
|
||||
avCodec();
|
||||
|
||||
virtual ~avCodec();
|
||||
|
||||
virtual void GetCodecInfo(media_codec_info *mci);
|
||||
|
||||
virtual status_t Setup(media_format *input_format,
|
||||
const void *in_info, int32 in_size);
|
||||
|
||||
virtual status_t NegotiateOutputFormat(media_format *output_format);
|
||||
|
||||
virtual status_t Decode(void *out_buffer, int64 *out_frameCount,
|
||||
media_header *mh, media_decode_info *info);
|
||||
|
||||
virtual status_t Seek(uint32 in_towhat,
|
||||
int64 in_requiredFrame, int64 *inout_frame,
|
||||
bigtime_t in_requiredTime, bigtime_t *inout_time);
|
||||
|
||||
|
||||
protected:
|
||||
media_header fHeader;
|
||||
media_decode_info fInfo;
|
||||
|
||||
friend class avCodecInputStream;
|
||||
|
||||
private:
|
||||
media_format fInputFormat;
|
||||
// media_raw_video_format fOutputFormat;
|
||||
media_raw_video_format fOutputVideoFormat;
|
||||
media_multi_audio_format fOutputAudioFormat;
|
||||
// avCodecInputStream fStream;
|
||||
// FFVideoStream fVideo;
|
||||
int64 fFrame;
|
||||
|
||||
bool isAudio;
|
||||
|
||||
int ffcodec_index_in_table; // helps to find codecpretty
|
||||
|
||||
void *fData;
|
||||
size_t fOffset;
|
||||
int32 fSize;
|
||||
|
||||
// ffmpeg related datas
|
||||
AVCodec *fCodec;
|
||||
AVCodecContext /*fCodecContext,*/ *ffc;
|
||||
// AVPicture ffpicture, opicture;
|
||||
AVFrame *ffpicture, *opicture;
|
||||
|
||||
bool fCodecInitDone;
|
||||
|
||||
|
||||
gfx_convert_func conv_func; // colorspace convert func
|
||||
|
||||
void * fExtraData;
|
||||
int fExtraDataSize;
|
||||
int fBlockAlign;
|
||||
|
||||
bigtime_t fStartTime;
|
||||
int32 fOutputFrameCount;
|
||||
float fOutputFrameRate;
|
||||
|
||||
char * fChunkBuffer;
|
||||
int32 fChunkBufferOffset;
|
||||
int32 fChunkBufferSize;
|
||||
|
||||
char * fOutputBuffer;
|
||||
int32 fOutputBufferOffset;
|
||||
int32 fOutputBufferSize;
|
||||
|
||||
};
|
||||
|
||||
class avCodecPlugin : public DecoderPlugin
|
||||
{
|
||||
public:
|
||||
Decoder * NewDecoder(uint index);
|
||||
status_t GetSupportedFormats(media_format ** formats, size_t * count);
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,139 @@
|
||||
/******************************************************************************
|
||||
/
|
||||
/ File: codectbl.cpp
|
||||
/
|
||||
/ Description: FFMpeg Generic Decoder for BeOS Release 5.
|
||||
/
|
||||
/ Disclaimer: This decoder is based on undocumented APIs.
|
||||
/ Therefore it is likely, if not certain, to break in future
|
||||
/ versions of BeOS. This piece of software is in no way
|
||||
/ connected to or even supported by Be, Inc.
|
||||
/
|
||||
/ Copyright (C) 2001 François Revol. All Rights Reserved.
|
||||
/ Some code from MPEG I Decoder from Carlos Hasan.
|
||||
/ Had some help from Axeld
|
||||
/
|
||||
******************************************************************************/
|
||||
|
||||
#include <MediaDefs.h>
|
||||
|
||||
#include "avcodec.h"
|
||||
|
||||
#define HAS_WMA_AUDIO
|
||||
//#define HAS_MACE_AUDIO
|
||||
//#define HAS_PHOTO_JPEG
|
||||
//#define HAS_MOTION_JPEG
|
||||
|
||||
#define FOURCC(a) B_SWAP_INT32(a)
|
||||
|
||||
const struct codec_table gCodecTable[] = {
|
||||
|
||||
/*
|
||||
{CODEC_ID_PCM_MULAW, B_MEDIA_ENCODED_AUDIO, B_QUICKTIME_FORMAT_FAMILY, 'ulaw', "µLaw"},
|
||||
{CODEC_ID_PCM_MULAW, B_MEDIA_ENCODED_AUDIO, B_WAV_FORMAT_FAMILY, 0x07, "µLaw"},
|
||||
*/
|
||||
#ifdef HAS_MACE_AUDIO
|
||||
{CODEC_ID_MACE3, B_MEDIA_ENCODED_AUDIO, B_QUICKTIME_FORMAT_FAMILY, 'MAC3', "MACE 3:1"},
|
||||
{CODEC_ID_MACE6, B_MEDIA_ENCODED_AUDIO, B_QUICKTIME_FORMAT_FAMILY, 'MAC6', "MACE 6:1"},
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
{CODEC_ID_MP2, B_MEDIA_ENCODED_AUDIO, B_WAV_FORMAT_FAMILY, 0x50, "MPEG Audio Layer 2"}, /* mpeg audio layer 2 */
|
||||
{CODEC_ID_MP2, B_MEDIA_ENCODED_AUDIO, B_WAV_FORMAT_FAMILY, 0x55, "MPEG Audio Layer 3"}, /* mpeg audio layer 3 */
|
||||
#endif
|
||||
|
||||
{CODEC_ID_AC3, B_MEDIA_ENCODED_AUDIO, B_WAV_FORMAT_FAMILY, 0x2000, "AC3 Audio"}, /* AC3 */
|
||||
{CODEC_ID_WMAV1, B_MEDIA_ENCODED_AUDIO, B_WAV_FORMAT_FAMILY, 0x160, "MS WMA v1"},
|
||||
{CODEC_ID_WMAV2, B_MEDIA_ENCODED_AUDIO, B_WAV_FORMAT_FAMILY, 0x161, "MS WMA v2"},
|
||||
|
||||
{CODEC_ID_H263, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('U263'), "U263"},
|
||||
{CODEC_ID_H263, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('H263'), "U263"},
|
||||
// {CODEC_ID_H263P, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('U263'), "U263"},
|
||||
{CODEC_ID_H263I, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('I263'), "Intel H263"}, /* intel h263 */
|
||||
{CODEC_ID_H263, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'h263', "H263"},
|
||||
{CODEC_ID_H263, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'H263', "H263"},
|
||||
|
||||
#ifdef HAS_PHOTO_JPEG
|
||||
{CODEC_ID_MJPEG, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'JPEG', "Photo-JPEG"},
|
||||
{CODEC_ID_MJPEG, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'jpeg', "Photo-JPEG"}, /* used in BeOS_BBC.mov */
|
||||
#endif
|
||||
#ifdef HAS_MOTION_JPEG
|
||||
{CODEC_ID_MJPEG, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('MJPG'), "Motion JPEG"},
|
||||
{CODEC_ID_MJPEG, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'AVDJ', "Motion JPEG"},
|
||||
{CODEC_ID_MJPEG, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'mjpa', "Motion JPEG"},
|
||||
{CODEC_ID_MJPEGB, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'mjpb', "Motion JPEG"},
|
||||
#endif
|
||||
|
||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'DIVX', "MPEG4"}, /* OpenDivX */ /* XXX: doesn't seem to work */
|
||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'divx', "MPEG4"}, /* OpenDivX */
|
||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'mp4v', "MPEG4"}, /* OpenDivX */
|
||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'XVID', "XviD (MPEG4)"}, /* OpenDivX ??? XXX: test */
|
||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('DIVX'), "MPEG4"}, /* OpenDivX */
|
||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('divx'), "MPEG4"}, /* OpenDivX */
|
||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('XVID'), "XviD (MPEG4)"}, /* XVID */
|
||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('xvid'), "XviD (MPEG4)"}, /* XVID */
|
||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('DX50'), "DivX 5 (MPEG4)"}, /* DivX 5.0 */
|
||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('dx50'), "DivX 5 (MPEG4)"}, /* DivX 5.0 */
|
||||
|
||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('\004\0\0\0'), "MPEG4"}, /* some broken avi use this */
|
||||
{CODEC_ID_MSMPEG4V3, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('DIV3'), "DivX ;-) (MS MPEG4 v3)"}, /* default signature when using MSMPEG4 */
|
||||
{CODEC_ID_MSMPEG4V3, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('div3'), "DivX ;-) (MS MPEG4 v3)"},
|
||||
{CODEC_ID_MSMPEG4V3, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('DIV4'), "DivX ;-) (MS MPEG4 v3)"},
|
||||
{CODEC_ID_MSMPEG4V3, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('div4'), "DivX ;-) (MS MPEG4 v3)"},
|
||||
{CODEC_ID_MSMPEG4V1, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('MP41'), "MS MPEG4 v1"}, /* microsoft mpeg4 v1 */
|
||||
{CODEC_ID_MSMPEG4V2, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('MP42'), "MS MPEG4 v2"}, /* seems to be broken */
|
||||
{CODEC_ID_MSMPEG4V3, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('MP43'), "MS MPEG4 v3"}, /* microsoft mpeg4 v3 */
|
||||
{CODEC_ID_MSMPEG4V1, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('MPG4'), "MS MPEG4"},
|
||||
{CODEC_ID_MSMPEG4V3, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('AP41'), "Angel Potion (MS MPEG4 v3)"}, /* AngelPotion 1 (it's so simple to release a new codec... :^) ) */
|
||||
|
||||
{CODEC_ID_WMV1, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('WMV1'), "Microsoft WMV v1"},
|
||||
{CODEC_ID_WMV2, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, FOURCC('WMV2'), "Microsoft WMV v2"},
|
||||
|
||||
//SVQ1
|
||||
{CODEC_ID_SVQ1, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'SVQ1', "Sorenson Video v1"},
|
||||
{CODEC_ID_SVQ1, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'svq1', "Sorenson Video v1"},
|
||||
{CODEC_ID_SVQ1, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'SVQ1', "Sorenson Video v1"},
|
||||
{CODEC_ID_SVQ1, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'svq1', "Sorenson Video v1"},
|
||||
{CODEC_ID_SVQ1, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'svqi', "Sorenson Video v1"}, /* (from QT specs) */
|
||||
|
||||
{CODEC_ID_SVQ3, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'SVQ3', "Sorenson Video v3"},
|
||||
{CODEC_ID_SVQ3, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'svq3', "Sorenson Video v3"},
|
||||
|
||||
/*
|
||||
{CODEC_ID_RV10, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'RV10', "RealVideo v1"},
|
||||
{CODEC_ID_RV10, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'rv10', "RealVideo v1"},
|
||||
{CODEC_ID_RV10, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'RV10', "RealVideo v1"},
|
||||
{CODEC_ID_RV10, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'rv10', "RealVideo v1"},
|
||||
*/
|
||||
{CODEC_ID_DVVIDEO, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'dvsd', "DV Video"},
|
||||
{CODEC_ID_DVVIDEO, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'DVSD', "DV Video"},
|
||||
{CODEC_ID_DVVIDEO, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'dvhd', "DV Video"},
|
||||
{CODEC_ID_DVVIDEO, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'dvsl', "DV Video"},
|
||||
{CODEC_ID_DVVIDEO, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'dv25', "DV Video"},
|
||||
{CODEC_ID_DVVIDEO, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'dvc ', "DV Video"},
|
||||
{CODEC_ID_DVVIDEO, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'dvcp', "DV Video"},
|
||||
|
||||
{CODEC_ID_MPEG1VIDEO, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'MPG1', "MPEG1 Video"},
|
||||
{CODEC_ID_MPEG1VIDEO, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'MPG2', "MPEG1 Video"},
|
||||
{CODEC_ID_MPEG1VIDEO, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'PIM1', "MPEG1 Video"},
|
||||
|
||||
{CODEC_ID_INDEO3, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'iv31', "Indeo 3"},
|
||||
{CODEC_ID_INDEO3, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'iv32', "Indeo 3"},
|
||||
{CODEC_ID_INDEO3, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'IV31', "Indeo 3"},
|
||||
{CODEC_ID_INDEO3, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'IV32', "Indeo 3"},
|
||||
|
||||
{CODEC_ID_VP3, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'VP31', "On2 VP3"},
|
||||
|
||||
{CODEC_ID_CYUV, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'cyuv', "CYUV"},
|
||||
{CODEC_ID_CYUV, B_MEDIA_ENCODED_VIDEO, B_AVI_FORMAT_FAMILY, 'CYUV', "CYUV"},
|
||||
// quite badly handled for now... !?
|
||||
// {CODEC_ID_MPEG1VIDEO, B_MEDIA_ENCODED_VIDEO, B_MPEG_FORMAT_FAMILY, B_MPEG_1_VIDEO},
|
||||
|
||||
{CODEC_ID_NONE, B_MEDIA_UNKNOWN_TYPE, B_ANY_FORMAT_FAMILY, 0, "null codec !!!"}
|
||||
};
|
||||
|
||||
const int num_codecs = (sizeof(gCodecTable) / sizeof(codec_table) - 1);
|
||||
|
||||
|
||||
media_format avcodec_formats[sizeof(gCodecTable)];
|
||||
|
||||
Reference in New Issue
Block a user