[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avifile] API/ABI break в Дебиан, пр ичинен от yours truly
From: |
Yavor Doganov |
Subject: |
[avifile] API/ABI break в Дебиан, пр ичинен от yours truly |
Date: |
Tue, 01 Dec 2009 16:36:36 +0200 |
User-agent: |
Wanderlust/2.15.6 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (Gojō) APEL/10.7 Emacs/23.1 (i486-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) |
Настъпах котарака много здраво. Направих известни корекции (хирургът
би казал „съществени операции с необратими последствия“) по
изоставения пакет avifile [0], защото мой пакет зависи от него и имаше
доста грешки (3 от които критични). Улисан в изчистването на 14
грешки и в стремежа си да успея да се компилира на всички архитектури
[1] [2] съвсем забравих за промените в публичния интерфейс (напр. в
avifile.h):
class IStream
{
public:
- static const uint_t ERR = ~0U;
- static const uint_t KEYFRAME = 0x00000010L;
+ static const framepos_t ERR = ~0U;
+ static const int KEYFRAME = 0x00000010;
...
- virtual int ReadFrames(void* buffer, uint_t bufsize, uint_t samples,
- uint_t& samples_read, uint_t& bytes_read) =0;
+ virtual int ReadFrames(void* buffer, size_t buffer_size, size_t samples,
+ size_t& samples_read, size_t& bytes_read) =0;
Това със сигурност е чупене на API, но понеже компилирах две обратни
зависимости (cynthiune.app, onscripter) без проблеми, не се притесних.
Уви, такива промени чупят и ABI поне при 64-битовите архитектури (може
би и навсякъде), където size_t не отговаря на uint_t. Късно е вече за
увеличаване на SONAME, защото моята версия вече е в testing. Въпросът
е как да оправя бакията :-(. Докладваха и грешки (FTBFS) за
onscripter [3] и dvr [4]. Отговорникът на onscripter приложи леко
грозна кръпка [5], но все пак с нея пакета му вече се компилира
навсякъде.
Молбата ми е да прегледате приложените (мои) кръпки за onscripter,
cynthiune.app и dvr и да потвърдите, че са читави. Не разбирам почти
нищо от C++ за съжаление, което обяснява донякъде (но не напълно) и
този голям гаф. Ако може да тествате пакетите (компилиране + runtime)
на 64-битова архитектура, ще съм особено благодарен. Cynthiune с
моята кръпка изпълнява [6] без проблеми на i686-linux-gnu.
[0] http://bugs.debian.org/540906
[1] http://packages.qa.debian.org/a/avifile/news/20091103T212148Z.html
[2] http://packages.qa.debian.org/a/avifile/news/20091119T170230Z.html
[3] http://bugs.debian.org/556820
[4] http://bugs.debian.org/556830
[5]
http://patch-tracker.debian.org/patch/series/view/onscripter/0.0.20091115-2/01_fix_FTBFS_AVIWrapper.cpp.patch
[6]
http://samples.mplayerhq.hu/A-codecs/WMA/Bangles%2001%20-%20Walk%20Like%20An%20Egyptian.wma
--- onscripter-0.0.20091115.orig/AVIWrapper.cpp
+++ onscripter-0.0.20091115/AVIWrapper.cpp
@@ -27,6 +27,7 @@
#include <avm_cpuinfo.h>
#include <avm_output.h>
#include <avifile.h>
+#include <version.h>
#include <videodecoder.h>
#include <image.h>
#include <stdlib.h>
@@ -35,8 +36,6 @@
#define DEFAULT_AUDIOBUF 4096
#define AVI_FINISH_EVENT 12345
-#define AVIFILE_VERSION 747
-
AVIWrapper::AVIWrapper()
{
screen_overlay = NULL;
@@ -61,7 +60,7 @@
int AVIWrapper::init( char *filename, bool debug_flag )
{
this->debug_flag = debug_flag;
-#if AVIFILE_VERSION >= 747
+#if AVIFILE_VERSION >= 1839
if ( !debug_flag ) avm::AvmOutput::singleton()->resetDebugLevels(-1);
#else
if ( !debug_flag ) avm::out.resetDebugLevels(-1);
@@ -145,8 +144,13 @@
if ( len == 0 )
status = AVI_STOP;
+#if AVIFILE_VERSION >= 1840
+ size_t ocnt;
+ size_t samples;
+#else
uint_t ocnt;
uint_t samples;
+#endif
uint_t count = 0;
if ( remaining_count > 0 ){
@@ -166,7 +170,16 @@
}
while ( len > 0 && !a_stream->Eof() ){
+#if AVIFILE_VERSION >= 1840
+ {
+ size_t tmp_len = (size_t)len;
+
+ a_stream->ReadFrames( remaining_buffer, tmp_len, tmp_len, samples,
+ ocnt );
+ }
+#else
a_stream->ReadFrames( remaining_buffer, len, len, samples, ocnt );
+#endif
if ( ocnt <= len ){
memcpy( stream+count, remaining_buffer, ocnt );
len -= ocnt;
--- dvr-3.2.orig/dvr-qtgui/QCodecConfigImpl.cpp
+++ dvr-3.2/dvr-qtgui/QCodecConfigImpl.cpp
@@ -41,10 +41,10 @@
{
// const CodecInfo* ci=0;
- avm::vector<CodecInfo>::iterator it_ci;
+ avm::vector<avm::CodecInfo>::iterator it_ci;
for(it_ci=video_codecs.begin(); it_ci!=video_codecs.end(); it_ci++) {
- if(!it_ci->direction & CodecInfo::Encode) continue;
+ if(!it_ci->direction & avm::CodecInfo::Encode) continue;
qlb_codec_list->insertItem(QString(it_ci->GetName()), 0);
if(it_ci->fourcc==compressor) {
qlb_codec_list->setSelected(0, true);
@@ -66,11 +66,11 @@
void QCodecConfigImpl::setVideoCodecName(const string &vcn) {
video_codec_name=vcn;
- avm::vector<CodecInfo>::iterator it_ci;
- CodecInfo::match(0xffffffff, CodecInfo::Video, NULL);
+ avm::vector<avm::CodecInfo>::iterator it_ci;
+ avm::CodecInfo::match(0xffffffff, avm::CodecInfo::Video, NULL);
for(it_ci=video_codecs.begin(); it_ci!=video_codecs.end(); it_ci++) {
- if(!(it_ci->direction & CodecInfo::Encode)) continue;
+ if(!(it_ci->direction & avm::CodecInfo::Encode)) continue;
qlb_codec_list->insertItem(it_ci->GetName(), 0);
if(it_ci->GetName()==video_codec_name) {
compressor=it_ci->fourcc;
@@ -83,7 +83,7 @@
void QCodecConfigImpl::changeCodec() {
// search fot the fourcc of the selected codec
- avm::vector<CodecInfo>::iterator it_ci;
+ avm::vector<avm::CodecInfo>::iterator it_ci;
video_codec_name=(const char*)qlb_codec_list->currentText();
@@ -99,7 +99,7 @@
// attributs list update
qlv_attribute_list->clear();
QListViewItem *a;
- avm::vector<AttributeInfo>::iterator it_a;
+ avm::vector<avm::AttributeInfo>::iterator it_a;
for(it_a=it_ci->encoder_info.begin(); it_a!=it_ci->encoder_info.end();
it_a++) {
QString string_value;
int tmp_int;
@@ -107,28 +107,28 @@
float tmp_float;
switch(it_a->kind) {
- case AttributeInfo::Float:
+ case avm::AttributeInfo::Float:
if(CodecGetAttr(*it_ci, it_a->GetName(), &tmp_float)) {
string_value=null_value;
} else {
string_value=QString::number(double(tmp_float));
}
break;
- case AttributeInfo::Integer :
+ case avm::AttributeInfo::Integer :
if(CodecGetAttr(*it_ci, it_a->GetName(), &tmp_int)) {
string_value=null_value;
} else {
string_value=QString::number(tmp_int);
}
break;
- case AttributeInfo::String:
+ case avm::AttributeInfo::String:
if(CodecGetAttr(*it_ci, it_a->GetName(), &tmp_char)) {
string_value=null_value;
} else {
string_value=tmp_char;
}
break;
- case AttributeInfo::Select:
+ case avm::AttributeInfo::Select:
string_value=null_value;
break;
}
@@ -147,12 +147,12 @@
void QCodecConfigImpl::changeAttribute(QListViewItem *i) {
qle_attribute_value->setText(i->text(1));
- avm::vector<CodecInfo>::iterator it_ci;
+ avm::vector<avm::CodecInfo>::iterator it_ci;
for(it_ci=video_codecs.begin(); it_ci!=video_codecs.end(); it_ci++) {
if(QString::compare(it_ci->GetName(),video_codec_name.c_str())==0) break;
}
- avm::vector<AttributeInfo>::iterator it_a;
+ avm::vector<avm::AttributeInfo>::iterator it_a;
for(it_a=it_ci->encoder_info.begin(); it_a!=it_ci->encoder_info.end();
it_a++) {
if(QString::compare(it_a->GetName(), i->text(0))==0) {
current_attribute_kind=it_a->kind;
@@ -165,22 +165,22 @@
void QCodecConfigImpl::setAttribute() {
if(QString::compare(qle_attribute_value->text(), null_value) &&
QString::compare(qle_attribute_value->text(), "")) {
- avm::vector<CodecInfo>::iterator it_ci;
+ avm::vector<avm::CodecInfo>::iterator it_ci;
for(it_ci=video_codecs.begin(); it_ci!=video_codecs.end();
it_ci++) {
if(QString::compare(it_ci->GetName(),video_codec_name.c_str())==0) break;
}
switch(current_attribute_kind) {
- case AttributeInfo::Float :
+ case avm::AttributeInfo::Float :
CodecSetAttr(*it_ci,
qlv_attribute_list->currentItem()->text(0),
qle_attribute_value->text().toFloat());
break;
- case AttributeInfo::Integer:
+ case avm::AttributeInfo::Integer:
CodecSetAttr(*it_ci,
qlv_attribute_list->currentItem()->text(0),
qle_attribute_value->text().toInt());
break;
- case AttributeInfo::String:
+ case avm::AttributeInfo::String:
CodecSetAttr(*it_ci,
qlv_attribute_list->currentItem()->text(0), qle_attribute_value->text());
break;
- case AttributeInfo::Select:
+ case avm::AttributeInfo::Select:
//don't now what to do
break;
}
--- dvr-3.2.orig/dvr-qtgui/QCodecConfigImpl.h
+++ dvr-3.2/dvr-qtgui/QCodecConfigImpl.h
@@ -45,7 +45,7 @@
protected:
string video_codec_name;
int compressor;
- AttributeInfo::Kind current_attribute_kind;
+ avm::AttributeInfo::Kind current_attribute_kind;
};
#endif // QCODECCONFIGIMPL_H
--- dvr-3.2.orig/lib/dvr.cpp
+++ dvr-3.2/lib/dvr.cpp
@@ -245,7 +245,7 @@
if(video_channel<0 || video_channel>=signed(v4l->videoChannels().size())) {
char tmp[300];
- sprintf(tmp, "invalid channel number, should be less than %d",
v4l->videoChannels().size());
+ sprintf(tmp, "invalid channel number, should be less than %zd",
v4l->videoChannels().size());
error_message=string(tmp);
return false;
}
@@ -576,12 +576,12 @@
// looking for the fourcc of the codec
video_codec=0;
- CodecInfo::match(0xffffffff, CodecInfo::Video, NULL);
+ avm::CodecInfo::match(0xffffffff, avm::CodecInfo::Video, NULL);
try {
- avm::vector<CodecInfo>::iterator it_ci;
+ avm::vector<avm::CodecInfo>::iterator it_ci;
for(it_ci=video_codecs.begin(); it_ci!=video_codecs.end(); it_ci++) {
- if(!(it_ci->direction & CodecInfo::Encode)) continue;
+ if(!(it_ci->direction & avm::CodecInfo::Encode)) continue;
if(it_ci->GetName()==me->video_codec_name) {
video_codec=it_ci->fourcc;
break;
@@ -592,7 +592,7 @@
cerr<<"available video codecs are : "<<endl;
string s;
for(it_ci=video_codecs.begin(); it_ci!=video_codecs.end();
it_ci++) {
- if(!(it_ci->direction & CodecInfo::Encode)) continue;
+ if(!(it_ci->direction & avm::CodecInfo::Encode)) continue;
if(s=="") s=string("'")+it_ci->GetName()+string("'");
else s+=string(", '")+it_ci->GetName()+string("'");
}
2009-12-01 Yavor Doganov <address@hidden>
* Bundles/WindowsMedia.CWMFile.h (WMStreamReadFrames): Adjust
prototype to the new avifile API.
* Bundles/WindowsMedia/CWMFile.cpp: Include <infotypes.h>.
(WMFileAudioStreamCount, WMStreamGetFrameSize): Cast the
result to unsigned int.
(WMStreamReadFrames) <_samplesRead, _bytesRead>: Declare of
type size_t. Amend the call to readStream->ReadFrames
accordingly.
--- cynthiune.app-0.9.5.orig/Bundles/WindowsMedia/CWMFile.cpp
+++ cynthiune.app-0.9.5/Bundles/WindowsMedia/CWMFile.cpp
@@ -26,6 +26,7 @@
#include <fstream>
#include <avifile.h>
+#include <infotypes.h>
#include "CWMFile.h"
@@ -74,7 +75,7 @@
readFile = (avm::IReadFile *) file;
- return readFile->AudioStreamCount ();
+ return (unsigned int) readFile->AudioStreamCount ();
}
WMStream *
@@ -117,7 +118,7 @@
readStream = (avm::IReadStream *) stream;
- return readStream->GetFrameSize ();
+ return (unsigned int) readStream->GetFrameSize ();
}
void
@@ -127,7 +128,7 @@
unsigned int *duration)
{
avm::IReadStream *readStream;
- StreamInfo *streamInfo;
+ avm::StreamInfo *streamInfo;
readStream = (avm::IReadStream *) stream;
streamInfo = readStream->GetStreamInfo ();
@@ -142,10 +143,10 @@
int
WMStreamReadFrames (WMStream *stream,
void *buffer, unsigned int bufferSize,
- unsigned int samples, unsigned int *samplesRead,
- unsigned int *bytesRead)
+ unsigned int samples, size_t *samplesRead,
+ size_t *bytesRead)
{
- unsigned int _samplesRead, _bytesRead;
+ size_t _samplesRead, _bytesRead;
avm::IReadStream *readStream;
int result, eof;
@@ -157,10 +158,13 @@
readStream = (avm::IReadStream *) stream;
while (!result && !_bytesRead)
- result = ((readStream->Eof ())
+ {
+ size_t tmp_bufferSize = (size_t) bufferSize;
+ result = ((readStream->Eof ())
? -1
- : readStream->ReadFrames (buffer, bufferSize, bufferSize,
- _samplesRead, _bytesRead));
+ : readStream->ReadFrames (buffer, tmp_bufferSize, tmp_bufferSize,
+ _samplesRead, _bytesRead));
+ }
*samplesRead = _samplesRead;
*bytesRead = _bytesRead;
--- cynthiune.app-0.9.5.orig/Bundles/WindowsMedia/CWMFile.h
+++ cynthiune.app-0.9.5/Bundles/WindowsMedia/CWMFile.h
@@ -47,8 +47,8 @@
unsigned int *duration);
int WMStreamReadFrames (WMStream *stream,
void *buffer, unsigned int bufferSize,
- unsigned int samples, unsigned *samplesRead,
- unsigned int *bytesRead);
+ unsigned int samples, size_t *samplesRead,
+ size_t *bytesRead);
void WMStreamSeekTime (WMStream *stream, unsigned int position);
#ifdef __cplusplus
- [avifile] API/ABI break в Дебиан, пр ичинен от yours truly,
Yavor Doganov <=