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:
parent
c5e5c91ff1
commit
3cdff7414f
@ -5,6 +5,8 @@ SetSubDirSupportedPlatformsBeOSCompatible ;
|
||||
UsePrivateHeaders media ;
|
||||
|
||||
SubDirHdrs [ FDirName $(SUBDIR) libavcodec ] ;
|
||||
SubDirHdrs [ FDirName $(SUBDIR) libavutil ] ;
|
||||
SubDirHdrs [ FDirName $(SUBDIR) libswscale ] ;
|
||||
|
||||
Addon avcodec :
|
||||
avcodec.cpp
|
||||
@ -15,8 +17,12 @@ Addon avcodec :
|
||||
gfx_util.cpp
|
||||
:
|
||||
libavcodec.a
|
||||
libavutil.a
|
||||
libswscale.a
|
||||
be
|
||||
libmedia.so
|
||||
;
|
||||
|
||||
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 <Bitmap.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "avcodec.h"
|
||||
|
||||
|
||||
#undef TRACE
|
||||
//#define TRACE_AV_CODEC
|
||||
#define TRACE_AV_CODEC
|
||||
#ifdef TRACE_AV_CODEC
|
||||
# define TRACE(x...) printf(x)
|
||||
#else
|
||||
# define TRACE(x...)
|
||||
#endif
|
||||
|
||||
|
||||
struct wave_format_ex {
|
||||
uint16 format_tag;
|
||||
uint16 channels;
|
||||
@ -57,7 +56,7 @@ avCodec::avCodec()
|
||||
fBlockAlign(0),
|
||||
fOutputBuffer(0)
|
||||
{
|
||||
TRACE("[%c] avCodec::avCodec()\n", isAudio?('a'):('v'));
|
||||
TRACE("avCodec::avCodec()\n");
|
||||
|
||||
// prevent multiple inits
|
||||
static volatile vint32 ff_init_count = 0;
|
||||
@ -113,6 +112,7 @@ avCodec::Setup(media_format *ioEncodedFormat, const void *infoBuffer,
|
||||
return B_ERROR;
|
||||
|
||||
isAudio = (ioEncodedFormat->type == B_MEDIA_ENCODED_AUDIO);
|
||||
TRACE("[%c] avCodec::Setup()\n", isAudio?('a'):('v'));
|
||||
|
||||
if (isAudio && !fOutputBuffer)
|
||||
fOutputBuffer = new char[100000];
|
||||
@ -185,6 +185,13 @@ avCodec::Setup(media_format *ioEncodedFormat, const void *infoBuffer,
|
||||
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;
|
||||
@ -216,8 +223,10 @@ avCodec::Seek(uint32 in_towhat,int64 in_requiredFrame, int64 *inout_frame,
|
||||
status_t
|
||||
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
|
||||
char buffer[1024];
|
||||
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->channels = fInputFormat.u.encoded_audio.output.channel_count;
|
||||
ffc->block_align = fBlockAlign;
|
||||
ffc->extradata = fExtraData;
|
||||
ffc->extradata = (uint8_t *)fExtraData;
|
||||
ffc->extradata_size = fExtraDataSize;
|
||||
|
||||
TRACE("bit_rate %d, sample_rate %d, channels %d, block_align %d, "
|
||||
@ -256,11 +265,11 @@ avCodec::NegotiateOutputFormat(media_format *inout_format)
|
||||
}
|
||||
|
||||
// open new
|
||||
if (avcodec_open(ffc, fCodec) >= 0)
|
||||
fCodecInitDone = true;
|
||||
result = avcodec_open(ffc, fCodec);
|
||||
fCodecInitDone = (result >= 0);
|
||||
|
||||
TRACE("audio: bit_rate = %d, sample_rate = %d, chans = %d\n",
|
||||
ffc->bit_rate, ffc->sample_rate, ffc->channels);
|
||||
TRACE("audio: bit_rate = %d, sample_rate = %d, chans = %d Init = %d\n",
|
||||
ffc->bit_rate, ffc->sample_rate, ffc->channels, result);
|
||||
|
||||
fStartTime = 0;
|
||||
fOutputFrameSize = 2 * outputAudioFormat.channel_count;
|
||||
@ -275,7 +284,12 @@ avCodec::NegotiateOutputFormat(media_format *inout_format)
|
||||
inout_format->require_flags = 0;
|
||||
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
|
||||
|
||||
@ -283,11 +297,11 @@ avCodec::NegotiateOutputFormat(media_format *inout_format)
|
||||
|
||||
ffc->width = fOutputVideoFormat.display.line_width;
|
||||
ffc->height = fOutputVideoFormat.display.line_count;
|
||||
ffc->frame_rate = (int)(fOutputVideoFormat.field_rate
|
||||
* ffc->frame_rate_base);
|
||||
// ffc->frame_rate = (int)(fOutputVideoFormat.field_rate
|
||||
// * ffc->frame_rate_base);
|
||||
|
||||
if (fInputFormat.MetaDataSize() > 0) {
|
||||
ffc->extradata = (void *)fInputFormat.MetaData();
|
||||
ffc->extradata = (uint8_t *)fInputFormat.MetaData();
|
||||
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_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_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
|
||||
{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.
|
||||
/
|
||||
@ -18,7 +18,9 @@
|
||||
|
||||
// BeOS and libavcodec bitmap formats
|
||||
#include <GraphicsDefs.h>
|
||||
#include "libavcodec/avcodec.h"
|
||||
extern "C" {
|
||||
#include "libavcodec/avcodec.h"
|
||||
}
|
||||
|
||||
// this function will be used by the wrapper to write into
|
||||
// the Media Kit provided buffer from the self-allocated ffmpeg codec buffer
|
||||
|
Loading…
x
Reference in New Issue
Block a user