Update avcodec to 20080825
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27568 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -5,6 +5,8 @@ SetSubDirSupportedPlatformsBeOSCompatible ;
|
|||||||
UsePrivateHeaders media ;
|
UsePrivateHeaders media ;
|
||||||
|
|
||||||
SubDirHdrs [ FDirName $(SUBDIR) libavcodec ] ;
|
SubDirHdrs [ FDirName $(SUBDIR) libavcodec ] ;
|
||||||
|
SubDirHdrs [ FDirName $(SUBDIR) libavutil ] ;
|
||||||
|
SubDirHdrs [ FDirName $(SUBDIR) libswscale ] ;
|
||||||
|
|
||||||
Addon avcodec :
|
Addon avcodec :
|
||||||
avcodec.cpp
|
avcodec.cpp
|
||||||
@@ -15,8 +17,12 @@ Addon avcodec :
|
|||||||
gfx_util.cpp
|
gfx_util.cpp
|
||||||
:
|
:
|
||||||
libavcodec.a
|
libavcodec.a
|
||||||
|
libavutil.a
|
||||||
|
libswscale.a
|
||||||
be
|
be
|
||||||
libmedia.so
|
libmedia.so
|
||||||
;
|
;
|
||||||
|
|
||||||
SubInclude HAIKU_TOP src add-ons media plugins avcodec libavcodec ;
|
SubInclude HAIKU_TOP src add-ons media plugins avcodec libavcodec ;
|
||||||
|
SubInclude HAIKU_TOP src add-ons media plugins avcodec libavutil ;
|
||||||
|
SubInclude HAIKU_TOP src add-ons media plugins avcodec libswscale ;
|
||||||
|
|||||||
@@ -13,18 +13,17 @@
|
|||||||
#include <OS.h>
|
#include <OS.h>
|
||||||
#include <Bitmap.h>
|
#include <Bitmap.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
|
|
||||||
|
|
||||||
#undef TRACE
|
#undef TRACE
|
||||||
//#define TRACE_AV_CODEC
|
#define TRACE_AV_CODEC
|
||||||
#ifdef TRACE_AV_CODEC
|
#ifdef TRACE_AV_CODEC
|
||||||
# define TRACE(x...) printf(x)
|
# define TRACE(x...) printf(x)
|
||||||
#else
|
#else
|
||||||
# define TRACE(x...)
|
# define TRACE(x...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
struct wave_format_ex {
|
struct wave_format_ex {
|
||||||
uint16 format_tag;
|
uint16 format_tag;
|
||||||
uint16 channels;
|
uint16 channels;
|
||||||
@@ -57,7 +56,7 @@ avCodec::avCodec()
|
|||||||
fBlockAlign(0),
|
fBlockAlign(0),
|
||||||
fOutputBuffer(0)
|
fOutputBuffer(0)
|
||||||
{
|
{
|
||||||
TRACE("[%c] avCodec::avCodec()\n", isAudio?('a'):('v'));
|
TRACE("avCodec::avCodec()\n");
|
||||||
|
|
||||||
// prevent multiple inits
|
// prevent multiple inits
|
||||||
static volatile vint32 ff_init_count = 0;
|
static volatile vint32 ff_init_count = 0;
|
||||||
@@ -113,6 +112,7 @@ avCodec::Setup(media_format *ioEncodedFormat, const void *infoBuffer,
|
|||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
|
|
||||||
isAudio = (ioEncodedFormat->type == B_MEDIA_ENCODED_AUDIO);
|
isAudio = (ioEncodedFormat->type == B_MEDIA_ENCODED_AUDIO);
|
||||||
|
TRACE("[%c] avCodec::Setup()\n", isAudio?('a'):('v'));
|
||||||
|
|
||||||
if (isAudio && !fOutputBuffer)
|
if (isAudio && !fOutputBuffer)
|
||||||
fOutputBuffer = new char[100000];
|
fOutputBuffer = new char[100000];
|
||||||
@@ -185,6 +185,13 @@ avCodec::Setup(media_format *ioEncodedFormat, const void *infoBuffer,
|
|||||||
memcpy(fExtraData, wfmt_data + 1, fExtraDataSize);
|
memcpy(fExtraData, wfmt_data + 1, fExtraDataSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
TRACE("avCodec: extra data size %ld\n",infoSize);
|
||||||
|
fExtraDataSize = infoSize;
|
||||||
|
if (fExtraDataSize) {
|
||||||
|
fExtraData = new char [fExtraDataSize];
|
||||||
|
memcpy(fExtraData, infoBuffer, fExtraDataSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fInputFormat = *ioEncodedFormat;
|
fInputFormat = *ioEncodedFormat;
|
||||||
@@ -216,8 +223,10 @@ avCodec::Seek(uint32 in_towhat,int64 in_requiredFrame, int64 *inout_frame,
|
|||||||
status_t
|
status_t
|
||||||
avCodec::NegotiateOutputFormat(media_format *inout_format)
|
avCodec::NegotiateOutputFormat(media_format *inout_format)
|
||||||
{
|
{
|
||||||
TRACE("[%c] avCodec::Format()\n", isAudio?('a'):('v'));
|
TRACE("[%c] avCodec::NegotiateOutputFormat()\n", isAudio?('a'):('v'));
|
||||||
|
|
||||||
|
int result;
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
string_for_format(*inout_format, buffer, sizeof(buffer));
|
string_for_format(*inout_format, buffer, sizeof(buffer));
|
||||||
@@ -242,7 +251,7 @@ avCodec::NegotiateOutputFormat(media_format *inout_format)
|
|||||||
ffc->sample_rate = (int) fInputFormat.u.encoded_audio.output.frame_rate;
|
ffc->sample_rate = (int) fInputFormat.u.encoded_audio.output.frame_rate;
|
||||||
ffc->channels = fInputFormat.u.encoded_audio.output.channel_count;
|
ffc->channels = fInputFormat.u.encoded_audio.output.channel_count;
|
||||||
ffc->block_align = fBlockAlign;
|
ffc->block_align = fBlockAlign;
|
||||||
ffc->extradata = fExtraData;
|
ffc->extradata = (uint8_t *)fExtraData;
|
||||||
ffc->extradata_size = fExtraDataSize;
|
ffc->extradata_size = fExtraDataSize;
|
||||||
|
|
||||||
TRACE("bit_rate %d, sample_rate %d, channels %d, block_align %d, "
|
TRACE("bit_rate %d, sample_rate %d, channels %d, block_align %d, "
|
||||||
@@ -256,11 +265,11 @@ avCodec::NegotiateOutputFormat(media_format *inout_format)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// open new
|
// open new
|
||||||
if (avcodec_open(ffc, fCodec) >= 0)
|
result = avcodec_open(ffc, fCodec);
|
||||||
fCodecInitDone = true;
|
fCodecInitDone = (result >= 0);
|
||||||
|
|
||||||
TRACE("audio: bit_rate = %d, sample_rate = %d, chans = %d\n",
|
TRACE("audio: bit_rate = %d, sample_rate = %d, chans = %d Init = %d\n",
|
||||||
ffc->bit_rate, ffc->sample_rate, ffc->channels);
|
ffc->bit_rate, ffc->sample_rate, ffc->channels, result);
|
||||||
|
|
||||||
fStartTime = 0;
|
fStartTime = 0;
|
||||||
fOutputFrameSize = 2 * outputAudioFormat.channel_count;
|
fOutputFrameSize = 2 * outputAudioFormat.channel_count;
|
||||||
@@ -275,7 +284,12 @@ avCodec::NegotiateOutputFormat(media_format *inout_format)
|
|||||||
inout_format->require_flags = 0;
|
inout_format->require_flags = 0;
|
||||||
inout_format->deny_flags = B_MEDIA_MAUI_UNDEFINED_FLAGS;
|
inout_format->deny_flags = B_MEDIA_MAUI_UNDEFINED_FLAGS;
|
||||||
|
|
||||||
return fCodecInitDone ? B_OK : B_ERROR;
|
if (!fCodecInitDone) {
|
||||||
|
TRACE("avcodec_open() failed!\n");
|
||||||
|
return B_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
|
|
||||||
} else { // VIDEO
|
} else { // VIDEO
|
||||||
|
|
||||||
@@ -283,11 +297,11 @@ avCodec::NegotiateOutputFormat(media_format *inout_format)
|
|||||||
|
|
||||||
ffc->width = fOutputVideoFormat.display.line_width;
|
ffc->width = fOutputVideoFormat.display.line_width;
|
||||||
ffc->height = fOutputVideoFormat.display.line_count;
|
ffc->height = fOutputVideoFormat.display.line_count;
|
||||||
ffc->frame_rate = (int)(fOutputVideoFormat.field_rate
|
// ffc->frame_rate = (int)(fOutputVideoFormat.field_rate
|
||||||
* ffc->frame_rate_base);
|
// * ffc->frame_rate_base);
|
||||||
|
|
||||||
if (fInputFormat.MetaDataSize() > 0) {
|
if (fInputFormat.MetaDataSize() > 0) {
|
||||||
ffc->extradata = (void *)fInputFormat.MetaData();
|
ffc->extradata = (uint8_t *)fInputFormat.MetaData();
|
||||||
ffc->extradata_size = fInputFormat.MetaDataSize();
|
ffc->extradata_size = fInputFormat.MetaDataSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ const struct codec_table gCodecTable[] = {
|
|||||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'mp4v', "MPEG4 Video"},
|
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'mp4v', "MPEG4 Video"},
|
||||||
{CODEC_ID_MPEG4AAC, B_MEDIA_ENCODED_AUDIO, B_QUICKTIME_FORMAT_FAMILY, 'a4pm', "MPEG4 AAC"},
|
{CODEC_ID_MPEG4AAC, B_MEDIA_ENCODED_AUDIO, B_QUICKTIME_FORMAT_FAMILY, 'a4pm', "MPEG4 AAC"},
|
||||||
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'v4pm', "MPEG4 Video"},
|
{CODEC_ID_MPEG4, B_MEDIA_ENCODED_VIDEO, B_QUICKTIME_FORMAT_FAMILY, 'v4pm', "MPEG4 Video"},
|
||||||
|
{CODEC_ID_MPEG4AAC, B_MEDIA_ENCODED_AUDIO, B_MISC_FORMAT_FAMILY, 'mp4a', "MPEG4 AAC"}, /* For matroska */
|
||||||
|
{CODEC_ID_MPEG4AAC, B_MEDIA_ENCODED_AUDIO, B_MISC_FORMAT_FAMILY, 'a4pm', "MPEG4 AAC"}, /* For matroska */
|
||||||
|
|
||||||
#ifdef HAS_MACE_AUDIO
|
#ifdef HAS_MACE_AUDIO
|
||||||
{CODEC_ID_MACE3, B_MEDIA_ENCODED_AUDIO, B_QUICKTIME_FORMAT_FAMILY, 'MAC3', "MACE 3:1"},
|
{CODEC_ID_MACE3, B_MEDIA_ENCODED_AUDIO, B_QUICKTIME_FORMAT_FAMILY, 'MAC3', "MACE 3:1"},
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
/
|
/
|
||||||
/ File: ffutils.h
|
/ File: gfx_util.h
|
||||||
/
|
/
|
||||||
/ Description: utility functions for ffmpeg codec wrappers for BeOs R5.
|
/ Description: utility functions for ffmpeg codec wrappers for BeOs R5.
|
||||||
/
|
/
|
||||||
@@ -18,7 +18,9 @@
|
|||||||
|
|
||||||
// BeOS and libavcodec bitmap formats
|
// BeOS and libavcodec bitmap formats
|
||||||
#include <GraphicsDefs.h>
|
#include <GraphicsDefs.h>
|
||||||
#include "libavcodec/avcodec.h"
|
extern "C" {
|
||||||
|
#include "libavcodec/avcodec.h"
|
||||||
|
}
|
||||||
|
|
||||||
// this function will be used by the wrapper to write into
|
// this function will be used by the wrapper to write into
|
||||||
// the Media Kit provided buffer from the self-allocated ffmpeg codec buffer
|
// the Media Kit provided buffer from the self-allocated ffmpeg codec buffer
|
||||||
|
|||||||
Reference in New Issue
Block a user