[Ffmpeg-devel] Using avcodec.dll and avformat.dll means that output_example.c would not work?

Lars Blumberg Lars.Blumberg
Sat Nov 26 20:08:33 CET 2005


Hello newsgroup!

I am using ffmpeg functionality via the libraries "avcodec.dll" and 
"avformat.dll", which  i have built before. To examine how to use both DLLs 
(in Delphi) I am translating the example code "output_example.c" given with 
the ffmpeg distribution.

The first code which is run is "av_register_all" to register all necessary 
things. When I have a look into the implementation of this method, I see 
that "avcodec_register_all" is called there at first.

But as you know, both methods are in different DLLs. That means, that 
"av_register_all" cannot call "avcodec_register_all". When I only call the 
first function I cannot use any codec. That's why I have to call 
"avcodec_register_all" by myself after calling "av_register_all".

output_example.c:

>>>>
int main(int argc, char **argv)
{
    const char *filename;
    AVOutputFormat *fmt;
    AVFormatContext *oc;
    AVStream *audio_st, *video_st;
    double audio_pts, video_pts;
    int i;

    /* initialize libavcodec, and register all codecs and formats */
    av_register_all();

    if (argc != 2) {
        printf("usage: %s output_file\n"
               "API example program to output a media file with 
libavformat.\n"
               "The output format is automatically guessed according to the 
file extension.\n"
               "Raw images can also be output by using '%%d' in the 
filename\n"
               "\n", argv[0]);
        exit(1);
    }
....
<<<<<

My Delphi variant:
(Don't worry about the data type names, I introduces them to have likely c++ 
names)

>>>>>
function main(filename: PChar): T_int;
var
  fmt: PAVOutputFormat;
  oc: PAVFormatContext;
  audio_st, video_st: PAVStream;
  audio_pts, video_pts: T_double;
  i: T_int;
begin
// initialize libavcodec, and register all codecs and formats
  av_register_all;
  avcodec_register_all;
....
<<<<<

I now have the fears, that are any problems, too, when using both DLLs. 
Because any code assumes, that other code can be called which isn't located 
in the same library.

Is that right or is that the only thing where I have to be careful. Thanks 
for everyone who gives help!

Best regards

Lars 







More information about the ffmpeg-devel mailing list