mirror of https://git.ffmpeg.org/ffmpeg.git
doc/examples/encode_video: add explanations in comments.
This commit is contained in:
parent
3969c2abfb
commit
1698cd8422
|
@ -155,12 +155,25 @@ int main(int argc, char **argv)
|
||||||
for (i = 0; i < 25; i++) {
|
for (i = 0; i < 25; i++) {
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
||||||
/* make sure the frame data is writable */
|
/* Make sure the frame data is writable.
|
||||||
|
On the first round, the frame is fresh from av_frame_get_buffer()
|
||||||
|
and therefore we know it is writable.
|
||||||
|
But on the next rounds, encode() will have called
|
||||||
|
avcodec_send_frame(), and the codec may have kept a reference to
|
||||||
|
the frame in its internal structures, that makes the frame
|
||||||
|
unwritable.
|
||||||
|
av_frame_make_writable() checks that and allocates a new buffer
|
||||||
|
for the frame only if necessary.
|
||||||
|
*/
|
||||||
ret = av_frame_make_writable(frame);
|
ret = av_frame_make_writable(frame);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
/* prepare a dummy image */
|
/* Prepare a dummy image.
|
||||||
|
In real code, this is where you would have your own logic for
|
||||||
|
filling the frame. FFmpeg does not care what you put in the
|
||||||
|
frame.
|
||||||
|
*/
|
||||||
/* Y */
|
/* Y */
|
||||||
for (y = 0; y < c->height; y++) {
|
for (y = 0; y < c->height; y++) {
|
||||||
for (x = 0; x < c->width; x++) {
|
for (x = 0; x < c->width; x++) {
|
||||||
|
@ -185,7 +198,12 @@ int main(int argc, char **argv)
|
||||||
/* flush the encoder */
|
/* flush the encoder */
|
||||||
encode(c, NULL, pkt, f);
|
encode(c, NULL, pkt, f);
|
||||||
|
|
||||||
/* add sequence end code to have a real MPEG file */
|
/* Add sequence end code to have a real MPEG file.
|
||||||
|
It makes only sense because this tiny examples writes packets
|
||||||
|
directly. This is called "elementary stream" and only works for some
|
||||||
|
codecs. To create a valid file, you usually need to write packets
|
||||||
|
into a proper file format or protocol; see muxing.c.
|
||||||
|
*/
|
||||||
if (codec->id == AV_CODEC_ID_MPEG1VIDEO || codec->id == AV_CODEC_ID_MPEG2VIDEO)
|
if (codec->id == AV_CODEC_ID_MPEG1VIDEO || codec->id == AV_CODEC_ID_MPEG2VIDEO)
|
||||||
fwrite(endcode, 1, sizeof(endcode), f);
|
fwrite(endcode, 1, sizeof(endcode), f);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
Loading…
Reference in New Issue