@@ -73,7 +73,7 @@ int prepare_decoder(StreamingContext *sc) {
7373 return 0 ;
7474}
7575
76- int prepare_encoder (StreamingContext * sc , AVCodecContext * decoder_ctx , AVRational input_framerate , StreamingParams sp ) {
76+ int prepare_video_encoder (StreamingContext * sc , AVCodecContext * decoder_ctx , AVRational input_framerate , StreamingParams sp ) {
7777 sc -> video_avs = avformat_new_stream (sc -> avfc , NULL );
7878
7979 char * codec_name = strcmp (sp .video_codec , "x264" ) == 0 ? "libx264" : "libx265" ;
@@ -154,7 +154,7 @@ int remux(AVPacket **pkt, AVFormatContext **avfc, AVRational decoder_tb, AVRatio
154154 return 0 ;
155155}
156156
157- int encode (StreamingContext * decoder , StreamingContext * encoder , AVFrame * input_frame ) {
157+ int encode_video (StreamingContext * decoder , StreamingContext * encoder , AVFrame * input_frame ) {
158158 AVPacket * output_packet = av_packet_alloc ();
159159 if (!output_packet ) {logging ("could not allocate memory for output packet" ); return -1 ;}
160160
@@ -172,7 +172,6 @@ int encode(StreamingContext *decoder, StreamingContext *encoder, AVFrame *input_
172172 output_packet -> stream_index = decoder -> video_index ;
173173 output_packet -> duration = encoder -> video_avs -> time_base .den / encoder -> video_avs -> time_base .num / decoder -> video_avs -> avg_frame_rate .num * decoder -> video_avs -> avg_frame_rate .den ;
174174
175-
176175 av_packet_rescale_ts (output_packet , decoder -> video_avs -> time_base , encoder -> video_avs -> time_base );
177176 response = av_interleaved_write_frame (encoder -> avfc , output_packet );
178177 if (response != 0 ) { logging ("Error %d while receiving packet from decoder: %s" , response , av_err2str (response )); return -1 ;}
@@ -229,7 +228,7 @@ int transcode_audio(StreamingContext *decoder, StreamingContext *encoder, AVPack
229228 return 0 ;
230229}
231230
232- int transcode (StreamingContext * decoder , StreamingContext * encoder , AVPacket * input_packet , AVFrame * input_frame ) {
231+ int transcode_video (StreamingContext * decoder , StreamingContext * encoder , AVPacket * input_packet , AVFrame * input_frame ) {
233232 int response = avcodec_send_packet (decoder -> video_avcc , input_packet );
234233 if (response < 0 ) {logging ("Error while sending packet to decoder: %s" , av_err2str (response )); return response ;}
235234
@@ -243,7 +242,7 @@ int transcode(StreamingContext *decoder, StreamingContext *encoder, AVPacket *in
243242 }
244243
245244 if (response >= 0 ) {
246- if (encode (decoder , encoder , input_frame )) return -1 ;
245+ if (encode_video (decoder , encoder , input_frame )) return -1 ;
247246 }
248247 av_frame_unref (input_frame );
249248 }
@@ -273,7 +272,7 @@ int main(int argc, char *argv[])
273272
274273 if (!sp .copy_video ) {
275274 AVRational input_framerate = av_guess_frame_rate (decoder -> avfc , decoder -> video_avs , NULL );
276- prepare_encoder (encoder , decoder -> video_avcc , input_framerate , sp );
275+ prepare_video_encoder (encoder , decoder -> video_avcc , input_framerate , sp );
277276 } else {
278277 if (prepare_copy (encoder -> avfc , & encoder -> video_avs , decoder -> video_avs -> codecpar )) {return -1 ;}
279278 }
@@ -312,14 +311,15 @@ int main(int argc, char *argv[])
312311 {
313312 if (decoder -> avfc -> streams [input_packet -> stream_index ]-> codecpar -> codec_type == AVMEDIA_TYPE_VIDEO ) {
314313 if (!sp .copy_video ) {
315- if (transcode (decoder , encoder , input_packet , input_frame )) return -1 ;
314+ // TODO: refactor to be generic for audio and video (receiving a function pointer to the differences)
315+ if (transcode_video (decoder , encoder , input_packet , input_frame )) return -1 ;
316316 av_packet_unref (input_packet );
317317 } else {
318318 if (remux (& input_packet , & encoder -> avfc , decoder -> video_avs -> time_base , encoder -> video_avs -> time_base )) return -1 ;
319319 }
320320 } else if (decoder -> avfc -> streams [input_packet -> stream_index ]-> codecpar -> codec_type == AVMEDIA_TYPE_AUDIO ) {
321321 if (!sp .copy_audio ) {
322- transcode_audio (decoder , encoder , input_packet , input_frame );
322+ if ( transcode_audio (decoder , encoder , input_packet , input_frame )) return -1 ;
323323 av_packet_unref (input_packet );
324324 } else {
325325 if (remux (& input_packet , & encoder -> avfc , decoder -> audio_avs -> time_base , encoder -> audio_avs -> time_base )) return -1 ;
@@ -328,7 +328,8 @@ int main(int argc, char *argv[])
328328 logging ("ignoring all non video or audio packets" );
329329 }
330330 }
331- if (encode (decoder , encoder , NULL )) return -1 ;
331+ // TODO: should I also flush the audio encoder?
332+ if (encode_video (decoder , encoder , NULL )) return -1 ;
332333
333334 av_write_trailer (encoder -> avfc );
334335
0 commit comments