]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/apiexample.c
use previous qscale for intra_dc_threshold check
[ffmpeg] / libavcodec / apiexample.c
index 859853808ca5dcd9d65c38ce4156f34f433cf7cf..7fe1c119d40b541bc264ed9f228313d736fa1c27 100644 (file)
@@ -4,7 +4,7 @@
  *
  * Note that this library only handles codecs (mpeg, mpeg4, etc...),
  * not file formats (avi, vob, etc...). See library 'libavformat' for the
  *
  * Note that this library only handles codecs (mpeg, mpeg4, etc...),
  * not file formats (avi, vob, etc...). See library 'libavformat' for the
- * format handling 
+ * format handling
  */
 
 #include <stdlib.h>
  */
 
 #include <stdlib.h>
@@ -21,7 +21,7 @@
 #define INBUF_SIZE 4096
 
 /*
 #define INBUF_SIZE 4096
 
 /*
- * Audio encoding example 
+ * Audio encoding example
  */
 void audio_encode_example(const char *filename)
 {
  */
 void audio_encode_example(const char *filename)
 {
@@ -43,7 +43,7 @@ void audio_encode_example(const char *filename)
     }
 
     c= avcodec_alloc_context();
     }
 
     c= avcodec_alloc_context();
-    
+
     /* put sample parameters */
     c->bit_rate = 64000;
     c->sample_rate = 44100;
     /* put sample parameters */
     c->bit_rate = 64000;
     c->sample_rate = 44100;
@@ -54,7 +54,7 @@ void audio_encode_example(const char *filename)
         fprintf(stderr, "could not open codec\n");
         exit(1);
     }
         fprintf(stderr, "could not open codec\n");
         exit(1);
     }
-    
+
     /* the codec gives us the frame size, in samples */
     frame_size = c->frame_size;
     samples = malloc(frame_size * 2 * c->channels);
     /* the codec gives us the frame size, in samples */
     frame_size = c->frame_size;
     samples = malloc(frame_size * 2 * c->channels);
@@ -66,7 +66,7 @@ void audio_encode_example(const char *filename)
         fprintf(stderr, "could not open %s\n", filename);
         exit(1);
     }
         fprintf(stderr, "could not open %s\n", filename);
         exit(1);
     }
-        
+
     /* encode a single tone sound */
     t = 0;
     tincr = 2 * M_PI * 440.0 / c->sample_rate;
     /* encode a single tone sound */
     t = 0;
     tincr = 2 * M_PI * 440.0 / c->sample_rate;
@@ -89,7 +89,7 @@ void audio_encode_example(const char *filename)
 }
 
 /*
 }
 
 /*
- * Audio decoding. 
+ * Audio decoding.
  */
 void audio_decode_example(const char *outfilename, const char *filename)
 {
  */
 void audio_decode_example(const char *outfilename, const char *filename)
 {
@@ -101,7 +101,7 @@ void audio_decode_example(const char *outfilename, const char *filename)
     uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE], *inbuf_ptr;
 
     printf("Audio decoding\n");
     uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE], *inbuf_ptr;
 
     printf("Audio decoding\n");
-    
+
     /* set end of buffer to 0 (this ensures that no overreading happens for damaged mpeg streams) */
     memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
 
     /* set end of buffer to 0 (this ensures that no overreading happens for damaged mpeg streams) */
     memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
 
@@ -119,7 +119,7 @@ void audio_decode_example(const char *outfilename, const char *filename)
         fprintf(stderr, "could not open codec\n");
         exit(1);
     }
         fprintf(stderr, "could not open codec\n");
         exit(1);
     }
-    
+
     outbuf = malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE);
 
     f = fopen(filename, "rb");
     outbuf = malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE);
 
     f = fopen(filename, "rb");
@@ -132,7 +132,7 @@ void audio_decode_example(const char *outfilename, const char *filename)
         av_free(c);
         exit(1);
     }
         av_free(c);
         exit(1);
     }
