mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 12:36:41 +08:00 
			
		
		
		
	Merge commit '6d5a6dde5301c81e221a37b3f39bb03149492b98'
* commit '6d5a6dde5301c81e221a37b3f39bb03149492b98': h264_metadata: Add option to delete filler data Fixes #6899. Merged-by: Mark Thompson <sw@jkqxz.net>
This commit is contained in:
		| @@ -63,6 +63,8 @@ typedef struct H264MetadataContext { | ||||
|  | ||||
|     const char *sei_user_data; | ||||
|     int sei_first_au; | ||||
|  | ||||
|     int delete_filler; | ||||
| } H264MetadataContext; | ||||
|  | ||||
|  | ||||
| @@ -346,6 +348,44 @@ static int h264_metadata_filter(AVBSFContext *bsf, AVPacket *out) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (ctx->delete_filler) { | ||||
|         for (i = 0; i < au->nb_units; i++) { | ||||
|             if (au->units[i].type == H264_NAL_FILLER_DATA) { | ||||
|                 // Filler NAL units. | ||||
|                 err = ff_cbs_delete_unit(ctx->cbc, au, i); | ||||
|                 if (err < 0) { | ||||
|                     av_log(bsf, AV_LOG_ERROR, "Failed to delete " | ||||
|                            "filler NAL.\n"); | ||||
|                     goto fail; | ||||
|                 } | ||||
|                 --i; | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             if (au->units[i].type == H264_NAL_SEI) { | ||||
|                 // Filler SEI messages. | ||||
|                 H264RawSEI *sei = au->units[i].content; | ||||
|  | ||||
|                 for (j = 0; j < sei->payload_count; j++) { | ||||
|                     if (sei->payload[j].payload_type == | ||||
|                         H264_SEI_TYPE_FILLER_PAYLOAD) { | ||||
|                         err = ff_cbs_h264_delete_sei_message(ctx->cbc, au, | ||||
|                                                              &au->units[i], j); | ||||
|                         if (err < 0) { | ||||
|                             av_log(bsf, AV_LOG_ERROR, "Failed to delete " | ||||
|                                    "filler SEI message.\n"); | ||||
|                             goto fail; | ||||
|                         } | ||||
|                         // Renumbering might have happened, start again at | ||||
|                         // the same NAL unit position. | ||||
|                         --i; | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     err = ff_cbs_write_packet(ctx->cbc, out, au); | ||||
|     if (err < 0) { | ||||
|         av_log(bsf, AV_LOG_ERROR, "Failed to write packet.\n"); | ||||
| @@ -465,6 +505,9 @@ static const AVOption h264_metadata_options[] = { | ||||
|     { "sei_user_data", "Insert SEI user data (UUID+string)", | ||||
|         OFFSET(sei_user_data), AV_OPT_TYPE_STRING, { .str = NULL } }, | ||||
|  | ||||
|     { "delete_filler", "Delete all filler (both NAL and SEI)", | ||||
|         OFFSET(delete_filler), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1 }, | ||||
|  | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Mark Thompson
					Mark Thompson