-        
+
     /* decode until eof */
     inbuf_ptr = inbuf;
     for(;;) {
     /* decode until eof */
     inbuf_ptr = inbuf;
     for(;;) {
@@ -142,7 +142,7 @@ void audio_decode_example(const char *outfilename, const char *filename)
 
         inbuf_ptr = inbuf;
         while (size > 0) {
 
         inbuf_ptr = inbuf;
         while (size > 0) {
-            len = avcodec_decode_audio(c, (short *)outbuf, &out_size, 
+            len = avcodec_decode_audio(c, (short *)outbuf, &out_size,
                                        inbuf_ptr, size);
             if (len < 0) {
                 fprintf(stderr, "Error while decoding\n");
                                        inbuf_ptr, size);
             if (len < 0) {
                 fprintf(stderr, "Error while decoding\n");
@@ -166,7 +166,7 @@ void audio_decode_example(const char *outfilename, const char *filename)
 }
 
 /*
 }
 
 /*
- * Video encoding example 
+ * Video encoding example
  */
 void video_encode_example(const char *filename)
 {
  */
 void video_encode_example(const char *filename)
 {
@@ -188,23 +188,24 @@ void video_encode_example(const char *filename)
 
     c= avcodec_alloc_context();
     picture= avcodec_alloc_frame();
 
     c= avcodec_alloc_context();
     picture= avcodec_alloc_frame();
-    
+
     /* put sample parameters */
     c->bit_rate = 400000;
     /* resolution must be a multiple of two */
     /* put sample parameters */
     c->bit_rate = 400000;
     /* resolution must be a multiple of two */
-    c->width = 352;  
+    c->width = 352;
     c->height = 288;
     /* frames per second */
     c->time_base= (AVRational){1,25};
     c->gop_size = 10; /* emit one intra frame every ten frames */
     c->max_b_frames=1;
     c->height = 288;
     /* frames per second */
     c->time_base= (AVRational){1,25};
     c->gop_size = 10; /* emit one intra frame every ten frames */
     c->max_b_frames=1;
+    c->pix_fmt = PIX_FMT_YUV420P;
 
     /* open it */
     if (avcodec_open(c, codec) < 0) {
         fprintf(stderr, "could not open codec\n");
         exit(1);
     }
 
     /* open it */
     if (avcodec_open(c, codec) < 0) {
         fprintf(stderr, "could not open codec\n");
         exit(1);
     }
-    
+
     /* the codec gives us the frame size, in samples */
 
     f = fopen(filename, "wb");
     /* the codec gives us the frame size, in samples */
 
     f = fopen(filename, "wb");
@@ -212,13 +213,13 @@ void video_encode_example(const char *filename)
         fprintf(stderr, "could not open %s\n", filename);
         exit(1);
     }
         fprintf(stderr, "could not open %s\n", filename);
         exit(1);
     }
-    
+
     /* alloc image and output buffer */
     outbuf_size = 100000;
     outbuf = malloc(outbuf_size);
     size = c->width * c->height;
     picture_buf = malloc((size * 3) / 2); /* size for YUV 420 */
     /* alloc image and output buffer */
     outbuf_size = 100000;
     outbuf = malloc(outbuf_size);
     size = c->width * c->height;
     picture_buf = malloc((size * 3) / 2); /* size for YUV 420 */
-    
+
     picture->data[0] = picture_buf;
     picture->data[1] = picture->data[0] + size;
     picture->data[2] = picture->data[1] + size / 4;
     picture->data[0] = picture_buf;
     picture->data[1] = picture->data[0] + size;
     picture->data[2] = picture->data[1] + size / 4;
@@ -254,7 +255,7 @@ void video_encode_example(const char *filename)
     /* get the delayed frames */
     for(; out_size; i++) {
         fflush(stdout);
     /* get the delayed frames */
     for(; out_size; i++) {
         fflush(stdout);
-        
+
         out_size = avcodec_encode_video(c, outbuf, outbuf_size, NULL);
         printf("write frame %3d (size=%5d)\n", i, out_size);
         fwrite(outbuf, 1, out_size, f);
         out_size = avcodec_encode_video(c, outbuf, outbuf_size, NULL);
         printf("write frame %3d (size=%5d)\n", i, out_size);
         fwrite(outbuf, 1, out_size, f);
@@ -277,10 +278,10 @@ void video_encode_example(const char *filename)
 }
 
 /*
 }
 
 /*
- * Video decoding example 
+ * Video decoding example
  */
 
  */
 
-void pgm_save(unsigned char *buf,int wrap, int xsize,int ysize,char *filename) 
+void pgm_save(unsigned char *buf,int wrap, int xsize,int ysize,char *filename)
 {
     FILE *f;
     int i;
 {
     FILE *f;
     int i;
@@ -329,7 +330,7 @@ void video_decode_example(const char *outfilename, const char *filename)
         fprintf(stderr, "could not open codec\n");
         exit(1);
     }
         fprintf(stderr, "could not open codec\n");
         exit(1);
     }
-    
+
     /* the codec gives us the frame size, in samples */
 
     f = fopen(filename, "rb");
     /* the codec gives us the frame size, in samples */
 
     f = fopen(filename, "rb");
@@ -337,7 +338,7 @@ void video_decode_example(const char *outfilename, const char *filename)
         fprintf(stderr, "could not open %s\n", filename);
         exit(1);
     }
         fprintf(stderr, "could not open %s\n", filename);
         exit(1);
     }
-    
+
     frame = 0;
     for(;;) {
         size = fread(inbuf, 1, INBUF_SIZE, f);
     frame = 0;
     for(;;) {
         size = fread(inbuf, 1, INBUF_SIZE, f);
@@ -346,7 +347,7 @@ void video_decode_example(const char *outfilename, const char *filename)
 
         /* NOTE1: some codecs are stream based (mpegvideo, mpegaudio)
            and this is the only method to use them because you cannot
 
         /* NOTE1: some codecs are stream based (mpegvideo, mpegaudio)
            and this is the only method to use them because you cannot
-           know the compressed data size before analysing it. 
+           know the compressed data size before analysing it.
 
            BUT some other codecs (msmpeg4, mpeg4) are inherently frame
            based, so you must call them with all the data for one
 
            BUT some other codecs (msmpeg4, mpeg4) are inherently frame
            based, so you must call them with all the data for one
@@ -361,7 +362,7 @@ void video_decode_example(const char *outfilename, const char *filename)
            feed decoder and see if it could decode a frame */
         inbuf_ptr = inbuf;
         while (size > 0) {
            feed decoder and see if it could decode a frame */
         inbuf_ptr = inbuf;
         while (size > 0) {
-            len = avcodec_decode_video(c, picture, &got_picture, 
+            len = avcodec_decode_video(c, picture, &got_picture,
                                        inbuf_ptr, size);
             if (len < 0) {
                 fprintf(stderr, "Error while decoding frame %d\n", frame);
                                        inbuf_ptr, size);
             if (len < 0) {
                 fprintf(stderr, "Error while decoding frame %d\n", frame);
@@ -374,7 +375,7 @@ void video_decode_example(const char *outfilename, const char *filename)
                 /* the picture is allocated by the decoder. no need to
                    free it */
                 snprintf(buf, sizeof(buf), outfilename, frame);
                 /* the picture is allocated by the decoder. no need to
                    free it */
                 snprintf(buf, sizeof(buf), outfilename, frame);
-                pgm_save(picture->data[0], picture->linesize[0], 
+                pgm_save(picture->data[0], picture->linesize[0],
                          c->width, c->height, buf);
                 frame++;
             }
                          c->width, c->height, buf);
                 frame++;
             }
@@ -386,20 +387,20 @@ void video_decode_example(const char *outfilename, const char *filename)
     /* some codecs, such as MPEG, transmit the I and P frame with a
        latency of one frame. You must do the following to have a
        chance to get the last frame of the video */
     /* some codecs, such as MPEG, transmit the I and P frame with a
        latency of one frame. You must do the following to have a
        chance to get the last frame of the video */
-    len = avcodec_decode_video(c, picture, &got_picture, 
+    len = avcodec_decode_video(c, picture, &got_picture,
                                NULL, 0);
     if (got_picture) {
         printf("saving last frame %3d\n", frame);
         fflush(stdout);
                                NULL, 0);
     if (got_picture) {
         printf("saving last frame %3d\n", frame);
         fflush(stdout);
-        
+
         /* the picture is allocated by the decoder. no need to
            free it */
         snprintf(buf, sizeof(buf), outfilename, frame);
         /* the picture is allocated by the decoder. no need to
            free it */
         snprintf(buf, sizeof(buf), outfilename, frame);
-        pgm_save(picture->data[0], picture->linesize[0], 
+        pgm_save(picture->data[0], picture->linesize[0],
                  c->width, c->height, buf);
         frame++;
     }
                  c->width, c->height, buf);
         frame++;
     }
-        
+
     fclose(f);
 
     avcodec_close(c);
     fclose(f);
 
     avcodec_close(c);